diff --git a/README.md b/README.md index cefa289..b695bd3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > TDengineGUI is a useful and simple desktop manager for [TDengine](https://github.com/taosdata/TDengine), compatible with Linux, windows, mac. It helps developer to observe and manipulate data easier when they use TDengine as their Alot big data platform. -[中文版](https://github.com/skye0207/TDengineGUI/blob/main/README_.md) +[中文版](https://github.com/kangaroo1122/TDengineGUI/blob/main/README_.md) ## Features - Link to TDengine, create and drop databases - show tables and surpertables, select data. @@ -12,19 +12,19 @@ ### Windows: -Download latest [exe](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0) package from [release](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0)[or [gitee](https://gitee.com/skyebaobao/TDengineGUI/releases/v1.0.0) in China]. +Download latest [exe](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3) package from [release](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3)[or [gitee](https://gitee.com/skyebaobao/TDengineGUI/releases/1.0.3) in China]. ### Mac: -Download latest [dmg](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0) package from [release](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0). +Download latest [dmg](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3) package from [release](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3). ### Linux: -Download latest [AppImage](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0) package from [release](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0) [or [gitee](https://gitee.com/skyebaobao/TDengineGUI/releases/v1.0.0) in China]. +Download latest [AppImage](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3) package from [release](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3) [or [gitee](https://gitee.com/skyebaobao/TDengineGUI/releases/1.0.3) in China]. ## Dev Build Setup: ```bash # clone code -git clone https://github.com/skye0207/TDengineGUI.git +git clone https://github.com/kangaroo1122/TDengineGUI.git cd TDengineGUI @@ -45,46 +45,46 @@ npm run build - TDengineGUI reconds previous connections. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/1.png) +![Image text](_img/1.png) - You also could add a new server to manage by clicking the "新建连接" button and providing ip,port,username and password(root:taosdata). -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/2.png) +![Image text](_img/2.png) - Drop a database. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/3.png) +![Image text](_img/3.png) - Create databases. Specific attributes refering [tdengine document](https://www.taosdata.com/cn/documentation/taos-sql#management) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/5.png) +![Image text](_img/5.png) - Delete a linked server. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/6.png) +![Image text](_img/6.png) - Select a database and enter main panel. You could click "切换" button to switch database. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/7.png) +![Image text](_img/7.png) - Click a table to query data. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/8.png) +![Image text](_img/8.png) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/11.png) +![Image text](_img/11.png) - Query data by filtering the timestamp. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/9.png) +![Image text](_img/9.png) - Set data filter. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/10.png) +![Image text](_img/10.png) - A simple console to execute the SQL statements. SQL will execute on the current database by default, so you don't need to add the database name. But you can also operate on the other database by using "databaseName.tableName". -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/12.png) +![Image text](_img/12.png) - Simplely display database properties. More features will be developed in the future. -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/14.png) \ No newline at end of file +![Image text](_img/14.png) diff --git a/README_.md b/README_.md index f2a314f..9310c8e 100644 --- a/README_.md +++ b/README_.md @@ -2,7 +2,7 @@ > TDengineGUI是一个基于electron构建的,针对时序数据库[TDengine](https://github.com/taosdata/TDengine)的图形化管理工具。具有跨平台、易于使用、版本适应性强等特点。 -[English](https://github.com/skye0207/TDengineGUI/blob/main/README.md) +[English](https://github.com/kangaroo1122/TDengineGUI/blob/main/README.md) ## 当前版本功能 - 通过TDengine restful接口连接到数据库,使用基本不受服务器版本升级影响。 - 数据库添加删除操作,显示数据库属性。 @@ -12,12 +12,12 @@ ## 如何获取 ### 下载最新版可执行文件: -[release](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0). +[release](https://github.com/kangaroo1122/TDengineGUI/releases/tag/1.0.3). ## 通过源代码运行开发版本: -- 克隆项目: git clone https://github.com/skye0207/TDengineGUI.git +- 克隆项目: git clone https://github.com/kangaroo1122/TDengineGUI.git - 安装依赖: npm install - 启动开发版本: npm run start - 生成桌面应用(可选): npm run build (生成在dist文件夹下) @@ -26,52 +26,52 @@ - 打开软件后,界面左侧会显示需要管理的数据库服务器列表和服务器中数据库列表,同时显示数据库服务器的版本号。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/1.png) +![Image text](_img/1.png) - 可以通过“新建连接”按钮,添加新的服务器进行管理。需要提供数据库服务器的ip地址、restful服务的端口号(默认为6041)、连接服务器的用户名和密码(默认为root:taosdata) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/2.png) +![Image text](_img/2.png) - 可以通过点击数据库后的删除图标,进行删除数据库操作。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/3.png) +![Image text](_img/3.png) - 可以通过点击添加数据库图标,进行添加数据库操作。可以在添加时选择数据库属性(具体属性含义请参考[tdengine官方文档](https://www.taosdata.com/cn/documentation/taos-sql#management)) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/5.png) +![Image text](_img/5.png) - 可以通过点击服务器连接后的删除图标,进行删除数据库连接操作。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/6.png) +![Image text](_img/6.png) - 选择要操作的数据库后,即可进入当前数据库操作界面。可以通过点击“切换”按钮调出数据库导航栏,切换要操作的数据库。当前数据库操作界面中分 超级表、表、控制台、数据库属性四个标签页。每个标签页都针对当前数据库进行显示与操作。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/7.png) +![Image text](_img/7.png) - 超级表(表)标签页中,左侧为超级表(表)的列表,可以进行删除与检索操作(添加、修改等操作后续版本将提供,当前版本如需增加数据表或者插入数据请使用控制台输入命令完成)。左侧则显示当前数据表的数据。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/8.png) +![Image text](_img/8.png) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/11.png) +![Image text](_img/11.png) - 可以对表数据进行时间段选择。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/9.png) +![Image text](_img/9.png) - 可以对表数据进行时间字段过滤、排序、分页等操作。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/10.png) +![Image text](_img/10.png) - 控制台中可以输入sql命令运行,并显示restful接口原始返回结果。控制台中输入的命令默认针对当前数据库进行操作,一般情况下不需要在表名称前附加数据库名称。但也可以通过“数据库名.表名”的方式操作其他数据库中的表。(结果显示方式,以后版本将改进) -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/12.png) +![Image text](_img/12.png) - 数据库属性显示当前数据库的一些基础属性,后期版本将加入属性修改功能。 -![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/14.png) +![Image text](_img/14.png) 现有bug: -- [ ] 数据表控件高度需要根据每页条目数量自动调整,现在每页20条时需要上下滚动。 +- [x] 数据表控件高度需要根据每页条目数量自动调整,现在每页20条时需要上下滚动。 - [ ] 由于TDengine数据库对大数据集排序操作有限制,数据量大的情况下,时间倒序配置下检索数据会报错。 diff --git a/datatest/test_alterdb.js b/datatest/test_alterdb.js index 12364fd..35db928 100644 --- a/datatest/test_alterdb.js +++ b/datatest/test_alterdb.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_createdb.js b/datatest/test_createdb.js index 51a4389..67c7a25 100644 --- a/datatest/test_createdb.js +++ b/datatest/test_createdb.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_distable.js b/datatest/test_distable.js index 9545f12..b6c1d9e 100644 --- a/datatest/test_distable.js +++ b/datatest/test_distable.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_droptable.js b/datatest/test_droptable.js index f29242c..70b4618 100644 --- a/datatest/test_droptable.js +++ b/datatest/test_droptable.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_getversion.js b/datatest/test_getversion.js index 6feedaa..433f5ba 100644 --- a/datatest/test_getversion.js +++ b/datatest/test_getversion.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_insertdata.js b/datatest/test_insertdata.js index c4ec9b6..e2679bc 100644 --- a/datatest/test_insertdata.js +++ b/datatest/test_insertdata.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") @@ -12,4 +12,4 @@ tr.insertData('person100',{'td':Date.now(),'name5':1.2},'test3').then(a => tr.useDatabase('test3') tr.insertData('person100',{'td':Date.now(),'name5':1.2}).then(a => console.log(a) -) \ No newline at end of file +) diff --git a/datatest/test_rawsql.js b/datatest/test_rawsql.js index 7399fcf..1cd8a12 100644 --- a/datatest/test_rawsql.js +++ b/datatest/test_rawsql.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") diff --git a/datatest/test_selectdata.js b/datatest/test_selectdata.js index 41d3d69..3b63d6e 100644 --- a/datatest/test_selectdata.js +++ b/datatest/test_selectdata.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") @@ -22,4 +22,4 @@ tr.selectData('node_7',['ts','pjxdy1'],null,100,1000,null,'dianli1','2021-01-12 tr.countData('node_7',null,'dianli1','2021-01-12 20:42:30.275','2021-03-12 20:42:30.275').then(a => console.log(a) -) \ No newline at end of file +) diff --git a/datatest/test_showdb.js b/datatest/test_showdb.js index 80e4510..7603a02 100644 --- a/datatest/test_showdb.js +++ b/datatest/test_showdb.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918",1) diff --git a/datatest/test_showtable.js b/datatest/test_showtable.js index 864c334..92b7e26 100644 --- a/datatest/test_showtable.js +++ b/datatest/test_showtable.js @@ -1,7 +1,7 @@ 'use strict' -var TaosRestful = require('../renderer/taosrestful.js') +var TaosRestful = require('../renderer/js/taosrestful.js') var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") @@ -23,4 +23,4 @@ tr.showTables('dianli1','1').then(a => // tr.useDatabase('test3') // tr.showTables().then(a => // console.log(a) -// ) \ No newline at end of file +// ) diff --git a/main.js b/main.js index f885e58..bc77bcf 100644 --- a/main.js +++ b/main.js @@ -1,18 +1,27 @@ const { app, BrowserWindow } = require('electron') +process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'; + +const Store = require('electron-store'); +Store.initRenderer(); + function createWindow () { const win = new BrowserWindow({ + autoHideMenuBar: true, width: 1200, - height: 880, + height: 900, + // show: false, //关闭窗口显示 webPreferences: { nodeIntegration: true } }) win.loadFile('./renderer/index.html') + // win.maximize() //设置最大化 + // win.show() //手动显示窗口 + + //打开调试窗口 + // win.webContents.openDevTools() } app.whenReady().then(createWindow) - - - diff --git a/package-lock.json b/package-lock.json index ad9de0b..54c7a92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,3043 @@ { "name": "TDengineGUI", - "version": "1.0.0", - "lockfileVersion": 1, + "version": "1.0.3", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "7zip-bin": { + "packages": { + "": { + "name": "TDengineGUI", + "version": "1.0.3", + "dependencies": { + "axios": "^0.21.1", + "electron-squirrel-startup": "^1.0.0", + "electron-store": "^8.0.1", + "element-ui": "^2.15.0", + "vue": "^2.6.12" + }, + "devDependencies": { + "electron": "^11.5.0", + "electron-builder": "^22.9.1" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/@electron/get": { + "version": "1.12.3", + "resolved": "https://registry.npm.taobao.org/@electron/get/download/@electron/get-1.12.3.tgz?cache=0&sync_timestamp=1611196235724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40electron%2Fget%2Fdownload%2F%40electron%2Fget-1.12.3.tgz", + "integrity": "sha1-+icjOFxLVlo0xMgvRgh6oqX79tA=", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "filenamify": "^4.1.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^2.0.2", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606851912015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz", + "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz", + "integrity": "sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE=", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/debug": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.6", + "resolved": "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-9.0.6.tgz", + "integrity": "sha1-SI5Wt3KZiZpgi4JpcZwdEzAnpqs=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "12.19.15", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.19.15.tgz?cache=0&sync_timestamp=1611167664149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.19.15.tgz", + "integrity": "sha1-DefpePtD22LaNp2xjqCIpjZzwYI=", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "node_modules/7zip-bin": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", "dev": true }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1609583891415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1611325836307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-bin": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.10.tgz", + "integrity": "sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.9.1.tgz", + "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "7zip-bin": "~5.0.3", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.9.1", + "builder-util-runtime": "8.7.2", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.0", + "ejs": "^3.1.5", + "electron-publish": "22.9.1", + "fs-extra": "^9.0.1", + "hosted-git-info": "^3.0.5", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.6", + "js-yaml": "^3.14.0", + "lazy-val": "^1.0.4", + "minimatch": "^3.0.4", + "normalize-package-data": "^2.5.0", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.2", + "temp-file": "^3.3.7" + }, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/isbinaryfile": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz?cache=0&sync_timestamp=1605751734916&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-1.8.5.tgz", + "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz", + "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz", + "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1611040756909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz", + "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1602657218976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/boolean": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/boolean/download/boolean-3.0.2.tgz", + "integrity": "sha1-3xuqGLaisOcIQEdeHZPsj+dbJXA=", + "dev": true, + "optional": true + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "node_modules/builder-util": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.9.1.tgz", + "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.5", + "@types/fs-extra": "^9.0.1", + "7zip-bin": "~5.0.3", + "app-builder-bin": "3.5.10", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.0", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "js-yaml": "^3.14.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.3.7" + } + }, + "node_modules/builder-util-runtime": { + "version": "8.7.2", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz", + "integrity": "sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=8.2.5" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz", + "integrity": "sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI=", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz", + "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-2.0.0.tgz", + "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1594334924907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/chromium-pickle-js/download/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", + "dev": true + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz", + "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/conf": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz", + "integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conf/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/conf/node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conf/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", + "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/core-js": { + "version": "3.8.3", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.8.3.tgz?cache=0&sync_timestamp=1611040756909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.8.3.tgz", + "integrity": "sha1-whkG4fFPNon5OrzG4miDVQ3ZLdA=", + "dev": true, + "optional": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz", + "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1606805746825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.1.3.tgz", + "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "optional": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true, + "optional": true + }, + "node_modules/dmg-builder": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.9.1.tgz", + "integrity": "sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ==", + "dev": true, + "dependencies": { + "app-builder-lib": "22.9.1", + "builder-util": "22.9.1", + "fs-extra": "^9.0.1", + "iconv-lite": "^0.6.2", + "js-yaml": "^3.14.0", + "sanitize-filename": "^1.6.3" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dmg-builder/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "dev": true, + "dependencies": { + "jake": "^10.6.1" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-11.5.0.tgz", + "integrity": "sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.0.1", + "@types/node": "^12.0.12", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron-builder": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.9.1.tgz", + "integrity": "sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA==", + "dev": true, + "dependencies": { + "@types/yargs": "^15.0.5", + "app-builder-lib": "22.9.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.9.1", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "dmg-builder": "22.9.1", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^4.1.1", + "yargs": "^16.0.3" + }, + "bin": { + "electron-builder": "out/cli/cli.js", + "install-app-deps": "out/cli/install-app-deps.js" + }, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.9.1.tgz", + "integrity": "sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.9.1", + "builder-util-runtime": "8.7.2", + "chalk": "^4.1.0", + "fs-extra": "^9.0.1", + "lazy-val": "^1.0.4", + "mime": "^2.4.6" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-squirrel-startup": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/electron-squirrel-startup/download/electron-squirrel-startup-1.0.0.tgz", + "integrity": "sha1-GbTlWTP6Dvj1VnhLnGYPdyVGoLg=", + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-squirrel-startup/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/electron-store": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.1.tgz", + "integrity": "sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==", + "dependencies": { + "conf": "^10.0.3", + "type-fest": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-store/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/element-ui": { + "version": "2.15.0", + "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.15.0.tgz?cache=0&sync_timestamp=1610710781355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.15.0.tgz", + "integrity": "sha1-3ptzqNHj47UOgrkjpfqVKVI5vUE=", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/es6-error/download/es6-error-4.1.1.tgz", + "integrity": "sha1-njr0B0Wd7tR+mpH5uIWoTrBcVh0=", + "dev": true, + "optional": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567261690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz", + "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.7.0.tgz", + "integrity": "sha1-VWzDrp339FLEk6DPtRzDAneUCSc=", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/filenamify/download/filenamify-4.2.0.tgz?cache=0&sync_timestamp=1600940576832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffilenamify%2Fdownload%2Ffilenamify-4.2.0.tgz", + "integrity": "sha1-yZcW1naGlYWztdMos/BlkNAy6J8=", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.1.tgz?cache=0&sync_timestamp=1607916846877&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.1.tgz", + "integrity": "sha1-X2m4Ezds7k/QR0o6uoNd8Eq3Y7c=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1611075656220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz", + "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-agent": { + "version": "2.1.12", + "resolved": "https://registry.npm.taobao.org/global-agent/download/global-agent-2.1.12.tgz", + "integrity": "sha1-5K44Ercxqegcv4Jfk3fvRQqOQZU=", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "core-js": "^3.6.5", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/global-tunnel-ng/download/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha1-0DtRAt/eOmmRT17n2GdhyjXVfY8=", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/globalthis/download/globalthis-1.0.1.tgz", + "integrity": "sha1-QBFvXZwHH56PsAN2VN8as6g7fvk=", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npm.taobao.org/got/download/got-9.6.0.tgz?cache=0&sync_timestamp=1607657989621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-9.6.0.tgz", + "integrity": "sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU=", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1602801378957&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz", + "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907810942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz", + "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=", + "dev": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz", + "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "dependencies": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jake/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "node_modules/jake/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161912962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/keyv/download/keyv-3.1.0.tgz", + "integrity": "sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk=", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazy-val": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", + "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", + "dev": true + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336147792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", + "dev": true, + "optional": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/matcher/download/matcher-3.0.0.tgz", + "integrity": "sha1-vZBg9MW3CqgEHMxvgDaHYJlPMMo=", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", + "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz", + "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1602337228360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1606851912015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz", + "integrity": "sha1-RTNUCH5sqWlXvY9br3U/WYIUISk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz", + "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz", + "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read-config-file": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", + "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", + "dev": true, + "dependencies": { + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz?cache=0&sync_timestamp=1602337238565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresize-observer-polyfill%2Fdownload%2Fresize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, + "node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.19.0.tgz", + "integrity": "sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw=", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npm.taobao.org/roarr/download/roarr-2.15.4.tgz?cache=0&sync_timestamp=1610475750176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Froarr%2Fdownload%2Froarr-2.15.4.tgz", + "integrity": "sha1-9f55W3uDjM/jXcYI4Cgrnrouev0=", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true, + "optional": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/serialize-error/download/serialize-error-7.0.1.tgz?cache=0&sync_timestamp=1610124717473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-error%2Fdownload%2Fserialize-error-7.0.1.tgz", + "integrity": "sha1-8TYLBEf2H/tIPsQVfHN/q313jhg=", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1606468864826&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz", + "integrity": "sha1-AXLLW86AsL1ULqNI21DH4hg02TQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.7.tgz?cache=0&sync_timestamp=1606610760991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.7.tgz", + "integrity": "sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU=", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz", + "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", + "dev": true, + "optional": true + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/strip-outer/download/strip-outer-1.0.1.tgz", + "integrity": "sha1-sv0qv2YEudHmATBXGV34Nrip1jE=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/sumchecker/download/sumchecker-3.0.1.tgz", + "integrity": "sha1-Y3fplnlauwttNI6bPh37JDRajkI=", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-file": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.7.tgz", + "integrity": "sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^8.1.0" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz", + "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/to-readable-stream/download/to-readable-stream-1.0.0.tgz", + "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/trim-repeated/download/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz", + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603179970052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237530009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vue": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1609359858533&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz", + "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM=" + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", + "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.5.tgz?cache=0&sync_timestamp=1609798892990&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.5.tgz", + "integrity": "sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1610219766336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz", + "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.4.tgz?cache=0&sync_timestamp=1604886709178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.4.tgz", + "integrity": "sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { "@develar/schema-utils": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", @@ -97,6 +3125,12 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, + "7zip-bin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", + "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1609583891415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", @@ -109,6 +3143,32 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -191,8 +3251,8 @@ "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", "dev": true, "requires": { - "7zip-bin": "~5.0.3", "@develar/schema-utils": "~2.6.5", + "7zip-bin": "~5.0.3", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", "builder-util": "22.9.1", @@ -297,6 +3357,11 @@ "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", "dev": true }, + "atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" + }, "axios": { "version": "0.21.1", "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz", @@ -433,9 +3498,9 @@ "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", "dev": true, "requires": { - "7zip-bin": "~5.0.3", "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.1", + "7zip-bin": "~5.0.3", "app-builder-bin": "3.5.10", "bluebird-lst": "^1.0.9", "builder-util-runtime": "8.7.2", @@ -621,6 +3686,49 @@ "typedarray": "^0.0.6" } }, + "conf": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz", + "integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==", + "requires": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, "config-chain": { "version": "1.1.12", "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", @@ -665,6 +3773,14 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, + "debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "requires": { + "mimic-fn": "^3.0.0" + } + }, "debug": { "version": "4.3.1", "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz", @@ -807,9 +3923,9 @@ } }, "electron": { - "version": "11.2.1", - "resolved": "https://registry.npm.taobao.org/electron/download/electron-11.2.1.tgz", - "integrity": "sha1-hkHdGmKRGhFE4Mc8NP2fN8zGXCs=", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-11.5.0.tgz", + "integrity": "sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -938,6 +4054,22 @@ } } }, + "electron-store": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.1.tgz", + "integrity": "sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==", + "requires": { + "conf": "^10.0.3", + "type-fest": "^1.0.2" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + } + } + }, "element-ui": { "version": "2.15.0", "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.15.0.tgz?cache=0&sync_timestamp=1610710781355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.15.0.tgz", @@ -974,10 +4106,9 @@ } }, "env-paths": { - "version": "2.2.0", - "resolved": "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz", - "integrity": "sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM=", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "es6-error": { "version": "4.1.1", @@ -1042,8 +4173,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", - "dev": true + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -1086,6 +4216,14 @@ "trim-repeated": "^1.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, "follow-redirects": { "version": "1.13.1", "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.1.tgz?cache=0&sync_timestamp=1607916846877&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.1.tgz", @@ -1298,8 +4436,7 @@ "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-path-inside": { "version": "3.0.2", @@ -1417,6 +4554,11 @@ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", "dev": true }, + "json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", @@ -1466,6 +4608,15 @@ "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", "dev": true }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336147792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", @@ -1483,7 +4634,6 @@ "version": "6.0.0", "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz", "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -1530,6 +4680,11 @@ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz", @@ -1624,12 +4779,48 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz", "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=", "dev": true }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -1650,6 +4841,11 @@ } } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", @@ -1669,6 +4865,14 @@ "dev": true, "optional": true }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + } + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz", @@ -1707,8 +4911,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" }, "pupa": { "version": "2.1.1", @@ -1788,6 +4991,11 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz?cache=0&sync_timestamp=1602337238565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresize-observer-polyfill%2Fdownload%2Fresize-observer-polyfill-1.5.1.tgz", @@ -1855,10 +5063,9 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1606851912015&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz", - "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=", - "dev": true, + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" } @@ -2149,7 +5356,6 @@ "version": "4.4.1", "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237530009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -2281,8 +5487,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", - "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", - "dev": true + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index afb64e9..a087aa8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "TDengineGUI", - "version": "1.0.0", + "version": "1.0.4", "description": "A simple TDengine DeskTop Manager", "main": "main.js", "scripts": { @@ -32,7 +32,14 @@ ] }, "mac": { - "icon": "build/icons/logo.icns" + "icon": "build/icons/logo.icns", + "target": { + "target": "default", + "arch": [ + "arm64", + "x64" + ] + } }, "linux": { "icon": "build/icons/logo.icns" @@ -50,12 +57,13 @@ ], "author": "skye0207", "devDependencies": { - "electron-builder": "^22.9.1", - "electron": "^11.1.1" + "electron": "^11.5.0", + "electron-builder": "^22.9.1" }, "dependencies": { "axios": "^0.21.1", "electron-squirrel-startup": "^1.0.0", + "electron-store": "^8.0.1", "element-ui": "^2.15.0", "vue": "^2.6.12" }, diff --git a/renderer/index.css b/renderer/css/index.css similarity index 75% rename from renderer/index.css rename to renderer/css/index.css index 9d74d0b..609628b 100644 --- a/renderer/index.css +++ b/renderer/css/index.css @@ -4,7 +4,7 @@ html, body, div { padding: 0; } -.app{ +.app { height: 100%; } @@ -13,36 +13,39 @@ html, body, div { width: 600px; } -.linkBtn{ - width: 90%; +.linkBtn { + width: 95%; } -.el-menu{ +.el-menu { border: none; margin-top: 20px; - width: 90%; + width: 95%; } .el-dialog { z-index: 1000; } -.main{ + +.main { height: 100%; } -.mainContent{ - height: 100%; + +.mainContent { + height: 95%; } -.tablePage{ - height: 90%; +.tablePage { + height: 95%; } -.mainTab{ +.mainTab { width: 100%; border: none; box-shadow: none; } -.tableWrapper{ + +.tableWrapper { height: 100%; } @@ -63,18 +66,18 @@ html, body, div { height: 35px !important; } -.linkformstyle{ +.linkformstyle { margin: 0 10px; } -.icon{ +.icon { height: 12px; width: 12px; position: relative; top: 1px; } -.icon1{ +.icon1 { height: 16px; width: 16px; position: relative; @@ -83,14 +86,15 @@ html, body, div { z-index: 111; } -.icon11{ +.icon11 { height: 16px; width: 16px; position: relative; bottom: 1px; right: 8px; } -.icon111{ + +.icon111 { height: 16px; width: 16px; position: absolute; @@ -98,72 +102,73 @@ html, body, div { right: 8px; } -.switchBtn{ +.switchBtn { position: relative; bottom: 1px; } -.footTextWrapper{ +.footTextWrapper { margin-left: 10px; - + } -.footText{ +.footText { margin-left: 10px; font-size: 13px; color: #444; } -.iconWrapper{ +.iconWrapper { display: inline; margin-left: 50px; } -.iconWrapper2{ +.iconWrapper2 { display: inline; - position:absolute; + position: absolute; right: 14px; height: 100%; } -.iconWrapper3{ + +.iconWrapper3 { display: inline; - position:absolute; - right: 54px; + position: absolute; + right: 40px; } -.surperTables{ +.surperTables { margin-left: 10px; cursor: pointer; } -.paginationWrapper{ +.paginationWrapper { margin-top: 20px; display: flex; justify-content: center; } -.menu{ +.menu { overflow-y: auto; height: 650px; } -.greyText{ +.greyText { color: #606266; } -.checkboxGroup{ +.checkboxGroup { margin: 10px 0 0 10px; } -.btnGroup{ +.btnGroup { margin: 6px 0 0 10px; } -.checkboxGroup2{ +.checkboxGroup2 { margin: 12px 0 0 10px; } -.surperTSearchRow{ +.surperTSearchRow { margin: 20px 0 20px 0; } @@ -175,22 +180,22 @@ html, body, div { background-color: #fff; } -.freshDataBtn{ +.freshDataBtn { padding-left: 20px; } -.dataPackerLabel{ +.dataPackerLabel { line-height: 34px; font-size: 14px; color: #606266; } -.consoleWrapper{ +.consoleWrapper { height: 90%; - width:100%; + width: 100%; } -.resultPlace{ +.resultPlace { height: 92%; width: 100%; border: 1px solid #DCDFE6; @@ -198,27 +203,26 @@ html, body, div { margin-top: 15px; } -.resultPlaceTitle{ - color: #DCDFE6; +.resultPlaceTitle { margin-top: 7px; margin-left: 10px; } -.iconWrapper_{ +.iconWrapper_ { display: inline; } -.switchStyle{ +.switchStyle { margin-left: 12px; position: relative; bottom: 3px; } -.el-switch__label{ +.el-switch__label { height: auto !important; } -.addDBswitchStyle{ +.addDBswitchStyle { position: relative; top: 6px; } diff --git a/renderer/index.html b/renderer/index.html index a445f8a..bdbf00a 100644 --- a/renderer/index.html +++ b/renderer/index.html @@ -1,505 +1,567 @@ - + TDengineGUI - - - - - -
- - + + + + + + +
+ +
- - 新建连接 - - - - - - - {{db.name}} - - - - - -
- -
- + + 新建连接 + + + + + + + + {{ db.name }} + + + - - - - - - - - - - - - - - - - - + +
+
+ + + + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + comp + + + + + + + + + + + + replica + + + + + + + + + + + + keep + + + + + + + + update + + + + + + + + + + + + quorum + + + + + + + + + + + blocks + + + + + + - - - + + - - - - -
- - - - - - - - - - - - - + + + + +
+ + + + + + + + + + + + 取 消 确 定 - -
-
- -
- - - - - - - - 全选 - 反选 - - - - - {{label}} - - - - - - - - 10 - 15 - 20 - - - - - - - - - 取消 - 设置 - - - - - 时间范围: - - - -
- - +
- - + + +
+ + + + + + + + 全选 + 反选 + + + + + {{ label }} + + + + + + + + + 10 + 20 + 30 + 50 + + + + + - - - - 筛选条件 - - - 数据刷新 - - - - - - - - - - -
- - -
-
-
- - - - - -
- - - - - - - - - - - - - - 取 消 - 确 定 - - -
-
- -
- - - - - - - 全选 - 反选 - - - - - {{label}} - - - - - - - - - 10 - 15 - 20 - - - - - - - + + +
+ + + + + + + 全选 + 反选 + + + + + {{ label }} + + + + + + + + + + 10 + 20 + 30 + 50 + + + + + + + 取消 - 设置 + 确认 - - - - - 时间范围: - -
- - -
-
- + + 时间范围: + +
+ + +
+
+ + + 筛选条件 + + + + 数据刷新 + + +
+ + + + + + + +
+ + +
+
+
+ + + +
+ + + 执行 - --> - - 筛选条件 - - - 数据刷新 - - - - - - - - - -
- - +
+ +
+ 复制 +
{{ JSON.stringify(consoleResult, null, 4) }}
+
+
-
- - -
- -
- - - - -
- -
{{consoleResult}}
-
-
-
-

- - + +

+ + - - - - - 切换 + + + + + 切换 +
-
当前连接:
-
{{theLink.name}}
-
主机:
-
{{theLink.host}}
-
端口:
-
{{theLink.port}}
-
用户名:
-
{{theLink.user}}
-
数据库:
-
{{theDB}}
+
当前连接:
+
{{ theLink.name }}
+
主机:
+
{{ theLink.host }}
+
端口:
+
{{ theLink.port }}
+
用户名:
+
{{ theLink.user }}
+
数据库:
+
{{ theDB }}
- + -
- - +
+ + diff --git a/renderer/index.js b/renderer/index.js deleted file mode 100644 index 43a9f3a..0000000 --- a/renderer/index.js +++ /dev/null @@ -1,961 +0,0 @@ -const TaosRestful = require('./taosrestful_.js') -const storage = require('./localDataStore.js') -const { TouchBarScrubber } = require('electron') - -new Vue({ - el: '#app', - mounted: function () { - let links = storage.getLinks() - for(let i = 0,len=links.length; i < len; i++) { - let payload = { - ip:links[i].host, - port:links[i].port, - user:links[i].user, - password:links[i].password - } - TaosRestful.getVersion(payload).then(data => { - links[i].version = data - this.$data.links =links - }) - } - - }, - data: function() { - return { - dbInfo:'', - consoleResult:'', - loadingLinks: false, - drawer: true, - addLinkDialog: false, - linkForm: { - name:"", - host:"", - port:"", - user:"", - password:"", - }, - activeTab:"1", - - surperTableFilterCopy:{}, - - surperTableFilter:{ - fields:[], - surperDateRange:[], - surperTSearchText: "", - surperTSearchColumn: "", - }, - - tableFilterCopy:{}, - tableFilter:{ - fields:[], - dateRange:[], - tableSearchText:"", - tableSearchColumn:"", - }, - surperWhere:"", - tableWhere:"", - - tableFilterDialog:false, - surperTableFilterDialog:false, - - surperTables: [], //超级表list - surperTableData: [], - surperTableName: "", - totalSurperTable: 0, - surperTableLabelItems: [], - surperTableLabel: [], - loadingSurperList: false, - loadingSurperTable: false, - - tables: [], //表list - tableData: [], - tableName: "", - totalTable: 0, - tableLabelItems: [], - tableLabel: [], - loadingTableList: false, - loadingTable: false, - - eachPageSurperTable:10, - currentPageSurperTable:1, - eachPageTable:10, - currentPageTable:1, - - addDBDialogLinkKey:0, - addDBDialog:false, - addDBname:"", - addDBcomp:"", - addDBreplica:"", - addDBkeep:"", - addDBupdate:false, - addDBquorum:"", - addDBblocks:"", - - searchIcon: true, - freshIcon: true, - links:[], - theLink:{}, //当前连接 - theDB: "", //当前数据库 - - SuperTdialog: false, - SuperTdialogText: "", - Tdialog: false, - TdialogText: "", - - surperTorder:"ASC", - Torder:"ASC", - consoleInput: "", - marks: { - 0: '0', - 365: '365', - 36500: '36500' - } - } - }, - methods: { - beforeClosedrawer(){ - if(this.theDB){ - this.drawer = false - } else { - this.$message({ - message: '请选择数据库', - type: 'warning', - duration:1000 - }); - } - }, - cancelAddLink() { - this.addLinkDialog = false - //清空表单 - this.linkForm={ - name:"", - host:"", - port:"", - user:"", - password:"" - } - }, - confirmAddLink(event) { - //新建连接,先连接,如果成功,将payload+name记入本地 - //var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") - let payload = { - ip:this.linkForm.host, - port:this.linkForm.port, - user:this.linkForm.user, - password:this.linkForm.password - } - TaosRestful.showDatabases(payload).then(data =>{ - //处理返回的数据库数据 - if(data.res){ - - TaosRestful.getVersion(payload).then(_data => { - //连接成功,保存到本地 - storage.AddALink({ - name: this.linkForm.name, - host: this.linkForm.host, - port: this.linkForm.port, - user: this.linkForm.user, - password: this.linkForm.password, - version: _data - }) - //关闭新建连接的弹窗 - this.addLinkDialog = false - //清空表单 - this.linkForm={ - name:"", - host:"", - port:"", - user:"", - password:"", - } - - //更新连接列表 - this.links = storage.getLinks() - }) - - } else { - //连接失败 - this.$message({ - message: '连接失败', - type: 'error', - duration:1000 - }); - } - - } - ) - - }, - deleteLink(key, linkName){ - this.$confirm('确认删除连接' + linkName + "吗?") - .then(_ => { - storage.deleteALink(key) - this.links = storage.getLinks() - this.$message({ - message: '删除成功', - type: 'success', - duration:500 - }); - }) - .catch(_ => { - this.$message({ - message: '操作已取消', - type: 'warning', - duration:500 - }); - }); - }, - freshDB(key){ - let theLink = this.links[key] - let payload = { - ip:theLink.host, - port:theLink.port, - user:theLink.user, - password:theLink.password - } - this.loadingLinks = true - TaosRestful.showDatabases(payload).then(data =>{ - this.loadingLinks = false - if(data.res){ - this.$message({ - message: '刷新成功', - type: 'success', - duration:1000 - }); - this.links[key].dbs = data.data - //TODO展开菜单 - - } else { - //连接失败,1.提示 2.删除当前连接 3.重新连接 - //1 - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - //2 - storage.deleteALink(key) - this.links = storage.getLinks() - //3 - this.$message({ - message: '尝试重新连接', - type: 'warning', - duration:1000 - }); - this.linkForm = { - name: theLink.name, - host: theLink.host, - port: theLink.port, - user: theLink.user, - password: theLink.password, - } - this.addLinkDialog = true - } - }) - }, - addDB(key){ - this.addDBDialogLinkKey = key - this.addDBDialog = true - - this.addDBname = "" - this.addDBcomp = "" - this.addDBreplica = "" - this.addDBkeep = "" - this.addDBupdate = false - this.addDBquorum = "" - this.addDBblocks = "" - }, - postaddDB(){ - let key = this.addDBDialogLinkKey - let theLink = this.links[key] - let payload = { - ip:theLink.host, - port:theLink.port, - user:theLink.user, - password:theLink.password - } - if(this.addDBname){ - if(this.addDBreplica && this.addDBquorum){ - if(this.addDBreplica < this.addDBquorum){ - this.$message({ - message: 'replica应大于等于quorum', - type: 'error', - duration:1000 - }); - return - } - } - TaosRestful.createDatabase(this.addDBname, payload,safe=true,keep= this.addDBkeep,update=this.addDBupdate,comp=this.addDBcomp, replica=this.addDBreplica,quorum=this.addDBquorum,blocks=this.addDBblocks).then(data => { - if(data.res){ - //新增成功 - this.$message({ - message: '添加成功', - type: 'success', - duration:1000 - }); - this.freshDB(key) - this.addDBDialog = false - }else{ - //添加失败 - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - }) - } else{ - this.$message({ - message: '请填写内容', - type: 'warning', - duration:1000 - }); - } - }, - deleteDB(link, dbName, key){ - this.$confirm('确认删除数据库' + dbName + "吗?") - .then(_ => { - let payload = { - ip:link.host, - port:link.port, - user:link.user, - password:link.password - } - this.loadingLinks = true - - TaosRestful.dropDatabase(dbName, payload).then(data => { - - if(data.res){ - //成功 - this.$message({ - message: '删除成功', - type: 'success', - duration:1000 - }); - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - this.loadingLinks = false - this.freshDB(key) - }) - }) - .catch(_ => { - this.$message({ - message: '操作已取消', - type: 'warning', - duration:1000 - }); - }); - }, - makeDbInfo(dbs,dbName){ - console.log(dbs) - let info = '无法获取数据库信息' - dbs.forEach(item => { - if(item['name'] == dbName){ - info = `数据库名:  ${dbName}
` - info += `创建时间:  ${item['created_time']}
` - info += `可更新:  ${item['update'] == 0?'否':'是'}
` - info += `cache(MB):  ${item['cache(MB)']}
` - info += `cachelast:  ${item['cachelast']}
` - info += `comp:  ${item['comp']}
` - info += `days:  ${item['days']}
` - info += `fsync:  ${item['fsync']}
` - info += `keep0,keep1,keep(D):  ${item['keep0,keep1,keep(D)']}
` - info += `maxrows:  ${item['maxrows']}
` - info += `minrows:  ${item['minrows']}
` - info += `ntables:  ${item['ntables']}
` - info += `quorum:  ${item['quorum']}
` - info += `replica:  ${item['replica']}
` - info += `status:  ${item['status']}
` - info += `vgroups:  ${item['vgroups']}
` - info += `wallevel:  ${item['wallevel']}
` - info += `precision:  ${item['precision']}
` - } - }) - return info - }, - alartDB(link,dbName){ - //切换数据库前先清空表 - this.dbInfo=this.makeDbInfo(link.dbs,dbName) - this.surperTables = [] - this.clearSurperTable() - this.tables = [] - this.clearTable() - - //记录进入的数据库 - this.theLink = link - this.theDB = dbName - - //更新超级表页 - this.drawer = false - this.activeTab = "1" - this.freshSurperTables() - }, - searchSurperTList(){ - this.SuperTdialog = false - this.surperTables = [] - this.clearSurperTable() - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingSurperList = true - TaosRestful.showSuperTables(this.theDB, payload, like=this.SuperTdialogText).then(data =>{ - if(data.res){ - //拉取超级表成功 - this.$message({ - message: '查找成功', - type: 'success', - duration:1000 - }); - this.surperTables = data.data - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - this.freshSurperTables() - } - this.SuperTdialogText = "" - this.loadingSurperList = false - }) - - }, - freshSurperTList(){ - this.surperTables = [] - this.clearSurperTable() - this.freshSurperTables() - }, - searchTList(){ - this.Tdialog = false - this.tables = [] - this.clearTable() - - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingTableList = true - TaosRestful.showTables(this.theDB, payload, like=this.TdialogText).then(data =>{ - if(data.res){ - //拉取表成功 - this.$message({ - message: '查找成功', - type: 'success', - duration:1000 - }); - this.tables = data.data - }else{ - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - this.freshTables() - - } - this.TdialogText = "" - this.loadingTableList = false - }) - }, - freshTList(){ - this.tables = [] - this.clearTable() - this.freshTables() - }, - clearSurperTable(){ - this.surperTableName = "" - this.totalSurperTable = 0 - this.surperTableData = [] - this.surperTableLabel = [] - this.surperTableFilter={ - fields:[], - surperDateRange:[], - surperTSearchText: "", - surperTSearchColumn: "", - } - }, - clearTable(){ - this.tableName = "" - this.totalTable = 0 - this.tableData = [] - this.tableLabel = [] - this.tableFilter={ - fields:[], - dateRange:[], - tableSearchText:"", - tableSearchColumn:"", - } - }, - freshSurperTables(){ - //清理超级表列表 - this.surperTables = [] - //清理选中的超级表和具体数据 - this.clearSurperTable() - - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingSurperList = true - TaosRestful.showSuperTables(this.theDB, payload).then(data =>{ - if(data.res){ - //拉取超级表成功 - this.$message({ - message: '刷新成功', - type: 'success', - duration:1000 - }); - this.surperTables = data.data - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - this.loadingSurperList = false - }) - }, - freshTables(){ - //清理表列表 - this.tables = [] - //清理选中的表和具体数据 - this.clearTable() - - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingTableList = true - TaosRestful.showTables(this.theDB, payload).then(data =>{ - if(data.res){ - //拉取表成功 - this.$message({ - message: '刷新成功', - type: 'success', - duration:1000 - }); - this.tables = data.data - }else{ - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - this.loadingTableList = false - }) - }, - handleSwichTab(tab) { - switch(tab.name) { - case "1": - //超级表 - this.freshSurperTables() - break; - case "2": - //表 - this.freshTables() - break; - case "3": - //控制台 - break; - case "4": - //数据库属性 - break; - } - }, - openSurperTableFilterD(){ - this.surperTableFilterDialog = true - this.surperTableFilterCopy = JSON.parse(JSON.stringify(this.surperTableFilter)) - }, - concelSurperTableFilter(){ - this.$message({ - message: '取消操作', - type: 'warning', - duration:1000 - }); - this.surperTableFilterDialog = false - this.surperTableFilter = this.surperTableFilterCopy - }, - postSurperTableFilter(){ - this.surperTableFilterDialog = false - this.selectSurperData(false) - }, - openTableFilterD(){ - this.tableFilterDialog = true - this.tableFilterCopy = JSON.parse(JSON.stringify(this.tableFilter)) - }, - concelTableFilter(){ - this.$message({ - message: '取消操作', - type: 'warning', - duration:1000 - }); - this.tableFilterDialog = false - this.tableFilter = this.tableFilterCopy - }, - postTableFilter(){ - this.tableFilterDialog = false - this.selectTData(false) - }, - searchSurperText(){ - if(this.surperTableFilter.surperTSearchColumn && this.surperTableFilter.surperTSearchText.trim()){ - // this.surperWhere = this.surperTSearchColumn + " > " + this.surperTSearchText.trim()+"%" - // this.clearSurperTable() - let surperTSearchText = this.surperTableFilter.surperTSearchText.trim() - if(!isNaN(surperTSearchText)){ - this.surperWhere =this.surperTableFilter.surperTSearchColumn + " = " + surperTSearchText - } else { - this.surperWhere =this.surperTableFilter.surperTSearchColumn + " = '" + surperTSearchText +"'" - } - - this.selectSurperData(false) - } else { - this.surperWhere = "" - this.$message({ - message: '请填写正确', - type: 'warning', - duration:1000 - }); - this.selectSurperData(false) - } - }, - searchTableText(){ - if(this.tableFilter.tableSearchColumn && this.tableFilter.tableSearchText.trim()){ - - let tableSearchText = this.tableFilter.tableSearchText.trim() - if(!isNaN(tableSearchText)){ - this.tableWhere =this.tableFilter.tableSearchColumn + " = " + tableSearchText - } else { - this.tableWhere =this.tableFilter.tableSearchColumn + " = '" + tableSearchText +"'" - } - - this.selectTData(false) - } else { - this.tableWhere = "" - this.$message({ - message: '请填写正确', - type: 'warning', - duration:1000 - }); - this.selectTData(false) - } - }, - selectSurperData(isFirst, isResetPage){ - - //处理时间范围 - let startTime = null - let endTime = null - if(this.surperTableFilter.surperDateRange){ - startTime = this.surperTableFilter.surperDateRange[0]; - endTime = this.surperTableFilter.surperDateRange[1]; - } - - //是否需要重置分页 - if(isResetPage){ - this.currentPageSurperTable = 1 - } - - let offsetVal = (this.currentPageSurperTable-1)*this.eachPageSurperTable - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingSurperTable = true - - //处理查询数据 - // if(!this.surperTableFilter.surperTSearchText.trim()){ - // this.surperWhere = "" - // } - - //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null - TaosRestful.selectData(this.surperTableName, this.theDB, payload, fields=this.surperTableFilter.fields, where=this.surperWhere - , limit=this.eachPageSurperTable, offset=offsetVal, desc=this.surperTorder, startTime=startTime, endTime=endTime) - .then(data =>{ - if(data.res){ - //成功 - if(data.data.length != 0){ - //有数据 - this.$message({ - message: '获取成功', - type: 'success', - duration:1000 - }); - if(isFirst){ - this.surperTableLabelItems = Object.keys(data.data[0]) - } - this.surperTableLabel = Object.keys(data.data[0]) - this.surperTableFilter.fields = Object.keys(data.data[0]) - this.surperTableData = data.data - this.totalSurperTable = data.count - } else { - this.surperTableLabel = [] - this.surperTableData = data.data - this.totalSurperTable = data.count - this.$message({ - message: '无数据', - type: 'warning', - duration:1000 - }); - } - }else{ - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - this.loadingSurperTable = false - - }) - }, - selectTData(isFirst, isResetPage=false){ - - //处理时间范围 - let startTime = null - let endTime = null - if(this.tableFilter.dateRange){ - startTime = this.tableFilter.dateRange[0]; - endTime = this.tableFilter.dateRange[1]; - } - - if(isResetPage){ - this.currentPageTable = 1 - } - - let offsetVal = (this.currentPageTable-1)*this.eachPageTable - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingTable = true - - // if(!this.tableFilter.tableSearchText.trim()){ - // this.tableWhere = "" - // } - - //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null - TaosRestful.selectData(this.tableName, this.theDB, payload, fields=this.tableFilter.fields, where=this.tableWhere - , limit=this.eachPageTable, offset=offsetVal, desc=this.Torder, startTime=startTime, endTime=endTime) - .then(data =>{ - if(data.res){ - //成功 - if(data.data.length != 0){ - //有数据 - this.$message({ - message: '获取成功', - type: 'success', - duration:1000 - }); - if(isFirst){ - this.tableLabelItems = Object.keys(data.data[0]) - } - this.tableLabel = Object.keys(data.data[0]) - this.tableFilter.fields = Object.keys(data.data[0]) - this.tableData = data.data - this.totalTable = data.count - } else { - this.tableLabel = [] - this.tableData = data.data - this.totalTable = data.count - this.$message({ - message: '无数据', - type: 'warning', - duration:1000 - }); - } - } - this.loadingTable = false - }) - }, - surTableFilter(){ - this.selectSurperData(0) - }, - handleClickSurperT(val) { - if(val){ - this.clearSurperTable() - this.surperTableName = val.name - this.selectSurperData(true) - } - }, - handleClickT(val) { - if(val){ - this.clearTable() - this.tableName = val.table_name - this.selectTData(true) - } - }, - paginationSurperChange(){ - this.selectSurperData(false) - }, - paginationChange(){ - this.selectTData(false) - }, - editSurperT(val) { - console.log(val) - }, - deleteSurperT(val) { - this.$confirm('确认删除超级表' + val + "吗?") - .then(_ => { - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingSurperList = true - - //TODO没测试过 - TaosRestful.dropTable(val, this.theDB, payload).then(data => { - - if(data.res){ - //成功 - this.$message({ - message: '删除成功', - type: 'success', - duration:500 - }); - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:500 - }); - } - this.loadingSurperList = false - this.freshSurperTables() - }) - - }) - .catch(_ => { - this.$message({ - message: '操作已取消', - type: 'warning', - duration:500 - }); - }); - }, - editT(val) { - console.log(val) - }, - deleteT(val) { - this.$confirm('确认删除表' + val + "吗?") - .then(_ => { - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - this.loadingTableList = true - - //TODO没测试过 - TaosRestful.dropTable(val, this.theDB, payload).then(data => { - - if(data.res){ - //成功 - this.$message({ - message: '删除成功', - type: 'success', - duration:500 - }); - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:500 - }); - } - this.loadingTableList = false - this.freshTables() - }) - - }) - .catch(_ => { - this.$message({ - message: '操作已取消', - type: 'warning', - duration:500 - }); - }); - }, - sendSQL(){ - let payload = { - ip:this.theLink.host, - port:this.theLink.port, - user:this.theLink.user, - password:this.theLink.password - } - // console.log(this.theDB) - TaosRestful.rawSqlWithDB(this.consoleInput,this.theDB,payload).then(data => { - if(data.res){ - // let info = '' - // info += `数据数量:  ${data.count}
` - // info += `数据列:  ${data.head}
` - // info += `数据:  ${data.data}
` - this.$message({ - message: '执行成功', - type: 'success', - duration:500 - }); - this.consoleResult = data - } else { - this.$message({ - message: data.msg, - type: 'error', - duration:1000 - }); - } - - }) - }, - closeSuperTdialog(){ - this.SuperTdialogText = "" - this.SuperTdialog = false - }, - closeTdialog(){ - this.TdialogText = "" - this.Tdialog = false - }, - STChooseAll(){ - this.surperTableFilter.fields = this.surperTableLabelItems - }, - STChooseReverse(){ - let newFields = this.surperTableLabelItems.filter((item) => { - return this.surperTableFilter ? this.surperTableFilter.fields.indexOf(item) == -1 : false; - }) - this.surperTableFilter.fields = newFields - }, - TChooseAll(){ - this.tableFilter.fields = this.tableLabelItems - }, - TChooseReverse(){ - let newFields = this.tableLabelItems.filter((item) => { - return this.tableLabelItems.fields? this.tableLabelItems.fields.indexOf(item) == -1: false; - }) - this.tableFilter.fields = newFields - } - - } - }) - - - \ No newline at end of file diff --git a/renderer/js/electronStore.js b/renderer/js/electronStore.js new file mode 100644 index 0000000..69052f7 --- /dev/null +++ b/renderer/js/electronStore.js @@ -0,0 +1,42 @@ +//持久化存储 +const Store = require('electron-store'); + +let store = new Store(); + +const getLinks = () => { + let links = store.get("links"); + links = links ? links : [] + return links; +} + +const setLinks = (links) => { + return store.set("links", links); +} + +const deleteALink = (key) => { + let links = getLinks(); + links.splice(key, 1) + return setLinks(links) +} + +const addALink = (link) => { + //添加一个连接,如果本地存了,就更新,没存新增 + let links = getLinks() + for (let i = 0; i < links.length; i++) { + if (link.host === links[i].host && link.port === links[i].port) { + //更新 + links[i] = link + return setLinks(links) + } + } + //新增 + links.push(link) + return setLinks(links) +} + +Vue.prototype.$electronStore = { + getLinks, + setLinks, + deleteALink, + addALink +}; diff --git a/renderer/js/index.js b/renderer/js/index.js new file mode 100644 index 0000000..119ba9d --- /dev/null +++ b/renderer/js/index.js @@ -0,0 +1,915 @@ +const TaosRestful = require('./taosrestful_.js') +require('./electronStore.js') +const {TouchBarScrubber} = require('electron') + +new Vue({ + el: '#app', + mounted: function () { + let _this = this; + this.$data.links = this.$electronStore.getLinks() + this.$nextTick(() => { + window.onresize = function listen() { + _this.contentTableHeight = window.innerHeight * 0.74; + } + }) + }, + data: function () { + return { + dbInfo: '', + consoleResult: '', + loadingLinks: false, + drawer: true, + addLinkDialog: false, + addOrEditTitle: '新建连接', + linkForm: { + name: "", + host: "", + port: "", + user: "", + password: "", + }, + activeTab: "1", + + surperTableFilterCopy: {}, + + surperTableFilter: { + fields: [], + surperDateRange: [], + surperTSearchText: "", + surperTSearchColumn: "", + }, + + tableFilterCopy: {}, + tableFilter: { + fields: [], + dateRange: [], + tableSearchText: "", + tableSearchColumn: "", + }, + surperWhere: "", + tableWhere: "", + + tableFilterDialog: false, + surperTableFilterDialog: false, + + contentTableHeight: window.innerHeight * 0.74, + + surperTables: [], //超级表list + surperTableData: [], + surperTableName: "", + totalSurperTable: 0, + surperTableLabelItems: [], + surperTableLabel: [], + loadingSurperList: false, + loadingSurperTable: false, + + tables: [], //表list + tableData: [], + tableName: "", + totalTable: 0, + tableLabelItems: [], + tableLabel: [], + loadingTableList: false, + loadingTable: false, + + eachPageSurperTable: 30, + currentPageSurperTable: 1, + eachPageTable: 30, + currentPageTable: 1, + + addDBDialogLinkKey: 0, + addDBDialog: false, + addDBname: "", + addDBcomp: "", + addDBreplica: "", + addDBkeep: "", + addDBupdate: "", + addDBquorum: "", + addDBblocks: "", + + searchIcon: true, + freshIcon: true, + links: [], + theLink: {}, //当前连接 + theDB: "", //当前数据库 + + SuperTdialog: false, + SuperTdialogText: "", + Tdialog: false, + TdialogText: "", + + surperTorder: "ASC", + Torder: "ASC", + consoleInput: "", + marks: { + 0: '0', + 365: '365', + 36500: '36500' + } + } + }, + methods: { + beforeClosedrawer() { + if (this.theDB) { + this.drawer = false + } else { + this.$message({ + message: '请选择数据库', + type: 'warning', + duration: 1000 + }); + } + }, + cancelAddLink() { + this.addLinkDialog = false + this.addOrEditTitle = '新建连接' + this.clearLinkForm(); + }, + clearLinkForm() { + //清空表单 + this.linkForm = { + name: "", + host: "", + port: "", + user: "", + password: "" + } + }, + formatBoolean(data) { + data.forEach(item => { + for (let i in item) { + if (item[i] === true) { + item[i] = 'true' + } else if (item[i] === false) { + item[i] = 'false' + } + } + }) + }, + /** 复制代码成功 */ + clipboardSuccess() { + this.$message({ + message: '复制成功', + type: 'success', + duration: 500 + }); + }, + confirmAddLink(event) { + //新建连接,先连接,如果成功,将payload+name记入本地 + //var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") + let payload = { + ip: this.linkForm.host, + port: this.linkForm.port, + user: this.linkForm.user, + password: this.linkForm.password + } + TaosRestful.showDatabases(payload).then(data => { + //处理返回的数据库数据 + if (data.res) { + + TaosRestful.getVersion(payload).then(_data => { + //连接成功,保存到本地 + this.$electronStore.addALink({ + name: this.linkForm.name, + host: this.linkForm.host, + port: this.linkForm.port, + user: this.linkForm.user, + password: this.linkForm.password, + version: _data + }) + //更新连接列表 + this.links = this.$electronStore.getLinks() + //关闭新建连接的弹窗 + this.addLinkDialog = false + this.addOrEditTitle = '新建连接' + //清空表单 + this.clearLinkForm(); + }) + } else { + //连接失败 + this.$message({ + message: '连接失败', + type: 'error', + duration: 1000 + }); + } + } + ) + }, + deleteLink(key, linkName) { + this.$confirm('确认删除连接' + linkName + "吗?") + .then(_ => { + this.$electronStore.deleteALink(key) + this.links = this.$electronStore.getLinks() + this.$message({ + message: '删除成功', + type: 'success', + duration: 500 + }); + }) + }, + freshDB(key) { + let _this = this; + let theLink = this.links[key] + let payload = { + ip: theLink.host, + port: theLink.port, + user: theLink.user, + password: theLink.password + } + this.loadingLinks = true + TaosRestful.showDatabases(payload).then(data => { + this.loadingLinks = false + if (data.res) { + this.$message({ + message: '刷新成功', + type: 'success', + duration: 1000 + }); + this.links[key].dbs = data.data + + TaosRestful.getVersion(payload).then(data => { + theLink.version = data + _this.$data.links[key] = theLink + if (TaosRestful.compareVersion(data, theLink.version)) { + this.$electronStore.addALink({ + name: theLink.name, + host: theLink.host, + port: theLink.port, + user: theLink.user, + password: theLink.password, + version: data + }) + } + }) + + //TODO展开菜单 + + } else { + //连接失败,直接提示 + this.$message({ + message: "连接失败,请稍后重试", + type: 'error', + duration: 1000 + }); + } + }) + }, + addDB(key) { + this.addDBDialogLinkKey = key + this.addDBDialog = true + + this.addDBname = "" + this.addDBcomp = 2 + this.addDBreplica = 1 + this.addDBkeep = 3650 + this.addDBupdate = 0 + this.addDBquorum = 1 + this.addDBblocks = 6 + }, + editDB(key) { + let theLink = this.links[key] + this.linkForm = { + name: theLink.name, + host: theLink.host, + port: theLink.port, + user: theLink.user, + password: theLink.password, + } + this.addOrEditTitle = '编辑连接' + this.addLinkDialog = true + }, + postaddDB() { + let key = this.addDBDialogLinkKey + let theLink = this.links[key] + let payload = { + ip: theLink.host, + port: theLink.port, + user: theLink.user, + password: theLink.password + } + if (this.addDBname) { + if (this.addDBreplica && this.addDBquorum) { + if (this.addDBreplica < this.addDBquorum) { + this.$message({ + message: 'replica应大于等于quorum', + type: 'error', + duration: 1000 + }); + return + } + } + TaosRestful.createDatabase(this.addDBname, payload, safe = true, keep = this.addDBkeep, + update = this.addDBupdate, comp = this.addDBcomp, replica = this.addDBreplica, + quorum = this.addDBquorum, blocks = this.addDBblocks, theLink.version).then(data => { + if (data.res) { + //新增成功 + this.$message({ + message: '添加成功', + type: 'success', + duration: 1000 + }); + this.freshDB(key) + this.addDBDialog = false + } else { + //添加失败 + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + }) + } else { + this.$message({ + message: '请填写内容', + type: 'warning', + duration: 1000 + }); + } + }, + deleteDB(link, dbName, key) { + this.$confirm('确认删除数据库' + dbName + "吗?") + .then(_ => { + let payload = { + ip: link.host, + port: link.port, + user: link.user, + password: link.password + } + this.loadingLinks = true + + TaosRestful.dropDatabase(dbName, payload).then(data => { + + if (data.res) { + //成功 + this.$message({ + message: '删除成功', + type: 'success', + duration: 1000 + }); + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + this.loadingLinks = false + this.freshDB(key) + }) + }) + }, + makeDbInfo(dbs, dbName) { + // console.log(dbs) + let info = '无法获取数据库信息' + dbs.forEach(item => { + if (item['name'] === dbName) { + info = `数据库名:  ${dbName}
` + info += `创建时间:  ${item['created_time']}
` + info += `update:  ${item['update'] > 0 ? (item['update'] === 1 ? '允许整行更新' : '允许部分列更新' ) : '不允许更新'}
` + info += `cache(MB):  ${item['cache(MB)']}
` + info += `cachelast:  ${item['cachelast']}
` + info += `comp:  ${item['comp']}
` + info += `days:  ${item['days']}
` + info += `fsync:  ${item['fsync']}
` + info += `keep1,keep2,keep(D):  ${item['keep1,keep2,keep(D)']}
` + info += `maxrows:  ${item['maxrows']}
` + info += `minrows:  ${item['minrows']}
` + info += `ntables:  ${item['ntables']}
` + info += `quorum:  ${item['quorum']}
` + info += `replica:  ${item['replica']}
` + info += `status:  ${item['status']}
` + info += `vgroups:  ${item['vgroups']}
` + info += `wallevel:  ${item['wallevel']}
` + info += `precision:  ${item['precision']}
` + } + }) + return info + }, + alartDB(link, dbName) { + //切换数据库前先清空表 + this.dbInfo = this.makeDbInfo(link.dbs, dbName) + this.surperTables = [] + this.clearSurperTable() + this.tables = [] + this.clearTable() + + //记录进入的数据库 + this.theLink = link + this.theDB = dbName + + //更新超级表页 + this.drawer = false + this.activeTab = "1" + this.freshSurperTables() + }, + searchSurperTList() { + this.SuperTdialog = false + this.surperTables = [] + this.clearSurperTable() + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingSurperList = true + TaosRestful.showSuperTables(this.theDB, payload, like = this.SuperTdialogText).then(data => { + if (data.res) { + //拉取超级表成功 + this.$message({ + message: '查找成功', + type: 'success', + duration: 1000 + }); + this.surperTables = data.data + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + this.freshSurperTables() + } + this.SuperTdialogText = "" + this.loadingSurperList = false + }) + + }, + freshSurperTList() { + this.surperTables = [] + this.clearSurperTable() + this.freshSurperTables() + }, + searchTList() { + this.Tdialog = false + this.tables = [] + this.clearTable() + + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingTableList = true + TaosRestful.showTables(this.theDB, payload, like = this.TdialogText).then(data => { + if (data.res) { + //拉取表成功 + this.$message({ + message: '查找成功', + type: 'success', + duration: 1000 + }); + this.tables = data.data + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + this.freshTables() + + } + this.TdialogText = "" + this.loadingTableList = false + }) + }, + freshTList() { + this.tables = [] + this.clearTable() + this.freshTables() + }, + clearSurperTable() { + this.surperTableName = "" + this.totalSurperTable = 0 + this.surperTableData = [] + this.surperTableLabel = [] + this.surperTableFilter = { + fields: [], + surperDateRange: [], + surperTSearchText: "", + surperTSearchColumn: "", + } + }, + clearTable() { + this.tableName = "" + this.totalTable = 0 + this.tableData = [] + this.tableLabel = [] + this.tableFilter = { + fields: [], + dateRange: [], + tableSearchText: "", + tableSearchColumn: "", + } + }, + freshSurperTables() { + //清理超级表列表 + this.surperTables = [] + //清理选中的超级表和具体数据 + this.clearSurperTable() + + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingSurperList = true + TaosRestful.showSuperTables(this.theDB, payload).then(data => { + if (data.res) { + this.surperTables = data.data + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + this.loadingSurperList = false + }) + }, + freshTables() { + //清理表列表 + this.tables = [] + //清理选中的表和具体数据 + this.clearTable() + + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingTableList = true + TaosRestful.showTables(this.theDB, payload).then(data => { + if (data.res) { + this.tables = data.data + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + this.loadingTableList = false + }) + }, + handleSwichTab(tab) { + switch (tab.name) { + case "1": + //超级表 + this.freshSurperTables() + break; + case "2": + //表 + this.freshTables() + break; + case "3": + //控制台 + break; + case "4": + //数据库属性 + break; + } + }, + openSurperTableFilterD() { + this.surperTableFilterDialog = true + this.surperTableFilterCopy = JSON.parse(JSON.stringify(this.surperTableFilter)) + }, + concelSurperTableFilter() { + this.surperTableFilterDialog = false + this.surperTableFilter = this.surperTableFilterCopy + }, + postSurperTableFilter() { + this.surperTableFilterDialog = false + this.selectSurperData(false) + }, + openTableFilterD() { + this.tableFilterDialog = true + this.tableFilterCopy = JSON.parse(JSON.stringify(this.tableFilter)) + }, + concelTableFilter() { + this.tableFilterDialog = false + this.tableFilter = this.tableFilterCopy + }, + postTableFilter() { + this.tableFilterDialog = false + this.selectTData(false) + }, + searchSurperText() { + if (this.surperTableFilter.surperTSearchColumn && this.surperTableFilter.surperTSearchText.trim()) { + // this.surperWhere = this.surperTSearchColumn + " > " + this.surperTSearchText.trim()+"%" + // this.clearSurperTable() + let surperTSearchText = this.surperTableFilter.surperTSearchText.trim() + if (!isNaN(surperTSearchText)) { + this.surperWhere = this.surperTableFilter.surperTSearchColumn + " = " + surperTSearchText + } else { + this.surperWhere = this.surperTableFilter.surperTSearchColumn + " = '" + surperTSearchText + "'" + } + + this.selectSurperData(false) + } else { + this.surperWhere = "" + this.$message({ + message: '请填写正确', + type: 'warning', + duration: 1000 + }); + this.selectSurperData(false) + } + }, + searchTableText() { + if (this.tableFilter.tableSearchColumn && this.tableFilter.tableSearchText.trim()) { + + let tableSearchText = this.tableFilter.tableSearchText.trim() + if (!isNaN(tableSearchText)) { + this.tableWhere = this.tableFilter.tableSearchColumn + " = " + tableSearchText + } else { + this.tableWhere = this.tableFilter.tableSearchColumn + " = '" + tableSearchText + "'" + } + + this.selectTData(false) + } else { + this.tableWhere = "" + this.$message({ + message: '请填写正确', + type: 'warning', + duration: 1000 + }); + this.selectTData(false) + } + }, + selectSurperData(isFirst, isResetPage) { + + //处理时间范围 + let startTime = null + let endTime = null + if (this.surperTableFilter.surperDateRange) { + startTime = this.surperTableFilter.surperDateRange[0]; + endTime = this.surperTableFilter.surperDateRange[1]; + } + + //是否需要重置分页 + if (isResetPage) { + this.currentPageSurperTable = 1 + } + + let offsetVal = (this.currentPageSurperTable - 1) * this.eachPageSurperTable + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingSurperTable = true + + //处理查询数据 + // if(!this.surperTableFilter.surperTSearchText.trim()){ + // this.surperWhere = "" + // } + + //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null + TaosRestful.selectData(this.surperTableName, this.theDB, payload, fields = this.surperTableFilter.fields, + where = this.surperWhere, limit = this.eachPageSurperTable, offset = offsetVal, + desc = this.surperTorder, startTime = startTime, endTime = endTime) + .then(data => { + if (data.res) { + //成功 + if (data.data.length !== 0) { + if (isFirst) { + this.surperTableLabelItems = Object.keys(data.data[0]) + } + this.surperTableLabel = Object.keys(data.data[0]) + this.surperTableFilter.fields = Object.keys(data.data[0]) + this.formatBoolean(data.data) + this.surperTableData = data.data + this.totalSurperTable = data.count + } else { + this.surperTableLabel = [] + this.formatBoolean(data.data) + this.surperTableData = data.data + this.totalSurperTable = data.count + this.$message({ + message: '无数据', + type: 'warning', + duration: 1000 + }); + } + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + this.loadingSurperTable = false + + }) + }, + selectTData(isFirst, isResetPage = false) { + + //处理时间范围 + let startTime = null + let endTime = null + if (this.tableFilter.dateRange) { + startTime = this.tableFilter.dateRange[0]; + endTime = this.tableFilter.dateRange[1]; + } + + if (isResetPage) { + this.currentPageTable = 1 + } + + let offsetVal = (this.currentPageTable - 1) * this.eachPageTable + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingTable = true + + // if(!this.tableFilter.tableSearchText.trim()){ + // this.tableWhere = "" + // } + + //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null + TaosRestful.selectData(this.tableName, this.theDB, payload, fields = this.tableFilter.fields, + where = this.tableWhere, limit = this.eachPageTable, offset = offsetVal, + desc = this.Torder, startTime = startTime, endTime = endTime) + .then(data => { + if (data.res) { + //成功 + if (data.data.length !== 0) { + if (isFirst) { + this.tableLabelItems = Object.keys(data.data[0]) + } + this.tableLabel = Object.keys(data.data[0]) + this.tableFilter.fields = Object.keys(data.data[0]) + this.formatBoolean(data.data) + this.tableData = data.data + this.totalTable = data.count + } else { + this.tableLabel = [] + this.formatBoolean(data.data) + this.tableData = data.data + this.totalTable = data.count + this.$message({ + message: '无数据', + type: 'warning', + duration: 1000 + }); + } + } + this.loadingTable = false + }) + }, + surTableFilter() { + this.selectSurperData(0) + }, + handleClickSurperT(val) { + if (val) { + this.clearSurperTable() + this.surperTableName = val.name + this.selectSurperData(true) + } + }, + handleClickT(val) { + if (val) { + this.clearTable() + this.tableName = val.table_name + this.selectTData(true) + } + }, + paginationSurperChange() { + this.selectSurperData(false) + }, + paginationChange() { + this.selectTData(false) + }, + editSurperT(val) { + console.log(val) + }, + deleteSurperT(val) { + this.$confirm('确认删除超级表' + val + "吗?") + .then(_ => { + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingSurperList = true + + //TODO没测试过 + TaosRestful.dropTable(val, this.theDB, payload).then(data => { + + if (data.res) { + //成功 + this.$message({ + message: '删除成功', + type: 'success', + duration: 500 + }); + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 500 + }); + } + this.loadingSurperList = false + this.freshSurperTables() + }) + + }) + }, + editT(val) { + console.log(val) + }, + deleteT(table_name) { + this.$confirm('确认删除表' + table_name + "吗?") + .then(_ => { + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + this.loadingTableList = true + + //TODO没测试过 + TaosRestful.dropTable(table_name, this.theDB, payload).then(data => { + + if (data.res) { + //成功 + this.$message({ + message: '删除成功', + type: 'success', + duration: 500 + }); + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 500 + }); + } + this.loadingTableList = false + this.freshTables() + }) + }) + }, + sendSQL() { + let payload = { + ip: this.theLink.host, + port: this.theLink.port, + user: this.theLink.user, + password: this.theLink.password + } + TaosRestful.rawSql(this.consoleInput, payload).then(data => { + if (data.res) { + this.consoleResult = data + } else { + this.$message({ + message: data.msg, + type: 'error', + duration: 1000 + }); + } + }) + }, + closeSuperTdialog() { + this.SuperTdialogText = "" + this.SuperTdialog = false + }, + closeTdialog() { + this.TdialogText = "" + this.Tdialog = false + }, + STChooseAll() { + this.surperTableFilter.fields = this.surperTableLabelItems + }, + STChooseReverse() { + let newFields = this.surperTableLabelItems.filter((item) => { + return this.surperTableFilter ? this.surperTableFilter.fields.indexOf(item) == -1 : false; + }) + this.surperTableFilter.fields = newFields + }, + TChooseAll() { + this.tableFilter.fields = this.tableLabelItems + }, + TChooseReverse() { + let newFields = this.tableLabelItems.filter((item) => { + return this.tableLabelItems.fields ? this.tableLabelItems.fields.indexOf(item) == -1 : false; + }) + this.tableFilter.fields = newFields + } + + } +}) + + diff --git a/renderer/js/taosrestful.js b/renderer/js/taosrestful.js new file mode 100644 index 0000000..9eda859 --- /dev/null +++ b/renderer/js/taosrestful.js @@ -0,0 +1,289 @@ +'use strict' +const axios = require('axios') + +module.exports = class TaosRestful { + constructor(ip = 'localhost', port = '6041', user = 'root', password = "taosdata", timeout = 0) { + this.ip = ip + this.port = port + this.user = user + this.password = password + this.database = 'log' + this.timeout = timeout * 1000 + } + + async sendRequest(sqlStr) { + try { + let res = await axios.post(`http://${this.ip}:${this.port}/rest/sql`, sqlStr, { + auth: { + username: this.user, + password: this.password + }, + timeout: this.timeout + }) + + if (res.data.status == 'succ') { + // console.log(res.data.data) + // console.log(res.data.rows) + // console.log(res.data.head) + let head = res.data.head + let resData = res.data.data.map(item => Object.fromEntries(head.map((a, b) => [a, item[b]]))) + return {'res': true, 'count': res.data.rows, 'data': resData} + } else { + return {'res': false, 'msg': res.data.desc, 'code': res.data.code} + } + } catch (err) { + if (err.response) { + return {'res': false, 'msg': err.response.data.desc, 'code': err.response.data.code} + } else { + return {'res': false, 'msg': 'connect error', 'code': -1} + } + + } + + } + + showDatabases() { + return this.sendRequest('SHOW DATABASES') + } + + testConnect() { + return this.sendRequest('SELECT SERVER_VERSION()').then(a => { + if (a.res === false && a.code === -1) { + return false + } else { + return true + } + } + ) + } + + getVersion() { + return this.sendRequest('SELECT SERVER_VERSION()').then(a => { + if (a.res === false) { + return a.msg + } else { + return a.data[0]['server_version()'] + } + } + ) + } + + //创建新的数据库 + createDatabase(dbName, safe = true, keep = null, update = false, comp = null, replica = null, quorum = null, blocks = null) { + let sqlStr = 'CREATE DATABASE ' + if (safe) { + sqlStr += 'IF NOT EXISTS ' + } + sqlStr += dbName + + if (keep != null) { + sqlStr += ` KEEP ${keep}` + } + if (comp != null) { + sqlStr += ` COMP ${comp}` + } + if (replica != null) { + sqlStr += ` REPLICA ${replica}` + } + if (quorum != null) { + sqlStr += ` QUORUM ${quorum}` + } + if (blocks != null) { + sqlStr += ` BLOCKS ${blocks}` + } + if (update) { + sqlStr += ` UPDATE 1` + } + // console.log(sqlStr) + return this.sendRequest(sqlStr) + } + + alterDatabase(dbName, keep = null, comp = null, replica = null, quorum = null, blocks = null) { + let sqlStr = 'ALTER DATABASE ' + sqlStr += dbName + if (keep != null) { + sqlStr += ` KEEP ${keep}` + } + if (comp != null) { + sqlStr += ` COMP ${comp}` + } + if (replica != null) { + sqlStr += ` REPLICA ${replica}` + } + if (quorum != null) { + sqlStr += ` QUORUM ${quorum}` + } + if (blocks != null) { + sqlStr += ` BLOCKS ${blocks}` + } + // console.log(sqlStr) + return this.sendRequest(sqlStr) + } + + useDatabase(dbName) { + this.database = dbName + } + + dropDatabase(dbName, safe = true) { + // console.log(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`) + return this.sendRequest(`DROP DATABASE ${safe ? 'IF EXISTS' : ''} ${dbName}`) + } + + showSuperTables(dbName = null, like = null) { + let dbN = dbName ? dbName : this.database + let likeStr = like ? ` LIKE '%${like}%'` : '' + return this.sendRequest(`SHOW ${dbN}.STABLES ${likeStr}`) + } + + showTables(dbName = null, like = null) { + let dbN = dbName ? dbName : this.database + let likeStr = like ? ` LIKE '%${like}%'` : '' + return this.sendRequest(`SHOW ${dbN}.TABLES ${likeStr}`) + } + + disTable(tableName, dbName = null) { + let dbN = dbName ? dbName : this.database + return this.sendRequest(`DESCRIBE ${dbN}.${tableName}`) + } + + dropTable(tableName, dbName = null, safe = false) { + let dbN = dbName ? dbName : this.database + return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbN}.${tableName}`) + } + + insertData(tableName, data, dbName = null) { + let dbN = dbName ? dbName : this.database + let fields = '' + let values = '' + for (const [key, value] of Object.entries(data)) { + fields += key + ',' + values += value + ',' + } + // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) + return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) + } + + timeWhere(primaryKey, where, startTime, endTime) { + where = where || '' + if (where) { + where += startTime ? ` and ${primaryKey} > '${startTime}' ` : '' + if (where) { + where += endTime ? ` and ${primaryKey} < '${endTime}' ` : '' + } else { + where += endTime ? `${primaryKey} < '${endTime}' ` : '' + } + } else { + where += startTime ? `${primaryKey} > '${startTime}' ` : '' + if (where) { + where += endTime ? ` and ${primaryKey} < '${endTime}' ` : '' + } else { + where += endTime ? `${primaryKey} < '${endTime}' ` : '' + } + } + return where + } + + countData(tableName, where = '', dbName = null, startTime = null, endTime = null) { + return this.disTable(tableName, dbName).then(res => { + let primaryKey = 'ts' + if (res.res && res.data.length > 0) { + primaryKey = res.data[0].Field + } else { + return {'res': false, 'msg': 'distable error', 'code': 99} + } + return this.countDataIn(tableName, primaryKey, where, dbName, startTime, endTime) + }) + } + + countDataIn(tableName, primaryKey, where = '', dbName = null, startTime = null, endTime = null) { + where = this.timeWhere(primaryKey, where, startTime, endTime) + let dbN = dbName ? dbName : this.database + let sqlStr = 'SELECT ' + let fieldStr = 'count(*)' + sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` + if (where) { + sqlStr += ` WHERE ${where} ` + } + // console.log(sqlStr) + return this.sendRequest(sqlStr).then(result => { + if (result.res && result.data.length > 0) { + return new Promise((resolve, reject) => { + resolve(result.data[0]['count(*)']) + }) + } else { + return new Promise((resolve, reject) => { + resolve(0) + }) + } + }) + + } + + //查询数据 + selectData(tableName, fields = null, where = '', limit = null, offset = null, desc = null, dbName = null, startTime = null, endTime = null) { + return this.disTable(tableName, dbName).then(res => { + let primaryKey = 'ts' + if (res.res && res.data.length > 0) { + primaryKey = res.data[0].Field + } else { + return {'res': false, 'msg': 'distable error', 'code': 99} + } + + where = this.timeWhere(primaryKey, where, startTime, endTime) + let dbN = dbName ? dbName : this.database + let sqlStr = 'SELECT ' + let fieldStr = '*' + if (fields && fields.length > 0) { + fieldStr = '' + fields.forEach(function (field) { + fieldStr += field + ',' + }); + fieldStr = fieldStr.slice(0, -1) + } + sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` + if (where) { + sqlStr += ` WHERE ${where} ` + } + if (desc === 'DESC') { + sqlStr += ` ORDER BY ${primaryKey} ${desc} ` + } + + if (limit != null) { + sqlStr += ` LIMIT ${limit} ` + } + if (offset != null) { + sqlStr += ` OFFSET ${offset} ` + } + + // console.log(sqlStr) + if (limit != null) { + return this.sendRequest(sqlStr).then(res => { + // console.log(res) + return this.countDataIn(tableName, primaryKey, where, dbName, startTime, endTime).then(count => { + res.count = count + return new Promise((resolve, reject) => { + resolve(res) + }) + }) + }) + } else { + return this.sendRequest(sqlStr) + } + + }) + + + } + + rawSql(sqlStr) { + return this.sendRequest(sqlStr) + } + + rawSqlWithDB(sqlStr, dbName = null) { + let dbN = dbName ? dbName : this.database + return this.sendRequest(`USE ${dbN}`).then(a => { + return this.sendRequest(sqlStr) + }) + } +} + diff --git a/renderer/js/taosrestful_.js b/renderer/js/taosrestful_.js new file mode 100644 index 0000000..b4b75f0 --- /dev/null +++ b/renderer/js/taosrestful_.js @@ -0,0 +1,265 @@ +const axios = require('axios') +const { formatResult } = require('./versionAdapter') + +module.exports = { + async sendRequest(sqlStr, payload) { + // console.log(sqlStr) + try { + if (!payload.timeout) { + payload.timeout = 10000; + } + let res = await axios.post(`http://${payload.ip}:${payload.port}/rest/sql`, sqlStr, { + auth: { + username: payload.user, + password: payload.password + }, + timeout: payload.timeout + }) + + res = formatResult(res, sqlStr) + + if (res.data.status === 'succ') { + // console.log(res.data.data) + // console.log(res.data.rows) + // console.log(res.data.head) + let head = res.data.head + let resData = res.data.data.map(item => Object.fromEntries(head.map((a, b) => [a, item[b]]))) + return {'res': true, 'count': res.data.rows, 'data': resData} + } else { + return {'res': false, 'msg': res.data.desc, 'code': res.data.code} + } + } catch (err) { + if (err.response) { + return {'res': false, 'msg': err.response.data.desc, 'code': err.response.data.code} + } else { + return {'res': false, 'msg': '连接错误', 'code': -1} + } + } + + }, + showDatabases(payload) { + return this.sendRequest('SHOW DATABASES', payload) + }, + testConnect(payload) { + return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => { + return !(a.res === false && a.code === -1); + } + ) + }, + getVersion(payload) { + //获取服务器版本 + return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => { + return a.res === false ? 'unkown' : a.data[0]['server_version()']; + } + ) + }, + //添加数据库 + createDatabase(dbName, payload, safe = true, keep = null, update = 0, comp = null, + replica = null, quorum = null, blocks = null, version) { + let sqlStr = 'CREATE DATABASE ' + if (safe) { + sqlStr += 'IF NOT EXISTS ' + } + sqlStr += dbName + + if (keep) { + sqlStr += ` KEEP ${keep}` + } + if (comp) { + sqlStr += ` COMP ${comp}` + } + if (replica) { + sqlStr += ` REPLICA ${replica}` + } + if (quorum) { + sqlStr += ` QUORUM ${quorum}` + } + if (blocks) { + sqlStr += ` BLOCKS ${blocks}` + } + if (update) { + if (this.compareVersion(version, '2.0.8.0')) { + if (update == 2) { + if (this.compareVersion(version, '2.1.7.0')) { + sqlStr += ` UPDATE ${update}` + } else { + console.log("update参数暂不支持:" + version + "版本") + } + } else { + sqlStr += ` UPDATE ${update}` + } + } else { + console.log("update参数暂不支持:" + version + "版本") + } + } + return this.sendRequest(sqlStr, payload) + }, +// alterDatabase(dbName,keep=null,comp=null,replica=null,quorum=null,blocks=null){ +// let sqlStr = 'ALTER DATABASE ' +// sqlStr += dbName +// if(keep != null){ +// sqlStr += ` KEEP ${keep}` +// } +// if(comp != null){ +// sqlStr += ` COMP ${comp}` +// } +// if(replica != null){ +// sqlStr += ` REPLICA ${replica}` +// } +// if(quorum != null){ +// sqlStr += ` QUORUM ${quorum}` +// } +// if(blocks != null){ +// sqlStr += ` BLOCKS ${blocks}` +// } +// // console.log(sqlStr) +// return this.sendRequest(sqlStr) +// }, +// useDatabase(dbName){ +// this.database = dbName +// }, + dropDatabase(dbName, payload, safe = true) { + return this.sendRequest(`DROP DATABASE ${safe ? 'IF EXISTS' : ''} ${dbName}`, payload) + }, + showSuperTables(dbName, payload, like = null) { + let likeStr = like ? ` LIKE '%${like}%'` : '' + return this.sendRequest(`SHOW ${dbName}.STABLES ${likeStr}`, payload) + }, + showTables(dbName, payload, like = null) { + let likeStr = like ? ` LIKE '%${like}%'` : '' + return this.sendRequest(`SHOW ${dbName}.TABLES ${likeStr}`, payload) + }, + disTable(tableName, dbName, payload) { + return this.sendRequest(`DESCRIBE ${dbName}.${tableName}`, payload) + }, + dropTable(tableName, dbName, payload, safe = false) { + return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbName}.${tableName}`, payload) + }, + insertData(tableName, data, dbName = null) { + let dbN = dbName ? dbName : this.database + let fields = '' + let values = '' + for (const [key, value] of Object.entries(data)) { + fields += key + ',' + values += value + ',' + } + // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) + return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) + }, + timeWhere(primaryKey, where, startTime, endTime) { + where = where || '' + if (where) { + where += startTime ? ` and ${primaryKey} > '${startTime}' ` : '' + if (where) { + where += endTime ? ` and ${primaryKey} < '${endTime}' ` : '' + } else { + where += endTime ? `${primaryKey} < '${endTime}' ` : '' + } + } else { + where += startTime ? `${primaryKey} > '${startTime}' ` : '' + if (where) { + where += endTime ? ` and ${primaryKey} < '${endTime}' ` : '' + } else { + where += endTime ? `${primaryKey} < '${endTime}' ` : '' + } + } + return where + }, + //查询数据 + selectData(tableName, dbName, payload, fields = null, where = null, limit = null, + offset = null, desc = null, startTime = null, endTime = null) { + //首先查询一次,获取表的整体情况 + return this.disTable(tableName, dbName, payload).then(res => { + let primaryKey = 'ts' + if (res.res && res.data.length > 0) { + //获取第一项,时间戳 + primaryKey = res.data[0].Field + } else { + return {'res': false, 'msg': 'distable error', 'code': 99} + } + + //组装where子句 //TODO + where = this.timeWhere(primaryKey, where, startTime, endTime) + let sqlStr = 'SELECT ' + let fieldStr = '*' + if (fields && fields.length > 0) { + fieldStr = '' + fields.forEach(function (field) { + fieldStr += field + ',' + }); + fieldStr = fieldStr.slice(0, -1) + } + sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` + if (where) { + sqlStr += ` WHERE ${where} ` + } + if (desc === 'DESC') { + sqlStr += ` ORDER BY ${primaryKey} ${desc} ` + } + + if (limit != null) { + sqlStr += ` LIMIT ${limit} ` + } + if (offset != null) { + sqlStr += ` OFFSET ${offset} ` + } + + //把总数数出来 + if (limit != null) { + return this.sendRequest(sqlStr, payload).then(res => { + return this.countDataIn(tableName, dbName, primaryKey, payload, where).then(count => { + res.count = count + return new Promise((resolve, reject) => { + resolve(res) + }) + }) + }) + } else { + return this.sendRequest(sqlStr, payload) + } + + }) + + }, + countDataIn(tableName, dbName, primaryKey, payload, where = '', startTime = null, endTime = null) { + where = this.timeWhere(primaryKey, where, startTime, endTime) + let sqlStr = 'SELECT ' + let fieldStr = 'count(*)' + sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` + if (where) { + sqlStr += ` WHERE ${where} ` + } + // console.log(sqlStr) + return this.sendRequest(sqlStr, payload).then(result => { + if (result.res && result.data.length > 0) { + return new Promise((resolve, reject) => { + resolve(result.data[0]['count(*)']) + }) + } else { + return new Promise((resolve, reject) => { + resolve(0) + }) + } + }) + }, + rawSql(sqlStr, payload) { + return this.sendRequest(sqlStr, payload) + }, + compareVersion(serverVersion, targetVersion) { + if (serverVersion == targetVersion) { + return true; + } + let serverArray = serverVersion.split("."); + let targetArray = targetVersion.split("."); + let length = Math.min(serverArray.length, targetArray.length); + for (let i = 0; i < length; i++) { + if (serverArray[i] > targetArray[i]) { + return true; + } else if (serverArray[i] < targetArray[i]) { + return false; + } + } + return false; + } +} + diff --git a/renderer/js/versionAdapter.js b/renderer/js/versionAdapter.js new file mode 100644 index 0000000..59a3418 --- /dev/null +++ b/renderer/js/versionAdapter.js @@ -0,0 +1,26 @@ +module.exports = { + formatResult(res, sql) { + if (res.data.status !== undefined) { + // Version 2.x + return res + } + + if (res.data.code === 0) { + res.data.status = 'succ' + res.data.head = res.data.column_meta.map(item => item[0]) + } else { + res.data.status = 'error' + } + + if ( + /show /i.test(sql) && + /.stables/i.test(sql) && + res.data.head.length === 1 && + res.data.head[0] === 'stable_name' + ) { + res.data.head[0] = 'name' + } + + return res + } +} diff --git a/renderer/js/vue-clipboard2/vue-clipboard.min.js b/renderer/js/vue-clipboard2/vue-clipboard.min.js new file mode 100644 index 0000000..d7d417f --- /dev/null +++ b/renderer/js/vue-clipboard2/vue-clipboard.min.js @@ -0,0 +1 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i Object.fromEntries(head.map((a,b)=>[a,item[b]]))) - return {'res':true,'count':res.data.rows,'data':resData} - }else{ - return {'res':false,'msg':res.data.desc,'code':res.data.code} - } - } catch (err) { - if (err.response){ - return {'res':false,'msg':err.response.data.desc,'code':err.response.data.code} - }else{ - return {'res':false,'msg':'connect error','code':-1} - } - - } - - } - showDatabases(){ - return this.sendRequest('SHOW DATABASES') - } - testConnect(){ - return this.sendRequest('SELECT SERVER_VERSION()').then(a => - { - if (a.res === false && a.code === -1){ - return false - }else{ - return true - } - } - ) - } - - getVersion(){ - return this.sendRequest('SELECT SERVER_VERSION()').then(a => - { - if (a.res === false){ - return a.msg - }else{ - return a.data[0]['server_version()'] - } - } - ) - } - //创建新的数据库 - createDatabase(dbName,safe=true,keep= null,update=false,comp=null,replica=null,quorum=null,blocks=null){ - let sqlStr = 'CREATE DATABASE ' - if(safe){ - sqlStr += 'IF NOT EXISTS ' - } - sqlStr += dbName - - if(keep != null){ - sqlStr += ` KEEP ${keep}` - } - if(comp != null){ - sqlStr += ` COMP ${comp}` - } - if(replica != null) { - sqlStr += ` REPLICA ${replica}` - } - if(quorum != null){ - sqlStr += ` QUORUM ${quorum}` - } - if(blocks != null){ - sqlStr += ` BLOCKS ${blocks}` - } - if(update){ - sqlStr += ` UPDATE 1` - } - // console.log(sqlStr) - return this.sendRequest(sqlStr) - } - - alterDatabase(dbName,keep=null,comp=null,replica=null,quorum=null,blocks=null){ - let sqlStr = 'ALTER DATABASE ' - sqlStr += dbName - if(keep != null){ - sqlStr += ` KEEP ${keep}` - } - if(comp != null){ - sqlStr += ` COMP ${comp}` - } - if(replica != null){ - sqlStr += ` REPLICA ${replica}` - } - if(quorum != null){ - sqlStr += ` QUORUM ${quorum}` - } - if(blocks != null){ - sqlStr += ` BLOCKS ${blocks}` - } - // console.log(sqlStr) - return this.sendRequest(sqlStr) - } - - useDatabase(dbName){ - this.database = dbName - } - dropDatabase(dbName,safe=true){ - // console.log(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`) - return this.sendRequest(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`) - } - showSuperTables(dbName=null,like=null){ - let dbN = dbName ? dbName : this.database - let likeStr = like?` LIKE '%${like}%'`:'' - return this.sendRequest(`SHOW ${dbN}.STABLES ${likeStr}`) - } - showTables(dbName=null,like=null){ - let dbN = dbName ? dbName : this.database - let likeStr = like?` LIKE '%${like}%'`:'' - return this.sendRequest(`SHOW ${dbN}.TABLES ${likeStr}`) - } - disTable(tableName,dbName=null){ - let dbN = dbName ? dbName : this.database - return this.sendRequest(`DESCRIBE ${dbN}.${tableName}`) - } - dropTable(tableName,dbName=null,safe=false){ - let dbN = dbName ? dbName : this.database - return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbN}.${tableName}`) - } - - insertData(tableName,data,dbName=null){ - let dbN = dbName ? dbName : this.database - let fields = '' - let values = '' - for (const [key, value] of Object.entries(data)) { - fields += key + ',' - values += value + ',' - } - // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) - return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) - } - timeWhere(primaryKey,where,startTime,endTime){ - where = where || '' - if(where){ - where += startTime? ` and ${primaryKey} > '${startTime}' ` : '' - if(where){ - where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' - }else{ - where += endTime? `${primaryKey} < '${endTime}' ` : '' - } - }else{ - where += startTime? `${primaryKey} > '${startTime}' ` : '' - if(where){ - where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' - }else{ - where += endTime? `${primaryKey} < '${endTime}' ` : '' - } - } - return where - } - countData(tableName,where='',dbName=null,startTime=null,endTime=null){ - return this.disTable(tableName,dbName).then(res=>{ - let primaryKey ='ts' - if(res.res && res.data.length>0){ - primaryKey = res.data[0].Field - }else{ - return {'res':false,'msg':'distable error','code':99} - } - return this.countDataIn(tableName,primaryKey,where,dbName,startTime,endTime) - }) - } - countDataIn(tableName,primaryKey,where='',dbName=null,startTime=null,endTime=null){ - where = this.timeWhere(primaryKey,where,startTime,endTime) - let dbN = dbName ? dbName : this.database - let sqlStr = 'SELECT ' - let fieldStr= 'count(*)' - sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` - if(where){ - sqlStr +=` WHERE ${where} ` - } - // console.log(sqlStr) - return this.sendRequest(sqlStr).then(result=>{ - if (result.res && result.data.length >0){ - return new Promise((resolve, reject)=>{resolve(result.data[0]['count(*)'])}) - }else{ - return new Promise((resolve, reject)=>{resolve(0)}) - } - }) - - } - - //查询数据 - selectData(tableName,fields=null,where='',limit =null,offset = null,desc =null,dbName=null,startTime=null,endTime=null){ - return this.disTable(tableName,dbName).then(res=>{ - let primaryKey ='ts' - if(res.res && res.data.length>0){ - primaryKey = res.data[0].Field - }else{ - return {'res':false,'msg':'distable error','code':99} - } - - where = this.timeWhere(primaryKey,where,startTime,endTime) - let dbN = dbName ? dbName : this.database - let sqlStr = 'SELECT ' - let fieldStr= '*' - if(fields && fields.length>0){ - fieldStr= '' - fields.forEach(function(field){ - fieldStr += field + ',' - }); - fieldStr = fieldStr.slice(0,-1) - } - sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` - if(where){ - sqlStr +=` WHERE ${where} ` - } - if(desc === 'DESC'){ - sqlStr +=` ORDER BY ${primaryKey} ${desc} ` - } - - if(limit != null){ - sqlStr +=` LIMIT ${limit} ` - } - if(offset != null){ - sqlStr +=` OFFSET ${offset} ` - } - - // console.log(sqlStr) - if(limit != null){ - return this.sendRequest(sqlStr).then(res=>{ - // console.log(res) - return this.countDataIn(tableName,primaryKey,where,dbName,startTime,endTime).then(count=>{ - res.count=count - return new Promise((resolve, reject)=>{resolve(res)}) - }) - }) - }else{ - return this.sendRequest(sqlStr) - } - - }) - - - } - rawSql(sqlStr){ - return this.sendRequest(sqlStr) - } - rawSqlWithDB(sqlStr,dbName=null){ - let dbN = dbName ? dbName : this.database - return this.sendRequest(`USE ${dbN}`).then(a =>{ - return this.sendRequest(sqlStr) - }) - } -} - diff --git a/renderer/taosrestful_.js b/renderer/taosrestful_.js deleted file mode 100644 index c0faa42..0000000 --- a/renderer/taosrestful_.js +++ /dev/null @@ -1,240 +0,0 @@ -const axios = require('axios') - -module.exports = { - async sendRequest(sqlStr, payload){ - // console.log(sqlStr) - try { - let res = await axios.post(`http://${payload.ip}:${payload.port}/rest/sql`, sqlStr, { - auth: { - username: payload.user, - password: payload.password - }, - timeout: payload.timeout - }) - if (res.data.status == 'succ'){ - // console.log(res.data.data) - // console.log(res.data.rows) - // console.log(res.data.head) - let head = res.data.head - let resData = res.data.data.map(item => Object.fromEntries(head.map((a,b)=>[a,item[b]]))) - return {'res':true,'count':res.data.rows,'data':resData} - }else{ - return {'res':false,'msg':res.data.desc,'code':res.data.code} - } - } catch (err) { - if (err.response){ - return {'res':false,'msg':err.response.data.desc,'code':err.response.data.code} - }else{ - return {'res':false,'msg':'连接错误','code':-1} - } - - } - - }, - showDatabases(payload){ - return this.sendRequest('SHOW DATABASES', payload) - }, - testConnect(payload){ - return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => - { - if (a.res === false && a.code === -1){ - return false - }else{ - return true - } - } - ) - }, - getVersion(payload){ - //获取服务器版本 - return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => - { - if (a.res === false){ - return 'unkown' - }else{ - return a.data[0]['server_version()'] - } - } - ) - }, - //添加数据库 - createDatabase(dbName, payload,safe=true,keep= null,update=false,comp=null,replica=null,quorum=null,blocks=null){ - let sqlStr = 'CREATE DATABASE ' - if(safe){ - sqlStr += 'IF NOT EXISTS ' - } - sqlStr += dbName - - if(keep){ - sqlStr += ` KEEP ${keep}` - } - if(comp){ - sqlStr += ` COMP ${comp}` - } - if(replica) { - sqlStr += ` REPLICA ${replica}` - } - if(quorum){ - sqlStr += ` QUORUM ${quorum}` - } - if(blocks){ - sqlStr += ` BLOCKS ${blocks}` - } - if(update){ - sqlStr += ` UPDATE 1` - } - // console.log(sqlStr) - return this.sendRequest(sqlStr, payload) - }, -// alterDatabase(dbName,keep=null,comp=null,replica=null,quorum=null,blocks=null){ -// let sqlStr = 'ALTER DATABASE ' -// sqlStr += dbName -// if(keep != null){ -// sqlStr += ` KEEP ${keep}` -// } -// if(comp != null){ -// sqlStr += ` COMP ${comp}` -// } -// if(replica != null){ -// sqlStr += ` REPLICA ${replica}` -// } -// if(quorum != null){ -// sqlStr += ` QUORUM ${quorum}` -// } -// if(blocks != null){ -// sqlStr += ` BLOCKS ${blocks}` -// } -// // console.log(sqlStr) -// return this.sendRequest(sqlStr) -// }, -// useDatabase(dbName){ -// this.database = dbName -// }, - dropDatabase(dbName, payload,safe=true){ - return this.sendRequest(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`, payload) - }, - showSuperTables(dbName, payload,like=null){ - let likeStr = like?` LIKE '%${like}%'`:'' - return this.sendRequest(`SHOW ${dbName}.STABLES ${likeStr}`, payload) - }, - showTables(dbName, payload,like=null){ - let likeStr = like?` LIKE '%${like}%'`:'' - return this.sendRequest(`SHOW ${dbName}.TABLES ${likeStr}`, payload) - }, - disTable(tableName,dbName, payload){ - return this.sendRequest(`DESCRIBE ${dbName}.${tableName}`, payload ) - }, - dropTable(tableName,dbName, payload,safe=false){ - return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbName}.${tableName}`, payload ) - }, - insertData(tableName,data,dbName=null){ - let dbN = dbName ? dbName : this.database - let fields = '' - let values = '' - for (const [key, value] of Object.entries(data)) { - fields += key + ',' - values += value + ',' - } - // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) - return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) - }, - timeWhere(primaryKey,where,startTime,endTime){ - where = where || '' - if(where){ - where += startTime? ` and ${primaryKey} > '${startTime}' ` : '' - if(where){ - where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' - }else{ - where += endTime? `${primaryKey} < '${endTime}' ` : '' - } - }else{ - where += startTime? `${primaryKey} > '${startTime}' ` : '' - if(where){ - where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' - }else{ - where += endTime? `${primaryKey} < '${endTime}' ` : '' - } - } - return where - }, - //查询数据 - selectData(tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null){ - //首先查询一次,获取表的整体情况 - return this.disTable(tableName,dbName, payload).then(res=>{ - let primaryKey ='ts' - if(res.res && res.data.length>0){ - //获取第一项,时间戳 - primaryKey = res.data[0].Field - }else{ - return {'res':false,'msg':'distable error','code':99} - } - - //组装where子句 //TODO - where = this.timeWhere(primaryKey,where,startTime,endTime) - let sqlStr = 'SELECT ' - let fieldStr= '*' - if(fields && fields.length>0){ - fieldStr= '' - fields.forEach(function(field){ - fieldStr += field + ',' - }); - fieldStr = fieldStr.slice(0,-1) - } - sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` - if(where){ - sqlStr +=` WHERE ${where} ` - } - if(desc === 'DESC'){ - sqlStr +=` ORDER BY ${primaryKey} ${desc} ` - } - - if(limit != null){ - sqlStr +=` LIMIT ${limit} ` - } - if(offset != null){ - sqlStr +=` OFFSET ${offset} ` - } - - //把总数数出来 - if(limit != null){ - return this.sendRequest(sqlStr, payload).then(res=>{ - return this.countDataIn(tableName,dbName,primaryKey, payload ,where).then(count=>{ - res.count=count - return new Promise((resolve, reject)=>{resolve(res)}) - }) - }) - }else{ - return this.sendRequest(sqlStr, payload) - } - - }) - - }, - countDataIn(tableName, dbName,primaryKey, payload, where='',startTime=null,endTime=null){ - where = this.timeWhere(primaryKey,where,startTime,endTime) - let sqlStr = 'SELECT ' - let fieldStr= 'count(*)' - sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` - if(where){ - sqlStr +=` WHERE ${where} ` - } - // console.log(sqlStr) - return this.sendRequest(sqlStr,payload).then(result=>{ - if (result.res && result.data.length >0){ - return new Promise((resolve, reject)=>{resolve(result.data[0]['count(*)'])}) - }else{ - return new Promise((resolve, reject)=>{resolve(0)}) - } - }) - }, - rawSql(sqlStr,payload){ - return this.sendRequest(sqlStr,payload) - }, - rawSqlWithDB(sqlStr,dbName,payload){ - // let dbN = dbName ? dbName : this.database - return this.sendRequest(`USE ${dbName}`,payload).then(a =>{ - return this.sendRequest(sqlStr,payload) - }) - } -} -