From 128d12892e33e0b46f6e1b1443d5feca54c80699 Mon Sep 17 00:00:00 2001 From: garuda Date: Sat, 24 Jun 2023 19:40:46 +0800 Subject: [PATCH 1/2] Title: Refactor project using TypeScript Description: Convert JavaScript files to TypeScript Update build configuration for TypeScript compilation Add necessary TypeScript dependencies and typings Adjust code to follow TypeScript best practices Ensure all tests pass with the new TypeScript implementation Related issue: #19 --- .babelrc | 16 - .editorconfig | 16 + .env.tpl.js | 11 - .eslintignore | 7 + .eslintrc.json | 63 + .gitignore | 113 +- .prettierrc | 18 + CHANGELOG.md | 9 + README.md | 539 ++- app/.gitkeep | 0 app/level2-book.js | 46 - app/level3-full.js | 46 - app/level3-merge.js | 46 - app/template.js | 166 - env.js | 7 + example/index.js | 198 ++ jest.config.js | 14 + lib/dataType/account.d.ts | 25 + lib/dataType/account.js | 2 + lib/dataType/common.d.ts | 20 + lib/dataType/common.js | 2 + lib/dataType/futuresOrder.d.ts | 36 + lib/dataType/futuresOrder.js | 2 + lib/dataType/market.d.ts | 11 + lib/dataType/market.js | 2 + lib/dataType/order.d.ts | 36 + lib/dataType/order.js | 2 + lib/dataType/other.d.ts | 5 + lib/dataType/other.js | 2 + lib/dataType/socket.d.ts | 8 + lib/dataType/socket.js | 2 + lib/index.d.ts | 229 ++ lib/index.js | 919 +++++ lib/resetAPI/constants.d.ts | 35 + lib/resetAPI/constants.js | 45 + lib/resetAPI/futuresOrder.d.ts | 26 + lib/resetAPI/futuresOrder.js | 139 + lib/resetAPI/index.d.ts | 3 + lib/resetAPI/index.js | 23 + lib/resetAPI/trade/index.d.ts | 2 + lib/resetAPI/trade/index.js | 8 + lib/resetAPI/trade/order.d.ts | 15 + lib/resetAPI/trade/order.js | 105 + lib/tools/constants.d.ts | 6 + lib/tools/constants.js | 9 + lib/tools/request.d.ts | 41 + lib/tools/request.js | 174 + lib/tools/tools.d.ts | 32 + lib/tools/tools.js | 83 + lib/websocket/constants.d.ts | 16 + lib/websocket/constants.js | 22 + lib/websocket/index.d.ts | 3 + lib/websocket/index.js | 23 + lib/websocket/socket.d.ts | 28 + lib/websocket/socket.js | 209 ++ package-lock.json | 3532 +++++++++++++++++++ package.json | 68 +- pm2.tpl.json | 13 - sdk_example/level2-book.js | 61 - src/com/account.js | 37 - src/com/contract.js | 86 - src/com/fee.js | 75 - src/com/level2.js | 205 -- src/com/level3.js | 365 -- src/com/order.js | 257 -- src/com/position.js | 73 - src/com/ticker.js | 60 - src/com/time.js | 28 - src/dataType/account.ts | 37 + src/dataType/common.ts | 22 + src/dataType/index.d.ts | 7 + src/dataType/market.ts | 13 + src/dataType/order.ts | 57 + src/dataType/other.ts | 6 + src/dataType/socket.ts | 9 + src/index.js | 5 - src/index.ts | 897 +++++ src/lib/codes.js | 7 - src/lib/datafeed.js | 351 -- src/lib/delay.js | 11 - src/lib/env.js | 34 - src/lib/http.js | 172 - src/lib/log.js | 81 - src/lib/utils.js | 99 - src/resetAPI/constants.ts | 52 + src/resetAPI/futuresOrder.ts | 174 + src/resetAPI/index.ts | 8 + src/start.js | 21 - src/tools/constants.ts | 8 + src/tools/request.ts | 206 ++ src/tools/tools.ts | 74 + src/websocket/constants.ts | 24 + src/websocket/index.ts | 4 + src/websocket/socket.ts | 229 ++ test/__mocks__/ws.ts | 49 + test/futuresOrder.test.ts | 149 + test/request.test.ts | 158 + test/socket.test.ts | 190 ++ test/tools.test.ts | 64 + tsconfig.json | 71 + yarn.lock | 5819 ++++++++++++++------------------ 101 files changed, 11751 insertions(+), 5882 deletions(-) delete mode 100644 .babelrc create mode 100644 .editorconfig delete mode 100644 .env.tpl.js create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .prettierrc create mode 100644 CHANGELOG.md delete mode 100644 app/.gitkeep delete mode 100644 app/level2-book.js delete mode 100644 app/level3-full.js delete mode 100644 app/level3-merge.js delete mode 100644 app/template.js create mode 100644 env.js create mode 100644 example/index.js create mode 100644 jest.config.js create mode 100644 lib/dataType/account.d.ts create mode 100644 lib/dataType/account.js create mode 100644 lib/dataType/common.d.ts create mode 100644 lib/dataType/common.js create mode 100644 lib/dataType/futuresOrder.d.ts create mode 100644 lib/dataType/futuresOrder.js create mode 100644 lib/dataType/market.d.ts create mode 100644 lib/dataType/market.js create mode 100644 lib/dataType/order.d.ts create mode 100644 lib/dataType/order.js create mode 100644 lib/dataType/other.d.ts create mode 100644 lib/dataType/other.js create mode 100644 lib/dataType/socket.d.ts create mode 100644 lib/dataType/socket.js create mode 100644 lib/index.d.ts create mode 100644 lib/index.js create mode 100644 lib/resetAPI/constants.d.ts create mode 100644 lib/resetAPI/constants.js create mode 100644 lib/resetAPI/futuresOrder.d.ts create mode 100644 lib/resetAPI/futuresOrder.js create mode 100644 lib/resetAPI/index.d.ts create mode 100644 lib/resetAPI/index.js create mode 100644 lib/resetAPI/trade/index.d.ts create mode 100644 lib/resetAPI/trade/index.js create mode 100644 lib/resetAPI/trade/order.d.ts create mode 100644 lib/resetAPI/trade/order.js create mode 100644 lib/tools/constants.d.ts create mode 100644 lib/tools/constants.js create mode 100644 lib/tools/request.d.ts create mode 100644 lib/tools/request.js create mode 100644 lib/tools/tools.d.ts create mode 100644 lib/tools/tools.js create mode 100644 lib/websocket/constants.d.ts create mode 100644 lib/websocket/constants.js create mode 100644 lib/websocket/index.d.ts create mode 100644 lib/websocket/index.js create mode 100644 lib/websocket/socket.d.ts create mode 100644 lib/websocket/socket.js create mode 100644 package-lock.json delete mode 100644 pm2.tpl.json delete mode 100644 sdk_example/level2-book.js delete mode 100644 src/com/account.js delete mode 100644 src/com/contract.js delete mode 100644 src/com/fee.js delete mode 100644 src/com/level2.js delete mode 100644 src/com/level3.js delete mode 100644 src/com/order.js delete mode 100644 src/com/position.js delete mode 100644 src/com/ticker.js delete mode 100644 src/com/time.js create mode 100644 src/dataType/account.ts create mode 100644 src/dataType/common.ts create mode 100644 src/dataType/index.d.ts create mode 100644 src/dataType/market.ts create mode 100644 src/dataType/order.ts create mode 100644 src/dataType/other.ts create mode 100644 src/dataType/socket.ts delete mode 100644 src/index.js create mode 100644 src/index.ts delete mode 100644 src/lib/codes.js delete mode 100644 src/lib/datafeed.js delete mode 100644 src/lib/delay.js delete mode 100644 src/lib/env.js delete mode 100644 src/lib/http.js delete mode 100644 src/lib/log.js delete mode 100644 src/lib/utils.js create mode 100644 src/resetAPI/constants.ts create mode 100644 src/resetAPI/futuresOrder.ts create mode 100644 src/resetAPI/index.ts delete mode 100644 src/start.js create mode 100644 src/tools/constants.ts create mode 100644 src/tools/request.ts create mode 100644 src/tools/tools.ts create mode 100644 src/websocket/constants.ts create mode 100644 src/websocket/index.ts create mode 100644 src/websocket/socket.ts create mode 100644 test/__mocks__/ws.ts create mode 100644 test/futuresOrder.test.ts create mode 100644 test/request.test.ts create mode 100644 test/socket.test.ts create mode 100644 test/tools.test.ts create mode 100644 tsconfig.json diff --git a/.babelrc b/.babelrc deleted file mode 100644 index ae551d8..0000000 --- a/.babelrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "presets": [ - "env", - // "stage-0" - ], - "plugins": [ - ["transform-runtime",{ - "polyfill": false, - "regenerator": true - }], - "add-module-exports", - "transform-decorators-legacy", - "transform-class-properties", - "babel-plugin-transform-object-rest-spread" - ] -} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7e3649a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab diff --git a/.env.tpl.js b/.env.tpl.js deleted file mode 100644 index 5076316..0000000 --- a/.env.tpl.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - log: { - writeFile: true, - logFolder: '', - stdout: false, - }, - key: '[Your api key]', - secret: '[Your api secret]', - passphrase: '[Your api passphrase]', - keyVersion: 2 -} \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..1affdaa --- /dev/null +++ b/.eslintignore @@ -0,0 +1,7 @@ +_tests_/*.js +lib/*.js + +env.js +src/dataTypes/** + +test/* \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..1a99a07 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,63 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true, + "jest": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly", + "require": false, + "export": false, + "import": false + }, + "rules": { + "generator-star-spacing": [0], + "camelcase": [0], + "consistent-return": [0], + "global-require": [0], + "import/prefer-default-export": [0], + "no-underscore-dangle": [0], + "no-else-return": [0], + "no-restricted-syntax": [0], + "no-use-before-define": [0], + "no-nested-ternary": [0], + "arrow-body-style": [0], + "import/extensions": [0], + "max-len": [ + 2, + { + "code": 200, + "tabWidth": 2, + "ignorePattern": "^\\s*[", + "ignoreUrls": true, + "ignoreTemplateLiterals": true, + "ignoreRegExpLiterals": true, + "ignoreComments": true + } + ], + "no-bitwise": [0], + "no-cond-assign": [0], + "import/no-unresolved": [0], + "require-yield": [0], + "no-constant-condition": [0], + "no-console": [0], + "no-script-url": [0], + "no-param-reassign": [0], + "no-restricted-properties": [0], + "no-plusplus": [2, { "allowForLoopAfterthoughts": true }], + "object-curly-newline": [0], + "@typescript-eslint/no-unused-vars": 1 + } +} diff --git a/.gitignore b/.gitignore index d667068..93ffe12 100644 --- a/.gitignore +++ b/.gitignore @@ -1,75 +1,64 @@ -# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so -# Created by https://www.gitignore.io/api/macos,visualstudiocode,git -# Edit at https://www.gitignore.io/?templates=macos,visualstudiocode,git +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip -### Git ### -# Created by git for backups. To disable backups in Git: -# $ git config --global mergetool.keepBackup false -*.orig +# Logs and databases # +###################### +*.log +*.sql +*.sqlite -# Created by git when using merge tools for conflicts -*.BACKUP.* -*.BASE.* -*.LOCAL.* -*.REMOTE.* -*_BACKUP_*.txt -*_BASE_*.txt -*_LOCAL_*.txt -*_REMOTE_*.txt - -### macOS ### -# General +# OS generated files # +###################### .DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails +.DS_Store? ._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd .Spotlight-V100 -.TemporaryItems .Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent +ehthumbs.db +Thumbs.db +~/Desktop + +# Secrets # +########### +.secret -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk +# Node # +######## +node_modules -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json +# Yarn # +######## +*.lock -### VisualStudioCode Patch ### -# Ignore all local history of files -.history +# VSCode # +########## +.vscode -# End of https://www.gitignore.io/api/macos,visualstudiocode,git +# IntelliJ # +########## +.idea -# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) +# code coverage" +coverage -*-error.log -node_modules/ -.env.js -pm2.json -/app/* -!app/.gitkeep -!app/template.js -!app/level3-full.js -!app/level3-merge.js -!app/level2-book.js -/logs -/sdk \ No newline at end of file +./*.js +env.local.js \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..8617c22 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,18 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "quoteProps": "as-needed", + "jsxSingleQuote": false, + "trailingComma": "none", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "always", + "requirePragma": false, + "insertPragma": false, + "proseWrap": "preserve", + "htmlWhitespaceSensitivity": "css", + "endOfLine": "lf" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..029d7f4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +The current SDK has aligned documents to 2023.04.02 + +## [2.0.0](https://github.com/Kucoin/kucoin-futures-node-sdk/compare/v2.0.0...v1.0.3) (2023-06-20) + +### ⚠ BREAKING CHANGES +- Changes in usage +- Method name changes \ No newline at end of file diff --git a/README.md b/README.md index c67755d..2801eb2 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,509 @@ -# Node Helper for KuCoin Futures Strategy -## Usage As Framework Helper: +# KuCoin Futures Node SDK -### Clone and Dep +[![KuCoin Futures Node SDK](https://docs.kucoin.com/futures/images/logo_en.svg)](https://docs.kucoin.com/futures/#introduction) +[![Latest Version](https://img.shields.io/github/release/Kucoin/kucoin-futures-node-sdk.svg?style=flat-square)](https://github.com/Kucoin/kucoin-futures-node-sdk/releases) -1. git clone -2. yarn install +- [KuCoin Futures Node SDK](#kucoin-futures-node-sdk) + - [Installation:](#installation) + - [Usage](#usage) + - [REST API](#rest-api) + - [User](#user) + - [Get Account Overview](#get-account-overview) + - [Get Transaction History](#get-transaction-history) + - [Get Sub-Account Futures API List](#get-sub-account-futures-api-list) + - [Create Futures APIs for Sub-Account](#create-futures-apis-for-sub-account) + - [Modify Sub-Account Futures APIs](#modify-sub-account-futures-apis) + - [Delete Sub-Account Futures APIs](#delete-sub-account-futures-apis) + - [Transfer](#transfer) + - [Transfer to Main or TRADE Account](#transfer-to-main-or-trade-account) + - [Transfer to Futures Account](#transfer-to-futures-account) + - [Get Transfer-Out Request Records](#get-transfer-out-request-records) + - [Trade](#trade) + - [Orders](#orders) + - [Fills](#fills) + - [Positions](#positions) + - [Risk Limit Level](#risk-limit-level) + - [Funding Fees](#funding-fees) + - [Market Data](#market-data) + - [Get Open Contract List](#get-open-contract-list) + - [Get Order Info of the Contract](#get-order-info-of-the-contract) + - [Get Ticker](#get-ticker) + - [Get Full Order Book - Level 2](#get-full-order-book---level-2) + - [Get Part Order Book - Level 2](#get-part-order-book---level-2) + - [Transaction History](#transaction-history) + - [Index](#index) + - [Server Time](#server-time) + - [Server Status](#server-status) + - [Get K Line Data of Contract](#get-k-line-data-of-contract) + - [WebSocket](#websocket) + - [Public Channels](#public-channels) + - [Private Channels](#private-channels) + - [License](#license) -### Env Config -1. Run Command -```sh -# create auth config -copy .env.tpl.js .env.js + +## Installation: + +```js +// Install by npm +npm install kucoin-futures-node-sdk + + +// Install by yarn +yarn add kucoin-futures-node-sdk ``` -2. edit -```javascript -export default { - key: '[Your api key]', - secret: '[Your api secret]', - passphrase: '[Your api passphrase]', - keyVersion: '[Api key version]', // For v2 API-KEY, not required for v1 version -} + +## Usage + +```js +/** Require SDK */ +const KuCoinFutures = require('kucoin-futures-node-sdk'); +const futuresSDK = new KuCoinFutures({ + key: '', // KC-API-KEY + secret: '', // API-Secret + passphrase: '', // KC-API-PASSPHRASE + axiosProps: { // optional + env: 'prod', // default prod + version: '2' // default version 2 + } +}); ``` -### How to run +## REST API + +### User -1. Base Command -```sh -#Sandbox -yarn run dev +#### Get Account Overview -#Online -yarn run prod +```js +futuresSDK.futuresAccount('XBT', console.log); ``` -2. Strategy +#### Get Transaction History -Create [appName].js in /app folder, so it won't be tracked by GIT. And `tempate.js` was already created in /app. +```js +futuresSDK.futuresTransactionHistory( + { + startTime: new Date().getTime() - 7 * 24 * 60 * 60 * 1000, + endTime: new Date().getTime(), + type: 'RealisedPNL', + maxCount: 100, + currency: 'XBT' + }, + console.log +); +``` -3. Run +#### Get Sub-Account Futures API List -```sh -# [appName] is your strategy file name -# default is: template -yarn run dev -- [appName] +```js +futuresSDK.futuresSubApi({ subName: 'testSDK' }, console.log); ``` +#### Create Futures APIs for Sub-Account -## Usage As SDK: +```js +futuresSDK.futuresCreateSubApi( + { + subName: '[subName]', + passphrase: '[passphrase]', + remark: '[remark]' + }, + console.log +); +``` -### build by self -1. Clone; +#### Modify Sub-Account Futures APIs -2. Build; +```js +futuresSDK.futuresUpdateSubApi( + { + subName: '[subName]', + passphrase: '[passphrase]', + apiKey: '[apiKey]' + }, + console.log +); ``` -# install deps -yarn install -# build -yarn run build +#### Delete Sub-Account Futures APIs -# link sdk folder -yarn link +```js +futuresSDK.futureDeleteSubApi( + { + subName: '[subName]', + passphrase: '[passphrase]', + apiKey: '[apiKey]' + }, + console.log +); ``` -### use package +--- + +### Transfer + +#### Transfer to Main or TRADE Account + +```js +futuresSDK.futureTransferOut( + { amount: 0.01, currency: 'USDT', recAccountType: 'MAIN' }, + console.log +); ``` -# use yarn -yarn add kucoin-futures-node-sdk -# or use npm -npm install kucoin-futures-node-sdk +#### Transfer to Futures Account + +```js +futuresSDK.futureTransferIn( + { amount: 0.01, currency: 'USDT', payAccountType: 'MAIN' }, + console.log +); +``` + +#### Get Transfer-Out Request Records + +```js +futuresSDK.futureTransfers( + { + startAt: new Date().getTime() - 7 * 24 * 60 * 60 * 1000, + endAt: new Date().getTime(), + status: 'SUCCESS', + currentPage: 1, + pageSize: 100, + currency: 'USDT' + }, + console.log +); +``` + +--- + +### Trade + +#### Orders + +```js +// Place an Order +// symbol, price, size, leverage = 1, clientOid = uuidV4(), optional + +// Buy Limit Order +futuresSDK.futuresBuy( + { + symbol: 'ETHUSDTM', + price: 10000, + leverage: 5, + size: 1 + // clientOid: uuidV4(), + }, + console.log +); + +// Buy Market Order +futuresSDK.futuresBuy( + { + symbol: 'ETHUSDTM', + leverage: 5, + size: 1 + // clientOid: uuidV4(), + }, + console.log +); + +// Buy Stop Order +futuresSDK.futuresBuy( + { + symbol: 'ETHUSDTM', + price: 10000, + leverage: 5, + size: 1, + // clientOid: uuidV4(), + optional: { + stop: 'up', + stopPriceType: 'TP', + stopPrice: '10000' + // ... + } + }, + console.log +); + +// Sell Order +// futuresSDK.futuresBuy -> futuresSDK.futuresSell +futuresSDK.futuresSell( + { + symbol: 'ETHUSDTM', + price: 20000, + leverage: 5, + size: 1 + // clientOid: uuidV4(), + }, + console.log +); + +// Cancel an Order +futuresSDK.futuresCancel('orderId', console.log); + +// Cancel All Order for Symbol +// limit order +futuresSDK.futuresCancelAllOpenOrders('ETHUSDTM', console.log); +// stop order +futuresSDK.futuresCancelAllStopOrders('ETHUSDTM', console.log); +// or cancelAll limit/stop order for symbol +futuresSDK.futuresCancelAll('ETHUSDTM', console.log); + +// Get Order List +futuresSDK.futuresOpenOrders({ status: 'active' }, console.log); + +// Get Untriggered Stop Order List +futuresSDK.futuresStopOrders({ type: 'limit' }, console.log); + +// Get List of Orders Completed in 24h +futuresSDK.futuresRecentDoneOrders('ETHUSDTM', console.log); +// Or Search All +futuresSDK.futuresRecentDoneOrders('', console.log); + +// Get Details of a Single Order +futuresSDK.futuresOrderDetail({ clientOid: 'clientOid' }, console.log); +// Or By OrderId +futuresSDK.futuresOrderDetail('orderId', console.log); +``` + +#### Fills + +```js +// Get Fills +futuresSDK.futuresFills({ pageSize: 100 }, console.log); + +// Recent Fills +futuresSDK.futuresRecentFills('ETHUSDTM', console.log); +// Or Search All +futuresSDK.futuresRecentFills('', console.log); + +// Active Order Value Calculation +futuresSDK.futuresMarginOpenOrders('ETHUSDTM', console.log); +``` + +#### Positions + +```js +// Get Position Details +futuresSDK.futuresPositionDetail('ETHUSDTM', console.log); + +// Get Position List +futuresSDK.futuresPositions('USDT', console.log); +// Or Search All +futuresSDK.futuresPositions('', console.log); + +// Enable of Auto-Deposit Margin +futuresSDK.futuresPositionAutoDeposit( + { symbol: 'ETHUSDTM', status: true }, + console.log +); +// Disable of Auto-Deposit Margin +futuresSDK.futuresPositionAutoDeposit( + { symbol: 'ETHUSDTM', status: false }, + console.log +); + +// Add Margin Manually +// bizNo default uuidV4() +futuresSDK.futuresPositionMargin( + { + symbol: 'ETHUSDTM', + margin: 0.01 + // bizNo: uuidV4(), + }, + console.log +); +``` + +#### Risk Limit Level + +```js +// Obtain Futures Risk Limit Level +futuresSDK.futuresRiskLimit('ETHUSDTM', console.log); + +// Adjust Risk Limit Level +futuresSDK.futuresChangeRiskLimit( + { symbol: 'ETHUSDTM', level: 2 }, + console.log +); +``` + +#### Funding Fees + +```js +futuresSDK.futuresFundingHistory({ symbol: 'ETHUSDTM' }, console.log); +``` + +--- + +### Market Data + +#### Get Open Contract List + +```js +futuresSDK.futuresContractsActive(console.log); +``` + +#### Get Order Info of the Contract + +```js +futuresSDK.futuresContractDetail('XBTUSDTM', console.log); +``` + +#### Get Ticker + +```js +futuresSDK.futuresTicker('XBTUSDTM', console.log); +``` + +#### Get Full Order Book - Level 2 + +```js +futuresSDK.futuresLevel2('XBTUSDTM', console.log); +``` + +#### Get Part Order Book - Level 2 + +```js +// Get Level2 depth20 +futuresSDK.futuresLevel2Depth20('XBTUSDTM', console.log); + +// Get Level2 depth100 +futuresSDK.futuresLevel2Depth100('XBTUSDTM', console.log); +``` + +#### Transaction History + +```js +futuresSDK.futuresTradeHistory('XBTUSDTM', console.log); +``` + +#### Index + +```js +// Get Interest Rate List +futuresSDK.futuresInterests({ symbol: '.XBTINT' }, console.log); + +// Get Index List +futuresSDK.futuresIndexList({ symbol: '.KXBT' }, console.log); + +// Get Current Mark Price +futuresSDK.futuresMarkPrice('XBTUSDM', console.log); + +// Get Premium Index +futuresSDK.futuresPremiums({ symbol: '.XBTUSDMPI' }, console.log); + +// Get Current Funding Rate +futuresSDK.futuresFundingRate('XBTUSDM', console.log); ``` -### use SDK -There's an example in the /sdk_example folder. +#### Server Time -## TODO +```js +futuresSDK.futuresTimestamp(console.log); +``` + +#### Server Status + +```js +futuresSDK.futuresStatus(console.log); +``` + +#### Get K Line Data of Contract + +```js +futuresSDK.futuresKline( + { + symbol: 'XBTUSDTM', + granularity: 480, + from: new Date().getTime() - 24 * 60 * 60 * 1000, + to: new Date().getTime() + }, + console.log +); +``` + +--- + +## WebSocket + +- Socket implements 59s heartbeat, disconnection retry mechanism +- When calling the provided websocket.x method, the system will create a corresponding socket connection channel based on public or private, and only one connection will be created for each type +- Parameters pass symbols, support passing arrays, and push symbol messages in the arrays +- When the parameter is an array, the length of the array will be automatically cut according to the length of 90 + +> All methods that pass symbols support array format +> The first parameter is symbol and the second parameter is callback. When the parameter does not exist, the first parameter is callback + +### Public Channels + +```js +// +// Get Real-Time Symbol Ticker v2 +futuresSDK.websocket.tickerV2(['ETHUSDTM', 'XBTUSDTM'], console.log); +// Or +futuresSDK.websocket.tickerV2('ETHUSDTM', console.log); + +// Get Real-Time Symbol Ticker +futuresSDK.websocket.ticker(['ETHUSDTM', 'XBTUSDTM']); -- [x] Datafeed -- [x] Logger -- [x] Ticker -- [x] Level2 -- [x] Order -- [x] Orders -- [x] Position -- [x] Account Overview -- [x] Funding Fees -- [x] Time -- [x] Level3 -- [x] Build As SDK +// Level 2 Market Data +futuresSDK.websocket.level2(['ETHUSDTM', 'XBTUSDTM']); + +// Execution data +futuresSDK.websocket.execution(['ETHUSDTM', 'XBTUSDTM']); + +// Message channel for the 5 best ask/bid full data of Level 2 +futuresSDK.websocket.level2Depth5(['ETHUSDTM', 'XBTUSDTM']); + +// Message channel for the 50 best ask/bid full data of Level 2 +futuresSDK.websocket.level2Depth50(['ETHUSDTM', 'XBTUSDTM']); + +// Contract Market Data +// subject --> "mark.index.price" return Mark Price & Index Price +// subject --> "funding.rate" return Funding Rate +futuresSDK.websocket.instrument(['ETHUSDTM', 'XBTUSDTM']); + +// Funding Fee Settlement +// subject --> "funding.begin" return Start Funding Fee Settlement +// subject --> "funding.end" return End Funding Fee Settlement +futuresSDK.websocket.announcement(console.log); + +// Transaction Statistics Timer Event +futuresSDK.websocket.snapshot(['ETHUSDTM', 'XBTUSDTM']); +``` + +### Private Channels + +```js +// Trade Orders - According To The Market +futuresSDK.websocket.tradeOrders(['ETHUSDTM', 'XBTUSDTM'], console.log); +// Or +futuresSDK.websocket.tradeOrders(console.log); + +// Stop Order Lifecycle Event +futuresSDK.websocket.advancedOrders(console.log); + +// Account Balance Events +// subject --> "orderMargin.change" return Order Margin Event +// subject --> "availableBalance.change" return Available Balance Event +// subject --> "withdrawHold.change" return Withdrawal Amount & Transfer-Out Amount Event +futuresSDK.websocket.wallet(console.log); + +// Position Change Events +// subject --> "position.change" return Position Changes Caused Operations +// Position Changes Caused Operations +// -- “marginChange”: margin change; +// -- “positionChange”: position change; +// -- “liquidation”: liquidation; +// -- “autoAppendMarginStatusChange”: auto-deposit-status change; +// -- “adl”: adl; +// Position Changes Caused by Mark Price +// subject --> "position.settlement" return Funding Settlement +futuresSDK.websocket.position(['ETHUSDTM', 'XBTUSDTM']); +``` ## License diff --git a/app/.gitkeep b/app/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/app/level2-book.js b/app/level2-book.js deleted file mode 100644 index e4decf2..0000000 --- a/app/level2-book.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * An example level2 test - */ -import _ from 'lodash'; -import logUpdate from 'log-update'; -import http from '../src/lib/http'; -import Level2 from '../src/com/level2'; -import { getEnv } from '../src/lib/env'; - -const SYMBOL = 'XBTUSDM'; - -async function main() { - // set account api keys - http.setSignatureConfig(getEnv()); - - const l2 = new Level2(SYMBOL); - l2.listen(); - - l2.handleMessageEvent(() => { - // read orderbook - const orderbook = l2.getOrderBook(5); - - // show Level2 - let asksStr = ''; - _.eachRight(orderbook.asks, ([price, size]) => { - asksStr += `${price} -> ${size}\n`; - }); - - let bidsStr = ''; - _.each(orderbook.bids, ([price, size]) => { - bidsStr += `${price} -> ${size}\n`; - }); - - logUpdate.clear(); - logUpdate(`------------------------\n` + - `l2 ${orderbook.dirty ? 'Dirty Data' : 'Trust Data'}\n` + - `l2 seq: ${orderbook.sequence}\n` + - `ping: ${orderbook.ping} (ms)\n` + - `------------------------\n` + - `${asksStr}----------sep-----------\n` + - `${bidsStr}------------------------` - ); - }); -} - -main(); diff --git a/app/level3-full.js b/app/level3-full.js deleted file mode 100644 index 31b536a..0000000 --- a/app/level3-full.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * An example level3 test - */ -import _ from 'lodash'; -import logUpdate from 'log-update'; -import http from '../src/lib/http'; -import Level3 from '../src/com/level3'; -import { getEnv } from '../src/lib/env'; - -const SYMBOL = 'XBTUSDM'; - -async function main() { - // set account api keys - http.setSignatureConfig(getEnv()); - - const l3 = new Level3(SYMBOL); - l3.listen(); - - const interval = setInterval(async () => { - // read orderbook - const orderbook = l3.getDetailOrderBook(10); - - // show Level3 - let asksStr = ''; - _.eachRight(orderbook.asks, ([price, size, ts, orderId]) => { - asksStr += `${price} -> ${size} ${ts} ${orderId}\n`; - }); - - let bidsStr = ''; - _.each(orderbook.bids, ([price, size, ts, orderId]) => { - bidsStr += `${price} -> ${size} ${ts} ${orderId}\n`; - }); - - logUpdate.clear(); - logUpdate(`------------------------\n` + - `l3 ${orderbook.dirty ? 'Dirty Data' : 'Trust Data'}\n` + - `l3 seq: ${orderbook.sequence}\n` + - `ping: ${orderbook.ping} (ms)\n` + - `------------------------\n` + - `${asksStr}----------sep-----------\n` + - `${bidsStr}------------------------` - ); - }, 200); -} - -main(); diff --git a/app/level3-merge.js b/app/level3-merge.js deleted file mode 100644 index 1f1a8c7..0000000 --- a/app/level3-merge.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * An example level3 test - */ -import _ from 'lodash'; -import logUpdate from 'log-update'; -import http from '../src/lib/http'; -import Level3 from '../src/com/level3'; -import { getEnv } from '../src/lib/env'; - -const SYMBOL = 'XBTUSDM'; - -async function main() { - // set account api keys - http.setSignatureConfig(getEnv()); - - const l3 = new Level3(SYMBOL); - l3.listen(); - - const interval = setInterval(async () => { - // read orderbook - const orderbook = l3.getOrderBook(5); - - // show Level3 - let asksStr = ''; - _.eachRight(orderbook.asks, ([price, [size, orderIdMp]]) => { - asksStr += `${price} -> ${size} -> ${JSON.stringify(Object.keys(orderIdMp))}\n`; - }); - - let bidsStr = ''; - _.each(orderbook.bids, ([price, [size, orderIdMp]]) => { - bidsStr += `${price} -> ${size} -> ${JSON.stringify(Object.keys(orderIdMp))}\n`; - }); - - logUpdate.clear(); - logUpdate(`------------------------\n` + - `l3 ${orderbook.dirty ? 'Dirty Data' : 'Trust Data'}\n` + - `l3 seq: ${orderbook.sequence}\n` + - `ping: ${orderbook.ping} (ms)\n` + - `------------------------\n` + - `${asksStr}----------sep-----------\n` + - `${bidsStr}------------------------` - ); - }, 200); -} - -main(); diff --git a/app/template.js b/app/template.js deleted file mode 100644 index 905e6c0..0000000 --- a/app/template.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * An example strategy template - */ -import _ from 'lodash'; -// import Koa from 'koa'; -// import bodyParser from 'koa-bodyparser'; -import logUpdate from 'log-update'; -import http from '../src/lib/http'; -import Datafeed from '../src/lib/datafeed'; -import { mergeDepth, targetTypesMap } from '../src/lib/utils'; -import log from '../src/lib/log'; -// import Ticker from '../src/com/ticker'; -import Level2 from '../src/com/level2'; -import Order from '../src/com/order'; -// import Position from '../src/com/position'; -// import Account from '../src/com/account'; -// import Fee from '../src/com/fee'; -// import Time from '../src/com/time'; -// import Contract from '../src/com/contract'; -// import Level3 from '../src/com/level3'; -import { getEnv } from '../src/lib/env'; - -const env = getEnv(); -const SYMBOL = 'XBTUSDM'; - -async function main() { - // const app = new Koa(); - // app.use(bodyParser); - // app.listen(8090); - - // set account api keys - http.setSignatureConfig(env); - - // const account = new Account(); - // const position = new Position(SYMBOL); - - // const acc = await account.getOverview(); - // log('acc', acc); - // const pos = await position.getPosition(); - // log('pos', pos); - // return; - - // const time = new Time(); - // const fee = new Fee(SYMBOL); - - // const ts = await time.getTimestamp(); - // log('ts', ts); - // const fees = await fee.getFundingHistory(); - // log('fees', fees); - // return; - - // const ct = new Contract(SYMBOL); - // const ctd = await ct.getOverview(); - // log('ctd', ctd); - // return; - - // const l3 = new Level3(SYMBOL); - // l3.listen(); - // return; - - // use single private datafeed - const datafeed = new Datafeed(true); - - // const ticker = new Ticker(SYMBOL, datafeed); - // ticker.listen(); - - const l2 = new Level2(SYMBOL, datafeed); - l2.listen(); - - const order = new Order(SYMBOL, 5); - let orderCommitting = false; - const orderTransaction = async (priceSell, priceBuy) => { - if (orderCommitting) { - log('orderTransaction orderCommitting'); - return; - } - orderCommitting = true; - - log(`orderTransaction`, priceSell, priceBuy); - const size = 10; - const sellOrderSuccess = await order.limitOrder(priceSell, size, 'sell', { postOnly: true }); - const buyOrderSuccess = await order.limitOrder(priceBuy, size, 'buy', { postOnly: true }); - - if (!sellOrderSuccess || !buyOrderSuccess) { - const r = await order.cancleAllOrders(); - log('cancel all orders', sellOrderSuccess, buyOrderSuccess, r); - } - - orderCommitting = false; - }; - - const interval = setInterval(async () => { - // read orderbook - const orderbook = l2.getOrderBook(5); - // get active orders - const orderData = await order.getActiveOrders(); - - // Ticker - // const tickerWS = ticker.getSnapshot(); - // const currentTicker = tickerWS.data; - // ticker ${tickerWS.dirty ? 'Dirty Data' : 'Trust Data'} - // ticker: ${currentTicker.price} -> ${currentTicker.size} - // bestBid: ${currentTicker.bestBidPrice},${currentTicker.bestBidSize} - // bestAsk: ${currentTicker.bestAskPrice},${currentTicker.bestAskSize} - - // template strategy - const mapOrderToL2 = { asks: {}, bids: {} }; - if (orderbook.dirty === false) { - if (orderData.totalNum > 0) { - _.each(orderData.items, ({ symbol, price, side, size, type }) => { - if (symbol === SYMBOL) { - const targetSide = targetTypesMap[side]; - if (_.indexOf(['asks', 'bids'], targetSide) > -1) { - mapOrderToL2[targetSide][mergeDepth(price, targetSide)] = [size, type]; - } - } - }); - } else - if (orderData.totalNum === 0) { - const asksFirst = orderbook.asks[0]; - const bidsFirst = orderbook.bids[0]; - if (asksFirst && bidsFirst) { - if (asksFirst[0] - bidsFirst[0] > 5) { - orderTransaction(asksFirst[0], bidsFirst[0]); - } - } - } - } - - // show Level2 - let asksStr = ''; - _.eachRight(orderbook.asks, ([price, size]) => { - const orderFind = mapOrderToL2.asks[price]; - let str = ''; - if (orderFind) { - const [size, type] = orderFind; - str = `@${size}, ${type}`; - } - asksStr += `${price} -> ${size} ${str}\n`; - }); - - let bidsStr = ''; - _.each(orderbook.bids, ([price, size]) => { - const orderFind = mapOrderToL2.bids[price]; - let str = ''; - if (orderFind) { - const [size, type] = orderFind; - str = `@${size}, ${type}`; - } - bidsStr += `${price} -> ${size} ${str}\n`; - }); - - logUpdate.clear(); - logUpdate(`------------------------\n` + - `l2 ${orderbook.dirty ? 'Dirty Data' : 'Trust Data'}\n` + - `l2 seq: ${orderbook.sequence}\n` + - `ping: ${orderbook.ping} (ms)\n` + - `order: ${orderData.totalNum} (count)\n` + - `------------------------\n` + - `${asksStr}----------sep-----------\n` + - `${bidsStr}------------------------` - ); - }, 400); -} - -main(); diff --git a/env.js b/env.js new file mode 100644 index 0000000..71e5229 --- /dev/null +++ b/env.js @@ -0,0 +1,7 @@ +const env = { + key: '', + secret: '', + passphrase: '', +}; + +module.exports = env; diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..5c122fc --- /dev/null +++ b/example/index.js @@ -0,0 +1,198 @@ +const KuCoinFutures = require('../lib/index').default; + +const futuresSDK = new KuCoinFutures({ + key: '[Your key]', + secret: '[Your secret]', + passphrase: '[Your passphrase]' +}); + +futuresSDK.futuresTimestamp(console.log); + +futuresSDK.futuresStatus(console.log); + +// futuresSDK.futuresAccount('USDT', console.log); + +// futuresSDK.futuresBuy( +// { +// symbol: 'ETHUSDTM', +// price: 10000, +// leverage: 5, +// size: 1, +// optional: { +// stop: 'up', +// stopPriceType: 'TP', +// stopPrice: '10000' +// } +// }, +// console.log +// ); + +// futuresSDK.futuresSell( +// { +// symbol: 'ETHUSDTM', +// price: 20000, +// leverage: 5, +// size: 1, +// // clientOid: uuidV4(), +// optional: { +// remark: 'test', +// stop: 'up', +// stopPriceType: 'TP', +// stopPrice: '20000', +// // ... +// } +// }, +// console.log +// ); + +// futuresSDK.futuresCancel('orderId', console.log); + +// futuresSDK.futuresCancelAllOpenOrders('ETHUSDTM', console.log); + +// futuresSDK.futuresCancelAllStopOrders('ETHUSDTM', console.log); + +// futuresSDK.futuresCancelAll('ETHUSDTM', console.log); + +// futuresSDK.futuresOpenOrders({ status: 'done' }, console.log); + +// futuresSDK.futuresStopOrders({ type: 'market' }, console.log); + +// futuresSDK.futuresRecentDoneOrders('', console.log); + +// futuresSDK.futuresOrderDetail({ clientOid: 'clientOid' }, console.log); + +// futuresSDK.futuresOrderDetail('orderId', console.log); + +// futuresSDK.futuresTransactionHistory( +// { +// startTime: new Date().getTime() - 7 * 24 * 60 * 60 * 1000, +// endTime: new Date().getTime(), +// type: 'RealisedPNL', +// maxCount: 100, +// currency: 'USDT' +// }, +// console.log +// ); + +futuresSDK.futuresSubApi({ subName: 'khan002' }, console.log); + +// futuresSDK.futuresCreateSubApi( +// { +// subName: '', +// passphrase: '', +// remark: '', +// }, +// console.log +// ); + +// futuresSDK.futureTransferOut( +// { amount: 0.01, currency: 'USDT', recAccountType: 'MAIN' }, +// console.log +// ); + +// futuresSDK.futureTransferIn( +// { amount: 0.01, currency: 'USDT', payAccountType: 'MAIN' }, +// console.log +// ); + +// futuresSDK.futureTransfers( +// { +// startAt: new Date().getTime() - 7 * 24 * 60 * 60 * 1000, +// endAt: new Date().getTime(), +// status: 'SUCCESS', +// currentPage: 1, +// pageSize: 100, +// currency: 'USDT' +// }, +// console.log +// ); + +// futuresSDK.futuresFills({ pageSize: 100 }, console.log); + +// futuresSDK.futuresRecentFills('ETHUSDTM', console.log); + +// futuresSDK.futuresRecentFills('', console.log); + +// futuresSDK.futuresMarginOpenOrders('ETHUSDTM', console.log); + +// futuresSDK.futuresPositionDetail('ETHUSDTM', console.log); + +// futuresSDK.futuresPositions('', console.log); + +// futuresSDK.futuresPositionAutoDeposit({ symbol: 'ETHUSDTM', status: true }, console.log); + +// futuresSDK.futuresPositionAutoDeposit({ symbol: 'ETHUSDTM', status: false }, console.log); + +// futuresSDK.futuresPositionMargin( +// { +// symbol: 'ETHUSDTM', +// margin: 0.01 +// // bizNo: uuidV4(), +// }, +// console.log +// ); + +// futuresSDK.futuresRiskLimit('ETHUSDTM', console.log); + +// futuresSDK.futuresChangeRiskLimit( +// { symbol: 'ETHUSDTM', level: 2 }, +// console.log +// ); + +// futuresSDK.futuresFundingHistory({ symbol: 'ETHUSDTM' }, console.log); + +// futuresSDK.futuresMarkPrice('XBTUSDTM', console.log); + +// futuresSDK.futuresContractsActive(console.log); + +// futuresSDK.futuresContractDetail('XBTUSDTM', console.log); + +// futuresSDK.futuresTicker('XBTUSDTM', console.log); + +// futuresSDK.futuresLevel2('XBTUSDTM', console.log); + +// futuresSDK.futuresLevel2Depth20('XBTUSDTM', console.log); + +// futuresSDK.futuresLevel2Depth100('XBTUSDTM', console.log); + +// futuresSDK.futuresTradeHistory('XBTUSDTM', console.log); + +// futuresSDK.futuresInterests({ symbol: '.XBTINT' }, console.log); + +// futuresSDK.futuresIndexList({ symbol: '.KXBT' }, console.log); + +// futuresSDK.futuresMarkPrice('XBTUSDM', console.log); + +// futuresSDK.futuresPremiums({ symbol: '.XBTUSDMPI' }, console.log); + +// futuresSDK.futuresFundingRate('XBTUSDM', console.log); + +// futuresSDK.futuresKline( +// { +// symbol: 'XBTUSDTM', +// granularity: 480, +// from: new Date().getTime() - 24 * 60 * 60 * 1000, +// to: new Date().getTime() +// }, +// console.log +// ); + +// === websocket === // + +// futuresSDK.websocket.ticker(['ETHUSDTM', 'XBTUSDTM']); + +// futuresSDK.websocket.level2(['ETHUSDTM', 'XBTUSDTM']); + +// futuresSDK.websocket.execution(['ETHUSDTM', 'XBTUSDTM']); + +// futuresSDK.websocket.announcement(); + +// futuresSDK.websocket.snapshot('ETHUSDTM'); + +// futuresSDK.websocket.tradeOrders(); + +// futuresSDK.websocket.advancedOrders(); + +// futuresSDK.websocket.wallet(); + +// futuresSDK.websocket.position(['ETHUSDTM', 'LINAUSDTM']); diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..0a8c081 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + verbose: true, + preset: 'ts-jest', + testEnvironment: 'node', + globals: { + window: true, + 'ts-jest': { + isolatedModules: true, + }, + }, + testPathIgnorePatterns: ['/node_modules/', '/lib/'], + testRegex: '^.+\\.test\\.(js|ts)$', + moduleFileExtensions: ['js', 'ts'], +}; diff --git a/lib/dataType/account.d.ts b/lib/dataType/account.d.ts new file mode 100644 index 0000000..e5084e6 --- /dev/null +++ b/lib/dataType/account.d.ts @@ -0,0 +1,25 @@ +import { PageOffsetParams, PageSizeParams } from './common'; +export type TransactionType = 'RealisedPNL' | 'Deposit' | 'Withdrawal' | 'TransferIn' | 'TransferOut'; +export interface TransactionHistoryParams extends PageOffsetParams { + type?: TransactionType; + currency?: string; +} +export interface SubApiParams { + subName: string; + passphrase: string; + permission?: string; + ipWhitelist?: string; + expire?: string; +} +export interface CreateSubApiParams extends SubApiParams { + remark: string; +} +export interface UpdateSubApiParams extends SubApiParams { + apiKey: string; +} +export type TransferStatusType = 'PROCESSING' | 'SUCCESS' | 'FAILURE'; +export interface TransferListParams extends PageSizeParams { + status?: TransferStatusType; + queryStatus?: TransferStatusType; + currency?: string; +} diff --git a/lib/dataType/account.js b/lib/dataType/account.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/account.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/common.d.ts b/lib/dataType/common.d.ts new file mode 100644 index 0000000..1abef57 --- /dev/null +++ b/lib/dataType/common.d.ts @@ -0,0 +1,20 @@ +export interface MakeRequestParams { + body?: object | string; + method: string; + endpoint: string; + callback?: Function; + isPrivate?: boolean; +} +export interface PageOffsetParams { + startAt?: string; + endAt?: string; + offset?: number; + forward?: boolean | true; + maxCount?: number; +} +export interface PageSizeParams { + startAt?: string; + endAt?: string; + pageSize?: number; + currentPage?: number; +} diff --git a/lib/dataType/common.js b/lib/dataType/common.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/common.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/futuresOrder.d.ts b/lib/dataType/futuresOrder.d.ts new file mode 100644 index 0000000..60f709d --- /dev/null +++ b/lib/dataType/futuresOrder.d.ts @@ -0,0 +1,36 @@ +import { PageSizeParams } from './common'; +export type BaseOrderType = 'limit' | 'market'; +export type OrderType = 'limit' | 'market' | 'limit_stop' | 'market_stop'; +export type OrderOptionalParamsType = 'type' | 'remark' | 'stop' | 'stopPriceType' | 'stopPrice' | 'reduceOnly' | 'closeOrder' | 'forceHold' | 'timeInForce' | 'postOnly' | 'hidden' | 'iceberg' | 'visibleSize'; +export type OptionalParamsObject = { + [P in T]?: any; +}; +export interface BaseOrderBody { + symbol: string; + size: number; + leverage?: number; + clientOid?: string; + optional?: OptionalParamsObject; +} +export interface OrderBody extends BaseOrderBody { + side: string; + price?: number | string; +} +export type OpenOrderStatusType = 'active' | 'done'; +export interface OpenOrderListParams extends PageSizeParams { + status?: OpenOrderStatusType; + symbol?: string; + side?: string; + type?: OrderType; +} +export interface StopOrderListParams extends PageSizeParams { + symbol?: string; + side?: string; + type?: BaseOrderType; +} +export interface FillsParams extends PageSizeParams { + orderId?: string; + symbol?: string; + side?: string; + type?: OrderType; +} diff --git a/lib/dataType/futuresOrder.js b/lib/dataType/futuresOrder.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/futuresOrder.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/market.d.ts b/lib/dataType/market.d.ts new file mode 100644 index 0000000..d181e82 --- /dev/null +++ b/lib/dataType/market.d.ts @@ -0,0 +1,11 @@ +import { PageOffsetParams } from './common'; +export interface klineParams { + symbol: string; + granularity: number; + from?: string; + to?: string; +} +export interface IndexListParams extends PageOffsetParams { + symbol: string; + reverse?: boolean | true; +} diff --git a/lib/dataType/market.js b/lib/dataType/market.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/market.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/order.d.ts b/lib/dataType/order.d.ts new file mode 100644 index 0000000..60f709d --- /dev/null +++ b/lib/dataType/order.d.ts @@ -0,0 +1,36 @@ +import { PageSizeParams } from './common'; +export type BaseOrderType = 'limit' | 'market'; +export type OrderType = 'limit' | 'market' | 'limit_stop' | 'market_stop'; +export type OrderOptionalParamsType = 'type' | 'remark' | 'stop' | 'stopPriceType' | 'stopPrice' | 'reduceOnly' | 'closeOrder' | 'forceHold' | 'timeInForce' | 'postOnly' | 'hidden' | 'iceberg' | 'visibleSize'; +export type OptionalParamsObject = { + [P in T]?: any; +}; +export interface BaseOrderBody { + symbol: string; + size: number; + leverage?: number; + clientOid?: string; + optional?: OptionalParamsObject; +} +export interface OrderBody extends BaseOrderBody { + side: string; + price?: number | string; +} +export type OpenOrderStatusType = 'active' | 'done'; +export interface OpenOrderListParams extends PageSizeParams { + status?: OpenOrderStatusType; + symbol?: string; + side?: string; + type?: OrderType; +} +export interface StopOrderListParams extends PageSizeParams { + symbol?: string; + side?: string; + type?: BaseOrderType; +} +export interface FillsParams extends PageSizeParams { + orderId?: string; + symbol?: string; + side?: string; + type?: OrderType; +} diff --git a/lib/dataType/order.js b/lib/dataType/order.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/order.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/other.d.ts b/lib/dataType/other.d.ts new file mode 100644 index 0000000..fd3c291 --- /dev/null +++ b/lib/dataType/other.d.ts @@ -0,0 +1,5 @@ +import { PageOffsetParams } from './common'; +export interface FundingHistoryParams extends PageOffsetParams { + symbol: string; + reverse?: boolean | true; +} diff --git a/lib/dataType/other.js b/lib/dataType/other.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/other.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/dataType/socket.d.ts b/lib/dataType/socket.d.ts new file mode 100644 index 0000000..5bdcc45 --- /dev/null +++ b/lib/dataType/socket.d.ts @@ -0,0 +1,8 @@ +export type Callback = (data: any) => void; +export interface Subscription { + id: string; + callback: Callback; + topic: string; + privateChannel: boolean; + strict?: boolean; +} diff --git a/lib/dataType/socket.js b/lib/dataType/socket.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/lib/dataType/socket.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 0000000..eef364d --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,229 @@ +import { CreateSubApiParams, FillsParams, FundingHistoryParams, OpenOrderListParams, StopOrderListParams, TransactionHistoryParams, TransferListParams, UpdateSubApiParams, IndexListParams, klineParams, Callback } from './dataType'; +import { WebSocketClient } from './websocket'; +export default class KuCoinFutures { + private request; + private socketInstanceCache; + constructor(props: { + key: string | number; + secret: string | number; + passphrase: string | number; + axiosProps: object; + }); + private makeRequest; + futuresAccount: (currency?: string, callback?: Function) => Promise; + /** + * search to transaction history + * @param params.type string -- 'RealisedPNL' | 'Deposit' | 'Withdrawal' | 'TransferIn' | 'TransferOut' + * @param params.currency -- string + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.maxCount -- default 50 + * @param params.forward -- default true + * @param callback -- callback function + */ + futuresTransactionHistory: (params?: TransactionHistoryParams, callback?: Function) => Promise; + futuresSubApi: (params: { + subName: string; + apiKey?: string; + }, callback?: Function) => Promise; + futuresCreateSubApi: (params: CreateSubApiParams, callback?: Function) => Promise; + futuresUpdateSubApi: (params: UpdateSubApiParams, callback?: Function) => Promise; + futureDeleteSubApi: (params: { + subName: string; + apiKey: string; + passphrase: string; + }, callback?: Function) => Promise; + futureTransferOut: (params: { + amount: number; + currency: string; + recAccountType: string; + }, callback?: Function) => Promise; + futureTransferIn: (params: { + amount: number; + currency: string; + payAccountType: string; + }, callback?: Function) => Promise; + /** + * search to transfer list + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.status -- string -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.queryStatus -- array -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.currency -- string + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + futureTransfers: (params?: TransferListParams, callback?: Function) => Promise; + private order; + private stopOrder; + futuresBuy: (params: { + symbol: string; + size: string | number; + price: string | number; + leverage?: number | undefined; + clientOid?: string | undefined; + optional?: object | undefined; + }, callback?: Function) => Promise; + futuresSell: (params: { + symbol: string; + size: string | number; + price: string | number; + leverage?: number | undefined; + clientOid?: string | undefined; + optional?: object | undefined; + }, callback?: Function) => Promise; + futuresCancel: (orderId: string, callback?: Function) => Promise; + futuresCancelAllOpenOrders: (symbol?: string, callback?: Function) => Promise; + futuresCancelAllStopOrders: (symbol?: string, callback?: Function) => Promise; + futuresCancelAll: (symbol?: string, callback?: Function) => Promise<[any, any]>; + /** + * search to open orders list + * @param params.status --'active'|'done' default 'active' + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + futuresOpenOrders: (params: OpenOrderListParams, callback?: Function) => Promise; + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + futuresStopOrders: (params: StopOrderListParams, callback?: Function) => Promise; + futuresRecentDoneOrders: (symbol?: string, callback?: Function) => Promise; + /** + * search to order detail + * @param params -- string orderId || object { clientOid } + * @param callback -- callback function + */ + futuresOrderDetail: (params: string | object, callback?: Function) => Promise; + /** + * search to stop orders list + * @param params.orderId -- string + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + futuresFills: (params?: FillsParams, callback?: Function) => Promise; + futuresRecentFills: (symbol?: string, callback?: Function) => Promise; + futuresMarginOpenOrders: (symbol: string, callback?: Function) => Promise; + futuresPositionDetail: (symbol?: string, callback?: Function) => Promise; + futuresPositions: (currency?: string, callback?: Function) => Promise; + futuresPositionAutoDeposit: (params: { + symbol: string; + status: boolean; + }, callback?: Function) => Promise; + futuresPositionMargin: (params: { + symbol: string; + margin: number; + bizNo?: string | undefined; + }, callback?: Function) => Promise; + futuresRiskLimit: (symbol?: string, callback?: Function) => Promise; + futuresChangeRiskLimit: (params: { + symbol: string; + level: number; + }, callback?: Function) => Promise; + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean + * @param params.offset -- long + * @param params.forward -- default true + * @param params.maxCount -- default 10 + * @param callback -- callback function + */ + futuresFundingHistory: (params?: FundingHistoryParams, callback?: Function) => Promise; + futuresContractsActive: (callback?: Function) => Promise; + futuresContractDetail: (symbol: string, callback?: Function) => Promise; + futuresTicker: (symbol: string, callback?: Function) => Promise; + futuresLevel2: (symbol: string, callback?: Function) => Promise; + futuresLevel2Depth20: (symbol: string, callback?: Function) => Promise; + futuresLevel2Depth100: (symbol: string, callback?: Function) => Promise; + futuresTradeHistory: (symbol: string, callback?: Function) => Promise; + futuresTimestamp: (callback?: Function) => Promise; + futuresStatus: (callback?: Function) => Promise; + /** + * search to kline + * @param params.symbol -- string symbol + * @param params.granularity -- number + * @param params.form -- timestamp + * @param params.to -- boolean + */ + futuresKline: (params: klineParams, callback?: Function) => Promise; + /** + * search to interest list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresInterests: (params?: IndexListParams, callback?: Function) => Promise; + /** + * search to index list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresIndexList: (params?: IndexListParams, callback?: Function) => Promise; + futuresMarkPrice: (symbol: string, callback?: Function) => Promise; + /** + * search to premium list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean default true + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresPremiums: (params?: IndexListParams, callback?: Function) => Promise; + futuresFundingRate: (symbol: string, callback?: Function) => Promise; + futuresGetSocketInstance: (isPrivate: boolean) => Promise; + futuresGetCacheSocketInstance: (isPrivate: boolean) => Promise; + futuresSocketSubscribe: (topic: string, callback?: Callback, isPrivate?: boolean, strict?: boolean) => Promise; + get websocket(): { + tickerV2: (symbols: string | [], callback?: (d: any) => void) => Promise; + ticker: (symbols: string | [], callback?: (d: any) => void) => Promise; + level2: (symbols: string | [], callback?: (d: any) => void) => Promise; + execution: (symbols: string | [], callback?: (d: any) => void) => Promise; + level2Depth5: (symbols: string | [], callback?: (d: any) => void) => Promise; + level2Depth50: (symbols: string | [], callback?: (d: any) => void) => Promise; + instrument: (symbols: string | [], callback?: (d: any) => void) => Promise; + announcement: (callback?: (d: any) => void) => Promise; + snapshot: (symbols: string | [], callback?: (d: any) => void) => Promise; + tradeOrders: (symbols: string | [], callback?: (d: any) => void) => Promise; + advancedOrders: (callback?: (d: any) => void) => Promise; + wallet: (callback?: (d: any) => void) => Promise; + position: (symbols: string | [], callback?: (d: any) => void) => Promise; + }; +} diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..3be4934 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,919 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var uuid_1 = require("uuid"); +var lodash_1 = require("lodash"); +var ws_1 = __importDefault(require("ws")); +var request_1 = __importDefault(require("./tools/request")); +var tools_1 = require("./tools/tools"); +var resetAPI_1 = require("./resetAPI"); +var websocket_1 = require("./websocket"); +var constants_1 = require("./tools/constants"); +var tools_2 = require("./tools/tools"); +var websocket_2 = require("./websocket"); +var KuCoinFutures = /** @class */ (function () { + function KuCoinFutures(props) { + var _this_1 = this; + this.socketInstanceCache = new Map(); + this.makeRequest = function (_a) { + var _b = _a.body, body = _b === void 0 ? '' : _b, method = _a.method, endpoint = _a.endpoint, callback = _a.callback, _c = _a.isPrivate, isPrivate = _c === void 0 ? true : _c; + return __awaiter(_this_1, void 0, void 0, function () { + var params, data, _d, err_1; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 5, , 6]); + params = (0, tools_2.filterEmptyValues)(body); + if (!isPrivate) return [3 /*break*/, 2]; + return [4 /*yield*/, this.request.signatureRequest(endpoint, params, method)]; + case 1: + _d = _e.sent(); + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, this.request.requestPublic(endpoint, params, method)]; + case 3: + _d = _e.sent(); + _e.label = 4; + case 4: + data = _d; + if (callback) { + return [2 /*return*/, callback(data)]; + } + else { + return [2 /*return*/, data]; + } + return [3 /*break*/, 6]; + case 5: + err_1 = _e.sent(); + console.log(err_1); + return [2 /*return*/, err_1]; + case 6: return [2 /*return*/]; + } + }); + }); + }; + this.futuresAccount = function (currency, callback) { + if (currency === void 0) { currency = 'XBT'; } + return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { currency: currency }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_ACCOUNT_OVERVIEW_EP, + callback: callback + })]; + }); + }); + }; + /** + * search to transaction history + * @param params.type string -- 'RealisedPNL' | 'Deposit' | 'Withdrawal' | 'TransferIn' | 'TransferOut' + * @param params.currency -- string + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.maxCount -- default 50 + * @param params.forward -- default true + * @param callback -- callback function + */ + this.futuresTransactionHistory = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_TRANSACTION_HISTORY_EP, + callback: callback + })]; + }); + }); }; + this.futuresSubApi = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_SUB_API_EP, + callback: callback + })]; + }); + }); }; + this.futuresCreateSubApi = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_SUB_API_EP, + callback: callback + })]; + }); + }); }; + this.futuresUpdateSubApi = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_UPDATE_SUB_API_EP, + callback: callback + })]; + }); + }); }; + this.futureDeleteSubApi = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.DELETE, + endpoint: resetAPI_1.FUTURES_UPDATE_SUB_API_EP, + callback: callback + })]; + }); + }); }; + this.futureTransferOut = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_TRANSFER_OUT_EP, + callback: callback + })]; + }); + }); }; + this.futureTransferIn = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_TRANSFER_IN_EP, + callback: callback + })]; + }); + }); }; + /** + * search to transfer list + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.status -- string -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.queryStatus -- array -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.currency -- string + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + this.futureTransfers = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_TRANSFER_LIST_EP, + callback: callback + })]; + }); + }); }; + this.order = function (params, method, callback) { + if (method === void 0) { method = constants_1.GET; } + return __awaiter(_this_1, void 0, void 0, function () { + var _a, body, endpoint; + return __generator(this, function (_b) { + _a = (0, resetAPI_1.returnBodyAndEndpoint)(params, method), body = _a.body, endpoint = _a.endpoint; + return [2 /*return*/, this.makeRequest({ body: body, method: method, endpoint: endpoint, callback: callback })]; + }); + }); + }; + this.stopOrder = function (params, method, callback) { + if (method === void 0) { method = constants_1.GET; } + return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: method, + endpoint: resetAPI_1.FUTURES_STOP_ORDER_EP, + callback: callback + })]; + }); + }); + }; + this.futuresBuy = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + var price, symbol, size, _a, leverage, _b, clientOid, optional; + return __generator(this, function (_c) { + price = params.price, symbol = params.symbol, size = params.size, _a = params.leverage, leverage = _a === void 0 ? 1 : _a, _b = params.clientOid, clientOid = _b === void 0 ? (0, uuid_1.v4)() : _b, optional = params.optional; + if (!symbol) { + throw new TypeError('Order buy symbol must be set!'); + } + return [2 /*return*/, this.order({ side: 'buy', price: price, symbol: symbol, size: size, leverage: leverage, clientOid: clientOid, optional: optional }, constants_1.POST, callback)]; + }); + }); }; + this.futuresSell = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + var price, symbol, size, _a, leverage, _b, clientOid, optional; + return __generator(this, function (_c) { + price = params.price, symbol = params.symbol, size = params.size, _a = params.leverage, leverage = _a === void 0 ? 1 : _a, _b = params.clientOid, clientOid = _b === void 0 ? (0, uuid_1.v4)() : _b, optional = params.optional; + if (!symbol) { + throw new TypeError('Order sell symbol must be set!'); + } + return [2 /*return*/, this.order({ side: 'sell', price: price, symbol: symbol, size: size, leverage: leverage, clientOid: clientOid, optional: optional }, constants_1.POST, callback)]; + }); + }); }; + this.futuresCancel = function (orderId, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.order(orderId, constants_1.DELETE, callback)]; + }); + }); }; + this.futuresCancelAllOpenOrders = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.order({ symbol: symbol }, constants_1.DELETE, callback)]; + }); + }); }; + this.futuresCancelAllStopOrders = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.stopOrder({ symbol: symbol }, constants_1.DELETE, callback)]; + }); + }); }; + this.futuresCancelAll = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + var cancelAllOpenOrders, cancelAllStopOrders; + return __generator(this, function (_a) { + cancelAllOpenOrders = this.futuresCancelAllOpenOrders(symbol, callback); + cancelAllStopOrders = this.futuresCancelAllStopOrders(symbol, callback); + return [2 /*return*/, Promise.all([cancelAllOpenOrders, cancelAllStopOrders])]; + }); + }); }; + /** + * search to open orders list + * @param params.status --'active'|'done' default 'active' + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + this.futuresOpenOrders = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.order(params, constants_1.GET, callback)]; + }); + }); }; + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + this.futuresStopOrders = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.stopOrder(params, constants_1.GET, callback)]; + }); + }); }; + this.futuresRecentDoneOrders = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_RECENT_DONE_ORDERS_EP, + callback: callback + })]; + }); + }); }; + /** + * search to order detail + * @param params -- string orderId || object { clientOid } + * @param callback -- callback function + */ + this.futuresOrderDetail = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.order(params, constants_1.GET, callback)]; + }); + }); }; + /** + * search to stop orders list + * @param params.orderId -- string + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + this.futuresFills = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_FILLS_EP, + callback: callback + })]; + }); + }); }; + this.futuresRecentFills = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_RECENT_FILLS_EP, + callback: callback + })]; + }); + }); }; + this.futuresMarginOpenOrders = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!symbol) { + console.error('Required String parameter symbol'); + return [2 /*return*/]; + } + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP, + callback: callback + })]; + }); + }); }; + this.futuresPositionDetail = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_POSITION_EP, + callback: callback + })]; + }); + }); }; + this.futuresPositions = function (currency, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { currency: currency }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_POSITIONS_EP, + callback: callback + })]; + }); + }); }; + this.futuresPositionAutoDeposit = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP, + callback: callback + })]; + }); + }); }; + this.futuresPositionMargin = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + var symbol, margin, bizNo, makeBizNo; + return __generator(this, function (_a) { + symbol = params.symbol, margin = params.margin, bizNo = params.bizNo; + makeBizNo = bizNo || (0, uuid_1.v4)(); + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol, margin: margin, bizNo: makeBizNo }, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_POSITION_MARGIN_EP, + callback: callback + })]; + }); + }); }; + this.futuresRiskLimit = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: symbol, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_RISK_LIMIT_EP, + callback: callback + })]; + }); + }); }; + this.futuresChangeRiskLimit = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.POST, + endpoint: resetAPI_1.FUTURES_CHANGE_RISK_LIMIT_EP, + callback: callback + })]; + }); + }); }; + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean + * @param params.offset -- long + * @param params.forward -- default true + * @param params.maxCount -- default 10 + * @param callback -- callback function + */ + this.futuresFundingHistory = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_FUNDING_HISTORY_EP, + callback: callback + })]; + }); + }); }; + this.futuresContractsActive = function (callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_CONTRACTS_ACTIVE_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresContractDetail = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!symbol) { + console.log('Required Parameter. Symbol of the contract'); + return [2 /*return*/, false]; + } + return [2 /*return*/, this.makeRequest({ + body: symbol, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_CONTRACTS_DETAIL_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresTicker = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_TICKER_EP, + callback: callback + })]; + }); + }); }; + this.futuresLevel2 = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_LEVEL2_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresLevel2Depth20 = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_LEVEL2_20_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresLevel2Depth100 = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_LEVEL2_100_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresTradeHistory = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: { symbol: symbol }, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_TRADE_HISTORY_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresTimestamp = function (callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_TIMESTAMP_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresStatus = function (callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_SERVICE_STATUS_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + /** + * search to kline + * @param params.symbol -- string symbol + * @param params.granularity -- number + * @param params.form -- timestamp + * @param params.to -- boolean + */ + this.futuresKline = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_KLINE_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + /** + * search to interest list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + this.futuresInterests = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_INTEREST_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + /** + * search to index list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + this.futuresIndexList = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_INDEX_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresMarkPrice = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + method: constants_1.GET, + endpoint: "".concat(resetAPI_1.FUTURES_MARK_PRICE_EP, "/").concat(symbol, "/current"), + callback: callback, + isPrivate: false + })]; + }); + }); }; + /** + * search to premium list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean default true + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + this.futuresPremiums = function (params, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + body: params, + method: constants_1.GET, + endpoint: resetAPI_1.FUTURES_PREMIUM_EP, + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresFundingRate = function (symbol, callback) { return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.makeRequest({ + method: constants_1.GET, + endpoint: "".concat(resetAPI_1.FUTURES_FUNDING_RATE_EP, "/").concat(symbol, "/current"), + callback: callback, + isPrivate: false + })]; + }); + }); }; + this.futuresGetSocketInstance = function (isPrivate) { return __awaiter(_this_1, void 0, void 0, function () { + var _a, instanceServers, token, wssUri, websocket, socketInstance; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.makeRequest({ + method: constants_1.POST, + endpoint: isPrivate ? websocket_1.PRIVATE_BULLET_EP : websocket_1.PUBLIC_BULLET_EP, + isPrivate: isPrivate + })]; + case 1: + _a = (_b.sent()).data, instanceServers = _a.instanceServers, token = _a.token; + wssUri = "".concat(instanceServers[0].endpoint, "?token=").concat(token, "&acceptUserMessage=true&connectId=").concat(websocket_2.CONNECT_ID); + websocket = new ws_1.default(wssUri); + socketInstance = new websocket_2.WebSocketClient(wssUri, websocket); + return [2 /*return*/, socketInstance]; + } + }); + }); }; + this.futuresGetCacheSocketInstance = function (isPrivate) { return __awaiter(_this_1, void 0, void 0, function () { + var key; + return __generator(this, function (_a) { + key = "futures_".concat(isPrivate); + if (!this.socketInstanceCache.has(key)) { + this.socketInstanceCache.set(key, this.futuresGetSocketInstance(isPrivate)); + } + return [2 /*return*/, this.socketInstanceCache.get(key)]; + }); + }); }; + this.futuresSocketSubscribe = function (topic, callback, isPrivate, strict) { + if (callback === void 0) { callback = tools_2.log; } + if (isPrivate === void 0) { isPrivate = false; } + if (strict === void 0) { strict = true; } + return __awaiter(_this_1, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!topic) { + console.log('Required parameter topic'); + return [2 /*return*/, false]; + } + this.futuresGetCacheSocketInstance(isPrivate) + .then(function (socketInstance) { + return socketInstance.subscribe(topic, callback, isPrivate, strict); + }) + .catch(function (err) { + console.log("execute ".concat(topic, " error: ").concat(JSON.stringify(err))); + return false; + }); + return [2 /*return*/]; + }); + }); + }; + var _a = props || {}, key = _a.key, secret = _a.secret, passphrase = _a.passphrase, _b = _a.axiosProps, axiosProps = _b === void 0 ? {} : _b; + this.request = new request_1.default(__assign({ key: key, secret: secret, passphrase: passphrase }, axiosProps)); + } + Object.defineProperty(KuCoinFutures.prototype, "websocket", { + get: function () { + var _this = this; + function makeSubscribe(symbols, topic, callback, privateChannel) { + if (callback === void 0) { callback = tools_2.log; } + if (privateChannel === void 0) { privateChannel = false; } + return __awaiter(this, void 0, void 0, function () { + var symbolSplit, subscribeList; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!Array.isArray(symbols)) return [3 /*break*/, 2]; + symbolSplit = (0, tools_1.splitArray)(symbols); + subscribeList = (0, lodash_1.map)(symbolSplit, function (symbolStr) { + if (symbolStr) { + return _this.futuresSocketSubscribe("".concat(topic, ":").concat(symbolStr), callback, privateChannel, false); + } + }); + return [4 /*yield*/, Promise.all(subscribeList)]; + case 1: return [2 /*return*/, _a.sent()]; + case 2: + if (!symbols) return [3 /*break*/, 4]; + return [4 /*yield*/, _this.futuresSocketSubscribe("".concat(topic, ":").concat(symbols), callback, privateChannel)]; + case 3: return [2 /*return*/, _a.sent()]; + case 4: return [4 /*yield*/, _this.futuresSocketSubscribe(topic, callback, privateChannel)]; + case 5: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + /* === public socket === */ + function tickerV2(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_2.TICKER_V2, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function ticker(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.TICKER, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function level2(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.LEVEL2, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function execution(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.EXECUTION, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function level2Depth5(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.LEVEL2_DEPTH5, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function level2Depth50(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.LEVEL2_DEPTH50, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function instrument(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.INSTRUMENT, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function announcement(callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, _this.futuresSocketSubscribe(websocket_1.ANNOUNCEMENT, callback, false)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function snapshot(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.SNAPSHOT, callback)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + /* === private socket === */ + function tradeOrders(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.TRADE_ORDERS, callback, true)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function advancedOrders(callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, _this.futuresSocketSubscribe(websocket_1.ADVANCE_ORDERS, callback, true)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function wallet(callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, _this.futuresSocketSubscribe(websocket_1.WALLET, callback, true)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function position(symbols, callback) { + if (callback === void 0) { callback = tools_2.log; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, makeSubscribe(symbols, websocket_1.POSITION, callback, true)]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + return { + tickerV2: tickerV2, + ticker: ticker, + level2: level2, + execution: execution, + level2Depth5: level2Depth5, + level2Depth50: level2Depth50, + instrument: instrument, + announcement: announcement, + snapshot: snapshot, + tradeOrders: tradeOrders, + advancedOrders: advancedOrders, + wallet: wallet, + position: position + }; + }, + enumerable: false, + configurable: true + }); + return KuCoinFutures; +}()); +exports.default = KuCoinFutures; diff --git a/lib/resetAPI/constants.d.ts b/lib/resetAPI/constants.d.ts new file mode 100644 index 0000000..c765806 --- /dev/null +++ b/lib/resetAPI/constants.d.ts @@ -0,0 +1,35 @@ +export declare const FUTURES_ACCOUNT_OVERVIEW_EP = "/api/v1/account-overview"; +export declare const FUTURES_TRANSACTION_HISTORY_EP = "/api/v1/transaction-history"; +export declare const FUTURES_SUB_API_EP = "/api/v1/sub/api-key"; +export declare const FUTURES_UPDATE_SUB_API_EP = "/api/v1/sub/api-key/update"; +export declare const FUTURES_TRANSFER_OUT_EP = "/api/v3/transfer-out"; +export declare const FUTURES_TRANSFER_IN_EP = "/api/v1/transfer-in"; +export declare const FUTURES_TRANSFER_LIST_EP = "/api/v1/transfer-list"; +export declare const FUTURES_ORDER_EP = "/api/v1/orders"; +export declare const FUTURES_STOP_ORDER_EP = "/api/v1/stopOrders"; +export declare const FUTURES_RECENT_DONE_ORDERS_EP = "/api/v1/recentDoneOrders"; +export declare const FUTURES_FILLS_EP = "/api/v1/fills"; +export declare const FUTURES_RECENT_FILLS_EP = "/api/v1/recentFills"; +export declare const FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP = "/api/v1/openOrderStatistics"; +export declare const FUTURES_POSITION_EP = "/api/v1/position"; +export declare const FUTURES_POSITIONS_EP = "/api/v1/positions"; +export declare const FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP = "/api/v1/position/margin/auto-deposit-status"; +export declare const FUTURES_POSITION_MARGIN_EP = "/api/v1/position/margin/deposit-margin"; +export declare const FUTURES_RISK_LIMIT_EP = "/api/v1/contracts/risk-limit"; +export declare const FUTURES_CHANGE_RISK_LIMIT_EP = "/api/v1/position/risk-limit-level/change"; +export declare const FUTURES_FUNDING_HISTORY_EP = "/api/v1/funding-history"; +export declare const FUTURES_CONTRACTS_ACTIVE_EP = "/api/v1/contracts/active"; +export declare const FUTURES_CONTRACTS_DETAIL_EP = "api/v1/contracts"; +export declare const FUTURES_TICKER_EP = "/api/v1/ticker"; +export declare const FUTURES_LEVEL2_EP = "/api/v1/level2/snapshot"; +export declare const FUTURES_LEVEL2_20_EP = "/api/v1/level2/depth20"; +export declare const FUTURES_LEVEL2_100_EP = "/api/v1/level2/depth100"; +export declare const FUTURES_TRADE_HISTORY_EP = "/api/v1/trade/history"; +export declare const FUTURES_INTEREST_EP = "/api/v1/interest/query"; +export declare const FUTURES_INDEX_EP = "/api/v1/index/query"; +export declare const FUTURES_MARK_PRICE_EP = "/api/v1/mark-price"; +export declare const FUTURES_PREMIUM_EP = "/api/v1/premium/query"; +export declare const FUTURES_FUNDING_RATE_EP = "/api/v1/funding-rate"; +export declare const FUTURES_TIMESTAMP_EP = "/api/v1/timestamp"; +export declare const FUTURES_SERVICE_STATUS_EP = "/api/v1/status"; +export declare const FUTURES_KLINE_EP = "/api/v1/kline/query"; diff --git a/lib/resetAPI/constants.js b/lib/resetAPI/constants.js new file mode 100644 index 0000000..632cab7 --- /dev/null +++ b/lib/resetAPI/constants.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FUTURES_KLINE_EP = exports.FUTURES_SERVICE_STATUS_EP = exports.FUTURES_TIMESTAMP_EP = exports.FUTURES_FUNDING_RATE_EP = exports.FUTURES_PREMIUM_EP = exports.FUTURES_MARK_PRICE_EP = exports.FUTURES_INDEX_EP = exports.FUTURES_INTEREST_EP = exports.FUTURES_TRADE_HISTORY_EP = exports.FUTURES_LEVEL2_100_EP = exports.FUTURES_LEVEL2_20_EP = exports.FUTURES_LEVEL2_EP = exports.FUTURES_TICKER_EP = exports.FUTURES_CONTRACTS_DETAIL_EP = exports.FUTURES_CONTRACTS_ACTIVE_EP = exports.FUTURES_FUNDING_HISTORY_EP = exports.FUTURES_CHANGE_RISK_LIMIT_EP = exports.FUTURES_RISK_LIMIT_EP = exports.FUTURES_POSITION_MARGIN_EP = exports.FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP = exports.FUTURES_POSITIONS_EP = exports.FUTURES_POSITION_EP = exports.FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP = exports.FUTURES_RECENT_FILLS_EP = exports.FUTURES_FILLS_EP = exports.FUTURES_RECENT_DONE_ORDERS_EP = exports.FUTURES_STOP_ORDER_EP = exports.FUTURES_ORDER_EP = exports.FUTURES_TRANSFER_LIST_EP = exports.FUTURES_TRANSFER_IN_EP = exports.FUTURES_TRANSFER_OUT_EP = exports.FUTURES_UPDATE_SUB_API_EP = exports.FUTURES_SUB_API_EP = exports.FUTURES_TRANSACTION_HISTORY_EP = exports.FUTURES_ACCOUNT_OVERVIEW_EP = void 0; +// account endpoint +exports.FUTURES_ACCOUNT_OVERVIEW_EP = '/api/v1/account-overview'; +exports.FUTURES_TRANSACTION_HISTORY_EP = '/api/v1/transaction-history'; +exports.FUTURES_SUB_API_EP = '/api/v1/sub/api-key'; +exports.FUTURES_UPDATE_SUB_API_EP = '/api/v1/sub/api-key/update'; +// transfer endpoint +exports.FUTURES_TRANSFER_OUT_EP = '/api/v3/transfer-out'; +exports.FUTURES_TRANSFER_IN_EP = '/api/v1/transfer-in'; +exports.FUTURES_TRANSFER_LIST_EP = '/api/v1/transfer-list'; +// order endpoint +exports.FUTURES_ORDER_EP = '/api/v1/orders'; +exports.FUTURES_STOP_ORDER_EP = '/api/v1/stopOrders'; +exports.FUTURES_RECENT_DONE_ORDERS_EP = '/api/v1/recentDoneOrders'; +// fills endpoint +exports.FUTURES_FILLS_EP = '/api/v1/fills'; +exports.FUTURES_RECENT_FILLS_EP = '/api/v1/recentFills'; +exports.FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP = '/api/v1/openOrderStatistics'; +// position endpoint +exports.FUTURES_POSITION_EP = '/api/v1/position'; +exports.FUTURES_POSITIONS_EP = '/api/v1/positions'; +exports.FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP = '/api/v1/position/margin/auto-deposit-status'; +exports.FUTURES_POSITION_MARGIN_EP = '/api/v1/position/margin/deposit-margin'; +// other endpoint +exports.FUTURES_RISK_LIMIT_EP = '/api/v1/contracts/risk-limit'; +exports.FUTURES_CHANGE_RISK_LIMIT_EP = '/api/v1/position/risk-limit-level/change'; +exports.FUTURES_FUNDING_HISTORY_EP = '/api/v1/funding-history'; +// market endpoint +exports.FUTURES_CONTRACTS_ACTIVE_EP = '/api/v1/contracts/active'; +exports.FUTURES_CONTRACTS_DETAIL_EP = 'api/v1/contracts'; +exports.FUTURES_TICKER_EP = '/api/v1/ticker'; +exports.FUTURES_LEVEL2_EP = '/api/v1/level2/snapshot'; +exports.FUTURES_LEVEL2_20_EP = '/api/v1/level2/depth20'; +exports.FUTURES_LEVEL2_100_EP = '/api/v1/level2/depth100'; +exports.FUTURES_TRADE_HISTORY_EP = '/api/v1/trade/history'; +exports.FUTURES_INTEREST_EP = '/api/v1/interest/query'; +exports.FUTURES_INDEX_EP = '/api/v1/index/query'; +exports.FUTURES_MARK_PRICE_EP = '/api/v1/mark-price'; +exports.FUTURES_PREMIUM_EP = '/api/v1/premium/query'; +exports.FUTURES_FUNDING_RATE_EP = '/api/v1/funding-rate'; +exports.FUTURES_TIMESTAMP_EP = '/api/v1/timestamp'; +exports.FUTURES_SERVICE_STATUS_EP = '/api/v1/status'; +exports.FUTURES_KLINE_EP = '/api/v1/kline/query'; diff --git a/lib/resetAPI/futuresOrder.d.ts b/lib/resetAPI/futuresOrder.d.ts new file mode 100644 index 0000000..20587cd --- /dev/null +++ b/lib/resetAPI/futuresOrder.d.ts @@ -0,0 +1,26 @@ +import { OrderOptionalParamsType, OrderBody } from '../dataType'; +export declare const STOP_TYPES: string[]; +export declare const STOP_PRICE_TYPES: string[]; +export declare const TIME_IN_FORCE_TYPES: string[]; +export declare const OPTIONAL_PARAMS: OrderOptionalParamsType[]; +/** + * create order-(buy|sell) body + * @param side + * @param symbol + * @param size + * @param price + * @param leverage + * @param optional + */ +export declare const makeFuturesOrderBody: ({ side, symbol, size, price, leverage, clientOid, optional }: OrderBody) => object; +/** + * return futures order make body and endpoint + * @param {any} params。 + * @param {string} method - DEFAULT 'GET'。 + * @returns {Object} return { body, endpoint }。 + */ +declare const returnBodyAndEndpoint: (params: any, method?: string) => { + body: any; + endpoint: string; +}; +export default returnBodyAndEndpoint; diff --git a/lib/resetAPI/futuresOrder.js b/lib/resetAPI/futuresOrder.js new file mode 100644 index 0000000..4b33af4 --- /dev/null +++ b/lib/resetAPI/futuresOrder.js @@ -0,0 +1,139 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeFuturesOrderBody = exports.OPTIONAL_PARAMS = exports.TIME_IN_FORCE_TYPES = exports.STOP_PRICE_TYPES = exports.STOP_TYPES = void 0; +var pick_1 = __importDefault(require("lodash/pick")); +var constants_1 = require("./constants"); +exports.STOP_TYPES = ['down', 'up']; +exports.STOP_PRICE_TYPES = ['TP', 'IP', 'MP']; +exports.TIME_IN_FORCE_TYPES = ['GTC', 'IOC']; +exports.OPTIONAL_PARAMS = [ + 'type', + 'remark', + 'stop', + 'stopPriceType', + 'stopPrice', + 'reduceOnly', + 'closeOrder', + 'forceHold', + 'timeInForce', + 'postOnly', + 'hidden', + 'iceberg', + 'visibleSize' +]; +var LIMIT = 'limit'; +var MARKET = 'market'; +/** + * create order-(buy|sell) body + * @param side + * @param symbol + * @param size + * @param price + * @param leverage + * @param optional + */ +var makeFuturesOrderBody = function (_a) { + var side = _a.side, symbol = _a.symbol, size = _a.size, price = _a.price, _b = _a.leverage, leverage = _b === void 0 ? 1 : _b, clientOid = _a.clientOid, _c = _a.optional, optional = _c === void 0 ? {} : _c; + if (!size || !(size % 1 === 0)) { + throw new TypeError('The order size must be an integer!'); + } + var type = LIMIT; + if (!price) { + type = MARKET; + } + var stop = optional.stop, stopPriceType = optional.stopPriceType, stopPrice = optional.stopPrice, _d = optional.timeInForce, timeInForce = _d === void 0 ? 'GTC' : _d, postOnly = optional.postOnly, _e = optional.hidden, hidden = _e === void 0 ? false : _e, _f = optional.iceberg, iceberg = _f === void 0 ? false : _f, other = __rest(optional, ["stop", "stopPriceType", "stopPrice", "timeInForce", "postOnly", "hidden", "iceberg"]); + var body = __assign({ side: side, symbol: symbol, type: type, size: size, leverage: leverage, clientOid: clientOid }, (0, pick_1.default)(other, exports.OPTIONAL_PARAMS)); + if (stop) { + if (!exports.STOP_TYPES.includes(stop)) { + throw new RangeError('The value of stop is not accepted, must be (down | up).'); + } + if (!stopPriceType || !stopPrice) { + throw new TypeError('To set the stop attribute, you must set the stopPrice and stopPriceType parameters.'); + } + if (!exports.STOP_PRICE_TYPES.includes(stopPriceType)) { + throw new RangeError('The value of stopPriceType is not accepted, must be (TP | IP | MP).'); + } + body = __assign(__assign({}, body), { stop: stop, stopPriceType: stopPriceType, stopPrice: stopPrice }); + } + if (type === LIMIT || optional.type === LIMIT) { + if (!exports.TIME_IN_FORCE_TYPES.includes(timeInForce)) { + throw new RangeError('The value of timeInForce is not accepted, must be (GTC | IOC).'); + } + if (timeInForce === 'IOC' || hidden || iceberg) { + body = __assign(__assign({}, body), { timeInForce: timeInForce, hidden: hidden, iceberg: iceberg }); + } + else { + body = __assign(__assign({ price: price }, body), { timeInForce: timeInForce, postOnly: postOnly }); + } + } + return body; +}; +exports.makeFuturesOrderBody = makeFuturesOrderBody; +/** + * return futures order make body and endpoint + * @param {any} params。 + * @param {string} method - DEFAULT 'GET'。 + * @returns {Object} return { body, endpoint }。 + */ +var returnBodyAndEndpoint = function (params, method) { + if (method === void 0) { method = 'GET'; } + var endpoint = constants_1.FUTURES_ORDER_EP; + var body = params; + switch (method) { + case 'POST': { + if (typeof params === 'object') { + var side = params.side, symbol = params.symbol, size = params.size, price = params.price, leverage = params.leverage, clientOid = params.clientOid, optional = params.optional; + body = (0, exports.makeFuturesOrderBody)({ + side: side, + symbol: symbol, + size: size, + price: price, + leverage: leverage, + clientOid: clientOid, + optional: optional + }); + } + break; + } + case 'DELETE': { + if (params && typeof params === 'string') { + endpoint = "".concat(endpoint, "/").concat(params); + body = ''; + } + break; + } + case 'GET': { + if (typeof params === 'object' && params.clientOid) { + endpoint = "".concat(endpoint, "/byClientOid"); + } + break; + } + } + return { body: body, endpoint: endpoint }; +}; +exports.default = returnBodyAndEndpoint; diff --git a/lib/resetAPI/index.d.ts b/lib/resetAPI/index.d.ts new file mode 100644 index 0000000..113caa4 --- /dev/null +++ b/lib/resetAPI/index.d.ts @@ -0,0 +1,3 @@ +import returnBodyAndEndpoint from "./futuresOrder"; +export * from './constants'; +export { returnBodyAndEndpoint }; diff --git a/lib/resetAPI/index.js b/lib/resetAPI/index.js new file mode 100644 index 0000000..5355bb5 --- /dev/null +++ b/lib/resetAPI/index.js @@ -0,0 +1,23 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.returnBodyAndEndpoint = void 0; +var futuresOrder_1 = __importDefault(require("./futuresOrder")); +exports.returnBodyAndEndpoint = futuresOrder_1.default; +__exportStar(require("./constants"), exports); diff --git a/lib/resetAPI/trade/index.d.ts b/lib/resetAPI/trade/index.d.ts new file mode 100644 index 0000000..f36bc75 --- /dev/null +++ b/lib/resetAPI/trade/index.d.ts @@ -0,0 +1,2 @@ +import order from "./order"; +export { order }; diff --git a/lib/resetAPI/trade/index.js b/lib/resetAPI/trade/index.js new file mode 100644 index 0000000..b733496 --- /dev/null +++ b/lib/resetAPI/trade/index.js @@ -0,0 +1,8 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.order = void 0; +var order_1 = __importDefault(require("./order")); +exports.order = order_1.default; diff --git a/lib/resetAPI/trade/order.d.ts b/lib/resetAPI/trade/order.d.ts new file mode 100644 index 0000000..26c074d --- /dev/null +++ b/lib/resetAPI/trade/order.d.ts @@ -0,0 +1,15 @@ +export declare const STOP_TYPES: string[]; +export declare const STOP_PRICE_TYPES: string[]; +export declare const TIME_IN_FORCE_TYPES: string[]; +export declare const OPTIONAL_PARAMS: string[]; +/** + * create order-(buy|sell) body + * @param side + * @param symbol + * @param size + * @param price + * @param leverage + * @param optional + */ +declare const Order: (side: string, symbol: string, size: number, price: number | string, leverage?: number | string, optional?: any) => object; +export default Order; diff --git a/lib/resetAPI/trade/order.js b/lib/resetAPI/trade/order.js new file mode 100644 index 0000000..9550d61 --- /dev/null +++ b/lib/resetAPI/trade/order.js @@ -0,0 +1,105 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OPTIONAL_PARAMS = exports.TIME_IN_FORCE_TYPES = exports.STOP_PRICE_TYPES = exports.STOP_TYPES = void 0; +var lodash_1 = __importDefault(require("lodash")); +exports.STOP_TYPES = ["down", "up"]; +exports.STOP_PRICE_TYPES = ["TP", "IP", "MP"]; +exports.TIME_IN_FORCE_TYPES = ["GTC", "IOC"]; +exports.OPTIONAL_PARAMS = [ + "type", + "remark", + "stop", + "stopPriceType", + "stopPrice", + "reduceOnly", + "closeOrder", + "forceHold", + "timeInForce", + "postOnly", + "hidden", + "iceberg", + "visibleSize" +]; +var LIMIT = "limit"; +var MARKET = "market"; +/** + * create order-(buy|sell) body + * @param side + * @param symbol + * @param size + * @param price + * @param leverage + * @param optional + */ +var Order = function (side, symbol, size, price, leverage, optional) { + if (leverage === void 0) { leverage = 1; } + if (optional === void 0) { optional = {}; } + if (!size || !(size % 1 === 0)) { + throw new TypeError("The order size must be an integer!"); + } + var type = LIMIT; + if (!price) { + type = MARKET; + } + var stop = optional.stop, stopPriceType = optional.stopPriceType, stopPrice = optional.stopPrice, _a = optional.timeInForce, timeInForce = _a === void 0 ? "GTC" : _a, postOnly = optional.postOnly, _b = optional.hidden, hidden = _b === void 0 ? false : _b, _c = optional.iceberg, iceberg = _c === void 0 ? false : _c, other = __rest(optional, ["stop", "stopPriceType", "stopPrice", "timeInForce", "postOnly", "hidden", "iceberg"]); + var body = __assign({ side: side, + symbol: symbol, + type: type, + size: size, + leverage: leverage }, lodash_1.default.pick(other, exports.OPTIONAL_PARAMS)); + if (stop) { + if (!exports.STOP_TYPES.includes(stop)) { + throw new RangeError("The value of stop is not accepted, must be (down | up)."); + } + if (!stopPriceType || !stopPrice) { + throw new TypeError("To set the stop attribute, you must set the stopPrice and stopPriceType parameters."); + } + if (!exports.STOP_PRICE_TYPES.includes(stopPriceType)) { + throw new RangeError("The value of stopPriceType is not accepted, must be (TP | IP | MP)."); + } + body = __assign(__assign({}, body), { stop: stop, + stopPriceType: stopPriceType, + stopPrice: stopPrice }); + } + if (type === LIMIT || optional.type === LIMIT) { + if (!exports.TIME_IN_FORCE_TYPES.includes(timeInForce)) { + throw new RangeError("The value of timeInForce is not accepted, must be (GTC | IOC)."); + } + if (timeInForce === "IOC" || hidden || iceberg) { + body = __assign(__assign({}, body), { timeInForce: timeInForce, + hidden: hidden, + iceberg: iceberg }); + } + else { + body = __assign(__assign({}, body), { timeInForce: timeInForce, + postOnly: postOnly }); + } + } + return body; +}; +exports.default = Order; diff --git a/lib/tools/constants.d.ts b/lib/tools/constants.d.ts new file mode 100644 index 0000000..c88c8a4 --- /dev/null +++ b/lib/tools/constants.d.ts @@ -0,0 +1,6 @@ +export declare const TIME_OUT = 10000; +export declare const GET = "GET"; +export declare const POST = "POST"; +export declare const DELETE = "DELETE"; +export declare const SANDBOX_ADDR_EP = "https://api-sandbox-futures.kucoin.com"; +export declare const PROD_ADDR_EP = "https://api-futures.kucoin.com"; diff --git a/lib/tools/constants.js b/lib/tools/constants.js new file mode 100644 index 0000000..d035713 --- /dev/null +++ b/lib/tools/constants.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PROD_ADDR_EP = exports.SANDBOX_ADDR_EP = exports.DELETE = exports.POST = exports.GET = exports.TIME_OUT = void 0; +exports.TIME_OUT = 10000; +exports.GET = 'GET'; +exports.POST = 'POST'; +exports.DELETE = 'DELETE'; +exports.SANDBOX_ADDR_EP = 'https://api-sandbox-futures.kucoin.com'; +exports.PROD_ADDR_EP = 'https://api-futures.kucoin.com'; diff --git a/lib/tools/request.d.ts b/lib/tools/request.d.ts new file mode 100644 index 0000000..cd63fe8 --- /dev/null +++ b/lib/tools/request.d.ts @@ -0,0 +1,41 @@ +/** + * return api signature header + * @param {object} configs + * @param {string | object} data + */ +export declare const apiAuth: (configs: any, data?: string) => { + 'KC-API-KEY': any; + 'KC-API-SIGN': string; + 'KC-API-TIMESTAMP': string; + 'KC-API-PASSPHRASE': any; + 'KC-API-KEY-VERSION': any; + 'Content-Type': string; + 'User-Agent': string; +}; +/** + * create axios request + * @param {string} env -- set baseURL + * @param {string} key -- set KC-API-KEY + * @param {string} passphrase -- KC-API-PASSPHRASE + * @param {string} secret -- set Secret + * @param {object} other -- set axios instance + * @function setSignatureConfig -- set {key,passphrase,secret} + * @function request -- axios request return promise + */ +export default class Request { + private axiosInstance; + private key; + private secret; + private passphrase; + private version; + constructor(props: { + key: string | number; + secret: string | number; + passphrase: string | number; + env?: string; + version?: string | number; + }); + setSignatureConfig(config?: any): void; + signatureRequest(url: string, data: any, method?: string, config?: {}): Promise; + requestPublic(url: string, data: any, method?: string, config?: {}): Promise; +} diff --git a/lib/tools/request.js b/lib/tools/request.js new file mode 100644 index 0000000..84d9e86 --- /dev/null +++ b/lib/tools/request.js @@ -0,0 +1,174 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.apiAuth = void 0; +var axios_1 = __importDefault(require("axios")); +var https_1 = __importDefault(require("https")); +var tools_1 = require("./tools"); +var constants_1 = require("./constants"); +var httpsAgent = new https_1.default.Agent({ rejectUnauthorized: false }); +/** + * return api signature header + * @param {object} configs + * @param {string | object} data + */ +var apiAuth = function (configs, data) { + if (data === void 0) { data = ''; } + var _a = configs.key, key = _a === void 0 ? '' : _a, _b = configs.passphrase, passphrase = _b === void 0 ? '' : _b, secret = configs.secret, method = configs.method, endpoint = configs.url, _c = configs.version, version = _c === void 0 ? '2' : _c; + if (!key) { + console.log('KC-API-KEY is not specified more information see here https://docs.kucoin.com/futures/#general'); + } + if (!passphrase) { + console.log('KC-API-PASSPHRASE is not specified more information see here https://docs.kucoin.com/futures/#general'); + } + var timestamp = Date.now(); + var signature = (0, tools_1.cryptoHmac)(timestamp + (method || '').toUpperCase() + endpoint + data, secret); + var authParams = { + 'KC-API-KEY': key, + 'KC-API-SIGN': signature, + 'KC-API-TIMESTAMP': timestamp.toString(), + 'KC-API-PASSPHRASE': passphrase, + 'KC-API-KEY-VERSION': version, + 'Content-Type': 'application/json', + 'User-Agent': "KuCoin-Futures-Node-SDK/".concat(version) + }; + if (version && version == 2) { + authParams['KC-API-PASSPHRASE'] = (0, tools_1.cryptoHmac)(passphrase, secret); + } + return authParams; +}; +exports.apiAuth = apiAuth; +/** + * create axios request + * @param {string} env -- set baseURL + * @param {string} key -- set KC-API-KEY + * @param {string} passphrase -- KC-API-PASSPHRASE + * @param {string} secret -- set Secret + * @param {object} other -- set axios instance + * @function setSignatureConfig -- set {key,passphrase,secret} + * @function request -- axios request return promise + */ +var Request = /** @class */ (function () { + function Request(props) { + var _a = props || {}, _b = _a.env, env = _b === void 0 ? 'prod' : _b, _c = _a.key, key = _c === void 0 ? '' : _c, secret = _a.secret, _d = _a.passphrase, passphrase = _d === void 0 ? '' : _d, _e = _a.version, version = _e === void 0 ? 2 : _e, other = __rest(_a, ["env", "key", "secret", "passphrase", "version"]); + var baseURL = env === 'prod' ? constants_1.PROD_ADDR_EP : constants_1.SANDBOX_ADDR_EP; + this.axiosInstance = axios_1.default.create(__assign({ baseURL: baseURL, timeout: constants_1.TIME_OUT, httpsAgent: httpsAgent }, other)); + this.key = key; + this.secret = secret; + this.passphrase = passphrase; + this.version = version; + } + Request.prototype.setSignatureConfig = function (config) { + if (config === void 0) { config = {}; } + var key = config.key, secret = config.secret, passphrase = config.passphrase; + if (key) { + this.key = key; + } + if (secret) { + this.secret = secret; + } + if (passphrase) { + this.passphrase = passphrase; + } + }; + Request.prototype.signatureRequest = function (url, data, method, config) { + var _this = this; + if (method === void 0) { method = 'GET'; } + if (config === void 0) { config = {}; } + var authUrl = url; + var body = data; + var axiosConfig = __assign({ method: method, url: authUrl }, config); + if (method === 'GET') { + authUrl = + typeof data === 'object' + ? "".concat(url, "?").concat((0, tools_1.makeQueryString)(data)) + : data + ? "".concat(url, "/").concat(data) + : url; + axiosConfig.url = authUrl; + body = ''; + } + else { + if (data) { + axiosConfig.data = data; + body = JSON.stringify(data); + } + } + var headerAuth = (0, exports.apiAuth)({ + method: method, + secret: this.secret, + key: this.key, + passphrase: this.passphrase, + url: authUrl, + version: this.version + }, body); + axiosConfig.headers = headerAuth; + return new Promise(function (resolve, reject) { + _this.axiosInstance(axiosConfig) + .then(function (response) { + resolve(response.data); + }) + .catch(function (err) { + reject(err); + console.log(JSON.stringify(err)); + }); + }); + }; + Request.prototype.requestPublic = function (url, data, method, config) { + var _this = this; + if (method === void 0) { method = 'GET'; } + if (config === void 0) { config = {}; } + var authUrl = url; + var axiosConfig = __assign({ method: method, url: authUrl }, config); + if (method === 'GET') { + authUrl = + typeof data === 'object' + ? "".concat(url, "?").concat((0, tools_1.makeQueryString)(data)) + : data + ? "".concat(url, "/").concat(data) + : url; + axiosConfig.url = authUrl; + } + else { + if (data) { + axiosConfig.data = data; + } + } + return new Promise(function (resolve, reject) { + _this.axiosInstance(axiosConfig) + .then(function (response) { + resolve(response.data); + }) + .catch(function (err) { + reject(err); + console.log(JSON.stringify(err)); + }); + }); + }; + return Request; +}()); +exports.default = Request; diff --git a/lib/tools/tools.d.ts b/lib/tools/tools.d.ts new file mode 100644 index 0000000..c0e66ac --- /dev/null +++ b/lib/tools/tools.d.ts @@ -0,0 +1,32 @@ +/** + * make object query to string + * @param {object} query + */ +export declare const makeQueryString: (query: any) => string; +/** + * filter empty values + * @param obj + * @returns filterObj + */ +export declare const filterEmptyValues: (obj: any) => any; +/** + * make symbol + * @param symbols + * @returns string + */ +export declare const joinSymbol: (symbols: string | any[]) => string | false | any[]; +/** + * Currently there is a limit of 100 parameters, too many parameters need to be divided + * @param arr array + * @param chunkSize number default 90 + * @returns array + */ +export declare const splitArray: (arr: any[], chunkSize?: number) => (string | boolean | any[])[]; +/** + * make sha256 + * @param text string + * @param secret string + * @returns sha256 - base64 + */ +export declare const cryptoHmac: (text?: string, secret?: string) => string; +export declare const log: (d: any) => void; diff --git a/lib/tools/tools.js b/lib/tools/tools.js new file mode 100644 index 0000000..753cca5 --- /dev/null +++ b/lib/tools/tools.js @@ -0,0 +1,83 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.log = exports.cryptoHmac = exports.splitArray = exports.joinSymbol = exports.filterEmptyValues = exports.makeQueryString = void 0; +var omitBy_1 = __importDefault(require("lodash/omitBy")); +var crypto_1 = __importDefault(require("crypto")); +/** + * make object query to string + * @param {object} query + */ +var makeQueryString = function (query) { + return Object.keys(query) + .reduce(function (acc, key) { + if (query[key] !== undefined) { + acc.push("".concat(key, "=").concat(encodeURIComponent(query[key]))); + } + return acc; + }, []) + .join('&'); +}; +exports.makeQueryString = makeQueryString; +/** + * filter empty values + * @param obj + * @returns filterObj + */ +var filterEmptyValues = function (obj) { + if (typeof obj !== 'object') + return obj; + var omitValue = (0, omitBy_1.default)(obj, function (value) { return value === null || value === undefined || value === ''; }); + if (!omitValue || !Object.keys(omitValue).length) + return ''; + return omitValue; +}; +exports.filterEmptyValues = filterEmptyValues; +/** + * make symbol + * @param symbols + * @returns string + */ +var joinSymbol = function (symbols) { + if (!symbols) { + console.log('Required parameter symbol'); + return false; + } + var symbolStr = symbols; + if (Array.isArray(symbols)) { + symbolStr = symbols.join(','); + } + return symbolStr; +}; +exports.joinSymbol = joinSymbol; +/** + * Currently there is a limit of 100 parameters, too many parameters need to be divided + * @param arr array + * @param chunkSize number default 90 + * @returns array + */ +var splitArray = function (arr, chunkSize) { + if (chunkSize === void 0) { chunkSize = 90; } + var result = []; + for (var i = 0; i < arr.length; i += chunkSize) { + result.push((0, exports.joinSymbol)(arr.slice(i, i + chunkSize))); + } + return result; +}; +exports.splitArray = splitArray; +/** + * make sha256 + * @param text string + * @param secret string + * @returns sha256 - base64 + */ +var cryptoHmac = function (text, secret) { + if (text === void 0) { text = ''; } + if (secret === void 0) { secret = ''; } + return crypto_1.default.createHmac('sha256', secret).update(text).digest('base64'); +}; +exports.cryptoHmac = cryptoHmac; +var log = function (d) { return console.log(d); }; +exports.log = log; diff --git a/lib/websocket/constants.d.ts b/lib/websocket/constants.d.ts new file mode 100644 index 0000000..5f60408 --- /dev/null +++ b/lib/websocket/constants.d.ts @@ -0,0 +1,16 @@ +export declare const PUBLIC_BULLET_EP = "/api/v1/bullet-public"; +export declare const PRIVATE_BULLET_EP = "/api/v1/bullet-private"; +export declare const CONNECT_ID = "_futures_socket_welcome"; +export declare const TICKER_V2 = "/contractMarket/tickerV2"; +export declare const TICKER = "/contractMarket/ticker"; +export declare const LEVEL2 = "/contractMarket/level2"; +export declare const LEVEL2_DEPTH5 = "/contractMarket/level2Depth5"; +export declare const LEVEL2_DEPTH50 = "/contractMarket/level2Depth50"; +export declare const INSTRUMENT = "/contract/instrument"; +export declare const ANNOUNCEMENT = "/contract/announcement"; +export declare const SNAPSHOT = "/contractMarket/snapshot"; +export declare const EXECUTION = "/contractMarket/execution"; +export declare const TRADE_ORDERS = "/contractMarket/tradeOrders"; +export declare const ADVANCE_ORDERS = "/contractMarket/advancedOrders"; +export declare const WALLET = "/contractAccount/wallet"; +export declare const POSITION = "/contract/position"; diff --git a/lib/websocket/constants.js b/lib/websocket/constants.js new file mode 100644 index 0000000..1e25c65 --- /dev/null +++ b/lib/websocket/constants.js @@ -0,0 +1,22 @@ +"use strict"; +// Apply for Connection Token +Object.defineProperty(exports, "__esModule", { value: true }); +exports.POSITION = exports.WALLET = exports.ADVANCE_ORDERS = exports.TRADE_ORDERS = exports.EXECUTION = exports.SNAPSHOT = exports.ANNOUNCEMENT = exports.INSTRUMENT = exports.LEVEL2_DEPTH50 = exports.LEVEL2_DEPTH5 = exports.LEVEL2 = exports.TICKER = exports.TICKER_V2 = exports.CONNECT_ID = exports.PRIVATE_BULLET_EP = exports.PUBLIC_BULLET_EP = void 0; +exports.PUBLIC_BULLET_EP = '/api/v1/bullet-public'; +exports.PRIVATE_BULLET_EP = '/api/v1/bullet-private'; +exports.CONNECT_ID = '_futures_socket_welcome'; +// public socket topic +exports.TICKER_V2 = '/contractMarket/tickerV2'; +exports.TICKER = '/contractMarket/ticker'; +exports.LEVEL2 = '/contractMarket/level2'; +exports.LEVEL2_DEPTH5 = '/contractMarket/level2Depth5'; +exports.LEVEL2_DEPTH50 = '/contractMarket/level2Depth50'; +exports.INSTRUMENT = '/contract/instrument'; +exports.ANNOUNCEMENT = '/contract/announcement'; +exports.SNAPSHOT = '/contractMarket/snapshot'; +exports.EXECUTION = '/contractMarket/execution'; +// private socket topic +exports.TRADE_ORDERS = '/contractMarket/tradeOrders'; +exports.ADVANCE_ORDERS = '/contractMarket/advancedOrders'; +exports.WALLET = '/contractAccount/wallet'; +exports.POSITION = '/contract/position'; diff --git a/lib/websocket/index.d.ts b/lib/websocket/index.d.ts new file mode 100644 index 0000000..a04c662 --- /dev/null +++ b/lib/websocket/index.d.ts @@ -0,0 +1,3 @@ +import WebSocketClient from './socket'; +export * from './constants'; +export { WebSocketClient }; diff --git a/lib/websocket/index.js b/lib/websocket/index.js new file mode 100644 index 0000000..f375248 --- /dev/null +++ b/lib/websocket/index.js @@ -0,0 +1,23 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WebSocketClient = void 0; +var socket_1 = __importDefault(require("./socket")); +exports.WebSocketClient = socket_1.default; +__exportStar(require("./constants"), exports); diff --git a/lib/websocket/socket.d.ts b/lib/websocket/socket.d.ts new file mode 100644 index 0000000..e5681f2 --- /dev/null +++ b/lib/websocket/socket.d.ts @@ -0,0 +1,28 @@ +import WebSocket from 'ws'; +import { Subscription, Callback } from '../dataType/socket'; +export default class WebSocketClient { + private ws; + private _url; + private alive; + private messageHandler; + private heartbeatInterval; + private pingTimeout; + subscriptions: Subscription[]; + constructor(url: string, websocket: WebSocket); + generateId(): string; + getPrefixTopic(topic: string): string; + socketSend(data: object): void; + setupWebSocket(): void; + startHeartbeat(): void; + stopHeartbeat(): void; + startPing(): void; + stopPing(): void; + resetPingTimeout(): void; + resubscribe(): void; + handleMessage(message: any): void; + patchAllMessage(): void; + getConnectionState(): number; + subscribe(topic: string, callback: Callback, privateChannel?: boolean, strict?: boolean): Function; + unsubscribe(topic: string, id: string): void; + reconnect(): void; +} diff --git a/lib/websocket/socket.js b/lib/websocket/socket.js new file mode 100644 index 0000000..603a870 --- /dev/null +++ b/lib/websocket/socket.js @@ -0,0 +1,209 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var ws_1 = __importDefault(require("ws")); +var lodash_1 = require("lodash"); +var WebSocketClient = /** @class */ (function () { + function WebSocketClient(url, websocket) { + this.alive = false; + this.messageHandler = []; + this.heartbeatInterval = null; + this.pingTimeout = null; + this.subscriptions = []; + this.ws = websocket; + this._url = url; + this.setupWebSocket(); + } + WebSocketClient.prototype.generateId = function () { + return ('_futures_' + Date.now() + (Math.random() * 365).toString(16).slice(4, 14)); + }; + WebSocketClient.prototype.getPrefixTopic = function (topic) { + if (!topic) + return ''; + return topic.split(':')[0]; + }; + WebSocketClient.prototype.socketSend = function (data) { + var params = JSON.stringify(data); + console.log('socket send --->', params); + this.ws.send(params); + }; + WebSocketClient.prototype.setupWebSocket = function () { + var _this = this; + this.ws.on('open', function () { + console.log('WebSocket connected'); + _this.alive = true; + _this.startHeartbeat(); + _this.startPing(); + _this.resubscribe(); + _this.patchAllMessage(); + }); + this.ws.on('message', function (data) { + var message = JSON.parse(data.toString()); + if (message) { + switch (message.type) { + case 'welcome': + case 'ack': + console.log('socket message --->', message); + break; + case 'pong': + console.log('socket message --->', message); + _this.stopPing(); + break; + default: + _this.handleMessage(message); + } + } + }); + this.ws.on('close', function () { + console.log('WebSocket disconnected'); + _this.alive = false; + _this.stopHeartbeat(); + _this.stopPing(); + _this.reconnect(); + }); + this.ws.on('error', function (error) { + _this.alive = false; + console.error('WebSocket error:', error); + }); + }; + // Send ping messages every 59s + WebSocketClient.prototype.startHeartbeat = function () { + var _this = this; + if (this.heartbeatInterval) { + clearInterval(this.heartbeatInterval); + } + this.heartbeatInterval = setInterval(function () { + _this.resetPingTimeout(); + _this.socketSend({ id: _this.generateId(), type: 'ping' }); + }, 59000); + }; + // Stop ping message + WebSocketClient.prototype.stopHeartbeat = function () { + if (this.heartbeatInterval) { + clearInterval(this.heartbeatInterval); + this.heartbeatInterval = null; + } + }; + // Init Send ping message + WebSocketClient.prototype.startPing = function () { + this.resetPingTimeout(); + this.socketSend({ id: this.generateId(), type: 'ping' }); + }; + // Clear ping timeout + WebSocketClient.prototype.stopPing = function () { + if (this.pingTimeout) { + clearTimeout(this.pingTimeout); + this.pingTimeout = null; + } + }; + // Reset Ping timeout + WebSocketClient.prototype.resetPingTimeout = function () { + var _this = this; + if (this.pingTimeout) { + clearTimeout(this.pingTimeout); + } + this.pingTimeout = setTimeout(function () { + console.log('No pong received within 10 seconds, disconnecting...'); + _this.ws.terminate(); + }, 10000); + }; + // resubscribe + WebSocketClient.prototype.resubscribe = function () { + var _this = this; + this.subscriptions.forEach(function (_a) { + var id = _a.id, topic = _a.topic, privateChannel = _a.privateChannel; + _this.socketSend({ + id: id, + type: 'subscribe', + topic: topic, + privateChannel: privateChannel, + response: true + }); + }); + }; + WebSocketClient.prototype.handleMessage = function (message) { + var _this = this; + this.subscriptions.forEach(function (_a) { + var topic = _a.topic, callback = _a.callback, strict = _a.strict; + if (strict) { + if (topic === message.topic) { + callback(message); + } + } + else { + if (_this.getPrefixTopic(topic) === _this.getPrefixTopic(message.topic)) { + callback(message); + } + } + }); + }; + // When sending a message to the socket channel, + // the socket may not be connected at this time, + // it needs to be saved, wait for the connection to be established, + // and trigger the message in messageHandler + WebSocketClient.prototype.patchAllMessage = function () { + var _this = this; + var sendMessages = (0, lodash_1.uniqWith)(this.messageHandler, lodash_1.isEqual); + (0, lodash_1.forEach)(sendMessages, function (sendMessage) { + _this.socketSend(sendMessage); + _this.messageHandler = _this.messageHandler.filter(function (item) { return !(0, lodash_1.isEqual)(sendMessage, item); }); + }); + }; + WebSocketClient.prototype.getConnectionState = function () { + return this.ws.readyState; + }; + WebSocketClient.prototype.subscribe = function (topic, callback, privateChannel, strict) { + var _this = this; + if (privateChannel === void 0) { privateChannel = false; } + if (strict === void 0) { strict = true; } + var _id = this.generateId(); + this.subscriptions.push({ + id: _id, + topic: topic, + privateChannel: privateChannel, + callback: callback, + strict: strict + }); + return function () { return _this.unsubscribe(topic, _id); }; + }; + WebSocketClient.prototype.unsubscribe = function (topic, id) { + var currentTopic = this.subscriptions.find(function (subscription) { + if (id) + return subscription.topic === topic && subscription.id === id; + return subscription.topic === topic; + }); + if (currentTopic) { + var sendMessage = { + id: this.generateId(), + type: 'unsubscribe', + topic: topic, + privateChannel: currentTopic.privateChannel, + response: true + }; + if (this.alive) { + this.socketSend(sendMessage); + } + else { + this.messageHandler.push(sendMessage); + } + } + this.subscriptions = this.subscriptions.filter(function (subscription) { + if (id) + return !(subscription.topic === topic && subscription.id === id); + return subscription.topic !== topic; + }); + }; + // reconnect WebSocket + WebSocketClient.prototype.reconnect = function () { + var _this = this; + console.log('Attempting to reconnect...'); + setTimeout(function () { + _this.ws = new ws_1.default(_this._url); + _this.setupWebSocket(); + }, 5000); + }; + return WebSocketClient; +}()); +exports.default = WebSocketClient; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..abba6bd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3532 @@ +{ + "name": "kucoin-futures-node-sdk", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject%2fremapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fcode-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fcompat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true + }, + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fcore/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fgenerator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhelpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fhighlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fparser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2ftemplate/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel%2ftraverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "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.22.5", + "resolved": "https://registry.npmjs.org/@babel%2ftypes/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha1-daLotRy3WKdVPWgEpZMteqznXDk=", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "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 + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs%2fschema/-/schema-0.1.3.tgz", + "integrity": "sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=", + "dev": true + }, + "@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fconsole/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fcore/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fenvironment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0" + } + }, + "@jest/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fexpect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "dev": true, + "requires": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + } + }, + "@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fexpect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/fake-timers": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2ffake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "@jest/globals": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2fglobals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" + } + }, + "@jest/reporters": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2freporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest%2fschemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/source-map": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest%2fsource-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2ftest-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2ftest-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "dev": true, + "requires": { + "@jest/test-result": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2ftransform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest%2ftypes/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell%2fresolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell%2fset-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell%2ftrace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair%2ftypebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs%2fcommons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs%2ffake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types%2fbabel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types%2fbabel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types%2fbabel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk=", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types%2fbabel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types%2feslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=", + "dev": true + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types%2fgraceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY=", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types%2fistanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha1-kVP+mLuivVZaY63ZQ21vDX+EaP8=", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.2", + "resolved": "https://registry.npmjs.org/@types%2fjest/-/jest-29.5.2.tgz", + "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types%2fjson-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.155", + "resolved": "https://registry.npmjs.org/@types%2flodash/-/lodash-4.14.155.tgz", + "integrity": "sha1-4rRRT0aiYf0RVC5HUZwg6857wjo=", + "dev": true + }, + "@types/node": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@types%2fnode/-/node-14.0.4.tgz", + "integrity": "sha1-Q6Y/xe3OImvtEGsxuHUWUlYnEQc=", + "dev": true + }, + "@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types%2fprettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types%2fstack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha1-IPGClPeX8iCbX2XI47XI6CYdEnw=", + "dev": true + }, + "@types/uuid": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types%2fuuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "dev": true + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types%2fws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types%2fyargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types%2fyargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint%2feslint-plugin/-/eslint-plugin-3.3.0.tgz", + "integrity": "sha1-iVGOXFIJo0m94WHDSJsOwYeuXTc=", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.3.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint%2fexperimental-utils/-/experimental-utils-3.3.0.tgz", + "integrity": "sha1-1yqUbgVqg9Tt+X80EczrY5sLjIc=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "3.3.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint%2fparser/-/parser-3.3.0.tgz", + "integrity": "sha1-/K5AAS3tgiqosnOaGgOk48W7t7s=", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.3.0", + "@typescript-eslint/typescript-estree": "3.3.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint%2ftypescript-estree/-/typescript-estree-3.3.0.tgz", + "integrity": "sha1-hB/+0lwpsASev/tMIHEmijRViio=", + "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": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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" + } + }, + "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 + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "dev": true, + "requires": { + "@jest/transform": "^29.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@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": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "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" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "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 + }, + "caniuse-lite": { + "version": "1.0.30001507", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", + "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "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": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "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" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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 + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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 + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "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=" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, + "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" + } + }, + "electron-to-chromium": { + "version": "1.4.440", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", + "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "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 + }, + "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" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "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 + }, + "eslint": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.2.0.tgz", + "integrity": "sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.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", + "inquirer": "^7.0.0", + "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.14", + "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" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.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.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "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 + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "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.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "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 + }, + "expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "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" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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 + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "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" + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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" + } + }, + "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" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "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": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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 + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "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-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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-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 + }, + "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 + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "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": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^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 + }, + "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 + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "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-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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": "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 + }, + "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.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "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 + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "dev": true, + "requires": { + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", + "import-local": "^3.0.2", + "jest-cli": "^29.5.0" + }, + "dependencies": { + "jest-cli": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "dev": true, + "requires": { + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + } + } + }, + "jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-circus": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-config": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" + } + }, + "jest-environment-node": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true + }, + "jest-haste-map": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true + }, + "jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true + }, + "jest-resolve": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "dev": true, + "requires": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" + } + }, + "jest-runner": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-runtime": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + } + }, + "jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "dev": true, + "requires": { + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.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.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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 + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "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 + }, + "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.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "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" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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 + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "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 + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.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.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "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 + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "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 + }, + "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-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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-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-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": "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" + } + }, + "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": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@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" + } + }, + "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 + }, + "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-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.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "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" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", + "dev": true + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "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.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "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 + }, + "resolve": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", + "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", + "dev": true, + "requires": { + "is-core-module": "^2.12.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "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-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 + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "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" + } + }, + "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" + } + }, + "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 + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.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 + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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 + }, + "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 + } + } + }, + "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-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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-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-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "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": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "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 + }, + "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 + }, + "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" + } + }, + "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" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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 + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "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.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "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-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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-jest": { + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", + "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "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": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "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" + } + }, + "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 + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.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": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index fe1fcae..30b2c08 100644 --- a/package.json +++ b/package.json @@ -1,54 +1,34 @@ { "name": "kucoin-futures-node-sdk", - "version": "1.0.3", + "version": "2.0.0", "description": "KuCoin Futures API SDK for Node.js language", - "repository": { - "type": "git", - "url": "git@github.com:Kucoin/kucoin-futures-node-sdk.git" - }, - "main": "sdk/index.js", - "files": [ - "sdk", - "README.md" - ], + "main": "lib/index.js", + "license": "MIT", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "PRODUCTION=false nodemon src/start.js", - "prod": "PRODUCTION=true node src/start.js", - "build": "./node_modules/.bin/babel src --out-dir sdk && rm -f sdk/start.js" + "start": "./node_modules/typescript/bin/tsc --watch", + "build": "./node_modules/typescript/bin/tsc", + "example": "node example/index.js", + "eslint": "eslint ./src/*.ts --ext .tsx", + "test": "jest --coverage" }, - "author": "", - "license": "ISC", "dependencies": { - "babel-preset-es2015": "^6.24.1", - "decimal.js": "^10.2.0", - "dot-prop": "^4.2.1", - "event-emitter": "^0.3.5", - "koa": "^2.8.1", - "koa-bodyparser": "^4.2.1", - "lodash": "^4.17.19", - "log-update": "^3.3.0", - "log4js": "^5.1.0", - "moment": "^2.24.0", - "qs": "^6.9.0", - "querystring": "^0.2.0", - "request": "^2.88.0", - "socket.io": "^2.2.0", - "socket.io-client": "^2.2.0", - "socket.io-msgpack-parser": "^2.2.0", - "uuid": "^3.3.3", - "ws": "^7.1.2" + "axios": "1.4.0", + "lodash": "4.17.21", + "uuid": "9.0.0", + "ws": "8.13.0" }, "devDependencies": { - "babel-cli": "^6.26.0", - "babel-core": "^6.26.3", - "babel-plugin-add-module-exports": "^1.0.2", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators-legacy": "^1.3.5", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.7.0", - "babel-register": "^6.26.0", - "nodemon": "^1.19.2" + "@types/jest": "^29.5.2", + "@types/lodash": "^4.14.152", + "@types/node": "^14.0.4", + "@types/uuid": "^9.0.1", + "@types/ws": "^8.5.5", + "@typescript-eslint/eslint-plugin": "^3.0.0", + "@typescript-eslint/parser": "^3.0.0", + "eslint": "^7.0.0", + "jest": "^29.5.0", + "prettier": "^2.0.5", + "ts-jest": "^29.1.0", + "typescript": "^5.1.3" } } diff --git a/pm2.tpl.json b/pm2.tpl.json deleted file mode 100644 index 0633564..0000000 --- a/pm2.tpl.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "strategy", - "script": "/usr/bin/node", - "args": [ - "src/start.js", - "template" - ], - "env": { - "PRODUCTION": true - }, - "exec_interpreter": "", - "exec_mode": "fork" -} \ No newline at end of file diff --git a/sdk_example/level2-book.js b/sdk_example/level2-book.js deleted file mode 100644 index 3fa027d..0000000 --- a/sdk_example/level2-book.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * An example sdk level2 test - */ -// default is sandbox if _USE_KUMEX_ONLINE_ is false or not set -global._USE_KUMEX_ONLINE_ = true; - -// set env configure -const { setEnv, getEnv } = require('../sdk/lib/env'); -console.log('set env', setEnv); -setEnv({ - log: { - writeFile: true, - stdout: false, - test: 123, - }, -}); -console.log('get env', getEnv()); - -// require deps -const _ = require('lodash'); -const logUpdate = require('log-update'); -const http = require('../sdk/lib/http'); -const Level2 = require('../sdk/com/level2'); - -const SYMBOL = 'XBTUSDM'; - -async function main() { - // set account api keys - http.setSignatureConfig(getEnv()); - - const l2 = new Level2(SYMBOL); - l2.listen(); - - const interval = setInterval(async () => { - // read orderbook - const orderbook = l2.getOrderBook(5); - - // show Level2 - let asksStr = ''; - _.eachRight(orderbook.asks, ([price, size]) => { - asksStr += `${price} -> ${size}\n`; - }); - - let bidsStr = ''; - _.each(orderbook.bids, ([price, size]) => { - bidsStr += `${price} -> ${size}\n`; - }); - - logUpdate.clear(); - logUpdate(`------------------------\n` + - `l2 ${orderbook.dirty ? 'Dirty Data' : 'Trust Data'}\n` + - `l2 seq: ${orderbook.sequence}\n` + - `ping: ${orderbook.ping} (ms)\n` + - `------------------------\n` + - `${asksStr}----------sep-----------\n` + - `${bidsStr}------------------------` - ); - }, 200); -} - -main(); diff --git a/src/com/account.js b/src/com/account.js deleted file mode 100644 index 272e9e6..0000000 --- a/src/com/account.js +++ /dev/null @@ -1,37 +0,0 @@ - -import http from '../lib/http'; -import log from '../lib/log'; - -class Account { - - // TODO update by websocket - - getOverview = async () => { - // GET /api/v1/account-overview - let result = false; - - try { - /* - { - "code": "200000", - "data": { - "accountEquity": 99.8999305281, //账户权益 - "unrealisedPNL": 0, //未实现盈亏 - "marginBalance": 99.8999305281, //保证金余额 - "positionMargin": 0, //仓位保证金 - "orderMargin": 0, //委托保证金 - "frozenFunds": 0, //转出提现冻结 - "availableBalance": 99.8999305281 //可用余额 - } - } - */ - const { data } = await http.get('/api/v1/account-overview'); - result = data; - } catch (e) { - log('get account overview error', e); - } - return result; - } -} - -export default Account; \ No newline at end of file diff --git a/src/com/contract.js b/src/com/contract.js deleted file mode 100644 index 9bc86df..0000000 --- a/src/com/contract.js +++ /dev/null @@ -1,86 +0,0 @@ -// https://kitchen.kumex.top/web-front/contracts/XBTUSDM - - -import http from '../lib/http'; -import log from '../lib/log'; - -const IS_PRODUCT = global._USE_KUMEX_ONLINE_ || process.env.PRODUCTION === 'true'; -const baseUrl = IS_PRODUCT ? 'https://kitchen.kumex.top' : 'https://kitchen-sdb.kumex.com'; - -class Contract { - symbol; - - constructor(symbol) { - this.symbol = symbol; - } - - getOverview = async () => { - let result = false; - - try { - /* - { - "success": true, - "code": "200", - "msg": "success", - "retry": false, - "data": { - "symbol": "XBTUSDM", - "rootSymbol": "XBT", - "type": "FFWCSX", - "firstOpenDate": 1552638575000, - "expireDate": null, - "settleDate": null, - "baseCurrency": "XBT", - "quoteCurrency": "USD", - "settleCurrency": "XBT", - "maxOrderQty": 1000000, - "maxPrice": 1000000.0000000000, - "lotSize": 1, - "tickSize": 1.0, - "multiplier": -1.0, - "initialMargin": 0.01, - "maintainMargin": 0.005, - "maxRiskLimit": 200, - "minRiskLimit": 200, - "riskStep": 100, - "makerFeeRate": -2.5E-4, - "takerFeeRate": 6.0E-4, - "takerFixFee": 0.0000000000, - "makerFixFee": 0.0000000000, - "settlementFee": 0.0, - "isDeleverage": true, - "isQuanto": false, - "isInverse": true, - "markMethod": "FairPrice", - "fairMethod": "FundingRate", - "fundingBaseSymbol": ".XBTINT8H", - "fundingQuoteSymbol": ".USDINT8H", - "fundingRateSymbol": ".XBTUSDMFPI8H", - "indexSymbol": ".BXBT", - "status": "Open", - "fundingFeeRate": 0.000100, // 资金费率 - "predictedFundingFeeRate": 0.000100, // 预测资金费率 - "openInterest": "2747590", - "turnoverOf24h": 570.10756506, - "volumeOf24h": 4651337.00000000, - "markPrice": 8112.62, - "indexPrice": 8111.96, - "lastTradePrice": 8102.0000000000, - "nextFundingRateTime": 23531767 // 距离下一个资金费用结算时间点的剩余时间 - } - } - */ - const { data } = await http._request({ - url: `${baseUrl}/web-front/contracts/${this.symbol}`, - method: 'GET', - }); - result = data; - } catch (e) { - log('get contract overview error', e); - } - return result; - } -} - -export default Contract; \ No newline at end of file diff --git a/src/com/fee.js b/src/com/fee.js deleted file mode 100644 index 3e9782e..0000000 --- a/src/com/fee.js +++ /dev/null @@ -1,75 +0,0 @@ - -import http from '../lib/http'; -import log from '../lib/log'; - -class Fee { - symbol; - - constructor(symbol) { - this.symbol = symbol; - } - - getFundingHistory = async (params = {}) => { - // GET /api/v1/funding-history - let result = false; - - try { - /* - data: { - "dataList": [ - { - "id": 36275152660006, //id - "symbol": "XBTUSDM", //合约symbol - "timePoint": 1557918000000, //时间点(毫秒) - "fundingRate": 0.000013, //资金费率 - "markPrice": 8058.27, //标记价格 - "positionQty": 10, //结算时的仓位数 - "positionCost": -0.001241, //结算时的仓位价值 - "funding": -0.00000464 //结算的资金费用,正数表示收入;负数表示支出 - }, - { - "id": 36275152660004, - "symbol": "XBTUSDM", - "timePoint": 1557914400000, - "fundingRate": 0.00375, - "markPrice": 8079.65, - "positionQty": 10, - "positionCost": -0.0012377, - "funding": -0.00000465 - }, - { - "id": 36275152660002, - "symbol": "XBTUSDM", - "timePoint": 1557910800000, - "fundingRate": 0.00375, - "markPrice": 7889.03, - "positionQty": 10, - "positionCost": -0.0012676, - "funding": -0.00000476 - } - ], - "hasMore": true // 是否还有下一页 - } - 参数 数据类型 含义 - symbol String 合约symbol - - startAt long [可选] 开始时间(毫秒) - endAt long [可选] 截止时间(毫秒) - reverse boolean [可选] 是否逆序查询, true 或者 false,默认为true - offset long [可选] 起始偏移量,一般使用上个请求最后一条返回结果的唯一属性,默认返回第一页 - forward boolean [可选] 是否前向查询,true或者false,默认为true - maxCount int [可选] 最大记录条数,默认为10 - */ - const { data } = await http.get('/api/v1/funding-history', { - ...params, - symbol: this.symbol, - }); - result = data; - } catch (e) { - log('get funding-history error', e); - } - return result; - } -} - -export default Fee; \ No newline at end of file diff --git a/src/com/level2.js b/src/com/level2.js deleted file mode 100644 index 90f35ee..0000000 --- a/src/com/level2.js +++ /dev/null @@ -1,205 +0,0 @@ -import _ from 'lodash'; -import Datafeed from '../lib/datafeed'; -import http from '../lib/http'; -import log from '../lib/log'; -import delay from '../lib/delay'; -import { - mergeDepth, - checkContinue, - mapArr, - arrMap, - targetTypesMap, -} from '../lib/utils'; - -const changeTypes = ['asks', 'bids']; - -class Level2 { - datafeed; - symbol; - buffer = []; - fullSnapshot = { - dirty: true, - sequence: 0, - asks: {}, - bids: {}, - }; - messageEventCallback; - - constructor(symbol, datafeed) { - this.symbol = symbol; - - if (datafeed instanceof Datafeed) { - this.datafeed = datafeed; - } else { - this.datafeed = new Datafeed(); - } - } - - bufferMessage = (message) => { - const { sequence, change } = message || {}; - if (sequence && change) { - const [price, type, size] = change.split(','); - const seq = this.fullSnapshot.sequence; - // log('check', sequence, seq); - const messageFormat = [sequence, price, type, size]; - if (this.fullSnapshot.dirty === false && sequence === seq + 1) { - // update - this.updateFullByMessage(messageFormat); - } else - if (sequence > seq) { - this.buffer.push(messageFormat); - // rebuild - this.rebuild(); - } - } - } - - getFilteredBuffer = (seq) => { - return this.buffer.filter((item) => { - return item[0] > seq; - }); - } - - _rebuilding = false; - rebuild = async () => { - if (this._rebuilding) { - log('rebuilding dirty level2, return', - this.fullSnapshot.sequence, - this.buffer.length && this.buffer[this.buffer.length - 1][0], - ); - return; - } - log('build dirty level2'); - this._rebuilding = true; - this.fullSnapshot.dirty = true; - - await delay(6100); - const fetchSuccess = await this.fetch(); - const seq = this.fullSnapshot.sequence; - - if (fetchSuccess && this.datafeed.trustConnected) { - const bufferArr = this.getFilteredBuffer(seq); - - // if (bufferArr.length === 0 && this.buffer.length > 0) { - // console.log('snapshot before', seq, this.buffer[this.buffer.length - 1][0]); - // } - - if (bufferArr.length > 0 || - (bufferArr.length === 0 && this.buffer.length === 0) || - (bufferArr.length === 0 && (seq === this.buffer[this.buffer.length - 1][0])) - ) { - const continu = checkContinue(bufferArr, seq); - if (continu) { - log('seq & len', this.fullSnapshot.sequence, bufferArr.length, this.buffer.length); - _.each(bufferArr, (item) => { - // update - this.updateFullByMessage(item); - }); - this.fullSnapshot.dirty = false; - this.buffer = []; - log('level2 checked'); - } else { - log('level2 buffer is not continue with snapshot'); - } - } - } - this._rebuilding = false; - } - - fetch = async () => { - /* - { - code: '200000', - data: { - symbol: 'XBTUSDM', - sequence: 75017803, - asks: [], - bids: [], - } - } - */ - let fetchSuccess = false; - try { - const result = await http.get(`/api/v1/level2/snapshot?symbol=${this.symbol}`); - if (result.code === '200000' && - result.data && - result.data.symbol === this.symbol - ) { - const { sequence, asks, bids } = result.data; - - this.fullSnapshot.dirty = true; - this.fullSnapshot.sequence = sequence; - this.fullSnapshot.asks = mapArr(asks, (str) => mergeDepth(str, 'asks')); - this.fullSnapshot.bids = mapArr(bids, (str) => mergeDepth(str, 'bids')); - fetchSuccess = true; - } - } catch (e) { - log('fetch level2 error', e); - } - return fetchSuccess; - } - - updateFullByMessage = (message) => { - const [sequence, price, type, size] = message; - const targetType = targetTypesMap[type]; - if (_.indexOf(changeTypes, targetType) > -1) { - const targetPrice = mergeDepth(price, targetType); - if (size == 0) { - delete this.fullSnapshot[targetType][targetPrice]; - } else { - this.fullSnapshot[targetType][targetPrice] = size; - } - this.fullSnapshot.sequence = sequence; - - // callback message - if (typeof this.messageEventCallback === 'function') { - this.messageEventCallback(message); - } - } else { - log('invalid change type', type); - } - } - - /** public */ - listen = () => { - this.datafeed.connectSocket(); - this.datafeed.onClose(() => { - log('ws closed, status ', this.datafeed.trustConnected); - this.rebuild(); - }); - - const topic = `/contractMarket/level2:${this.symbol}`; - this.datafeed.subscribe(topic, (message) => { - if (message.topic === topic) { - // log(message.data); - this.bufferMessage(message.data); - } - }); - this.rebuild(); - } - - // message event handler - handleMessageEvent = (callback) => { - if (typeof callback === 'function') { - this.messageEventCallback = callback; - } - } - - getOrderBook = (limit = 10) => { - const dirty = this.fullSnapshot.dirty; - const sequence = this.fullSnapshot.sequence; - const asks = arrMap(this.fullSnapshot.asks, 'asc').slice(0, limit); - const bids = arrMap(this.fullSnapshot.bids, 'desc').slice(0, limit); - const ping = this.datafeed.ping; - - return { - dirty, - sequence, - asks, - bids, - ping, - }; - } -} - -export default Level2; \ No newline at end of file diff --git a/src/com/level3.js b/src/com/level3.js deleted file mode 100644 index 20d9884..0000000 --- a/src/com/level3.js +++ /dev/null @@ -1,365 +0,0 @@ -import _ from 'lodash'; -import Datafeed from '../lib/datafeed'; -import http from '../lib/http'; -import log from '../lib/log'; -import delay from '../lib/delay'; -import { - mergeDepth, - checkContinue, - mapl3Arr, - arrMap, - arrl3Map, - targetTypesMap, -} from '../lib/utils'; - -const changeTypes = ['asks', 'bids']; - -class Level3 { - datafeed; - symbol; - buffer = []; - fullSnapshot = { - dirty: true, - sequence: 0, - asks: {}, // price => orderId => item - bids: {}, - }; - messageEventCallback; - - constructor(symbol, datafeed) { - this.symbol = symbol; - - if (datafeed instanceof Datafeed) { - this.datafeed = datafeed; - } else { - this.datafeed = new Datafeed(); - } - } - - bufferMessage = (message) => { - const { sequence, type } = message || {}; - if (sequence && type) { - const seq = this.fullSnapshot.sequence; - // log('check', sequence, seq); - if (this.fullSnapshot.dirty === false && sequence === seq + 1) { - // update - this.updateFullByMessage(message); - } else - if (sequence > seq) { - this.buffer.push(message); - // rebuild - this.rebuild(); - } - } - } - - getFilteredBuffer = (seq) => { - return this.buffer.filter((item) => { - return item.sequence > seq; - }); - } - - _rebuilding = false; - rebuild = async () => { - if (this._rebuilding) { - log('rebuilding dirty level3, return', - this.fullSnapshot.sequence, - this.buffer.length && this.buffer[this.buffer.length - 1].sequence, - ); - return; - } - log('build dirty level3'); - this._rebuilding = true; - this.fullSnapshot.dirty = true; - - await delay(6100); - const fetchSuccess = await this.fetch(); - const seq = this.fullSnapshot.sequence; - - if (fetchSuccess && this.datafeed.trustConnected) { - const bufferArr = this.getFilteredBuffer(seq); - - // if (bufferArr.length === 0 && this.buffer.length > 0) { - // console.log('snapshot before', seq, this.buffer[this.buffer.length - 1].sequence); - // } - - if (bufferArr.length > 0 || - (bufferArr.length === 0 && this.buffer.length === 0) || - (bufferArr.length === 0 && (seq === this.buffer[this.buffer.length - 1].sequence)) - ) { - const continu = checkContinue(bufferArr, seq, 'sequence'); - if (continu) { - log('seq & len', this.fullSnapshot.sequence, bufferArr.length, this.buffer.length); - _.each(bufferArr, (message) => { - // update - this.updateFullByMessage(message); - }); - this.fullSnapshot.dirty = false; - this.buffer = []; - log('level3 checked'); - } else { - log('level3 buffer is not continue with snapshot'); - } - } - } - this._rebuilding = false; - } - - fetch = async () => { - /* - { - code: '200000', - data: { - symbol: 'XBTUSDM', - sequence: 75017803, - asks: [], - bids: [], - } - } - */ - let fetchSuccess = false; - try { - const result = await http.get(`/api/v1/level3/snapshot?symbol=${this.symbol}`); - if (result.code === '200000' && - result.data && - result.data.symbol === this.symbol - ) { - const { sequence, asks, bids } = result.data; - - this.fullSnapshot.dirty = true; - this.fullSnapshot.sequence = sequence; - // [下单时间 - 纳秒, 订单号, 价格, 数量, 进入买卖盘时间 - 纳秒] - this.fullSnapshot.asks = mapl3Arr(asks); - this.fullSnapshot.bids = mapl3Arr(bids); - fetchSuccess = true; - } - } catch (e) { - log('fetch level3 error', e); - } - return fetchSuccess; - } - - updateFullByMessage = (message) => { - const { sequence, type } = message; - - let updated = true; - switch (type) { - case 'received': - /* - "symbol": "XBTUSDM", // 合约 - "sequence": 3262786900, // 顺序号 - "type": "received", - "orderId": "5c0b520032eba53a888fd02x", // 订单号 - "clientOid": "ad123ad" // 可选,用于用户鉴别自己的订单 - */ - { - // received event - } - break; - case 'open': - /* - "symbol": "XBTUSDM", // 合约 - "sequence": 3262786900, // 顺序号 - "type": "open", - "orderId": "5c0b520032eba53a888fd02x", // 订单号 - "price": 3634.5, // 委托价格 - "size": 10, // 委托数量 - "side": "buy", // 委托方向 - "orderTime": 1547697294838004923, // 下单时间 - "ts": 1547697294838004923, // 进入买卖盘时间 - "clientOid": "ad123ad" // 可选,用于用户鉴别自己的订单 - */ - { - // open event - const { side, orderId, price, size, orderTime, ts } = message; - const targetType = targetTypesMap[side]; - if (_.indexOf(changeTypes, targetType) > -1) { - this.fullSnapshot[targetType][orderId] = [ - // [0 , 1 , 2 , 3 , 4] - // [下单时间, 订单号, 价格, 数量, 进入买卖盘时间] - orderTime, orderId, price, size, ts - ]; - } - } - break; - case 'match': - /* - "symbol": "XBTUSDM", // 合约 - "sequence": 3262786901, // 顺序号 - "type": "match", - "tradeId": "6c23b5454353a8882d023b3o", // 交易号 - "takerOrderId": "5c0b520032eba53a888fd01f", // taker订单号 - "makerOrderId": "5c0b520032eba53a888fd01e", // maker订单号 - "price": 3634, // 成交价格 - "matchSize": 20, // 成交数量 - "size": 10, // 订单剩余数量 - "side": "buy", // taker的方向 - "ts": 1547697294838004923 // 成交时间 - 纳秒 - */ - { - // match event - const { side, makerOrderId, size } = message; - const targetType = targetTypesMap[side]; - if (_.indexOf(changeTypes, targetType) > -1) { - if (this.fullSnapshot[targetType][makerOrderId]) { - if (size <= 0) { - delete this.fullSnapshot[targetType][makerOrderId]; - } else { - this.fullSnapshot[targetType][makerOrderId][3] = size; - } - } - } - } - break; - case 'update': - /* - "symbol": "XBTUSDM", // 合约 - "sequence": 3262786897, // 顺序号 - "type": "update", - "orderId": "5c0b520032eba53a888fd01f", // 订单号 - "price": 3634, // 委托价格 - "size": 100, // 改变后数量 - "oldSize": 20, // 改变前大小 - "ts": 1547697294838004923 // 更新时间 - 纳秒 - */ - { - // update event - const { orderId, size } = message; - if (this.fullSnapshot.asks[orderId]) { - if (size <= 0) { - delete this.fullSnapshot.asks[orderId]; - } else { - this.fullSnapshot.asks[orderId][3] = size; - } - } - if (this.fullSnapshot.bids[orderId]) { - if (size <= 0) { - delete this.fullSnapshot.bids[orderId]; - } else { - this.fullSnapshot.bids[orderId][3] = size; - } - } - } - break; - case 'done': - /* - "symbol": "XBTUSDM", // 合约 - "sequence": 3262786901, // 顺序号 - "type": "done", - "orderId": "5c0b520032eba53a888fd02x", // 订单号 - "reason": "filled", // filled or canceled - "ts": 1547697294838004923, // 完成时间 - "clientOid": "ad123ad" // 可选,用于用户鉴别自己的订单 - */ - { - // done event - const { orderId } = message; - if (this.fullSnapshot.asks[orderId]) { - delete this.fullSnapshot.asks[orderId]; - } - if (this.fullSnapshot.bids[orderId]) { - delete this.fullSnapshot.bids[orderId]; - } - } - break; - default: - { - log('invalid l3 type', type); - updated = false; - } - break; - } - - if (updated) { - this.fullSnapshot.sequence = sequence; - - // callback message - if (typeof this.messageEventCallback === 'function') { - this.messageEventCallback(message); - } - } - } - - /** public */ - listen = () => { - this.datafeed.connectSocket(); - this.datafeed.onClose(() => { - log('ws closed, status ', this.datafeed.trustConnected); - this.rebuild(); - }); - - const topic = `/contractMarket/level3:${this.symbol}`; - this.datafeed.subscribe(topic, (message) => { - if (message.topic === topic) { - // log(message); - this.bufferMessage(message.data); - } - }); - this.rebuild(); - } - - // message event handler - handleMessageEvent = (callback) => { - if (typeof callback === 'function') { - this.messageEventCallback = callback; - } - } - - // get detail order book - getDetailOrderBook = (limit = 10) => { - const dirty = this.fullSnapshot.dirty; - const sequence = this.fullSnapshot.sequence; - const asks = arrl3Map(this.fullSnapshot.asks, 'asks', 'asc').slice(0, limit); - const bids = arrl3Map(this.fullSnapshot.bids, 'bids', 'desc').slice(0, limit); - const ping = this.datafeed.ping; - - return { - dirty, - sequence, - asks, - bids, - ping, - }; - } - - // get merged order book - getOrderBook = (limit = 10) => { - const dirty = this.fullSnapshot.dirty; - const sequence = this.fullSnapshot.sequence; - const ping = this.datafeed.ping; - - const asks = arrl3Map(this.fullSnapshot.asks, 'asks', 'asc'); - const asksTmp = {}; - _.each(asks, ([price, size, ts, orderId]) => { - if (asksTmp[price]) { - asksTmp[price][0] += (+size); - asksTmp[price][1][orderId] = true; - } else { - asksTmp[price] = [(+size), { [orderId]: true }]; - } - }); - const finalAsks = arrMap(asksTmp, 'asc').slice(0, limit); - - const bids = arrl3Map(this.fullSnapshot.bids, 'bids', 'desc'); - const bidsTmp = {}; - _.each(bids, ([price, size, ts, orderId]) => { - if (bidsTmp[price]) { - bidsTmp[price][0] += (+size); - bidsTmp[price][1][orderId] = true; - } else { - bidsTmp[price] = [(+size), { [orderId]: true }]; - } - }); - const finalBids = arrMap(bidsTmp, 'desc').slice(0, limit); - - return { - dirty, - sequence, - asks: finalAsks, - bids: finalBids, - ping, - }; - } -} - -export default Level3; \ No newline at end of file diff --git a/src/com/order.js b/src/com/order.js deleted file mode 100644 index 234aaed..0000000 --- a/src/com/order.js +++ /dev/null @@ -1,257 +0,0 @@ - -import http from '../lib/http'; -import log from '../lib/log'; -import { genUUID } from '../lib/utils'; - -class Order { - symbol; - leverage; - - constructor(symbol, leverage) { - this.symbol = symbol; - this.leverage = leverage; - } - - static LIMIT_SELECT = { - timeInForce: { GTC: 'GTC', IOC: 'IOC' }, - postOnly: { YES: true, NO: false }, - hidden: { YES: true, NO: false }, - iceberg: { YES: true, NO: false }, - } - - // limit order ---> success ---> clOid - limitOrder = async (price, size, side, extraProps = {}) => { - /* - price String 限价单的价格 - size Integer 订单数量。必须是一个正数。 - - extraProps (include typeProps): - timeInForce String [可选] 订单时效策略,包括GTC、IOC(默认为GTC)。 - postOnly boolean [可选] 只挂单的标识。选择postOnly,不允许选择hidden和iceberg。当订单时效为IOC策略时,该参数无效。 - hidden boolean [可选] 订单不会在买卖盘中展示。选择hidden,不允许选择postOnly。 - iceberg boolean [可选] 仅设置可见的部分会显示在买卖盘中。选择iceberg,不允许选择postOnly。 - visibleSize Integer [可选] 冰山单最大可展示的数量。 - typeProps: - remark String [可选] 下单备注,字符长度不能超过100 个字符(UTF-8)。 - stop String [可选] 触发价格的两种类型。下跌至某个价格(down),或上涨至某个价格(up)。设置后,就必须设置stopPrice和stopPriceType 参数。 - stopPriceType String [可选] 止损单触发价类型,包括TP、IP和MP, 只要设置stop参数,就必须设置此属性。 - stopPrice String [可选] 只要设置stop参数,就必须设置此属性。 - stp String [可选] 自成交保护,分为 CN、CO、CB和 DC 四种策略 - reduceOnly boolean [可选] 只减仓标记, 默认值是 false - closeOrder boolean [可选] 平仓单标记, 默认值是 false - forceHold boolean [可选] 强制冻结标记(减仓同样适用),可将订单留在买卖盘中而不受仓位变化的影响。默认值是 false - */ - if (typeof price !== 'string' || - typeof size !== 'number' || - !(size > 0) - ) { - log('Invalid price or size', price, size); - return false; - } - - return await this._order('limit', side, { - ...extraProps, - price, - size, - }); - } - - // market order ---> success ---> clOid - marketOrder = async (size, side, extraProps = {}) => { - /* - size Integer [可选] 下单数量 - extraProps (include typeProps): - typeProps: - remark String [可选] 下单备注,字符长度不能超过100 个字符(UTF-8)。 - stop String [可选] 触发价格的两种类型。下跌至某个价格(down),或上涨至某个价格(up)。设置后,就必须设置stopPrice和stopPriceType 参数。 - stopPriceType String [可选] 止损单触发价类型,包括TP、IP和MP, 只要设置stop参数,就必须设置此属性。 - stopPrice String [可选] 只要设置stop参数,就必须设置此属性。 - stp String [可选] 自成交保护,分为 CN、CO、CB和 DC 四种策略 - reduceOnly boolean [可选] 只减仓标记, 默认值是 false - closeOrder boolean [可选] 平仓单标记, 默认值是 false - forceHold boolean [可选] 强制冻结标记(减仓同样适用),可将订单留在买卖盘中而不受仓位变化的影响。默认值是 false - */ - if (typeof size !== 'number' || - !(size > 0) - ) { - log('Invalid size', size); - return false; - } - - return await this._order('market', side, { - ...extraProps, - size, - }); - } - - // cancle single order by id - cancleOrderById = async (orderServId) => { - let result = false; - - if (!orderServId) { - log('Invalid orderId to cancle', orderServId); - return result; - } - try { - // { - // "code": "200000", - // "data": { - // "cancelledOrderIds": [ - // "5bd6e9286d99522a52e458de" - // ] - // } - // } - const { data: { cancelledOrderIds } } = await http.del(`/api/v1/orders/${orderServId}`); - result = cancelledOrderIds; - } catch (e) { - log('cancle order error', e); - } - return result; - } - - cancleAllOrders = async () => { - // DELETE /api/v1/orders?symbol=XBTUSDM - let result = false; - - try { - // { - // "code": "200000", - // "data": { - // "cancelledOrderIds": [ - // "5bd6e9286d99522a52e458de" - // ] - // } - // } - const { data: { cancelledOrderIds } } = await http.del('/api/v1/orders', { symbol: this.symbol }); - result = cancelledOrderIds; - } catch (e) { - log('cancle all order error', e); - } - return result; - } - - cancleAllStopOrders = async () => { - // DELETE /api/v1/stopOrders?symbol=XBTUSDM - let result = false; - - try { - // { - // "code": "200000", - // "data": { - // "cancelledOrderIds": [ - // "5bd6e9286d99522a52e458de" - // ] - // } - // } - const { data: { cancelledOrderIds } } = await http.del('/api/v1/stopOrders', { symbol: this.symbol }); - result = cancelledOrderIds; - } catch (e) { - log('cancle all stop order error', e); - } - return result; - } - - getActiveOrders = async () => { - // GET /api/v1/orders?status=active - let result = false; - - try { - /* - { - "code": "200000", - "data": { - "currentPage": 1, - "pageSize": 100, - "totalNum": 1000, - "totalPage": 10, - "items": [ - { - "id": "5cdfc138b21023a909e5ad55", //订单编号 - "symbol": "XBTUSDM", //合约编号 - "type": "limit", //类型, 市价单或限价单 - "side": "buy", //买卖方向 - "price": "3600", //下单价格 - "size": 20000, //数量 - "value": "56.1167227833", //订单价值 - "dealValue": "0", //已经成交订单价值 - "dealSize": 0, //已经成交订单数量 - "stp": "", //stp 类型 - "stop": "", //止损订单类型 - "stopPriceType": "", //止损订单触发价格类型 - "stopTriggered": false, //止损订单是否触发标志 - "stopPrice": null, //止损订单触发价格 - "timeInForce": "GTC", //timeInForce类型 - "postOnly": false, //postOnly标志 - "hidden": false, //隐藏单标志 - "iceberg": false, //冰山单标志 - "visibleSize": null, //冰山单可见数量 - "leverage": "20", //杠杆倍数 - "forceHold": false, //强制冻结单标志 - "closeOrder": false, //平仓单标志 - "closeOnly": false, //只减仓单标志 - "clientOid": "5ce24c16b210233c36ee321d", //客户订单编号 - "remark": null, //注解 - "isActive": true, //未完成订单标志 - "cancelExist": false, //订单存在取消数量标志 - "createdAt": 1558167872000 //创建时间 - } - ] - } - } - */ - const { data } = await http.get('/api/v1/orders', { - symbol: this.symbol, - status: 'active', - }); - result = data; - } catch (e) { - log('get active orders error', e); - } - return result; - } - - // -----> private - _order = async (type, side, typeProps = {}) => { - /* - clientOid String 唯一的订单ID,可用于识别订单。如:UUID 只能包含数字、字母、下划线(_)或 分隔线(-) - side String buy 或 sell - symbol String 有效合约代码。如:XBTUSDM - leverage String 下单杠杆倍数 - type String [可选] 订单类型,包括limit或market,默认limit。 - - typeProps: - remark String [可选] 下单备注,字符长度不能超过100 个字符(UTF-8)。 - stop String [可选] 触发价格的两种类型。下跌至某个价格(down),或上涨至某个价格(up)。设置后,就必须设置stopPrice和stopPriceType 参数。 - stopPriceType String [可选] 止损单触发价类型,包括TP、IP和MP, 只要设置stop参数,就必须设置此属性。 - stopPrice String [可选] 只要设置stop参数,就必须设置此属性。 - stp String [可选] 自成交保护,分为 CN、CO、CB和 DC 四种策略 - reduceOnly boolean [可选] 只减仓标记, 默认值是 false - closeOrder boolean [可选] 平仓单标记, 默认值是 false - forceHold boolean [可选] 强制冻结标记(减仓同样适用),可将订单留在买卖盘中而不受仓位变化的影响。默认值是 false - */ - let result = false; - try { - const clientOid = genUUID(); - - const { data: { orderId } } = await http.post('/api/v1/orders', { - ...typeProps, - clientOid, - side, - symbol: this.symbol, - leverage: this.leverage, - type, - }); - - result = { - srOid: orderId, - clOid: clientOid, - }; - } catch (e) { - log('order error', e); - } - return result; - } - -} - -export default Order; \ No newline at end of file diff --git a/src/com/position.js b/src/com/position.js deleted file mode 100644 index fdd4f3a..0000000 --- a/src/com/position.js +++ /dev/null @@ -1,73 +0,0 @@ - -import http from '../lib/http'; -import log from '../lib/log'; - -class Position { - symbol; - - constructor(symbol) { - this.symbol = symbol; - } - - // TODO update by websocket - - - getPosition = async () => { - // GET /api/v1/position?symbol=XBTUSDM - let result = false; - - try { - /* - { - "code": "200000", - "data": { - "id": "5ce3cda60c19fc0d4e9ae7cd", //仓位id - "symbol": "XBTUSDM", //合约symbol - "autoDeposit": true, //是否自动追加保证金 - "maintMarginReq": 0.005, //维持保证金比例 - "riskLimit": 200, //风险限额 - "realLeverage": 1.06, //杠杆倍数 - "crossMode": false, //是否全仓 - "delevPercentage": 0.1, //ADL分位数 - "openingTimestamp": 1558433191000, //开仓时间 - "currentTimestamp": 1558507727807, //当前时间戳 - "currentQty": -20, //当前仓位 - "currentCost": 0.00266375, //当前总仓位价值 - "currentComm": 0.00000271, //当前总费用 - "unrealisedCost": 0.00266375, //未实现价值 - "realisedGrossCost": 0, //累加已实现毛利价值 - "realisedCost": 0.00000271, //当前累计已实现仓位价值 - "isOpen": true, //是否开仓 - "markPrice": 7933.01, //标记价格 - "markValue": 0.00252111, //标记价值 - "posCost": 0.00266375, //仓位价值 - "posCross": 1.2e-7, //手动追加的保证金 - "posInit": 0.00266375, //杠杆保证金 - "posComm": 0.00000392, //破产费用 - "posLoss": 0, //资金费用减少的资金 - "posMargin": 0.00266779, //仓位保证金 - "posMaint": 0.00001724, //维持保证金 - "maintMargin": 0.00252516, //仓位保证金 - "realisedGrossPnl": 0, //累加已实现毛利 - "realisedPnl": -0.00000253, //已实现盈亏 - "unrealisedPnl": -0.00014264, //未实现盈亏 - "unrealisedPnlPcnt": -0.0535, //仓位盈亏率 - "unrealisedRoePcnt": -0.0535, //投资回报率 - "avgEntryPrice": 7508.22, //平均开仓价格 - "liquidationPrice": 1000000, //强平价格 - "bankruptPrice": 1000000 //破产价格 - } - } - */ - const { data } = await http.get('/api/v1/position', { - symbol: this.symbol, - }); - result = data; - } catch (e) { - log('get position error', this.symbol, e); - } - return result; - } -} - -export default Position; \ No newline at end of file diff --git a/src/com/ticker.js b/src/com/ticker.js deleted file mode 100644 index a7cae39..0000000 --- a/src/com/ticker.js +++ /dev/null @@ -1,60 +0,0 @@ -import _ from 'lodash'; -import Datafeed from '../lib/datafeed'; -import log from '../lib/log'; - -class Ticker { - datafeed; - symbol; - snapshot = { - dirty: true, - data: {}, - }; - - constructor(symbol, datafeed) { - this.symbol = symbol; - - if (datafeed instanceof Datafeed) { - this.datafeed = datafeed; - } else { - this.datafeed = new Datafeed(); - } - } - - getSnapshot = () => { - return _.cloneDeep(this.snapshot); - }; - - updateSnapshot = (data) => { - // { symbol: 'XBTUSDM', - // side: 'buy', - // size: 100, - // price: 10000, - // bestBidSize: 9371, - // bestBidPrice: '9996.0', - // bestAskPrice: '10000.0', - // tradeId: '5d8743653c7feb4209084ffa', - // ts: 1569145701444522200, - // bestAskSize: 32422 } - - this.snapshot = { - dirty: false, - data, - }; - } - - listen = () => { - this.datafeed.connectSocket(); - this.datafeed.onClose(() => { - log('ticker ws closed, status ', this.datafeed.trustConnected); - this.snapshot.dirty = true; - }); - - this.datafeed.subscribe(`/contractMarket/ticker:${this.symbol}`, (message) => { - if (message.data) { - this.updateSnapshot(message.data); - } - }); - } -} - -export default Ticker; \ No newline at end of file diff --git a/src/com/time.js b/src/com/time.js deleted file mode 100644 index 06e1b9d..0000000 --- a/src/com/time.js +++ /dev/null @@ -1,28 +0,0 @@ - -import http from '../lib/http'; -import log from '../lib/log'; - -class Time { - - getTimestamp = async () => { - // GET /api/v1/timestamp - let result = false; - - try { - /* - { - "code":"200000", - "msg":"success", - "data":1546837113087 - } - */ - const { data } = await http.get('/api/v1/timestamp'); - result = data; - } catch (e) { - log('get timestamp error', e); - } - return result; - } -} - -export default Time; \ No newline at end of file diff --git a/src/dataType/account.ts b/src/dataType/account.ts new file mode 100644 index 0000000..f345057 --- /dev/null +++ b/src/dataType/account.ts @@ -0,0 +1,37 @@ +import { PageOffsetParams, PageSizeParams } from './common'; + +export type TransactionType = + | 'RealisedPNL' + | 'Deposit' + | 'Withdrawal' + | 'TransferIn' + | 'TransferOut'; + +export interface TransactionHistoryParams extends PageOffsetParams { + type?: TransactionType; + currency?: string; +} + +export interface SubApiParams { + subName: string; // Sub-account name, create sub account name of API Key + passphrase: string; // Password(Must contain 7-32 characters. Cannot contain any spaces.) + permission?: string; // Permissions(Only "General" and "Trade" permissions can be set, such as "General, Trade". The default is "General") + ipWhitelist?: string; // IP whitelist(You may add up to 20 IPs. Use a halfWidth comma to each IP) + expire?: string; // API expiration time; Never expire(default)-1, 30Day30, 90Day90, 180Day180, 360Day360 +} + +export interface CreateSubApiParams extends SubApiParams { + remark: string; // Remarks(1~24 characters) +} + +export interface UpdateSubApiParams extends SubApiParams { + apiKey: string; // API-Key(Sub-account APIKey) +} + +export type TransferStatusType = 'PROCESSING' | 'SUCCESS' | 'FAILURE'; + +export interface TransferListParams extends PageSizeParams { + status?: TransferStatusType; + queryStatus?: TransferStatusType; + currency?: string; +} diff --git a/src/dataType/common.ts b/src/dataType/common.ts new file mode 100644 index 0000000..bb0135e --- /dev/null +++ b/src/dataType/common.ts @@ -0,0 +1,22 @@ +export interface MakeRequestParams { + body?: object | string; + method: string; + endpoint: string; + callback?: Function; + isPrivate?: boolean; + } + + export interface PageOffsetParams { + startAt?: string; + endAt?: string; + offset?: number; + forward?: boolean | true; + maxCount?: number; + } + + export interface PageSizeParams { + startAt?: string; + endAt?: string; + pageSize?: number; + currentPage?: number; + } \ No newline at end of file diff --git a/src/dataType/index.d.ts b/src/dataType/index.d.ts new file mode 100644 index 0000000..2eba702 --- /dev/null +++ b/src/dataType/index.d.ts @@ -0,0 +1,7 @@ + +export * from './common'; +export * from './account'; +export * from './other'; +export * from './order'; +export * from './market'; +export * from './socket'; \ No newline at end of file diff --git a/src/dataType/market.ts b/src/dataType/market.ts new file mode 100644 index 0000000..67cb08e --- /dev/null +++ b/src/dataType/market.ts @@ -0,0 +1,13 @@ +import { PageOffsetParams } from './common'; + +export interface klineParams { + symbol: string; + granularity: number; + from?: string; + to?: string; +} + +export interface IndexListParams extends PageOffsetParams { + symbol: string; + reverse?: boolean | true; +} \ No newline at end of file diff --git a/src/dataType/order.ts b/src/dataType/order.ts new file mode 100644 index 0000000..67788d4 --- /dev/null +++ b/src/dataType/order.ts @@ -0,0 +1,57 @@ +import { PageSizeParams } from './common'; + +export type BaseOrderType = 'limit' | 'market'; +export type OrderType = 'limit' | 'market' | 'limit_stop' | 'market_stop'; + +export type OrderOptionalParamsType = + | 'type' + | 'remark' + | 'stop' + | 'stopPriceType' + | 'stopPrice' + | 'reduceOnly' + | 'closeOrder' + | 'forceHold' + | 'timeInForce' + | 'postOnly' + | 'hidden' + | 'iceberg' + | 'visibleSize'; + +export type OptionalParamsObject = { + [P in T]?: any; +}; + +export interface BaseOrderBody { + symbol: string; + size: number; + leverage?: number; + clientOid?: string; + optional?: OptionalParamsObject; +} + +export interface OrderBody extends BaseOrderBody { + side: string; + price?: number | string; +} + +export type OpenOrderStatusType = 'active' | 'done'; +export interface OpenOrderListParams extends PageSizeParams { + status?: OpenOrderStatusType; + symbol?: string; + side?: string; + type?: OrderType; +} + +export interface StopOrderListParams extends PageSizeParams { + symbol?: string; + side?: string; + type?: BaseOrderType; +} + +export interface FillsParams extends PageSizeParams { + orderId?: string; // List fills for a specific order only (If you specify orderId, other parameters can be ignored) + symbol?:string; + side?: string; + type?: OrderType; +} diff --git a/src/dataType/other.ts b/src/dataType/other.ts new file mode 100644 index 0000000..18c624d --- /dev/null +++ b/src/dataType/other.ts @@ -0,0 +1,6 @@ +import { PageOffsetParams } from './common'; + +export interface FundingHistoryParams extends PageOffsetParams { + symbol: string; + reverse?: boolean | true; // This parameter functions to judge whether the lookup is forward or not. True means “yes” and False means “no”. This parameter is set as true by default +} diff --git a/src/dataType/socket.ts b/src/dataType/socket.ts new file mode 100644 index 0000000..20c94fb --- /dev/null +++ b/src/dataType/socket.ts @@ -0,0 +1,9 @@ +export type Callback = (data: any) => void; + +export interface Subscription { + id: string; + callback: Callback; + topic: string; + privateChannel: boolean; + strict?: boolean; +} diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 1f3b509..0000000 --- a/src/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { setEnv } from './lib/env'; - -export default { - setEnv, -} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..9fb3e67 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,897 @@ +import { v4 as uuidV4 } from 'uuid'; +import { map } from 'lodash'; +import WebSocket from 'ws'; + +import Request from './tools/request'; +import { splitArray } from './tools/tools'; + +import { + returnBodyAndEndpoint, + FUTURES_STOP_ORDER_EP, + FUTURES_RECENT_DONE_ORDERS_EP, + FUTURES_FILLS_EP, + FUTURES_RECENT_FILLS_EP, + FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP, + FUTURES_POSITION_EP, + FUTURES_POSITIONS_EP, + FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP, + FUTURES_POSITION_MARGIN_EP, + FUTURES_RISK_LIMIT_EP, + FUTURES_CHANGE_RISK_LIMIT_EP, + FUTURES_FUNDING_HISTORY_EP, + FUTURES_CONTRACTS_ACTIVE_EP, + FUTURES_CONTRACTS_DETAIL_EP, + FUTURES_TICKER_EP, + FUTURES_LEVEL2_EP, + FUTURES_LEVEL2_20_EP, + FUTURES_LEVEL2_100_EP, + FUTURES_TRADE_HISTORY_EP, + FUTURES_TIMESTAMP_EP, + FUTURES_SERVICE_STATUS_EP, + FUTURES_KLINE_EP, + FUTURES_INTEREST_EP, + FUTURES_INDEX_EP, + FUTURES_MARK_PRICE_EP, + FUTURES_PREMIUM_EP, + FUTURES_FUNDING_RATE_EP, + FUTURES_ACCOUNT_OVERVIEW_EP, + FUTURES_TRANSACTION_HISTORY_EP, + FUTURES_SUB_API_EP, + FUTURES_UPDATE_SUB_API_EP, + FUTURES_TRANSFER_OUT_EP, + FUTURES_TRANSFER_IN_EP, + FUTURES_TRANSFER_LIST_EP +} from './resetAPI'; +import { + PUBLIC_BULLET_EP, + PRIVATE_BULLET_EP, + TICKER, + TRADE_ORDERS, + LEVEL2, + LEVEL2_DEPTH5, + LEVEL2_DEPTH50, + EXECUTION, + INSTRUMENT, + ANNOUNCEMENT, + SNAPSHOT, + ADVANCE_ORDERS, + WALLET, + POSITION +} from './websocket'; + +import { GET, POST, DELETE } from './tools/constants'; +import { filterEmptyValues, log } from './tools/tools'; +import { + CreateSubApiParams, + FillsParams, + FundingHistoryParams, + MakeRequestParams, + OpenOrderListParams, + StopOrderListParams, + TransactionHistoryParams, + TransferListParams, + UpdateSubApiParams, + IndexListParams, + klineParams, + Callback +} from './dataType'; +import { WebSocketClient, CONNECT_ID, TICKER_V2 } from './websocket'; + +export default class KuCoinFutures { + private request: Request; + private socketInstanceCache: any = new Map(); + constructor(props: { + key: string | number; + secret: string | number; + passphrase: string | number; + axiosProps: object; + }) { + const { key, secret, passphrase, axiosProps = {} } = props || {}; + this.request = new Request({ + key, + secret, + passphrase, + ...axiosProps + }); + } + + private makeRequest = async ({ + body = '', + method, + endpoint, + callback, + isPrivate = true + }: MakeRequestParams): Promise => { + try { + const params = filterEmptyValues(body); + const data = isPrivate + ? await this.request.signatureRequest(endpoint, params, method) + : await this.request.requestPublic(endpoint, params, method); + if (callback) { + return callback(data); + } else { + return data; + } + } catch (err) { + console.log(err); + return err; + } + }; + + futuresAccount = async (currency: string = 'XBT', callback?: Function) => { + return this.makeRequest({ + body: { currency }, + method: GET, + endpoint: FUTURES_ACCOUNT_OVERVIEW_EP, + callback + }); + }; + + /** + * search to transaction history + * @param params.type string -- 'RealisedPNL' | 'Deposit' | 'Withdrawal' | 'TransferIn' | 'TransferOut' + * @param params.currency -- string + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.maxCount -- default 50 + * @param params.forward -- default true + * @param callback -- callback function + */ + futuresTransactionHistory = async ( + params?: TransactionHistoryParams, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_TRANSACTION_HISTORY_EP, + callback + }); + }; + + futuresSubApi = async ( + params: { + subName: string; + apiKey?: string; + }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_SUB_API_EP, + callback + }); + }; + + futuresCreateSubApi = async ( + params: CreateSubApiParams, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_SUB_API_EP, + callback + }); + }; + + futuresUpdateSubApi = async ( + params: UpdateSubApiParams, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_UPDATE_SUB_API_EP, + callback + }); + }; + + futureDeleteSubApi = async ( + params: { + subName: string; + apiKey: string; + passphrase: string; + }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: DELETE, + endpoint: FUTURES_UPDATE_SUB_API_EP, + callback + }); + }; + + futureTransferOut = async ( + params: { + amount: number; + currency: string; + recAccountType: string; + }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_TRANSFER_OUT_EP, + callback + }); + }; + + futureTransferIn = async ( + params: { + amount: number; + currency: string; + payAccountType: string; + }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_TRANSFER_IN_EP, + callback + }); + }; + + /** + * search to transfer list + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.status -- string -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.queryStatus -- array -- 'PROCESSING' | 'SUCCESS' | 'FAILURE' + * @param params.currency -- string + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + futureTransfers = async ( + params?: TransferListParams, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_TRANSFER_LIST_EP, + callback + }); + }; + + private order = async (params: any, method = GET, callback?: Function) => { + const { body, endpoint } = returnBodyAndEndpoint(params, method); + return this.makeRequest({ body, method, endpoint, callback }); + }; + + private stopOrder = async ( + params: any, + method = GET, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method, + endpoint: FUTURES_STOP_ORDER_EP, + callback + }); + }; + + futuresBuy = async ( + params: { + symbol: string; + size: string | number; + price: string | number; + leverage?: number; + clientOid?: string; + optional?: object; + }, + callback?: Function + ) => { + const { + price, + symbol, + size, + leverage = 1, + clientOid = uuidV4(), + optional + } = params; + if (!symbol) { + throw new TypeError('Order buy symbol must be set!'); + } + return this.order( + { side: 'buy', price, symbol, size, leverage, clientOid, optional }, + POST, + callback + ); + }; + + futuresSell = async ( + params: { + symbol: string; + size: string | number; + price: string | number; + leverage?: number; + clientOid?: string; + optional?: object; + }, + callback?: Function + ) => { + const { + price, + symbol, + size, + leverage = 1, + clientOid = uuidV4(), + optional + } = params; + if (!symbol) { + throw new TypeError('Order sell symbol must be set!'); + } + return this.order( + { side: 'sell', price, symbol, size, leverage, clientOid, optional }, + POST, + callback + ); + }; + + futuresCancel = async (orderId: string, callback?: Function) => { + return this.order(orderId, DELETE, callback); + }; + + futuresCancelAllOpenOrders = async (symbol?: string, callback?: Function) => { + return this.order({ symbol }, DELETE, callback); + }; + + futuresCancelAllStopOrders = async (symbol?: string, callback?: Function) => { + return this.stopOrder({ symbol }, DELETE, callback); + }; + + futuresCancelAll = async (symbol?: string, callback?: Function) => { + const cancelAllOpenOrders = this.futuresCancelAllOpenOrders( + symbol, + callback + ); + const cancelAllStopOrders = this.futuresCancelAllStopOrders( + symbol, + callback + ); + return Promise.all([cancelAllOpenOrders, cancelAllStopOrders]); + }; + + /** + * search to open orders list + * @param params.status --'active'|'done' default 'active' + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + futuresOpenOrders = async ( + params: OpenOrderListParams, + callback?: Function + ) => { + return this.order(params, GET, callback); + }; + + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 1000 + * @param callback -- callback function + */ + futuresStopOrders = async ( + params: StopOrderListParams, + callback?: Function + ) => { + return this.stopOrder(params, GET, callback); + }; + + futuresRecentDoneOrders = async (symbol?: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_RECENT_DONE_ORDERS_EP, + callback + }); + }; + + /** + * search to order detail + * @param params -- string orderId || object { clientOid } + * @param callback -- callback function + */ + futuresOrderDetail = async (params: string | object, callback?: Function) => { + return this.order(params, GET, callback); + }; + + /** + * search to stop orders list + * @param params.orderId -- string + * @param params.symbol -- string symbol + * @param params.side --'buy'|'sell' + * @param params.type -- 'limit'|'market'|'limit_stop'|'market_stop' + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.currentPage -- default 1 + * @param params.pageSize -- default 50 | max 100 + * @param callback -- callback function + */ + futuresFills = async (params?: FillsParams, callback?: Function) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_FILLS_EP, + callback + }); + }; + + futuresRecentFills = async (symbol?: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_RECENT_FILLS_EP, + callback + }); + }; + + futuresMarginOpenOrders = async (symbol: string, callback?: Function) => { + if (!symbol) { + console.error('Required String parameter symbol'); + return; + } + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP, + callback + }); + }; + + futuresPositionDetail = async (symbol?: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_POSITION_EP, + callback + }); + }; + + futuresPositions = async (currency?: string, callback?: Function) => { + return this.makeRequest({ + body: { currency }, + method: GET, + endpoint: FUTURES_POSITIONS_EP, + callback + }); + }; + + futuresPositionAutoDeposit = async ( + params: { symbol: string; status: boolean }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP, + callback + }); + }; + + futuresPositionMargin = async ( + params: { + symbol: string; + margin: number; + bizNo?: string; + }, + callback?: Function + ) => { + const { symbol, margin, bizNo } = params; + const makeBizNo = bizNo || uuidV4(); + return this.makeRequest({ + body: { symbol, margin, bizNo: makeBizNo }, + method: POST, + endpoint: FUTURES_POSITION_MARGIN_EP, + callback + }); + }; + + futuresRiskLimit = async (symbol?: string, callback?: Function) => { + return this.makeRequest({ + body: symbol, + method: GET, + endpoint: FUTURES_RISK_LIMIT_EP, + callback + }); + }; + + futuresChangeRiskLimit = async ( + params: { + symbol: string; + level: number; + }, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: POST, + endpoint: FUTURES_CHANGE_RISK_LIMIT_EP, + callback + }); + }; + + /** + * search to stop orders list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean + * @param params.offset -- long + * @param params.forward -- default true + * @param params.maxCount -- default 10 + * @param callback -- callback function + */ + futuresFundingHistory = async ( + params?: FundingHistoryParams, + callback?: Function + ) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_FUNDING_HISTORY_EP, + callback + }); + }; + + futuresContractsActive = async (callback?: Function) => { + return this.makeRequest({ + method: GET, + endpoint: FUTURES_CONTRACTS_ACTIVE_EP, + callback, + isPrivate: false + }); + }; + + futuresContractDetail = async (symbol: string, callback?: Function) => { + if (!symbol) { + console.log('Required Parameter. Symbol of the contract'); + return false; + } + return this.makeRequest({ + body: symbol, + method: GET, + endpoint: FUTURES_CONTRACTS_DETAIL_EP, + callback, + isPrivate: false + }); + }; + + futuresTicker = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_TICKER_EP, + callback + }); + }; + + futuresLevel2 = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_LEVEL2_EP, + callback, + isPrivate: false + }); + }; + + futuresLevel2Depth20 = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_LEVEL2_20_EP, + callback, + isPrivate: false + }); + }; + + futuresLevel2Depth100 = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_LEVEL2_100_EP, + callback, + isPrivate: false + }); + }; + + futuresTradeHistory = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + body: { symbol }, + method: GET, + endpoint: FUTURES_TRADE_HISTORY_EP, + callback, + isPrivate: false + }); + }; + + futuresTimestamp = async (callback?: Function) => { + return this.makeRequest({ + method: GET, + endpoint: FUTURES_TIMESTAMP_EP, + callback, + isPrivate: false + }); + }; + + futuresStatus = async (callback?: Function) => { + return this.makeRequest({ + method: GET, + endpoint: FUTURES_SERVICE_STATUS_EP, + callback, + isPrivate: false + }); + }; + + /** + * search to kline + * @param params.symbol -- string symbol + * @param params.granularity -- number + * @param params.form -- timestamp + * @param params.to -- boolean + */ + futuresKline = async (params: klineParams, callback?: Function) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_KLINE_EP, + callback, + isPrivate: false + }); + }; + + /** + * search to interest list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresInterests = async (params?: IndexListParams, callback?: Function) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_INTEREST_EP, + callback, + isPrivate: false + }); + }; + + /** + * search to index list + * @param params.symbol -- string symbol + * @param params.reverse -- boolean default true + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresIndexList = async (params?: IndexListParams, callback?: Function) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_INDEX_EP, + callback, + isPrivate: false + }); + }; + + futuresMarkPrice = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + method: GET, + endpoint: `${FUTURES_MARK_PRICE_EP}/${symbol}/current`, + callback, + isPrivate: false + }); + }; + + /** + * search to premium list + * @param params.symbol -- string symbol + * @param params.startAt -- timestamp + * @param params.endAt -- timestamp + * @param params.reverse -- boolean default true + * @param params.offset -- long + * @param params.forward -- boolean default true + * @param params.maxCount -- number default 10 | max 100 + * @param callback -- callback function + */ + futuresPremiums = async (params?: IndexListParams, callback?: Function) => { + return this.makeRequest({ + body: params, + method: GET, + endpoint: FUTURES_PREMIUM_EP, + callback, + isPrivate: false + }); + }; + + futuresFundingRate = async (symbol: string, callback?: Function) => { + return this.makeRequest({ + method: GET, + endpoint: `${FUTURES_FUNDING_RATE_EP}/${symbol}/current`, + callback, + isPrivate: false + }); + }; + + futuresGetSocketInstance = async (isPrivate: boolean) => { + const { + data: { instanceServers, token } + } = await this.makeRequest({ + method: POST, + endpoint: isPrivate ? PRIVATE_BULLET_EP : PUBLIC_BULLET_EP, + isPrivate + }); + const wssUri = `${instanceServers[0].endpoint}?token=${token}&acceptUserMessage=true&connectId=${CONNECT_ID}`; + const websocket = new WebSocket(wssUri); + const socketInstance = new WebSocketClient(wssUri, websocket); + return socketInstance; + }; + + futuresGetCacheSocketInstance = async ( + isPrivate: boolean + ): Promise => { + const key = `futures_${isPrivate}`; + if (!this.socketInstanceCache.has(key)) { + this.socketInstanceCache.set( + key, + this.futuresGetSocketInstance(isPrivate) + ); + } + return this.socketInstanceCache.get(key); + }; + + futuresSocketSubscribe = async ( + topic: string, + callback: Callback = log, + isPrivate: boolean = false, + strict: boolean = true + ) => { + if (!topic) { + console.log('Required parameter topic'); + return false; + } + this.futuresGetCacheSocketInstance(isPrivate) + .then((socketInstance) => { + return socketInstance.subscribe(topic, callback, isPrivate, strict); + }) + .catch((err) => { + console.log(`execute ${topic} error: ${JSON.stringify(err)}`); + return false; + }); + }; + + get websocket() { + const _this = this; + + async function makeSubscribe( + symbols: string | [], + topic: string, + callback = log, + privateChannel = false + ) { + if (Array.isArray(symbols)) { + const symbolSplit = splitArray(symbols); + const subscribeList = map(symbolSplit, (symbolStr) => { + if (symbolStr) { + return _this.futuresSocketSubscribe( + `${topic}:${symbolStr}`, + callback, + privateChannel, + false + ); + } + }); + return await Promise.all(subscribeList); + } else if (symbols) { + return await _this.futuresSocketSubscribe( + `${topic}:${symbols}`, + callback, + privateChannel + ); + } + return await _this.futuresSocketSubscribe( + topic, + callback, + privateChannel + ); + } + + /* === public socket === */ + async function tickerV2(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, TICKER_V2, callback); + } + + async function ticker(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, TICKER, callback); + } + + async function level2(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, LEVEL2, callback); + } + + async function execution(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, EXECUTION, callback); + } + + async function level2Depth5(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, LEVEL2_DEPTH5, callback); + } + + async function level2Depth50(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, LEVEL2_DEPTH50, callback); + } + + async function instrument(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, INSTRUMENT, callback); + } + + async function announcement(callback = log) { + return await _this.futuresSocketSubscribe(ANNOUNCEMENT, callback, false); + } + + async function snapshot(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, SNAPSHOT, callback); + } + + /* === private socket === */ + async function tradeOrders(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, TRADE_ORDERS, callback, true); + } + + async function advancedOrders(callback = log) { + return await _this.futuresSocketSubscribe(ADVANCE_ORDERS, callback, true); + } + + async function wallet(callback = log) { + return await _this.futuresSocketSubscribe(WALLET, callback, true); + } + + async function position(symbols: string | [], callback = log) { + return await makeSubscribe(symbols, POSITION, callback, true); + } + + return { + tickerV2, + ticker, + level2, + execution, + level2Depth5, + level2Depth50, + instrument, + announcement, + snapshot, + tradeOrders, + advancedOrders, + wallet, + position + }; + } +} diff --git a/src/lib/codes.js b/src/lib/codes.js deleted file mode 100644 index 1421de6..0000000 --- a/src/lib/codes.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - // Success - SUCCESS: 200000, - SHORT_SUCCESS: 200, - // Account - ACCOUNT_EXISTS: 230005, -}; \ No newline at end of file diff --git a/src/lib/datafeed.js b/src/lib/datafeed.js deleted file mode 100644 index eb6f840..0000000 --- a/src/lib/datafeed.js +++ /dev/null @@ -1,351 +0,0 @@ -import _ from 'lodash'; -import http from './http'; -import log from './log'; -import WebSocket from 'ws'; -import EventEmitter from 'event-emitter'; -import EventAllOff from 'event-emitter/all-off'; -import { clearInterval } from 'timers'; -// import io from 'socket.io-client'; -// import parser from 'socket.io-msgpack-parser'; - -const generateId = () => '_e_' + Date.now() + (Math.random() * 365).toString(16).slice(4,14) + 'yl'; -const loop = () => {}; -const getTopicPrefix = topic => topic.split(':')[0]; - -export default class Datafeed { - - trustConnected = false; - privateBullet = false; - client = null; - emitter = new EventEmitter(); - topicState = []; - topicListener = { - // topicPrefix => [...hooks], - }; - incrementSubscribeId = 0; - ping = 0; - - constructor(privateBullet = false) { - this.privateBullet = privateBullet; - } - - _connecting = false; - connectSocket = async () => { - if (this.trustConnected) { - log('ws conn status: ', this.trustConnected); - return; - } - if (this._connecting) { - log('ws is connecting, return'); - return; - } - this._connecting = true; - this._clearPing(); - - // clear all event - EventAllOff(this.emitter); - - const config = await this._getBulletToken(); - if (!config) { - log('getPubToken config invalid'); - - // try to reconnect - _.delay(() => { - this._connecting = false; - this.connectSocket(); - }, 3000); - return; - } - // log('getPubToken config: ', config); - log('getPubToken config'); - - const connectId = generateId(); - log('generate connectId: ', connectId); - - this.emitter.on(`welcome_${connectId}`, this._handleAfterConnect); - log('waiting welcome ack...'); - - const cl = await this._connect({ - server: config.data, - connectId, - }); - - cl.onopen = () => { - // ws.send('foo'); - log('socket connect opend', this._maxId, cl._maxId); - this.client = cl; - }; - - cl.onmessage = (evt) => { - if (!evt.data) { - log('invalid message'); - return; - } - let message = null; - try { - log('parse: ', evt.data, this._maxId, cl._maxId); - message = JSON.parse(evt.data); - } catch (e) { - log('parse message error'); - console.error(e); - } - if (!message) { - return; - } - - const { id, type } = message; - switch(type) { - case 'welcome': - case 'ack': - case 'pong': - // log(`emit: welcome_${id}`); - this.emitter.emit(`${type}_${id}`); - break; - case 'message': - // message recieve - this._distribute(message); - break; - case 'ping': - default: - log('unhandle message', evt.data); - break; - } - }; - - cl.onerror = (e) => { - log('socket connect onerror', this._maxId, cl._maxId, e.message); - } - - cl.onclose = () => { - log('socket connect closed', this._maxId, cl._maxId); - this._handleClose(); - - // try to reconnect - _.delay(() => { - this._connecting = false; - this.connectSocket(); - }, 3000); - }; - } - - _onClose = []; - _handleClose = () => { - this.trustConnected = false; - this.ping = 0; - - // on close - _.each(this._onClose, (fn) => { - if (typeof fn === 'function') { - fn(); - } - }); - } - - onClose = (callback) => { - if (typeof callback === 'function') { - this._onClose.push(callback); - } - return this; - }; - - subscribe = (topic, hook = loop, _private = false) => { - this.incrementSubscribeId += 1; - - const hookId = this.incrementSubscribeId; - const listener = { hook, id: hookId }; - const prefix = getTopicPrefix(topic); - if (this.topicListener[prefix]) { - this.topicListener[prefix].push(listener); - } else { - this.topicListener[prefix] = [listener]; - } - log('subscribed listener'); - - const find = this.topicState.filter(item => item[0] === topic); - if (find.length === 0) { - log(`topic new subscribe: ${topic}`); - this.topicState.push([topic, _private]); - this._sub(topic, _private); - } else { - log(`topic already subscribed: ${topic}`); - } - - log('subscribed listener id ', hookId); - return hookId; - } - - unsubscribe = (topic, hookId) => { - const prefix = getTopicPrefix(topic); - if (this.topicListener[prefix]) { - const deleted = this.topicListener[prefix].filter(item => item.id !== hookId); - if (deleted.length === 0) { - delete this.topicListener[prefix]; - } else { - this.topicListener[prefix] = deleted; - } - } - log('unsubscribed listener id ', hookId); - - this.topicState = this.topicState.filter(record => record[0] !== topic); - this._unsub(topic); - } - - _distribute = (message) => { - // { data: - // { symbol: 'XBTUSDM', - // side: 'sell', - // size: 82, - // price: 10055, - // bestBidSize: 598, - // bestBidPrice: '10055.0', - // bestAskPrice: '10056.0', - // tradeId: '5d8645143c7feb4209f368e7', - // ts: 1569080596312353500, - // bestAskSize: 33882 }, - // subject: 'ticker', - // topic: '/contractMarket/ticker:XBTUSDM', - // type: 'message' } - const { topic } = message; - if (topic) { - const prefix = getTopicPrefix(topic); - const listeners = this.topicListener[prefix]; - if (listeners) { - _.each(listeners, ({ hook }) => { - if (typeof hook === 'function') { - hook(message); - } - }); - } - } - } - - _handleAfterConnect = () => { - log('recieved connect welcome ack'); - this.trustConnected = true; - this._connecting = false; - - // resub - _.each(this.topicState, ([topic, _private]) => { - this._sub(topic, _private); - }); - - // restart ping - this._ping(); - } - - _maxId = 0; - _connect = async (config) => { - const server = config.server; - const connectId = config.connectId; - const { - instanceServers, - token, - } = server; - const url = `${instanceServers[0].endpoint}?token=${token}&acceptUserMessage=true&connectId=${connectId}`; - this._maxId += 1; - const client = new WebSocket(url, { - handshakeTimeout: 30, - }); - client._maxId = this._maxId; - return client; - } - - _getBulletToken = async () => { - let res = false; - try { - res = await http.post( - this.privateBullet ? - '/api/v1/bullet-private' : - '/api/v1/bullet-public' - ); - } catch (e) { - log('get bullet error', e); - } - return res; - } - - _sub = (topic, _private = false) => { - if (!this.trustConnected) { - log('client not connected'); - return; - } - - const id = generateId(); - this.emitter.once(`ack_${id}`, () => { - log(`topic: ${topic} subscribed`, id); - }); - - this.client.send(JSON.stringify({ - id, - type: 'subscribe', - topic, - private: _private, - response: true - })); - log(`topic subscribe: ${topic}, send`, id); - } - - _unsub = (topic) => { - if (!this.trustConnected) { - log('client not connected'); - return; - } - - const id = generateId(); - this.emitter.once(`ack_${id}`, () => { - log(`topic: ${topic} unsubscribed`, id); - }); - - this.client.send(JSON.stringify({ - id, - type: 'unsubscribe', - topic, - })); - log(`topic unsubscribe: ${topic}, send`, id); - } - - _pingTs = null; - _clearPing = () => { - if (this._pingTs) { - clearInterval(this._pingTs); - this._pingTs = null; - } - } - - _ping = () => { - this._clearPing(); - - this._pingTs = setInterval(() => { - if (!this.trustConnected) { - log('client not connected'); - return; - } - const id = generateId(); - - // ping timeout - const timer = setTimeout(() => { - log('ping wait pong timeout'); - this._clearPing(); - - if (this.client) { - this.client.terminate(); - this.client = null; - } - }, 5000); - - // calc ping ms - const pingPerform = Date.now(); - this.emitter.once(`pong_${id}`, () => { - this.ping = Date.now() - pingPerform; - log('ping get pong'); - clearTimeout(timer); - }); - - this.client.send(JSON.stringify({ - id, - type: 'ping', - })); - log('ping, send'); - }, 10000); - } -} \ No newline at end of file diff --git a/src/lib/delay.js b/src/lib/delay.js deleted file mode 100644 index 7ad074c..0000000 --- a/src/lib/delay.js +++ /dev/null @@ -1,11 +0,0 @@ -import _ from 'lodash'; - -const delay = (ms = 1000) => { - return new Promise((resolve) => { - _.delay(() => { - resolve(); - }, ms); - }); -}; - -export default delay; \ No newline at end of file diff --git a/src/lib/env.js b/src/lib/env.js deleted file mode 100644 index 2d55ee2..0000000 --- a/src/lib/env.js +++ /dev/null @@ -1,34 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -let env = { - log: { - writeFile: false, - stdout: false, - }, - key: '', - secret: '', - passphrase: '', -}; - -if (global._RUN_AS_FRAMEWORK_HELPER_) { - const envFile = path.resolve(__dirname, '../../.env.js'); - if (fs.existsSync(envFile)) { - const r = require(envFile); - const c = r.default || r; - if (c) { - env = c; - } - } -} - -export const setEnv = (conf = {}) => { - env = { - ...env, - ...conf, - }; -}; - -export const getEnv = () => { - return env; -}; diff --git a/src/lib/http.js b/src/lib/http.js deleted file mode 100644 index adf2105..0000000 --- a/src/lib/http.js +++ /dev/null @@ -1,172 +0,0 @@ - -import querystring from 'querystring'; -import request from 'request'; -import CryptoJS from 'crypto'; -import codes from './codes'; -import log from './log'; -import { keyVersion2 } from './utils'; - -const IS_PRODUCT = global._USE_KUMEX_ONLINE_ || process.env.PRODUCTION === 'true'; -const baseUrl = IS_PRODUCT ? 'https://api.kumex.com' : 'https://sandbox-api.kumex.com'; - -log(`http use baseUrl: (${baseUrl})`); - -let HttpConfig = { - signatureConfig: { - - }, - baseUrl, -}; - -class Http { - - setSignatureConfig(config) { - HttpConfig.signatureConfig = config; - } - - static sign(text = '', secret = '') { - return CryptoJS - .createHmac('sha256', secret) - .update(text) - .digest('base64'); - } - - - // - static auth(configs, data = '', secret = '') { - - const isKeyVersion2 = keyVersion2(HttpConfig.signatureConfig.keyVersion); - - const timestamp = Date.now(); - - const signature = Http.sign(timestamp + configs.method.toUpperCase() + configs.url + data, secret); - - if (!HttpConfig.signatureConfig.key) { - log('KC-API-KEY is not specified'); - } - if (!HttpConfig.signatureConfig.passphrase) { - log('KC-API-PASSPHRASE is not specified'); - } - const headers = { - // ...(configs.headers || {}), - 'KC-API-KEY': HttpConfig.signatureConfig.key || '', - 'KC-API-SIGN': signature, - 'KC-API-TIMESTAMP': timestamp, - 'KC-API-PASSPHRASE': HttpConfig.signatureConfig.passphrase || '', - 'Content-Type': 'application/json', - }; - - if (isKeyVersion2) { - headers['KC-API-PASSPHRASE'] = Http.sign(HttpConfig.signatureConfig.passphrase || '', secret); - headers['KC-API-KEY-VERSION'] = HttpConfig.signatureConfig.keyVersion; - }; - - return headers; - } - - - post(url = '', params = {}) { - const _url = HttpConfig.baseUrl + url; - const body = JSON.stringify(params || '{}'); - const _config = Http.auth({ - method: 'POST', - url, - }, body, HttpConfig.signatureConfig.secret) - return this._request({ - url: _url, - method: 'POST', - headers: _config, - body, - }); - } - - paramsStr (params = {}) { - return Object.keys(params).join('&') - } - - - /** - * 处理get/delete 的参数 - */ - resolveQueryParams(url, params = {}) { - const [ urlStr, urlParamsStr ] = url.split('?'); - const _p = Object.assign({}, querystring.parse(urlParamsStr || ''), params); - const _hasParams = Object.keys(_p || {}).length > 0 - const _params = _hasParams ? ('?' + querystring.stringify(_p)) : '' - const uri =urlStr + _params; - return { - url: HttpConfig.baseUrl + uri, //最终请求地址 - params: _params, // 参数字符串 - uri, // uri - } - } - - - get(url = '', params = {}) { - - const resolvedConfig = this.resolveQueryParams(url, params); - - const _config = Http.auth({ - method: 'GET', - url: resolvedConfig.uri, - }, '', HttpConfig.signatureConfig.secret) - - return this._request({ - url: resolvedConfig.url, - method: 'GET', - headers: _config, - }); - } - - del(url = '', params = {}) { - - const resolvedConfig = this.resolveQueryParams(url, params); - - const _config = Http.auth({ - method: 'DELETE', - url: resolvedConfig.uri, - }, '', HttpConfig.signatureConfig.secret) - - return this._request({ - url: resolvedConfig.url, - method: 'DELETE', - headers: _config, - }); - } - - _request(config) { - return new Promise((resolve, reject) => { - request(Object.assign({}, config, { - agentOptions: { - securityOptions: 'SSL_OP_NO_SSLv3', - }, - rejectUnauthorized : false, - }), (error, response, body) => { - try { - log('res:', error, config.url, response.statusCode, response.statusMessage, body); - } catch (e) { - log(e); - } - - if (error) { - reject(error); - } else { - try { - const res = JSON.parse(body); - if (res.code == codes.SUCCESS || res.code == codes.SHORT_SUCCESS) { - resolve(res); - } else { - reject(res); - } - } catch (e) { - reject(e); - } - } - }); - }).catch((e) => { - log('HTTP ERROR',JSON.stringify(config), e); - }); - } -} - -export default new Http(); \ No newline at end of file diff --git a/src/lib/log.js b/src/lib/log.js deleted file mode 100644 index 7386569..0000000 --- a/src/lib/log.js +++ /dev/null @@ -1,81 +0,0 @@ -const process = require('process'); - -import log4js from 'log4js'; -import path from 'path'; -import moment from 'moment'; -import { getEnv } from './env'; - -const configure = getEnv(); -const LOG_TYPES = ['warn', 'info', 'debug', 'error']; - -class Log { - constructor() { - const { writeFile, stdout, logFolder } = configure.log || {}; - this.writeFile = writeFile; - this.logFolder = logFolder; - this.stdout = stdout; - } - - init = () => { - if (!this.writeFile && !this.stdout) { - return; - } - - const nowTime = moment().format('YYYY-MM-DD_HH:mm:ss'); - let logFile; - if (this.logFolder) { - logFile = path.resolve(this.logFolder, `./${nowTime}.log`); - } else { - const cwd = process.cwd(); - logFile = path.resolve(cwd, `./logs/${nowTime}.log`); - } - console.log('log file', logFile); - log4js.configure({ - appenders: { - out: { type: 'stdout' }, - writeFile: { type: 'file', filename: logFile } - }, - categories: { - default: { - appenders: this.writeFile ? ['writeFile'] : ['out'], - level: 'debug', - }, - }, - }); - // 注入常用方法,不用再次获取实例 - LOG_TYPES.forEach((method)=> { - this[method] = (msg, logger) => { - this.log(msg, method, logger); - } - }) - } - - getLogger = (logger) => { - return log4js.getLogger(logger); - } - - log = (msg, type = 'info', logger) => { - if (!this.writeFile && !this.stdout) { - return; - } - - const _logger = this.getLogger(logger); - _logger[type](msg) - } -} - -const log4 = new Log(); -log4.init(); - -const log = (...props) => { - const lastP = props[props.length - 1]; - const isDefinedMethod = LOG_TYPES.indexOf(lastP) > -1; - const _type = isDefinedMethod ? lastP : 'info'; - const _str = props.slice(0, isDefinedMethod ? -1 : undefined).reduce((sum, cur) => { - return sum + ' ' + JSON.stringify(cur) + ' ' - }, '') - const logger = log4.getLogger(); - logger[_type](`${_str}`); -} - -export default log; \ No newline at end of file diff --git a/src/lib/utils.js b/src/lib/utils.js deleted file mode 100644 index 38864da..0000000 --- a/src/lib/utils.js +++ /dev/null @@ -1,99 +0,0 @@ -import _ from 'lodash'; -import uuid from 'uuid/v4'; - -export const targetTypesMap = { - sell: 'asks', - buy: 'bids', -}; - -export const keyVersion2 = (version) => { - return version && version === 2; -}; - -export const genUUID = (prefix = '')=> { - return prefix + '__' +uuid(); -}; - -export const mergeDepth = (price, type, depth = 1) => { - if (type === 'asks') { - price = Math.ceil(price / depth) * depth; - } else { - price = Math.floor(price / depth) * depth; - } - return price; -}; - -export const checkContinue = (arrBuffer = [], seq, seqIndex = 0) => { - if (arrBuffer.length) { - if (arrBuffer[0][seqIndex] !== seq +1) { - return false; - } - - for (let i = 0; i < arrBuffer.length; i++) { - if (arrBuffer[i + 1] && arrBuffer[i + 1][seqIndex] !== arrBuffer[i][seqIndex] + 1) { - return false; - } - } - } - return true; -}; - -// ----> for level2 -export const mapArr = (arr = [], parseKey = (str) => str) => { - const res = {}; - for (let i = 0; i< arr.length; i++) { - const item = arr[i]; - res[parseKey(item[0])] = item[1]; - } - return res; -}; - -// ----> for level2 -export const arrMap = (map = {}, order = 'asc') => { - const res = []; - _.each(map, (value, key) => { - res.push([key, value]); - }); - res.sort((a, b) => { - if (order === 'desc') { - return b[0] - a[0]; - } else { - return a[0] - b[0]; - } - }); - return res; -}; - -// ----> for level3 -export const mapl3Arr = (arr = []) => { - const res = {}; - for (let i = 0; i< arr.length; i++) { - const item = arr[i]; - res[item[1]] = item; // orderId - } - return res; -}; - -// ----> for level3 -export const arrl3Map = (map = {}, side, order = 'asc') => { - const res = []; - _.each(map, (item) => { - // [下单时间, 订单号, 价格, 数量, 进入买卖盘时间] - const [orderTime, orderId, price, size, ts] = item; - res.push([mergeDepth(price, side), size, ts, orderId]); - }); - res.sort((a, b) => { - if (a[0] === b[0]) { - // 价格相同的订单以进入买卖盘的时间从低到高排序 - return a[2] - b[2]; - } else { - // 价格排序 - if (order === 'desc') { - return b[0] - a[0]; - } else { - return a[0] - b[0]; - } - } - }); - return res; -}; diff --git a/src/resetAPI/constants.ts b/src/resetAPI/constants.ts new file mode 100644 index 0000000..88387d6 --- /dev/null +++ b/src/resetAPI/constants.ts @@ -0,0 +1,52 @@ +// account endpoint +export const FUTURES_ACCOUNT_OVERVIEW_EP = '/api/v1/account-overview'; +export const FUTURES_TRANSACTION_HISTORY_EP = '/api/v1/transaction-history'; +export const FUTURES_SUB_API_EP = '/api/v1/sub/api-key'; +export const FUTURES_UPDATE_SUB_API_EP = '/api/v1/sub/api-key/update'; + +// transfer endpoint +export const FUTURES_TRANSFER_OUT_EP = '/api/v3/transfer-out'; +export const FUTURES_TRANSFER_IN_EP = '/api/v1/transfer-in'; +export const FUTURES_TRANSFER_LIST_EP = '/api/v1/transfer-list'; + + +// order endpoint +export const FUTURES_ORDER_EP = '/api/v1/orders'; +export const FUTURES_STOP_ORDER_EP = '/api/v1/stopOrders'; +export const FUTURES_RECENT_DONE_ORDERS_EP = '/api/v1/recentDoneOrders'; + +// fills endpoint +export const FUTURES_FILLS_EP = '/api/v1/fills'; +export const FUTURES_RECENT_FILLS_EP = '/api/v1/recentFills'; +export const FUTURES_TOTAL_OPEN_ORDERS_MARGIN_EP = + '/api/v1/openOrderStatistics'; + +// position endpoint +export const FUTURES_POSITION_EP = '/api/v1/position'; +export const FUTURES_POSITIONS_EP = '/api/v1/positions'; +export const FUTURES_POSITION_AUTO_DEPOSIT_STATUS_EP = + '/api/v1/position/margin/auto-deposit-status'; +export const FUTURES_POSITION_MARGIN_EP = + '/api/v1/position/margin/deposit-margin'; + +// other endpoint +export const FUTURES_RISK_LIMIT_EP = '/api/v1/contracts/risk-limit'; +export const FUTURES_CHANGE_RISK_LIMIT_EP = '/api/v1/position/risk-limit-level/change'; +export const FUTURES_FUNDING_HISTORY_EP = '/api/v1/funding-history'; + +// market endpoint +export const FUTURES_CONTRACTS_ACTIVE_EP = '/api/v1/contracts/active'; +export const FUTURES_CONTRACTS_DETAIL_EP = 'api/v1/contracts'; +export const FUTURES_TICKER_EP = '/api/v1/ticker'; +export const FUTURES_LEVEL2_EP = '/api/v1/level2/snapshot'; +export const FUTURES_LEVEL2_20_EP = '/api/v1/level2/depth20'; +export const FUTURES_LEVEL2_100_EP = '/api/v1/level2/depth100'; +export const FUTURES_TRADE_HISTORY_EP = '/api/v1/trade/history'; +export const FUTURES_INTEREST_EP = '/api/v1/interest/query'; +export const FUTURES_INDEX_EP = '/api/v1/index/query'; +export const FUTURES_MARK_PRICE_EP = '/api/v1/mark-price'; +export const FUTURES_PREMIUM_EP = '/api/v1/premium/query'; +export const FUTURES_FUNDING_RATE_EP = '/api/v1/funding-rate'; +export const FUTURES_TIMESTAMP_EP = '/api/v1/timestamp'; +export const FUTURES_SERVICE_STATUS_EP = '/api/v1/status'; +export const FUTURES_KLINE_EP = '/api/v1/kline/query'; \ No newline at end of file diff --git a/src/resetAPI/futuresOrder.ts b/src/resetAPI/futuresOrder.ts new file mode 100644 index 0000000..15cc133 --- /dev/null +++ b/src/resetAPI/futuresOrder.ts @@ -0,0 +1,174 @@ +import pick from 'lodash/pick'; + +import { FUTURES_ORDER_EP } from './constants'; + +import { OrderOptionalParamsType, OrderBody } from '../dataType'; + +export const STOP_TYPES = ['down', 'up']; +export const STOP_PRICE_TYPES = ['TP', 'IP', 'MP']; +export const TIME_IN_FORCE_TYPES = ['GTC', 'IOC']; +export const OPTIONAL_PARAMS: OrderOptionalParamsType[] = [ + 'type', + 'remark', + 'stop', + 'stopPriceType', + 'stopPrice', + 'reduceOnly', + 'closeOrder', + 'forceHold', + 'timeInForce', + 'postOnly', + 'hidden', + 'iceberg', + 'visibleSize' +]; + +const LIMIT = 'limit'; +const MARKET = 'market'; + +/** + * create order-(buy|sell) body + * @param side + * @param symbol + * @param size + * @param price + * @param leverage + * @param optional + */ +export const makeFuturesOrderBody = ({ + side, + symbol, + size, + price, + leverage = 1, + clientOid, + optional = {} +}: OrderBody) => { + if (!size || !(size % 1 === 0)) { + throw new TypeError('The order size must be an integer!'); + } + + let type = LIMIT; + if (!price) { + type = MARKET; + } + + const { + stop, + stopPriceType, + stopPrice, + timeInForce = 'GTC', + postOnly, + hidden = false, + iceberg = false, + ...other + } = optional; + + let body: object = { + side, + symbol, + type, + size, + leverage, + clientOid, + ...pick(other, OPTIONAL_PARAMS) + }; + if (stop) { + if (!STOP_TYPES.includes(stop)) { + throw new RangeError( + 'The value of stop is not accepted, must be (down | up).' + ); + } + if (!stopPriceType || !stopPrice) { + throw new TypeError( + 'To set the stop attribute, you must set the stopPrice and stopPriceType parameters.' + ); + } + if (!STOP_PRICE_TYPES.includes(stopPriceType)) { + throw new RangeError( + 'The value of stopPriceType is not accepted, must be (TP | IP | MP).' + ); + } + body = { + ...body, + stop, + stopPriceType, + stopPrice + }; + } + if (type === LIMIT || optional.type === LIMIT) { + if (!TIME_IN_FORCE_TYPES.includes(timeInForce)) { + throw new RangeError( + 'The value of timeInForce is not accepted, must be (GTC | IOC).' + ); + } + if (timeInForce === 'IOC' || hidden || iceberg) { + body = { + ...body, + timeInForce, + hidden, + iceberg + }; + } else { + body = { + price, + ...body, + timeInForce, + postOnly + }; + } + } + return body; +}; + +/** + * return futures order make body and endpoint + * @param {any} params。 + * @param {string} method - DEFAULT 'GET'。 + * @returns {Object} return { body, endpoint }。 + */ +const returnBodyAndEndpoint = (params: any, method = 'GET') => { + let endpoint = FUTURES_ORDER_EP; + let body = params; + switch (method) { + case 'POST': { + if (typeof params === 'object') { + const { + side, + symbol, + size, + price, + leverage, + clientOid, + optional + } = params; + body = makeFuturesOrderBody({ + side, + symbol, + size, + price, + leverage, + clientOid, + optional + }); + } + break; + } + case 'DELETE': { + if (params && typeof params === 'string') { + endpoint = `${endpoint}/${params}`; + body = ''; + } + break; + } + case 'GET': { + if (typeof params === 'object' && params.clientOid) { + endpoint = `${endpoint}/byClientOid`; + } + break; + } + } + return { body, endpoint }; +}; + +export default returnBodyAndEndpoint; diff --git a/src/resetAPI/index.ts b/src/resetAPI/index.ts new file mode 100644 index 0000000..08ce0a9 --- /dev/null +++ b/src/resetAPI/index.ts @@ -0,0 +1,8 @@ +import returnBodyAndEndpoint from "./futuresOrder"; + +export * from './constants'; + +export { + returnBodyAndEndpoint +}; + diff --git a/src/start.js b/src/start.js deleted file mode 100644 index 9f410c8..0000000 --- a/src/start.js +++ /dev/null @@ -1,21 +0,0 @@ -require('babel-register'); - -global._RUN_AS_FRAMEWORK_HELPER_ = true; - -const path = require('path'); -// const fs = require('fs'); - -process.on('unhandledRejection', error => { - console.error('unhandledRejection', error); - process.exit(1) // To exit with a 'failure' code -}); - -const [$node, $start, $appName] = process.argv; -const appName = $appName || 'template'; -const modulePath = path.resolve( - __dirname, - '../app/', - `${appName}.js` -); - -require(modulePath); \ No newline at end of file diff --git a/src/tools/constants.ts b/src/tools/constants.ts new file mode 100644 index 0000000..4e29329 --- /dev/null +++ b/src/tools/constants.ts @@ -0,0 +1,8 @@ +export const TIME_OUT = 10000; + +export const GET = 'GET'; +export const POST = 'POST'; +export const DELETE = 'DELETE'; + +export const SANDBOX_ADDR_EP = 'https://api-sandbox-futures.kucoin.com'; +export const PROD_ADDR_EP = 'https://api-futures.kucoin.com'; diff --git a/src/tools/request.ts b/src/tools/request.ts new file mode 100644 index 0000000..48346d7 --- /dev/null +++ b/src/tools/request.ts @@ -0,0 +1,206 @@ +import axios, { AxiosRequestConfig } from 'axios'; + +import https from 'https'; + +import { makeQueryString, cryptoHmac } from './tools'; +import { TIME_OUT, PROD_ADDR_EP, SANDBOX_ADDR_EP } from './constants'; + +const httpsAgent = new https.Agent({ rejectUnauthorized: false }); + + + +/** + * return api signature header + * @param {object} configs + * @param {string | object} data + */ +export const apiAuth = (configs: any, data = '') => { + const { + key = '', + passphrase = '', + secret, + method, + url: endpoint, + version = '2' + } = configs; + + if (!key) { + console.log( + 'KC-API-KEY is not specified more information see here https://docs.kucoin.com/futures/#general' + ); + } + if (!passphrase) { + console.log( + 'KC-API-PASSPHRASE is not specified more information see here https://docs.kucoin.com/futures/#general' + ); + } + + const timestamp = Date.now(); + + const signature = cryptoHmac( + timestamp + (method || '').toUpperCase() + endpoint + data, + secret + ); + + const authParams = { + 'KC-API-KEY': key, + 'KC-API-SIGN': signature, + 'KC-API-TIMESTAMP': timestamp.toString(), + 'KC-API-PASSPHRASE': passphrase, + 'KC-API-KEY-VERSION': version, + 'Content-Type': 'application/json', + 'User-Agent': `KuCoin-Futures-Node-SDK/${version}` + }; + + if (version && version == 2) { + authParams['KC-API-PASSPHRASE'] = cryptoHmac(passphrase, secret); + } + + return authParams; +}; + +/** + * create axios request + * @param {string} env -- set baseURL + * @param {string} key -- set KC-API-KEY + * @param {string} passphrase -- KC-API-PASSPHRASE + * @param {string} secret -- set Secret + * @param {object} other -- set axios instance + * @function setSignatureConfig -- set {key,passphrase,secret} + * @function request -- axios request return promise + */ +export default class Request { + private axiosInstance: any; + private key: string | number; + private secret: string | number; + private passphrase: string | number; + private version: string | number; + constructor(props: { + key: string | number; + secret: string | number; + passphrase: string | number; + env?: string; + version?: string | number; + }) { + const { + env = 'prod', + key = '', + secret, + passphrase = '', + version = 2, + ...other + } = props || {}; + const baseURL = env === 'prod' ? PROD_ADDR_EP : SANDBOX_ADDR_EP; + + this.axiosInstance = axios.create({ + baseURL, + timeout: TIME_OUT, + httpsAgent, + ...other + }); + this.key = key; + this.secret = secret; + this.passphrase = passphrase; + this.version = version; + } + + setSignatureConfig(config: any = {}) { + const { key, secret, passphrase } = config; + if (key) { + this.key = key; + } + if (secret) { + this.secret = secret; + } + if (passphrase) { + this.passphrase = passphrase; + } + } + + signatureRequest(url: string, data: any, method = 'GET', config = {}) { + let authUrl = url; + let body = data; + + const axiosConfig: AxiosRequestConfig = { + method, + url: authUrl, + ...config + }; + + if (method === 'GET') { + authUrl = + typeof data === 'object' + ? `${url}?${makeQueryString(data)}` + : data + ? `${url}/${data}` + : url; + axiosConfig.url = authUrl; + body = ''; + } else { + if (data) { + axiosConfig.data = data; + body = JSON.stringify(data); + } + } + + const headerAuth = apiAuth( + { + method, + secret: this.secret, + key: this.key, + passphrase: this.passphrase, + url: authUrl, + version: this.version + }, + body + ); + + axiosConfig.headers = headerAuth; + + return new Promise((resolve, reject) => { + this.axiosInstance(axiosConfig) + .then((response: any) => { + resolve(response.data); + }) + .catch((err: any) => { + reject(err); + console.log(JSON.stringify(err)); + }); + }); + } + + requestPublic(url: string, data: any, method = 'GET', config = {}) { + let authUrl = url; + + const axiosConfig: AxiosRequestConfig = { + method, + url: authUrl, + ...config + }; + + if (method === 'GET') { + authUrl = + typeof data === 'object' + ? `${url}?${makeQueryString(data)}` + : data + ? `${url}/${data}` + : url; + axiosConfig.url = authUrl; + } else { + if (data) { + axiosConfig.data = data; + } + } + + return new Promise((resolve, reject) => { + this.axiosInstance(axiosConfig) + .then((response: any) => { + resolve(response.data); + }) + .catch((err: any) => { + reject(err); + console.log(JSON.stringify(err)); + }); + }); + } +} diff --git a/src/tools/tools.ts b/src/tools/tools.ts new file mode 100644 index 0000000..d4c2e46 --- /dev/null +++ b/src/tools/tools.ts @@ -0,0 +1,74 @@ +import omitBy from 'lodash/omitBy'; +import crypto from 'crypto'; + +/** + * make object query to string + * @param {object} query + */ +export const makeQueryString = (query: any): string => { + return Object.keys(query) + .reduce((acc: Array, key) => { + if (query[key] !== undefined) { + acc.push(`${key}=${encodeURIComponent(query[key])}`); + } + return acc; + }, []) + .join('&'); +}; + +/** + * filter empty values + * @param obj + * @returns filterObj + */ +export const filterEmptyValues = (obj: any) => { + if (typeof obj !== 'object') return obj; + const omitValue = omitBy( + obj, + (value) => value === null || value === undefined || value === '' + ); + if (!omitValue || !Object.keys(omitValue).length) return ''; + return omitValue; +}; + +/** + * make symbol + * @param symbols + * @returns string + */ +export const joinSymbol = (symbols: string | any[]) => { + if (!symbols) { + console.log('Required parameter symbol'); + return false; + } + let symbolStr = symbols; + if (Array.isArray(symbols)) { + symbolStr = symbols.join(','); + } + return symbolStr; +}; +/** + * Currently there is a limit of 100 parameters, too many parameters need to be divided + * @param arr array + * @param chunkSize number default 90 + * @returns array + */ +export const splitArray = (arr: any[], chunkSize: number = 90) => { + const result = []; + for (let i = 0; i < arr.length; i += chunkSize) { + result.push(joinSymbol(arr.slice(i, i + chunkSize))); + } + return result; +}; + +/** + * make sha256 + * @param text string + * @param secret string + * @returns sha256 - base64 + */ +export const cryptoHmac = (text = '', secret = '') => { + return crypto.createHmac('sha256', secret).update(text).digest('base64'); +}; + +export const log = (d: any) => console.log(d); \ No newline at end of file diff --git a/src/websocket/constants.ts b/src/websocket/constants.ts new file mode 100644 index 0000000..15a15ba --- /dev/null +++ b/src/websocket/constants.ts @@ -0,0 +1,24 @@ +// Apply for Connection Token + +export const PUBLIC_BULLET_EP = '/api/v1/bullet-public'; +export const PRIVATE_BULLET_EP = '/api/v1/bullet-private'; + +export const CONNECT_ID = '_futures_socket_welcome'; + +// public socket topic +export const TICKER_V2 = '/contractMarket/tickerV2'; +export const TICKER = '/contractMarket/ticker'; +export const LEVEL2 = '/contractMarket/level2'; +export const LEVEL2_DEPTH5 = '/contractMarket/level2Depth5'; +export const LEVEL2_DEPTH50 = '/contractMarket/level2Depth50'; +export const INSTRUMENT = '/contract/instrument'; +export const ANNOUNCEMENT = '/contract/announcement'; +export const SNAPSHOT = '/contractMarket/snapshot'; +export const EXECUTION = '/contractMarket/execution'; + + +// private socket topic +export const TRADE_ORDERS = '/contractMarket/tradeOrders'; +export const ADVANCE_ORDERS = '/contractMarket/advancedOrders'; +export const WALLET = '/contractAccount/wallet'; +export const POSITION = '/contract/position'; \ No newline at end of file diff --git a/src/websocket/index.ts b/src/websocket/index.ts new file mode 100644 index 0000000..3e7d549 --- /dev/null +++ b/src/websocket/index.ts @@ -0,0 +1,4 @@ +import WebSocketClient from './socket'; + +export * from './constants'; +export { WebSocketClient }; diff --git a/src/websocket/socket.ts b/src/websocket/socket.ts new file mode 100644 index 0000000..1bd323c --- /dev/null +++ b/src/websocket/socket.ts @@ -0,0 +1,229 @@ +import WebSocket from 'ws'; +import { uniqWith, isEqual, forEach } from 'lodash'; +import { Subscription, Callback } from '../dataType/socket'; + +export default class WebSocketClient { + private ws: WebSocket; + private _url: string; + private alive: boolean = false; + private messageHandler: any[] = []; + private heartbeatInterval: NodeJS.Timeout | null = null; + private pingTimeout: NodeJS.Timeout | null = null; + public subscriptions: Subscription[] = []; + + constructor(url: string, websocket: WebSocket) { + this.ws = websocket; + this._url = url; + + this.setupWebSocket(); + } + + generateId(): string { + return ( + '_futures_' + Date.now() + (Math.random() * 365).toString(16).slice(4, 14) + ); + } + + getPrefixTopic(topic: string): string { + if (!topic) return ''; + return topic.split(':')[0]; + } + + socketSend(data: object): void { + const params = JSON.stringify(data); + console.log('socket send --->', params); + this.ws.send(params); + } + + setupWebSocket(): void { + this.ws.on('open', () => { + console.log('WebSocket connected'); + this.alive = true; + this.startHeartbeat(); + this.startPing(); + this.resubscribe(); + this.patchAllMessage(); + }); + + this.ws.on('message', (data) => { + const message = JSON.parse(data.toString()); + + if (message) { + switch (message.type) { + case 'welcome': + case 'ack': + console.log('socket message --->', message); + break; + case 'pong': + console.log('socket message --->', message); + this.stopPing(); + break; + default: + this.handleMessage(message); + } + } + }); + + this.ws.on('close', () => { + console.log('WebSocket disconnected'); + this.alive = false; + + this.stopHeartbeat(); + this.stopPing(); + this.reconnect(); + }); + + this.ws.on('error', (error) => { + this.alive = false; + console.error('WebSocket error:', error); + }); + } + + // Send ping messages every 59s + startHeartbeat(): void { + if (this.heartbeatInterval) { + clearInterval(this.heartbeatInterval); + } + this.heartbeatInterval = setInterval(() => { + this.resetPingTimeout(); + this.socketSend({ id: this.generateId(), type: 'ping' }); + }, 59000); + } + + // Stop ping message + stopHeartbeat(): void { + if (this.heartbeatInterval) { + clearInterval(this.heartbeatInterval); + + this.heartbeatInterval = null; + } + } + + // Init Send ping message + startPing(): void { + this.resetPingTimeout(); + this.socketSend({ id: this.generateId(), type: 'ping' }); + } + + // Clear ping timeout + stopPing(): void { + if (this.pingTimeout) { + clearTimeout(this.pingTimeout); + + this.pingTimeout = null; + } + } + + // Reset Ping timeout + resetPingTimeout(): void { + if (this.pingTimeout) { + clearTimeout(this.pingTimeout); + } + + this.pingTimeout = setTimeout(() => { + console.log('No pong received within 10 seconds, disconnecting...'); + + this.ws.terminate(); + }, 10000); + } + + // resubscribe + resubscribe(): void { + this.subscriptions.forEach(({ id, topic, privateChannel }) => { + this.socketSend({ + id, + type: 'subscribe', + topic, + privateChannel, + response: true + }); + }); + } + + handleMessage(message: any): void { + this.subscriptions.forEach(({ topic, callback, strict }) => { + if (strict) { + if (topic === message.topic) { + callback(message); + } + } else { + if (this.getPrefixTopic(topic) === this.getPrefixTopic(message.topic)) { + callback(message); + } + } + }); + } + + // When sending a message to the socket channel, + // the socket may not be connected at this time, + // it needs to be saved, wait for the connection to be established, + // and trigger the message in messageHandler + patchAllMessage(): void { + const sendMessages = uniqWith(this.messageHandler, isEqual); + forEach(sendMessages, (sendMessage) => { + this.socketSend(sendMessage); + this.messageHandler = this.messageHandler.filter( + (item) => !isEqual(sendMessage, item) + ); + }); + } + + getConnectionState(): number { + return this.ws.readyState; + } + + subscribe( + topic: string, + callback: Callback, + privateChannel: boolean = false, + strict = true + ): Function { + const _id = this.generateId(); + this.subscriptions.push({ + id: _id, + topic, + privateChannel, + callback, + strict + }); + + return () => this.unsubscribe(topic, _id); + } + + unsubscribe(topic: string, id: string): void { + const currentTopic = this.subscriptions.find((subscription) => { + if (id) return subscription.topic === topic && subscription.id === id; + return subscription.topic === topic; + }); + + if (currentTopic) { + const sendMessage = { + id: this.generateId(), + type: 'unsubscribe', + topic, + privateChannel: currentTopic.privateChannel, + response: true + }; + + if (this.alive) { + this.socketSend(sendMessage); + } else { + this.messageHandler.push(sendMessage); + } + } + + this.subscriptions = this.subscriptions.filter((subscription) => { + if (id) return !(subscription.topic === topic && subscription.id === id); + return subscription.topic !== topic; + }); + } + + // reconnect WebSocket + reconnect(): void { + console.log('Attempting to reconnect...'); + setTimeout(() => { + this.ws = new WebSocket(this._url); + this.setupWebSocket(); + }, 5000); + } +} diff --git a/test/__mocks__/ws.ts b/test/__mocks__/ws.ts new file mode 100644 index 0000000..8407510 --- /dev/null +++ b/test/__mocks__/ws.ts @@ -0,0 +1,49 @@ +// Mock Event emitter +export default class Socket { + events: any; + readyState: string; + constructor() { + this.events = {}; + this.readyState = 'init'; + } + + // on + on(eventName, callback) { + if (!this.events[eventName]) { + this.events[eventName] = []; + } + + this.events[eventName].push(callback); + } + + // off + off(eventName, callback) { + if (!this.events[eventName]) { + return; + } + + this.events[eventName] = this.events[eventName].filter( + (cb) => cb !== callback + ); + } + + // emit + emit(eventName, ...args) { + if (!this.events[eventName]) { + return; + } + + this.events[eventName].forEach((callback) => { + callback.apply(null, args); + }); + } + + send(eventName, ...args){ + this.emit(eventName, ...args); + } + + terminate(){ + this.emit('close'); + this.readyState = 'close'; + } +} diff --git a/test/futuresOrder.test.ts b/test/futuresOrder.test.ts new file mode 100644 index 0000000..df7bdf4 --- /dev/null +++ b/test/futuresOrder.test.ts @@ -0,0 +1,149 @@ +import returnBodyAndEndpoint, { + makeFuturesOrderBody +} from '../src/resetAPI/futuresOrder'; + +describe('makeFuturesOrderBody', () => { + it('should throw an error if size is not an integer', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1.5, + price: 10000 + }; + + expect(() => makeFuturesOrderBody(orderBody)).toThrow( + 'The order size must be an integer!' + ); + }); + + it('should create a market order if price is not provided', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1 + }; + + const result = makeFuturesOrderBody(orderBody); + expect(result).toHaveProperty('type', 'market'); + }); + + it('should create a limit order if price is provided', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1, + price: 10000 + }; + + const result = makeFuturesOrderBody(orderBody); + expect(result).toHaveProperty('type', 'limit'); + }); + + it('should throw an error if stop is not accepted', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1, + price: 10000, + optional: { + stop: 'invalid' + } + }; + + expect(() => makeFuturesOrderBody(orderBody)).toThrow( + 'The value of stop is not accepted, must be (down | up).' + ); + }); + + it('should throw an error if stopPrice is not accepted', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1, + price: 10000, + optional: { + stop: 'up', + stopPriceType: 'WP', + } + }; + + expect(() => makeFuturesOrderBody(orderBody)).toThrow( + 'To set the stop attribute, you must set the stopPrice and stopPriceType parameters.' + ); + }); + + it('should throw an error if stopPriceType is not accepted', () => { + const orderBody = { + side: 'buy', + symbol: 'BTCUSD', + size: 1, + price: 10000, + optional: { + stop: 'up', + stopPrice: 100, + stopPriceType: 'WP', + } + }; + + expect(() => makeFuturesOrderBody(orderBody)).toThrow( + 'The value of stopPriceType is not accepted, must be (TP | IP | MP).' + ); + }); +}); + +describe('futuresOrder', () => { + it('should return the correct body and endpoint for POST method', () => { + const params = { + side: 'buy', + symbol: 'BTC', + size: 1, + price: 10000, + leverage: 10, + optional: {} + }; + + const result = returnBodyAndEndpoint(params, 'POST'); + expect(result.body).toBeDefined(); + expect(result.endpoint).toBe('/api/v1/orders'); + }); + + it('should return the correct endpoint and body for POST method', () => { + const params = { + side: 'buy', + symbol: 'BTCUSD', + size: 1, + price: 10000 + }; + const result = returnBodyAndEndpoint(params, 'POST'); + expect(result.endpoint).toBe('/api/v1/orders'); + expect(result.body).toMatchObject({ + side: 'buy', + symbol: 'BTCUSD', + type: 'limit', + size: 1, + leverage: 1, + timeInForce: 'GTC', + postOnly: undefined + }); + }); + + it('should return the correct endpoint for DELETE method with string parameter', () => { + const params = 'order123'; + const result = returnBodyAndEndpoint(params, 'DELETE'); + expect(result.body).toBe(''); + expect(result.endpoint).toBe('/api/v1/orders/order123'); + }); + + it('should return the correct endpoint for GET method with object parameter containing clientOid', () => { + const params = { clientOid: 'client123' }; + const result = returnBodyAndEndpoint(params, 'GET'); + expect(result.body).toBe(params); + expect(result.endpoint).toBe('/api/v1/orders/byClientOid'); + }); + + it('should return the default endpoint for GET method with no parameters', () => { + const result = returnBodyAndEndpoint(undefined, 'GET'); + expect(result.body).toBeUndefined(); + expect(result.endpoint).toBe('/api/v1/orders'); + }); +}); diff --git a/test/request.test.ts b/test/request.test.ts new file mode 100644 index 0000000..d87ed08 --- /dev/null +++ b/test/request.test.ts @@ -0,0 +1,158 @@ +import axios from 'axios'; + +import Request, { apiAuth } from '../src/tools/request'; + +jest.mock('axios'); +const mockedAxios = jest.mocked(axios); + +describe('Request', () => { + const mockKey = 'mockKey'; + + const mockSecret = 'mockSecret'; + + const mockPassphrase = 'mockPassphrase'; + + beforeEach(() => { + mockedAxios.create.mockImplementation((): any => () => + Promise.resolve({ data: { success: true } }) + ); + }); + + test.each([ + { + desc: 'apiAuth key is undefined', + config: {} + }, + { + desc: 'apiAuth passphrase is undefined', + config: { key: 'test' } + } + ])('%o', ({ config }) => { + jest.spyOn(global.console, 'log'); + apiAuth(config); + expect(console.log).toBeCalled(); + }); + + test('apiAuth config', () => { + const configs = { + key: mockKey, + passphrase: mockPassphrase, + secret: mockSecret, + method: 'GET', + url: '/api/v1/symbols', + version: '2' + }; + + const headers = apiAuth(configs); + + expect(headers['KC-API-KEY']).toBe(mockKey); + + expect(headers['KC-API-PASSPHRASE']).toBeDefined(); + + expect(headers['KC-API-TIMESTAMP']).toBeDefined(); + + expect(headers['KC-API-KEY-VERSION']).toBe('2'); + }); + + test('constructor', () => { + const request = new Request({ + key: mockKey, + secret: mockSecret, + passphrase: mockPassphrase, + env: 'prod' + }); + + expect(request).toBeDefined(); + }); + + test('setSignatureConfig', () => { + const request = new Request({ + key: mockKey, + secret: mockSecret, + passphrase: mockPassphrase, + env: 'prod' + }); + + request.setSignatureConfig({ + key: 'newKey', + secret: 'newSecret', + passphrase: 'newPassphrase' + }); + + expect(request).toBeDefined(); + }); + + test('signatureRequest', async () => { + const request = new Request({ + key: mockKey, + secret: mockSecret, + passphrase: mockPassphrase, + env: 'prod' + }); + + const response = await request.signatureRequest( + '/api/v1/symbols', + 'BTC', + ); + + expect(response).toEqual({ success: true }); + }); + + test('signatureRequest post', async () => { + mockedAxios.create.mockImplementationOnce((): any => () => + Promise.reject({ err: 'test' }) + ); + jest.spyOn(global.console, 'log'); + const request = new Request({ + key: '', + secret: '', + passphrase: '', + env: 'sand' + }); + + try { + await request.signatureRequest( + '/api/v1/symbols', + { symbol: 'BTC' }, + 'POST' + ); + + expect(console.log).toBeCalled(); + } catch (err) { + expect(err).toEqual({ err: 'test' }); + } + }); + + test('requestPublic', async () => { + // @ts-ignore: test Request empty + const request = new Request(); + + const response = await request.requestPublic( + '/api/v1/symbols', + 'BTC', + ); + + expect(response).toEqual({ success: true }); + }); + + test('requestPublic post', async () => { + mockedAxios.create.mockImplementationOnce((): any => () => + Promise.reject({ err: 'test' }) + ); + jest.spyOn(global.console, 'log'); + const request = new Request({ + key: mockKey, + secret: mockSecret, + passphrase: mockPassphrase, + env: 'prod' + }); + + try { + await request.requestPublic('/api/v1/symbols', { symbol: 'BTC' }, 'POST'); + + expect(console.log).toBeCalled(); + } catch (err) { + expect(err).toEqual({ err: 'test' }); + } + }); +}); diff --git a/test/socket.test.ts b/test/socket.test.ts new file mode 100644 index 0000000..6b1f141 --- /dev/null +++ b/test/socket.test.ts @@ -0,0 +1,190 @@ +import WebSocket from 'ws'; +import WebSocketClient from '../src/websocket/socket'; + +// mock ws +jest.mock('ws'); + +jest.useFakeTimers(); + +describe('WebSocketClient', () => { + const mockSocket = new WebSocket('mock'); + const client = new WebSocketClient('ws://example.com', mockSocket); + + beforeEach(() => { + jest.spyOn(global.console, 'log'); + jest.spyOn(global.console, 'error'); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('should generate to match _futures_', () => { + expect(client.generateId()).toMatch('_futures_'); + }); + + it('should generate a unique ID', () => { + const id1 = client.generateId(); + const id2 = client.generateId(); + expect(id1).not.toEqual(id2); + }); + + it.each([ + { + desc: 'should get the prefix topic empty string', + topic: '', + expected: '' + }, + { + desc: 'should get the prefix topic', + topic: 'topic:ETH', + expected: 'topic' + } + ])('%o', ({ topic, expected }) => { + expect(client.getPrefixTopic(topic)).toBe(expected); + }); + + it('should socketSend data be JSON.stringify', () => { + const mockSend = jest.spyOn(WebSocket.prototype, 'send'); + const mockData = { data: 'test' }; + client.socketSend(mockData); + expect(console.log).toBeCalled(); + expect(mockSend).toBeCalled(); + expect(mockSend.mock.calls[0][0]).toBe(JSON.stringify(mockData)); + }); + + it('setupWebSocket ws on times', () => { + const mockSocket2 = new WebSocket('mock'); + const mockOn2 = jest.spyOn(WebSocket.prototype, 'on'); + new WebSocketClient('ws://example.com', mockSocket2); + expect(mockOn2).toHaveBeenCalledTimes(4); + }); + + it('setupWebSocket ws on open', () => { + const mockStartPing = jest.spyOn(WebSocketClient.prototype, 'startPing'); + const mockStartHeartbeat = jest.spyOn( + WebSocketClient.prototype, + 'startHeartbeat' + ); + const mockResubscribe = jest.spyOn( + WebSocketClient.prototype, + 'resubscribe' + ); + const mockPatchAllMessage = jest.spyOn( + WebSocketClient.prototype, + 'patchAllMessage' + ); + + const mockSocket2 = new WebSocket('mock'); + new WebSocketClient('ws://example.com', mockSocket2); + // emit open + mockSocket2.emit('open'); + expect(console.log).toBeCalled(); + expect(mockStartPing).toBeCalled(); + expect(mockStartHeartbeat).toBeCalled(); + expect(mockResubscribe).toBeCalled(); + expect(mockPatchAllMessage).toBeCalled(); + + // emit error + mockSocket2.emit('error', 'test socket error'); + expect(console.error).toBeCalled(); + + // emit close + mockSocket2.emit('close'); + expect(console.log).toBeCalled(); + }); + + it('should setupWebSocket on message', () => { + const mockStopPing = jest.spyOn(WebSocketClient.prototype, 'stopPing'); + const mockHandleMessage = jest.spyOn( + WebSocketClient.prototype, + 'handleMessage' + ); + const mockSocket2 = new WebSocket('mock'); + new WebSocketClient('ws://example.com', mockSocket2); + // emit message welcome + const welcomeMsg = { type: 'welcome' }; + mockSocket2.emit('message', JSON.stringify(welcomeMsg)); + + // @ts-ignore: spyOn global.console + expect(console.log.mock.calls[0][1]).toEqual(welcomeMsg); + + // emit message pong + const pongMsg = { type: 'pong' }; + mockSocket2.emit('message', JSON.stringify(pongMsg)); + expect(console.log).toBeCalled(); + expect(mockStopPing).toBeCalled(); + + // emit message other + const otherMsg = { type: 'other' }; + mockSocket2.emit('message', JSON.stringify(otherMsg)); + expect(mockHandleMessage).toBeCalledWith(otherMsg); + }); + + it('should startHeartbeat ping timeout', () => { + jest + .spyOn(WebSocketClient.prototype, 'startPing') + .mockImplementation(() => {}); + const mockTerminate = jest.spyOn(WebSocket.prototype, 'terminate'); + const mockSocket2 = new WebSocket('mock'); + new WebSocketClient('ws://example.com', mockSocket2); + // emit open + mockSocket2.emit('open'); + jest.runAllTimers(); + expect(mockTerminate).toBeCalled(); + }); + + it('should handleMessage strict callback', () => { + const mockSocket2 = new WebSocket('mock'); + const client2 = new WebSocketClient('ws://example.com', mockSocket2); + + const mockCallback1 = jest.fn(); + const mockCallback2 = jest.fn(); + + // strict true + client2.subscribe('handleMessage:ETH', mockCallback1, false, true); + // strict false + client2.subscribe('handleMessage:ETH', mockCallback2, false, false); + + // emit message other + const otherMsg = { type: 'other', topic: 'handleMessage' }; + mockSocket2.emit('message', JSON.stringify(otherMsg)); + + expect(mockCallback1).not.toBeCalled(); + expect(mockCallback2).toBeCalled(); + + const otherMsg2 = { type: 'other', topic: 'handleMessage:ETH' }; + mockSocket2.emit('message', JSON.stringify(otherMsg2)); + + expect(mockCallback1).toBeCalled(); + expect(mockCallback2).toHaveBeenCalledTimes(2); + }); + + it('should subscribe to a topic', () => { + const topic = 'test-topic'; + const callback = jest.fn(); + const privateChannel = false; + const strict = true; + + const unsubscribe = client.subscribe( + topic, + callback, + privateChannel, + strict + ); + + // subscriptions + expect(client.subscriptions).toHaveLength(1); + expect(client.subscriptions[0]).toMatchObject({ + topic, + callback, + privateChannel, + strict + }); + + // unsubscribe + unsubscribe(); + expect(client.subscriptions).toHaveLength(0); + }); +}); diff --git a/test/tools.test.ts b/test/tools.test.ts new file mode 100644 index 0000000..6c00736 --- /dev/null +++ b/test/tools.test.ts @@ -0,0 +1,64 @@ +import { + makeQueryString, + filterEmptyValues, + joinSymbol, + splitArray, + cryptoHmac +} from '../src/tools/tools'; + +describe('Utils', () => { + test('makeQueryString', () => { + const query = { + key1: 'value1', + key2: 'value2', + key3: undefined + }; + + expect(makeQueryString(query)).toBe('key1=value1&key2=value2'); + }); + + test('filterEmptyValues', () => { + const obj = { + key1: 'value1', + key2: null, + key3: '', + key4: undefined + }; + + expect(filterEmptyValues(obj)).toEqual({ key1: 'value1' }); + + const obj2 = ''; + expect(filterEmptyValues(obj2)).toEqual(''); + }); + + test('joinSymbol', () => { + const symbols = ['AAPL', 'GOOGL', 'TSLA']; + + expect(joinSymbol(symbols)).toBe('AAPL,GOOGL,TSLA'); + + expect(joinSymbol('AAPL')).toBe('AAPL'); + + expect(joinSymbol('')).toBe(false); + }); + + test('splitArray', () => { + const arr = Array.from({ length: 200 }, (_, i) => i + 1); + + const result: any[] = splitArray(arr); + + expect(result.length).toBe(3); + + expect(result[0].split(',').length).toBe(90); + expect(result[1].split(',').length).toBe(90); + expect(result[2].split(',').length).toBe(20); + }); + + test('cryptoHmac', () => { + const text = 'Hello, world!'; + const secret = 'mysecretkey'; + + const expected = 'k0jiDQEBW3xYgc/dh0c+RBQp5tcWug4rEZUeX35Awx0='; + + expect(cryptoHmac(text, secret)).toBe(expected); + }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5245f94 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,71 @@ +{ + "exclude": ["/node_modules/", "./lib/", "./node_modules/*", "**/*.test.ts"], + "include": ["src"], + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "lib" /* Redirect output structure to the directory. */, + "rootDir": "src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": ["axios", "lodash", "ws", "uuid"], /* Type declaration files to be included in compilation. */ + "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} diff --git a/yarn.lock b/yarn.lock index 2c07e13..52ebdf4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,1755 +2,1494 @@ # yarn lockfile v1 -abbrev@1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject%2fremapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel%2fcode-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha1-1UgcUJXaocV+FuVMb5GYRDr7Sf8= + dependencies: + "@babel/highlight" "^7.10.1" + +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fcode-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + +"@babel/compat-data@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fcompat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" + integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fcore/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" + integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.22.5", "@babel/generator@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fgenerator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== + dependencies: + "@babel/types" "^7.22.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" + integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@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.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" + integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha1-V3CwwagmxPU/Xt5eFTFj4DGOlLU= + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helpers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhelpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" + integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel%2fhighlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha1-hB0Ji6YTuhpCeis4PXnjVVLDiuA= + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + chalk "^2.0.0" + js-tokens "^4.0.0" -accepts@^1.3.5, accepts@~1.3.4: - version "1.3.7" - resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha1-UxvHJlF6OytB+FACHGzBXqq1B80= +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fhighlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.0.0" + js-tokens "^4.0.0" -after@0.8.2: - version "0.8.2" - resolved "https://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fparser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha1-086gTWsBeyiUrWkED+yLYj60vVI= +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0= 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" + "@babel/helper-plugin-utils" "^7.8.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= +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo= dependencies: - string-width "^2.0.0" + "@babel/helper-plugin-utils" "^7.8.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#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha1-7mATSMNw+jNNIge+FYd3SWUh/VE= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha1-ypHvRjA1MESLkGZSusLp/plB9pk= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak= + dependencies: + "@babel/helper-plugin-utils" "^7.8.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?cache=0&sync_timestamp=1570188570027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&sync_timestamp=1566431369422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" -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?cache=0&sync_timestamp=1566431369422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE= dependencies: - color-convert "^1.9.0" + "@babel/helper-plugin-utils" "^7.8.0" -any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo= +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw= dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + "@babel/helper-plugin-utils" "^7.14.5" -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= +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2fplugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + "@babel/helper-plugin-utils" "^7.22.5" -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= +"@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2ftemplate/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" -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= +"@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2ftraverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" + integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + debug "^4.1.0" + globals "^11.1.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel%2ftypes/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - arr-flatten "^1.0.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" -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= +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha1-daLotRy3WKdVPWgEpZMteqznXDk= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +"@istanbuljs/load-nyc-config@^1.0.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.yarnpkg.com/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0= + 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" -arr-union@^3.1.0: +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs%2fschema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg= + +"@jest/console@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fconsole/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" + integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + slash "^3.0.0" + +"@jest/core@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fcore/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" + integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/reporters" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.5.0" + jest-config "^29.5.0" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-resolve-dependencies "^29.5.0" + jest-runner "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + jest-watcher "^29.5.0" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fenvironment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" + integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== + dependencies: + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-mock "^29.5.0" + +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fexpect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== + dependencies: + jest-get-type "^29.4.3" + +"@jest/expect@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fexpect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" + integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== + dependencies: + expect "^29.5.0" + jest-snapshot "^29.5.0" + +"@jest/fake-timers@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2ffake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" + integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== + dependencies: + "@jest/types" "^29.5.0" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-util "^29.5.0" + +"@jest/globals@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2fglobals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" + integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/types" "^29.5.0" + jest-mock "^29.5.0" + +"@jest/reporters@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2freporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" + integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + jest-worker "^29.5.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest%2fschemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/source-map@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest%2fsource-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" + integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.15" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2ftest-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" + integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2ftest-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" + integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== + dependencies: + "@jest/test-result" "^29.5.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + slash "^3.0.0" + +"@jest/transform@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2ftransform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" + integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.5.0" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-regex-util "^29.4.3" + jest-util "^29.5.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest%2ftypes/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@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= + resolved "https://registry.yarnpkg.com/@jridgewell%2fresolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell%2fset-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -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= +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha1-O7xCdd1YTMGxCAm4nU6LY6aednU= +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -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= +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell%2ftrace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 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= + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" -async-each@^1.0.0, async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair%2ftypebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== -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= +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs%2fcommons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" -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= +"@sinonjs/fake-timers@^10.0.2": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@sinonjs%2ffake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194" + integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg== + dependencies: + "@sinonjs/commons" "^3.0.0" -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= +"@types/babel__core@^7.1.14": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types%2fbabel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" -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.8.0" - resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8= - -babel-cli@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-cli/download/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" - integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= - dependencies: - babel-core "^6.26.0" - babel-polyfill "^6.26.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - commander "^2.11.0" - convert-source-map "^1.5.0" - fs-readdir-recursive "^1.0.0" - glob "^7.1.2" - lodash "^4.17.4" - output-file-sync "^1.1.2" - path-is-absolute "^1.0.1" - slash "^1.0.0" - source-map "^0.5.6" - v8flags "^2.1.1" - optionalDependencies: - chokidar "^1.6.1" +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types%2fbabel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types%2fbabel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk= dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.26.0, babel-core@^6.26.3: - version "6.26.3" - resolved "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha1-suLwnjQtDwyI4vAuBneUEl51wgc= - 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.26.0: - version "6.26.1" - resolved "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA= - 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-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-add-module-exports@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/babel-plugin-add-module-exports/download/babel-plugin-add-module-exports-1.0.2.tgz#96cd610d089af664f016467fc4567c099cce2d9c" - integrity sha1-ls1hDQia9mTwFkZ/xFZ8CZzOLZw= - optionalDependencies: - chokidar "^2.0.4" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= - -babel-plugin-syntax-decorators@^6.1.18: - version "6.13.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-decorators-legacy@^1.3.5: - version "1.3.5" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-decorators-legacy/download/babel-plugin-transform-decorators-legacy-1.3.5.tgz#0e492dffa0edd70529072887f8aa86d4dd8b40a1" - integrity sha1-Dkkt/6Dt1wUpByiH+KqG1N2LQKE= - dependencies: - babel-plugin-syntax-decorators "^6.1.18" - babel-runtime "^6.2.0" - babel-template "^6.3.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha1-WKeThjqefKhwvcWogRF/+sJ9tvM= - 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-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-polyfill/download/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-env@^1.7.0: - version "1.7.0" - resolved "https://registry.npm.taobao.org/babel-preset-env/download/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - integrity sha1-3qefpOvriDzTXasH4mDBycBN93o= - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-es2015@^6.24.1: - version "6.24.1" - resolved "https://registry.npm.taobao.org/babel-preset-es2015/download/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - 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.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.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" - -babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - 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.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - 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.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types%2fbabel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + dependencies: + "@babel/types" "^7.20.7" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types%2fcolor-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA= -balanced-match@^1.0.0: +"@types/eslint-visitor-keys@^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= + resolved "https://registry.yarnpkg.com/@types%2feslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types%2fgraceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY= - -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" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM= - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz?cache=0&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" +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== -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= +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + "@types/istanbul-lib-coverage" "*" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types%2fistanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha1-kVP+mLuivVZaY63ZQ21vDX+EaP8= dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1, braces@^2.3.2: - 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" - -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz?cache=0&sync_timestamp=1567245449635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha1-sABTYdZHHw9ZUnl6dvyYXx+Xj8Y= - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY= + "@types/istanbul-lib-report" "*" -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" - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/cache-content-type/download/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha1-A1zeKwjuISn0qDFeqPAKANuhRTw= +"@types/jest@^29.5.2": + version "29.5.2" + resolved "https://registry.yarnpkg.com/@types%2fjest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b" + integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg== dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" + expect "^29.0.0" + pretty-format "^29.0.0" -camelcase@^4.0.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= +"@types/json-schema@^7.0.3": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types%2fjson-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0= -caniuse-lite@^1.0.30000844: - version "1.0.30000999" - resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000999.tgz#427253a69ad7bea4aa8d8345687b8eec51ca0e43" - integrity sha1-QnJTpprXvqSqjYNFaHuO7FHKDkM= +"@types/lodash@^4.14.152": + version "4.14.155" + resolved "https://registry.yarnpkg.com/@types%2flodash/-/lodash-4.14.155.tgz#e2b4514f46a261fd11542e47519c20ebce7bc23a" + integrity sha1-4rRRT0aiYf0RVC5HUZwg6857wjo= -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= +"@types/node@*": + version "20.3.1" + resolved "https://registry.yarnpkg.com/@types%2fnode/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" + integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== -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= +"@types/node@^14.0.4": + version "14.0.4" + resolved "https://registry.yarnpkg.com/@types%2fnode/-/node-14.0.4.tgz#43a63fc5edce226bed106b31b875165256271107" + integrity sha1-Q6Y/xe3OImvtEGsxuHUWUlYnEQc= -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=1570527275600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= +"@types/prettier@^2.1.5": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types%2fprettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types%2fstack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha1-IPGClPeX8iCbX2XI47XI6CYdEnw= + +"@types/uuid@^9.0.1": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@types%2fuuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" + integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== + +"@types/ws@^8.5.5": + version "8.5.5" + resolved "https://registry.yarnpkg.com/@types%2fws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" + integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== 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" + "@types/node" "*" -chalk@^2.0.1: - version "2.4.2" - resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1570527275600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types%2fyargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types%2fyargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + "@types/yargs-parser" "*" -chokidar@^1.6.1: - version "1.7.0" - resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - 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" - -chokidar@^2.0.4, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc= - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" +"@typescript-eslint/eslint-plugin@^3.0.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint%2feslint-plugin/-/eslint-plugin-3.3.0.tgz#89518e5c5209a349bde161c3489b0ec187ae5d37" + integrity sha1-iVGOXFIJo0m94WHDSJsOwYeuXTc= + dependencies: + "@typescript-eslint/experimental-utils" "3.3.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" -chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI= +"@typescript-eslint/experimental-utils@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint%2fexperimental-utils/-/experimental-utils-3.3.0.tgz#d72a946e056a83d4edf97f3411cceb639b0b8c87" + integrity sha1-1yqUbgVqg9Tt+X80EczrY5sLjIc= + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "3.3.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -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= +"@typescript-eslint/parser@^3.0.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint%2fparser/-/parser-3.3.0.tgz#fcae40012ded822aa8b2739a1a03a4e3c5bbb7bb" + integrity sha1-/K5AAS3tgiqosnOaGgOk48W7t7s= + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.3.0" + "@typescript-eslint/typescript-estree" "3.3.0" + eslint-visitor-keys "^1.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= +"@typescript-eslint/typescript-estree@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint%2ftypescript-estree/-/typescript-estree-3.3.0.tgz#841ffed25c29b0049ebffb4c2071268a34558a2a" + integrity sha1-hB/+0lwpsASev/tMIHEmijRViio= dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -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= +acorn@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-cursor%2Fdownload%2Fcli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +ajv@^6.10.0, ajv@^6.10.2: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: - restore-cursor "^2.0.0" + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -co-body@^6.0.0: - version "6.0.0" - resolved "https://registry.npm.taobao.org/co-body/download/co-body-6.0.0.tgz#965b9337d7f5655480787471f4237664820827e3" - integrity sha1-lluTN9f1ZVSAeHRx9CN2ZIIIJ+M= +ansi-escapes@^4.2.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: - inflation "^2.0.0" - qs "^6.5.2" - raw-body "^2.3.3" - type-is "^1.6.16" + type-fest "^0.11.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= +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== -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= +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -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= +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +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: - map-visit "^1.0.0" - object-visit "^1.0.0" + color-convert "^1.9.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= +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - color-name "1.1.3" + color-convert "^2.0.1" -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= +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" -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= +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: - delayed-stream "~1.0.0" + normalize-path "^3.0.0" + picomatch "^2.0.4" -commander@^2.11.0: - version "2.20.3" - resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= +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" -component-bind@1.0.0: +astral-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1, component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= +axios@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" + integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== + dependencies: + "@jest/transform" "^29.5.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.5.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" + integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/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@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" + integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== + dependencies: + babel-plugin-jest-hoist "^29.5.0" + babel-preset-current-node-syntax "^1.0.0" -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= +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= -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= +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: - 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: - 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= + balanced-match "^1.0.0" + concat-map "0.0.1" -content-disposition@~0.5.2: - version "0.5.3" - resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70= +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - safe-buffer "5.1.2" - -content-type@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= + fill-range "^7.0.1" -convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA= +browserslist@^4.21.3: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - safe-buffer "~5.1.1" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" -cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +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" -cookies@~0.8.0: - version "0.8.0" - resolved "https://registry.npm.taobao.org/cookies/download/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" - integrity sha1-EpPOSzkXQKhAbjyYcOgoxLVPP5A= +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: - depd "~2.0.0" - keygrip "~1.1.0" + node-int64 "^0.4.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= +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -copy-to@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" - integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= +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== -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.10" - resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha1-iluDkfjMcBPacDQRzltYVwYwDX8= +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -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= +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -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" +caniuse-lite@^1.0.30001503: + version "1.0.30001504" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz#eaf77e5c852dfa5f82c4924468c30602ac53744a" + integrity sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q== -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= +chalk@^2.0.0: + 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: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -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= + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o= +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: - es5-ext "^0.10.50" - type "^1.0.1" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: - assert-plus "^1.0.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -date-format@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha1-MdW16iEc9f12TNOLr50DPffhJc8= +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&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" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&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" +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== -debug@^4.1.1, debug@~4.1.0: - version "4.1.1" - resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E= - dependencies: - ms "^2.1.1" +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -debug@~3.1.0: +cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - ms "2.0.0" + restore-cursor "^3.1.0" -decimal.js@^10.2.0: - version "10.2.0" - resolved "https://registry.npm.taobao.org/decimal.js/download/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" - integrity sha1-OUZhE6ngNhEdAvgkibX9awte0jE= +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -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= +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +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= -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= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -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= +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: - is-descriptor "^0.1.0" + color-name "1.1.3" -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= +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: - is-descriptor "^1.0.0" + color-name "~1.1.4" -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" +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= -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= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -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= +combined-stream@^1.0.8: + 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" -depd@^1.1.2, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +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= -depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/depd/download/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8= +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -destroy@^1.0.4: - version "1.0.4" - resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= +debug@^4.0.1, 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: - is-obj "^1.0.0" + ms "^2.1.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=1605778259603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha1-RYhBlKcfws2nHLtLzrOk3S9DO6Q= +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - is-obj "^1.0.0" + ms "2.1.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= +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -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= +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= + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +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= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" + esutils "^2.0.2" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.4.431: + version "1.4.433" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz#305ef5f8ea5fe65d252aae4b0e1088f9e4842533" + integrity sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ== -electron-to-chromium@^1.3.47: - version "1.3.284" - resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.284.tgz#b24359fa4f49b3a7c52afc005d59ec3aa9f6796e" - integrity sha1-skNZ+k9Js6fFKvwAXVnsOqn2eW4= +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 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= + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -engine.io-client@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.5.0.tgz#fc1b4d9616288ce4f2daf06dcf612413dec941c7" - integrity sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA== - dependencies: - component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - ws "~7.4.2" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.2.0.tgz?cache=0&sync_timestamp=1568365944963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fengine.io-parser%2Fdownload%2Fengine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - integrity sha1-MSxIlPV9UqArQgho2ntcHISvgO0= - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.5.0.tgz#9d6b985c8a39b1fe87cd91eb014de0552259821b" - integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "~7.4.2" - -error-inject@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" - integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@~0.10.14: - version "0.10.51" - resolved "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.51.tgz#ed2d7d9d48a12df86e0299287e93a09ff478842f" - integrity sha1-7S19nUihLfhuApkofpOgn/R4hC8= +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: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" + is-arrayish "^0.2.1" -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.2" - resolved "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes6-symbol%2Fdownload%2Fes6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1" - integrity sha1-hZ/dNPMukF/wbXUucXHd1ERKftE= - dependencies: - d "^1.0.1" - es5-ext "^0.10.51" - -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +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.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -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= - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&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" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -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-range@^1.8.1: - version "1.8.2" - resolved "https://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.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= +eslint-scope@^5.0.0, eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== dependencies: - is-extendable "^0.1.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" -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= +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" + eslint-visitor-keys "^1.1.0" -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= +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== + +eslint@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.2.0.tgz#d41b2e47804b30dbabb093a967fb283d560082e6" + integrity sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.1.0" + eslint-utils "^2.0.0" + eslint-visitor-keys "^1.2.0" + espree "^7.1.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" + inquirer "^7.0.0" + 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.14" + 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.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" + integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw== + dependencies: + acorn "^7.2.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.2.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== -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - is-extglob "^1.0.0" + estraverse "^5.1.0" -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= +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + 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.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + 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= -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha1-6x53OrsFbc2N8r/favWbizqTZWU= +expect@^29.0.0, expect@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" + "@jest/expect-utils" "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" -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= +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" -flatted@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz?cache=0&sync_timestamp=1561466276595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha1-aeV8qo8OrLwoHS4stFjUb9tEngg= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -for-in@^1.0.1, 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= +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -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= +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz?cache=0&sync_timestamp=1567061363656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" + escape-string-regexp "^1.0.5" -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= +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - map-cache "^0.2.2" + flat-cache "^2.0.1" -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" -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&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= +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: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + locate-path "^5.0.0" + path-exists "^4.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= +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: - minipass "^2.6.0" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" -fs-readdir-recursive@^1.0.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/fs-readdir-recursive/download/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha1-4y/AMKLM7kSmtTcTCNpUvgs5fSc= +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" 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.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0, fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha1-P17WZYPM1vQAtaANtvfoYTY+OI8= - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.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" - -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= +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -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= +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== -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" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz?cache=0&sync_timestamp=1569108917227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1569108917227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" + is-glob "^4.0.1" -glob@^7.1.2, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha1-qmCKL2xXetNX4a5aXCbZqNGWklU= +glob@^7.1.3, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1759,2057 +1498,1453 @@ glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz?cache=0&sync_timestamp=1570510824235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo= - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz?cache=0&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.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.2" - resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha1-bwlSYF0BQMHP2xOO0AV3W5LWewI= - -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.0: - version "5.1.3" - resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA= +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1568144153016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.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== -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha1-d3asYn8+p3JQz8My2rfd9eT10R0= +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: - isarray "2.0.1" + type-fest "^0.8.1" -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -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" - 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" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" +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== -http-assert@^1.3.0: - version "1.4.1" - resolved "https://registry.npm.taobao.org/http-assert/download/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" - integrity sha1-xfcl1neqfoc+9zYZm4lobM6zeHg= +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: - deep-equal "~1.0.1" - http-errors "~1.7.2" + function-bind "^1.1.1" -http-errors@1.7.3, http-errors@^1.6.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24, iconv-lite@^0.4.4: +iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + 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-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -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= +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: - minimatch "^3.0.4" + parent-module "^1.0.0" + resolve-from "^4.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.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" 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.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflation@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" - integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= - inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + 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.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2: version "2.0.4" - resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= - -ini@^1.3.4, 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== - -invariant@^2.2.2: - 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" - -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-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^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#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha1-76ouqdqg16suoTqXsritUf776L4= - -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-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-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-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -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= + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a" + integrity sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ== + dependencies: + 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" + +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-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= +is-core-module@^2.12.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: - is-plain-object "^2.0.4" + has "^1.0.3" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: +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.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -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" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-generator-function@^1.0.7: - version "1.0.7" - resolved "https://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" - integrity sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI= - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" +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.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + 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#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?cache=0&sync_timestamp=1571056400909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-npm%2Fdownload%2Fis-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -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@^4.0.0: - version "4.0.0" - resolved "https://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8= - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -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" - 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.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= - dependencies: - isobject "^3.0.1" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -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-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&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: - version "1.1.0" - resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -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-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= - -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?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@2.0.1: +is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 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.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.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= - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -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= - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -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-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@^0.5.1: - version "0.5.1" - resolved "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -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" - -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" - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/keygrip/download/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha1-hxsWgdXhWcYqRFsMdLYV4JF+ciY= - dependencies: - tsscmp "1.0.6" - -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: - version "6.0.2" - resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE= +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -koa-bodyparser@^4.2.1: - version "4.2.1" - resolved "https://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-4.2.1.tgz#4d7dacb5e6db1106649b595d9e5ccb158b6f3b29" - integrity sha1-TX2stebbEQZkm1ldnlzLFYtvOyk= +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: - co-body "^6.0.0" - copy-to "^2.0.1" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - any-promise "^1.1.0" - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.npm.taobao.org/koa-compose/download/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc= + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkoa-convert%2Fdownload%2Fkoa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" + integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" + integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" co "^4.6.0" - koa-compose "^3.0.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.5.0" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + p-limit "^3.1.0" + pretty-format "^29.5.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" + integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== + dependencies: + "@jest/core" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" + integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.5.0" + "@jest/types" "^29.5.0" + babel-jest "^29.5.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.5.0" + jest-environment-node "^29.5.0" + jest-get-type "^29.4.3" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-runner "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.5.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-docblock@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" + integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== + dependencies: + "@jest/types" "^29.5.0" + chalk "^4.0.0" + jest-get-type "^29.4.3" + jest-util "^29.5.0" + pretty-format "^29.5.0" + +jest-environment-node@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" + integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-mock "^29.5.0" + jest-util "^29.5.0" + +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== + +jest-haste-map@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" + integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== + dependencies: + "@jest/types" "^29.5.0" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.4.3" + jest-util "^29.5.0" + jest-worker "^29.5.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" + integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== + dependencies: + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== + dependencies: + chalk "^4.0.0" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.5.0" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" + integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + jest-util "^29.5.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" + integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== + +jest-resolve-dependencies@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" + integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== + dependencies: + jest-regex-util "^29.4.3" + jest-snapshot "^29.5.0" + +jest-resolve@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" + integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.5.0" + jest-validate "^29.5.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" + integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/environment" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.3" + jest-environment-node "^29.5.0" + jest-haste-map "^29.5.0" + jest-leak-detector "^29.5.0" + jest-message-util "^29.5.0" + jest-resolve "^29.5.0" + jest-runtime "^29.5.0" + jest-util "^29.5.0" + jest-watcher "^29.5.0" + jest-worker "^29.5.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" + integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== + dependencies: + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/globals" "^29.5.0" + "@jest/source-map" "^29.4.3" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-regex-util "^29.4.3" + jest-resolve "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" + integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.5.0" + graceful-fs "^4.2.9" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + natural-compare "^1.4.0" + pretty-format "^29.5.0" + semver "^7.3.5" + +jest-util@^29.0.0, jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" + integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== + dependencies: + "@jest/types" "^29.5.0" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.4.3" + leven "^3.1.0" + pretty-format "^29.5.0" + +jest-watcher@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" + integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== + dependencies: + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.5.0" + string-length "^4.0.1" + +jest-worker@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" + integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + dependencies: + "@jest/core" "^29.5.0" + "@jest/types" "^29.5.0" + import-local "^3.0.2" + jest-cli "^29.5.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== -koa-is-json@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" - integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ= - -koa@^2.8.1: - version "2.10.0" - resolved "https://registry.npm.taobao.org/koa/download/koa-2.10.0.tgz#86a583ff280896dce3a36b0b6dae80f9559240d3" - integrity sha1-hqWD/ygIltzjo2sLba6A+VWSQNM= - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" - delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - encodeurl "^1.0.2" - error-inject "^1.0.0" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - koa-is-json "^1.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flatest-version%2Fdownload%2Flatest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: - package-json "^4.0.0" + argparse "^1.0.7" + esprima "^4.0.0" -lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI= - -lodash@^4.17.4: - version "4.17.15" - resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -log-update@^3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/log-update/download/log-update-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-update%2Fdownload%2Flog-update-3.3.0.tgz#3b0501815123f66cb33f300e3dac2a2b6ad3fdf5" - integrity sha1-OwUBgVEj9myzPzAOPawqK2rT/fU= - dependencies: - ansi-escapes "^3.2.0" - cli-cursor "^2.1.0" - wrap-ansi "^5.0.0" - -log4js@^5.1.0: - version "5.2.2" - resolved "https://registry.npm.taobao.org/log4js/download/log4js-5.2.2.tgz#35b750416f22913dd6905d49335752d9b240f47c" - integrity sha1-NbdQQW8ikT3WkF1JM1dS2bJA9Hw= - dependencies: - date-format "^2.1.0" - debug "^4.1.1" - flatted "^2.0.1" - rfdc "^1.1.4" - streamroller "^2.2.2" +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -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" +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== -lowercase-keys@^1.0.0: +json-stable-stringify-without-jsonify@^1.0.1: 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" - -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" - -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= + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -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" - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.npm.taobao.org/math-random/download/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw= - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - 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.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-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" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI= - -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha1-tvjQs+lR77d97eyhlM/20W9nb4E= - dependencies: - mime-db "1.40.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI= - -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@0.0.8: - version "0.0.8" - resolved "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -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?cache=0&sync_timestamp=1571165916166&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" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz?cache=0&sync_timestamp=1570255638980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - minipass "^2.9.0" + prelude-ls "^1.2.1" + type-check "~0.4.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" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +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: - minimist "0.0.8" + p-locate "^4.1.0" -moment@^2.24.0: - version "2.24.0" - resolved "https://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s= +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -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= +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -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= - -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw= - -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" - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.npm.taobao.org/needle/download/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha1-aDPnSXXERGQlkOFadQKIxfk5tXw= - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs= - -next-tick@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +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== -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.12.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-pre-gyp%2Fdownload%2Fnode-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha1-ObpLsUOdoDApX4meO1ILd4V2YUk= +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 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" - -nodemon@^1.19.2: - version "1.19.4" - resolved "https://registry.npm.taobao.org/nodemon/download/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" - integrity sha1-VttcYHQI4P34kg0rREgZrxquCXE= - dependencies: - chokidar "^2.1.8" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^2.5.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - abbrev "1" - osenv "^0.1.4" + yallist "^4.0.0" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - abbrev "1" + semver "^6.0.0" -normalize-path@^2.0.0, normalize-path@^2.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= +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - remove-trailing-separator "^1.0.1" + tmpl "1.0.5" -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -notepack.io@~2.1.0: - version "2.1.3" - resolved "https://registry.npm.taobao.org/notepack.io/download/notepack.io-2.1.3.tgz#cc904045c751b1a27b2dcfd838d81d0bf3ced923" - integrity sha1-zJBARcdRsaJ7Lc/YONgdC/PO2SM= +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha1-57qarc75YrthJI+RchzZMrP+a90= +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha1-U7o+0R+FIwefFFc3bdN57k6kL/Q= +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + mime-db "1.52.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?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +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: - path-key "^2.0.0" + brace-expansion "^1.1.7" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + brace-expansion "^1.1.7" -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= +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== -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= +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" -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= +ms@2.1.2, 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== -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" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -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" +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= -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.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= -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" +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== -on-finished@^2.3.0: - version "2.3.0" - resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - ee-first "1.1.1" + path-key "^3.0.0" once@^1.3.0: version "1.4.0" - resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + 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.npm.taobao.org/onetime/download/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: - mimic-fn "^1.0.0" + mimic-fn "^2.1.0" -only@~0.0.2: - version "0.0.2" - resolved "https://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" -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= +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + 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-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +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.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.npm.taobao.org/osenv/download/osenv-0.1.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fosenv%2Fdownload%2Fosenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" + p-try "^2.0.0" -output-file-sync@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/output-file-sync/download/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" - integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.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= + yocto-queue "^0.1.0" -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= +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: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" + p-limit "^2.2.0" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parseqs@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" - integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== - -parseuri@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" - integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== - -parseurl@^1.3.2: - version "1.3.3" - resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= - -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-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +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== -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +parent-module@^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: - 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: - version "2.0.1" - resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -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= - -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= - -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= - -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= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8= - -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?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" -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= +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/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" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" -psl@^1.1.24: - version "1.4.0" - resolved "https://registry.npm.taobao.org/psl/download/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha1-XdJhVs22n6H9uKsZkWZ9P4DO18I= +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== -pstree.remy@^1.1.7: - version "1.1.7" - resolved "https://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" - integrity sha1-x2ljooBH7WFULcNhqibuVaf6FfM= +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= -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -qs@^6.5.2, qs@^6.9.0: - version "6.9.0" - resolved "https://registry.npm.taobao.org/qs/download/qs-6.9.0.tgz?cache=0&sync_timestamp=1569207136481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409" - integrity sha1-0Sl+KgScUxGctJzKNmrbusyAtAk= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1569207136481&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -querystring@^0.2.0: - version "0.2.0" - resolved "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha1-t3bvxZN1mE42xTey9RofCv8Noe0= +pkg-dir@^4.2.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: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" + find-up "^4.0.0" -raw-body@^2.3.3: - version "2.4.1" - resolved "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha1-MKyC+Yu1rowVLmcUnayNVRU7Fow= - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - 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" - -readable-stream@^2.0.2, readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8= - 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, readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -regenerate@^1.2.1: - version "1.4.0" - resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha1-SoVuxLVuQHfFV1icroXnpMiGmhE= +prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.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= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0= +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" + kleur "^3.0.3" + sisteransi "^1.0.5" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha1-db3FiioUls7EihKDW8VMjVYjNt0= - dependencies: - is-equal-shallow "^0.1.3" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -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" +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz?cache=0&sync_timestamp=1568402850982&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" +pure-rand@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== -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=1560785240550&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" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -registry-url@^3.0.3: +regexpp@^3.0.0, regexpp@^3.1.0: 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" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +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= -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - jsesc "~0.5.0" + resolve-from "^5.0.0" -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= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -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= +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -repeat-string@^1.5.2, 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= +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request@^2.88.0: - version "2.88.0" - resolved "https://registry.npm.taobao.org/request/download/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha1-nC/KT301tZLv5Xx/ClXoEFIST+8= - 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" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.20.0: + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -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= +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.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= - -rfdc@^1.1.4: - version "1.1.4" - resolved "https://registry.npm.taobao.org/rfdc/download/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" - integrity sha1-unLME2egzNnPgahws7WL060H+MI= - -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= +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" -safe-buffer@5.1.2, 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#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk= +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: - ret "~0.1.10" + tslib "^1.9.0" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= - -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= + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -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&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver-diff%2Fdownload%2Fsemver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= +semver@7.x, semver@^7.3.5: + version "7.5.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== dependencies: - semver "^5.0.3" + lru-cache "^6.0.0" -semver@^5.0.3, semver@^5.1.0, semver@^5.3.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=1565627362346&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.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -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= +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -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#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM= + shebang-regex "^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&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-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -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= +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -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" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -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" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= - -socket.io-client@2.4.0, socket.io-client@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.4.0.tgz#aafb5d594a3c55a34355562fc8aea22ed9119a35" - integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "~1.3.0" - debug "~3.1.0" - engine.io-client "~3.5.0" - has-binary2 "~1.0.2" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-msgpack-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.npm.taobao.org/socket.io-msgpack-parser/download/socket.io-msgpack-parser-2.2.0.tgz#90084168d00f15dddf674bcd88263edee868cd55" - integrity sha1-kAhBaNAPFd3fZ0vNiCY+3uhozVU= +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: - component-emitter "1.2.1" - notepack.io "~2.1.0" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - integrity sha1-K1KpalCf3zFEC6QP7WCUx9TxJi8= - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.0" - resolved "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" - integrity sha1-Nwu0oVHfL3fOM0X/VacHLMbpVlo= - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.4.0.tgz#01030a2727bd8eb2e85ea96d69f03692ee53d47e" - integrity sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ== - dependencies: - debug "~4.1.0" - engine.io "~3.5.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.4.0" - socket.io-parser "~3.4.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk= - 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 "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8= - dependencies: - source-map "^0.5.6" - -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.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" -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" - -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" - -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= +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" + buffer-from "^1.0.0" + source-map "^0.6.0" -"statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -streamroller@^2.2.2: - version "2.2.2" - resolved "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.2.tgz#26bea90567f80d8438d251e5603643fe617b7090" - integrity sha1-Jr6pBWf4DYQ40lHlYDZD/mF7cJA= - dependencies: - date-format "^2.1.0" - debug "^4.1.1" - fs-extra "^8.1.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= -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" + escape-string-regexp "^2.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.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + char-regex "^1.0.2" + strip-ansi "^6.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= + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -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" - -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= +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - ansi-regex "^2.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.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= +string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - ansi-regex "^3.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -strip-ansi@^5.0.0, strip-ansi@^5.1.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.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" -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-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" - 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=1569557271992&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.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - has-flag "^3.0.0" + ansi-regex "^5.0.0" -tar@^4: - version "4.4.13" - resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz?cache=0&sync_timestamp=1570258601713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 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" + ansi-regex "^5.0.1" -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" +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== -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimed-out%2Fdownload%2Ftimed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= +strip-json-comments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -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= +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: - kind-of "^3.0.2" + has-flag "^3.0.0" -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= +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: - is-number "^3.0.0" - repeat-string "^1.6.1" + has-flag "^4.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= +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" + has-flag "^4.0.0" -toidentifier@1.0.0: +supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds= +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: - nopt "~1.0.10" + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha1-U/Nto/R3g7CSWvoG/587FlKA94E= +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: - psl "^1.1.24" - punycode "^1.4.1" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.npm.taobao.org/tsscmp/download/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha1-hbmVg6w1iexL/vgltQAKqRHWBes= +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -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= +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 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" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + os-tmpdir "~1.0.2" -type-is@^1.6.16: - version "1.6.18" - resolved "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha1-TlUs0F3wlGfcvE73Od6J8s83wTE= - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1570722772335&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A= +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= -undefsafe@^2.0.2: - version "2.0.2" - resolved "https://registry.npm.taobao.org/undefsafe/download/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" - integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-jest@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" + integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - debug "^2.2.0" + prelude-ls "^1.2.1" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funion-value%2Fdownload%2Funion-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" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -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" +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== -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= +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -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= +typescript@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== -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= +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 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= - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= - -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" + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.2.2" - resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha1-lMVA4f93KVbiKZUHwBCupsiDjrA= + 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.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -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= - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= - -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= - -uuid@^3.3.2, uuid@^3.3.3: - version "3.3.3" - resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.3.3.tgz?cache=0&sync_timestamp=1566221202613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha1-RWjwIW54dg7h2/Ok0s9T4iQRKGY= +uuid@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== -v8flags@^2.1.1: +v8-compile-cache@^2.0.3: version "2.1.1" - resolved "https://registry.npm.taobao.org/v8flags/download/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= - dependencies: - user-home "^1.1.1" - -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fverror%2Fdownload%2Fverror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1570146293742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - isexe "^2.0.0" + makeerror "1.0.12" -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= +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - string-width "^1.0.2 || 2" + isexe "^2.0.0" -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.2.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== -wrap-ansi@^5.0.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= +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + 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" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - 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= +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" - signal-exit "^3.0.2" + signal-exit "^3.0.7" -ws@^7.1.2: - version "7.1.2" - resolved "https://registry.npm.taobao.org/ws/download/ws-7.1.2.tgz#c672d1629de8bb27a9699eb599be47aeeedd8f73" - integrity sha1-xnLRYp3ouyepaZ61mb5Hru7dj3M= +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: - async-limiter "^1.0.0" - -ws@~7.4.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" - integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== - -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= + mkdirp "^0.5.1" -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz?cache=0&sync_timestamp=1564594466893&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlhttprequest-ssl%2Fdownload%2Fxmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -ylru@^1.2.0: - version "1.2.1" - resolved "https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" - integrity sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 00fc86c9b8eda81f67db10a28bd5430cfefd80f9 Mon Sep 17 00:00:00 2001 From: garuda Date: Sun, 25 Jun 2023 14:06:29 +0800 Subject: [PATCH 2/2] docs: update doc --- README.md | 2 +- example/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2801eb2..f8808ed 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ futuresSDK.futuresTransactionHistory( #### Get Sub-Account Futures API List ```js -futuresSDK.futuresSubApi({ subName: 'testSDK' }, console.log); +futuresSDK.futuresSubApi({ subName: '' }, console.log); ``` #### Create Futures APIs for Sub-Account diff --git a/example/index.js b/example/index.js index 5c122fc..56e9745 100644 --- a/example/index.js +++ b/example/index.js @@ -74,7 +74,7 @@ futuresSDK.futuresStatus(console.log); // console.log // ); -futuresSDK.futuresSubApi({ subName: 'khan002' }, console.log); +// futuresSDK.futuresSubApi({ subName: '' }, console.log); // futuresSDK.futuresCreateSubApi( // {