├── .npmignore ├── .gitignore ├── .travis.yml ├── tsconfig.json ├── test └── test.js ├── dist ├── index.d.ts ├── index.js ├── TsIndexDb.d.ts └── TsIndexDb.js ├── SECURITY.md ├── package.json ├── libs ├── index.ts └── TsIndexDb.ts ├── karma.conf.js ├── README.md ├── yarn-error.log └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | lib/ -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language : node_js 2 | node_js : 3 | - "10" 4 | install: 5 | - npm i 6 | script: 7 | - npm run build 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "outDir": "./dist", 7 | "strict": true 8 | } 9 | } -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | // const expect = require('chai').expect; 3 | // const IndexDb = require('../dist/lib/index').default; 4 | 5 | describe('true test', function () { 6 | it('contains a passing spec', function () { 7 | console.log('Hello Karma'); 8 | }) 9 | }); 10 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | import { TsIndexDb, IIndexDb } from "./TsIndexDb"; 2 | /** 3 | * @method 初始化函数 4 | * @param param0 5 | * @param isMany 6 | */ 7 | export declare const init: ({ dbName, version, tables }: IIndexDb) => Promise; 8 | /** 9 | * @method 获取单例的单个对象 10 | */ 11 | export declare const getInstance: () => TsIndexDb; 12 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ts-indexdb", 3 | "version": "0.0.8", 4 | "description": "typescript indexDb封装", 5 | "main": "dist/index.js", 6 | "typings": "dist/index.d.ts", 7 | "scripts": { 8 | "build": "tsc", 9 | "test": "./node_modules/karma/bin/karma start" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/q1104133609/Ts-IndexDb.git" 14 | }, 15 | "keywords": [ 16 | "indexdb", 17 | "typescript" 18 | ], 19 | "author": "小白", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/q1104133609/Ts-IndexDb/issues" 23 | }, 24 | "homepage": "https://github.com/q1104133609/Ts-IndexDb#readme", 25 | "devDependencies": { 26 | "chai": "^4.2.0", 27 | "karma": "^6.3.16", 28 | "karma-chrome-launcher": "^3.1.0", 29 | "karma-mocha": "^1.3.0", 30 | "mocha": "^7.1.1", 31 | "typescript": "^3.8.3" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /libs/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @Description: file content 3 | * @Author: 小白 4 | * @Date: 2020-04-08 21:24:32 5 | * @LastEditors: 小白 6 | * @LastEditTime: 2020-04-10 09:13:06 7 | */ 8 | 9 | import { TsIndexDb, IIndexDb } from "./TsIndexDb" 10 | 11 | 12 | // /** 13 | // * @method 初始化函数 14 | // * @param param0 15 | // * @param isMany 16 | // */ 17 | // export const initMany = (dbList: IIndexDb[]): Promise => { 18 | // const db = TsIndexDb.getInstance({ 19 | // dbName, 20 | // version, 21 | // tables 22 | // }) 23 | // return db.open_db() 24 | // } 25 | /** 26 | * @method 初始化函数 27 | * @param param0 28 | * @param isMany 29 | */ 30 | export const init = ({ dbName, version = 1, tables = [] }: IIndexDb): Promise => { 31 | const db = TsIndexDb.getInstance({ 32 | dbName, 33 | version, 34 | tables 35 | }) 36 | return db.open_db() 37 | } 38 | 39 | /** 40 | * @method 获取单例的单个对象 41 | */ 42 | export const getInstance = () => TsIndexDb.getInstance() 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* 3 | * @Description: file content 4 | * @Author: 小白 5 | * @Date: 2020-04-08 21:24:32 6 | * @LastEditors: 小白 7 | * @LastEditTime: 2020-04-10 09:13:06 8 | */ 9 | Object.defineProperty(exports, "__esModule", { value: true }); 10 | const TsIndexDb_1 = require("./TsIndexDb"); 11 | // /** 12 | // * @method 初始化函数 13 | // * @param param0 14 | // * @param isMany 15 | // */ 16 | // export const initMany = (dbList: IIndexDb[]): Promise => { 17 | // const db = TsIndexDb.getInstance({ 18 | // dbName, 19 | // version, 20 | // tables 21 | // }) 22 | // return db.open_db() 23 | // } 24 | /** 25 | * @method 初始化函数 26 | * @param param0 27 | * @param isMany 28 | */ 29 | exports.init = ({ dbName, version = 1, tables = [] }) => { 30 | const db = TsIndexDb_1.TsIndexDb.getInstance({ 31 | dbName, 32 | version, 33 | tables 34 | }); 35 | return db.open_db(); 36 | }; 37 | /** 38 | * @method 获取单例的单个对象 39 | */ 40 | exports.getInstance = () => TsIndexDb_1.TsIndexDb.getInstance(); 41 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Thu Apr 09 2020 15:05:10 GMT+0800 (China Standard Time) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['mocha'], 14 | 15 | 16 | // list of files / patterns to load in the browser 17 | files: [ 18 | 'test/**.js' 19 | ], 20 | 21 | 22 | // list of files / patterns to exclude 23 | exclude: [ 24 | ], 25 | 26 | 27 | // preprocess matching files before serving them to the browser 28 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 29 | preprocessors: { 30 | }, 31 | 32 | 33 | // test results reporter to use 34 | // possible values: 'dots', 'progress' 35 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 36 | reporters: ['progress'], 37 | 38 | 39 | // web server port 40 | port: 9876, 41 | 42 | 43 | // enable / disable colors in the output (reporters and logs) 44 | colors: true, 45 | 46 | 47 | // level of logging 48 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 49 | logLevel: config.LOG_INFO, 50 | 51 | 52 | // enable / disable watching file and executing tests whenever any file changes 53 | autoWatch: true, 54 | 55 | 56 | // start these browsers 57 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 58 | browsers: ['Chrome'], 59 | 60 | 61 | // Continuous Integration mode 62 | // if true, Karma captures browsers, runs the tests and exits 63 | singleRun: false, 64 | 65 | // Concurrency level 66 | // how many browser should be started simultaneous 67 | concurrency: Infinity 68 | }) 69 | } 70 | -------------------------------------------------------------------------------- /dist/TsIndexDb.d.ts: -------------------------------------------------------------------------------- 1 | export declare type IIndexDb = { 2 | dbName: string; 3 | version: number; 4 | tables: DbTable[]; 5 | }; 6 | export declare type DbIndex = { 7 | key: string; 8 | option?: IDBIndexParameters; 9 | }; 10 | export declare type DbTable = { 11 | tableName: string; 12 | option?: IDBObjectStoreParameters; 13 | indexs: DbIndex[]; 14 | }; 15 | export declare type AtleastOne; 17 | }> = Partial & U[keyof U]; 18 | export interface DbOperate { 19 | tableName: string; 20 | key: string; 21 | data: T | T[]; 22 | value: string | number; 23 | countCondition: { 24 | type: 'equal' | 'gt' | 'lt' | 'between'; 25 | rangeValue: [any, any?, any?, any?]; 26 | }; 27 | condition(data: T): boolean; 28 | success(res: T[] | T): void; 29 | handle(res: T): void; 30 | } 31 | export declare class TsIndexDb { 32 | private dbName; 33 | private version; 34 | private tableList; 35 | private db; 36 | private queue; 37 | constructor({ dbName, version, tables }: IIndexDb); 38 | private static _instance; 39 | static getInstance(dbOptions?: IIndexDb): TsIndexDb; 40 | /** 41 | * @method 查询某张表的所有数据(返回具体数组) 42 | * @param {Object} 43 | * @property {String} tableName 表名 44 | */ 45 | queryAll({ tableName }: Pick, 'tableName'>): Promise; 46 | /** 47 | * @method 查询(返回具体数组) 48 | * @param {Object} 49 | * @property {String} tableName 表名 50 | * @property {Function} condition 查询的条件 51 | * */ 52 | query({ tableName, condition }: Pick, 'condition' | 'tableName'>): Promise; 53 | /** 54 | * @method 查询满足key条件的个数(返回满足条件的数字个数) 55 | * @param {Object} 56 | * @property {String} tableName 表名 57 | * @property {Number|String} key 查询的key 58 | * @property {Object} countCondition 查询条件 59 | * */ 60 | /** countCondition传入方式 key 必须为已经简历索引的字段 61 | * key ≥ x {key: 'gt' rangeValue: [x]} 62 | key > x {key: 'gt' rangeValue: [x, true]} 63 | key ≤ y {key: 'lt' rangeValue: [y]} 64 | key < y {key: 'lt' rangeValue: [y, true]} 65 | key ≥ x && ≤ y {key: 'between' rangeValue: [x, y]} 66 | key > x &&< y {key: 'between' rangeValue: [x, y, true, true]} 67 | key > x && ≤ y {key: 'between' rangeValue: [x, y, true, false]} 68 | key ≥ x &&< y {key: 'between' rangeValue: [x, y, false, true]} 69 | key = z {key: 'equal' rangeValue: [z]} 70 | */ 71 | count({ tableName, key, countCondition }: Pick, 'key' | 'tableName' | 'countCondition'>): Promise; 72 | /** 73 | * @method 查询数据(更具表具体属性)返回具体某一个 74 | * @param {Object} 75 | * @property {String} tableName 表名 76 | * @property {Number|String} key 名 77 | * @property {Number|String} value 值 78 | * 79 | * */ 80 | query_by_keyValue({ tableName, key, value }: Pick, 'tableName' | 'key' | 'value'>): Promise; 81 | /** 82 | * @method 查询数据(主键值) 83 | * @param {Object} 84 | * @property {String} tableName 表名 85 | * @property {Number|String} value 主键值 86 | * 87 | * */ 88 | query_by_primaryKey({ tableName, value }: Pick, 'tableName' | 'value'>): Promise; 89 | /** 90 | * @method 修改数据(返回修改的数组) 91 | * @param {Object} 92 | * @property {String} tableName 表名 93 | * @property {Function} condition 查询的条件,遍历,与filter类似 94 | * @arg {Object} 每个元素 95 | * @return 条件 96 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 97 | * */ 98 | update({ tableName, condition, handle }: Pick, 'tableName' | 'condition' | 'handle'>): Promise; 99 | /** 100 | * @method 修改某条数据(主键)返回修改的对象 101 | * @param {Object} 102 | * @property {String} tableName 表名 103 | * @property {String\|Number} value 目标主键值 104 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 105 | * */ 106 | update_by_primaryKey({ tableName, value, handle }: Pick, 'tableName' | 'value' | 'handle'>): Promise; 107 | /** 108 | * @method 增加数据 109 | * @param {Object} 110 | * @property {String} tableName 表名 111 | * @property {Object} data 插入的数据 112 | * */ 113 | insert({ tableName, data }: Pick, 'tableName' | 'data'>): Promise; 114 | /** 115 | * @method 删除数据(返回删除数组) 116 | * @param {Object} 117 | * @property {String} tableName 表名 118 | * @property {Function} condition 查询的条件,遍历,与filter类似 119 | * @arg {Object} 每个元素 120 | * @return 条件 121 | * */ 122 | delete({ tableName, condition }: Pick, 'tableName' | 'condition'>): Promise; 123 | /** 124 | * @method 删除数据(主键) 125 | * @param {Object} 126 | * @property {String} tableName 表名 127 | * @property {String\|Number} value 目标主键值 128 | * */ 129 | delete_by_primaryKey({ tableName, value }: Pick, 'tableName' | 'value'>): Promise; 130 | /** 131 | * @method 打开数据库 132 | */ 133 | open_db(): Promise; 134 | /** 135 | *@method 关闭数据库 136 | * @param {[type]} db [数据库名称] 137 | */ 138 | close_db(): Promise; 139 | /** 140 | * @method 删除数据库 141 | * @param {String}name 数据库名称 142 | */ 143 | delete_db(name: string): Promise; 144 | /** 145 | * @method 删除表数据 146 | * @param {String}name 数据库名称 147 | */ 148 | delete_table(tableName: string): Promise; 149 | /** 150 | * 创建table 151 | * @option keyPath指定主键 autoIncrement是否自增 152 | * @index 索引配置 153 | * */ 154 | private create_table; 155 | /** 156 | * 提交Db请求 157 | * @param tableName 表名 158 | * @param commit 提交具体函数 159 | * @param mode 事物方式 160 | * @param backF 游标方法 161 | */ 162 | private commitDb; 163 | /** 164 | * @method 游标开启成功,遍历游标 165 | * @param {Function} 条件 166 | * @param {Function} 满足条件的处理方式 @arg {Object} @property cursor游标 @property currentValue当前值 167 | * @param {Function} 游标遍历完执行的方法 168 | * @return {Null} 169 | * */ 170 | cursor_success(e: any, { condition, handler, success }: any): void; 171 | } 172 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 8 | # ts-indexdb 9 |

10 | npm package 11 | npm package 12 | size 13 |

