├── .gitignore ├── LICENSE.md ├── README.md ├── README_.md ├── _img ├── 1.png ├── 10.42.35.png ├── 10.png ├── 11.png ├── 12.png ├── 14.png ├── 2.png ├── 3.png ├── 5.png ├── 6.png ├── 7.png ├── 8.45.08.png ├── 8.45.44.png ├── 8.png ├── 9.png └── dmg-background.png ├── build └── icons │ ├── logo.icns │ ├── logo.ico │ └── logo1.ico ├── datatest ├── test_alterdb.js ├── test_createdb.js ├── test_distable.js ├── test_droptable.js ├── test_getversion.js ├── test_insertdata.js ├── test_rawsql.js ├── test_selectdata.js ├── test_showdb.js └── test_showtable.js ├── main.js ├── package-lock.json ├── package.json ├── preload.js └── renderer ├── img ├── add.png ├── database.png ├── delete.png ├── delete_.png ├── edit.png ├── edit_.png ├── file.png ├── fresh.png ├── fresh_.png ├── order.png ├── order_.png ├── search.png ├── search_.png └── switch.png ├── index.css ├── index.html ├── index.js ├── localDataStore.js ├── taosrestful.js └── taosrestful_.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | .DS_Store 4 | 5 | out/ 6 | 7 | dist -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | CC0 1.0 Universal 2 | ================== 3 | 4 | Statement of Purpose 5 | --------------------- 6 | 7 | The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). 8 | 9 | Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. 10 | 11 | For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 12 | 13 | 1. Copyright and Related Rights. 14 | -------------------------------- 15 | A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: 16 | 17 | i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; 18 | ii. moral rights retained by the original author(s) and/or performer(s); 19 | iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; 20 | iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; 21 | v. rights protecting the extraction, dissemination, use and reuse of data in a Work; 22 | vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and 23 | vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 24 | 25 | 2. Waiver. 26 | ----------- 27 | To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 28 | 29 | 3. Public License Fallback. 30 | ---------------------------- 31 | Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 32 | 33 | 4. Limitations and Disclaimers. 34 | -------------------------------- 35 | 36 | a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. 37 | b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. 38 | c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. 39 | d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TDengineGUI 2 | 3 | > 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. 4 | 5 | [中文版](https://github.com/skye0207/TDengineGUI/blob/main/README_.md) 6 | ## Features 7 | - Link to TDengine, create and drop databases 8 | - show tables and surpertables, select data. 9 | - execute the SQL statements using a simple console. 10 | 11 | ## Downloads 12 | 13 | ### Windows: 14 | 15 | 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]. 16 | 17 | ### Mac: 18 | 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). 19 | 20 | ### Linux: 21 | 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]. 22 | 23 | 24 | ## Dev Build Setup: 25 | ```bash 26 | # clone code 27 | git clone https://github.com/skye0207/TDengineGUI.git 28 | 29 | cd TDengineGUI 30 | 31 | # install dependencies 32 | npm install 33 | 34 | # serve 35 | npm run start 36 | ``` 37 | 38 | ## Build Package 39 | ```bash 40 | # Packaged application will generate in the dist folder 41 | npm run build 42 | ``` 43 | 44 | ## Welcome to use TDeningeGUI 45 | 46 | - TDengineGUI reconds previous connections. 47 | 48 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/1.png) 49 | 50 | - You also could add a new server to manage by clicking the "新建连接" button and providing ip,port,username and password(root:taosdata). 51 | 52 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/2.png) 53 | 54 | - Drop a database. 55 | 56 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/3.png) 57 | 58 | - Create databases. Specific attributes refering [tdengine document](https://www.taosdata.com/cn/documentation/taos-sql#management) 59 | 60 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/5.png) 61 | 62 | - Delete a linked server. 63 | 64 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/6.png) 65 | 66 | - Select a database and enter main panel. You could click "切换" button to switch database. 67 | 68 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/7.png) 69 | 70 | - Click a table to query data. 71 | 72 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/8.png) 73 | 74 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/11.png) 75 | 76 | - Query data by filtering the timestamp. 77 | 78 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/9.png) 79 | 80 | - Set data filter. 81 | 82 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/10.png) 83 | 84 | - 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". 85 | 86 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/12.png) 87 | 88 | - Simplely display database properties. More features will be developed in the future. 89 | 90 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/14.png) -------------------------------------------------------------------------------- /README_.md: -------------------------------------------------------------------------------- 1 | # TDengineGUI 2 | 3 | > TDengineGUI是一个基于electron构建的,针对时序数据库[TDengine](https://github.com/taosdata/TDengine)的图形化管理工具。具有跨平台、易于使用、版本适应性强等特点。 4 | 5 | [English](https://github.com/skye0207/TDengineGUI/blob/main/README.md) 6 | ## 当前版本功能 7 | - 通过TDengine restful接口连接到数据库,使用基本不受服务器版本升级影响。 8 | - 数据库添加删除操作,显示数据库属性。 9 | - 显示数据库中超级表和表信息,删除超级表与表功能。 10 | - 显示超级表和表数据功能,提供分页、时间段检索、字段过滤、排序等功能。 11 | 12 | ## 如何获取 13 | 14 | ### 下载最新版可执行文件: 15 | [release](https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0). 16 | 17 | 18 | ## 通过源代码运行开发版本: 19 | 20 | - 克隆项目: git clone https://github.com/skye0207/TDengineGUI.git 21 | - 安装依赖: npm install 22 | - 启动开发版本: npm run start 23 | - 生成桌面应用(可选): npm run build (生成在dist文件夹下) 24 | 25 | ## 使用说明 26 | 27 | - 打开软件后,界面左侧会显示需要管理的数据库服务器列表和服务器中数据库列表,同时显示数据库服务器的版本号。 28 | 29 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/1.png) 30 | 31 | - 可以通过“新建连接”按钮,添加新的服务器进行管理。需要提供数据库服务器的ip地址、restful服务的端口号(默认为6041)、连接服务器的用户名和密码(默认为root:taosdata) 32 | 33 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/2.png) 34 | 35 | - 可以通过点击数据库后的删除图标,进行删除数据库操作。 36 | 37 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/3.png) 38 | 39 | - 可以通过点击添加数据库图标,进行添加数据库操作。可以在添加时选择数据库属性(具体属性含义请参考[tdengine官方文档](https://www.taosdata.com/cn/documentation/taos-sql#management)) 40 | 41 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/5.png) 42 | 43 | - 可以通过点击服务器连接后的删除图标,进行删除数据库连接操作。 44 | 45 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/6.png) 46 | 47 | - 选择要操作的数据库后,即可进入当前数据库操作界面。可以通过点击“切换”按钮调出数据库导航栏,切换要操作的数据库。当前数据库操作界面中分 超级表、表、控制台、数据库属性四个标签页。每个标签页都针对当前数据库进行显示与操作。 48 | 49 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/7.png) 50 | 51 | - 超级表(表)标签页中,左侧为超级表(表)的列表,可以进行删除与检索操作(添加、修改等操作后续版本将提供,当前版本如需增加数据表或者插入数据请使用控制台输入命令完成)。左侧则显示当前数据表的数据。 52 | 53 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/8.png) 54 | 55 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/11.png) 56 | 57 | - 可以对表数据进行时间段选择。 58 | 59 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/9.png) 60 | 61 | - 可以对表数据进行时间字段过滤、排序、分页等操作。 62 | 63 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/10.png) 64 | 65 | - 控制台中可以输入sql命令运行,并显示restful接口原始返回结果。控制台中输入的命令默认针对当前数据库进行操作,一般情况下不需要在表名称前附加数据库名称。但也可以通过“数据库名.表名”的方式操作其他数据库中的表。(结果显示方式,以后版本将改进) 66 | 67 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/12.png) 68 | 69 | - 数据库属性显示当前数据库的一些基础属性,后期版本将加入属性修改功能。 70 | 71 | ![Image text](https://github.com/skye0207/TDengineGUI/blob/main/_img/14.png) 72 | 73 | 现有bug: 74 | - [ ] 数据表控件高度需要根据每页条目数量自动调整,现在每页20条时需要上下滚动。 75 | - [ ] 由于TDengine数据库对大数据集排序操作有限制,数据量大的情况下,时间倒序配置下检索数据会报错。 76 | 77 | 78 | 后期版本待完成功能: 79 | - [ ] 创建超级表(表)功能 80 | - [ ] 修改超级表(表)的表结构 81 | - [ ] 子表与独立表的显示风格区分 82 | - [ ] 完善数据库属性页(修改数据库属性、用户管理等) 83 | - [ ] 超级表标签管理,以及子表的标签配置 84 | - [ ] 按照字段类型检索数据(高级检索功能) 85 | - [ ] 选择数值类型字段进行柱状图,折线图等图表的方式显示数据趋势 86 | - [ ] 显示数据统计量(求和,平均,方差等) 87 | - [ ] 批量插入测试数据功能 88 | - [ ] 数据备份与数据导出功能 89 | - [ ] 修改连接配置信息功能 90 | - [ ] 连接配置信息导出导入功能 91 | - [ ] 基础属性配置功能(连接超时时间、默认每页大小等) 92 | -------------------------------------------------------------------------------- /_img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/1.png -------------------------------------------------------------------------------- /_img/10.42.35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/10.42.35.png -------------------------------------------------------------------------------- /_img/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/10.png -------------------------------------------------------------------------------- /_img/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/11.png -------------------------------------------------------------------------------- /_img/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/12.png -------------------------------------------------------------------------------- /_img/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/14.png -------------------------------------------------------------------------------- /_img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/2.png -------------------------------------------------------------------------------- /_img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/3.png -------------------------------------------------------------------------------- /_img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/5.png -------------------------------------------------------------------------------- /_img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/6.png -------------------------------------------------------------------------------- /_img/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/7.png -------------------------------------------------------------------------------- /_img/8.45.08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/8.45.08.png -------------------------------------------------------------------------------- /_img/8.45.44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/8.45.44.png -------------------------------------------------------------------------------- /_img/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/8.png -------------------------------------------------------------------------------- /_img/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/9.png -------------------------------------------------------------------------------- /_img/dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/_img/dmg-background.png -------------------------------------------------------------------------------- /build/icons/logo.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/build/icons/logo.icns -------------------------------------------------------------------------------- /build/icons/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/build/icons/logo.ico -------------------------------------------------------------------------------- /build/icons/logo1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/build/icons/logo1.ico -------------------------------------------------------------------------------- /datatest/test_alterdb.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.alterDatabase('nodeadd2',1200,0).then(a => 9 | console.log(a) 10 | ) 11 | -------------------------------------------------------------------------------- /datatest/test_createdb.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.createDatabase('nodeadd2',true,1000,true).then(a => 9 | console.log(a) 10 | ) 11 | -------------------------------------------------------------------------------- /datatest/test_distable.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.disTable('anode_8','ele_ana').then(a => 9 | console.log(a) 10 | ) 11 | -------------------------------------------------------------------------------- /datatest/test_droptable.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.dropTable('rule_1','dianli1',false).then(a => 9 | console.log(a) 10 | ) 11 | -------------------------------------------------------------------------------- /datatest/test_getversion.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | 9 | tr.getVersion().then(a =>{ 10 | console.log(a) 11 | }) 12 | -------------------------------------------------------------------------------- /datatest/test_insertdata.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.insertData('person100',{'td':Date.now(),'name5':1.2},'test3').then(a => 9 | console.log(a) 10 | ) 11 | 12 | tr.useDatabase('test3') 13 | tr.insertData('person100',{'td':Date.now(),'name5':1.2}).then(a => 14 | console.log(a) 15 | ) -------------------------------------------------------------------------------- /datatest/test_rawsql.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.rawSql('use dianli_test').then(a =>{ 9 | console.log(a) 10 | tr.rawSql('SELECT ts from node_8').then(a => 11 | console.log(a) 12 | ) 13 | }) 14 | 15 | tr.rawSqlWithDB('SELECT ts from node_8','dianli_test').then(a =>{ 16 | console.log(a) 17 | }) 18 | 19 | 20 | 21 | tr.rawSql('SELECT ts from dianli_test.node_8').then(a => 22 | console.log(a) 23 | ) 24 | 25 | 26 | -------------------------------------------------------------------------------- /datatest/test_selectdata.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | tr.selectData('node_7',[],'',10,null,null,'dianli1').then(a => 9 | console.log(a) 10 | ) 11 | tr.selectData('node_7',['ts','pjxdy1'],null,10,100,null,'dianli1').then(a => 12 | console.log(a) 13 | ) 14 | tr.useDatabase('dianli1') 15 | tr.selectData('node_7',['ts','pjxdy1'],"ts > '2021-01-12 20:42:30.275' and pjxdy1 > 394.5",10).then(a => 16 | console.log(a) 17 | ) 18 | 19 | tr.selectData('node_7',['ts','pjxdy1'],null,100,1000,null,'dianli1','2021-01-12 20:42:30.275','2021-03-12 20:42:30.275').then(a => 20 | console.log(a) 21 | ) 22 | 23 | tr.countData('node_7',null,'dianli1','2021-01-12 20:42:30.275','2021-03-12 20:42:30.275').then(a => 24 | console.log(a) 25 | ) -------------------------------------------------------------------------------- /datatest/test_showdb.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918",1) 7 | 8 | tr.testConnect().then(a => 9 | console.log(a) 10 | ) 11 | tr.showDatabases().then(a => 12 | console.log(a) 13 | ) 14 | -------------------------------------------------------------------------------- /datatest/test_showtable.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | var TaosRestful = require('../renderer/taosrestful.js') 5 | 6 | var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 7 | 8 | // tr.showSuperTables('dianli1').then(a => 9 | // console.log(a) 10 | // ) 11 | // tr.showTables('dianli1').then(a => 12 | // console.log(a) 13 | // ) 14 | 15 | tr.showSuperTables('dianli1','2').then(a => 16 | console.log(a) 17 | ) 18 | 19 | tr.showTables('dianli1','1').then(a => 20 | console.log(a) 21 | ) 22 | 23 | // tr.useDatabase('test3') 24 | // tr.showTables().then(a => 25 | // console.log(a) 26 | // ) -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const { app, BrowserWindow } = require('electron') 2 | 3 | function createWindow () { 4 | const win = new BrowserWindow({ 5 | width: 1200, 6 | height: 880, 7 | webPreferences: { 8 | nodeIntegration: true 9 | } 10 | }) 11 | 12 | win.loadFile('./renderer/index.html') 13 | } 14 | 15 | app.whenReady().then(createWindow) 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TDengineGUI", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "7zip-bin": { 8 | "version": "5.0.3", 9 | "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", 10 | "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", 11 | "dev": true 12 | }, 13 | "@develar/schema-utils": { 14 | "version": "2.6.5", 15 | "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", 16 | "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", 17 | "dev": true, 18 | "requires": { 19 | "ajv": "^6.12.0", 20 | "ajv-keywords": "^3.4.1" 21 | } 22 | }, 23 | "@electron/get": { 24 | "version": "1.12.3", 25 | "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", 26 | "integrity": "sha1-+icjOFxLVlo0xMgvRgh6oqX79tA=", 27 | "dev": true, 28 | "requires": { 29 | "debug": "^4.1.1", 30 | "env-paths": "^2.2.0", 31 | "filenamify": "^4.1.0", 32 | "fs-extra": "^8.1.0", 33 | "global-agent": "^2.0.2", 34 | "global-tunnel-ng": "^2.7.1", 35 | "got": "^9.6.0", 36 | "progress": "^2.0.3", 37 | "semver": "^6.2.0", 38 | "sumchecker": "^3.0.1" 39 | }, 40 | "dependencies": { 41 | "semver": { 42 | "version": "6.3.0", 43 | "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", 44 | "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", 45 | "dev": true 46 | } 47 | } 48 | }, 49 | "@sindresorhus/is": { 50 | "version": "0.14.0", 51 | "resolved": "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz", 52 | "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=", 53 | "dev": true 54 | }, 55 | "@szmarczak/http-timer": { 56 | "version": "1.1.2", 57 | "resolved": "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz", 58 | "integrity": "sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE=", 59 | "dev": true, 60 | "requires": { 61 | "defer-to-connect": "^1.0.1" 62 | } 63 | }, 64 | "@types/debug": { 65 | "version": "4.1.5", 66 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", 67 | "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", 68 | "dev": true 69 | }, 70 | "@types/fs-extra": { 71 | "version": "9.0.6", 72 | "resolved": "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-9.0.6.tgz", 73 | "integrity": "sha1-SI5Wt3KZiZpgi4JpcZwdEzAnpqs=", 74 | "dev": true, 75 | "requires": { 76 | "@types/node": "*" 77 | } 78 | }, 79 | "@types/node": { 80 | "version": "12.19.15", 81 | "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", 82 | "integrity": "sha1-DefpePtD22LaNp2xjqCIpjZzwYI=", 83 | "dev": true 84 | }, 85 | "@types/yargs": { 86 | "version": "15.0.13", 87 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", 88 | "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", 89 | "dev": true, 90 | "requires": { 91 | "@types/yargs-parser": "*" 92 | } 93 | }, 94 | "@types/yargs-parser": { 95 | "version": "20.2.0", 96 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", 97 | "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", 98 | "dev": true 99 | }, 100 | "ajv": { 101 | "version": "6.12.6", 102 | "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", 103 | "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", 104 | "dev": true, 105 | "requires": { 106 | "fast-deep-equal": "^3.1.1", 107 | "fast-json-stable-stringify": "^2.0.0", 108 | "json-schema-traverse": "^0.4.1", 109 | "uri-js": "^4.2.2" 110 | } 111 | }, 112 | "ajv-keywords": { 113 | "version": "3.5.2", 114 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 115 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 116 | "dev": true 117 | }, 118 | "ansi-align": { 119 | "version": "3.0.0", 120 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", 121 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", 122 | "dev": true, 123 | "requires": { 124 | "string-width": "^3.0.0" 125 | }, 126 | "dependencies": { 127 | "ansi-regex": { 128 | "version": "4.1.0", 129 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 130 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 131 | "dev": true 132 | }, 133 | "emoji-regex": { 134 | "version": "7.0.3", 135 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 136 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 137 | "dev": true 138 | }, 139 | "is-fullwidth-code-point": { 140 | "version": "2.0.0", 141 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 142 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 143 | "dev": true 144 | }, 145 | "string-width": { 146 | "version": "3.1.0", 147 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 148 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 149 | "dev": true, 150 | "requires": { 151 | "emoji-regex": "^7.0.1", 152 | "is-fullwidth-code-point": "^2.0.0", 153 | "strip-ansi": "^5.1.0" 154 | } 155 | }, 156 | "strip-ansi": { 157 | "version": "5.2.0", 158 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 159 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 160 | "dev": true, 161 | "requires": { 162 | "ansi-regex": "^4.1.0" 163 | } 164 | } 165 | } 166 | }, 167 | "ansi-regex": { 168 | "version": "5.0.0", 169 | "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", 170 | "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", 171 | "dev": true 172 | }, 173 | "ansi-styles": { 174 | "version": "4.3.0", 175 | "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", 176 | "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", 177 | "dev": true, 178 | "requires": { 179 | "color-convert": "^2.0.1" 180 | } 181 | }, 182 | "app-builder-bin": { 183 | "version": "3.5.10", 184 | "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.10.tgz", 185 | "integrity": "sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ==", 186 | "dev": true 187 | }, 188 | "app-builder-lib": { 189 | "version": "22.9.1", 190 | "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.9.1.tgz", 191 | "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", 192 | "dev": true, 193 | "requires": { 194 | "7zip-bin": "~5.0.3", 195 | "@develar/schema-utils": "~2.6.5", 196 | "async-exit-hook": "^2.0.1", 197 | "bluebird-lst": "^1.0.9", 198 | "builder-util": "22.9.1", 199 | "builder-util-runtime": "8.7.2", 200 | "chromium-pickle-js": "^0.2.0", 201 | "debug": "^4.3.0", 202 | "ejs": "^3.1.5", 203 | "electron-publish": "22.9.1", 204 | "fs-extra": "^9.0.1", 205 | "hosted-git-info": "^3.0.5", 206 | "is-ci": "^2.0.0", 207 | "isbinaryfile": "^4.0.6", 208 | "js-yaml": "^3.14.0", 209 | "lazy-val": "^1.0.4", 210 | "minimatch": "^3.0.4", 211 | "normalize-package-data": "^2.5.0", 212 | "read-config-file": "6.0.0", 213 | "sanitize-filename": "^1.6.3", 214 | "semver": "^7.3.2", 215 | "temp-file": "^3.3.7" 216 | }, 217 | "dependencies": { 218 | "fs-extra": { 219 | "version": "9.1.0", 220 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 221 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 222 | "dev": true, 223 | "requires": { 224 | "at-least-node": "^1.0.0", 225 | "graceful-fs": "^4.2.0", 226 | "jsonfile": "^6.0.1", 227 | "universalify": "^2.0.0" 228 | } 229 | }, 230 | "hosted-git-info": { 231 | "version": "3.0.8", 232 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", 233 | "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", 234 | "dev": true, 235 | "requires": { 236 | "lru-cache": "^6.0.0" 237 | } 238 | }, 239 | "isbinaryfile": { 240 | "version": "4.0.6", 241 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", 242 | "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", 243 | "dev": true 244 | }, 245 | "jsonfile": { 246 | "version": "6.1.0", 247 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 248 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 249 | "dev": true, 250 | "requires": { 251 | "graceful-fs": "^4.1.6", 252 | "universalify": "^2.0.0" 253 | } 254 | }, 255 | "universalify": { 256 | "version": "2.0.0", 257 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 258 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 259 | "dev": true 260 | } 261 | } 262 | }, 263 | "argparse": { 264 | "version": "1.0.10", 265 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 266 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 267 | "dev": true, 268 | "requires": { 269 | "sprintf-js": "~1.0.2" 270 | }, 271 | "dependencies": { 272 | "sprintf-js": { 273 | "version": "1.0.3", 274 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 275 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 276 | "dev": true 277 | } 278 | } 279 | }, 280 | "async-exit-hook": { 281 | "version": "2.0.1", 282 | "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", 283 | "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", 284 | "dev": true 285 | }, 286 | "async-validator": { 287 | "version": "1.8.5", 288 | "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", 289 | "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", 290 | "requires": { 291 | "babel-runtime": "6.x" 292 | } 293 | }, 294 | "at-least-node": { 295 | "version": "1.0.0", 296 | "resolved": "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz", 297 | "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", 298 | "dev": true 299 | }, 300 | "axios": { 301 | "version": "0.21.1", 302 | "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz", 303 | "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=", 304 | "requires": { 305 | "follow-redirects": "^1.10.0" 306 | } 307 | }, 308 | "babel-helper-vue-jsx-merge-props": { 309 | "version": "2.0.3", 310 | "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", 311 | "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" 312 | }, 313 | "babel-runtime": { 314 | "version": "6.26.0", 315 | "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", 316 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 317 | "requires": { 318 | "core-js": "^2.4.0", 319 | "regenerator-runtime": "^0.11.0" 320 | }, 321 | "dependencies": { 322 | "core-js": { 323 | "version": "2.6.12", 324 | "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", 325 | "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=" 326 | } 327 | } 328 | }, 329 | "balanced-match": { 330 | "version": "1.0.0", 331 | "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", 332 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 333 | "dev": true 334 | }, 335 | "bluebird": { 336 | "version": "3.7.2", 337 | "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", 338 | "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", 339 | "dev": true 340 | }, 341 | "bluebird-lst": { 342 | "version": "1.0.9", 343 | "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", 344 | "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", 345 | "dev": true, 346 | "requires": { 347 | "bluebird": "^3.5.5" 348 | } 349 | }, 350 | "boolean": { 351 | "version": "3.0.2", 352 | "resolved": "https://registry.npm.taobao.org/boolean/download/boolean-3.0.2.tgz", 353 | "integrity": "sha1-3xuqGLaisOcIQEdeHZPsj+dbJXA=", 354 | "dev": true, 355 | "optional": true 356 | }, 357 | "boxen": { 358 | "version": "4.2.0", 359 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", 360 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", 361 | "dev": true, 362 | "requires": { 363 | "ansi-align": "^3.0.0", 364 | "camelcase": "^5.3.1", 365 | "chalk": "^3.0.0", 366 | "cli-boxes": "^2.2.0", 367 | "string-width": "^4.1.0", 368 | "term-size": "^2.1.0", 369 | "type-fest": "^0.8.1", 370 | "widest-line": "^3.1.0" 371 | }, 372 | "dependencies": { 373 | "camelcase": { 374 | "version": "5.3.1", 375 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 376 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 377 | "dev": true 378 | }, 379 | "chalk": { 380 | "version": "3.0.0", 381 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 382 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 383 | "dev": true, 384 | "requires": { 385 | "ansi-styles": "^4.1.0", 386 | "supports-color": "^7.1.0" 387 | } 388 | }, 389 | "is-fullwidth-code-point": { 390 | "version": "3.0.0", 391 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 392 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 393 | "dev": true 394 | }, 395 | "string-width": { 396 | "version": "4.2.0", 397 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 398 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 399 | "dev": true, 400 | "requires": { 401 | "emoji-regex": "^8.0.0", 402 | "is-fullwidth-code-point": "^3.0.0", 403 | "strip-ansi": "^6.0.0" 404 | } 405 | } 406 | } 407 | }, 408 | "brace-expansion": { 409 | "version": "1.1.11", 410 | "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", 411 | "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", 412 | "dev": true, 413 | "requires": { 414 | "balanced-match": "^1.0.0", 415 | "concat-map": "0.0.1" 416 | } 417 | }, 418 | "buffer-crc32": { 419 | "version": "0.2.13", 420 | "resolved": "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", 421 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 422 | "dev": true 423 | }, 424 | "buffer-from": { 425 | "version": "1.1.1", 426 | "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", 427 | "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", 428 | "dev": true 429 | }, 430 | "builder-util": { 431 | "version": "22.9.1", 432 | "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.9.1.tgz", 433 | "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", 434 | "dev": true, 435 | "requires": { 436 | "7zip-bin": "~5.0.3", 437 | "@types/debug": "^4.1.5", 438 | "@types/fs-extra": "^9.0.1", 439 | "app-builder-bin": "3.5.10", 440 | "bluebird-lst": "^1.0.9", 441 | "builder-util-runtime": "8.7.2", 442 | "chalk": "^4.1.0", 443 | "debug": "^4.3.0", 444 | "fs-extra": "^9.0.1", 445 | "is-ci": "^2.0.0", 446 | "js-yaml": "^3.14.0", 447 | "source-map-support": "^0.5.19", 448 | "stat-mode": "^1.0.0", 449 | "temp-file": "^3.3.7" 450 | }, 451 | "dependencies": { 452 | "fs-extra": { 453 | "version": "9.1.0", 454 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 455 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 456 | "dev": true, 457 | "requires": { 458 | "at-least-node": "^1.0.0", 459 | "graceful-fs": "^4.2.0", 460 | "jsonfile": "^6.0.1", 461 | "universalify": "^2.0.0" 462 | } 463 | }, 464 | "jsonfile": { 465 | "version": "6.1.0", 466 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 467 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 468 | "dev": true, 469 | "requires": { 470 | "graceful-fs": "^4.1.6", 471 | "universalify": "^2.0.0" 472 | } 473 | }, 474 | "universalify": { 475 | "version": "2.0.0", 476 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 477 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 478 | "dev": true 479 | } 480 | } 481 | }, 482 | "builder-util-runtime": { 483 | "version": "8.7.2", 484 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz", 485 | "integrity": "sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA==", 486 | "dev": true, 487 | "requires": { 488 | "debug": "^4.1.1", 489 | "sax": "^1.2.4" 490 | } 491 | }, 492 | "cacheable-request": { 493 | "version": "6.1.0", 494 | "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz", 495 | "integrity": "sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI=", 496 | "dev": true, 497 | "requires": { 498 | "clone-response": "^1.0.2", 499 | "get-stream": "^5.1.0", 500 | "http-cache-semantics": "^4.0.0", 501 | "keyv": "^3.0.0", 502 | "lowercase-keys": "^2.0.0", 503 | "normalize-url": "^4.1.0", 504 | "responselike": "^1.0.2" 505 | }, 506 | "dependencies": { 507 | "get-stream": { 508 | "version": "5.2.0", 509 | "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz", 510 | "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", 511 | "dev": true, 512 | "requires": { 513 | "pump": "^3.0.0" 514 | } 515 | }, 516 | "lowercase-keys": { 517 | "version": "2.0.0", 518 | "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-2.0.0.tgz", 519 | "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=", 520 | "dev": true 521 | } 522 | } 523 | }, 524 | "chalk": { 525 | "version": "4.1.0", 526 | "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", 527 | "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", 528 | "dev": true, 529 | "requires": { 530 | "ansi-styles": "^4.1.0", 531 | "supports-color": "^7.1.0" 532 | } 533 | }, 534 | "chromium-pickle-js": { 535 | "version": "0.2.0", 536 | "resolved": "https://registry.npm.taobao.org/chromium-pickle-js/download/chromium-pickle-js-0.2.0.tgz", 537 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", 538 | "dev": true 539 | }, 540 | "ci-info": { 541 | "version": "2.0.0", 542 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 543 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 544 | "dev": true 545 | }, 546 | "cli-boxes": { 547 | "version": "2.2.1", 548 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", 549 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", 550 | "dev": true 551 | }, 552 | "cliui": { 553 | "version": "7.0.4", 554 | "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", 555 | "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", 556 | "dev": true, 557 | "requires": { 558 | "string-width": "^4.2.0", 559 | "strip-ansi": "^6.0.0", 560 | "wrap-ansi": "^7.0.0" 561 | }, 562 | "dependencies": { 563 | "is-fullwidth-code-point": { 564 | "version": "3.0.0", 565 | "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 566 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 567 | "dev": true 568 | }, 569 | "string-width": { 570 | "version": "4.2.0", 571 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", 572 | "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", 573 | "dev": true, 574 | "requires": { 575 | "emoji-regex": "^8.0.0", 576 | "is-fullwidth-code-point": "^3.0.0", 577 | "strip-ansi": "^6.0.0" 578 | } 579 | } 580 | } 581 | }, 582 | "clone-response": { 583 | "version": "1.0.2", 584 | "resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz", 585 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 586 | "dev": true, 587 | "requires": { 588 | "mimic-response": "^1.0.0" 589 | } 590 | }, 591 | "color-convert": { 592 | "version": "2.0.1", 593 | "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", 594 | "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", 595 | "dev": true, 596 | "requires": { 597 | "color-name": "~1.1.4" 598 | } 599 | }, 600 | "color-name": { 601 | "version": "1.1.4", 602 | "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", 603 | "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", 604 | "dev": true 605 | }, 606 | "concat-map": { 607 | "version": "0.0.1", 608 | "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", 609 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 610 | "dev": true 611 | }, 612 | "concat-stream": { 613 | "version": "1.6.2", 614 | "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", 615 | "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", 616 | "dev": true, 617 | "requires": { 618 | "buffer-from": "^1.0.0", 619 | "inherits": "^2.0.3", 620 | "readable-stream": "^2.2.2", 621 | "typedarray": "^0.0.6" 622 | } 623 | }, 624 | "config-chain": { 625 | "version": "1.1.12", 626 | "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", 627 | "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", 628 | "dev": true, 629 | "optional": true, 630 | "requires": { 631 | "ini": "^1.3.4", 632 | "proto-list": "~1.2.1" 633 | } 634 | }, 635 | "configstore": { 636 | "version": "5.0.1", 637 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", 638 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 639 | "dev": true, 640 | "requires": { 641 | "dot-prop": "^5.2.0", 642 | "graceful-fs": "^4.1.2", 643 | "make-dir": "^3.0.0", 644 | "unique-string": "^2.0.0", 645 | "write-file-atomic": "^3.0.0", 646 | "xdg-basedir": "^4.0.0" 647 | } 648 | }, 649 | "core-js": { 650 | "version": "3.8.3", 651 | "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", 652 | "integrity": "sha1-whkG4fFPNon5OrzG4miDVQ3ZLdA=", 653 | "dev": true, 654 | "optional": true 655 | }, 656 | "core-util-is": { 657 | "version": "1.0.2", 658 | "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", 659 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 660 | "dev": true 661 | }, 662 | "crypto-random-string": { 663 | "version": "2.0.0", 664 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 665 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 666 | "dev": true 667 | }, 668 | "debug": { 669 | "version": "4.3.1", 670 | "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", 671 | "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", 672 | "dev": true, 673 | "requires": { 674 | "ms": "2.1.2" 675 | } 676 | }, 677 | "decompress-response": { 678 | "version": "3.3.0", 679 | "resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz", 680 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 681 | "dev": true, 682 | "requires": { 683 | "mimic-response": "^1.0.0" 684 | } 685 | }, 686 | "deep-extend": { 687 | "version": "0.6.0", 688 | "resolved": "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz", 689 | "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", 690 | "dev": true 691 | }, 692 | "deepmerge": { 693 | "version": "1.5.2", 694 | "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", 695 | "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=" 696 | }, 697 | "defer-to-connect": { 698 | "version": "1.1.3", 699 | "resolved": "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.1.3.tgz", 700 | "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=", 701 | "dev": true 702 | }, 703 | "define-properties": { 704 | "version": "1.1.3", 705 | "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", 706 | "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", 707 | "dev": true, 708 | "optional": true, 709 | "requires": { 710 | "object-keys": "^1.0.12" 711 | } 712 | }, 713 | "detect-node": { 714 | "version": "2.0.4", 715 | "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", 716 | "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", 717 | "dev": true, 718 | "optional": true 719 | }, 720 | "dmg-builder": { 721 | "version": "22.9.1", 722 | "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.9.1.tgz", 723 | "integrity": "sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ==", 724 | "dev": true, 725 | "requires": { 726 | "app-builder-lib": "22.9.1", 727 | "builder-util": "22.9.1", 728 | "fs-extra": "^9.0.1", 729 | "iconv-lite": "^0.6.2", 730 | "js-yaml": "^3.14.0", 731 | "sanitize-filename": "^1.6.3" 732 | }, 733 | "dependencies": { 734 | "fs-extra": { 735 | "version": "9.1.0", 736 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 737 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 738 | "dev": true, 739 | "requires": { 740 | "at-least-node": "^1.0.0", 741 | "graceful-fs": "^4.2.0", 742 | "jsonfile": "^6.0.1", 743 | "universalify": "^2.0.0" 744 | } 745 | }, 746 | "iconv-lite": { 747 | "version": "0.6.2", 748 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", 749 | "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", 750 | "dev": true, 751 | "requires": { 752 | "safer-buffer": ">= 2.1.2 < 3.0.0" 753 | } 754 | }, 755 | "jsonfile": { 756 | "version": "6.1.0", 757 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 758 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 759 | "dev": true, 760 | "requires": { 761 | "graceful-fs": "^4.1.6", 762 | "universalify": "^2.0.0" 763 | } 764 | }, 765 | "universalify": { 766 | "version": "2.0.0", 767 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 768 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 769 | "dev": true 770 | } 771 | } 772 | }, 773 | "dot-prop": { 774 | "version": "5.3.0", 775 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 776 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 777 | "dev": true, 778 | "requires": { 779 | "is-obj": "^2.0.0" 780 | } 781 | }, 782 | "dotenv": { 783 | "version": "8.2.0", 784 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 785 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", 786 | "dev": true 787 | }, 788 | "dotenv-expand": { 789 | "version": "5.1.0", 790 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", 791 | "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", 792 | "dev": true 793 | }, 794 | "duplexer3": { 795 | "version": "0.1.4", 796 | "resolved": "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", 797 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 798 | "dev": true 799 | }, 800 | "ejs": { 801 | "version": "3.1.6", 802 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", 803 | "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", 804 | "dev": true, 805 | "requires": { 806 | "jake": "^10.6.1" 807 | } 808 | }, 809 | "electron": { 810 | "version": "11.2.1", 811 | "resolved": "https://registry.npm.taobao.org/electron/download/electron-11.2.1.tgz", 812 | "integrity": "sha1-hkHdGmKRGhFE4Mc8NP2fN8zGXCs=", 813 | "dev": true, 814 | "requires": { 815 | "@electron/get": "^1.0.1", 816 | "@types/node": "^12.0.12", 817 | "extract-zip": "^1.0.3" 818 | } 819 | }, 820 | "electron-builder": { 821 | "version": "22.9.1", 822 | "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.9.1.tgz", 823 | "integrity": "sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA==", 824 | "dev": true, 825 | "requires": { 826 | "@types/yargs": "^15.0.5", 827 | "app-builder-lib": "22.9.1", 828 | "bluebird-lst": "^1.0.9", 829 | "builder-util": "22.9.1", 830 | "builder-util-runtime": "8.7.2", 831 | "chalk": "^4.1.0", 832 | "dmg-builder": "22.9.1", 833 | "fs-extra": "^9.0.1", 834 | "is-ci": "^2.0.0", 835 | "lazy-val": "^1.0.4", 836 | "read-config-file": "6.0.0", 837 | "sanitize-filename": "^1.6.3", 838 | "update-notifier": "^4.1.1", 839 | "yargs": "^16.0.3" 840 | }, 841 | "dependencies": { 842 | "fs-extra": { 843 | "version": "9.1.0", 844 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 845 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 846 | "dev": true, 847 | "requires": { 848 | "at-least-node": "^1.0.0", 849 | "graceful-fs": "^4.2.0", 850 | "jsonfile": "^6.0.1", 851 | "universalify": "^2.0.0" 852 | } 853 | }, 854 | "jsonfile": { 855 | "version": "6.1.0", 856 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 857 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 858 | "dev": true, 859 | "requires": { 860 | "graceful-fs": "^4.1.6", 861 | "universalify": "^2.0.0" 862 | } 863 | }, 864 | "universalify": { 865 | "version": "2.0.0", 866 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 867 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 868 | "dev": true 869 | } 870 | } 871 | }, 872 | "electron-publish": { 873 | "version": "22.9.1", 874 | "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.9.1.tgz", 875 | "integrity": "sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w==", 876 | "dev": true, 877 | "requires": { 878 | "@types/fs-extra": "^9.0.1", 879 | "bluebird-lst": "^1.0.9", 880 | "builder-util": "22.9.1", 881 | "builder-util-runtime": "8.7.2", 882 | "chalk": "^4.1.0", 883 | "fs-extra": "^9.0.1", 884 | "lazy-val": "^1.0.4", 885 | "mime": "^2.4.6" 886 | }, 887 | "dependencies": { 888 | "fs-extra": { 889 | "version": "9.1.0", 890 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 891 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 892 | "dev": true, 893 | "requires": { 894 | "at-least-node": "^1.0.0", 895 | "graceful-fs": "^4.2.0", 896 | "jsonfile": "^6.0.1", 897 | "universalify": "^2.0.0" 898 | } 899 | }, 900 | "jsonfile": { 901 | "version": "6.1.0", 902 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 903 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 904 | "dev": true, 905 | "requires": { 906 | "graceful-fs": "^4.1.6", 907 | "universalify": "^2.0.0" 908 | } 909 | }, 910 | "universalify": { 911 | "version": "2.0.0", 912 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 913 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 914 | "dev": true 915 | } 916 | } 917 | }, 918 | "electron-squirrel-startup": { 919 | "version": "1.0.0", 920 | "resolved": "https://registry.npm.taobao.org/electron-squirrel-startup/download/electron-squirrel-startup-1.0.0.tgz", 921 | "integrity": "sha1-GbTlWTP6Dvj1VnhLnGYPdyVGoLg=", 922 | "requires": { 923 | "debug": "^2.2.0" 924 | }, 925 | "dependencies": { 926 | "debug": { 927 | "version": "2.6.9", 928 | "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", 929 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", 930 | "requires": { 931 | "ms": "2.0.0" 932 | } 933 | }, 934 | "ms": { 935 | "version": "2.0.0", 936 | "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", 937 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 938 | } 939 | } 940 | }, 941 | "element-ui": { 942 | "version": "2.15.0", 943 | "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", 944 | "integrity": "sha1-3ptzqNHj47UOgrkjpfqVKVI5vUE=", 945 | "requires": { 946 | "async-validator": "~1.8.1", 947 | "babel-helper-vue-jsx-merge-props": "^2.0.0", 948 | "deepmerge": "^1.2.0", 949 | "normalize-wheel": "^1.0.1", 950 | "resize-observer-polyfill": "^1.5.0", 951 | "throttle-debounce": "^1.0.1" 952 | } 953 | }, 954 | "emoji-regex": { 955 | "version": "8.0.0", 956 | "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", 957 | "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", 958 | "dev": true 959 | }, 960 | "encodeurl": { 961 | "version": "1.0.2", 962 | "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", 963 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 964 | "dev": true, 965 | "optional": true 966 | }, 967 | "end-of-stream": { 968 | "version": "1.4.4", 969 | "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", 970 | "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", 971 | "dev": true, 972 | "requires": { 973 | "once": "^1.4.0" 974 | } 975 | }, 976 | "env-paths": { 977 | "version": "2.2.0", 978 | "resolved": "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz", 979 | "integrity": "sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM=", 980 | "dev": true 981 | }, 982 | "es6-error": { 983 | "version": "4.1.1", 984 | "resolved": "https://registry.npm.taobao.org/es6-error/download/es6-error-4.1.1.tgz", 985 | "integrity": "sha1-njr0B0Wd7tR+mpH5uIWoTrBcVh0=", 986 | "dev": true, 987 | "optional": true 988 | }, 989 | "escalade": { 990 | "version": "3.1.1", 991 | "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", 992 | "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", 993 | "dev": true 994 | }, 995 | "escape-goat": { 996 | "version": "2.1.1", 997 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", 998 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", 999 | "dev": true 1000 | }, 1001 | "escape-string-regexp": { 1002 | "version": "1.0.5", 1003 | "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", 1004 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1005 | "dev": true 1006 | }, 1007 | "esprima": { 1008 | "version": "4.0.1", 1009 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1010 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1011 | "dev": true 1012 | }, 1013 | "extract-zip": { 1014 | "version": "1.7.0", 1015 | "resolved": "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.7.0.tgz", 1016 | "integrity": "sha1-VWzDrp339FLEk6DPtRzDAneUCSc=", 1017 | "dev": true, 1018 | "requires": { 1019 | "concat-stream": "^1.6.2", 1020 | "debug": "^2.6.9", 1021 | "mkdirp": "^0.5.4", 1022 | "yauzl": "^2.10.0" 1023 | }, 1024 | "dependencies": { 1025 | "debug": { 1026 | "version": "2.6.9", 1027 | "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", 1028 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", 1029 | "dev": true, 1030 | "requires": { 1031 | "ms": "2.0.0" 1032 | } 1033 | }, 1034 | "ms": { 1035 | "version": "2.0.0", 1036 | "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", 1037 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1038 | "dev": true 1039 | } 1040 | } 1041 | }, 1042 | "fast-deep-equal": { 1043 | "version": "3.1.3", 1044 | "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", 1045 | "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", 1046 | "dev": true 1047 | }, 1048 | "fast-json-stable-stringify": { 1049 | "version": "2.1.0", 1050 | "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", 1051 | "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", 1052 | "dev": true 1053 | }, 1054 | "fd-slicer": { 1055 | "version": "1.1.0", 1056 | "resolved": "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz", 1057 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 1058 | "dev": true, 1059 | "requires": { 1060 | "pend": "~1.2.0" 1061 | } 1062 | }, 1063 | "filelist": { 1064 | "version": "1.0.2", 1065 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", 1066 | "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", 1067 | "dev": true, 1068 | "requires": { 1069 | "minimatch": "^3.0.4" 1070 | } 1071 | }, 1072 | "filename-reserved-regex": { 1073 | "version": "2.0.0", 1074 | "resolved": "https://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz", 1075 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", 1076 | "dev": true 1077 | }, 1078 | "filenamify": { 1079 | "version": "4.2.0", 1080 | "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", 1081 | "integrity": "sha1-yZcW1naGlYWztdMos/BlkNAy6J8=", 1082 | "dev": true, 1083 | "requires": { 1084 | "filename-reserved-regex": "^2.0.0", 1085 | "strip-outer": "^1.0.1", 1086 | "trim-repeated": "^1.0.0" 1087 | } 1088 | }, 1089 | "follow-redirects": { 1090 | "version": "1.13.1", 1091 | "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", 1092 | "integrity": "sha1-X2m4Ezds7k/QR0o6uoNd8Eq3Y7c=" 1093 | }, 1094 | "fs-extra": { 1095 | "version": "8.1.0", 1096 | "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", 1097 | "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", 1098 | "dev": true, 1099 | "requires": { 1100 | "graceful-fs": "^4.2.0", 1101 | "jsonfile": "^4.0.0", 1102 | "universalify": "^0.1.0" 1103 | } 1104 | }, 1105 | "function-bind": { 1106 | "version": "1.1.1", 1107 | "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", 1108 | "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", 1109 | "dev": true 1110 | }, 1111 | "get-caller-file": { 1112 | "version": "2.0.5", 1113 | "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", 1114 | "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", 1115 | "dev": true 1116 | }, 1117 | "get-stream": { 1118 | "version": "4.1.0", 1119 | "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", 1120 | "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", 1121 | "dev": true, 1122 | "requires": { 1123 | "pump": "^3.0.0" 1124 | } 1125 | }, 1126 | "global-agent": { 1127 | "version": "2.1.12", 1128 | "resolved": "https://registry.npm.taobao.org/global-agent/download/global-agent-2.1.12.tgz", 1129 | "integrity": "sha1-5K44Ercxqegcv4Jfk3fvRQqOQZU=", 1130 | "dev": true, 1131 | "optional": true, 1132 | "requires": { 1133 | "boolean": "^3.0.1", 1134 | "core-js": "^3.6.5", 1135 | "es6-error": "^4.1.1", 1136 | "matcher": "^3.0.0", 1137 | "roarr": "^2.15.3", 1138 | "semver": "^7.3.2", 1139 | "serialize-error": "^7.0.1" 1140 | } 1141 | }, 1142 | "global-dirs": { 1143 | "version": "2.1.0", 1144 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", 1145 | "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", 1146 | "dev": true, 1147 | "requires": { 1148 | "ini": "1.3.7" 1149 | }, 1150 | "dependencies": { 1151 | "ini": { 1152 | "version": "1.3.7", 1153 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", 1154 | "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", 1155 | "dev": true 1156 | } 1157 | } 1158 | }, 1159 | "global-tunnel-ng": { 1160 | "version": "2.7.1", 1161 | "resolved": "https://registry.npm.taobao.org/global-tunnel-ng/download/global-tunnel-ng-2.7.1.tgz", 1162 | "integrity": "sha1-0DtRAt/eOmmRT17n2GdhyjXVfY8=", 1163 | "dev": true, 1164 | "optional": true, 1165 | "requires": { 1166 | "encodeurl": "^1.0.2", 1167 | "lodash": "^4.17.10", 1168 | "npm-conf": "^1.1.3", 1169 | "tunnel": "^0.0.6" 1170 | } 1171 | }, 1172 | "globalthis": { 1173 | "version": "1.0.1", 1174 | "resolved": "https://registry.npm.taobao.org/globalthis/download/globalthis-1.0.1.tgz", 1175 | "integrity": "sha1-QBFvXZwHH56PsAN2VN8as6g7fvk=", 1176 | "dev": true, 1177 | "optional": true, 1178 | "requires": { 1179 | "define-properties": "^1.1.3" 1180 | } 1181 | }, 1182 | "got": { 1183 | "version": "9.6.0", 1184 | "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", 1185 | "integrity": "sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU=", 1186 | "dev": true, 1187 | "requires": { 1188 | "@sindresorhus/is": "^0.14.0", 1189 | "@szmarczak/http-timer": "^1.1.2", 1190 | "cacheable-request": "^6.0.0", 1191 | "decompress-response": "^3.3.0", 1192 | "duplexer3": "^0.1.4", 1193 | "get-stream": "^4.1.0", 1194 | "lowercase-keys": "^1.0.1", 1195 | "mimic-response": "^1.0.1", 1196 | "p-cancelable": "^1.0.0", 1197 | "to-readable-stream": "^1.0.0", 1198 | "url-parse-lax": "^3.0.0" 1199 | } 1200 | }, 1201 | "graceful-fs": { 1202 | "version": "4.2.4", 1203 | "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", 1204 | "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", 1205 | "dev": true 1206 | }, 1207 | "has": { 1208 | "version": "1.0.3", 1209 | "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", 1210 | "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", 1211 | "dev": true, 1212 | "requires": { 1213 | "function-bind": "^1.1.1" 1214 | } 1215 | }, 1216 | "has-flag": { 1217 | "version": "4.0.0", 1218 | "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", 1219 | "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", 1220 | "dev": true 1221 | }, 1222 | "has-yarn": { 1223 | "version": "2.1.0", 1224 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 1225 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 1226 | "dev": true 1227 | }, 1228 | "hosted-git-info": { 1229 | "version": "2.8.8", 1230 | "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", 1231 | "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", 1232 | "dev": true 1233 | }, 1234 | "http-cache-semantics": { 1235 | "version": "4.1.0", 1236 | "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz", 1237 | "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=", 1238 | "dev": true 1239 | }, 1240 | "import-lazy": { 1241 | "version": "2.1.0", 1242 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1243 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1244 | "dev": true 1245 | }, 1246 | "imurmurhash": { 1247 | "version": "0.1.4", 1248 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1249 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1250 | "dev": true 1251 | }, 1252 | "inherits": { 1253 | "version": "2.0.4", 1254 | "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", 1255 | "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", 1256 | "dev": true 1257 | }, 1258 | "ini": { 1259 | "version": "1.3.8", 1260 | "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", 1261 | "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=", 1262 | "dev": true 1263 | }, 1264 | "is-ci": { 1265 | "version": "2.0.0", 1266 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1267 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1268 | "dev": true, 1269 | "requires": { 1270 | "ci-info": "^2.0.0" 1271 | } 1272 | }, 1273 | "is-core-module": { 1274 | "version": "2.2.0", 1275 | "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz", 1276 | "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=", 1277 | "dev": true, 1278 | "requires": { 1279 | "has": "^1.0.3" 1280 | } 1281 | }, 1282 | "is-installed-globally": { 1283 | "version": "0.3.2", 1284 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", 1285 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", 1286 | "dev": true, 1287 | "requires": { 1288 | "global-dirs": "^2.0.1", 1289 | "is-path-inside": "^3.0.1" 1290 | } 1291 | }, 1292 | "is-npm": { 1293 | "version": "4.0.0", 1294 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", 1295 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", 1296 | "dev": true 1297 | }, 1298 | "is-obj": { 1299 | "version": "2.0.0", 1300 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1301 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 1302 | "dev": true 1303 | }, 1304 | "is-path-inside": { 1305 | "version": "3.0.2", 1306 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", 1307 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", 1308 | "dev": true 1309 | }, 1310 | "is-typedarray": { 1311 | "version": "1.0.0", 1312 | "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", 1313 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1314 | "dev": true 1315 | }, 1316 | "is-yarn-global": { 1317 | "version": "0.3.0", 1318 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1319 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1320 | "dev": true 1321 | }, 1322 | "isarray": { 1323 | "version": "1.0.0", 1324 | "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", 1325 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1326 | "dev": true 1327 | }, 1328 | "jake": { 1329 | "version": "10.8.2", 1330 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", 1331 | "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", 1332 | "dev": true, 1333 | "requires": { 1334 | "async": "0.9.x", 1335 | "chalk": "^2.4.2", 1336 | "filelist": "^1.0.1", 1337 | "minimatch": "^3.0.4" 1338 | }, 1339 | "dependencies": { 1340 | "ansi-styles": { 1341 | "version": "3.2.1", 1342 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1343 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1344 | "dev": true, 1345 | "requires": { 1346 | "color-convert": "^1.9.0" 1347 | } 1348 | }, 1349 | "async": { 1350 | "version": "0.9.2", 1351 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 1352 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", 1353 | "dev": true 1354 | }, 1355 | "chalk": { 1356 | "version": "2.4.2", 1357 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1358 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1359 | "dev": true, 1360 | "requires": { 1361 | "ansi-styles": "^3.2.1", 1362 | "escape-string-regexp": "^1.0.5", 1363 | "supports-color": "^5.3.0" 1364 | } 1365 | }, 1366 | "color-convert": { 1367 | "version": "1.9.3", 1368 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1369 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1370 | "dev": true, 1371 | "requires": { 1372 | "color-name": "1.1.3" 1373 | } 1374 | }, 1375 | "color-name": { 1376 | "version": "1.1.3", 1377 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1378 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1379 | "dev": true 1380 | }, 1381 | "has-flag": { 1382 | "version": "3.0.0", 1383 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1384 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1385 | "dev": true 1386 | }, 1387 | "supports-color": { 1388 | "version": "5.5.0", 1389 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1390 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1391 | "dev": true, 1392 | "requires": { 1393 | "has-flag": "^3.0.0" 1394 | } 1395 | } 1396 | } 1397 | }, 1398 | "js-yaml": { 1399 | "version": "3.14.1", 1400 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1401 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1402 | "dev": true, 1403 | "requires": { 1404 | "argparse": "^1.0.7", 1405 | "esprima": "^4.0.0" 1406 | } 1407 | }, 1408 | "json-buffer": { 1409 | "version": "3.0.0", 1410 | "resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz", 1411 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1412 | "dev": true 1413 | }, 1414 | "json-schema-traverse": { 1415 | "version": "0.4.1", 1416 | "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", 1417 | "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", 1418 | "dev": true 1419 | }, 1420 | "json-stringify-safe": { 1421 | "version": "5.0.1", 1422 | "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", 1423 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1424 | "dev": true, 1425 | "optional": true 1426 | }, 1427 | "json5": { 1428 | "version": "2.2.0", 1429 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1430 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1431 | "dev": true, 1432 | "requires": { 1433 | "minimist": "^1.2.5" 1434 | } 1435 | }, 1436 | "jsonfile": { 1437 | "version": "4.0.0", 1438 | "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", 1439 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1440 | "dev": true, 1441 | "requires": { 1442 | "graceful-fs": "^4.1.6" 1443 | } 1444 | }, 1445 | "keyv": { 1446 | "version": "3.1.0", 1447 | "resolved": "https://registry.npm.taobao.org/keyv/download/keyv-3.1.0.tgz", 1448 | "integrity": "sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk=", 1449 | "dev": true, 1450 | "requires": { 1451 | "json-buffer": "3.0.0" 1452 | } 1453 | }, 1454 | "latest-version": { 1455 | "version": "5.1.0", 1456 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1457 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1458 | "dev": true, 1459 | "requires": { 1460 | "package-json": "^6.3.0" 1461 | } 1462 | }, 1463 | "lazy-val": { 1464 | "version": "1.0.4", 1465 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", 1466 | "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", 1467 | "dev": true 1468 | }, 1469 | "lodash": { 1470 | "version": "4.17.20", 1471 | "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", 1472 | "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", 1473 | "dev": true, 1474 | "optional": true 1475 | }, 1476 | "lowercase-keys": { 1477 | "version": "1.0.1", 1478 | "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", 1479 | "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", 1480 | "dev": true 1481 | }, 1482 | "lru-cache": { 1483 | "version": "6.0.0", 1484 | "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz", 1485 | "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", 1486 | "dev": true, 1487 | "requires": { 1488 | "yallist": "^4.0.0" 1489 | } 1490 | }, 1491 | "make-dir": { 1492 | "version": "3.1.0", 1493 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1494 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1495 | "dev": true, 1496 | "requires": { 1497 | "semver": "^6.0.0" 1498 | }, 1499 | "dependencies": { 1500 | "semver": { 1501 | "version": "6.3.0", 1502 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1503 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1504 | "dev": true 1505 | } 1506 | } 1507 | }, 1508 | "matcher": { 1509 | "version": "3.0.0", 1510 | "resolved": "https://registry.npm.taobao.org/matcher/download/matcher-3.0.0.tgz", 1511 | "integrity": "sha1-vZBg9MW3CqgEHMxvgDaHYJlPMMo=", 1512 | "dev": true, 1513 | "optional": true, 1514 | "requires": { 1515 | "escape-string-regexp": "^4.0.0" 1516 | }, 1517 | "dependencies": { 1518 | "escape-string-regexp": { 1519 | "version": "4.0.0", 1520 | "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", 1521 | "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", 1522 | "dev": true, 1523 | "optional": true 1524 | } 1525 | } 1526 | }, 1527 | "mime": { 1528 | "version": "2.5.2", 1529 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", 1530 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", 1531 | "dev": true 1532 | }, 1533 | "mimic-response": { 1534 | "version": "1.0.1", 1535 | "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz", 1536 | "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=", 1537 | "dev": true 1538 | }, 1539 | "minimatch": { 1540 | "version": "3.0.4", 1541 | "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", 1542 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", 1543 | "dev": true, 1544 | "requires": { 1545 | "brace-expansion": "^1.1.7" 1546 | } 1547 | }, 1548 | "minimist": { 1549 | "version": "1.2.5", 1550 | "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", 1551 | "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", 1552 | "dev": true 1553 | }, 1554 | "mkdirp": { 1555 | "version": "0.5.5", 1556 | "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz", 1557 | "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", 1558 | "dev": true, 1559 | "requires": { 1560 | "minimist": "^1.2.5" 1561 | } 1562 | }, 1563 | "ms": { 1564 | "version": "2.1.2", 1565 | "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", 1566 | "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", 1567 | "dev": true 1568 | }, 1569 | "normalize-package-data": { 1570 | "version": "2.5.0", 1571 | "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", 1572 | "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", 1573 | "dev": true, 1574 | "requires": { 1575 | "hosted-git-info": "^2.1.4", 1576 | "resolve": "^1.10.0", 1577 | "semver": "2 || 3 || 4 || 5", 1578 | "validate-npm-package-license": "^3.0.1" 1579 | }, 1580 | "dependencies": { 1581 | "semver": { 1582 | "version": "5.7.1", 1583 | "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", 1584 | "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", 1585 | "dev": true 1586 | } 1587 | } 1588 | }, 1589 | "normalize-url": { 1590 | "version": "4.5.0", 1591 | "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz", 1592 | "integrity": "sha1-RTNUCH5sqWlXvY9br3U/WYIUISk=", 1593 | "dev": true 1594 | }, 1595 | "normalize-wheel": { 1596 | "version": "1.0.1", 1597 | "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", 1598 | "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" 1599 | }, 1600 | "npm-conf": { 1601 | "version": "1.1.3", 1602 | "resolved": "https://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz", 1603 | "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", 1604 | "dev": true, 1605 | "optional": true, 1606 | "requires": { 1607 | "config-chain": "^1.1.11", 1608 | "pify": "^3.0.0" 1609 | } 1610 | }, 1611 | "object-keys": { 1612 | "version": "1.1.1", 1613 | "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", 1614 | "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", 1615 | "dev": true, 1616 | "optional": true 1617 | }, 1618 | "once": { 1619 | "version": "1.4.0", 1620 | "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", 1621 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1622 | "dev": true, 1623 | "requires": { 1624 | "wrappy": "1" 1625 | } 1626 | }, 1627 | "p-cancelable": { 1628 | "version": "1.1.0", 1629 | "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz", 1630 | "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=", 1631 | "dev": true 1632 | }, 1633 | "package-json": { 1634 | "version": "6.5.0", 1635 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 1636 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1637 | "dev": true, 1638 | "requires": { 1639 | "got": "^9.6.0", 1640 | "registry-auth-token": "^4.0.0", 1641 | "registry-url": "^5.0.0", 1642 | "semver": "^6.2.0" 1643 | }, 1644 | "dependencies": { 1645 | "semver": { 1646 | "version": "6.3.0", 1647 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1648 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1649 | "dev": true 1650 | } 1651 | } 1652 | }, 1653 | "path-parse": { 1654 | "version": "1.0.6", 1655 | "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", 1656 | "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", 1657 | "dev": true 1658 | }, 1659 | "pend": { 1660 | "version": "1.2.0", 1661 | "resolved": "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", 1662 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1663 | "dev": true 1664 | }, 1665 | "pify": { 1666 | "version": "3.0.0", 1667 | "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", 1668 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1669 | "dev": true, 1670 | "optional": true 1671 | }, 1672 | "prepend-http": { 1673 | "version": "2.0.0", 1674 | "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz", 1675 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1676 | "dev": true 1677 | }, 1678 | "process-nextick-args": { 1679 | "version": "2.0.1", 1680 | "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", 1681 | "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", 1682 | "dev": true 1683 | }, 1684 | "progress": { 1685 | "version": "2.0.3", 1686 | "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", 1687 | "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", 1688 | "dev": true 1689 | }, 1690 | "proto-list": { 1691 | "version": "1.2.4", 1692 | "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", 1693 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 1694 | "dev": true, 1695 | "optional": true 1696 | }, 1697 | "pump": { 1698 | "version": "3.0.0", 1699 | "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", 1700 | "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", 1701 | "dev": true, 1702 | "requires": { 1703 | "end-of-stream": "^1.1.0", 1704 | "once": "^1.3.1" 1705 | } 1706 | }, 1707 | "punycode": { 1708 | "version": "2.1.1", 1709 | "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", 1710 | "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", 1711 | "dev": true 1712 | }, 1713 | "pupa": { 1714 | "version": "2.1.1", 1715 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", 1716 | "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", 1717 | "dev": true, 1718 | "requires": { 1719 | "escape-goat": "^2.0.0" 1720 | } 1721 | }, 1722 | "rc": { 1723 | "version": "1.2.8", 1724 | "resolved": "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz", 1725 | "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", 1726 | "dev": true, 1727 | "requires": { 1728 | "deep-extend": "^0.6.0", 1729 | "ini": "~1.3.0", 1730 | "minimist": "^1.2.0", 1731 | "strip-json-comments": "~2.0.1" 1732 | } 1733 | }, 1734 | "read-config-file": { 1735 | "version": "6.0.0", 1736 | "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", 1737 | "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", 1738 | "dev": true, 1739 | "requires": { 1740 | "dotenv": "^8.2.0", 1741 | "dotenv-expand": "^5.1.0", 1742 | "js-yaml": "^3.13.1", 1743 | "json5": "^2.1.2", 1744 | "lazy-val": "^1.0.4" 1745 | } 1746 | }, 1747 | "readable-stream": { 1748 | "version": "2.3.7", 1749 | "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", 1750 | "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", 1751 | "dev": true, 1752 | "requires": { 1753 | "core-util-is": "~1.0.0", 1754 | "inherits": "~2.0.3", 1755 | "isarray": "~1.0.0", 1756 | "process-nextick-args": "~2.0.0", 1757 | "safe-buffer": "~5.1.1", 1758 | "string_decoder": "~1.1.1", 1759 | "util-deprecate": "~1.0.1" 1760 | } 1761 | }, 1762 | "regenerator-runtime": { 1763 | "version": "0.11.1", 1764 | "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", 1765 | "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" 1766 | }, 1767 | "registry-auth-token": { 1768 | "version": "4.2.1", 1769 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", 1770 | "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", 1771 | "dev": true, 1772 | "requires": { 1773 | "rc": "^1.2.8" 1774 | } 1775 | }, 1776 | "registry-url": { 1777 | "version": "5.1.0", 1778 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 1779 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1780 | "dev": true, 1781 | "requires": { 1782 | "rc": "^1.2.8" 1783 | } 1784 | }, 1785 | "require-directory": { 1786 | "version": "2.1.1", 1787 | "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", 1788 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1789 | "dev": true 1790 | }, 1791 | "resize-observer-polyfill": { 1792 | "version": "1.5.1", 1793 | "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", 1794 | "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" 1795 | }, 1796 | "resolve": { 1797 | "version": "1.19.0", 1798 | "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", 1799 | "integrity": "sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw=", 1800 | "dev": true, 1801 | "requires": { 1802 | "is-core-module": "^2.1.0", 1803 | "path-parse": "^1.0.6" 1804 | } 1805 | }, 1806 | "responselike": { 1807 | "version": "1.0.2", 1808 | "resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz", 1809 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1810 | "dev": true, 1811 | "requires": { 1812 | "lowercase-keys": "^1.0.0" 1813 | } 1814 | }, 1815 | "roarr": { 1816 | "version": "2.15.4", 1817 | "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", 1818 | "integrity": "sha1-9f55W3uDjM/jXcYI4Cgrnrouev0=", 1819 | "dev": true, 1820 | "optional": true, 1821 | "requires": { 1822 | "boolean": "^3.0.1", 1823 | "detect-node": "^2.0.4", 1824 | "globalthis": "^1.0.1", 1825 | "json-stringify-safe": "^5.0.1", 1826 | "semver-compare": "^1.0.0", 1827 | "sprintf-js": "^1.1.2" 1828 | } 1829 | }, 1830 | "safe-buffer": { 1831 | "version": "5.1.2", 1832 | "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", 1833 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", 1834 | "dev": true 1835 | }, 1836 | "safer-buffer": { 1837 | "version": "2.1.2", 1838 | "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", 1839 | "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", 1840 | "dev": true 1841 | }, 1842 | "sanitize-filename": { 1843 | "version": "1.6.3", 1844 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 1845 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 1846 | "dev": true, 1847 | "requires": { 1848 | "truncate-utf8-bytes": "^1.0.0" 1849 | } 1850 | }, 1851 | "sax": { 1852 | "version": "1.2.4", 1853 | "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", 1854 | "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", 1855 | "dev": true 1856 | }, 1857 | "semver": { 1858 | "version": "7.3.4", 1859 | "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", 1860 | "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=", 1861 | "dev": true, 1862 | "requires": { 1863 | "lru-cache": "^6.0.0" 1864 | } 1865 | }, 1866 | "semver-compare": { 1867 | "version": "1.0.0", 1868 | "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz", 1869 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 1870 | "dev": true, 1871 | "optional": true 1872 | }, 1873 | "semver-diff": { 1874 | "version": "3.1.1", 1875 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", 1876 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 1877 | "dev": true, 1878 | "requires": { 1879 | "semver": "^6.3.0" 1880 | }, 1881 | "dependencies": { 1882 | "semver": { 1883 | "version": "6.3.0", 1884 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1885 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1886 | "dev": true 1887 | } 1888 | } 1889 | }, 1890 | "serialize-error": { 1891 | "version": "7.0.1", 1892 | "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", 1893 | "integrity": "sha1-8TYLBEf2H/tIPsQVfHN/q313jhg=", 1894 | "dev": true, 1895 | "optional": true, 1896 | "requires": { 1897 | "type-fest": "^0.13.1" 1898 | }, 1899 | "dependencies": { 1900 | "type-fest": { 1901 | "version": "0.13.1", 1902 | "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", 1903 | "integrity": "sha1-AXLLW86AsL1ULqNI21DH4hg02TQ=", 1904 | "dev": true, 1905 | "optional": true 1906 | } 1907 | } 1908 | }, 1909 | "signal-exit": { 1910 | "version": "3.0.3", 1911 | "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", 1912 | "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", 1913 | "dev": true 1914 | }, 1915 | "source-map": { 1916 | "version": "0.6.1", 1917 | "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", 1918 | "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", 1919 | "dev": true 1920 | }, 1921 | "source-map-support": { 1922 | "version": "0.5.19", 1923 | "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz", 1924 | "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", 1925 | "dev": true, 1926 | "requires": { 1927 | "buffer-from": "^1.0.0", 1928 | "source-map": "^0.6.0" 1929 | } 1930 | }, 1931 | "spdx-correct": { 1932 | "version": "3.1.1", 1933 | "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz", 1934 | "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", 1935 | "dev": true, 1936 | "requires": { 1937 | "spdx-expression-parse": "^3.0.0", 1938 | "spdx-license-ids": "^3.0.0" 1939 | } 1940 | }, 1941 | "spdx-exceptions": { 1942 | "version": "2.3.0", 1943 | "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", 1944 | "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", 1945 | "dev": true 1946 | }, 1947 | "spdx-expression-parse": { 1948 | "version": "3.0.1", 1949 | "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", 1950 | "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", 1951 | "dev": true, 1952 | "requires": { 1953 | "spdx-exceptions": "^2.1.0", 1954 | "spdx-license-ids": "^3.0.0" 1955 | } 1956 | }, 1957 | "spdx-license-ids": { 1958 | "version": "3.0.7", 1959 | "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", 1960 | "integrity": "sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU=", 1961 | "dev": true 1962 | }, 1963 | "sprintf-js": { 1964 | "version": "1.1.2", 1965 | "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz", 1966 | "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", 1967 | "dev": true, 1968 | "optional": true 1969 | }, 1970 | "stat-mode": { 1971 | "version": "1.0.0", 1972 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", 1973 | "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", 1974 | "dev": true 1975 | }, 1976 | "string_decoder": { 1977 | "version": "1.1.1", 1978 | "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", 1979 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", 1980 | "dev": true, 1981 | "requires": { 1982 | "safe-buffer": "~5.1.0" 1983 | } 1984 | }, 1985 | "strip-ansi": { 1986 | "version": "6.0.0", 1987 | "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", 1988 | "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", 1989 | "dev": true, 1990 | "requires": { 1991 | "ansi-regex": "^5.0.0" 1992 | } 1993 | }, 1994 | "strip-json-comments": { 1995 | "version": "2.0.1", 1996 | "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", 1997 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1998 | "dev": true 1999 | }, 2000 | "strip-outer": { 2001 | "version": "1.0.1", 2002 | "resolved": "https://registry.npm.taobao.org/strip-outer/download/strip-outer-1.0.1.tgz", 2003 | "integrity": "sha1-sv0qv2YEudHmATBXGV34Nrip1jE=", 2004 | "dev": true, 2005 | "requires": { 2006 | "escape-string-regexp": "^1.0.2" 2007 | } 2008 | }, 2009 | "sumchecker": { 2010 | "version": "3.0.1", 2011 | "resolved": "https://registry.npm.taobao.org/sumchecker/download/sumchecker-3.0.1.tgz", 2012 | "integrity": "sha1-Y3fplnlauwttNI6bPh37JDRajkI=", 2013 | "dev": true, 2014 | "requires": { 2015 | "debug": "^4.1.0" 2016 | } 2017 | }, 2018 | "supports-color": { 2019 | "version": "7.2.0", 2020 | "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz", 2021 | "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", 2022 | "dev": true, 2023 | "requires": { 2024 | "has-flag": "^4.0.0" 2025 | } 2026 | }, 2027 | "temp-file": { 2028 | "version": "3.3.7", 2029 | "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.7.tgz", 2030 | "integrity": "sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g==", 2031 | "dev": true, 2032 | "requires": { 2033 | "async-exit-hook": "^2.0.1", 2034 | "fs-extra": "^8.1.0" 2035 | } 2036 | }, 2037 | "term-size": { 2038 | "version": "2.2.1", 2039 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", 2040 | "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", 2041 | "dev": true 2042 | }, 2043 | "throttle-debounce": { 2044 | "version": "1.1.0", 2045 | "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz", 2046 | "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=" 2047 | }, 2048 | "to-readable-stream": { 2049 | "version": "1.0.0", 2050 | "resolved": "https://registry.npm.taobao.org/to-readable-stream/download/to-readable-stream-1.0.0.tgz", 2051 | "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=", 2052 | "dev": true 2053 | }, 2054 | "trim-repeated": { 2055 | "version": "1.0.0", 2056 | "resolved": "https://registry.npm.taobao.org/trim-repeated/download/trim-repeated-1.0.0.tgz", 2057 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 2058 | "dev": true, 2059 | "requires": { 2060 | "escape-string-regexp": "^1.0.2" 2061 | } 2062 | }, 2063 | "truncate-utf8-bytes": { 2064 | "version": "1.0.2", 2065 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 2066 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", 2067 | "dev": true, 2068 | "requires": { 2069 | "utf8-byte-length": "^1.0.1" 2070 | } 2071 | }, 2072 | "tunnel": { 2073 | "version": "0.0.6", 2074 | "resolved": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz", 2075 | "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", 2076 | "dev": true, 2077 | "optional": true 2078 | }, 2079 | "type-fest": { 2080 | "version": "0.8.1", 2081 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2082 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2083 | "dev": true 2084 | }, 2085 | "typedarray": { 2086 | "version": "0.0.6", 2087 | "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", 2088 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2089 | "dev": true 2090 | }, 2091 | "typedarray-to-buffer": { 2092 | "version": "3.1.5", 2093 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 2094 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2095 | "dev": true, 2096 | "requires": { 2097 | "is-typedarray": "^1.0.0" 2098 | } 2099 | }, 2100 | "unique-string": { 2101 | "version": "2.0.0", 2102 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 2103 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2104 | "dev": true, 2105 | "requires": { 2106 | "crypto-random-string": "^2.0.0" 2107 | } 2108 | }, 2109 | "universalify": { 2110 | "version": "0.1.2", 2111 | "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", 2112 | "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", 2113 | "dev": true 2114 | }, 2115 | "update-notifier": { 2116 | "version": "4.1.3", 2117 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", 2118 | "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", 2119 | "dev": true, 2120 | "requires": { 2121 | "boxen": "^4.2.0", 2122 | "chalk": "^3.0.0", 2123 | "configstore": "^5.0.1", 2124 | "has-yarn": "^2.1.0", 2125 | "import-lazy": "^2.1.0", 2126 | "is-ci": "^2.0.0", 2127 | "is-installed-globally": "^0.3.1", 2128 | "is-npm": "^4.0.0", 2129 | "is-yarn-global": "^0.3.0", 2130 | "latest-version": "^5.0.0", 2131 | "pupa": "^2.0.1", 2132 | "semver-diff": "^3.1.1", 2133 | "xdg-basedir": "^4.0.0" 2134 | }, 2135 | "dependencies": { 2136 | "chalk": { 2137 | "version": "3.0.0", 2138 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 2139 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 2140 | "dev": true, 2141 | "requires": { 2142 | "ansi-styles": "^4.1.0", 2143 | "supports-color": "^7.1.0" 2144 | } 2145 | } 2146 | } 2147 | }, 2148 | "uri-js": { 2149 | "version": "4.4.1", 2150 | "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", 2151 | "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", 2152 | "dev": true, 2153 | "requires": { 2154 | "punycode": "^2.1.0" 2155 | } 2156 | }, 2157 | "url-parse-lax": { 2158 | "version": "3.0.0", 2159 | "resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz", 2160 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2161 | "dev": true, 2162 | "requires": { 2163 | "prepend-http": "^2.0.0" 2164 | } 2165 | }, 2166 | "utf8-byte-length": { 2167 | "version": "1.0.4", 2168 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 2169 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", 2170 | "dev": true 2171 | }, 2172 | "util-deprecate": { 2173 | "version": "1.0.2", 2174 | "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", 2175 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2176 | "dev": true 2177 | }, 2178 | "validate-npm-package-license": { 2179 | "version": "3.0.4", 2180 | "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", 2181 | "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", 2182 | "dev": true, 2183 | "requires": { 2184 | "spdx-correct": "^3.0.0", 2185 | "spdx-expression-parse": "^3.0.0" 2186 | } 2187 | }, 2188 | "vue": { 2189 | "version": "2.6.12", 2190 | "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", 2191 | "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM=" 2192 | }, 2193 | "widest-line": { 2194 | "version": "3.1.0", 2195 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 2196 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 2197 | "dev": true, 2198 | "requires": { 2199 | "string-width": "^4.0.0" 2200 | }, 2201 | "dependencies": { 2202 | "is-fullwidth-code-point": { 2203 | "version": "3.0.0", 2204 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2205 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2206 | "dev": true 2207 | }, 2208 | "string-width": { 2209 | "version": "4.2.0", 2210 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2211 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2212 | "dev": true, 2213 | "requires": { 2214 | "emoji-regex": "^8.0.0", 2215 | "is-fullwidth-code-point": "^3.0.0", 2216 | "strip-ansi": "^6.0.0" 2217 | } 2218 | } 2219 | } 2220 | }, 2221 | "wrap-ansi": { 2222 | "version": "7.0.0", 2223 | "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz", 2224 | "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", 2225 | "dev": true, 2226 | "requires": { 2227 | "ansi-styles": "^4.0.0", 2228 | "string-width": "^4.1.0", 2229 | "strip-ansi": "^6.0.0" 2230 | }, 2231 | "dependencies": { 2232 | "is-fullwidth-code-point": { 2233 | "version": "3.0.0", 2234 | "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 2235 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 2236 | "dev": true 2237 | }, 2238 | "string-width": { 2239 | "version": "4.2.0", 2240 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", 2241 | "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", 2242 | "dev": true, 2243 | "requires": { 2244 | "emoji-regex": "^8.0.0", 2245 | "is-fullwidth-code-point": "^3.0.0", 2246 | "strip-ansi": "^6.0.0" 2247 | } 2248 | } 2249 | } 2250 | }, 2251 | "wrappy": { 2252 | "version": "1.0.2", 2253 | "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", 2254 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2255 | "dev": true 2256 | }, 2257 | "write-file-atomic": { 2258 | "version": "3.0.3", 2259 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 2260 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2261 | "dev": true, 2262 | "requires": { 2263 | "imurmurhash": "^0.1.4", 2264 | "is-typedarray": "^1.0.0", 2265 | "signal-exit": "^3.0.2", 2266 | "typedarray-to-buffer": "^3.1.5" 2267 | } 2268 | }, 2269 | "xdg-basedir": { 2270 | "version": "4.0.0", 2271 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 2272 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 2273 | "dev": true 2274 | }, 2275 | "y18n": { 2276 | "version": "5.0.5", 2277 | "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", 2278 | "integrity": "sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg=", 2279 | "dev": true 2280 | }, 2281 | "yallist": { 2282 | "version": "4.0.0", 2283 | "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", 2284 | "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", 2285 | "dev": true 2286 | }, 2287 | "yargs": { 2288 | "version": "16.2.0", 2289 | "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", 2290 | "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", 2291 | "dev": true, 2292 | "requires": { 2293 | "cliui": "^7.0.2", 2294 | "escalade": "^3.1.1", 2295 | "get-caller-file": "^2.0.5", 2296 | "require-directory": "^2.1.1", 2297 | "string-width": "^4.2.0", 2298 | "y18n": "^5.0.5", 2299 | "yargs-parser": "^20.2.2" 2300 | }, 2301 | "dependencies": { 2302 | "is-fullwidth-code-point": { 2303 | "version": "3.0.0", 2304 | "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", 2305 | "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", 2306 | "dev": true 2307 | }, 2308 | "string-width": { 2309 | "version": "4.2.0", 2310 | "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", 2311 | "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", 2312 | "dev": true, 2313 | "requires": { 2314 | "emoji-regex": "^8.0.0", 2315 | "is-fullwidth-code-point": "^3.0.0", 2316 | "strip-ansi": "^6.0.0" 2317 | } 2318 | } 2319 | } 2320 | }, 2321 | "yargs-parser": { 2322 | "version": "20.2.4", 2323 | "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", 2324 | "integrity": "sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ=", 2325 | "dev": true 2326 | }, 2327 | "yauzl": { 2328 | "version": "2.10.0", 2329 | "resolved": "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz", 2330 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2331 | "dev": true, 2332 | "requires": { 2333 | "buffer-crc32": "~0.2.3", 2334 | "fd-slicer": "~1.1.0" 2335 | } 2336 | } 2337 | } 2338 | } 2339 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TDengineGUI", 3 | "version": "1.0.0", 4 | "description": "A simple TDengine DeskTop Manager", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron .", 8 | "build": "electron-builder" 9 | }, 10 | "build": { 11 | "appId": "com.skype.tdenginegui", 12 | "productName": "TDengineGUI", 13 | "win": { 14 | "icon": "build/icons/logo1.ico", 15 | "target": [ 16 | "nsis" 17 | ] 18 | }, 19 | "dmg": { 20 | "contents": [ 21 | { 22 | "x": 410, 23 | "y": 150, 24 | "type": "link", 25 | "path": "/Applications" 26 | }, 27 | { 28 | "x": 130, 29 | "y": 150, 30 | "type": "file" 31 | } 32 | ] 33 | }, 34 | "mac": { 35 | "icon": "build/icons/logo.icns" 36 | }, 37 | "linux": { 38 | "icon": "build/icons/logo.icns" 39 | }, 40 | "nsis": { 41 | "oneClick": false, 42 | "perMachine": true, 43 | "allowToChangeInstallationDirectory": true 44 | } 45 | }, 46 | "keywords": [ 47 | "Electron", 48 | "TDengine", 49 | "GUI" 50 | ], 51 | "author": "skye0207", 52 | "devDependencies": { 53 | "electron-builder": "^22.9.1", 54 | "electron": "^11.1.1" 55 | }, 56 | "dependencies": { 57 | "axios": "^0.21.1", 58 | "electron-squirrel-startup": "^1.0.0", 59 | "element-ui": "^2.15.0", 60 | "vue": "^2.6.12" 61 | }, 62 | "browserslist": [ 63 | "> 1%", 64 | "last 2 versions", 65 | "not ie <= 8" 66 | ] 67 | } 68 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | // All of the Node.js APIs are available in the preload process. 2 | // It has the same sandbox as a Chrome extension. 3 | window.addEventListener('DOMContentLoaded', () => { 4 | const replaceText = (selector, text) => { 5 | const element = document.getElementById(selector) 6 | if (element) element.innerText = text 7 | } 8 | 9 | for (const type of ['chrome', 'node', 'electron']) { 10 | replaceText(`${type}-version`, process.versions[type]) 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /renderer/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/add.png -------------------------------------------------------------------------------- /renderer/img/database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/database.png -------------------------------------------------------------------------------- /renderer/img/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/delete.png -------------------------------------------------------------------------------- /renderer/img/delete_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/delete_.png -------------------------------------------------------------------------------- /renderer/img/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/edit.png -------------------------------------------------------------------------------- /renderer/img/edit_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/edit_.png -------------------------------------------------------------------------------- /renderer/img/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/file.png -------------------------------------------------------------------------------- /renderer/img/fresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/fresh.png -------------------------------------------------------------------------------- /renderer/img/fresh_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/fresh_.png -------------------------------------------------------------------------------- /renderer/img/order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/order.png -------------------------------------------------------------------------------- /renderer/img/order_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/order_.png -------------------------------------------------------------------------------- /renderer/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/search.png -------------------------------------------------------------------------------- /renderer/img/search_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/search_.png -------------------------------------------------------------------------------- /renderer/img/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skye0207/TDengineGUI/adfbcbd0670739ba07cb18bfa4ff896492184684/renderer/img/switch.png -------------------------------------------------------------------------------- /renderer/index.css: -------------------------------------------------------------------------------- 1 | 2 | html, body, div { 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | .app{ 8 | height: 100%; 9 | } 10 | 11 | .el-drawer { 12 | padding: 0px 0px 0px 20px; 13 | width: 600px; 14 | } 15 | 16 | .linkBtn{ 17 | width: 90%; 18 | } 19 | 20 | .el-menu{ 21 | border: none; 22 | margin-top: 20px; 23 | width: 90%; 24 | } 25 | 26 | .el-dialog { 27 | z-index: 1000; 28 | } 29 | .main{ 30 | height: 100%; 31 | } 32 | .mainContent{ 33 | height: 100%; 34 | } 35 | 36 | .tablePage{ 37 | height: 90%; 38 | } 39 | 40 | .mainTab{ 41 | width: 100%; 42 | border: none; 43 | box-shadow: none; 44 | } 45 | .tableWrapper{ 46 | height: 100%; 47 | } 48 | 49 | .el-aside { 50 | /* text-align: center; */ 51 | border-right: 1px solid #efefef; 52 | } 53 | 54 | .el-main { 55 | padding-top: 0; 56 | } 57 | 58 | .el-footer { 59 | border-top: 1px solid #efefef; 60 | font-size: 12px; 61 | display: flex; 62 | align-items: center; 63 | height: 35px !important; 64 | } 65 | 66 | .linkformstyle{ 67 | margin: 0 10px; 68 | } 69 | 70 | .icon{ 71 | height: 12px; 72 | width: 12px; 73 | position: relative; 74 | top: 1px; 75 | } 76 | 77 | .icon1{ 78 | height: 16px; 79 | width: 16px; 80 | position: relative; 81 | top: 2px; 82 | cursor: pointer; 83 | z-index: 111; 84 | } 85 | 86 | .icon11{ 87 | height: 16px; 88 | width: 16px; 89 | position: relative; 90 | bottom: 1px; 91 | right: 8px; 92 | } 93 | .icon111{ 94 | height: 16px; 95 | width: 16px; 96 | position: absolute; 97 | top: 19px; 98 | right: 8px; 99 | } 100 | 101 | .switchBtn{ 102 | position: relative; 103 | bottom: 1px; 104 | } 105 | 106 | .footTextWrapper{ 107 | margin-left: 10px; 108 | 109 | } 110 | 111 | .footText{ 112 | margin-left: 10px; 113 | font-size: 13px; 114 | color: #444; 115 | } 116 | 117 | .iconWrapper{ 118 | display: inline; 119 | margin-left: 50px; 120 | } 121 | 122 | .iconWrapper2{ 123 | display: inline; 124 | position:absolute; 125 | right: 14px; 126 | height: 100%; 127 | } 128 | .iconWrapper3{ 129 | display: inline; 130 | position:absolute; 131 | right: 54px; 132 | } 133 | 134 | .surperTables{ 135 | margin-left: 10px; 136 | cursor: pointer; 137 | } 138 | 139 | .paginationWrapper{ 140 | margin-top: 20px; 141 | display: flex; 142 | justify-content: center; 143 | } 144 | 145 | .menu{ 146 | overflow-y: auto; 147 | height: 650px; 148 | } 149 | 150 | .greyText{ 151 | color: #606266; 152 | } 153 | 154 | .checkboxGroup{ 155 | margin: 10px 0 0 10px; 156 | } 157 | 158 | .btnGroup{ 159 | margin: 6px 0 0 10px; 160 | } 161 | 162 | .checkboxGroup2{ 163 | margin: 12px 0 0 10px; 164 | } 165 | 166 | .surperTSearchRow{ 167 | margin: 20px 0 20px 0; 168 | } 169 | 170 | .el-select { 171 | width: 130px; 172 | } 173 | 174 | .input-with-select .el-input-group__prepend { 175 | background-color: #fff; 176 | } 177 | 178 | .freshDataBtn{ 179 | padding-left: 20px; 180 | } 181 | 182 | .dataPackerLabel{ 183 | line-height: 34px; 184 | font-size: 14px; 185 | color: #606266; 186 | } 187 | 188 | .consoleWrapper{ 189 | height: 90%; 190 | width:100%; 191 | } 192 | 193 | .resultPlace{ 194 | height: 92%; 195 | width: 100%; 196 | border: 1px solid #DCDFE6; 197 | border-radius: 4px; 198 | margin-top: 15px; 199 | } 200 | 201 | .resultPlaceTitle{ 202 | color: #DCDFE6; 203 | margin-top: 7px; 204 | margin-left: 10px; 205 | } 206 | 207 | .iconWrapper_{ 208 | display: inline; 209 | } 210 | 211 | .switchStyle{ 212 | margin-left: 12px; 213 | position: relative; 214 | bottom: 3px; 215 | } 216 | 217 | .el-switch__label{ 218 | height: auto !important; 219 | } 220 | 221 | .addDBswitchStyle{ 222 | position: relative; 223 | top: 6px; 224 | } 225 | 226 | 227 | -------------------------------------------------------------------------------- /renderer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TDengineGUI 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 19 |
20 | 21 | 新建连接 22 | 23 | 24 | 25 | 34 | 35 | 36 | {{db.name}} 37 | 38 | 39 | 40 | 41 | 42 |
43 | 44 |
45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 69 | 70 | 71 | 72 | 73 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 |
126 | 127 | 133 | 136 | 149 | 157 | 158 | 159 | 160 | 165 | 167 | 168 | 169 | 170 | 取 消 171 | 确 定 172 | 173 | 174 |
175 |
176 | 177 |
178 | 179 | 180 | 181 | 182 | 184 | 185 | 186 | 全选 187 | 反选 188 | 189 | 190 | 191 | 192 | {{label}} 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 10 201 | 15 202 | 20 203 | 204 | 205 | 206 | 213 | 214 | 215 | 216 | 217 | 取消 218 | 设置 219 | 220 | 221 | 222 | 223 | 时间范围: 224 | 225 | 226 | 227 |
228 | 239 | 240 |
241 | 242 | 243 | 244 | 250 |
251 | 252 | 筛选条件 253 | 254 | 255 | 数据刷新 256 | 257 |
258 | 259 | 265 | 271 | 272 | 278 | 279 | 280 | 281 |
282 | 289 | 290 |
291 |
292 |
293 |
294 |
295 | 296 | 297 | 298 |
299 | 300 | 306 | 309 | 322 | 330 | 331 | 332 | 333 | 338 | 340 | 341 | 342 | 343 | 取 消 344 | 确 定 345 | 346 | 347 |
348 |
349 | 350 |
351 | 352 | 353 | 354 | 356 | 357 | 358 | 全选 359 | 反选 360 | 361 | 362 | 363 | 364 | {{label}} 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 10 374 | 15 375 | 20 376 | 377 | 378 | 379 | 386 | 387 | 388 | 389 | 取消 390 | 设置 391 | 392 | 393 | 394 | 395 | 396 | 时间范围: 397 | 398 |
399 | 410 | 411 |
412 |
413 | 421 | 422 | 筛选条件 423 | 424 | 425 | 数据刷新 426 | 427 |
428 | 434 | 440 | 441 | 446 | 447 | 448 | 449 |
450 | 457 | 458 |
459 |
460 |
461 |
462 |
463 | 464 |
465 | 466 | 467 | 468 | 469 |
470 | 471 |
{{consoleResult}}
472 |
473 |
474 |
475 |

476 |
477 | 478 |
479 | 480 | 481 | 482 | 483 | 切换 484 |
485 | 486 |
487 |
当前连接:
488 |
{{theLink.name}}
489 |
主机:
490 |
{{theLink.host}}
491 |
端口:
492 |
{{theLink.port}}
493 |
用户名:
494 |
{{theLink.user}}
495 |
数据库:
496 |
{{theDB}}
497 |
498 |
499 | 500 |
501 | 504 | 505 | 506 | -------------------------------------------------------------------------------- /renderer/index.js: -------------------------------------------------------------------------------- 1 | const TaosRestful = require('./taosrestful_.js') 2 | const storage = require('./localDataStore.js') 3 | const { TouchBarScrubber } = require('electron') 4 | 5 | new Vue({ 6 | el: '#app', 7 | mounted: function () { 8 | let links = storage.getLinks() 9 | for(let i = 0,len=links.length; i < len; i++) { 10 | let payload = { 11 | ip:links[i].host, 12 | port:links[i].port, 13 | user:links[i].user, 14 | password:links[i].password 15 | } 16 | TaosRestful.getVersion(payload).then(data => { 17 | links[i].version = data 18 | this.$data.links =links 19 | }) 20 | } 21 | 22 | }, 23 | data: function() { 24 | return { 25 | dbInfo:'', 26 | consoleResult:'', 27 | loadingLinks: false, 28 | drawer: true, 29 | addLinkDialog: false, 30 | linkForm: { 31 | name:"", 32 | host:"", 33 | port:"", 34 | user:"", 35 | password:"", 36 | }, 37 | activeTab:"1", 38 | 39 | surperTableFilterCopy:{}, 40 | 41 | surperTableFilter:{ 42 | fields:[], 43 | surperDateRange:[], 44 | surperTSearchText: "", 45 | surperTSearchColumn: "", 46 | }, 47 | 48 | tableFilterCopy:{}, 49 | tableFilter:{ 50 | fields:[], 51 | dateRange:[], 52 | tableSearchText:"", 53 | tableSearchColumn:"", 54 | }, 55 | surperWhere:"", 56 | tableWhere:"", 57 | 58 | tableFilterDialog:false, 59 | surperTableFilterDialog:false, 60 | 61 | surperTables: [], //超级表list 62 | surperTableData: [], 63 | surperTableName: "", 64 | totalSurperTable: 0, 65 | surperTableLabelItems: [], 66 | surperTableLabel: [], 67 | loadingSurperList: false, 68 | loadingSurperTable: false, 69 | 70 | tables: [], //表list 71 | tableData: [], 72 | tableName: "", 73 | totalTable: 0, 74 | tableLabelItems: [], 75 | tableLabel: [], 76 | loadingTableList: false, 77 | loadingTable: false, 78 | 79 | eachPageSurperTable:10, 80 | currentPageSurperTable:1, 81 | eachPageTable:10, 82 | currentPageTable:1, 83 | 84 | addDBDialogLinkKey:0, 85 | addDBDialog:false, 86 | addDBname:"", 87 | addDBcomp:"", 88 | addDBreplica:"", 89 | addDBkeep:"", 90 | addDBupdate:false, 91 | addDBquorum:"", 92 | addDBblocks:"", 93 | 94 | searchIcon: true, 95 | freshIcon: true, 96 | links:[], 97 | theLink:{}, //当前连接 98 | theDB: "", //当前数据库 99 | 100 | SuperTdialog: false, 101 | SuperTdialogText: "", 102 | Tdialog: false, 103 | TdialogText: "", 104 | 105 | surperTorder:"ASC", 106 | Torder:"ASC", 107 | consoleInput: "", 108 | marks: { 109 | 0: '0', 110 | 365: '365', 111 | 36500: '36500' 112 | } 113 | } 114 | }, 115 | methods: { 116 | beforeClosedrawer(){ 117 | if(this.theDB){ 118 | this.drawer = false 119 | } else { 120 | this.$message({ 121 | message: '请选择数据库', 122 | type: 'warning', 123 | duration:1000 124 | }); 125 | } 126 | }, 127 | cancelAddLink() { 128 | this.addLinkDialog = false 129 | //清空表单 130 | this.linkForm={ 131 | name:"", 132 | host:"", 133 | port:"", 134 | user:"", 135 | password:"" 136 | } 137 | }, 138 | confirmAddLink(event) { 139 | //新建连接,先连接,如果成功,将payload+name记入本地 140 | //var tr = new TaosRestful("121.36.56.117","6041","root","msl110918") 141 | let payload = { 142 | ip:this.linkForm.host, 143 | port:this.linkForm.port, 144 | user:this.linkForm.user, 145 | password:this.linkForm.password 146 | } 147 | TaosRestful.showDatabases(payload).then(data =>{ 148 | //处理返回的数据库数据 149 | if(data.res){ 150 | 151 | TaosRestful.getVersion(payload).then(_data => { 152 | //连接成功,保存到本地 153 | storage.AddALink({ 154 | name: this.linkForm.name, 155 | host: this.linkForm.host, 156 | port: this.linkForm.port, 157 | user: this.linkForm.user, 158 | password: this.linkForm.password, 159 | version: _data 160 | }) 161 | //关闭新建连接的弹窗 162 | this.addLinkDialog = false 163 | //清空表单 164 | this.linkForm={ 165 | name:"", 166 | host:"", 167 | port:"", 168 | user:"", 169 | password:"", 170 | } 171 | 172 | //更新连接列表 173 | this.links = storage.getLinks() 174 | }) 175 | 176 | } else { 177 | //连接失败 178 | this.$message({ 179 | message: '连接失败', 180 | type: 'error', 181 | duration:1000 182 | }); 183 | } 184 | 185 | } 186 | ) 187 | 188 | }, 189 | deleteLink(key, linkName){ 190 | this.$confirm('确认删除连接' + linkName + "吗?") 191 | .then(_ => { 192 | storage.deleteALink(key) 193 | this.links = storage.getLinks() 194 | this.$message({ 195 | message: '删除成功', 196 | type: 'success', 197 | duration:500 198 | }); 199 | }) 200 | .catch(_ => { 201 | this.$message({ 202 | message: '操作已取消', 203 | type: 'warning', 204 | duration:500 205 | }); 206 | }); 207 | }, 208 | freshDB(key){ 209 | let theLink = this.links[key] 210 | let payload = { 211 | ip:theLink.host, 212 | port:theLink.port, 213 | user:theLink.user, 214 | password:theLink.password 215 | } 216 | this.loadingLinks = true 217 | TaosRestful.showDatabases(payload).then(data =>{ 218 | this.loadingLinks = false 219 | if(data.res){ 220 | this.$message({ 221 | message: '刷新成功', 222 | type: 'success', 223 | duration:1000 224 | }); 225 | this.links[key].dbs = data.data 226 | //TODO展开菜单 227 | 228 | } else { 229 | //连接失败,1.提示 2.删除当前连接 3.重新连接 230 | //1 231 | this.$message({ 232 | message: data.msg, 233 | type: 'error', 234 | duration:1000 235 | }); 236 | //2 237 | storage.deleteALink(key) 238 | this.links = storage.getLinks() 239 | //3 240 | this.$message({ 241 | message: '尝试重新连接', 242 | type: 'warning', 243 | duration:1000 244 | }); 245 | this.linkForm = { 246 | name: theLink.name, 247 | host: theLink.host, 248 | port: theLink.port, 249 | user: theLink.user, 250 | password: theLink.password, 251 | } 252 | this.addLinkDialog = true 253 | } 254 | }) 255 | }, 256 | addDB(key){ 257 | this.addDBDialogLinkKey = key 258 | this.addDBDialog = true 259 | 260 | this.addDBname = "" 261 | this.addDBcomp = "" 262 | this.addDBreplica = "" 263 | this.addDBkeep = "" 264 | this.addDBupdate = false 265 | this.addDBquorum = "" 266 | this.addDBblocks = "" 267 | }, 268 | postaddDB(){ 269 | let key = this.addDBDialogLinkKey 270 | let theLink = this.links[key] 271 | let payload = { 272 | ip:theLink.host, 273 | port:theLink.port, 274 | user:theLink.user, 275 | password:theLink.password 276 | } 277 | if(this.addDBname){ 278 | if(this.addDBreplica && this.addDBquorum){ 279 | if(this.addDBreplica < this.addDBquorum){ 280 | this.$message({ 281 | message: 'replica应大于等于quorum', 282 | type: 'error', 283 | duration:1000 284 | }); 285 | return 286 | } 287 | } 288 | 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 => { 289 | if(data.res){ 290 | //新增成功 291 | this.$message({ 292 | message: '添加成功', 293 | type: 'success', 294 | duration:1000 295 | }); 296 | this.freshDB(key) 297 | this.addDBDialog = false 298 | }else{ 299 | //添加失败 300 | this.$message({ 301 | message: data.msg, 302 | type: 'error', 303 | duration:1000 304 | }); 305 | } 306 | }) 307 | } else{ 308 | this.$message({ 309 | message: '请填写内容', 310 | type: 'warning', 311 | duration:1000 312 | }); 313 | } 314 | }, 315 | deleteDB(link, dbName, key){ 316 | this.$confirm('确认删除数据库' + dbName + "吗?") 317 | .then(_ => { 318 | let payload = { 319 | ip:link.host, 320 | port:link.port, 321 | user:link.user, 322 | password:link.password 323 | } 324 | this.loadingLinks = true 325 | 326 | TaosRestful.dropDatabase(dbName, payload).then(data => { 327 | 328 | if(data.res){ 329 | //成功 330 | this.$message({ 331 | message: '删除成功', 332 | type: 'success', 333 | duration:1000 334 | }); 335 | } else { 336 | this.$message({ 337 | message: data.msg, 338 | type: 'error', 339 | duration:1000 340 | }); 341 | } 342 | this.loadingLinks = false 343 | this.freshDB(key) 344 | }) 345 | }) 346 | .catch(_ => { 347 | this.$message({ 348 | message: '操作已取消', 349 | type: 'warning', 350 | duration:1000 351 | }); 352 | }); 353 | }, 354 | makeDbInfo(dbs,dbName){ 355 | console.log(dbs) 356 | let info = '无法获取数据库信息' 357 | dbs.forEach(item => { 358 | if(item['name'] == dbName){ 359 | info = `数据库名:  ${dbName}
` 360 | info += `创建时间:  ${item['created_time']}
` 361 | info += `可更新:  ${item['update'] == 0?'否':'是'}
` 362 | info += `cache(MB):  ${item['cache(MB)']}
` 363 | info += `cachelast:  ${item['cachelast']}
` 364 | info += `comp:  ${item['comp']}
` 365 | info += `days:  ${item['days']}
` 366 | info += `fsync:  ${item['fsync']}
` 367 | info += `keep0,keep1,keep(D):  ${item['keep0,keep1,keep(D)']}
` 368 | info += `maxrows:  ${item['maxrows']}
` 369 | info += `minrows:  ${item['minrows']}
` 370 | info += `ntables:  ${item['ntables']}
` 371 | info += `quorum:  ${item['quorum']}
` 372 | info += `replica:  ${item['replica']}
` 373 | info += `status:  ${item['status']}
` 374 | info += `vgroups:  ${item['vgroups']}
` 375 | info += `wallevel:  ${item['wallevel']}
` 376 | info += `precision:  ${item['precision']}
` 377 | } 378 | }) 379 | return info 380 | }, 381 | alartDB(link,dbName){ 382 | //切换数据库前先清空表 383 | this.dbInfo=this.makeDbInfo(link.dbs,dbName) 384 | this.surperTables = [] 385 | this.clearSurperTable() 386 | this.tables = [] 387 | this.clearTable() 388 | 389 | //记录进入的数据库 390 | this.theLink = link 391 | this.theDB = dbName 392 | 393 | //更新超级表页 394 | this.drawer = false 395 | this.activeTab = "1" 396 | this.freshSurperTables() 397 | }, 398 | searchSurperTList(){ 399 | this.SuperTdialog = false 400 | this.surperTables = [] 401 | this.clearSurperTable() 402 | let payload = { 403 | ip:this.theLink.host, 404 | port:this.theLink.port, 405 | user:this.theLink.user, 406 | password:this.theLink.password 407 | } 408 | this.loadingSurperList = true 409 | TaosRestful.showSuperTables(this.theDB, payload, like=this.SuperTdialogText).then(data =>{ 410 | if(data.res){ 411 | //拉取超级表成功 412 | this.$message({ 413 | message: '查找成功', 414 | type: 'success', 415 | duration:1000 416 | }); 417 | this.surperTables = data.data 418 | } else { 419 | this.$message({ 420 | message: data.msg, 421 | type: 'error', 422 | duration:1000 423 | }); 424 | this.freshSurperTables() 425 | } 426 | this.SuperTdialogText = "" 427 | this.loadingSurperList = false 428 | }) 429 | 430 | }, 431 | freshSurperTList(){ 432 | this.surperTables = [] 433 | this.clearSurperTable() 434 | this.freshSurperTables() 435 | }, 436 | searchTList(){ 437 | this.Tdialog = false 438 | this.tables = [] 439 | this.clearTable() 440 | 441 | let payload = { 442 | ip:this.theLink.host, 443 | port:this.theLink.port, 444 | user:this.theLink.user, 445 | password:this.theLink.password 446 | } 447 | this.loadingTableList = true 448 | TaosRestful.showTables(this.theDB, payload, like=this.TdialogText).then(data =>{ 449 | if(data.res){ 450 | //拉取表成功 451 | this.$message({ 452 | message: '查找成功', 453 | type: 'success', 454 | duration:1000 455 | }); 456 | this.tables = data.data 457 | }else{ 458 | this.$message({ 459 | message: data.msg, 460 | type: 'error', 461 | duration:1000 462 | }); 463 | this.freshTables() 464 | 465 | } 466 | this.TdialogText = "" 467 | this.loadingTableList = false 468 | }) 469 | }, 470 | freshTList(){ 471 | this.tables = [] 472 | this.clearTable() 473 | this.freshTables() 474 | }, 475 | clearSurperTable(){ 476 | this.surperTableName = "" 477 | this.totalSurperTable = 0 478 | this.surperTableData = [] 479 | this.surperTableLabel = [] 480 | this.surperTableFilter={ 481 | fields:[], 482 | surperDateRange:[], 483 | surperTSearchText: "", 484 | surperTSearchColumn: "", 485 | } 486 | }, 487 | clearTable(){ 488 | this.tableName = "" 489 | this.totalTable = 0 490 | this.tableData = [] 491 | this.tableLabel = [] 492 | this.tableFilter={ 493 | fields:[], 494 | dateRange:[], 495 | tableSearchText:"", 496 | tableSearchColumn:"", 497 | } 498 | }, 499 | freshSurperTables(){ 500 | //清理超级表列表 501 | this.surperTables = [] 502 | //清理选中的超级表和具体数据 503 | this.clearSurperTable() 504 | 505 | let payload = { 506 | ip:this.theLink.host, 507 | port:this.theLink.port, 508 | user:this.theLink.user, 509 | password:this.theLink.password 510 | } 511 | this.loadingSurperList = true 512 | TaosRestful.showSuperTables(this.theDB, payload).then(data =>{ 513 | if(data.res){ 514 | //拉取超级表成功 515 | this.$message({ 516 | message: '刷新成功', 517 | type: 'success', 518 | duration:1000 519 | }); 520 | this.surperTables = data.data 521 | } else { 522 | this.$message({ 523 | message: data.msg, 524 | type: 'error', 525 | duration:1000 526 | }); 527 | } 528 | this.loadingSurperList = false 529 | }) 530 | }, 531 | freshTables(){ 532 | //清理表列表 533 | this.tables = [] 534 | //清理选中的表和具体数据 535 | this.clearTable() 536 | 537 | let payload = { 538 | ip:this.theLink.host, 539 | port:this.theLink.port, 540 | user:this.theLink.user, 541 | password:this.theLink.password 542 | } 543 | this.loadingTableList = true 544 | TaosRestful.showTables(this.theDB, payload).then(data =>{ 545 | if(data.res){ 546 | //拉取表成功 547 | this.$message({ 548 | message: '刷新成功', 549 | type: 'success', 550 | duration:1000 551 | }); 552 | this.tables = data.data 553 | }else{ 554 | this.$message({ 555 | message: data.msg, 556 | type: 'error', 557 | duration:1000 558 | }); 559 | } 560 | this.loadingTableList = false 561 | }) 562 | }, 563 | handleSwichTab(tab) { 564 | switch(tab.name) { 565 | case "1": 566 | //超级表 567 | this.freshSurperTables() 568 | break; 569 | case "2": 570 | //表 571 | this.freshTables() 572 | break; 573 | case "3": 574 | //控制台 575 | break; 576 | case "4": 577 | //数据库属性 578 | break; 579 | } 580 | }, 581 | openSurperTableFilterD(){ 582 | this.surperTableFilterDialog = true 583 | this.surperTableFilterCopy = JSON.parse(JSON.stringify(this.surperTableFilter)) 584 | }, 585 | concelSurperTableFilter(){ 586 | this.$message({ 587 | message: '取消操作', 588 | type: 'warning', 589 | duration:1000 590 | }); 591 | this.surperTableFilterDialog = false 592 | this.surperTableFilter = this.surperTableFilterCopy 593 | }, 594 | postSurperTableFilter(){ 595 | this.surperTableFilterDialog = false 596 | this.selectSurperData(false) 597 | }, 598 | openTableFilterD(){ 599 | this.tableFilterDialog = true 600 | this.tableFilterCopy = JSON.parse(JSON.stringify(this.tableFilter)) 601 | }, 602 | concelTableFilter(){ 603 | this.$message({ 604 | message: '取消操作', 605 | type: 'warning', 606 | duration:1000 607 | }); 608 | this.tableFilterDialog = false 609 | this.tableFilter = this.tableFilterCopy 610 | }, 611 | postTableFilter(){ 612 | this.tableFilterDialog = false 613 | this.selectTData(false) 614 | }, 615 | searchSurperText(){ 616 | if(this.surperTableFilter.surperTSearchColumn && this.surperTableFilter.surperTSearchText.trim()){ 617 | // this.surperWhere = this.surperTSearchColumn + " > " + this.surperTSearchText.trim()+"%" 618 | // this.clearSurperTable() 619 | let surperTSearchText = this.surperTableFilter.surperTSearchText.trim() 620 | if(!isNaN(surperTSearchText)){ 621 | this.surperWhere =this.surperTableFilter.surperTSearchColumn + " = " + surperTSearchText 622 | } else { 623 | this.surperWhere =this.surperTableFilter.surperTSearchColumn + " = '" + surperTSearchText +"'" 624 | } 625 | 626 | this.selectSurperData(false) 627 | } else { 628 | this.surperWhere = "" 629 | this.$message({ 630 | message: '请填写正确', 631 | type: 'warning', 632 | duration:1000 633 | }); 634 | this.selectSurperData(false) 635 | } 636 | }, 637 | searchTableText(){ 638 | if(this.tableFilter.tableSearchColumn && this.tableFilter.tableSearchText.trim()){ 639 | 640 | let tableSearchText = this.tableFilter.tableSearchText.trim() 641 | if(!isNaN(tableSearchText)){ 642 | this.tableWhere =this.tableFilter.tableSearchColumn + " = " + tableSearchText 643 | } else { 644 | this.tableWhere =this.tableFilter.tableSearchColumn + " = '" + tableSearchText +"'" 645 | } 646 | 647 | this.selectTData(false) 648 | } else { 649 | this.tableWhere = "" 650 | this.$message({ 651 | message: '请填写正确', 652 | type: 'warning', 653 | duration:1000 654 | }); 655 | this.selectTData(false) 656 | } 657 | }, 658 | selectSurperData(isFirst, isResetPage){ 659 | 660 | //处理时间范围 661 | let startTime = null 662 | let endTime = null 663 | if(this.surperTableFilter.surperDateRange){ 664 | startTime = this.surperTableFilter.surperDateRange[0]; 665 | endTime = this.surperTableFilter.surperDateRange[1]; 666 | } 667 | 668 | //是否需要重置分页 669 | if(isResetPage){ 670 | this.currentPageSurperTable = 1 671 | } 672 | 673 | let offsetVal = (this.currentPageSurperTable-1)*this.eachPageSurperTable 674 | let payload = { 675 | ip:this.theLink.host, 676 | port:this.theLink.port, 677 | user:this.theLink.user, 678 | password:this.theLink.password 679 | } 680 | this.loadingSurperTable = true 681 | 682 | //处理查询数据 683 | // if(!this.surperTableFilter.surperTSearchText.trim()){ 684 | // this.surperWhere = "" 685 | // } 686 | 687 | //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null 688 | TaosRestful.selectData(this.surperTableName, this.theDB, payload, fields=this.surperTableFilter.fields, where=this.surperWhere 689 | , limit=this.eachPageSurperTable, offset=offsetVal, desc=this.surperTorder, startTime=startTime, endTime=endTime) 690 | .then(data =>{ 691 | if(data.res){ 692 | //成功 693 | if(data.data.length != 0){ 694 | //有数据 695 | this.$message({ 696 | message: '获取成功', 697 | type: 'success', 698 | duration:1000 699 | }); 700 | if(isFirst){ 701 | this.surperTableLabelItems = Object.keys(data.data[0]) 702 | } 703 | this.surperTableLabel = Object.keys(data.data[0]) 704 | this.surperTableFilter.fields = Object.keys(data.data[0]) 705 | this.surperTableData = data.data 706 | this.totalSurperTable = data.count 707 | } else { 708 | this.surperTableLabel = [] 709 | this.surperTableData = data.data 710 | this.totalSurperTable = data.count 711 | this.$message({ 712 | message: '无数据', 713 | type: 'warning', 714 | duration:1000 715 | }); 716 | } 717 | }else{ 718 | this.$message({ 719 | message: data.msg, 720 | type: 'error', 721 | duration:1000 722 | }); 723 | } 724 | this.loadingSurperTable = false 725 | 726 | }) 727 | }, 728 | selectTData(isFirst, isResetPage=false){ 729 | 730 | //处理时间范围 731 | let startTime = null 732 | let endTime = null 733 | if(this.tableFilter.dateRange){ 734 | startTime = this.tableFilter.dateRange[0]; 735 | endTime = this.tableFilter.dateRange[1]; 736 | } 737 | 738 | if(isResetPage){ 739 | this.currentPageTable = 1 740 | } 741 | 742 | let offsetVal = (this.currentPageTable-1)*this.eachPageTable 743 | let payload = { 744 | ip:this.theLink.host, 745 | port:this.theLink.port, 746 | user:this.theLink.user, 747 | password:this.theLink.password 748 | } 749 | this.loadingTable = true 750 | 751 | // if(!this.tableFilter.tableSearchText.trim()){ 752 | // this.tableWhere = "" 753 | // } 754 | 755 | //tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null 756 | TaosRestful.selectData(this.tableName, this.theDB, payload, fields=this.tableFilter.fields, where=this.tableWhere 757 | , limit=this.eachPageTable, offset=offsetVal, desc=this.Torder, startTime=startTime, endTime=endTime) 758 | .then(data =>{ 759 | if(data.res){ 760 | //成功 761 | if(data.data.length != 0){ 762 | //有数据 763 | this.$message({ 764 | message: '获取成功', 765 | type: 'success', 766 | duration:1000 767 | }); 768 | if(isFirst){ 769 | this.tableLabelItems = Object.keys(data.data[0]) 770 | } 771 | this.tableLabel = Object.keys(data.data[0]) 772 | this.tableFilter.fields = Object.keys(data.data[0]) 773 | this.tableData = data.data 774 | this.totalTable = data.count 775 | } else { 776 | this.tableLabel = [] 777 | this.tableData = data.data 778 | this.totalTable = data.count 779 | this.$message({ 780 | message: '无数据', 781 | type: 'warning', 782 | duration:1000 783 | }); 784 | } 785 | } 786 | this.loadingTable = false 787 | }) 788 | }, 789 | surTableFilter(){ 790 | this.selectSurperData(0) 791 | }, 792 | handleClickSurperT(val) { 793 | if(val){ 794 | this.clearSurperTable() 795 | this.surperTableName = val.name 796 | this.selectSurperData(true) 797 | } 798 | }, 799 | handleClickT(val) { 800 | if(val){ 801 | this.clearTable() 802 | this.tableName = val.table_name 803 | this.selectTData(true) 804 | } 805 | }, 806 | paginationSurperChange(){ 807 | this.selectSurperData(false) 808 | }, 809 | paginationChange(){ 810 | this.selectTData(false) 811 | }, 812 | editSurperT(val) { 813 | console.log(val) 814 | }, 815 | deleteSurperT(val) { 816 | this.$confirm('确认删除超级表' + val + "吗?") 817 | .then(_ => { 818 | let payload = { 819 | ip:this.theLink.host, 820 | port:this.theLink.port, 821 | user:this.theLink.user, 822 | password:this.theLink.password 823 | } 824 | this.loadingSurperList = true 825 | 826 | //TODO没测试过 827 | TaosRestful.dropTable(val, this.theDB, payload).then(data => { 828 | 829 | if(data.res){ 830 | //成功 831 | this.$message({ 832 | message: '删除成功', 833 | type: 'success', 834 | duration:500 835 | }); 836 | } else { 837 | this.$message({ 838 | message: data.msg, 839 | type: 'error', 840 | duration:500 841 | }); 842 | } 843 | this.loadingSurperList = false 844 | this.freshSurperTables() 845 | }) 846 | 847 | }) 848 | .catch(_ => { 849 | this.$message({ 850 | message: '操作已取消', 851 | type: 'warning', 852 | duration:500 853 | }); 854 | }); 855 | }, 856 | editT(val) { 857 | console.log(val) 858 | }, 859 | deleteT(val) { 860 | this.$confirm('确认删除表' + val + "吗?") 861 | .then(_ => { 862 | let payload = { 863 | ip:this.theLink.host, 864 | port:this.theLink.port, 865 | user:this.theLink.user, 866 | password:this.theLink.password 867 | } 868 | this.loadingTableList = true 869 | 870 | //TODO没测试过 871 | TaosRestful.dropTable(val, this.theDB, payload).then(data => { 872 | 873 | if(data.res){ 874 | //成功 875 | this.$message({ 876 | message: '删除成功', 877 | type: 'success', 878 | duration:500 879 | }); 880 | } else { 881 | this.$message({ 882 | message: data.msg, 883 | type: 'error', 884 | duration:500 885 | }); 886 | } 887 | this.loadingTableList = false 888 | this.freshTables() 889 | }) 890 | 891 | }) 892 | .catch(_ => { 893 | this.$message({ 894 | message: '操作已取消', 895 | type: 'warning', 896 | duration:500 897 | }); 898 | }); 899 | }, 900 | sendSQL(){ 901 | let payload = { 902 | ip:this.theLink.host, 903 | port:this.theLink.port, 904 | user:this.theLink.user, 905 | password:this.theLink.password 906 | } 907 | // console.log(this.theDB) 908 | TaosRestful.rawSqlWithDB(this.consoleInput,this.theDB,payload).then(data => { 909 | if(data.res){ 910 | // let info = '' 911 | // info += `数据数量:  ${data.count}
` 912 | // info += `数据列:  ${data.head}
` 913 | // info += `数据:  ${data.data}
` 914 | this.$message({ 915 | message: '执行成功', 916 | type: 'success', 917 | duration:500 918 | }); 919 | this.consoleResult = data 920 | } else { 921 | this.$message({ 922 | message: data.msg, 923 | type: 'error', 924 | duration:1000 925 | }); 926 | } 927 | 928 | }) 929 | }, 930 | closeSuperTdialog(){ 931 | this.SuperTdialogText = "" 932 | this.SuperTdialog = false 933 | }, 934 | closeTdialog(){ 935 | this.TdialogText = "" 936 | this.Tdialog = false 937 | }, 938 | STChooseAll(){ 939 | this.surperTableFilter.fields = this.surperTableLabelItems 940 | }, 941 | STChooseReverse(){ 942 | let newFields = this.surperTableLabelItems.filter((item) => { 943 | return this.surperTableFilter ? this.surperTableFilter.fields.indexOf(item) == -1 : false; 944 | }) 945 | this.surperTableFilter.fields = newFields 946 | }, 947 | TChooseAll(){ 948 | this.tableFilter.fields = this.tableLabelItems 949 | }, 950 | TChooseReverse(){ 951 | let newFields = this.tableLabelItems.filter((item) => { 952 | return this.tableLabelItems.fields? this.tableLabelItems.fields.indexOf(item) == -1: false; 953 | }) 954 | this.tableFilter.fields = newFields 955 | } 956 | 957 | } 958 | }) 959 | 960 | 961 | -------------------------------------------------------------------------------- /renderer/localDataStore.js: -------------------------------------------------------------------------------- 1 | 2 | //存储数据在本地 3 | 4 | module.exports = { 5 | 6 | getLinks() { 7 | let links = localStorage.getItem('links'); 8 | links = links? JSON.parse(links) : []; 9 | return links 10 | }, 11 | 12 | setLinks(links) { 13 | links = JSON.stringify(links); //将json数据转换为字符串存储 14 | return localStorage.setItem('links', links); 15 | }, 16 | deleteALink(key) { 17 | let links = this.getLinks() 18 | links.splice(key,1) 19 | return this.setLinks(links) 20 | }, 21 | 22 | AddALink(theLink) { 23 | //添加一个连接,如果本地就存了,更新,没存新增 24 | let links = this.getLinks() 25 | for(let i=0; i Object.fromEntries(head.map((a,b)=>[a,item[b]]))) 29 | return {'res':true,'count':res.data.rows,'data':resData} 30 | }else{ 31 | return {'res':false,'msg':res.data.desc,'code':res.data.code} 32 | } 33 | } catch (err) { 34 | if (err.response){ 35 | return {'res':false,'msg':err.response.data.desc,'code':err.response.data.code} 36 | }else{ 37 | return {'res':false,'msg':'connect error','code':-1} 38 | } 39 | 40 | } 41 | 42 | } 43 | showDatabases(){ 44 | return this.sendRequest('SHOW DATABASES') 45 | } 46 | testConnect(){ 47 | return this.sendRequest('SELECT SERVER_VERSION()').then(a => 48 | { 49 | if (a.res === false && a.code === -1){ 50 | return false 51 | }else{ 52 | return true 53 | } 54 | } 55 | ) 56 | } 57 | 58 | getVersion(){ 59 | return this.sendRequest('SELECT SERVER_VERSION()').then(a => 60 | { 61 | if (a.res === false){ 62 | return a.msg 63 | }else{ 64 | return a.data[0]['server_version()'] 65 | } 66 | } 67 | ) 68 | } 69 | //创建新的数据库 70 | createDatabase(dbName,safe=true,keep= null,update=false,comp=null,replica=null,quorum=null,blocks=null){ 71 | let sqlStr = 'CREATE DATABASE ' 72 | if(safe){ 73 | sqlStr += 'IF NOT EXISTS ' 74 | } 75 | sqlStr += dbName 76 | 77 | if(keep != null){ 78 | sqlStr += ` KEEP ${keep}` 79 | } 80 | if(comp != null){ 81 | sqlStr += ` COMP ${comp}` 82 | } 83 | if(replica != null) { 84 | sqlStr += ` REPLICA ${replica}` 85 | } 86 | if(quorum != null){ 87 | sqlStr += ` QUORUM ${quorum}` 88 | } 89 | if(blocks != null){ 90 | sqlStr += ` BLOCKS ${blocks}` 91 | } 92 | if(update){ 93 | sqlStr += ` UPDATE 1` 94 | } 95 | // console.log(sqlStr) 96 | return this.sendRequest(sqlStr) 97 | } 98 | 99 | alterDatabase(dbName,keep=null,comp=null,replica=null,quorum=null,blocks=null){ 100 | let sqlStr = 'ALTER DATABASE ' 101 | sqlStr += dbName 102 | if(keep != null){ 103 | sqlStr += ` KEEP ${keep}` 104 | } 105 | if(comp != null){ 106 | sqlStr += ` COMP ${comp}` 107 | } 108 | if(replica != null){ 109 | sqlStr += ` REPLICA ${replica}` 110 | } 111 | if(quorum != null){ 112 | sqlStr += ` QUORUM ${quorum}` 113 | } 114 | if(blocks != null){ 115 | sqlStr += ` BLOCKS ${blocks}` 116 | } 117 | // console.log(sqlStr) 118 | return this.sendRequest(sqlStr) 119 | } 120 | 121 | useDatabase(dbName){ 122 | this.database = dbName 123 | } 124 | dropDatabase(dbName,safe=true){ 125 | // console.log(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`) 126 | return this.sendRequest(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`) 127 | } 128 | showSuperTables(dbName=null,like=null){ 129 | let dbN = dbName ? dbName : this.database 130 | let likeStr = like?` LIKE '%${like}%'`:'' 131 | return this.sendRequest(`SHOW ${dbN}.STABLES ${likeStr}`) 132 | } 133 | showTables(dbName=null,like=null){ 134 | let dbN = dbName ? dbName : this.database 135 | let likeStr = like?` LIKE '%${like}%'`:'' 136 | return this.sendRequest(`SHOW ${dbN}.TABLES ${likeStr}`) 137 | } 138 | disTable(tableName,dbName=null){ 139 | let dbN = dbName ? dbName : this.database 140 | return this.sendRequest(`DESCRIBE ${dbN}.${tableName}`) 141 | } 142 | dropTable(tableName,dbName=null,safe=false){ 143 | let dbN = dbName ? dbName : this.database 144 | return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbN}.${tableName}`) 145 | } 146 | 147 | insertData(tableName,data,dbName=null){ 148 | let dbN = dbName ? dbName : this.database 149 | let fields = '' 150 | let values = '' 151 | for (const [key, value] of Object.entries(data)) { 152 | fields += key + ',' 153 | values += value + ',' 154 | } 155 | // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) 156 | return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) 157 | } 158 | timeWhere(primaryKey,where,startTime,endTime){ 159 | where = where || '' 160 | if(where){ 161 | where += startTime? ` and ${primaryKey} > '${startTime}' ` : '' 162 | if(where){ 163 | where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' 164 | }else{ 165 | where += endTime? `${primaryKey} < '${endTime}' ` : '' 166 | } 167 | }else{ 168 | where += startTime? `${primaryKey} > '${startTime}' ` : '' 169 | if(where){ 170 | where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' 171 | }else{ 172 | where += endTime? `${primaryKey} < '${endTime}' ` : '' 173 | } 174 | } 175 | return where 176 | } 177 | countData(tableName,where='',dbName=null,startTime=null,endTime=null){ 178 | return this.disTable(tableName,dbName).then(res=>{ 179 | let primaryKey ='ts' 180 | if(res.res && res.data.length>0){ 181 | primaryKey = res.data[0].Field 182 | }else{ 183 | return {'res':false,'msg':'distable error','code':99} 184 | } 185 | return this.countDataIn(tableName,primaryKey,where,dbName,startTime,endTime) 186 | }) 187 | } 188 | countDataIn(tableName,primaryKey,where='',dbName=null,startTime=null,endTime=null){ 189 | where = this.timeWhere(primaryKey,where,startTime,endTime) 190 | let dbN = dbName ? dbName : this.database 191 | let sqlStr = 'SELECT ' 192 | let fieldStr= 'count(*)' 193 | sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` 194 | if(where){ 195 | sqlStr +=` WHERE ${where} ` 196 | } 197 | // console.log(sqlStr) 198 | return this.sendRequest(sqlStr).then(result=>{ 199 | if (result.res && result.data.length >0){ 200 | return new Promise((resolve, reject)=>{resolve(result.data[0]['count(*)'])}) 201 | }else{ 202 | return new Promise((resolve, reject)=>{resolve(0)}) 203 | } 204 | }) 205 | 206 | } 207 | 208 | //查询数据 209 | selectData(tableName,fields=null,where='',limit =null,offset = null,desc =null,dbName=null,startTime=null,endTime=null){ 210 | return this.disTable(tableName,dbName).then(res=>{ 211 | let primaryKey ='ts' 212 | if(res.res && res.data.length>0){ 213 | primaryKey = res.data[0].Field 214 | }else{ 215 | return {'res':false,'msg':'distable error','code':99} 216 | } 217 | 218 | where = this.timeWhere(primaryKey,where,startTime,endTime) 219 | let dbN = dbName ? dbName : this.database 220 | let sqlStr = 'SELECT ' 221 | let fieldStr= '*' 222 | if(fields && fields.length>0){ 223 | fieldStr= '' 224 | fields.forEach(function(field){ 225 | fieldStr += field + ',' 226 | }); 227 | fieldStr = fieldStr.slice(0,-1) 228 | } 229 | sqlStr += fieldStr + ` FROM ${dbN}.${tableName} ` 230 | if(where){ 231 | sqlStr +=` WHERE ${where} ` 232 | } 233 | if(desc === 'DESC'){ 234 | sqlStr +=` ORDER BY ${primaryKey} ${desc} ` 235 | } 236 | 237 | if(limit != null){ 238 | sqlStr +=` LIMIT ${limit} ` 239 | } 240 | if(offset != null){ 241 | sqlStr +=` OFFSET ${offset} ` 242 | } 243 | 244 | // console.log(sqlStr) 245 | if(limit != null){ 246 | return this.sendRequest(sqlStr).then(res=>{ 247 | // console.log(res) 248 | return this.countDataIn(tableName,primaryKey,where,dbName,startTime,endTime).then(count=>{ 249 | res.count=count 250 | return new Promise((resolve, reject)=>{resolve(res)}) 251 | }) 252 | }) 253 | }else{ 254 | return this.sendRequest(sqlStr) 255 | } 256 | 257 | }) 258 | 259 | 260 | } 261 | rawSql(sqlStr){ 262 | return this.sendRequest(sqlStr) 263 | } 264 | rawSqlWithDB(sqlStr,dbName=null){ 265 | let dbN = dbName ? dbName : this.database 266 | return this.sendRequest(`USE ${dbN}`).then(a =>{ 267 | return this.sendRequest(sqlStr) 268 | }) 269 | } 270 | } 271 | 272 | -------------------------------------------------------------------------------- /renderer/taosrestful_.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | 3 | module.exports = { 4 | async sendRequest(sqlStr, payload){ 5 | // console.log(sqlStr) 6 | try { 7 | let res = await axios.post(`http://${payload.ip}:${payload.port}/rest/sql`, sqlStr, { 8 | auth: { 9 | username: payload.user, 10 | password: payload.password 11 | }, 12 | timeout: payload.timeout 13 | }) 14 | if (res.data.status == 'succ'){ 15 | // console.log(res.data.data) 16 | // console.log(res.data.rows) 17 | // console.log(res.data.head) 18 | let head = res.data.head 19 | let resData = res.data.data.map(item => Object.fromEntries(head.map((a,b)=>[a,item[b]]))) 20 | return {'res':true,'count':res.data.rows,'data':resData} 21 | }else{ 22 | return {'res':false,'msg':res.data.desc,'code':res.data.code} 23 | } 24 | } catch (err) { 25 | if (err.response){ 26 | return {'res':false,'msg':err.response.data.desc,'code':err.response.data.code} 27 | }else{ 28 | return {'res':false,'msg':'连接错误','code':-1} 29 | } 30 | 31 | } 32 | 33 | }, 34 | showDatabases(payload){ 35 | return this.sendRequest('SHOW DATABASES', payload) 36 | }, 37 | testConnect(payload){ 38 | return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => 39 | { 40 | if (a.res === false && a.code === -1){ 41 | return false 42 | }else{ 43 | return true 44 | } 45 | } 46 | ) 47 | }, 48 | getVersion(payload){ 49 | //获取服务器版本 50 | return this.sendRequest('SELECT SERVER_VERSION()', payload).then(a => 51 | { 52 | if (a.res === false){ 53 | return 'unkown' 54 | }else{ 55 | return a.data[0]['server_version()'] 56 | } 57 | } 58 | ) 59 | }, 60 | //添加数据库 61 | createDatabase(dbName, payload,safe=true,keep= null,update=false,comp=null,replica=null,quorum=null,blocks=null){ 62 | let sqlStr = 'CREATE DATABASE ' 63 | if(safe){ 64 | sqlStr += 'IF NOT EXISTS ' 65 | } 66 | sqlStr += dbName 67 | 68 | if(keep){ 69 | sqlStr += ` KEEP ${keep}` 70 | } 71 | if(comp){ 72 | sqlStr += ` COMP ${comp}` 73 | } 74 | if(replica) { 75 | sqlStr += ` REPLICA ${replica}` 76 | } 77 | if(quorum){ 78 | sqlStr += ` QUORUM ${quorum}` 79 | } 80 | if(blocks){ 81 | sqlStr += ` BLOCKS ${blocks}` 82 | } 83 | if(update){ 84 | sqlStr += ` UPDATE 1` 85 | } 86 | // console.log(sqlStr) 87 | return this.sendRequest(sqlStr, payload) 88 | }, 89 | // alterDatabase(dbName,keep=null,comp=null,replica=null,quorum=null,blocks=null){ 90 | // let sqlStr = 'ALTER DATABASE ' 91 | // sqlStr += dbName 92 | // if(keep != null){ 93 | // sqlStr += ` KEEP ${keep}` 94 | // } 95 | // if(comp != null){ 96 | // sqlStr += ` COMP ${comp}` 97 | // } 98 | // if(replica != null){ 99 | // sqlStr += ` REPLICA ${replica}` 100 | // } 101 | // if(quorum != null){ 102 | // sqlStr += ` QUORUM ${quorum}` 103 | // } 104 | // if(blocks != null){ 105 | // sqlStr += ` BLOCKS ${blocks}` 106 | // } 107 | // // console.log(sqlStr) 108 | // return this.sendRequest(sqlStr) 109 | // }, 110 | // useDatabase(dbName){ 111 | // this.database = dbName 112 | // }, 113 | dropDatabase(dbName, payload,safe=true){ 114 | return this.sendRequest(`DROP DATABASE ${safe?'IF EXISTS':''} ${dbName}`, payload) 115 | }, 116 | showSuperTables(dbName, payload,like=null){ 117 | let likeStr = like?` LIKE '%${like}%'`:'' 118 | return this.sendRequest(`SHOW ${dbName}.STABLES ${likeStr}`, payload) 119 | }, 120 | showTables(dbName, payload,like=null){ 121 | let likeStr = like?` LIKE '%${like}%'`:'' 122 | return this.sendRequest(`SHOW ${dbName}.TABLES ${likeStr}`, payload) 123 | }, 124 | disTable(tableName,dbName, payload){ 125 | return this.sendRequest(`DESCRIBE ${dbName}.${tableName}`, payload ) 126 | }, 127 | dropTable(tableName,dbName, payload,safe=false){ 128 | return this.sendRequest(`DROP TABLE ${safe?'IF EXISTS':''} ${dbName}.${tableName}`, payload ) 129 | }, 130 | insertData(tableName,data,dbName=null){ 131 | let dbN = dbName ? dbName : this.database 132 | let fields = '' 133 | let values = '' 134 | for (const [key, value] of Object.entries(data)) { 135 | fields += key + ',' 136 | values += value + ',' 137 | } 138 | // console.log(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})` ) 139 | return this.sendRequest(`INSERT INTO ${dbN}.${tableName} (${fields.slice(0,-1)}) VALUES (${values.slice(0,-1)})`) 140 | }, 141 | timeWhere(primaryKey,where,startTime,endTime){ 142 | where = where || '' 143 | if(where){ 144 | where += startTime? ` and ${primaryKey} > '${startTime}' ` : '' 145 | if(where){ 146 | where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' 147 | }else{ 148 | where += endTime? `${primaryKey} < '${endTime}' ` : '' 149 | } 150 | }else{ 151 | where += startTime? `${primaryKey} > '${startTime}' ` : '' 152 | if(where){ 153 | where += endTime? ` and ${primaryKey} < '${endTime}' ` : '' 154 | }else{ 155 | where += endTime? `${primaryKey} < '${endTime}' ` : '' 156 | } 157 | } 158 | return where 159 | }, 160 | //查询数据 161 | selectData(tableName,dbName,payload,fields=null,where=null,limit =null,offset = null,desc =null,startTime=null,endTime=null){ 162 | //首先查询一次,获取表的整体情况 163 | return this.disTable(tableName,dbName, payload).then(res=>{ 164 | let primaryKey ='ts' 165 | if(res.res && res.data.length>0){ 166 | //获取第一项,时间戳 167 | primaryKey = res.data[0].Field 168 | }else{ 169 | return {'res':false,'msg':'distable error','code':99} 170 | } 171 | 172 | //组装where子句 //TODO 173 | where = this.timeWhere(primaryKey,where,startTime,endTime) 174 | let sqlStr = 'SELECT ' 175 | let fieldStr= '*' 176 | if(fields && fields.length>0){ 177 | fieldStr= '' 178 | fields.forEach(function(field){ 179 | fieldStr += field + ',' 180 | }); 181 | fieldStr = fieldStr.slice(0,-1) 182 | } 183 | sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` 184 | if(where){ 185 | sqlStr +=` WHERE ${where} ` 186 | } 187 | if(desc === 'DESC'){ 188 | sqlStr +=` ORDER BY ${primaryKey} ${desc} ` 189 | } 190 | 191 | if(limit != null){ 192 | sqlStr +=` LIMIT ${limit} ` 193 | } 194 | if(offset != null){ 195 | sqlStr +=` OFFSET ${offset} ` 196 | } 197 | 198 | //把总数数出来 199 | if(limit != null){ 200 | return this.sendRequest(sqlStr, payload).then(res=>{ 201 | return this.countDataIn(tableName,dbName,primaryKey, payload ,where).then(count=>{ 202 | res.count=count 203 | return new Promise((resolve, reject)=>{resolve(res)}) 204 | }) 205 | }) 206 | }else{ 207 | return this.sendRequest(sqlStr, payload) 208 | } 209 | 210 | }) 211 | 212 | }, 213 | countDataIn(tableName, dbName,primaryKey, payload, where='',startTime=null,endTime=null){ 214 | where = this.timeWhere(primaryKey,where,startTime,endTime) 215 | let sqlStr = 'SELECT ' 216 | let fieldStr= 'count(*)' 217 | sqlStr += fieldStr + ` FROM ${dbName}.${tableName} ` 218 | if(where){ 219 | sqlStr +=` WHERE ${where} ` 220 | } 221 | // console.log(sqlStr) 222 | return this.sendRequest(sqlStr,payload).then(result=>{ 223 | if (result.res && result.data.length >0){ 224 | return new Promise((resolve, reject)=>{resolve(result.data[0]['count(*)'])}) 225 | }else{ 226 | return new Promise((resolve, reject)=>{resolve(0)}) 227 | } 228 | }) 229 | }, 230 | rawSql(sqlStr,payload){ 231 | return this.sendRequest(sqlStr,payload) 232 | }, 233 | rawSqlWithDB(sqlStr,dbName,payload){ 234 | // let dbN = dbName ? dbName : this.database 235 | return this.sendRequest(`USE ${dbName}`,payload).then(a =>{ 236 | return this.sendRequest(sqlStr,payload) 237 | }) 238 | } 239 | } 240 | 241 | --------------------------------------------------------------------------------