├── .gitignore
├── .travis.yml
├── LICENCE
├── README-ch.md
├── README.md
├── appveyor.yml
├── css
├── html.css
├── modinfo.css
├── moditem.css
├── nav.css
├── settings.css
└── variables.css
├── index.html
├── instruction
├── example
│ ├── icon.png
│ ├── info.json
│ ├── kcs2
│ │ └── your_modified_pic.png
│ ├── readme.md
│ └── readme
│ │ └── ayanami.png
└── screenshot.png
├── main.js
├── package-lock.json
├── package.json
├── scripts
├── config.js
├── getmodlist.js
├── installmod.js
├── modinfo.js
└── settings.js
└── settings.html
/.gitignore:
--------------------------------------------------------------------------------
1 | /mods
2 | /extract
3 | /node_modules
4 | /release-builds
5 | /.vscode
6 | modconfig.json
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 |
3 | if: tag IS present
4 |
5 | node_js:
6 | - '10'
7 |
8 | os: osx
9 |
10 | cache:
11 | directories:
12 | - '$HOME/.electron'
13 | - "node_modules"
14 |
15 | install:
16 | - npm install -g npm
17 | - npm install
18 | - npm update
19 |
20 | script:
21 | - npm run build
22 |
23 | deploy:
24 | provider: releases
25 | api_key: '$GITHUB_TOKEN'
26 | file_glob: true
27 | draft: true
28 | file: 'release-builds/KCModManager-*-mac.zip'
29 | bucket: "kcmodmanager"
30 | skip_cleanup: true
31 | on:
32 | tags: true
--------------------------------------------------------------------------------
/LICENCE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 xiaozhikang0916
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README-ch.md:
--------------------------------------------------------------------------------
1 | # KCModManager
2 |
3 | [](https://travis-ci.org/xiaozhikang0916/kcmodmanager)
4 | [](https://ci.appveyor.com/project/xiaozhikang0916/kcmodmanager/branch/master)
5 |
6 | 一款管理艦隊Collection(舰c)魔改mod的工具。
7 |
8 | 此工具仅用于管理mod文件,不包含本地缓存功能。
9 |
10 | [English Readme](./README.md)
11 |
12 | 
13 | ## 编译
14 |
15 | 基于 [Electron](https://electronjs.org/) 2.0.8 开发
16 |
17 | 运行以下命令来自行编译 :
18 |
19 | ```bash
20 | git clone git@github.com:xiaozhikang0916/kcmodmanager.git
21 |
22 | cd kcmodmanager
23 |
24 | //需要先行安装好Node.js 和 npm
25 |
26 | npm install
27 |
28 | npm start
29 | ```
30 |
31 | ## 组织你的魔改包
32 |
33 | 将你的魔改mod文件按以下规则组织成一个文件夹:
34 |
35 | * 保持在原缓存里的文件结构
36 | * `kcs2`文件夹应该位于文件夹的根目录下
37 | * 需要替换的资源文件要保持其原名
38 |
39 | 你也可以添加一些描述文件,app会解析这些文件并且展示:
40 |
41 | * 图标 `icon.png`,将以`80px*80px`的尺寸展现
42 | * 基本信息 `info.json`,其内容为:
43 | * 标题 `title`: string
44 | * 作者 `author`: string
45 | * 标签 `tags`: list of strings
46 |
47 | 一个合法的 `info.json` 文件长这样:
48 |
49 | ```json
50 | {
51 | "name": "A KanColle Mod",
52 | "author": "KCModManager",
53 | "tags": [
54 | "mod",
55 | "KanColle",
56 | "Tanaka"
57 | ]
58 | }
59 | ```
60 |
61 | 以上两个文件的内容会被解析到信息面板的顶栏。
62 |
63 | 除此以外,你还可以添加一个`readme.md`文件到你的文件夹根目录下。
64 | 这个md文件可以使用相对路径引用同在根目录下的`readme`文件夹里的内容(主要是图片)。
65 |
66 | `readme.md`的内容会被解析到信息面板的底栏。
67 |
68 | 文件夹的结构应该长这样:
69 |
70 | ```
71 | your_mod
72 | |
73 | - icon.png
74 | |
75 | - info.json
76 | |
77 | - readme.md
78 | |
79 | - readme
80 | | |
81 | | - screenshot.png
82 | |
83 | -- kcs2
84 | |
85 | -- img
86 | |
87 | -- ...
88 | |
89 | -- modified_file.png
90 | ```
91 | 你可以在[./instruction/example](./instruction/example)找到一个示例mod包。
92 |
93 | ## 如何使用
94 |
95 | 运行程序,如果你是第一次打开此程序,需要先完成设置选项
96 |
97 | * 存放你的mod包的路径
98 | * 存放你的本地缓存的路径
99 | > 文件夹`kcs2`应该位于你的本地缓存路径的根目录下
100 | * 输出的资源文件的格式
101 | > 使用占位符 `{name}` 和 `{ext}` 指代原名、扩展名, 默认是 `{name}.hack.{ext}`。尽量**不要**使用`{name}.{ext}`,这会覆盖你原本的本地缓存资源
102 |
103 | 关闭设置窗口即可保存设置。
104 |
105 | 点击安装、卸载即可管理你的mod包。
106 |
107 | ## 计划中
108 |
109 | * 将每个mod包修改的文件列表存入配置文件中
110 | * 处理多个mod修改同一个文件的情况
111 | * 支持读取文件夹里的`readme`文件,展示mod包的介绍信息 已完成
112 | * UI改进
113 |
114 | ## 开源协议
115 |
116 | 使用[MIT协议](./LICENCE)
117 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # KCModManager
2 |
3 | [](https://travis-ci.org/xiaozhikang0916/kcmodmanager)
4 | [](https://ci.appveyor.com/project/xiaozhikang0916/kcmodmanager/branch/master)
5 |
6 | A tool to manage Mods package of 艦隊Collection(Kancolle)
7 |
8 | It is only to manage you mod files, does not provide local-cache feature of the game.
9 |
10 | [中文简介](./README-ch.md)
11 |
12 | 
13 |
14 | ## Build
15 |
16 | Developed in [Electron](https://electronjs.org/) 2.0.8
17 |
18 | To build by yourself, run :
19 |
20 | ```bash
21 | git clone git@github.com:xiaozhikang0916/kcmodmanager.git
22 |
23 | cd kcmodmanager
24 |
25 | //Node.js and npm are required
26 |
27 | npm install
28 |
29 | npm start
30 | ```
31 |
32 | ## Manage your mod package
33 |
34 | Package your mod files in directory following rules:
35 |
36 | * Keep the architacture of what it is in cache
37 | * Directory `kcs2` should be in the root of you directory
38 | * Keep the original name of modified resource file
39 |
40 | Also, you can add some description files, which will be resolved by this app:
41 |
42 | * An `icon.png` file, will be resolved as `80px*80px`
43 | * An `info.json` file containing basic info of your mod, the content may have:
44 | * `title` a string
45 | * `author` a string
46 | * `tags` list of strings
47 |
48 | A valid `info.json` file:
49 |
50 | ```json
51 | {
52 | "name": "A KanColle Mod",
53 | "author": "KCModManager",
54 | "tags": [
55 | "mod",
56 | "KanColle",
57 | "Tanaka"
58 | ]
59 | }
60 | ```
61 |
62 | Informations from previous two files will be displayed in the top of info-panel
63 |
64 | Additionally, you can put a `readme.md` file with it's referencing content in folder `readme` using relative path in the root of your directory (typically, some pic resources), such content will display in the bottom of info-panel.
65 |
66 | It should look like:
67 |
68 | ```
69 | your_mod
70 | |
71 | - icon.png
72 | |
73 | - info.json
74 | |
75 | - readme.md
76 | |
77 | - readme
78 | | |
79 | | - screenshot.png
80 | |
81 | -- kcs2
82 | |
83 | -- img
84 | |
85 | -- ...
86 | |
87 | -- modified_file.png
88 | ```
89 |
90 | You can get an example mod package in [./instruction/example](./instruction/example)
91 |
92 | ## How to use
93 |
94 | Open this app, complete the setting window if it is first time to start.
95 |
96 | * Path to your mod package directories
97 | * Path to your local game cache
98 | > `kcs2` should located in the root of your local game cache
99 | * Output format of resource files
100 | > Use placeholder `{name}` and `{ext}`, default is `{name}.hack.{ext}`. Try **NOT** to use `{name}.{ext}` since it would overwrite the origin cache file.
101 |
102 | Close setting window to save.
103 |
104 | ## TOLO LIST
105 |
106 | * Save the modified files list to config of each mod package
107 | * Handle the situation if two mods are modifying the same resource file
108 | * Support a `README` file in package to display some instruction done
109 | * Improve the UI
110 |
111 | ## LICENCE
112 |
113 | Under licence [MIT](./LICENCE)
114 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | image: Visual Studio 2017
2 |
3 | platform:
4 | - x64
5 |
6 | cache:
7 | - node_modules
8 | - '%USERPROFILE%\.electron'
9 |
10 | init:
11 | - git config --global core.autocrlf input
12 | - npm i -g npm
13 |
14 | install:
15 | - ps: Install-Product node 8 x64
16 | - npm install
17 | - npm update
18 |
19 | build_script:
20 | - npm run build
21 |
22 | test: off
23 |
24 | artifacts:
25 | - path: 'release-builds\KCModManager-*-win.zip'
26 | name: 'zip'
27 |
28 | deploy:
29 | - provider: Environment
30 | name: kcmodmanager
31 | artifact: 'zip'
32 | on:
33 | appveyor_repo_tag: true
--------------------------------------------------------------------------------
/css/html.css:
--------------------------------------------------------------------------------
1 | html {
2 | height:100%;
3 | }
4 |
5 | body {
6 | background: #F4F4F4;
7 | height: 100%;
8 | margin: 0px;
9 | font-family: YaHei, sans-serif;
10 | }
--------------------------------------------------------------------------------
/css/modinfo.css:
--------------------------------------------------------------------------------
1 | .info_page {
2 | height: 100%;
3 | background-color: white;
4 | transition-duration: 0.3s;
5 | display: none;
6 | overflow: auto;
7 | }
8 |
9 | .info_page.shown {
10 | display: block;
11 | }
12 |
13 | .info_section {
14 | height: 120px;
15 | position: relative;
16 | overflow: auto;
17 | border-bottom: 1px dotted #999999;
18 | }
19 |
20 | .info {
21 | float: left;
22 | position: relative;
23 | margin-left: 10px;
24 | top: 50%;
25 | transform: translate(0,-50%);
26 | }
27 |
28 | .icon {
29 | width: 80px;
30 | height: 80px;
31 | float: left;
32 | position: relative;
33 | margin-left: 10px;
34 | top: 50%;
35 | transform: translate(0,-50%);
36 | }
37 |
38 | .title {
39 | margin: 0;
40 | font-size: 1.5em;
41 | }
42 |
43 | .author {
44 | margin: 8px 0 0 0;
45 | font-size: 0.75em;
46 | color: #999999;
47 | }
48 |
49 | .tags {
50 | margin: 4px 0 0 0;
51 | font-size: 0.75em;
52 | color: #999999;
53 | }
54 |
55 | .modbutton {
56 | width: 70px;
57 | height: 30px;
58 | line-height: 30px;
59 | margin: 0 15px 0 0;
60 | padding: 2px 6px 2px 6px;
61 | color: #FFFFFF;
62 | background: #FB7299;
63 | text-align: center;
64 | border-radius: 4px;
65 | transition-duration: 0.3s;
66 | position: absolute;
67 | top: 50%;
68 | right: 0;
69 | transform: translate(0,-50%);
70 | }
71 |
72 | .modbutton::before {
73 | content: "安装"
74 | }
75 |
76 | .modbutton.installed {
77 | background: #999999;
78 | }
79 |
80 | .modbutton.installed::before {
81 | content: "已安装"
82 | }
83 |
84 | .modbutton.installed:hover {
85 | background: #C0C0C0;
86 | }
87 |
88 | .modbutton.installed:hover::before {
89 | content: "卸载"
90 | }
91 |
92 | .readme_section {
93 | height: calc(100% - 151px);
94 | position: relative;
95 | overflow-x: hidden;
96 | overflow-y: auto;
97 | padding: 15px;
98 | }
--------------------------------------------------------------------------------
/css/moditem.css:
--------------------------------------------------------------------------------
1 | .modname {
2 | float: left;
3 | margin: 10px 0px 10px 10px;
4 | text-align: center;
5 | }
6 |
7 | .moditem {
8 | border-bottom: 1px solid #E7E7E7;
9 | overflow: auto;
10 | padding: 5px 0px 5px 0px;
11 | transition-duration: 0.3s;
12 | }
13 |
14 | .moditem.selected {
15 | background-color: #FFFFFF;
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/css/nav.css:
--------------------------------------------------------------------------------
1 | /* Nav */
2 |
3 | #side {
4 | float: left;
5 | width: 300px;
6 | height: 100%;
7 | overflow-x: hidden;
8 | overflow-y: hidden;
9 | }
10 |
11 | .nav {
12 | position: relative;
13 | width: 100%;
14 | height: calc(100% - 40px);
15 | overflow-y: auto;
16 | top: 0;
17 | }
18 |
19 | #settings {
20 | width: 100%;
21 | height: 40px;
22 | line-height: 40px;
23 | text-align: center;
24 | position: relative;
25 | bottom: 0;
26 | border-top: 1px solid #CCCCCC;
27 | }
28 |
29 | #mod_info {
30 | float: right;
31 | height: 100%;
32 | width: calc(100% - 300px);
33 | border: none;
34 | }
--------------------------------------------------------------------------------
/css/settings.css:
--------------------------------------------------------------------------------
1 | .setting_input {
2 | position: relative;
3 | width: calc(100% - 265px);
4 | float: right;
5 | margin-right: 20px
6 | }
7 |
8 | #name_fmt_edit {
9 | width: calc(100% - 170px);
10 | }
11 |
12 | .setting_item {
13 | padding: 5px 0px 5px 0px;
14 | }
15 |
16 | #output_path_edit_button, #mod_path_edit_button, #save {
17 | width: 75px;
18 | margin-right: 20px;
19 | position: relative;
20 | float: right
21 | }
22 |
23 | #save {
24 | margin-top: 20px;
25 | }
--------------------------------------------------------------------------------
/css/variables.css:
--------------------------------------------------------------------------------
1 |
2 | /* Custom Properties */
3 |
4 | :root {
5 | --color: hsl(0,0%,22%);
6 | --color-subtle: hsl(0,0%,44%);
7 | --color-strong: hsl(0,0%,11%);
8 | --color-link: hsl(0,0%,22%);
9 |
10 | --color-border: hsl(0,0%,88%);
11 | --color-bg: hsl(0,0%,96%);
12 |
13 | --color-accent: black; /* Fallback */
14 |
15 | font-family: sans-serif
16 | }
17 |
18 |
19 | /* Category Colors */
20 |
21 | .u-category-windows { --color-accent: hsl(116, 30%, 36%); }
22 | .u-category-menu { --color-accent: hsl(194, 60%, 36%); }
23 | .u-category-native-ui { --color-accent: hsl(222, 53%, 50%); }
24 | .u-category-communication { --color-accent: hsl(285, 47%, 46%); }
25 | .u-category-system { --color-accent: hsl(330, 65%, 48%); }
26 | .u-category-media { --color-accent: hsl( 36, 77%, 34%); }
27 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | KCModManager
10 |
11 |
12 |
16 |
17 |
18 |
19 |
20 |
![]()
21 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/instruction/example/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaozhikang0916/kcmodmanager/1e12030c9953f5fb9b22ad9298dd8b41639ee53e/instruction/example/icon.png
--------------------------------------------------------------------------------
/instruction/example/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "这是一个测试mod包",
3 | "author": "KCModManager",
4 | "tags": [
5 | "魔改",
6 | "mod",
7 | "绫波真可爱"
8 | ]
9 | }
--------------------------------------------------------------------------------
/instruction/example/kcs2/your_modified_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaozhikang0916/kcmodmanager/1e12030c9953f5fb9b22ad9298dd8b41639ee53e/instruction/example/kcs2/your_modified_pic.png
--------------------------------------------------------------------------------
/instruction/example/readme.md:
--------------------------------------------------------------------------------
1 | # KCModManager
2 |
3 | 一款管理艦隊Collection(舰c)魔改mod的工具。
4 |
5 | 
6 |
7 | ## 组织你的zip文件
8 |
9 | 将你的魔改mod文件按以下规则打包成zip:
10 |
11 | * 保持在原缓存里的文件结构
12 | * `kcs2`文件夹应该位于zip文件的根目录下
13 | * 需要替换的资源文件要保持其原名
14 |
15 | 你也可以添加一些描述文件,app会解析这些文件并且展示:
16 |
17 | * 图标 `icon.png`,将以`80px*80px`的尺寸展现
18 | * 基本信息 `info.json`,其内容为:
19 | * 标题 `title`: string
20 | * 作者 `author`: string
21 | * 标签 `tags`: list of strings
22 |
23 | 一个合法的 `info.json` 文件长这样:
24 |
25 | ```json
26 | {
27 | "name": "A KanColle Mod",
28 | "author": "KCModManager",
29 | "tags": [
30 | "mod",
31 | "KanColle",
32 | "Tanaka"
33 | ]
34 | }
35 | ```
36 |
37 | 以上两个文件的内容会被解析到信息面板的顶栏。
38 |
39 | 除此以外,你还可以添加一个`readme.md`文件到你的zip根目录下。
40 | 这个md文件可以使用相对路径引用同在根目录下的`readme`文件夹里的内容(主要是图片)。
41 |
42 | `readme.md`的内容会被解析道到信息面板的底栏。
43 |
44 | Zip文件的结构应该长这样:
45 |
46 | ```
47 | your_mod.zip
48 | |
49 | - icon.png
50 | |
51 | - info.json
52 | |
53 | - readme.md
54 | |
55 | - readme
56 | | |
57 | | - screenshot.png
58 | |
59 | -- kcs2
60 | |
61 | -- img
62 | |
63 | -- ...
64 | |
65 | -- modified_file.png
66 | ```
67 | 你可以在[./instruction/example.zip](./instruction/example.zip)找到一个示例zip包。
--------------------------------------------------------------------------------
/instruction/example/readme/ayanami.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaozhikang0916/kcmodmanager/1e12030c9953f5fb9b22ad9298dd8b41639ee53e/instruction/example/readme/ayanami.png
--------------------------------------------------------------------------------
/instruction/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaozhikang0916/kcmodmanager/1e12030c9953f5fb9b22ad9298dd8b41639ee53e/instruction/screenshot.png
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | const { app, BrowserWindow, Menu, ipcMain } = require('electron')
2 | const path = require('path')
3 | const Config = require('./scripts/config')
4 |
5 | let win
6 | let setting
7 | let config = new Config(path.join(app.getPath('appData'), 'kcmodmanager'))
8 |
9 | function createWindow() {
10 | win = new BrowserWindow({ width: 1200, height: 600 })
11 | win.loadFile('index.html')
12 | buildMenu()
13 | win.on('closed', () => {
14 | if (setting) {
15 | setting.close()
16 | setting = null
17 | }
18 | win = null
19 | })
20 |
21 | }
22 |
23 | function buildMenu() {
24 | var template = [{
25 | label: "Edit",
26 | submenu: [
27 | { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
28 | { label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
29 | { type: "separator" },
30 | { label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
31 | { label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
32 | { label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
33 | { label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
34 | ]
35 | }]
36 | if (process.platform === "darwin") {
37 | template.unshift({
38 | label: app.getName(),
39 | submenu: [
40 | {
41 | role: 'reload',
42 | accelerator: 'F5'
43 | },
44 | {
45 | label: "打开开发者工具",
46 | click: showDevTool,
47 | accelerator: "F2"
48 | },
49 | {
50 | role: 'quit',
51 | accelerator: "Cmd+Q"
52 | }
53 | ]
54 | })
55 | }
56 | if (process.platform === "win32") {
57 | template.unshift({
58 | label: "菜单",
59 | submenu: [
60 | {
61 | role: 'reload',
62 | accelerator: 'F5'
63 | },
64 | {
65 | label: "打开开发者工具",
66 | click: showDevTool,
67 | accelerator: "F2"
68 | },
69 | {
70 | role: 'close'
71 | }
72 | ]
73 | })
74 | }
75 | Menu.setApplicationMenu(Menu.buildFromTemplate(template))
76 | }
77 |
78 | function showSetting(menuItem, browserWindow, event) {
79 | if (setting == null) {
80 | setting = new BrowserWindow({ width: 500, height: 300 })
81 | setting.loadFile('settings.html')
82 | setting.on('closed', () => {
83 | setting = null
84 | if (win) {
85 | win.reload()
86 | }
87 | })
88 | }
89 | }
90 |
91 | function showDevTool(menuItem, browserWindow, event) {
92 | browserWindow.webContents.openDevTools()
93 | }
94 |
95 |
96 | ipcMain.on("asynchronous-message", (event, arg) => {
97 | if (arg == "open-settings") {
98 | showSetting(null, null, null)
99 | }
100 | })
101 |
102 | ipcMain.on("get-setting", (event, arg) => {
103 | event.returnValue = config
104 | })
105 |
106 | ipcMain.on("save-setting", (event, arg) => {
107 | var tmp = new Config(arg)
108 | if (tmp.validConfig()) {
109 | config = tmp
110 | config.saveConfig()
111 | event.returnValue = true
112 | }
113 | else {
114 | event.returnValue = false
115 | }
116 | })
117 |
118 | app.on('ready', createWindow)
119 |
120 | app.on('window-all-closed', () => {
121 | app.quit();
122 | });
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "kcmodmanager",
3 | "version": "0.0.2",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "@types/node": {
7 | "version": "8.10.29",
8 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.29.tgz",
9 | "integrity": "sha512-zbteaWZ2mdduacm0byELwtRyhYE40aK+pAanQk415gr1eRuu67x7QGOLmn8jz5zI8LDK7d0WI/oT6r5Trz4rzQ==",
10 | "dev": true
11 | },
12 | "7zip-bin": {
13 | "version": "4.0.2",
14 | "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz",
15 | "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==",
16 | "dev": true
17 | },
18 | "ajv": {
19 | "version": "5.5.2",
20 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
21 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
22 | "dev": true
23 | },
24 | "ajv-keywords": {
25 | "version": "3.2.0",
26 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
27 | "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
28 | "dev": true
29 | },
30 | "ansi-align": {
31 | "version": "2.0.0",
32 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
33 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
34 | "dev": true,
35 | "dependencies": {
36 | "ansi-regex": {
37 | "version": "3.0.0",
38 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
39 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
40 | "dev": true
41 | },
42 | "is-fullwidth-code-point": {
43 | "version": "2.0.0",
44 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
45 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
46 | "dev": true
47 | },
48 | "string-width": {
49 | "version": "2.1.1",
50 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
51 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
52 | "dev": true
53 | },
54 | "strip-ansi": {
55 | "version": "4.0.0",
56 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
57 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
58 | "dev": true
59 | }
60 | }
61 | },
62 | "ansi-regex": {
63 | "version": "2.1.1",
64 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
65 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
66 | "dev": true
67 | },
68 | "ansi-styles": {
69 | "version": "3.2.1",
70 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
71 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
72 | "dev": true
73 | },
74 | "app-builder-bin": {
75 | "version": "2.1.2",
76 | "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.1.2.tgz",
77 | "integrity": "sha512-PZJspzAqB0+z60OalXChP9I05BzODd/ffDz6RvTmDG3qclr7YrnpqzvPF+T7vGVtk2nN7syuveTQROJfXcB8xA==",
78 | "dev": true
79 | },
80 | "app-builder-lib": {
81 | "version": "20.28.4",
82 | "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.28.4.tgz",
83 | "integrity": "sha512-RY4/NJs1HCFWAOpLMivuDzbesU5VyaZVKuQllxgCNZ56+ihgO5aGexla2DVjG/bBQleWfF3DPnEsF3sbZPlpHw==",
84 | "dev": true,
85 | "dependencies": {
86 | "base64-js": {
87 | "version": "1.3.0",
88 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
89 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
90 | "dev": true
91 | },
92 | "debug": {
93 | "version": "3.1.0",
94 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
95 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
96 | "dev": true,
97 | "requires": {
98 | "ms": "2.0.0"
99 | }
100 | },
101 | "plist": {
102 | "version": "3.0.1",
103 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
104 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
105 | "dev": true,
106 | "requires": {
107 | "base64-js": "^1.2.3",
108 | "xmlbuilder": "^9.0.7",
109 | "xmldom": "0.1.x"
110 | }
111 | },
112 | "xmlbuilder": {
113 | "version": "9.0.7",
114 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
115 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
116 | "dev": true
117 | }
118 | }
119 | },
120 | "argparse": {
121 | "version": "1.0.10",
122 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
123 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
124 | "dev": true
125 | },
126 | "array-find-index": {
127 | "version": "1.0.2",
128 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
129 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
130 | "dev": true
131 | },
132 | "asn1": {
133 | "version": "0.2.4",
134 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
135 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
136 | "dev": true
137 | },
138 | "assert-plus": {
139 | "version": "1.0.0",
140 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
141 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
142 | "dev": true
143 | },
144 | "async-exit-hook": {
145 | "version": "2.0.1",
146 | "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz",
147 | "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==",
148 | "dev": true
149 | },
150 | "asynckit": {
151 | "version": "0.4.0",
152 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
153 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
154 | "dev": true
155 | },
156 | "aws-sign2": {
157 | "version": "0.7.0",
158 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
159 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
160 | "dev": true
161 | },
162 | "aws4": {
163 | "version": "1.8.0",
164 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
165 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
166 | "dev": true
167 | },
168 | "balanced-match": {
169 | "version": "1.0.0",
170 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
171 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
172 | "dev": true
173 | },
174 | "base64-js": {
175 | "version": "1.2.0",
176 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
177 | "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
178 | "dev": true
179 | },
180 | "bcrypt-pbkdf": {
181 | "version": "1.0.2",
182 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
183 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
184 | "dev": true,
185 | "optional": true
186 | },
187 | "bluebird": {
188 | "version": "3.5.2",
189 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
190 | "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==",
191 | "dev": true
192 | },
193 | "bluebird-lst": {
194 | "version": "1.0.5",
195 | "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.5.tgz",
196 | "integrity": "sha512-Ey0bDNys5qpYPhZ/oQ9vOEvD0TYQDTILMXWP2iGfvMg7rSDde+oV4aQQgqRH+CvBFNz2BSDQnPGMUl6LKBUUQA==",
197 | "dev": true
198 | },
199 | "boxen": {
200 | "version": "1.3.0",
201 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
202 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
203 | "dev": true,
204 | "dependencies": {
205 | "ansi-regex": {
206 | "version": "3.0.0",
207 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
208 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
209 | "dev": true
210 | },
211 | "camelcase": {
212 | "version": "4.1.0",
213 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
214 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
215 | "dev": true
216 | },
217 | "is-fullwidth-code-point": {
218 | "version": "2.0.0",
219 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
220 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
221 | "dev": true
222 | },
223 | "string-width": {
224 | "version": "2.1.1",
225 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
226 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
227 | "dev": true
228 | },
229 | "strip-ansi": {
230 | "version": "4.0.0",
231 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
232 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
233 | "dev": true
234 | }
235 | }
236 | },
237 | "brace-expansion": {
238 | "version": "1.1.11",
239 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
240 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
241 | "dev": true
242 | },
243 | "buffer-alloc": {
244 | "version": "1.2.0",
245 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
246 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
247 | "dev": true
248 | },
249 | "buffer-alloc-unsafe": {
250 | "version": "1.1.0",
251 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
252 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
253 | "dev": true
254 | },
255 | "buffer-fill": {
256 | "version": "1.0.0",
257 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
258 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
259 | "dev": true
260 | },
261 | "buffer-from": {
262 | "version": "1.1.1",
263 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
264 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
265 | "dev": true
266 | },
267 | "builder-util": {
268 | "version": "6.1.3",
269 | "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-6.1.3.tgz",
270 | "integrity": "sha512-MXeARNff9KHlzJYGJcAhLI/tpE57PmUnleaYfL22IE+viRt192Yr3wQL444ztsA+LUHJ8d12moUoG00jh1hfLA==",
271 | "dev": true,
272 | "dependencies": {
273 | "debug": {
274 | "version": "3.1.0",
275 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
276 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
277 | "dev": true,
278 | "requires": {
279 | "ms": "2.0.0"
280 | }
281 | }
282 | }
283 | },
284 | "builder-util-runtime": {
285 | "version": "4.4.1",
286 | "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.1.tgz",
287 | "integrity": "sha512-8L2pbL6D3VdI1f8OMknlZJpw0c7KK15BRz3cY77AOUElc4XlCv2UhVV01jJM7+6Lx7henaQh80ALULp64eFYAQ==",
288 | "dev": true,
289 | "dependencies": {
290 | "debug": {
291 | "version": "3.1.0",
292 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
293 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
294 | "dev": true,
295 | "requires": {
296 | "ms": "2.0.0"
297 | }
298 | }
299 | }
300 | },
301 | "builtin-modules": {
302 | "version": "1.1.1",
303 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
304 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
305 | "dev": true
306 | },
307 | "camelcase": {
308 | "version": "2.1.1",
309 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
310 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
311 | "dev": true
312 | },
313 | "camelcase-keys": {
314 | "version": "2.1.0",
315 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
316 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
317 | "dev": true
318 | },
319 | "capture-stack-trace": {
320 | "version": "1.0.1",
321 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
322 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
323 | "dev": true
324 | },
325 | "caseless": {
326 | "version": "0.12.0",
327 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
328 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
329 | "dev": true
330 | },
331 | "chalk": {
332 | "version": "2.4.1",
333 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
334 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
335 | "dev": true
336 | },
337 | "chromium-pickle-js": {
338 | "version": "0.2.0",
339 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
340 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
341 | "dev": true
342 | },
343 | "ci-info": {
344 | "version": "1.5.1",
345 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.5.1.tgz",
346 | "integrity": "sha512-fKFIKXaYiL1exImwJ0AhR/6jxFPSKQBk2ayV5NiNoruUs2+rxC2kNw0EG+1Z9dugZRdCrppskQ8DN2cyaUM1Hw==",
347 | "dev": true
348 | },
349 | "cli-boxes": {
350 | "version": "1.0.0",
351 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
352 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
353 | "dev": true
354 | },
355 | "cliui": {
356 | "version": "4.1.0",
357 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
358 | "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
359 | "dev": true,
360 | "dependencies": {
361 | "ansi-regex": {
362 | "version": "3.0.0",
363 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
364 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
365 | "dev": true
366 | },
367 | "is-fullwidth-code-point": {
368 | "version": "2.0.0",
369 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
370 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
371 | "dev": true
372 | },
373 | "string-width": {
374 | "version": "2.1.1",
375 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
376 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
377 | "dev": true
378 | },
379 | "strip-ansi": {
380 | "version": "4.0.0",
381 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
382 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
383 | "dev": true
384 | }
385 | }
386 | },
387 | "co": {
388 | "version": "4.6.0",
389 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
390 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
391 | "dev": true
392 | },
393 | "code-point-at": {
394 | "version": "1.1.0",
395 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
396 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
397 | "dev": true
398 | },
399 | "color-convert": {
400 | "version": "1.9.3",
401 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
402 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
403 | "dev": true
404 | },
405 | "color-name": {
406 | "version": "1.1.3",
407 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
408 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
409 | "dev": true
410 | },
411 | "combined-stream": {
412 | "version": "1.0.6",
413 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
414 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
415 | "dev": true
416 | },
417 | "compare-version": {
418 | "version": "0.1.2",
419 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
420 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
421 | "dev": true
422 | },
423 | "concat-map": {
424 | "version": "0.0.1",
425 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
426 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
427 | "dev": true
428 | },
429 | "concat-stream": {
430 | "version": "1.6.2",
431 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
432 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
433 | "dev": true,
434 | "dependencies": {
435 | "process-nextick-args": {
436 | "version": "2.0.0",
437 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
438 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
439 | "dev": true
440 | },
441 | "readable-stream": {
442 | "version": "2.3.6",
443 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
444 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
445 | "dev": true
446 | },
447 | "string_decoder": {
448 | "version": "1.1.1",
449 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
450 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
451 | "dev": true
452 | }
453 | }
454 | },
455 | "configstore": {
456 | "version": "3.1.2",
457 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
458 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
459 | "dev": true
460 | },
461 | "core-util-is": {
462 | "version": "1.0.2",
463 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
464 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
465 | "dev": true
466 | },
467 | "create-error-class": {
468 | "version": "3.0.2",
469 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
470 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
471 | "dev": true
472 | },
473 | "cross-spawn": {
474 | "version": "5.1.0",
475 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
476 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
477 | "dev": true
478 | },
479 | "crypto-random-string": {
480 | "version": "1.0.0",
481 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
482 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
483 | "dev": true
484 | },
485 | "currently-unhandled": {
486 | "version": "0.4.1",
487 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
488 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
489 | "dev": true
490 | },
491 | "dashdash": {
492 | "version": "1.14.1",
493 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
494 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
495 | "dev": true
496 | },
497 | "debug": {
498 | "version": "2.6.9",
499 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
500 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
501 | "dev": true
502 | },
503 | "decamelize": {
504 | "version": "1.2.0",
505 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
506 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
507 | "dev": true
508 | },
509 | "deep-extend": {
510 | "version": "0.6.0",
511 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
512 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
513 | "dev": true
514 | },
515 | "delayed-stream": {
516 | "version": "1.0.0",
517 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
518 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
519 | "dev": true
520 | },
521 | "dmg-builder": {
522 | "version": "5.3.1",
523 | "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-5.3.1.tgz",
524 | "integrity": "sha512-/+vtqlgvTtha/4Gc76XIRKS2KzYO58sTWXhZ/kgfNr05ZXY6bIw26v7xDu8ZBpTYnfWI09JRZTMv1yIXT/vvfg==",
525 | "dev": true
526 | },
527 | "dot-prop": {
528 | "version": "4.2.0",
529 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
530 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
531 | "dev": true
532 | },
533 | "dotenv": {
534 | "version": "6.0.0",
535 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz",
536 | "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==",
537 | "dev": true
538 | },
539 | "dotenv-expand": {
540 | "version": "4.2.0",
541 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
542 | "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
543 | "dev": true
544 | },
545 | "duplexer3": {
546 | "version": "0.1.4",
547 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
548 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
549 | "dev": true
550 | },
551 | "ecc-jsbn": {
552 | "version": "0.1.2",
553 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
554 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
555 | "dev": true,
556 | "optional": true
557 | },
558 | "ejs": {
559 | "version": "2.6.1",
560 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
561 | "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
562 | "dev": true
563 | },
564 | "electron": {
565 | "version": "2.0.8",
566 | "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.8.tgz",
567 | "integrity": "sha512-pbeGFbwijb5V3Xy/KMcwIp59eA9igg2br+7EHbbwQoa3HRDF5JjTrciX7OiscCA52+ze2n4q38S4lXPqRitgIA==",
568 | "dev": true
569 | },
570 | "electron-builder": {
571 | "version": "20.28.4",
572 | "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.28.4.tgz",
573 | "integrity": "sha512-JMOzMfx9BrC9SJr6+UacuvQZmuodL02Zua8iFn0l5bv32GkWcNj1D6FwybV33BpsmdQ8sF1SkQj+7L+FEIxang==",
574 | "dev": true
575 | },
576 | "electron-download": {
577 | "version": "3.3.0",
578 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
579 | "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
580 | "dev": true
581 | },
582 | "electron-osx-sign": {
583 | "version": "0.4.10",
584 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz",
585 | "integrity": "sha1-vk87ibKnWh3F8eckkIGrKSnKOiY=",
586 | "dev": true
587 | },
588 | "electron-publish": {
589 | "version": "20.28.3",
590 | "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.28.3.tgz",
591 | "integrity": "sha512-/2t5zk9EKgH7p7rFZ+ynTKLmpKGF9bktMP2UR6u4bbPz9w4r3WEUbPOeZ1TLqUCAqdfZECcj4ThjrlcAJTghCA==",
592 | "dev": true
593 | },
594 | "error-ex": {
595 | "version": "1.3.2",
596 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
597 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
598 | "dev": true
599 | },
600 | "escape-string-regexp": {
601 | "version": "1.0.5",
602 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
603 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
604 | "dev": true
605 | },
606 | "esprima": {
607 | "version": "4.0.1",
608 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
609 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
610 | "dev": true
611 | },
612 | "execa": {
613 | "version": "0.7.0",
614 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
615 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
616 | "dev": true
617 | },
618 | "extend": {
619 | "version": "3.0.2",
620 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
621 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
622 | "dev": true
623 | },
624 | "extract-zip": {
625 | "version": "1.6.7",
626 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
627 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
628 | "dev": true
629 | },
630 | "extsprintf": {
631 | "version": "1.3.0",
632 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
633 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
634 | "dev": true
635 | },
636 | "fast-deep-equal": {
637 | "version": "1.1.0",
638 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
639 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
640 | "dev": true
641 | },
642 | "fast-json-stable-stringify": {
643 | "version": "2.0.0",
644 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
645 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
646 | "dev": true
647 | },
648 | "fd-slicer": {
649 | "version": "1.0.1",
650 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
651 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
652 | "dev": true
653 | },
654 | "find-up": {
655 | "version": "1.1.2",
656 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
657 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
658 | "dev": true
659 | },
660 | "forever-agent": {
661 | "version": "0.6.1",
662 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
663 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
664 | "dev": true
665 | },
666 | "form-data": {
667 | "version": "2.3.2",
668 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
669 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
670 | "dev": true
671 | },
672 | "fs-extra": {
673 | "version": "0.30.0",
674 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
675 | "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
676 | "dev": true
677 | },
678 | "fs-extra-p": {
679 | "version": "4.6.1",
680 | "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.6.1.tgz",
681 | "integrity": "sha512-IsTMbUS0svZKZTvqF4vDS9c/L7Mw9n8nZQWWeSzAGacOSe+8CzowhUN0tdZEZFIJNP5HC7L9j3MMikz/G4hDeQ==",
682 | "dev": true,
683 | "dependencies": {
684 | "fs-extra": {
685 | "version": "6.0.1",
686 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
687 | "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
688 | "dev": true
689 | },
690 | "jsonfile": {
691 | "version": "4.0.0",
692 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
693 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
694 | "dev": true
695 | }
696 | }
697 | },
698 | "fs.realpath": {
699 | "version": "1.0.0",
700 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
701 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
702 | "dev": true
703 | },
704 | "get-caller-file": {
705 | "version": "1.0.3",
706 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
707 | "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
708 | "dev": true
709 | },
710 | "get-stdin": {
711 | "version": "4.0.1",
712 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
713 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
714 | "dev": true
715 | },
716 | "get-stream": {
717 | "version": "3.0.0",
718 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
719 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
720 | "dev": true
721 | },
722 | "getpass": {
723 | "version": "0.1.7",
724 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
725 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
726 | "dev": true
727 | },
728 | "glob": {
729 | "version": "7.1.3",
730 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
731 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
732 | "dev": true
733 | },
734 | "global-dirs": {
735 | "version": "0.1.1",
736 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
737 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
738 | "dev": true
739 | },
740 | "got": {
741 | "version": "6.7.1",
742 | "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz",
743 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
744 | "dev": true
745 | },
746 | "graceful-fs": {
747 | "version": "4.1.11",
748 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
749 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
750 | "dev": true
751 | },
752 | "har-schema": {
753 | "version": "2.0.0",
754 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
755 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
756 | "dev": true
757 | },
758 | "har-validator": {
759 | "version": "5.1.0",
760 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
761 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
762 | "dev": true
763 | },
764 | "has-flag": {
765 | "version": "3.0.0",
766 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
767 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
768 | "dev": true
769 | },
770 | "home-path": {
771 | "version": "1.0.6",
772 | "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz",
773 | "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==",
774 | "dev": true
775 | },
776 | "hosted-git-info": {
777 | "version": "2.7.1",
778 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
779 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
780 | "dev": true
781 | },
782 | "http-signature": {
783 | "version": "1.2.0",
784 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
785 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
786 | "dev": true
787 | },
788 | "iconv-lite": {
789 | "version": "0.4.24",
790 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
791 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
792 | "dev": true
793 | },
794 | "import-lazy": {
795 | "version": "2.1.0",
796 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
797 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
798 | "dev": true
799 | },
800 | "imurmurhash": {
801 | "version": "0.1.4",
802 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
803 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
804 | "dev": true
805 | },
806 | "indent-string": {
807 | "version": "2.1.0",
808 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
809 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
810 | "dev": true
811 | },
812 | "inflight": {
813 | "version": "1.0.6",
814 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
815 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
816 | "dev": true
817 | },
818 | "inherits": {
819 | "version": "2.0.3",
820 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
821 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
822 | "dev": true
823 | },
824 | "ini": {
825 | "version": "1.3.5",
826 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
827 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
828 | "dev": true
829 | },
830 | "invert-kv": {
831 | "version": "2.0.0",
832 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
833 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
834 | "dev": true
835 | },
836 | "is-arrayish": {
837 | "version": "0.2.1",
838 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
839 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
840 | "dev": true
841 | },
842 | "is-builtin-module": {
843 | "version": "1.0.0",
844 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
845 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
846 | "dev": true
847 | },
848 | "is-ci": {
849 | "version": "1.2.1",
850 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
851 | "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
852 | "dev": true
853 | },
854 | "is-finite": {
855 | "version": "1.0.2",
856 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
857 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
858 | "dev": true
859 | },
860 | "is-fullwidth-code-point": {
861 | "version": "1.0.0",
862 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
863 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
864 | "dev": true
865 | },
866 | "is-installed-globally": {
867 | "version": "0.1.0",
868 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
869 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
870 | "dev": true
871 | },
872 | "is-npm": {
873 | "version": "1.0.0",
874 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
875 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
876 | "dev": true
877 | },
878 | "is-obj": {
879 | "version": "1.0.1",
880 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
881 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
882 | "dev": true
883 | },
884 | "is-path-inside": {
885 | "version": "1.0.1",
886 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
887 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
888 | "dev": true
889 | },
890 | "is-redirect": {
891 | "version": "1.0.0",
892 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
893 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
894 | "dev": true
895 | },
896 | "is-retry-allowed": {
897 | "version": "1.1.0",
898 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
899 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
900 | "dev": true
901 | },
902 | "is-stream": {
903 | "version": "1.1.0",
904 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
905 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
906 | "dev": true
907 | },
908 | "is-typedarray": {
909 | "version": "1.0.0",
910 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
911 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
912 | "dev": true
913 | },
914 | "is-utf8": {
915 | "version": "0.2.1",
916 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
917 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
918 | "dev": true
919 | },
920 | "isarray": {
921 | "version": "1.0.0",
922 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
923 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
924 | "dev": true
925 | },
926 | "isbinaryfile": {
927 | "version": "3.0.3",
928 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
929 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
930 | "dev": true
931 | },
932 | "isexe": {
933 | "version": "2.0.0",
934 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
935 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
936 | "dev": true
937 | },
938 | "isstream": {
939 | "version": "0.1.2",
940 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
941 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
942 | "dev": true
943 | },
944 | "js-yaml": {
945 | "version": "3.12.0",
946 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
947 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
948 | "dev": true
949 | },
950 | "jsbn": {
951 | "version": "0.1.1",
952 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
953 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
954 | "dev": true,
955 | "optional": true
956 | },
957 | "json-schema": {
958 | "version": "0.2.3",
959 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
960 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
961 | "dev": true
962 | },
963 | "json-schema-traverse": {
964 | "version": "0.3.1",
965 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
966 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
967 | "dev": true
968 | },
969 | "json-stringify-safe": {
970 | "version": "5.0.1",
971 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
972 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
973 | "dev": true
974 | },
975 | "json5": {
976 | "version": "1.0.1",
977 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
978 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
979 | "dev": true
980 | },
981 | "jsonfile": {
982 | "version": "2.4.0",
983 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
984 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
985 | "dev": true
986 | },
987 | "jsprim": {
988 | "version": "1.4.1",
989 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
990 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
991 | "dev": true
992 | },
993 | "klaw": {
994 | "version": "1.3.1",
995 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
996 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
997 | "dev": true
998 | },
999 | "latest-version": {
1000 | "version": "3.1.0",
1001 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
1002 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
1003 | "dev": true
1004 | },
1005 | "lazy-val": {
1006 | "version": "1.0.3",
1007 | "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz",
1008 | "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg==",
1009 | "dev": true
1010 | },
1011 | "lcid": {
1012 | "version": "2.0.0",
1013 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
1014 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
1015 | "dev": true
1016 | },
1017 | "load-json-file": {
1018 | "version": "1.1.0",
1019 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
1020 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
1021 | "dev": true
1022 | },
1023 | "loud-rejection": {
1024 | "version": "1.6.0",
1025 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
1026 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
1027 | "dev": true
1028 | },
1029 | "lowercase-keys": {
1030 | "version": "1.0.1",
1031 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1032 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
1033 | "dev": true
1034 | },
1035 | "lru-cache": {
1036 | "version": "4.1.3",
1037 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
1038 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
1039 | "dev": true
1040 | },
1041 | "make-dir": {
1042 | "version": "1.3.0",
1043 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
1044 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
1045 | "dev": true,
1046 | "dependencies": {
1047 | "pify": {
1048 | "version": "3.0.0",
1049 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1050 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1051 | "dev": true
1052 | }
1053 | }
1054 | },
1055 | "map-age-cleaner": {
1056 | "version": "0.1.2",
1057 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz",
1058 | "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==",
1059 | "dev": true
1060 | },
1061 | "map-obj": {
1062 | "version": "1.0.1",
1063 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
1064 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
1065 | "dev": true
1066 | },
1067 | "marked": {
1068 | "version": "0.5.0",
1069 | "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.0.tgz",
1070 | "integrity": "sha512-UhjmkCWKu1SS/BIePL2a59BMJ7V42EYtTfksodPRXzPEGEph3Inp5dylseqt+KbU9Jglsx8xcMKmlumfJMBXAA=="
1071 | },
1072 | "mem": {
1073 | "version": "4.0.0",
1074 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
1075 | "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
1076 | "dev": true
1077 | },
1078 | "meow": {
1079 | "version": "3.7.0",
1080 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
1081 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
1082 | "dev": true
1083 | },
1084 | "mime": {
1085 | "version": "2.3.1",
1086 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
1087 | "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
1088 | "dev": true
1089 | },
1090 | "mime-db": {
1091 | "version": "1.36.0",
1092 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
1093 | "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
1094 | "dev": true
1095 | },
1096 | "mime-types": {
1097 | "version": "2.1.20",
1098 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
1099 | "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
1100 | "dev": true
1101 | },
1102 | "mimic-fn": {
1103 | "version": "1.2.0",
1104 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
1105 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
1106 | "dev": true
1107 | },
1108 | "minimatch": {
1109 | "version": "3.0.4",
1110 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1111 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1112 | "dev": true
1113 | },
1114 | "minimist": {
1115 | "version": "1.2.0",
1116 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1117 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1118 | "dev": true
1119 | },
1120 | "mkdirp": {
1121 | "version": "0.5.1",
1122 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1123 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1124 | "dev": true,
1125 | "dependencies": {
1126 | "minimist": {
1127 | "version": "0.0.8",
1128 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1129 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1130 | "dev": true
1131 | }
1132 | }
1133 | },
1134 | "ms": {
1135 | "version": "2.0.0",
1136 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1137 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1138 | "dev": true
1139 | },
1140 | "nice-try": {
1141 | "version": "1.0.5",
1142 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1143 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1144 | "dev": true
1145 | },
1146 | "normalize-package-data": {
1147 | "version": "2.4.0",
1148 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
1149 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
1150 | "dev": true
1151 | },
1152 | "npm-run-path": {
1153 | "version": "2.0.2",
1154 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
1155 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
1156 | "dev": true
1157 | },
1158 | "nugget": {
1159 | "version": "2.0.1",
1160 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
1161 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
1162 | "dev": true
1163 | },
1164 | "number-is-nan": {
1165 | "version": "1.0.1",
1166 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1167 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1168 | "dev": true
1169 | },
1170 | "oauth-sign": {
1171 | "version": "0.9.0",
1172 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1173 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
1174 | "dev": true
1175 | },
1176 | "object-assign": {
1177 | "version": "4.1.1",
1178 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1179 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1180 | "dev": true
1181 | },
1182 | "object-keys": {
1183 | "version": "0.4.0",
1184 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
1185 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
1186 | "dev": true
1187 | },
1188 | "once": {
1189 | "version": "1.4.0",
1190 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1191 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1192 | "dev": true
1193 | },
1194 | "os-locale": {
1195 | "version": "3.0.1",
1196 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
1197 | "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
1198 | "dev": true,
1199 | "dependencies": {
1200 | "cross-spawn": {
1201 | "version": "6.0.5",
1202 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
1203 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
1204 | "dev": true
1205 | },
1206 | "execa": {
1207 | "version": "0.10.0",
1208 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
1209 | "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
1210 | "dev": true
1211 | }
1212 | }
1213 | },
1214 | "p-defer": {
1215 | "version": "1.0.0",
1216 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
1217 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
1218 | "dev": true
1219 | },
1220 | "p-finally": {
1221 | "version": "1.0.0",
1222 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
1223 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
1224 | "dev": true
1225 | },
1226 | "p-is-promise": {
1227 | "version": "1.1.0",
1228 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
1229 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
1230 | "dev": true
1231 | },
1232 | "package-json": {
1233 | "version": "4.0.1",
1234 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
1235 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
1236 | "dev": true
1237 | },
1238 | "parse-color": {
1239 | "version": "1.0.0",
1240 | "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
1241 | "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
1242 | "dev": true,
1243 | "dependencies": {
1244 | "color-convert": {
1245 | "version": "0.5.3",
1246 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
1247 | "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
1248 | "dev": true
1249 | }
1250 | }
1251 | },
1252 | "parse-json": {
1253 | "version": "2.2.0",
1254 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1255 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1256 | "dev": true
1257 | },
1258 | "path-exists": {
1259 | "version": "2.1.0",
1260 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
1261 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
1262 | "dev": true
1263 | },
1264 | "path-is-absolute": {
1265 | "version": "1.0.1",
1266 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1267 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1268 | "dev": true
1269 | },
1270 | "path-is-inside": {
1271 | "version": "1.0.2",
1272 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
1273 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
1274 | "dev": true
1275 | },
1276 | "path-key": {
1277 | "version": "2.0.1",
1278 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1279 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1280 | "dev": true
1281 | },
1282 | "path-type": {
1283 | "version": "1.1.0",
1284 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
1285 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
1286 | "dev": true
1287 | },
1288 | "pend": {
1289 | "version": "1.2.0",
1290 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
1291 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
1292 | "dev": true
1293 | },
1294 | "performance-now": {
1295 | "version": "2.1.0",
1296 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1297 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
1298 | "dev": true
1299 | },
1300 | "pify": {
1301 | "version": "2.3.0",
1302 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1303 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1304 | "dev": true
1305 | },
1306 | "pinkie": {
1307 | "version": "2.0.4",
1308 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1309 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1310 | "dev": true
1311 | },
1312 | "pinkie-promise": {
1313 | "version": "2.0.1",
1314 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1315 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1316 | "dev": true
1317 | },
1318 | "plist": {
1319 | "version": "2.1.0",
1320 | "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
1321 | "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
1322 | "dev": true
1323 | },
1324 | "prepend-http": {
1325 | "version": "1.0.4",
1326 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
1327 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
1328 | "dev": true
1329 | },
1330 | "pretty-bytes": {
1331 | "version": "1.0.4",
1332 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
1333 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
1334 | "dev": true
1335 | },
1336 | "progress-stream": {
1337 | "version": "1.2.0",
1338 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
1339 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
1340 | "dev": true
1341 | },
1342 | "pseudomap": {
1343 | "version": "1.0.2",
1344 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
1345 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
1346 | "dev": true
1347 | },
1348 | "psl": {
1349 | "version": "1.1.29",
1350 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
1351 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
1352 | "dev": true
1353 | },
1354 | "punycode": {
1355 | "version": "1.4.1",
1356 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1357 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
1358 | "dev": true
1359 | },
1360 | "qs": {
1361 | "version": "6.5.2",
1362 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1363 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1364 | "dev": true
1365 | },
1366 | "rc": {
1367 | "version": "1.2.8",
1368 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1369 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1370 | "dev": true
1371 | },
1372 | "read-config-file": {
1373 | "version": "3.1.2",
1374 | "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.1.2.tgz",
1375 | "integrity": "sha512-QCATYzlYHvmWps/W/eP7rcKuhYRYZg5XKeXFxSJRIXvn+KSw1+Ntz2et1aBz5TrEpawGrxWZ7zBipj+/v0xwWQ==",
1376 | "dev": true,
1377 | "dependencies": {
1378 | "ajv": {
1379 | "version": "6.5.3",
1380 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
1381 | "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
1382 | "dev": true
1383 | },
1384 | "fast-deep-equal": {
1385 | "version": "2.0.1",
1386 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
1387 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
1388 | "dev": true
1389 | },
1390 | "json-schema-traverse": {
1391 | "version": "0.4.1",
1392 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1393 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1394 | "dev": true
1395 | }
1396 | }
1397 | },
1398 | "read-pkg": {
1399 | "version": "1.1.0",
1400 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
1401 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
1402 | "dev": true
1403 | },
1404 | "read-pkg-up": {
1405 | "version": "1.0.1",
1406 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
1407 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
1408 | "dev": true
1409 | },
1410 | "redent": {
1411 | "version": "1.0.0",
1412 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
1413 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
1414 | "dev": true
1415 | },
1416 | "registry-auth-token": {
1417 | "version": "3.3.2",
1418 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
1419 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
1420 | "dev": true
1421 | },
1422 | "registry-url": {
1423 | "version": "3.1.0",
1424 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
1425 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
1426 | "dev": true
1427 | },
1428 | "repeating": {
1429 | "version": "2.0.1",
1430 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1431 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1432 | "dev": true
1433 | },
1434 | "request": {
1435 | "version": "2.88.0",
1436 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
1437 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
1438 | "dev": true
1439 | },
1440 | "require-directory": {
1441 | "version": "2.1.1",
1442 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1443 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
1444 | "dev": true
1445 | },
1446 | "require-main-filename": {
1447 | "version": "1.0.1",
1448 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
1449 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
1450 | "dev": true
1451 | },
1452 | "rimraf": {
1453 | "version": "2.6.2",
1454 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
1455 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
1456 | "dev": true
1457 | },
1458 | "safe-buffer": {
1459 | "version": "5.1.2",
1460 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1461 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1462 | "dev": true
1463 | },
1464 | "safer-buffer": {
1465 | "version": "2.1.2",
1466 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1467 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1468 | "dev": true
1469 | },
1470 | "sanitize-filename": {
1471 | "version": "1.6.1",
1472 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
1473 | "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
1474 | "dev": true
1475 | },
1476 | "sax": {
1477 | "version": "1.2.4",
1478 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1479 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
1480 | "dev": true
1481 | },
1482 | "semver": {
1483 | "version": "5.5.1",
1484 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
1485 | "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
1486 | "dev": true
1487 | },
1488 | "semver-diff": {
1489 | "version": "2.1.0",
1490 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1491 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1492 | "dev": true
1493 | },
1494 | "set-blocking": {
1495 | "version": "2.0.0",
1496 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1497 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
1498 | "dev": true
1499 | },
1500 | "shebang-command": {
1501 | "version": "1.2.0",
1502 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1503 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1504 | "dev": true
1505 | },
1506 | "shebang-regex": {
1507 | "version": "1.0.0",
1508 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1509 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1510 | "dev": true
1511 | },
1512 | "signal-exit": {
1513 | "version": "3.0.2",
1514 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1515 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1516 | "dev": true
1517 | },
1518 | "single-line-log": {
1519 | "version": "1.1.2",
1520 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
1521 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
1522 | "dev": true
1523 | },
1524 | "source-map": {
1525 | "version": "0.6.1",
1526 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1527 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1528 | "dev": true
1529 | },
1530 | "source-map-support": {
1531 | "version": "0.5.9",
1532 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
1533 | "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
1534 | "dev": true
1535 | },
1536 | "spdx-correct": {
1537 | "version": "3.0.0",
1538 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
1539 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
1540 | "dev": true
1541 | },
1542 | "spdx-exceptions": {
1543 | "version": "2.1.0",
1544 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
1545 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
1546 | "dev": true
1547 | },
1548 | "spdx-expression-parse": {
1549 | "version": "3.0.0",
1550 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
1551 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
1552 | "dev": true
1553 | },
1554 | "spdx-license-ids": {
1555 | "version": "3.0.0",
1556 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
1557 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
1558 | "dev": true
1559 | },
1560 | "speedometer": {
1561 | "version": "0.1.4",
1562 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
1563 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
1564 | "dev": true
1565 | },
1566 | "sprintf-js": {
1567 | "version": "1.0.3",
1568 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1569 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1570 | "dev": true
1571 | },
1572 | "sshpk": {
1573 | "version": "1.14.2",
1574 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
1575 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
1576 | "dev": true
1577 | },
1578 | "stat-mode": {
1579 | "version": "0.2.2",
1580 | "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
1581 | "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
1582 | "dev": true
1583 | },
1584 | "string_decoder": {
1585 | "version": "0.10.31",
1586 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1587 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
1588 | "dev": true
1589 | },
1590 | "string-width": {
1591 | "version": "1.0.2",
1592 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1593 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1594 | "dev": true
1595 | },
1596 | "strip-ansi": {
1597 | "version": "3.0.1",
1598 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1599 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1600 | "dev": true
1601 | },
1602 | "strip-bom": {
1603 | "version": "2.0.0",
1604 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
1605 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
1606 | "dev": true
1607 | },
1608 | "strip-eof": {
1609 | "version": "1.0.0",
1610 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
1611 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
1612 | "dev": true
1613 | },
1614 | "strip-indent": {
1615 | "version": "1.0.1",
1616 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
1617 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
1618 | "dev": true
1619 | },
1620 | "strip-json-comments": {
1621 | "version": "2.0.1",
1622 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1623 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1624 | "dev": true
1625 | },
1626 | "sumchecker": {
1627 | "version": "1.3.1",
1628 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
1629 | "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
1630 | "dev": true,
1631 | "dependencies": {
1632 | "es6-promise": {
1633 | "version": "4.2.4",
1634 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
1635 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
1636 | "dev": true
1637 | }
1638 | }
1639 | },
1640 | "supports-color": {
1641 | "version": "5.5.0",
1642 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1643 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1644 | "dev": true
1645 | },
1646 | "temp-file": {
1647 | "version": "3.1.3",
1648 | "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.1.3.tgz",
1649 | "integrity": "sha512-oz2J77loDE9sGrlRTqBzwbsUvoBD2BpyXeaRPKyGwBIwaamSs2jdqAfhutw7Tch9llr1u8E2ruoug09rNPa3PA==",
1650 | "dev": true
1651 | },
1652 | "term-size": {
1653 | "version": "1.2.0",
1654 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
1655 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
1656 | "dev": true
1657 | },
1658 | "throttleit": {
1659 | "version": "0.0.2",
1660 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
1661 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
1662 | "dev": true
1663 | },
1664 | "through2": {
1665 | "version": "0.2.3",
1666 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
1667 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
1668 | "dev": true,
1669 | "dependencies": {
1670 | "isarray": {
1671 | "version": "0.0.1",
1672 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
1673 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
1674 | "dev": true
1675 | },
1676 | "readable-stream": {
1677 | "version": "1.1.14",
1678 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
1679 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
1680 | "dev": true
1681 | }
1682 | }
1683 | },
1684 | "timed-out": {
1685 | "version": "4.0.1",
1686 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
1687 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
1688 | "dev": true
1689 | },
1690 | "tough-cookie": {
1691 | "version": "2.4.3",
1692 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
1693 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
1694 | "dev": true
1695 | },
1696 | "trim-newlines": {
1697 | "version": "1.0.0",
1698 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
1699 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
1700 | "dev": true
1701 | },
1702 | "truncate-utf8-bytes": {
1703 | "version": "1.0.2",
1704 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
1705 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
1706 | "dev": true
1707 | },
1708 | "tunnel-agent": {
1709 | "version": "0.6.0",
1710 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1711 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1712 | "dev": true
1713 | },
1714 | "tweetnacl": {
1715 | "version": "0.14.5",
1716 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1717 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1718 | "dev": true,
1719 | "optional": true
1720 | },
1721 | "typedarray": {
1722 | "version": "0.0.6",
1723 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1724 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
1725 | "dev": true
1726 | },
1727 | "unique-string": {
1728 | "version": "1.0.0",
1729 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
1730 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
1731 | "dev": true
1732 | },
1733 | "universalify": {
1734 | "version": "0.1.2",
1735 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
1736 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
1737 | "dev": true
1738 | },
1739 | "unzip-response": {
1740 | "version": "2.0.1",
1741 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
1742 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
1743 | "dev": true
1744 | },
1745 | "update-notifier": {
1746 | "version": "2.5.0",
1747 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
1748 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
1749 | "dev": true
1750 | },
1751 | "uri-js": {
1752 | "version": "4.2.2",
1753 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1754 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1755 | "dev": true,
1756 | "dependencies": {
1757 | "punycode": {
1758 | "version": "2.1.1",
1759 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1760 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1761 | "dev": true
1762 | }
1763 | }
1764 | },
1765 | "url-parse-lax": {
1766 | "version": "1.0.0",
1767 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
1768 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
1769 | "dev": true
1770 | },
1771 | "utf8-byte-length": {
1772 | "version": "1.0.4",
1773 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
1774 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
1775 | "dev": true
1776 | },
1777 | "util-deprecate": {
1778 | "version": "1.0.2",
1779 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1780 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1781 | "dev": true
1782 | },
1783 | "uuid": {
1784 | "version": "3.3.2",
1785 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1786 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
1787 | "dev": true
1788 | },
1789 | "validate-npm-package-license": {
1790 | "version": "3.0.4",
1791 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
1792 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
1793 | "dev": true
1794 | },
1795 | "verror": {
1796 | "version": "1.10.0",
1797 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1798 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1799 | "dev": true
1800 | },
1801 | "which": {
1802 | "version": "1.3.1",
1803 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1804 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1805 | "dev": true
1806 | },
1807 | "which-module": {
1808 | "version": "2.0.0",
1809 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
1810 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
1811 | "dev": true
1812 | },
1813 | "widest-line": {
1814 | "version": "2.0.0",
1815 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
1816 | "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
1817 | "dev": true,
1818 | "dependencies": {
1819 | "ansi-regex": {
1820 | "version": "3.0.0",
1821 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
1822 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
1823 | "dev": true
1824 | },
1825 | "is-fullwidth-code-point": {
1826 | "version": "2.0.0",
1827 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1828 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1829 | "dev": true
1830 | },
1831 | "string-width": {
1832 | "version": "2.1.1",
1833 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1834 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1835 | "dev": true
1836 | },
1837 | "strip-ansi": {
1838 | "version": "4.0.0",
1839 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1840 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1841 | "dev": true
1842 | }
1843 | }
1844 | },
1845 | "wrap-ansi": {
1846 | "version": "2.1.0",
1847 | "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
1848 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
1849 | "dev": true
1850 | },
1851 | "wrappy": {
1852 | "version": "1.0.2",
1853 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1854 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1855 | "dev": true
1856 | },
1857 | "write-file-atomic": {
1858 | "version": "2.3.0",
1859 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
1860 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
1861 | "dev": true
1862 | },
1863 | "xdg-basedir": {
1864 | "version": "3.0.0",
1865 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
1866 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
1867 | "dev": true
1868 | },
1869 | "xmlbuilder": {
1870 | "version": "8.2.2",
1871 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
1872 | "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
1873 | "dev": true
1874 | },
1875 | "xmldom": {
1876 | "version": "0.1.27",
1877 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
1878 | "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
1879 | "dev": true
1880 | },
1881 | "xregexp": {
1882 | "version": "4.0.0",
1883 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
1884 | "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
1885 | "dev": true
1886 | },
1887 | "xtend": {
1888 | "version": "2.1.2",
1889 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
1890 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
1891 | "dev": true
1892 | },
1893 | "y18n": {
1894 | "version": "4.0.0",
1895 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
1896 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
1897 | "dev": true
1898 | },
1899 | "yallist": {
1900 | "version": "2.1.2",
1901 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
1902 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
1903 | "dev": true
1904 | },
1905 | "yargs": {
1906 | "version": "12.0.2",
1907 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
1908 | "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
1909 | "dev": true,
1910 | "dependencies": {
1911 | "ansi-regex": {
1912 | "version": "3.0.0",
1913 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
1914 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
1915 | "dev": true
1916 | },
1917 | "decamelize": {
1918 | "version": "2.0.0",
1919 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
1920 | "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
1921 | "dev": true
1922 | },
1923 | "find-up": {
1924 | "version": "3.0.0",
1925 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
1926 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
1927 | "dev": true
1928 | },
1929 | "is-fullwidth-code-point": {
1930 | "version": "2.0.0",
1931 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1932 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1933 | "dev": true
1934 | },
1935 | "locate-path": {
1936 | "version": "3.0.0",
1937 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1938 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1939 | "dev": true,
1940 | "requires": {
1941 | "p-locate": "^3.0.0",
1942 | "path-exists": "^3.0.0"
1943 | }
1944 | },
1945 | "p-limit": {
1946 | "version": "2.0.0",
1947 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
1948 | "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
1949 | "dev": true,
1950 | "requires": {
1951 | "p-try": "^2.0.0"
1952 | }
1953 | },
1954 | "p-locate": {
1955 | "version": "3.0.0",
1956 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1957 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1958 | "dev": true,
1959 | "requires": {
1960 | "p-limit": "^2.0.0"
1961 | }
1962 | },
1963 | "p-try": {
1964 | "version": "2.0.0",
1965 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
1966 | "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
1967 | "dev": true
1968 | },
1969 | "path-exists": {
1970 | "version": "3.0.0",
1971 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1972 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1973 | "dev": true
1974 | },
1975 | "string-width": {
1976 | "version": "2.1.1",
1977 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1978 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1979 | "dev": true
1980 | },
1981 | "strip-ansi": {
1982 | "version": "4.0.0",
1983 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1984 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1985 | "dev": true
1986 | }
1987 | }
1988 | },
1989 | "yargs-parser": {
1990 | "version": "10.1.0",
1991 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
1992 | "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
1993 | "dev": true,
1994 | "dependencies": {
1995 | "camelcase": {
1996 | "version": "4.1.0",
1997 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
1998 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
1999 | "dev": true
2000 | }
2001 | }
2002 | },
2003 | "yauzl": {
2004 | "version": "2.4.1",
2005 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
2006 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
2007 | "dev": true
2008 | }
2009 | }
2010 | }
2011 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "kcmodmanager",
3 | "version": "0.0.4",
4 | "description": "A tool to manage Mods package of Kancolle",
5 | "main": "main.js",
6 | "scripts": {
7 | "start": "electron .",
8 | "test": "electron . --debug-brk=9223",
9 | "build": "electron-builder --publish=never",
10 | "build-both": "electron-builder -mw --publish=never",
11 | "build-win": "electron-builder -w --publish=never",
12 | "build-mac": "electron-builder -m --publish=never"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "git+https://github.com/xiaozhikang0916/kcmodmanager.git"
17 | },
18 | "author": "xiaozhikang0916",
19 | "bugs": {
20 | "url": "https://github.com/xiaozhikang0916/kcmodmanager/issues"
21 | },
22 | "homepage": "https://github.com/xiaozhikang0916/kcmodmanager#readme",
23 | "license": "MIT",
24 | "dependencies": {
25 | "marked": "^0.5.0"
26 | },
27 | "devDependencies": {
28 | "electron": "^2.0.8",
29 | "electron-builder": "^20.28.4"
30 | },
31 | "build": {
32 | "productName": "KCModManager",
33 | "appId": "org.kiritsugupapa.kcmodmanager",
34 | "asar": true,
35 | "directories": {
36 | "output": "release-builds"
37 | },
38 | "mac": {
39 | "files": [
40 | "!modconfig.json",
41 | "!instruction/*",
42 | "!release-builds",
43 | "!readme*",
44 | "!.vscode/*"
45 | ]
46 | },
47 | "win": {
48 | "files": [
49 | "!modconfig.json",
50 | "!instruction/*",
51 | "!release-builds",
52 | "!readme*",
53 | "!.vscode/*"
54 | ],
55 | "target": [
56 | "zip",
57 | "portable"
58 | ]
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/scripts/config.js:
--------------------------------------------------------------------------------
1 | fs = require("fs")
2 | path = require("path")
3 | const app = require('electron')
4 |
5 | class Config {
6 | constructor(datapath) {
7 | if (typeof datapath == 'string') {
8 | this.path = path.join(datapath, 'modconfig.json')
9 | this.loadConfig()
10 | } else {
11 | this.path = datapath.path
12 | if (datapath.name_format) {
13 | this.name_format = datapath.name_format
14 | } else {
15 | this.name_format = ''
16 | }
17 | if (datapath.extract_path) {
18 | this.extract_path = datapath.extract_path
19 | } else {
20 | this.extract_path = ''
21 | }
22 | if (datapath.mod_path) {
23 | this.mod_path = datapath.mod_path
24 | } else {
25 | this.mod_path = ''
26 | }
27 | if (datapath.installed_mod) {
28 | this.installed_mod = datapath.installed_mod
29 | } else {
30 | this.installed_mod = []
31 | }
32 | }
33 | }
34 |
35 | loadConfig() {
36 | console.log("Config read: path ")
37 | if (!fs.existsSync(this.path)) {
38 | fs.writeFileSync(this.path, "{}")
39 | }
40 | var tmp = JSON.parse(fs.readFileSync(this.path, 'utf8'))
41 | if (tmp.name_format) {
42 | this.name_format = tmp.name_format
43 | } else {
44 | this.name_format = ''
45 | }
46 | if (tmp.extract_path) {
47 | this.extract_path = tmp.extract_path
48 | } else {
49 | this.extract_path = ''
50 | }
51 | if (tmp.mod_path) {
52 | this.mod_path = tmp.mod_path
53 | } else {
54 | this.mod_path = ''
55 | }
56 | if (tmp.installed_mod) {
57 | this.installed_mod = tmp.installed_mod
58 | } else {
59 | this.installed_mod = []
60 | }
61 | }
62 |
63 | saveConfig() {
64 | if (!this.installed_mod) {
65 | this.installed_mod = []
66 | }
67 | fs.writeFileSync(this.path, JSON.stringify(this, null, 4), 'utf8')
68 | }
69 |
70 | validConfig() {
71 | return !(this.name_format === undefined || this.name_format == ''
72 | || this.extract_path === undefined || this.extract_path == ''
73 | || this.mod_path === undefined || this.mod_path == '')
74 | }
75 |
76 | getModPath() {
77 | return this.mod_path
78 | }
79 |
80 | setModPath(path) {
81 | this.mod_path = path
82 | }
83 |
84 | getNameFormat() {
85 | return this.name_format
86 | }
87 |
88 | setNameFormat(name) {
89 | this.name_format = name
90 | }
91 |
92 | getExtractPath() {
93 | return this.extract_path
94 | }
95 |
96 | setExtractPath(path) {
97 | this.extract_path = path
98 | }
99 |
100 | formatFileName(originName, relativePath = "") {
101 | var name = path.basename(originName)
102 | var extIndex = name.lastIndexOf('.')
103 | if (extIndex > 0) {
104 | var base = name.substring(0, extIndex)
105 | var ext = name.substring(extIndex + 1, name.length)
106 |
107 | var nname = this.getNameFormat().replace("\{name\}", base).replace("\{ext\}", ext)
108 | return path.join(relativePath, path.parse(originName).dir, nname)
109 | } else {
110 | return path.join(relativePath, name)
111 | }
112 | }
113 |
114 | deformatName(name) {
115 | const nameReg = this.name_format
116 | .replace(new RegExp("\\.", 'g'), "\\.")
117 | .replace("\{name\}", "\(\.+?\)")
118 | .replace("\{ext\}", "\(\.+?\)")
119 | return name.replace(new RegExp(nameReg), "$1.$2")
120 | }
121 |
122 | isModInstalled(modName) {
123 | let result = false
124 | this.installed_mod.forEach(function (item, index, array) {
125 | if (item == modName) {
126 | return result = true
127 | }
128 | })
129 | return result;
130 | }
131 |
132 | saveInstallMod(modName) {
133 | if (this.installed_mod === undefined) {
134 | this.installed_mod = []
135 | }
136 | this.installed_mod.forEach(function (item, index, array) {
137 | if (item == modName) {
138 | array.splice(index, 1)
139 | }
140 | })
141 | this.installed_mod.push(modName)
142 | }
143 |
144 | deleteInstalledMod(modName) {
145 | if (this.installed_mod === undefined) {
146 | return false;
147 | }
148 | let result = false
149 | this.installed_mod.forEach(function (item, index, array) {
150 | if (item == modName) {
151 | array.splice(index, 1)
152 | result = true
153 | }
154 | })
155 | return result;
156 | }
157 | }
158 |
159 | module.exports = Config
--------------------------------------------------------------------------------
/scripts/getmodlist.js:
--------------------------------------------------------------------------------
1 | fs = require('fs')
2 | path = require('path')
3 | const { ipcRenderer, remote } = require('electron')
4 | const { Menu, MenuItem } = remote
5 | var content = document.getElementById("mod_list")
6 | var mainPage = document.getElementById("mod_info")
7 | const template = document.querySelector('template')
8 | const pageNode = document.importNode(template.content, true)
9 | const config = new Config(ipcRenderer.sendSync('get-setting'))
10 |
11 | function addModToList(modFile) {
12 | let element = document.createElement("div")
13 | let name = path.basename(modFile)
14 | element.id = name
15 | element.classList.add("moditem")
16 | let installed = config.isModInstalled(name)
17 | if (installed) {
18 | element.classList.add("installed")
19 | } else {
20 | element.classList.remove("installed")
21 | }
22 | element.addEventListener('click', (ev) => {
23 | resetSelectedMod()
24 | element.classList.add('selected')
25 | let page = document.getElementById(`mod_info_${name}`)
26 | page.classList.add("shown")
27 | })
28 | makeContextMenu(element)
29 | let text = document.createElement("p")
30 | text.classList.add("modname")
31 | text.textContent = name
32 | element.appendChild(text)
33 | mainPage.appendChild(buildInfoPage(name, pageNode.cloneNode(true)))
34 | content.append(element)
35 | }
36 |
37 | function makeContextMenu(element) {
38 | let menu = new Menu()
39 | menu.append(new MenuItem({
40 | label: '格式化所有文件',
41 | click() { formatToOriginName(element.id) }
42 | }))
43 | element.addEventListener('contextmenu', (e) => {
44 | e.preventDefault()
45 | menu.popup({ window: remote.getCurrentWindow() })
46 | }, false)
47 | }
48 |
49 | function formatToOriginName(id) {
50 | console.log(`Formatting file names of ${id}`)
51 | dialog.showMessageBox(remote.getCurrentWindow(), {
52 | type: 'info',
53 | buttons: ["确认", "取消"],
54 | message: `将${config.name_format}重命名为{name}.{ext}。\n实验功能,请注意备份你的mod文件`
55 | }, (resp, checked) => {
56 | if (resp == 0) {
57 | renameModFile(id)
58 | }
59 | })
60 | }
61 |
62 | function resetSelectedMod() {
63 | const sections = document.querySelectorAll('.moditem.selected')
64 | sections.forEach((section) => {
65 | section.classList.remove('selected')
66 | })
67 |
68 | const pages = document.querySelectorAll('.info_page.shown')
69 | pages.forEach((page) => {
70 | page.classList.remove('shown')
71 | })
72 | }
73 |
74 | function createPage() {
75 | var setting = document.getElementById("settings")
76 | setting.addEventListener('click', (ev) => {
77 | ipcRenderer.send('asynchronous-message', "open-settings")
78 | })
79 | if (!config.validConfig()) {
80 | console.log("Setting invalid!")
81 | ipcRenderer.send('asynchronous-message', "open-settings")
82 | } else {
83 | console.log("Setting valid, start loading")
84 | loadMods()
85 | }
86 | }
87 |
88 | function loadMods() {
89 | fs.readdir(config.getModPath(), function (err, fileList) {
90 | if (err) return err;
91 | fileList.forEach(function (file) {
92 | var currentPath = path.resolve(config.getModPath(), file)
93 | if (!file.startsWith('.') && fs.statSync(currentPath).isDirectory()) {
94 | try {
95 | var kcs = fs.statSync(path.resolve(currentPath, "kcs2"))
96 | if (kcs && kcs.isDirectory()) {
97 | addModToList(file)
98 | }
99 | } catch (ENONET) {
100 | console.error(`${file} is not valid mod package`)
101 | }
102 | }
103 | })
104 | })
105 | }
106 |
107 | createPage()
--------------------------------------------------------------------------------
/scripts/installmod.js:
--------------------------------------------------------------------------------
1 | fs = require("fs")
2 | path = require("path")
3 | const { dialog } = require('electron').remote
4 |
5 | function installMod(modName) {
6 | var outputPath = config.getExtractPath()
7 | walkDir(path.join(config.getModPath(), modName), function (err, result) {
8 | if (err) {
9 | console.err(`Fail to install ${modName} : ${err}`)
10 | notifyInstalled(modName, false)
11 | } else {
12 | var conflicts = checkFileConflict(modName, result, outputPath)
13 | if (conflicts && conflicts.length > 0) {
14 | notifyConflict(conflicts)
15 | notifyInstalled(modName, false)
16 | } else {
17 | result.forEach((file) => {
18 | if (!isInfoFile(file)) {
19 | var rPath = path.relative(file, path.join(config.getModPath(), modName))
20 | rPath = path.join(file, rPath)
21 | rPath = file.substring(rPath.length, file.length)
22 | var dir = path.parse(rPath).dir
23 | if (!fs.existsSync(path.join(outputPath, dir))) {
24 | mkDirByPathSync(path.join(outputPath, dir))
25 | }
26 | fs.copyFileSync(path.join(config.getModPath(), modName, rPath), config.formatFileName(rPath, outputPath))
27 | }
28 | })
29 | config.saveInstallMod(modName)
30 | ipcRenderer.sendSync("save-setting", config)
31 | notifyInstalled(modName, true)
32 | }
33 | }
34 | })
35 | }
36 |
37 | function uninstallMod(modName) {
38 | var outputPath = config.getExtractPath()
39 | walkDir(path.join(config.getModPath(), modName), function (err, result) {
40 | if (err) {
41 | notifyUninstalled(modName, false)
42 | console.err(`Fail to uninstall ${modName} : ${err}`)
43 | } else {
44 | result.forEach((file) => {
45 | if (!isInfoFile(file)) {
46 | var rPath = path.relative(file, path.join(config.getModPath(), modName))
47 | rPath = path.join(file, rPath)
48 | rPath = file.substring(rPath.length, file.length)
49 | fs.unlink(config.formatFileName(rPath, outputPath))
50 | }
51 | })
52 | config.deleteInstalledMod(modName)
53 | ipcRenderer.sendSync("save-setting", config)
54 | notifyUninstalled(modName, true)
55 | }
56 | })
57 | }
58 |
59 | function renameModFile(modName) {
60 | var outputPath = config.getExtractPath()
61 | walkDir(path.join(config.getModPath(), modName), function (err, result) {
62 | if (err) {
63 | console.err(`Fail to rename ${modName} : ${err}`)
64 | } else {
65 | result.forEach((file) => {
66 | if (!isInfoFile(file)) {
67 | fs.renameSync(file, config.deformatName(file))
68 | }
69 | })
70 | }
71 | })
72 | }
73 |
74 | function mkDirByPathSync(targetDir, { isRelativeToScript = true } = {}) {
75 | const sep = path.sep;
76 | const initDir = path.isAbsolute(targetDir) ? sep : '';
77 | const baseDir = isRelativeToScript ? __dirname : '.';
78 |
79 | return targetDir.split(sep).reduce((parentDir, childDir) => {
80 | const curDir = path.resolve(baseDir, parentDir, childDir);
81 | try {
82 | fs.mkdirSync(curDir);
83 | } catch (err) {
84 | if (err.code === 'EEXIST') { // curDir already exists!
85 | return curDir;
86 | }
87 |
88 | // To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.
89 | if (err.code === 'ENOENT') { // Throw the original parentDir error on curDir `ENOENT` failure.
90 | throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`);
91 | }
92 |
93 | const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1;
94 | if (!caughtErr || caughtErr && targetDir === curDir) {
95 | throw err; // Throw if it's just the last created dir.
96 | }
97 | }
98 |
99 | return curDir;
100 | }, initDir);
101 | }
102 |
103 | function walkDir(dir, done) {
104 | var results = [];
105 | fs.readdir(dir, function (err, list) {
106 | if (err) return done(err);
107 | var pending = list.length;
108 | if (!pending) return done(null, results);
109 | list.forEach(function (file) {
110 | file = path.resolve(dir, file);
111 | fs.stat(file, function (err, stat) {
112 | if (stat && stat.isDirectory()) {
113 | walkDir(file, function (err, res) {
114 | results = results.concat(res);
115 | if (!--pending) done(null, results);
116 | });
117 | } else {
118 | results.push(file);
119 | if (!--pending) done(null, results);
120 | }
121 | });
122 | });
123 | });
124 | }
125 |
126 | function checkFileConflict(modName, fileList, outputPath) {
127 | var results = [];
128 | fileList.forEach((file) => {
129 | var rPath = path.relative(file, path.join(config.getModPath(), modName))
130 | rPath = path.join(file, rPath)
131 | rPath = file.substring(rPath.length, file.length)
132 | if (fs.existsSync(config.formatFileName(rPath, outputPath))) {
133 | results.push(file)
134 | }
135 | })
136 | return results
137 | }
138 |
139 | function notifyConflict(conflicts) {
140 | console.error("Files from mod are overwriting existing mod resources!:")
141 | var content = "当前安装的mod包里以下文件与现存魔改文件冲突,请自行删除:\n"
142 | conflicts.forEach((file) => {
143 | console.error(file)
144 | content += `${file}\n`
145 | })
146 | dialog.showErrorBox("文件冲突", content)
147 | }
--------------------------------------------------------------------------------
/scripts/modinfo.js:
--------------------------------------------------------------------------------
1 | const marked = require('marked')
2 |
3 | const INFO_LIST = [
4 | /readme\.md/,
5 | /info\.json/,
6 | /icon\.*/,
7 | /readme[\\\/]/,
8 | /\.DS_Store/
9 | ]
10 |
11 | function buildInfoPage(modName, template) {
12 | const infoJsonPath = path.join(config.getModPath(), modName, "info.json")
13 | const iconPath = path.join(config.getModPath(), modName, "icon.png")
14 | const readmePath = path.join(config.getModPath(), modName, "readme.md")
15 | var icon = template.querySelector(".icon")
16 | var title = template.querySelector(".title")
17 | var author = template.querySelector(".author")
18 | var tags = template.querySelector(".tags")
19 | var button = template.querySelector(".modbutton")
20 | if (fs.existsSync(infoJsonPath)) {
21 | var modInfo = JSON.parse(fs.readFileSync(infoJsonPath, 'utf8'))
22 | icon.style.display = "block"
23 | icon.src = iconPath
24 | title.textContent = modInfo.name
25 | author.textContent = modInfo.author
26 | tags.textContent = modInfo.tags.join(',')
27 | template.querySelector(".readme_section").innerHTML = marked.parse(
28 | fs.readFileSync(readmePath, 'utf8'),
29 | {
30 | baseUrl: path.join(config.getModPath(), modName, './'),
31 | gfm: true
32 | }
33 | )
34 | } else {
35 | title.textContent = modName
36 | icon.style.display = "none"
37 | }
38 | generateButton(button, modName, config.isModInstalled(modName))
39 | template.firstElementChild.id = `mod_info_${modName}`
40 | return template
41 | }
42 |
43 | function generateButton(element, modfile, installed) {
44 | if (installed) {
45 | element.classList.add("installed")
46 | }
47 | else {
48 | element.classList.remove("installed")
49 | }
50 | element.id = `mod_button_${modfile}`
51 | element.addEventListener("click", function (e, ev) {
52 | element.disabled = true
53 | if (config.isModInstalled(modfile)) {
54 | uninstallMod(modfile)
55 | } else {
56 | installMod(modfile)
57 | }
58 | })
59 | return element
60 | }
61 |
62 | function notifyInstalled(modName, result) {
63 | if (result) {
64 | document.getElementById(`mod_button_${modName}`).classList.add("installed")
65 | }
66 | notifyButton(modName, result)
67 | }
68 |
69 | function notifyUninstalled(modName, result) {
70 | if (result) {
71 | document.getElementById(`mod_button_${modName}`).classList.remove("installed")
72 | }
73 | notifyButton(modName, result)
74 | }
75 |
76 | function notifyButton(modName, result) {
77 | document.getElementById(`mod_button_${modName}`).disabled = false
78 | }
79 |
80 | function isInfoFile(file) {
81 | if (file.startsWith("kcs2")) {
82 | return false
83 | } else {
84 | return INFO_LIST.some((name) => {
85 | return file.search(name) > -1
86 | })
87 | }
88 | }
--------------------------------------------------------------------------------
/scripts/settings.js:
--------------------------------------------------------------------------------
1 | var modPath = document.getElementById('mod_path_edit')
2 | var outputPath = document.getElementById('output_path_edit')
3 | var nameFormat = document.getElementById('name_fmt_edit')
4 | const { ipcRenderer } = require('electron')
5 | const { dialog } = require('electron').remote
6 |
7 | const config = new Config(ipcRenderer.sendSync('get-setting'))
8 |
9 | if (config.getModPath()) {
10 | modPath.value = config.getModPath()
11 | }
12 |
13 | if (config.getExtractPath()) {
14 | outputPath.value = config.getExtractPath()
15 | }
16 |
17 | if (config.getNameFormat()) {
18 | nameFormat.value = config.getNameFormat()
19 | } else {
20 | nameFormat.value = "{name}.hack.{ext}"
21 | config.setNameFormat(nameFormat.value)
22 | }
23 |
24 | modPath.oninput = function (ev) {
25 | config.setModPath(modPath.value)
26 | }
27 |
28 | outputPath.oninput = function (ev) {
29 | config.setExtractPath(outputPath.value)
30 | }
31 |
32 | nameFormat.oninput = function (ev) {
33 | config.setNameFormat(nameFormat.value)
34 | }
35 |
36 | document.getElementById('mod_path_edit_button').addEventListener('click', (e, ev) => {
37 | dialog.showOpenDialog({ properties: ['openDirectory'], multiSelections: false }, (filePaths) => {
38 | modPath.value = filePaths[0]
39 | config.setModPath(modPath.value)
40 | })
41 | })
42 |
43 | document.getElementById('output_path_edit_button').addEventListener('click', (e, ev) => {
44 | dialog.showOpenDialog({ properties: ['openDirectory'], multiSelections: false }, (filePaths) => {
45 | outputPath.value = filePaths[0]
46 | config.setExtractPath(outputPath.value)
47 | })
48 | })
49 |
50 | document.getElementById('save').addEventListener('click', (e, ev) => {
51 | ipcRenderer.sendSync("save-setting", config)
52 | })
--------------------------------------------------------------------------------
/settings.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Setting
8 |
9 |
10 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------