14 | ## Install 15 | 16 | ```sh 17 | npm install ts-indexdb 18 | yarn add ts-indexdb 19 | ``` 20 | ## Usage 21 | ### Typescript 22 | ``` 23 | import { init, getInstance } from 'ts-indexdb'; 24 | export type Rack = { 25 | name: string 26 | id?: number 27 | } 28 | ``` 29 | 30 | ### javascript 31 | 32 | ``` 33 | import TsIndexDb = require('ts-indexdb'); 34 | ``` 35 | ## 数据库操作方法 36 | ### 注意 37 | * 当前类为单例模式只要init一次,后面直接getInstance获取实例来操作数据库 38 | * 操作返回的均为Promis对象 39 | * js不用加泛型 40 | ### 数据库与表操作 41 | 方法|方法名|参数|属性 42 | --|:--|:--:|:-- 43 | open_db|打开数据库|无|- 44 | close_db|关闭数据库|无|- 45 | delete_db|删除数据库|String|name 46 | delete_table|删除表数据|String|tableName 47 | 48 | 49 | ### 查询操作(query) 50 | 方法|方法名|参数|属性 51 | --|:--|:--:|:-- 52 | queryAll|查询某张表的所有数据(返回具体数组)|Object|{ tableName } 53 | query|查询(返回具体数组)|Object|{ tableName, condition } 54 | query_by_keyValue|查询数据(更具表具体属性)返回具体某一个|Object|{ tableName, key, value } 55 | query_by_primaryKey|查询数据(主键值)|Object|{ tableName, value } 56 | count|查询数据(主键值)|Object|{ tableName, key, countCondition:{type,rangeValue } } 57 | 58 | ### 更新操作(update) 59 | 方法|方法名|参数|属性 60 | --|:--|:--:|:-- 61 | update|更具条件修改数据(返回修改的数组)|Object|{ tableName, condition, handle } 62 | update_by_primaryKey|修改某条数据(主键)返回修改的对象|Object|{ tableName, value, handle } 63 | 64 | ### 插入操作(insert) 65 | 方法|方法名|参数|属性 66 | --|:--|:--:|:-- 67 | insert|增加数据|Object|{ tableName, data(数组或者单独对象) } 68 | 69 | ### 删除操作(delete) 70 | 方法|方法名|参数|属性 71 | --|:--|:--:|:-- 72 | delete|根据条件删除数据(返回删除数组)|Object|{ tableName, condition } 73 | delete_by_primaryKey|删除数据(主键)|Object|{ tableName, value } 74 | 75 | 76 | ## 例子: 77 | ### 初始化 78 | ``` 79 | await init({ 80 | dbName: "books", // 数据库名称 81 | version: 1, // 版本号 82 | tables: [ 83 | { 84 | tableName: "bookrackList", // 表名 85 | option: { keyPath: "id", autoIncrement: true }, // 指明主键为id 86 | indexs: [ // 数据库索引 87 | { 88 | key: "id", 89 | option: { 90 | unique: true 91 | } 92 | }, 93 | { 94 | key: "name" 95 | } 96 | ] 97 | } 98 | ] 99 | }) 100 | ``` 101 | ### 查询 102 | ``` 103 | /** 104 | * @method 查询某张表的所有数据(返回具体数组) 105 | * @param {Object} 106 | * @property {String} tableName 表名 107 | */ 108 | await getInstance().queryAll({ 109 | tableName: 'bookrackList' 110 | }); 111 | 112 | 113 | /** 114 | * @method 查询(返回具体数组) 115 | * @param {Object} 116 | * @property {String} tableName 表名 117 | * @property {Function} condition 查询的条件 118 | * */ 119 | await getInstance().query({ 120 | tableName: 'bookrackList', 121 | condition: item => item.id === 3 122 | }); 123 | 124 | /** 125 | * @method 查询数据(更具表具体属性)返回具体某一个 126 | * @param {Object} 127 | * @property {String} tableName 表名 128 | * @property {Number|String} key 名 129 | * @property {Number|String} value 值 130 | * 131 | * */ 132 | await getInstance().query_by_keyValue({ 133 | tableName: 'bookrackList', 134 | key: 'name', 135 | value: '我师兄实在太稳健了' 136 | }); 137 | 138 | /** 139 | * @method 查询数据(主键值) 140 | * @param {Object} 141 | * @property {String} tableName 表名 142 | * @property {Number|String} value 主键值 143 | * 144 | * */ 145 | await getInstance().query_by_primaryKey({ 146 | tableName: 'bookrackList', 147 | value: 3 148 | }); 149 | /** 150 | * @method 查询满足key条件的个数(返回满足条件的数字个数) 151 | * @param {Object} 152 | * @property {String} tableName 表名 153 | * @property {Number|String} key 查询的key 154 | * @property {Object} countCondition 查询条件 155 | * */ 156 | /** countCondition传入方式 key 必须为已经简历索引的字段 157 | * key ≥ x {key: 'gt' rangeValue: [x]} 158 | key > x {key: 'gt' rangeValue: [x, true]} 159 | key ≤ y {key: 'lt' rangeValue: [y]} 160 | key < y {key: 'lt' rangeValue: [y, true]} 161 | key ≥ x && ≤ y {key: 'between' rangeValue: [x, y]} 162 | key > x &&< y {key: 'between' rangeValue: [x, y, true, true]} 163 | key > x && ≤ y {key: 'between' rangeValue: [x, y, true, false]} 164 | key ≥ x &&< y {key: 'between' rangeValue: [x, y, false, true]} 165 | key = z {key: 'equal' rangeValue: [z]} 166 | */ 167 | await getInstance().count({ 168 | tableName: 'bookrackList', 169 | key: 'createdTime', 170 | countCondition: { 171 | type: 'between', 172 | rangeValue:[1676627113088,new Date().getTime()] 173 | } 174 | }) 175 | 176 | ``` 177 | 178 | ### 更新 179 | ``` 180 | /** 181 | * @method 修改数据(返回修改的数组) 182 | * @param {Object} 183 | * @property {String} tableName 表名 184 | * @property {Function} condition 查询的条件,遍历,与filter类似 185 | * @arg {Object} 每个元素 186 | * @return 条件 187 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 188 | * */ 189 | await getInstance().update({ 190 | tableName: 'bookrackList', 191 | condition: item => item.id === 8, 192 | handle: r => { 193 | r.name = '测试修改'; 194 | return r; 195 | } 196 | }) 197 | 198 | 199 | /** 200 | * @method 修改某条数据(主键)返回修改的对象 201 | * @param {Object} 202 | * @property {String} tableName 表名 203 | * @property {String\|Number} value 目标主键值 204 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 205 | * */ 206 | await getInstance().update_by_primaryKey({ 207 | tableName: 'bookrackList', 208 | value: 1, 209 | handle: r => { 210 | r.name = '测试修改'; 211 | return r; 212 | } 213 | }) 214 | 215 | ``` 216 | ### 增加 217 | ``` 218 | /** 219 | * @method 增加数据 220 | * @param {Object} 221 | * @property {String} tableName 表名 222 | * @property {Object} data 插入的数据 223 | * */ 224 | await getInstance().insert({ 225 | tableName: 'bookrackList', 226 | data: { 227 | name: '测试', 228 | } 229 | }) 230 | ``` 231 | 232 | ### 删除 233 | 234 | 235 | /** 236 | * @method 删除数据(返回删除数组) 237 | * @param {Object} 238 | * @property {String} tableName 表名 239 | * @property {Function} condition 查询的条件,遍历,与filter类似 240 | * @arg {Object} 每个元素 241 | * @return 条件 242 | * */ 243 | await getInstance().delete({ 244 | tableName: 'bookrackList', 245 | condition: (item)=> item.name === '测试', 246 | }) 247 | 248 | 249 | /** 250 | * @method 删除数据(主键) 251 | * @param {Object} 252 | * @property {String} tableName 表名 253 | * @property {String\|Number} value 目标主键值 254 | * */ 255 | await getInstance().delete_by_primaryKey({ 256 | tableName: 'bookrackList', 257 | value: 4 258 | }) 259 | 260 | /** 261 | * @method 删除表数据 262 | * @param {String}name 数据库名称 263 | */ 264 | await getInstance().delete_table('bookrackList') 265 | 266 | 267 | /** 268 | * @method 删除数据库 269 | * @param {String}name 数据库名称 270 | */ 271 | await getInstance().delete_db('bookrackList') 272 | -------------------------------------------------------------------------------- /dist/TsIndexDb.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | class TsIndexDb { 4 | constructor({ dbName, version, tables }) { 5 | this.dbName = ''; //数据库名称 6 | this.version = 1; //数据库版本 7 | this.tableList = []; //表单列表 8 | this.db = null; 9 | this.queue = []; //事务队列,实例化一次以后下次打开页面时数据库自启动 10 | this.dbName = dbName; 11 | this.version = version; 12 | this.tableList = tables; 13 | } 14 | static getInstance(dbOptions) { 15 | if (TsIndexDb._instance === null && dbOptions) { 16 | TsIndexDb._instance = new TsIndexDb(dbOptions); 17 | } 18 | return TsIndexDb._instance; 19 | } 20 | //=================relate select================================ 21 | /** 22 | * @method 查询某张表的所有数据(返回具体数组) 23 | * @param {Object} 24 | * @property {String} tableName 表名 25 | */ 26 | queryAll({ tableName }) { 27 | let res = []; 28 | return this.commitDb(tableName, (transaction) => transaction.openCursor(), 'readonly', (e, resolve) => { 29 | this.cursor_success(e, { 30 | condition: () => true, 31 | handler: ({ currentValue }) => res.push(currentValue), 32 | success: () => resolve(res) 33 | }); 34 | }); 35 | } 36 | /** 37 | * @method 查询(返回具体数组) 38 | * @param {Object} 39 | * @property {String} tableName 表名 40 | * @property {Function} condition 查询的条件 41 | * */ 42 | query({ tableName, condition }) { 43 | let res = []; 44 | return this.commitDb(tableName, (transaction) => transaction.openCursor(), 'readonly', (e, resolve) => { 45 | this.cursor_success(e, { 46 | condition, 47 | handler: ({ currentValue }) => res.push(currentValue), 48 | success: () => resolve(res) 49 | }); 50 | }); 51 | } 52 | /** 53 | * @method 查询满足key条件的个数(返回满足条件的数字个数) 54 | * @param {Object} 55 | * @property {String} tableName 表名 56 | * @property {Number|String} key 查询的key 57 | * @property {Object} countCondition 查询条件 58 | * */ 59 | /** countCondition传入方式 key 必须为已经简历索引的字段 60 | * key ≥ x {key: 'gt' rangeValue: [x]} 61 | key > x {key: 'gt' rangeValue: [x, true]} 62 | key ≤ y {key: 'lt' rangeValue: [y]} 63 | key < y {key: 'lt' rangeValue: [y, true]} 64 | key ≥ x && ≤ y {key: 'between' rangeValue: [x, y]} 65 | key > x &&< y {key: 'between' rangeValue: [x, y, true, true]} 66 | key > x && ≤ y {key: 'between' rangeValue: [x, y, true, false]} 67 | key ≥ x &&< y {key: 'between' rangeValue: [x, y, false, true]} 68 | key = z {key: 'equal' rangeValue: [z]} 69 | */ 70 | count({ tableName, key, countCondition }) { 71 | const mapCondition = { 72 | equal: IDBKeyRange.only, 73 | gt: IDBKeyRange.lowerBound, 74 | lt: IDBKeyRange.upperBound, 75 | between: IDBKeyRange.bound, 76 | }; 77 | return this.commitDb(tableName, (transaction) => transaction.index(key).count(mapCondition[countCondition.type](...countCondition.rangeValue)), 'readonly', (e, resolve) => { 78 | resolve(e.target.result || null); 79 | }); 80 | } 81 | /** 82 | * @method 查询数据(更具表具体属性)返回具体某一个 83 | * @param {Object} 84 | * @property {String} tableName 表名 85 | * @property {Number|String} key 名 86 | * @property {Number|String} value 值 87 | * 88 | * */ 89 | query_by_keyValue({ tableName, key, value }) { 90 | return this.commitDb(tableName, (transaction) => transaction.index(key).get(value), 'readonly', (e, resolve) => { 91 | resolve(e.target.result || null); 92 | }); 93 | } 94 | /** 95 | * @method 查询数据(主键值) 96 | * @param {Object} 97 | * @property {String} tableName 表名 98 | * @property {Number|String} value 主键值 99 | * 100 | * */ 101 | query_by_primaryKey({ tableName, value }) { 102 | return this.commitDb(tableName, (transaction) => transaction.get(value), 'readonly', (e, resolve) => { 103 | resolve(e.target.result || null); 104 | }); 105 | } 106 | //=================relate update================================ 107 | /** 108 | * @method 修改数据(返回修改的数组) 109 | * @param {Object} 110 | * @property {String} tableName 表名 111 | * @property {Function} condition 查询的条件,遍历,与filter类似 112 | * @arg {Object} 每个元素 113 | * @return 条件 114 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 115 | * */ 116 | update({ tableName, condition, handle }) { 117 | let res = []; 118 | return this.commitDb(tableName, (transaction) => transaction.openCursor(), 'readwrite', (e, resolve) => { 119 | this.cursor_success(e, { 120 | condition, 121 | handler: ({ currentValue, cursor }) => { 122 | const value = handle(currentValue); 123 | res.push(value); 124 | cursor.update(value); 125 | }, 126 | success: () => { 127 | resolve(res); 128 | } 129 | }); 130 | }); 131 | } 132 | /** 133 | * @method 修改某条数据(主键)返回修改的对象 134 | * @param {Object} 135 | * @property {String} tableName 表名 136 | * @property {String\|Number} value 目标主键值 137 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 138 | * */ 139 | update_by_primaryKey({ tableName, value, handle }) { 140 | return this.commitDb(tableName, (transaction) => transaction.get(value), 'readwrite', (e, resolve, store) => { 141 | const currentValue = e.target.result; 142 | if (!currentValue) { 143 | resolve(null); 144 | return; 145 | } 146 | const value = handle(currentValue); 147 | store.put(value); 148 | resolve(value); 149 | }); 150 | } 151 | //=================relate insert================================ 152 | /** 153 | * @method 增加数据 154 | * @param {Object} 155 | * @property {String} tableName 表名 156 | * @property {Object} data 插入的数据 157 | * */ 158 | insert({ tableName, data }) { 159 | return this.commitDb(tableName, undefined, 'readwrite', (_, resolve, store) => { 160 | data instanceof Array ? data.forEach(v => store.put(v)) : store.put(data); 161 | resolve(); 162 | }); 163 | } 164 | //=================relate delete================================ 165 | /** 166 | * @method 删除数据(返回删除数组) 167 | * @param {Object} 168 | * @property {String} tableName 表名 169 | * @property {Function} condition 查询的条件,遍历,与filter类似 170 | * @arg {Object} 每个元素 171 | * @return 条件 172 | * */ 173 | delete({ tableName, condition }) { 174 | let res = []; 175 | return this.commitDb(tableName, (transaction) => transaction.openCursor(), 'readwrite', (e, resolve) => { 176 | this.cursor_success(e, { 177 | condition, 178 | handler: ({ currentValue, cursor }) => { 179 | res.push(currentValue); 180 | cursor.delete(); 181 | }, 182 | success: () => { 183 | resolve(res); 184 | } 185 | }); 186 | }); 187 | } 188 | /** 189 | * @method 删除数据(主键) 190 | * @param {Object} 191 | * @property {String} tableName 表名 192 | * @property {String\|Number} value 目标主键值 193 | * */ 194 | delete_by_primaryKey({ tableName, value }) { 195 | return this.commitDb(tableName, (transaction) => transaction.delete(value), 'readwrite', (e, resolve) => { 196 | resolve(); 197 | }); 198 | } 199 | //=================relate db================================ 200 | /** 201 | * @method 打开数据库 202 | */ 203 | open_db() { 204 | return new Promise((resolve, reject) => { 205 | const request = window.indexedDB.open(this.dbName, this.version); 206 | request.onerror = e => { 207 | reject(e); 208 | }; 209 | request.onsuccess = (event) => { 210 | this.db = event.target.result; 211 | let task; 212 | while (task = this.queue.shift()) { 213 | task(); 214 | } 215 | resolve(this); 216 | }; 217 | //数据库升级 218 | request.onupgradeneeded = e => { 219 | this.tableList.forEach((element) => { 220 | this.create_table(e.target.result, element); 221 | }); 222 | }; 223 | }); 224 | } 225 | /** 226 | *@method 关闭数据库 227 | * @param {[type]} db [数据库名称] 228 | */ 229 | close_db() { 230 | return new Promise((resolve, reject) => { 231 | try { 232 | if (!this.db) { 233 | resolve('请开启数据库'); 234 | return; 235 | } 236 | this.db.close(); 237 | this.db = null; 238 | TsIndexDb._instance = null; 239 | resolve(true); 240 | } 241 | catch (error) { 242 | reject(error); 243 | } 244 | }); 245 | } 246 | /** 247 | * @method 删除数据库 248 | * @param {String}name 数据库名称 249 | */ 250 | delete_db(name) { 251 | return new Promise((resolve, reject) => { 252 | const request = indexedDB.deleteDatabase(name); 253 | request.onerror = e => { 254 | reject(e); 255 | }; 256 | request.onsuccess = e => { 257 | resolve(e); 258 | }; 259 | }); 260 | } 261 | /** 262 | * @method 删除表数据 263 | * @param {String}name 数据库名称 264 | */ 265 | delete_table(tableName) { 266 | return this.commitDb(tableName, (transaction) => transaction.clear(), 'readwrite', (_, resolve) => { 267 | resolve(); 268 | }); 269 | } 270 | /** 271 | * 创建table 272 | * @option keyPath指定主键 autoIncrement是否自增 273 | * @index 索引配置 274 | * */ 275 | create_table(idb, { tableName, option, indexs = [] }) { 276 | if (!idb.objectStoreNames.contains(tableName)) { 277 | let store = idb.createObjectStore(tableName, option); 278 | for (let { key, option } of indexs) { 279 | store.createIndex(key, key, option); 280 | } 281 | } 282 | } 283 | /** 284 | * 提交Db请求 285 | * @param tableName 表名 286 | * @param commit 提交具体函数 287 | * @param mode 事物方式 288 | * @param backF 游标方法 289 | */ 290 | commitDb(tableName, commit, mode = 'readwrite', backF) { 291 | return new Promise((resolve, reject) => { 292 | const task = () => { 293 | try { 294 | if (this.db) { 295 | let store = this.db.transaction(tableName, mode).objectStore(tableName); 296 | if (!commit) { 297 | backF(null, resolve, store); 298 | return; 299 | } 300 | let res = commit(store); 301 | res.onsuccess = (e) => { 302 | if (backF) { 303 | backF(e, resolve, store); 304 | } 305 | else { 306 | resolve(e); 307 | } 308 | }; 309 | res.onerror = (event) => { 310 | reject(event); 311 | }; 312 | } 313 | else { 314 | reject(new Error('请开启数据库')); 315 | } 316 | } 317 | catch (error) { 318 | reject(error); 319 | } 320 | }; 321 | if (!this.db) { 322 | this.queue.push(task); 323 | } 324 | else { 325 | task(); 326 | } 327 | }); 328 | } 329 | /** 330 | * @method 游标开启成功,遍历游标 331 | * @param {Function} 条件 332 | * @param {Function} 满足条件的处理方式 @arg {Object} @property cursor游标 @property currentValue当前值 333 | * @param {Function} 游标遍历完执行的方法 334 | * @return {Null} 335 | * */ 336 | cursor_success(e, { condition, handler, success }) { 337 | const cursor = e.target.result; 338 | if (cursor) { 339 | const currentValue = cursor.value; 340 | if (condition(currentValue)) 341 | handler({ cursor, currentValue }); 342 | cursor.continue(); 343 | } 344 | else { 345 | success(); 346 | } 347 | } 348 | } 349 | exports.TsIndexDb = TsIndexDb; 350 | TsIndexDb._instance = null; 351 | -------------------------------------------------------------------------------- /libs/TsIndexDb.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @Description: file content 3 | * @Author: 小白 4 | * @Date: 2020-04-08 21:25:02 5 | * @LastEditors: 小白 6 | * @LastEditTime: 2020-04-10 14:40:36 7 | */ 8 | export type IIndexDb = { 9 | dbName: string 10 | version: number 11 | tables: DbTable[] 12 | } 13 | export type DbIndex = { key: string, option?: IDBIndexParameters } 14 | export type DbTable = { 15 | tableName: string, 16 | option?: IDBObjectStoreParameters 17 | indexs: DbIndex[] 18 | } 19 | export type AtleastOne }> = Partial&U[keyof U] 20 | interface MapCondition { 21 | equal: (value:any)=>IDBKeyRange, 22 | gt: (lower: any, open?: boolean)=>IDBKeyRange, 23 | lt: (upper: any, open?: boolean)=>IDBKeyRange, 24 | between: (lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean)=>IDBKeyRange, 25 | } 26 | export interface DbOperate { 27 | tableName: string, 28 | key: string, 29 | data: T | T[], 30 | value: string | number, 31 | countCondition: {type: 'equal'|'gt'|'lt'|'between',rangeValue: [any,any?,any?,any?]}, 32 | condition(data: T): boolean 33 | success(res: T[] | T): void 34 | handle(res: T): void 35 | 36 | } 37 | 38 | export class TsIndexDb { 39 | 40 | private dbName: string = '';//数据库名称 41 | private version: number = 1;//数据库版本 42 | private tableList: DbTable[] = [];//表单列表 43 | private db: IDBDatabase | null = null; 44 | private queue: (() => void)[] = []; //事务队列,实例化一次以后下次打开页面时数据库自启动 45 | constructor({ dbName, version, tables }: IIndexDb) { 46 | this.dbName = dbName; 47 | this.version = version; 48 | this.tableList = tables; 49 | } 50 | 51 | private static _instance: TsIndexDb | null = null; 52 | 53 | public static getInstance(dbOptions?: IIndexDb): TsIndexDb { 54 | if (TsIndexDb._instance === null && dbOptions) { 55 | TsIndexDb._instance = new TsIndexDb(dbOptions); 56 | } 57 | return TsIndexDb._instance!; 58 | } 59 | 60 | 61 | 62 | 63 | //=================relate select================================ 64 | /** 65 | * @method 查询某张表的所有数据(返回具体数组) 66 | * @param {Object} 67 | * @property {String} tableName 表名 68 | */ 69 | queryAll({ tableName }: Pick, 'tableName'>) { 70 | let res: T[] = []; 71 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.openCursor(), 'readonly', (e: any, resolve: (data: T[]) => void) => { 72 | this.cursor_success(e, { 73 | condition: () => true, 74 | handler: ({ currentValue }: any) => res.push(currentValue), 75 | success: () => resolve(res) 76 | }) 77 | }) 78 | } 79 | 80 | /** 81 | * @method 查询(返回具体数组) 82 | * @param {Object} 83 | * @property {String} tableName 表名 84 | * @property {Function} condition 查询的条件 85 | * */ 86 | query({ tableName, condition }: Pick, 'condition' | 'tableName'>) { 87 | let res: T[] = []; 88 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.openCursor(), 'readonly', (e: any, resolve: (data: T[]) => void) => { 89 | this.cursor_success(e, { 90 | condition, 91 | handler: ({ currentValue }: any) => res.push(currentValue), 92 | success: () => resolve(res) 93 | }) 94 | }) 95 | } 96 | 97 | /** 98 | * @method 查询满足key条件的个数(返回满足条件的数字个数) 99 | * @param {Object} 100 | * @property {String} tableName 表名 101 | * @property {Number|String} key 查询的key 102 | * @property {Object} countCondition 查询条件 103 | * */ 104 | /** countCondition传入方式 key 必须为已经简历索引的字段 105 | * key ≥ x {key: 'gt' rangeValue: [x]} 106 | key > x {key: 'gt' rangeValue: [x, true]} 107 | key ≤ y {key: 'lt' rangeValue: [y]} 108 | key < y {key: 'lt' rangeValue: [y, true]} 109 | key ≥ x && ≤ y {key: 'between' rangeValue: [x, y]} 110 | key > x &&< y {key: 'between' rangeValue: [x, y, true, true]} 111 | key > x && ≤ y {key: 'between' rangeValue: [x, y, true, false]} 112 | key ≥ x &&< y {key: 'between' rangeValue: [x, y, false, true]} 113 | key = z {key: 'equal' rangeValue: [z]} 114 | */ 115 | count({ tableName, key, countCondition }: Pick, 'key' | 'tableName' | 'countCondition'>) { 116 | const mapCondition: MapCondition = { 117 | equal: IDBKeyRange.only, 118 | gt: IDBKeyRange.lowerBound, 119 | lt: IDBKeyRange.upperBound, 120 | between: IDBKeyRange.bound, 121 | } 122 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.index(key).count(mapCondition[countCondition.type](...countCondition.rangeValue)), 'readonly', (e: any, resolve: (data: T) => void) => { 123 | resolve(e.target.result || null); 124 | }) 125 | } 126 | 127 | /** 128 | * @method 查询数据(更具表具体属性)返回具体某一个 129 | * @param {Object} 130 | * @property {String} tableName 表名 131 | * @property {Number|String} key 名 132 | * @property {Number|String} value 值 133 | * 134 | * */ 135 | query_by_keyValue({ tableName, key, value }: Pick, 'tableName' | 'key' | 'value'>) { 136 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.index(key).get(value), 'readonly', (e: any, resolve: (data: T) => void) => { 137 | resolve(e.target.result || null); 138 | }) 139 | } 140 | 141 | /** 142 | * @method 查询数据(主键值) 143 | * @param {Object} 144 | * @property {String} tableName 表名 145 | * @property {Number|String} value 主键值 146 | * 147 | * */ 148 | query_by_primaryKey({ tableName, value }: Pick, 'tableName' | 'value'>) { 149 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.get(value), 'readonly', (e: any, resolve: (data: T) => void) => { 150 | resolve(e.target.result || null); 151 | }) 152 | } 153 | 154 | //=================relate update================================ 155 | /** 156 | * @method 修改数据(返回修改的数组) 157 | * @param {Object} 158 | * @property {String} tableName 表名 159 | * @property {Function} condition 查询的条件,遍历,与filter类似 160 | * @arg {Object} 每个元素 161 | * @return 条件 162 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 163 | * */ 164 | update({ tableName, condition, handle }: Pick, 'tableName' | 'condition' | 'handle'>) { 165 | let res: T[] = []; 166 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.openCursor(), 'readwrite', (e: any, resolve: (data: T[]) => void) => { 167 | this.cursor_success(e, { 168 | condition, 169 | handler: ({ currentValue, cursor }: any) => { 170 | const value = handle(currentValue); 171 | res.push(value as any); 172 | cursor.update(value); 173 | }, 174 | success: () => { 175 | resolve(res); 176 | } 177 | }) 178 | }) 179 | } 180 | 181 | /** 182 | * @method 修改某条数据(主键)返回修改的对象 183 | * @param {Object} 184 | * @property {String} tableName 表名 185 | * @property {String\|Number} value 目标主键值 186 | * @property {Function} handle 处理函数,接收本条数据的引用,对其修改 187 | * */ 188 | update_by_primaryKey({ tableName, value, handle }: Pick, 'tableName' | 'value' | 'handle'>) { 189 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.get(value), 'readwrite', 190 | (e: any, resolve: (data: T | null) => void, store: IDBObjectStore) => { 191 | const currentValue = e.target.result; 192 | if (!currentValue) { 193 | resolve(null); 194 | return 195 | } 196 | const value = handle(currentValue); 197 | store.put(value); 198 | resolve(value as any); 199 | }); 200 | } 201 | 202 | //=================relate insert================================ 203 | /** 204 | * @method 增加数据 205 | * @param {Object} 206 | * @property {String} tableName 表名 207 | * @property {Object} data 插入的数据 208 | * */ 209 | insert({ tableName, data }: Pick, 'tableName' | 'data'>) { 210 | return this.commitDb(tableName, undefined, 'readwrite', 211 | (_: any, resolve: () => void, store: IDBObjectStore) => { 212 | data instanceof Array ? data.forEach(v => store.put(v)) : store.put(data); 213 | resolve(); 214 | }) 215 | 216 | } 217 | //=================relate delete================================ 218 | /** 219 | * @method 删除数据(返回删除数组) 220 | * @param {Object} 221 | * @property {String} tableName 表名 222 | * @property {Function} condition 查询的条件,遍历,与filter类似 223 | * @arg {Object} 每个元素 224 | * @return 条件 225 | * */ 226 | delete({ tableName, condition }: Pick, 'tableName' | 'condition'>) { 227 | let res: T[] = []; 228 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.openCursor(), 'readwrite', (e: any, resolve: (data: T[]) => void) => { 229 | this.cursor_success(e, { 230 | condition, 231 | handler: ({ currentValue, cursor }: any) => { 232 | res.push(currentValue); 233 | cursor.delete(); 234 | }, 235 | success: () => { 236 | resolve(res); 237 | } 238 | }) 239 | }) 240 | } 241 | 242 | 243 | /** 244 | * @method 删除数据(主键) 245 | * @param {Object} 246 | * @property {String} tableName 表名 247 | * @property {String\|Number} value 目标主键值 248 | * */ 249 | delete_by_primaryKey({ tableName, value }: Pick, 'tableName' | 'value'>) { 250 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.delete(value), 'readwrite', (e: any, resolve: () => void) => { 251 | resolve() 252 | }) 253 | } 254 | 255 | //=================relate db================================ 256 | 257 | /** 258 | * @method 打开数据库 259 | */ 260 | open_db() { 261 | return new Promise((resolve, reject) => { 262 | const request = window.indexedDB.open(this.dbName, this.version); 263 | request.onerror = e => { 264 | reject(e); 265 | }; 266 | request.onsuccess = (event: any) => { 267 | this.db = event.target.result; 268 | let task: () => void; 269 | 270 | while (task = this.queue.shift() as any) { 271 | task(); 272 | } 273 | 274 | resolve(this); 275 | }; 276 | //数据库升级 277 | request.onupgradeneeded = e => { 278 | this.tableList.forEach((element: DbTable) => { 279 | this.create_table((e.target as any).result, element); 280 | }); 281 | }; 282 | }); 283 | } 284 | 285 | /** 286 | *@method 关闭数据库 287 | * @param {[type]} db [数据库名称] 288 | */ 289 | close_db() { 290 | return new Promise((resolve, reject) => { 291 | try { 292 | if (!this.db) { 293 | resolve('请开启数据库') 294 | return 295 | } 296 | this.db!.close(); 297 | this.db = null 298 | TsIndexDb._instance = null; 299 | resolve(true) 300 | } catch (error) { 301 | reject(error) 302 | } 303 | }) 304 | 305 | } 306 | /** 307 | * @method 删除数据库 308 | * @param {String}name 数据库名称 309 | */ 310 | delete_db(name: string) { 311 | return new Promise((resolve, reject) => { 312 | const request = indexedDB.deleteDatabase(name); 313 | request.onerror = e => { 314 | reject(e); 315 | }; 316 | request.onsuccess = e => { 317 | resolve(e); 318 | }; 319 | }); 320 | } 321 | /** 322 | * @method 删除表数据 323 | * @param {String}name 数据库名称 324 | */ 325 | delete_table(tableName: string) { 326 | return this.commitDb(tableName, (transaction: IDBObjectStore) => transaction.clear(), 'readwrite', 327 | (_: any, resolve: () => void) => { 328 | resolve(); 329 | }) 330 | } 331 | /** 332 | * 创建table 333 | * @option keyPath指定主键 autoIncrement是否自增 334 | * @index 索引配置 335 | * */ 336 | private create_table(idb: any, { tableName, option, indexs = [] }: DbTable) { 337 | 338 | if (!idb.objectStoreNames.contains(tableName)) { 339 | let store = idb.createObjectStore(tableName, option); 340 | for (let { key, option } of indexs) { 341 | store.createIndex(key, key, option); 342 | } 343 | } 344 | } 345 | 346 | 347 | /** 348 | * 提交Db请求 349 | * @param tableName 表名 350 | * @param commit 提交具体函数 351 | * @param mode 事物方式 352 | * @param backF 游标方法 353 | */ 354 | private commitDb(tableName: string, 355 | commit?: (transaction: IDBObjectStore) => IDBRequest, 356 | mode: IDBTransactionMode = 'readwrite', 357 | backF?: (request: any, resolve: any, store: IDBObjectStore) => void) { 358 | return new Promise((resolve, reject) => { 359 | const task = () => { 360 | try { 361 | if (this.db) { 362 | let store = this.db.transaction(tableName, mode).objectStore(tableName); 363 | if (!commit) { 364 | backF!(null, resolve, store); 365 | return; 366 | } 367 | let res = commit(store); 368 | res!.onsuccess = (e: any) => { 369 | if (backF) { 370 | backF(e, resolve, store); 371 | } else { 372 | resolve(e); 373 | } 374 | }; 375 | res!.onerror = (event) => { 376 | reject(event); 377 | }; 378 | 379 | } else { 380 | reject(new Error('请开启数据库')); 381 | } 382 | } catch (error) { 383 | reject(error); 384 | } 385 | }; 386 | 387 | if (!this.db) { 388 | this.queue.push(task); 389 | } else { 390 | task(); 391 | } 392 | 393 | }); 394 | } 395 | 396 | /** 397 | * @method 游标开启成功,遍历游标 398 | * @param {Function} 条件 399 | * @param {Function} 满足条件的处理方式 @arg {Object} @property cursor游标 @property currentValue当前值 400 | * @param {Function} 游标遍历完执行的方法 401 | * @return {Null} 402 | * */ 403 | cursor_success(e: any, { condition, handler, success }: any):void { 404 | const cursor: IDBCursorWithValue = e.target.result; 405 | if (cursor) { 406 | const currentValue = cursor.value; 407 | if (condition(currentValue)) handler({ cursor, currentValue }); 408 | cursor.continue(); 409 | } else { 410 | success(); 411 | } 412 | } 413 | } 414 | -------------------------------------------------------------------------------- /yarn-error.log: -------------------------------------------------------------------------------- 1 | Arguments: 2 | /usr/local/bin/node /usr/local/bin/yarn add jsdom -D 3 | 4 | PATH: 5 | /Users/huangb/flutter/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:flutter/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/huangb/flutter/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:flutter/bin:/Users/huangb/Library/Android/sdk/platform-tools:/Users/huangb/Library/Android/sdk/ndk-bundle:/usr/local/mysql/bin:/Users/huangb/Go/bin:/Users/huangb/Mongodb/mongodb-osx-x86_64-4.0.5/bin:/Users/huangb/softdata/softwareTools/apache-maven-3.5.4/bin:/Users/huangb/Library/Android/sdk/platform-tools:/Users/huangb/Library/Android/sdk/platform-tools:/Users/huangb/Library/Android/sdk/ndk-bundle:/usr/local/mysql/bin:/Users/huangb/Go/bin:/Users/huangb/Mongodb/mongodb-osx-x86_64-4.0.5/bin:/Users/huangb/softdata/softwareTools/apache-maven-3.5.4/bin 6 | 7 | Yarn version: 8 | 1.22.0 9 | 10 | Node version: 11 | 10.16.0 12 | 13 | Platform: 14 | darwin x64 15 | 16 | Trace: 17 | Error: https://registry.npmjs.org/jsdom: ESOCKETTIMEDOUT 18 | at ClientRequest. (/usr/local/lib/node_modules/yarn/lib/cli.js:141354:19) 19 | at Object.onceWrapper (events.js:286:20) 20 | at ClientRequest.emit (events.js:198:13) 21 | at TLSSocket.emitRequestTimeout (_http_client.js:662:40) 22 | at Object.onceWrapper (events.js:286:20) 23 | at TLSSocket.emit (events.js:198:13) 24 | at TLSSocket.Socket._onTimeout (net.js:442:8) 25 | at ontimeout (timers.js:436:11) 26 | at tryOnTimeout (timers.js:300:5) 27 | at listOnTimeout (timers.js:263:5) 28 | 29 | npm manifest: 30 | { 31 | "name": "ts_index_db", 32 | "version": "0.0.1", 33 | "description": "typescript indexDb封装", 34 | "main": "index.ts", 35 | "scripts": { 36 | "build": "tsc", 37 | "test": "mocha --reporter spec" 38 | }, 39 | "keywords": [ 40 | "indexdb", 41 | "typescript" 42 | ], 43 | "author": "小白", 44 | "license": "ISC", 45 | "devDependencies": { 46 | "chai": "^4.2.0", 47 | "mocha": "^7.1.1", 48 | "typescript": "^3.8.3" 49 | } 50 | } 51 | 52 | yarn manifest: 53 | No manifest 54 | 55 | Lockfile: 56 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 57 | # yarn lockfile v1 58 | 59 | 60 | ansi-colors@3.2.3: 61 | version "3.2.3" 62 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 63 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 64 | 65 | ansi-regex@^3.0.0: 66 | version "3.0.0" 67 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 68 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 69 | 70 | ansi-regex@^4.1.0: 71 | version "4.1.0" 72 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 73 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 74 | 75 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 76 | version "3.2.1" 77 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 78 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 79 | dependencies: 80 | color-convert "^1.9.0" 81 | 82 | anymatch@~3.1.1: 83 | version "3.1.1" 84 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 85 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 86 | dependencies: 87 | normalize-path "^3.0.0" 88 | picomatch "^2.0.4" 89 | 90 | argparse@^1.0.7: 91 | version "1.0.10" 92 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 93 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 94 | dependencies: 95 | sprintf-js "~1.0.2" 96 | 97 | assertion-error@^1.1.0: 98 | version "1.1.0" 99 | resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 100 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 101 | 102 | balanced-match@^1.0.0: 103 | version "1.0.0" 104 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 105 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 106 | 107 | binary-extensions@^2.0.0: 108 | version "2.0.0" 109 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" 110 | integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== 111 | 112 | brace-expansion@^1.1.7: 113 | version "1.1.11" 114 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 115 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 116 | dependencies: 117 | balanced-match "^1.0.0" 118 | concat-map "0.0.1" 119 | 120 | braces@~3.0.2: 121 | version "3.0.2" 122 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 123 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 124 | dependencies: 125 | fill-range "^7.0.1" 126 | 127 | browser-stdout@1.3.1: 128 | version "1.3.1" 129 | resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 130 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 131 | 132 | camelcase@^5.0.0: 133 | version "5.3.1" 134 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 135 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 136 | 137 | chai@^4.2.0: 138 | version "4.2.0" 139 | resolved "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 140 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 141 | dependencies: 142 | assertion-error "^1.1.0" 143 | check-error "^1.0.2" 144 | deep-eql "^3.0.1" 145 | get-func-name "^2.0.0" 146 | pathval "^1.1.0" 147 | type-detect "^4.0.5" 148 | 149 | chalk@^2.4.2: 150 | version "2.4.2" 151 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 152 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 153 | dependencies: 154 | ansi-styles "^3.2.1" 155 | escape-string-regexp "^1.0.5" 156 | supports-color "^5.3.0" 157 | 158 | check-error@^1.0.2: 159 | version "1.0.2" 160 | resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 161 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 162 | 163 | chokidar@3.3.0: 164 | version "3.3.0" 165 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" 166 | integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== 167 | dependencies: 168 | anymatch "~3.1.1" 169 | braces "~3.0.2" 170 | glob-parent "~5.1.0" 171 | is-binary-path "~2.1.0" 172 | is-glob "~4.0.1" 173 | normalize-path "~3.0.0" 174 | readdirp "~3.2.0" 175 | optionalDependencies: 176 | fsevents "~2.1.1" 177 | 178 | cliui@^5.0.0: 179 | version "5.0.0" 180 | resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 181 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 182 | dependencies: 183 | string-width "^3.1.0" 184 | strip-ansi "^5.2.0" 185 | wrap-ansi "^5.1.0" 186 | 187 | color-convert@^1.9.0: 188 | version "1.9.3" 189 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 190 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 191 | dependencies: 192 | color-name "1.1.3" 193 | 194 | color-name@1.1.3: 195 | version "1.1.3" 196 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 197 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 198 | 199 | concat-map@0.0.1: 200 | version "0.0.1" 201 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 202 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 203 | 204 | debug@3.2.6: 205 | version "3.2.6" 206 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 207 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 208 | dependencies: 209 | ms "^2.1.1" 210 | 211 | decamelize@^1.2.0: 212 | version "1.2.0" 213 | resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 214 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 215 | 216 | deep-eql@^3.0.1: 217 | version "3.0.1" 218 | resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 219 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 220 | dependencies: 221 | type-detect "^4.0.0" 222 | 223 | define-properties@^1.1.2, define-properties@^1.1.3: 224 | version "1.1.3" 225 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 226 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 227 | dependencies: 228 | object-keys "^1.0.12" 229 | 230 | diff@3.5.0: 231 | version "3.5.0" 232 | resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 233 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 234 | 235 | emoji-regex@^7.0.1: 236 | version "7.0.3" 237 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 238 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 239 | 240 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 241 | version "1.17.5" 242 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" 243 | integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== 244 | dependencies: 245 | es-to-primitive "^1.2.1" 246 | function-bind "^1.1.1" 247 | has "^1.0.3" 248 | has-symbols "^1.0.1" 249 | is-callable "^1.1.5" 250 | is-regex "^1.0.5" 251 | object-inspect "^1.7.0" 252 | object-keys "^1.1.1" 253 | object.assign "^4.1.0" 254 | string.prototype.trimleft "^2.1.1" 255 | string.prototype.trimright "^2.1.1" 256 | 257 | es-to-primitive@^1.2.1: 258 | version "1.2.1" 259 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 260 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 261 | dependencies: 262 | is-callable "^1.1.4" 263 | is-date-object "^1.0.1" 264 | is-symbol "^1.0.2" 265 | 266 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 267 | version "1.0.5" 268 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 269 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 270 | 271 | esprima@^4.0.0: 272 | version "4.0.1" 273 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 274 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 275 | 276 | fill-range@^7.0.1: 277 | version "7.0.1" 278 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 279 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 280 | dependencies: 281 | to-regex-range "^5.0.1" 282 | 283 | find-up@3.0.0, find-up@^3.0.0: 284 | version "3.0.0" 285 | resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 286 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 287 | dependencies: 288 | locate-path "^3.0.0" 289 | 290 | flat@^4.1.0: 291 | version "4.1.0" 292 | resolved "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 293 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 294 | dependencies: 295 | is-buffer "~2.0.3" 296 | 297 | fs.realpath@^1.0.0: 298 | version "1.0.0" 299 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 300 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 301 | 302 | fsevents@~2.1.1: 303 | version "2.1.2" 304 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" 305 | integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== 306 | 307 | function-bind@^1.1.1: 308 | version "1.1.1" 309 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 310 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 311 | 312 | get-caller-file@^2.0.1: 313 | version "2.0.5" 314 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 315 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 316 | 317 | get-func-name@^2.0.0: 318 | version "2.0.0" 319 | resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 320 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 321 | 322 | glob-parent@~5.1.0: 323 | version "5.1.1" 324 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 325 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 326 | dependencies: 327 | is-glob "^4.0.1" 328 | 329 | glob@7.1.3: 330 | version "7.1.3" 331 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 332 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 333 | dependencies: 334 | fs.realpath "^1.0.0" 335 | inflight "^1.0.4" 336 | inherits "2" 337 | minimatch "^3.0.4" 338 | once "^1.3.0" 339 | path-is-absolute "^1.0.0" 340 | 341 | growl@1.10.5: 342 | version "1.10.5" 343 | resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 344 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 345 | 346 | has-flag@^3.0.0: 347 | version "3.0.0" 348 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 349 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 350 | 351 | has-symbols@^1.0.0, has-symbols@^1.0.1: 352 | version "1.0.1" 353 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 354 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 355 | 356 | has@^1.0.3: 357 | version "1.0.3" 358 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 359 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 360 | dependencies: 361 | function-bind "^1.1.1" 362 | 363 | he@1.2.0: 364 | version "1.2.0" 365 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 366 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 367 | 368 | inflight@^1.0.4: 369 | version "1.0.6" 370 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 371 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 372 | dependencies: 373 | once "^1.3.0" 374 | wrappy "1" 375 | 376 | inherits@2: 377 | version "2.0.4" 378 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 379 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 380 | 381 | is-binary-path@~2.1.0: 382 | version "2.1.0" 383 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 384 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 385 | dependencies: 386 | binary-extensions "^2.0.0" 387 | 388 | is-buffer@~2.0.3: 389 | version "2.0.4" 390 | resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 391 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 392 | 393 | is-callable@^1.1.4, is-callable@^1.1.5: 394 | version "1.1.5" 395 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 396 | integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== 397 | 398 | is-date-object@^1.0.1: 399 | version "1.0.2" 400 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 401 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 402 | 403 | is-extglob@^2.1.1: 404 | version "2.1.1" 405 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 406 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 407 | 408 | is-fullwidth-code-point@^2.0.0: 409 | version "2.0.0" 410 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 411 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 412 | 413 | is-glob@^4.0.1, is-glob@~4.0.1: 414 | version "4.0.1" 415 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 416 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 417 | dependencies: 418 | is-extglob "^2.1.1" 419 | 420 | is-number@^7.0.0: 421 | version "7.0.0" 422 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 423 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 424 | 425 | is-regex@^1.0.5: 426 | version "1.0.5" 427 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 428 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 429 | dependencies: 430 | has "^1.0.3" 431 | 432 | is-symbol@^1.0.2: 433 | version "1.0.3" 434 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 435 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 436 | dependencies: 437 | has-symbols "^1.0.1" 438 | 439 | isexe@^2.0.0: 440 | version "2.0.0" 441 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 442 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 443 | 444 | js-yaml@3.13.1: 445 | version "3.13.1" 446 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 447 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 448 | dependencies: 449 | argparse "^1.0.7" 450 | esprima "^4.0.0" 451 | 452 | locate-path@^3.0.0: 453 | version "3.0.0" 454 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 455 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 456 | dependencies: 457 | p-locate "^3.0.0" 458 | path-exists "^3.0.0" 459 | 460 | lodash@^4.17.15: 461 | version "4.17.15" 462 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 463 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 464 | 465 | log-symbols@3.0.0: 466 | version "3.0.0" 467 | resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" 468 | integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== 469 | dependencies: 470 | chalk "^2.4.2" 471 | 472 | minimatch@3.0.4, minimatch@^3.0.4: 473 | version "3.0.4" 474 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 475 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 476 | dependencies: 477 | brace-expansion "^1.1.7" 478 | 479 | minimist@^1.2.5: 480 | version "1.2.5" 481 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 482 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 483 | 484 | mkdirp@0.5.3: 485 | version "0.5.3" 486 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" 487 | integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== 488 | dependencies: 489 | minimist "^1.2.5" 490 | 491 | mocha@^7.1.1: 492 | version "7.1.1" 493 | resolved "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz#89fbb30d09429845b1bb893a830bf5771049a441" 494 | integrity sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA== 495 | dependencies: 496 | ansi-colors "3.2.3" 497 | browser-stdout "1.3.1" 498 | chokidar "3.3.0" 499 | debug "3.2.6" 500 | diff "3.5.0" 501 | escape-string-regexp "1.0.5" 502 | find-up "3.0.0" 503 | glob "7.1.3" 504 | growl "1.10.5" 505 | he "1.2.0" 506 | js-yaml "3.13.1" 507 | log-symbols "3.0.0" 508 | minimatch "3.0.4" 509 | mkdirp "0.5.3" 510 | ms "2.1.1" 511 | node-environment-flags "1.0.6" 512 | object.assign "4.1.0" 513 | strip-json-comments "2.0.1" 514 | supports-color "6.0.0" 515 | which "1.3.1" 516 | wide-align "1.1.3" 517 | yargs "13.3.2" 518 | yargs-parser "13.1.2" 519 | yargs-unparser "1.6.0" 520 | 521 | ms@2.1.1: 522 | version "2.1.1" 523 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 524 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 525 | 526 | ms@^2.1.1: 527 | version "2.1.2" 528 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 529 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 530 | 531 | node-environment-flags@1.0.6: 532 | version "1.0.6" 533 | resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" 534 | integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== 535 | dependencies: 536 | object.getownpropertydescriptors "^2.0.3" 537 | semver "^5.7.0" 538 | 539 | normalize-path@^3.0.0, normalize-path@~3.0.0: 540 | version "3.0.0" 541 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 542 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 543 | 544 | object-inspect@^1.7.0: 545 | version "1.7.0" 546 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 547 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 548 | 549 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 550 | version "1.1.1" 551 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 552 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 553 | 554 | object.assign@4.1.0, object.assign@^4.1.0: 555 | version "4.1.0" 556 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 557 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 558 | dependencies: 559 | define-properties "^1.1.2" 560 | function-bind "^1.1.1" 561 | has-symbols "^1.0.0" 562 | object-keys "^1.0.11" 563 | 564 | object.getownpropertydescriptors@^2.0.3: 565 | version "2.1.0" 566 | resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 567 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 568 | dependencies: 569 | define-properties "^1.1.3" 570 | es-abstract "^1.17.0-next.1" 571 | 572 | once@^1.3.0: 573 | version "1.4.0" 574 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 575 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 576 | dependencies: 577 | wrappy "1" 578 | 579 | p-limit@^2.0.0: 580 | version "2.3.0" 581 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 582 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 583 | dependencies: 584 | p-try "^2.0.0" 585 | 586 | p-locate@^3.0.0: 587 | version "3.0.0" 588 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 589 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 590 | dependencies: 591 | p-limit "^2.0.0" 592 | 593 | p-try@^2.0.0: 594 | version "2.2.0" 595 | resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 596 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 597 | 598 | path-exists@^3.0.0: 599 | version "3.0.0" 600 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 601 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 602 | 603 | path-is-absolute@^1.0.0: 604 | version "1.0.1" 605 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 606 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 607 | 608 | pathval@^1.1.0: 609 | version "1.1.0" 610 | resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 611 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= 612 | 613 | picomatch@^2.0.4: 614 | version "2.2.2" 615 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 616 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 617 | 618 | readdirp@~3.2.0: 619 | version "3.2.0" 620 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" 621 | integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== 622 | dependencies: 623 | picomatch "^2.0.4" 624 | 625 | require-directory@^2.1.1: 626 | version "2.1.1" 627 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 628 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 629 | 630 | require-main-filename@^2.0.0: 631 | version "2.0.0" 632 | resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 633 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 634 | 635 | semver@^5.7.0: 636 | version "5.7.1" 637 | resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 638 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 639 | 640 | set-blocking@^2.0.0: 641 | version "2.0.0" 642 | resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 643 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 644 | 645 | sprintf-js@~1.0.2: 646 | version "1.0.3" 647 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 648 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 649 | 650 | "string-width@^1.0.2 || 2": 651 | version "2.1.1" 652 | resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 653 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 654 | dependencies: 655 | is-fullwidth-code-point "^2.0.0" 656 | strip-ansi "^4.0.0" 657 | 658 | string-width@^3.0.0, string-width@^3.1.0: 659 | version "3.1.0" 660 | resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 661 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 662 | dependencies: 663 | emoji-regex "^7.0.1" 664 | is-fullwidth-code-point "^2.0.0" 665 | strip-ansi "^5.1.0" 666 | 667 | string.prototype.trimend@^1.0.0: 668 | version "1.0.0" 669 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" 670 | integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA== 671 | dependencies: 672 | define-properties "^1.1.3" 673 | es-abstract "^1.17.5" 674 | 675 | string.prototype.trimleft@^2.1.1: 676 | version "2.1.2" 677 | resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" 678 | integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== 679 | dependencies: 680 | define-properties "^1.1.3" 681 | es-abstract "^1.17.5" 682 | string.prototype.trimstart "^1.0.0" 683 | 684 | string.prototype.trimright@^2.1.1: 685 | version "2.1.2" 686 | resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" 687 | integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== 688 | dependencies: 689 | define-properties "^1.1.3" 690 | es-abstract "^1.17.5" 691 | string.prototype.trimend "^1.0.0" 692 | 693 | string.prototype.trimstart@^1.0.0: 694 | version "1.0.0" 695 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" 696 | integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w== 697 | dependencies: 698 | define-properties "^1.1.3" 699 | es-abstract "^1.17.5" 700 | 701 | strip-ansi@^4.0.0: 702 | version "4.0.0" 703 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 704 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 705 | dependencies: 706 | ansi-regex "^3.0.0" 707 | 708 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 709 | version "5.2.0" 710 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 711 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 712 | dependencies: 713 | ansi-regex "^4.1.0" 714 | 715 | strip-json-comments@2.0.1: 716 | version "2.0.1" 717 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 718 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 719 | 720 | supports-color@6.0.0: 721 | version "6.0.0" 722 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 723 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 724 | dependencies: 725 | has-flag "^3.0.0" 726 | 727 | supports-color@^5.3.0: 728 | version "5.5.0" 729 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 730 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 731 | dependencies: 732 | has-flag "^3.0.0" 733 | 734 | to-regex-range@^5.0.1: 735 | version "5.0.1" 736 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 737 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 738 | dependencies: 739 | is-number "^7.0.0" 740 | 741 | type-detect@^4.0.0, type-detect@^4.0.5: 742 | version "4.0.8" 743 | resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 744 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 745 | 746 | typescript@^3.8.3: 747 | version "3.8.3" 748 | resolved "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" 749 | integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== 750 | 751 | which-module@^2.0.0: 752 | version "2.0.0" 753 | resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 754 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 755 | 756 | which@1.3.1: 757 | version "1.3.1" 758 | resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 759 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 760 | dependencies: 761 | isexe "^2.0.0" 762 | 763 | wide-align@1.1.3: 764 | version "1.1.3" 765 | resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 766 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 767 | dependencies: 768 | string-width "^1.0.2 || 2" 769 | 770 | wrap-ansi@^5.1.0: 771 | version "5.1.0" 772 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 773 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 774 | dependencies: 775 | ansi-styles "^3.2.0" 776 | string-width "^3.0.0" 777 | strip-ansi "^5.0.0" 778 | 779 | wrappy@1: 780 | version "1.0.2" 781 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 782 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 783 | 784 | y18n@^4.0.0: 785 | version "4.0.0" 786 | resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 787 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 788 | 789 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 790 | version "13.1.2" 791 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 792 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 793 | dependencies: 794 | camelcase "^5.0.0" 795 | decamelize "^1.2.0" 796 | 797 | yargs-unparser@1.6.0: 798 | version "1.6.0" 799 | resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 800 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 801 | dependencies: 802 | flat "^4.1.0" 803 | lodash "^4.17.15" 804 | yargs "^13.3.0" 805 | 806 | yargs@13.3.2, yargs@^13.3.0: 807 | version "13.3.2" 808 | resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 809 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 810 | dependencies: 811 | cliui "^5.0.0" 812 | find-up "^3.0.0" 813 | get-caller-file "^2.0.1" 814 | require-directory "^2.1.1" 815 | require-main-filename "^2.0.0" 816 | set-blocking "^2.0.0" 817 | string-width "^3.0.0" 818 | which-module "^2.0.0" 819 | y18n "^4.0.0" 820 | yargs-parser "^13.1.2" 821 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@socket.io/base64-arraybuffer@~1.0.2": 6 | version "1.0.2" 7 | resolved "https://registry.yarnpkg.com/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#568d9beae00b0d835f4f8c53fd55714986492e61" 8 | integrity sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ== 9 | 10 | "@types/component-emitter@^1.2.10": 11 | version "1.2.11" 12 | resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" 13 | integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== 14 | 15 | "@types/cookie@^0.4.1": 16 | version "0.4.1" 17 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" 18 | integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== 19 | 20 | "@types/cors@^2.8.12": 21 | version "2.8.12" 22 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" 23 | integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== 24 | 25 | "@types/node@>=10.0.0": 26 | version "17.0.21" 27 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" 28 | integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== 29 | 30 | accepts@~1.3.4: 31 | version "1.3.7" 32 | resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 33 | integrity sha1-UxvHJlF6OytB+FACHGzBXqq1B80= 34 | dependencies: 35 | mime-types "~2.1.24" 36 | negotiator "0.6.2" 37 | 38 | ansi-colors@3.2.3: 39 | version "3.2.3" 40 | resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 41 | integrity sha1-V9NbhoboUeLMBMQD8cACA5dqGBM= 42 | 43 | ansi-regex@^3.0.0: 44 | version "3.0.0" 45 | resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 46 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 47 | 48 | ansi-regex@^4.1.0: 49 | version "4.1.0" 50 | resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 51 | integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= 52 | 53 | ansi-regex@^5.0.1: 54 | version "5.0.1" 55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 56 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 57 | 58 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 59 | version "3.2.1" 60 | resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 61 | integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= 62 | dependencies: 63 | color-convert "^1.9.0" 64 | 65 | ansi-styles@^4.0.0: 66 | version "4.3.0" 67 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 68 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 69 | dependencies: 70 | color-convert "^2.0.1" 71 | 72 | anymatch@~3.1.1: 73 | version "3.1.1" 74 | resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 75 | integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI= 76 | dependencies: 77 | normalize-path "^3.0.0" 78 | picomatch "^2.0.4" 79 | 80 | anymatch@~3.1.2: 81 | version "3.1.2" 82 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 83 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 84 | dependencies: 85 | normalize-path "^3.0.0" 86 | picomatch "^2.0.4" 87 | 88 | argparse@^1.0.7: 89 | version "1.0.10" 90 | resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1571657259891&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 91 | integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= 92 | dependencies: 93 | sprintf-js "~1.0.2" 94 | 95 | assertion-error@^1.1.0: 96 | version "1.1.0" 97 | resolved "https://registry.npm.taobao.org/assertion-error/download/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 98 | integrity sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs= 99 | 100 | balanced-match@^1.0.0: 101 | version "1.0.0" 102 | resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 103 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 104 | 105 | base64id@2.0.0, base64id@~2.0.0: 106 | version "2.0.0" 107 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" 108 | integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== 109 | 110 | binary-extensions@^2.0.0: 111 | version "2.0.0" 112 | resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" 113 | integrity sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w= 114 | 115 | body-parser@^1.19.0: 116 | version "1.19.2" 117 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" 118 | integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== 119 | dependencies: 120 | bytes "3.1.2" 121 | content-type "~1.0.4" 122 | debug "2.6.9" 123 | depd "~1.1.2" 124 | http-errors "1.8.1" 125 | iconv-lite "0.4.24" 126 | on-finished "~2.3.0" 127 | qs "6.9.7" 128 | raw-body "2.4.3" 129 | type-is "~1.6.18" 130 | 131 | brace-expansion@^1.1.7: 132 | version "1.1.11" 133 | resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 134 | integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= 135 | dependencies: 136 | balanced-match "^1.0.0" 137 | concat-map "0.0.1" 138 | 139 | braces@^3.0.2, braces@~3.0.2: 140 | version "3.0.2" 141 | resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 142 | integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= 143 | dependencies: 144 | fill-range "^7.0.1" 145 | 146 | browser-stdout@1.3.1: 147 | version "1.3.1" 148 | resolved "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 149 | integrity sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA= 150 | 151 | bytes@3.1.2: 152 | version "3.1.2" 153 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 154 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 155 | 156 | camelcase@^5.0.0: 157 | version "5.3.1" 158 | resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 159 | integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= 160 | 161 | chai@^4.2.0: 162 | version "4.2.0" 163 | resolved "https://registry.npm.taobao.org/chai/download/chai-4.2.0.tgz?cache=0&sync_timestamp=1571657557374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchai%2Fdownload%2Fchai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 164 | integrity sha1-dgqnLPION5XoSxKHfODoNzeqKeU= 165 | dependencies: 166 | assertion-error "^1.1.0" 167 | check-error "^1.0.2" 168 | deep-eql "^3.0.1" 169 | get-func-name "^2.0.0" 170 | pathval "^1.1.0" 171 | type-detect "^4.0.5" 172 | 173 | chalk@^2.4.2: 174 | version "2.4.2" 175 | resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 176 | integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= 177 | dependencies: 178 | ansi-styles "^3.2.1" 179 | escape-string-regexp "^1.0.5" 180 | supports-color "^5.3.0" 181 | 182 | check-error@^1.0.2: 183 | version "1.0.2" 184 | resolved "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 185 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 186 | 187 | chokidar@3.3.0: 188 | version "3.3.0" 189 | resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.3.0.tgz?cache=0&sync_timestamp=1584609518131&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" 190 | integrity sha1-EsBxRmjFWAD2WeJi1JYql/r1VKY= 191 | dependencies: 192 | anymatch "~3.1.1" 193 | braces "~3.0.2" 194 | glob-parent "~5.1.0" 195 | is-binary-path "~2.1.0" 196 | is-glob "~4.0.1" 197 | normalize-path "~3.0.0" 198 | readdirp "~3.2.0" 199 | optionalDependencies: 200 | fsevents "~2.1.1" 201 | 202 | chokidar@^3.5.1: 203 | version "3.5.3" 204 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 205 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 206 | dependencies: 207 | anymatch "~3.1.2" 208 | braces "~3.0.2" 209 | glob-parent "~5.1.2" 210 | is-binary-path "~2.1.0" 211 | is-glob "~4.0.1" 212 | normalize-path "~3.0.0" 213 | readdirp "~3.6.0" 214 | optionalDependencies: 215 | fsevents "~2.3.2" 216 | 217 | cliui@^5.0.0: 218 | version "5.0.0" 219 | resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1573943292170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 220 | integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= 221 | dependencies: 222 | string-width "^3.1.0" 223 | strip-ansi "^5.2.0" 224 | wrap-ansi "^5.1.0" 225 | 226 | cliui@^7.0.2: 227 | version "7.0.4" 228 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 229 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 230 | dependencies: 231 | string-width "^4.2.0" 232 | strip-ansi "^6.0.0" 233 | wrap-ansi "^7.0.0" 234 | 235 | color-convert@^1.9.0: 236 | version "1.9.3" 237 | resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 238 | integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= 239 | dependencies: 240 | color-name "1.1.3" 241 | 242 | color-convert@^2.0.1: 243 | version "2.0.1" 244 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 245 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 246 | dependencies: 247 | color-name "~1.1.4" 248 | 249 | color-name@1.1.3: 250 | version "1.1.3" 251 | resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 252 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 253 | 254 | color-name@~1.1.4: 255 | version "1.1.4" 256 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 257 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 258 | 259 | colors@1.4.0: 260 | version "1.4.0" 261 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 262 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 263 | 264 | component-emitter@~1.3.0: 265 | version "1.3.0" 266 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 267 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 268 | 269 | concat-map@0.0.1: 270 | version "0.0.1" 271 | resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 272 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 273 | 274 | connect@^3.7.0: 275 | version "3.7.0" 276 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" 277 | integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== 278 | dependencies: 279 | debug "2.6.9" 280 | finalhandler "1.1.2" 281 | parseurl "~1.3.3" 282 | utils-merge "1.0.1" 283 | 284 | content-type@~1.0.4: 285 | version "1.0.4" 286 | resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 287 | integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= 288 | 289 | cookie@~0.4.1: 290 | version "0.4.2" 291 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" 292 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== 293 | 294 | cors@~2.8.5: 295 | version "2.8.5" 296 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 297 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 298 | dependencies: 299 | object-assign "^4" 300 | vary "^1" 301 | 302 | custom-event@~1.0.0: 303 | version "1.0.1" 304 | resolved "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" 305 | integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= 306 | 307 | date-format@^4.0.3: 308 | version "4.0.3" 309 | resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.3.tgz#f63de5dc08dc02efd8ef32bf2a6918e486f35873" 310 | integrity sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ== 311 | 312 | debug@2.6.9: 313 | version "2.6.9" 314 | resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 315 | integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= 316 | dependencies: 317 | ms "2.0.0" 318 | 319 | debug@3.2.6: 320 | version "3.2.6" 321 | resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 322 | integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= 323 | dependencies: 324 | ms "^2.1.1" 325 | 326 | debug@^4.1.1: 327 | version "4.1.1" 328 | resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 329 | integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E= 330 | dependencies: 331 | ms "^2.1.1" 332 | 333 | debug@^4.3.3, debug@~4.3.1, debug@~4.3.2: 334 | version "4.3.3" 335 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 336 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 337 | dependencies: 338 | ms "2.1.2" 339 | 340 | decamelize@^1.2.0: 341 | version "1.2.0" 342 | resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 343 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 344 | 345 | deep-eql@^3.0.1: 346 | version "3.0.1" 347 | resolved "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 348 | integrity sha1-38lARACtHI/gI+faHfHBR8S0RN8= 349 | dependencies: 350 | type-detect "^4.0.0" 351 | 352 | define-properties@^1.1.2, define-properties@^1.1.3: 353 | version "1.1.3" 354 | resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 355 | integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= 356 | dependencies: 357 | object-keys "^1.0.12" 358 | 359 | depd@~1.1.2: 360 | version "1.1.2" 361 | resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 362 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 363 | 364 | di@^0.0.1: 365 | version "0.0.1" 366 | resolved "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" 367 | integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= 368 | 369 | diff@3.5.0: 370 | version "3.5.0" 371 | resolved "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&sync_timestamp=1578890967183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 372 | integrity sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI= 373 | 374 | dom-serialize@^2.2.1: 375 | version "2.2.1" 376 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" 377 | integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= 378 | dependencies: 379 | custom-event "~1.0.0" 380 | ent "~2.2.0" 381 | extend "^3.0.0" 382 | void-elements "^2.0.0" 383 | 384 | ee-first@1.1.1: 385 | version "1.1.1" 386 | resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 387 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 388 | 389 | emoji-regex@^7.0.1: 390 | version "7.0.3" 391 | resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 392 | integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= 393 | 394 | emoji-regex@^8.0.0: 395 | version "8.0.0" 396 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 397 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 398 | 399 | encodeurl@~1.0.2: 400 | version "1.0.2" 401 | resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 402 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 403 | 404 | engine.io-parser@~5.0.3: 405 | version "5.0.3" 406 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.3.tgz#ca1f0d7b11e290b4bfda251803baea765ed89c09" 407 | integrity sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg== 408 | dependencies: 409 | "@socket.io/base64-arraybuffer" "~1.0.2" 410 | 411 | engine.io@~6.1.0: 412 | version "6.1.3" 413 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.1.3.tgz#f156293d011d99a3df5691ac29d63737c3302e6f" 414 | integrity sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA== 415 | dependencies: 416 | "@types/cookie" "^0.4.1" 417 | "@types/cors" "^2.8.12" 418 | "@types/node" ">=10.0.0" 419 | accepts "~1.3.4" 420 | base64id "2.0.0" 421 | cookie "~0.4.1" 422 | cors "~2.8.5" 423 | debug "~4.3.1" 424 | engine.io-parser "~5.0.3" 425 | ws "~8.2.3" 426 | 427 | ent@~2.2.0: 428 | version "2.2.0" 429 | resolved "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" 430 | integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= 431 | 432 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 433 | version "1.17.5" 434 | resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" 435 | integrity sha1-2MnR1myJgfuSAOIlHXme7pJ3Suk= 436 | dependencies: 437 | es-to-primitive "^1.2.1" 438 | function-bind "^1.1.1" 439 | has "^1.0.3" 440 | has-symbols "^1.0.1" 441 | is-callable "^1.1.5" 442 | is-regex "^1.0.5" 443 | object-inspect "^1.7.0" 444 | object-keys "^1.1.1" 445 | object.assign "^4.1.0" 446 | string.prototype.trimleft "^2.1.1" 447 | string.prototype.trimright "^2.1.1" 448 | 449 | es-to-primitive@^1.2.1: 450 | version "1.2.1" 451 | resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 452 | integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= 453 | dependencies: 454 | is-callable "^1.1.4" 455 | is-date-object "^1.0.1" 456 | is-symbol "^1.0.2" 457 | 458 | escalade@^3.1.1: 459 | version "3.1.1" 460 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 461 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 462 | 463 | escape-html@~1.0.3: 464 | version "1.0.3" 465 | resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 466 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 467 | 468 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 469 | version "1.0.5" 470 | resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1586278520081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 471 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 472 | 473 | esprima@^4.0.0: 474 | version "4.0.1" 475 | resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 476 | integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= 477 | 478 | eventemitter3@^4.0.0: 479 | version "4.0.7" 480 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 481 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 482 | 483 | extend@^3.0.0: 484 | version "3.0.2" 485 | resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 486 | integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= 487 | 488 | fill-range@^7.0.1: 489 | version "7.0.1" 490 | resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 491 | integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= 492 | dependencies: 493 | to-regex-range "^5.0.1" 494 | 495 | finalhandler@1.1.2: 496 | version "1.1.2" 497 | resolved "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 498 | integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0= 499 | dependencies: 500 | debug "2.6.9" 501 | encodeurl "~1.0.2" 502 | escape-html "~1.0.3" 503 | on-finished "~2.3.0" 504 | parseurl "~1.3.3" 505 | statuses "~1.5.0" 506 | unpipe "~1.0.0" 507 | 508 | find-up@3.0.0, find-up@^3.0.0: 509 | version "3.0.0" 510 | resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 511 | integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= 512 | dependencies: 513 | locate-path "^3.0.0" 514 | 515 | flat@^4.1.0: 516 | version "4.1.0" 517 | resolved "https://registry.npm.taobao.org/flat/download/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 518 | integrity sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI= 519 | dependencies: 520 | is-buffer "~2.0.3" 521 | 522 | flatted@^3.2.4: 523 | version "3.2.5" 524 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 525 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 526 | 527 | follow-redirects@^1.0.0: 528 | version "1.13.0" 529 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" 530 | integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== 531 | 532 | fs-extra@^10.0.0: 533 | version "10.0.1" 534 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" 535 | integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== 536 | dependencies: 537 | graceful-fs "^4.2.0" 538 | jsonfile "^6.0.1" 539 | universalify "^2.0.0" 540 | 541 | fs.realpath@^1.0.0: 542 | version "1.0.0" 543 | resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 544 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 545 | 546 | fsevents@~2.1.1: 547 | version "2.1.2" 548 | resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.2.tgz?cache=0&sync_timestamp=1584609355366&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" 549 | integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU= 550 | 551 | fsevents@~2.3.2: 552 | version "2.3.2" 553 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 554 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 555 | 556 | function-bind@^1.1.1: 557 | version "1.1.1" 558 | resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 559 | integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= 560 | 561 | get-caller-file@^2.0.1, get-caller-file@^2.0.5: 562 | version "2.0.5" 563 | resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 564 | integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= 565 | 566 | get-func-name@^2.0.0: 567 | version "2.0.0" 568 | resolved "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 569 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 570 | 571 | glob-parent@~5.1.0, glob-parent@~5.1.2: 572 | version "5.1.2" 573 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 574 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 575 | dependencies: 576 | is-glob "^4.0.1" 577 | 578 | glob@7.1.3: 579 | version "7.1.3" 580 | resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 581 | integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE= 582 | dependencies: 583 | fs.realpath "^1.0.0" 584 | inflight "^1.0.4" 585 | inherits "2" 586 | minimatch "^3.0.4" 587 | once "^1.3.0" 588 | path-is-absolute "^1.0.0" 589 | 590 | glob@^7.1.3, glob@^7.1.7: 591 | version "7.2.0" 592 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 593 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 594 | dependencies: 595 | fs.realpath "^1.0.0" 596 | inflight "^1.0.4" 597 | inherits "2" 598 | minimatch "^3.0.4" 599 | once "^1.3.0" 600 | path-is-absolute "^1.0.0" 601 | 602 | graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: 603 | version "4.2.9" 604 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" 605 | integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== 606 | 607 | growl@1.10.5: 608 | version "1.10.5" 609 | resolved "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 610 | integrity sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4= 611 | 612 | has-flag@^3.0.0: 613 | version "3.0.0" 614 | resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 615 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 616 | 617 | has-symbols@^1.0.0, has-symbols@^1.0.1: 618 | version "1.0.1" 619 | resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 620 | integrity sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg= 621 | 622 | has@^1.0.3: 623 | version "1.0.3" 624 | resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 625 | integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= 626 | dependencies: 627 | function-bind "^1.1.1" 628 | 629 | he@1.2.0: 630 | version "1.2.0" 631 | resolved "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 632 | integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= 633 | 634 | http-errors@1.8.1: 635 | version "1.8.1" 636 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" 637 | integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== 638 | dependencies: 639 | depd "~1.1.2" 640 | inherits "2.0.4" 641 | setprototypeof "1.2.0" 642 | statuses ">= 1.5.0 < 2" 643 | toidentifier "1.0.1" 644 | 645 | http-proxy@^1.18.1: 646 | version "1.18.1" 647 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" 648 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== 649 | dependencies: 650 | eventemitter3 "^4.0.0" 651 | follow-redirects "^1.0.0" 652 | requires-port "^1.0.0" 653 | 654 | iconv-lite@0.4.24: 655 | version "0.4.24" 656 | resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 657 | integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= 658 | dependencies: 659 | safer-buffer ">= 2.1.2 < 3" 660 | 661 | inflight@^1.0.4: 662 | version "1.0.6" 663 | resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 664 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 665 | dependencies: 666 | once "^1.3.0" 667 | wrappy "1" 668 | 669 | inherits@2, inherits@2.0.4: 670 | version "2.0.4" 671 | resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 672 | integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= 673 | 674 | is-binary-path@~2.1.0: 675 | version "2.1.0" 676 | resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 677 | integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= 678 | dependencies: 679 | binary-extensions "^2.0.0" 680 | 681 | is-buffer@~2.0.3: 682 | version "2.0.4" 683 | resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 684 | integrity sha1-PlcvI8hBGlz9lVfISeNmXgspBiM= 685 | 686 | is-callable@^1.1.4, is-callable@^1.1.5: 687 | version "1.1.5" 688 | resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 689 | integrity sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs= 690 | 691 | is-date-object@^1.0.1: 692 | version "1.0.2" 693 | resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 694 | integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4= 695 | 696 | is-extglob@^2.1.1: 697 | version "2.1.1" 698 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 699 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 700 | 701 | is-fullwidth-code-point@^2.0.0: 702 | version "2.0.0" 703 | resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 704 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 705 | 706 | is-fullwidth-code-point@^3.0.0: 707 | version "3.0.0" 708 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 709 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 710 | 711 | is-glob@^4.0.1, is-glob@~4.0.1: 712 | version "4.0.1" 713 | resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 714 | integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= 715 | dependencies: 716 | is-extglob "^2.1.1" 717 | 718 | is-number@^7.0.0: 719 | version "7.0.0" 720 | resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 721 | integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= 722 | 723 | is-regex@^1.0.5: 724 | version "1.0.5" 725 | resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 726 | integrity sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4= 727 | dependencies: 728 | has "^1.0.3" 729 | 730 | is-symbol@^1.0.2: 731 | version "1.0.3" 732 | resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 733 | integrity sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc= 734 | dependencies: 735 | has-symbols "^1.0.1" 736 | 737 | isbinaryfile@^4.0.8: 738 | version "4.0.8" 739 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" 740 | integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== 741 | 742 | isexe@^2.0.0: 743 | version "2.0.0" 744 | resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 745 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 746 | 747 | js-yaml@3.13.1: 748 | version "3.13.1" 749 | resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 750 | integrity sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc= 751 | dependencies: 752 | argparse "^1.0.7" 753 | esprima "^4.0.0" 754 | 755 | jsonfile@^6.0.1: 756 | version "6.1.0" 757 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 758 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 759 | dependencies: 760 | universalify "^2.0.0" 761 | optionalDependencies: 762 | graceful-fs "^4.1.6" 763 | 764 | karma-chrome-launcher@^3.1.0: 765 | version "3.1.0" 766 | resolved "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" 767 | integrity sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg= 768 | dependencies: 769 | which "^1.2.1" 770 | 771 | karma-mocha@^1.3.0: 772 | version "1.3.0" 773 | resolved "https://registry.npm.taobao.org/karma-mocha/download/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf" 774 | integrity sha1-7qrH/8DiAetjxGdEDStpx883eL8= 775 | dependencies: 776 | minimist "1.2.0" 777 | 778 | karma@^6.3.16: 779 | version "6.3.16" 780 | resolved "https://registry.yarnpkg.com/karma/-/karma-6.3.16.tgz#76d1a705fd1cf864ee5ed85270b572641e0958ef" 781 | integrity sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ== 782 | dependencies: 783 | body-parser "^1.19.0" 784 | braces "^3.0.2" 785 | chokidar "^3.5.1" 786 | colors "1.4.0" 787 | connect "^3.7.0" 788 | di "^0.0.1" 789 | dom-serialize "^2.2.1" 790 | glob "^7.1.7" 791 | graceful-fs "^4.2.6" 792 | http-proxy "^1.18.1" 793 | isbinaryfile "^4.0.8" 794 | lodash "^4.17.21" 795 | log4js "^6.4.1" 796 | mime "^2.5.2" 797 | minimatch "^3.0.4" 798 | mkdirp "^0.5.5" 799 | qjobs "^1.2.0" 800 | range-parser "^1.2.1" 801 | rimraf "^3.0.2" 802 | socket.io "^4.2.0" 803 | source-map "^0.6.1" 804 | tmp "^0.2.1" 805 | ua-parser-js "^0.7.30" 806 | yargs "^16.1.1" 807 | 808 | locate-path@^3.0.0: 809 | version "3.0.0" 810 | resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 811 | integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= 812 | dependencies: 813 | p-locate "^3.0.0" 814 | path-exists "^3.0.0" 815 | 816 | lodash@^4.17.15, lodash@^4.17.21: 817 | version "4.17.21" 818 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 819 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 820 | 821 | log-symbols@3.0.0: 822 | version "3.0.0" 823 | resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" 824 | integrity sha1-86CFFqXeqJMzan3uFNGKHP2rd8Q= 825 | dependencies: 826 | chalk "^2.4.2" 827 | 828 | log4js@^6.4.1: 829 | version "6.4.1" 830 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.1.tgz#9d3a8bf2c31c1e213fe3fc398a6053f7a2bc53e8" 831 | integrity sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg== 832 | dependencies: 833 | date-format "^4.0.3" 834 | debug "^4.3.3" 835 | flatted "^3.2.4" 836 | rfdc "^1.3.0" 837 | streamroller "^3.0.2" 838 | 839 | media-typer@0.3.0: 840 | version "0.3.0" 841 | resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 842 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 843 | 844 | mime-db@1.43.0: 845 | version "1.43.0" 846 | resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz?cache=0&sync_timestamp=1578281104943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" 847 | integrity sha1-ChLgUCZQ5HPXNVNQUOfI9OtPrlg= 848 | 849 | mime-types@~2.1.24: 850 | version "2.1.26" 851 | resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.26.tgz?cache=0&sync_timestamp=1578282585871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" 852 | integrity sha1-nJIfwJt+FJpl39wNpNIJlyALCgY= 853 | dependencies: 854 | mime-db "1.43.0" 855 | 856 | mime@^2.5.2: 857 | version "2.6.0" 858 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" 859 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 860 | 861 | minimatch@3.0.4, minimatch@^3.0.4: 862 | version "3.0.4" 863 | resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 864 | integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= 865 | dependencies: 866 | brace-expansion "^1.1.7" 867 | 868 | minimist@1.2.0: 869 | version "1.2.0" 870 | resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 871 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 872 | 873 | minimist@^1.2.5: 874 | version "1.2.5" 875 | resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 876 | integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= 877 | 878 | mkdirp@0.5.3: 879 | version "0.5.3" 880 | resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" 881 | integrity sha1-WlFLcXklkoeVKIHpRBDsVGVln4w= 882 | dependencies: 883 | minimist "^1.2.5" 884 | 885 | mkdirp@^0.5.5: 886 | version "0.5.5" 887 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 888 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 889 | dependencies: 890 | minimist "^1.2.5" 891 | 892 | mocha@^7.1.1: 893 | version "7.1.1" 894 | resolved "https://registry.npm.taobao.org/mocha/download/mocha-7.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmocha%2Fdownload%2Fmocha-7.1.1.tgz#89fbb30d09429845b1bb893a830bf5771049a441" 895 | integrity sha1-ifuzDQlCmEWxu4k6gwv1dxBJpEE= 896 | dependencies: 897 | ansi-colors "3.2.3" 898 | browser-stdout "1.3.1" 899 | chokidar "3.3.0" 900 | debug "3.2.6" 901 | diff "3.5.0" 902 | escape-string-regexp "1.0.5" 903 | find-up "3.0.0" 904 | glob "7.1.3" 905 | growl "1.10.5" 906 | he "1.2.0" 907 | js-yaml "3.13.1" 908 | log-symbols "3.0.0" 909 | minimatch "3.0.4" 910 | mkdirp "0.5.3" 911 | ms "2.1.1" 912 | node-environment-flags "1.0.6" 913 | object.assign "4.1.0" 914 | strip-json-comments "2.0.1" 915 | supports-color "6.0.0" 916 | which "1.3.1" 917 | wide-align "1.1.3" 918 | yargs "13.3.2" 919 | yargs-parser "13.1.2" 920 | yargs-unparser "1.6.0" 921 | 922 | ms@2.0.0: 923 | version "2.0.0" 924 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 925 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 926 | 927 | ms@2.1.1: 928 | version "2.1.1" 929 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 930 | integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= 931 | 932 | ms@2.1.2, ms@^2.1.1: 933 | version "2.1.2" 934 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 935 | integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= 936 | 937 | negotiator@0.6.2: 938 | version "0.6.2" 939 | resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 940 | integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs= 941 | 942 | node-environment-flags@1.0.6: 943 | version "1.0.6" 944 | resolved "https://registry.npm.taobao.org/node-environment-flags/download/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" 945 | integrity sha1-owrBNiH299Z0JgpU3t4EjDmCwIg= 946 | dependencies: 947 | object.getownpropertydescriptors "^2.0.3" 948 | semver "^5.7.0" 949 | 950 | normalize-path@^3.0.0, normalize-path@~3.0.0: 951 | version "3.0.0" 952 | resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 953 | integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= 954 | 955 | object-assign@^4: 956 | version "4.1.1" 957 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 958 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 959 | 960 | object-inspect@^1.7.0: 961 | version "1.7.0" 962 | resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 963 | integrity sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc= 964 | 965 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 966 | version "1.1.1" 967 | resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 968 | integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= 969 | 970 | object.assign@4.1.0, object.assign@^4.1.0: 971 | version "4.1.0" 972 | resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 973 | integrity sha1-lovxEA15Vrs8oIbwBvhGs7xACNo= 974 | dependencies: 975 | define-properties "^1.1.2" 976 | function-bind "^1.1.1" 977 | has-symbols "^1.0.0" 978 | object-keys "^1.0.11" 979 | 980 | object.getownpropertydescriptors@^2.0.3: 981 | version "2.1.0" 982 | resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 983 | integrity sha1-Npvx+VktiridcS3O1cuBx8U1Jkk= 984 | dependencies: 985 | define-properties "^1.1.3" 986 | es-abstract "^1.17.0-next.1" 987 | 988 | on-finished@~2.3.0: 989 | version "2.3.0" 990 | resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 991 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 992 | dependencies: 993 | ee-first "1.1.1" 994 | 995 | once@^1.3.0: 996 | version "1.4.0" 997 | resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 998 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 999 | dependencies: 1000 | wrappy "1" 1001 | 1002 | p-limit@^2.0.0: 1003 | version "2.3.0" 1004 | resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1586101408834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1005 | integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= 1006 | dependencies: 1007 | p-try "^2.0.0" 1008 | 1009 | p-locate@^3.0.0: 1010 | version "3.0.0" 1011 | resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1012 | integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= 1013 | dependencies: 1014 | p-limit "^2.0.0" 1015 | 1016 | p-try@^2.0.0: 1017 | version "2.2.0" 1018 | resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1019 | integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= 1020 | 1021 | parseurl@~1.3.3: 1022 | version "1.3.3" 1023 | resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1024 | integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= 1025 | 1026 | path-exists@^3.0.0: 1027 | version "3.0.0" 1028 | resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1029 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1030 | 1031 | path-is-absolute@^1.0.0: 1032 | version "1.0.1" 1033 | resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1034 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1035 | 1036 | pathval@^1.1.0: 1037 | version "1.1.1" 1038 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1039 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1040 | 1041 | picomatch@^2.0.4: 1042 | version "2.2.2" 1043 | resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1044 | integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= 1045 | 1046 | picomatch@^2.2.1: 1047 | version "2.3.1" 1048 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1049 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1050 | 1051 | qjobs@^1.2.0: 1052 | version "1.2.0" 1053 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" 1054 | integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== 1055 | 1056 | qs@6.9.7: 1057 | version "6.9.7" 1058 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" 1059 | integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== 1060 | 1061 | range-parser@^1.2.1: 1062 | version "1.2.1" 1063 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1064 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1065 | 1066 | raw-body@2.4.3: 1067 | version "2.4.3" 1068 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" 1069 | integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== 1070 | dependencies: 1071 | bytes "3.1.2" 1072 | http-errors "1.8.1" 1073 | iconv-lite "0.4.24" 1074 | unpipe "1.0.0" 1075 | 1076 | readdirp@~3.2.0: 1077 | version "3.2.0" 1078 | resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" 1079 | integrity sha1-wwwzNSsSyW37S4lUIaSf1alZODk= 1080 | dependencies: 1081 | picomatch "^2.0.4" 1082 | 1083 | readdirp@~3.6.0: 1084 | version "3.6.0" 1085 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1086 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1087 | dependencies: 1088 | picomatch "^2.2.1" 1089 | 1090 | require-directory@^2.1.1: 1091 | version "2.1.1" 1092 | resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1093 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1094 | 1095 | require-main-filename@^2.0.0: 1096 | version "2.0.0" 1097 | resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1098 | integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= 1099 | 1100 | requires-port@^1.0.0: 1101 | version "1.0.0" 1102 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 1103 | integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= 1104 | 1105 | rfdc@^1.3.0: 1106 | version "1.3.0" 1107 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" 1108 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 1109 | 1110 | rimraf@^3.0.0, rimraf@^3.0.2: 1111 | version "3.0.2" 1112 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1113 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1114 | dependencies: 1115 | glob "^7.1.3" 1116 | 1117 | "safer-buffer@>= 2.1.2 < 3": 1118 | version "2.1.2" 1119 | resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1120 | integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= 1121 | 1122 | semver@^5.7.0: 1123 | version "5.7.1" 1124 | resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1125 | integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= 1126 | 1127 | set-blocking@^2.0.0: 1128 | version "2.0.0" 1129 | resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1130 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1131 | 1132 | setprototypeof@1.2.0: 1133 | version "1.2.0" 1134 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1135 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1136 | 1137 | socket.io-adapter@~2.3.3: 1138 | version "2.3.3" 1139 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz#4d6111e4d42e9f7646e365b4f578269821f13486" 1140 | integrity sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ== 1141 | 1142 | socket.io-parser@~4.0.4: 1143 | version "4.0.4" 1144 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" 1145 | integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== 1146 | dependencies: 1147 | "@types/component-emitter" "^1.2.10" 1148 | component-emitter "~1.3.0" 1149 | debug "~4.3.1" 1150 | 1151 | socket.io@^4.2.0: 1152 | version "4.4.1" 1153 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.4.1.tgz#cd6de29e277a161d176832bb24f64ee045c56ab8" 1154 | integrity sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg== 1155 | dependencies: 1156 | accepts "~1.3.4" 1157 | base64id "~2.0.0" 1158 | debug "~4.3.2" 1159 | engine.io "~6.1.0" 1160 | socket.io-adapter "~2.3.3" 1161 | socket.io-parser "~4.0.4" 1162 | 1163 | source-map@^0.6.1: 1164 | version "0.6.1" 1165 | resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1571657176668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1166 | integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= 1167 | 1168 | sprintf-js@~1.0.2: 1169 | version "1.0.3" 1170 | resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1171 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1172 | 1173 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1174 | version "1.5.0" 1175 | resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1176 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1177 | 1178 | streamroller@^3.0.2: 1179 | version "3.0.2" 1180 | resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.2.tgz#30418d0eee3d6c93ec897f892ed098e3a81e68b7" 1181 | integrity sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA== 1182 | dependencies: 1183 | date-format "^4.0.3" 1184 | debug "^4.1.1" 1185 | fs-extra "^10.0.0" 1186 | 1187 | "string-width@^1.0.2 || 2": 1188 | version "2.1.1" 1189 | resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1190 | integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= 1191 | dependencies: 1192 | is-fullwidth-code-point "^2.0.0" 1193 | strip-ansi "^4.0.0" 1194 | 1195 | string-width@^3.0.0, string-width@^3.1.0: 1196 | version "3.1.0" 1197 | resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1198 | integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= 1199 | dependencies: 1200 | emoji-regex "^7.0.1" 1201 | is-fullwidth-code-point "^2.0.0" 1202 | strip-ansi "^5.1.0" 1203 | 1204 | string-width@^4.1.0, string-width@^4.2.0: 1205 | version "4.2.3" 1206 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1207 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1208 | dependencies: 1209 | emoji-regex "^8.0.0" 1210 | is-fullwidth-code-point "^3.0.0" 1211 | strip-ansi "^6.0.1" 1212 | 1213 | string.prototype.trimend@^1.0.0: 1214 | version "1.0.0" 1215 | resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" 1216 | integrity sha1-7kl/0pdoZG2EviybgZ4pJDlhQ3M= 1217 | dependencies: 1218 | define-properties "^1.1.3" 1219 | es-abstract "^1.17.5" 1220 | 1221 | string.prototype.trimleft@^2.1.1: 1222 | version "2.1.2" 1223 | resolved "https://registry.npm.taobao.org/string.prototype.trimleft/download/string.prototype.trimleft-2.1.2.tgz?cache=0&sync_timestamp=1585584322600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimleft%2Fdownload%2Fstring.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" 1224 | integrity sha1-RAiqLl1t3QyagHObCH+8BnwDs8w= 1225 | dependencies: 1226 | define-properties "^1.1.3" 1227 | es-abstract "^1.17.5" 1228 | string.prototype.trimstart "^1.0.0" 1229 | 1230 | string.prototype.trimright@^2.1.1: 1231 | version "2.1.2" 1232 | resolved "https://registry.npm.taobao.org/string.prototype.trimright/download/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" 1233 | integrity sha1-x28c7zDyG7rYr+uNsVEUls+w8qM= 1234 | dependencies: 1235 | define-properties "^1.1.3" 1236 | es-abstract "^1.17.5" 1237 | string.prototype.trimend "^1.0.0" 1238 | 1239 | string.prototype.trimstart@^1.0.0: 1240 | version "1.0.0" 1241 | resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" 1242 | integrity sha1-r+WWp86d6QVJaRlAbJc0hF8BovI= 1243 | dependencies: 1244 | define-properties "^1.1.3" 1245 | es-abstract "^1.17.5" 1246 | 1247 | strip-ansi@^4.0.0: 1248 | version "4.0.0" 1249 | resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1250 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1251 | dependencies: 1252 | ansi-regex "^3.0.0" 1253 | 1254 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1255 | version "5.2.0" 1256 | resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1257 | integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= 1258 | dependencies: 1259 | ansi-regex "^4.1.0" 1260 | 1261 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1262 | version "6.0.1" 1263 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1264 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1265 | dependencies: 1266 | ansi-regex "^5.0.1" 1267 | 1268 | strip-json-comments@2.0.1: 1269 | version "2.0.1" 1270 | resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1586159975241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1271 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1272 | 1273 | supports-color@6.0.0: 1274 | version "6.0.0" 1275 | resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 1276 | integrity sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao= 1277 | dependencies: 1278 | has-flag "^3.0.0" 1279 | 1280 | supports-color@^5.3.0: 1281 | version "5.5.0" 1282 | resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1283 | integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= 1284 | dependencies: 1285 | has-flag "^3.0.0" 1286 | 1287 | tmp@^0.2.1: 1288 | version "0.2.1" 1289 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1290 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1291 | dependencies: 1292 | rimraf "^3.0.0" 1293 | 1294 | to-regex-range@^5.0.1: 1295 | version "5.0.1" 1296 | resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1297 | integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= 1298 | dependencies: 1299 | is-number "^7.0.0" 1300 | 1301 | toidentifier@1.0.1: 1302 | version "1.0.1" 1303 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1304 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1305 | 1306 | type-detect@^4.0.0, type-detect@^4.0.5: 1307 | version "4.0.8" 1308 | resolved "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1309 | integrity sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw= 1310 | 1311 | type-is@~1.6.18: 1312 | version "1.6.18" 1313 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1314 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1315 | dependencies: 1316 | media-typer "0.3.0" 1317 | mime-types "~2.1.24" 1318 | 1319 | typescript@^3.8.3: 1320 | version "3.8.3" 1321 | resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" 1322 | integrity sha1-QJ64VE6gM1cRIFhp7EWKsQnuEGE= 1323 | 1324 | ua-parser-js@^0.7.30: 1325 | version "0.7.31" 1326 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" 1327 | integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== 1328 | 1329 | universalify@^2.0.0: 1330 | version "2.0.0" 1331 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 1332 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 1333 | 1334 | unpipe@1.0.0, unpipe@~1.0.0: 1335 | version "1.0.0" 1336 | resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1337 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1338 | 1339 | utils-merge@1.0.1: 1340 | version "1.0.1" 1341 | resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1342 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1343 | 1344 | vary@^1: 1345 | version "1.1.2" 1346 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1347 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1348 | 1349 | void-elements@^2.0.0: 1350 | version "2.0.1" 1351 | resolved "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 1352 | integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= 1353 | 1354 | which-module@^2.0.0: 1355 | version "2.0.0" 1356 | resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1357 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1358 | 1359 | which@1.3.1, which@^1.2.1: 1360 | version "1.3.1" 1361 | resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1362 | integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= 1363 | dependencies: 1364 | isexe "^2.0.0" 1365 | 1366 | wide-align@1.1.3: 1367 | version "1.1.3" 1368 | resolved "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1369 | integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= 1370 | dependencies: 1371 | string-width "^1.0.2 || 2" 1372 | 1373 | wrap-ansi@^5.1.0: 1374 | version "5.1.0" 1375 | resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1376 | integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= 1377 | dependencies: 1378 | ansi-styles "^3.2.0" 1379 | string-width "^3.0.0" 1380 | strip-ansi "^5.0.0" 1381 | 1382 | wrap-ansi@^7.0.0: 1383 | version "7.0.0" 1384 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1385 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1386 | dependencies: 1387 | ansi-styles "^4.0.0" 1388 | string-width "^4.1.0" 1389 | strip-ansi "^6.0.0" 1390 | 1391 | wrappy@1: 1392 | version "1.0.2" 1393 | resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1394 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1395 | 1396 | ws@~8.2.3: 1397 | version "8.2.3" 1398 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" 1399 | integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== 1400 | 1401 | y18n@^4.0.0: 1402 | version "4.0.3" 1403 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 1404 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 1405 | 1406 | y18n@^5.0.5: 1407 | version "5.0.8" 1408 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1409 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1410 | 1411 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 1412 | version "13.1.2" 1413 | resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1585243543699&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 1414 | integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= 1415 | dependencies: 1416 | camelcase "^5.0.0" 1417 | decamelize "^1.2.0" 1418 | 1419 | yargs-parser@^20.2.2: 1420 | version "20.2.9" 1421 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1422 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1423 | 1424 | yargs-unparser@1.6.0: 1425 | version "1.6.0" 1426 | resolved "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 1427 | integrity sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8= 1428 | dependencies: 1429 | flat "^4.1.0" 1430 | lodash "^4.17.15" 1431 | yargs "^13.3.0" 1432 | 1433 | yargs@13.3.2, yargs@^13.3.0: 1434 | version "13.3.2" 1435 | resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 1436 | integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= 1437 | dependencies: 1438 | cliui "^5.0.0" 1439 | find-up "^3.0.0" 1440 | get-caller-file "^2.0.1" 1441 | require-directory "^2.1.1" 1442 | require-main-filename "^2.0.0" 1443 | set-blocking "^2.0.0" 1444 | string-width "^3.0.0" 1445 | which-module "^2.0.0" 1446 | y18n "^4.0.0" 1447 | yargs-parser "^13.1.2" 1448 | 1449 | yargs@^16.1.1: 1450 | version "16.2.0" 1451 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1452 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1453 | dependencies: 1454 | cliui "^7.0.2" 1455 | escalade "^3.1.1" 1456 | get-caller-file "^2.0.5" 1457 | require-directory "^2.1.1" 1458 | string-width "^4.2.0" 1459 | y18n "^5.0.5" 1460 | yargs-parser "^20.2.2" 1461 | --------------------------------------------------------------------------------