├── .gitmodules ├── .jshintrc ├── packages └── @imgcook │ ├── cli-utils │ ├── test │ │ └── __test__.js │ ├── index.js │ ├── README.md │ ├── lib │ │ ├── unique.js │ │ ├── downloadImg.js │ │ └── homedir.js │ ├── package.json │ └── package-lock.json │ └── cli │ ├── CHANGELOG.md │ ├── lib │ ├── constant.js │ ├── update.js │ ├── logger.js │ ├── install.js │ ├── init.js │ ├── pull.js │ ├── helper.js │ └── config.js │ ├── test │ └── __test__.js │ ├── package.json │ ├── README.md │ ├── bin │ └── imgcook.js │ └── package-lock.json ├── .gitignore ├── lerna.json ├── CHANGELOG.md ├── package.json ├── .travis.yml ├── LICENSE ├── README.zh-CN.md └── README.md /.gitmodules: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 9 3 | } -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/test/__test__.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | demo 4 | lerna-debug.log -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/@imgcook/*" 4 | ], 5 | "version": "0.2.2" 6 | } 7 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @imgcook/cli Changelog 2 | 3 | V0.0.2-alpha.3 / 2019-07-24 4 | ================== 5 | * fix: 修复重复下次图片问题 -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/index.js: -------------------------------------------------------------------------------- 1 | ['unique', 'downloadImg', 'homedir'].forEach(i => { 2 | Object.assign(exports, require(`./lib/${i}`)); 3 | }); 4 | -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/README.md: -------------------------------------------------------------------------------- 1 | ## @imgcook/cli-utils 2 | 3 | 4 | ### use 5 | 6 | ``` 7 | const { unique, downloadImg } = require('@imgcook/cli-utils'); 8 | 9 | ``` -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # imgcook Cli Changelog 2 | 3 | V0.0.3 / 2019-11-13 4 | ================== 5 | * feat: 下载代码支持指定绝对路径 6 | 7 | V0.0.2 / 2019-07-31 8 | ================== 9 | * feat: 增加支付宝小程序 DSL 10 | * fix: 修复处理多个 loader panelValue 往下传值问题 -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/lib/unique.js: -------------------------------------------------------------------------------- 1 | // Filter array duplicates. 2 | exports.unique = array => { 3 | return array 4 | .concat() 5 | .sort() 6 | .filter((item, index, arr) => { 7 | return !index || item !== arr[index - 1]; 8 | }); 9 | }; 10 | -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/lib/downloadImg.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const request = require('request'); 3 | 4 | exports.downloadImg = (url, lurl) => { 5 | return new Promise(resolve => { 6 | request(url) 7 | .pipe(fs.createWriteStream(lurl)) 8 | .on('close', () => { 9 | resolve(); 10 | }); 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imgcook-cli", 3 | "private": true, 4 | "scripts": { 5 | "init": "lerna bootstrap", 6 | "publish": "lerna publish", 7 | "publishSkipGit": "lerna publish --skip-git", 8 | "test": "lerna run test", 9 | "genSub": "git submodule init && git submodule update" 10 | }, 11 | "devDependencies": { 12 | "lerna": "^3.13.1" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/constant.js: -------------------------------------------------------------------------------- 1 | const dsl = [ 2 | { 3 | name: 'H5 标准开发规范', 4 | id: '39' 5 | }, 6 | { 7 | name: 'React 开发规范', 8 | id: '41' 9 | }, 10 | { 11 | name: 'Vue 开发规范', 12 | id: '60' 13 | }, 14 | { 15 | name: '支付宝小程序开发规范', 16 | id: '79' 17 | }, 18 | { 19 | name: 'Rax 标准开发规范', 20 | id: '207' 21 | }, 22 | { 23 | name: '微信小程序开发规范', 24 | id: '40' 25 | } 26 | ] 27 | 28 | module.exports = { 29 | dsl 30 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: 2 | - linux 3 | - osx 4 | 5 | language: node_js 6 | node_js: 7 | - '9' 8 | 9 | git: 10 | submodules: false 11 | 12 | # Use sed to replace the SSH URL with the public URL, then initialize submodules 13 | before_install: 14 | - sed -i.bak 's/git@github.com:/https:\/\/github.com\//' .gitmodules 15 | - git submodule update --init --recursive 16 | - npm install -g yarn 17 | - yarn config set ignore-engines true 18 | - yarn global add mocha 19 | - yarn global add lerna 20 | 21 | install: 22 | - lerna bootstrap 23 | 24 | script: 25 | - yarn test -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/update.js: -------------------------------------------------------------------------------- 1 | 2 | const childProcess = require('child_process'); 3 | const ora = require('ora'); 4 | const spinner = ora(); 5 | const logger = require('./logger'); 6 | 7 | const update = async (value, option) => { 8 | try { 9 | spinner.start(`Update imgcook cli...`); 10 | childProcess.exec('npm install -g @imgcook/cli', () => { 11 | spinner.succeed(`Update complete.`); 12 | }); 13 | 14 | } catch (error) { 15 | spinner.fail(`Update fail. Error: ${error}`); 16 | } 17 | }; 18 | 19 | module.exports = (...args) => { 20 | return update(...args).catch(err => { 21 | logger.error(err); 22 | }); 23 | }; 24 | -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@imgcook/cli-utils", 3 | "version": "0.2.1", 4 | "description": "imgcook cli utils", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha test/__test__.js" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "fs-extra": "^7.0.1", 13 | "request": "^2.88.0" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/imgcook/imgcook-cli.git" 18 | }, 19 | "bugs": { 20 | "url": "https://github.com/imgcook/imgcook-cli/issues" 21 | }, 22 | "homepage": "https://github.com/imgcook/imgcook-cli#readme", 23 | "publishConfig": { 24 | "access": "public" 25 | }, 26 | "gitHead": "27bbc51c6df7d11fa6588e33c839dd29f50b7763" 27 | } 28 | -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/lib/homedir.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const os = require('os'); 4 | 5 | exports.homedir = typeof os.homedir === 'function' ? os.homedir : homedir; 6 | 7 | function homedir() { 8 | const env = process.env; 9 | const home = env.HOME; 10 | const user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME; 11 | 12 | if (process.platform === 'win32') { 13 | return env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null; 14 | } 15 | 16 | if (process.platform === 'darwin') { 17 | return home || (user ? '/Users/' + user : null); 18 | } 19 | 20 | if (process.platform === 'linux') { 21 | return ( 22 | home || (process.getuid() === 0 ? '/root' : user ? '/home/' + user : null) 23 | ); 24 | } 25 | 26 | return home || null; 27 | } 28 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/logger.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs-extra'); 2 | var moment = require('moment'); 3 | const { cliConfig } = require('./helper'); 4 | 5 | function log(options) { 6 | const { message, type } = options; 7 | const time = new Date(); 8 | const year = time.getFullYear(); 9 | const month = 10 | time.getMonth() + 1 > 9 ? time.getMonth() + 1 : `0${time.getMonth() + 1}`; 11 | const day = time.getDay() > 9 ? time.getDay() : `0${time.getDay()}`; 12 | const logFileName = `cli.log.${year}-${month}-${day}`; 13 | const input = 14 | moment().format('YYYY-MM-DD h:mm:ss,SSS') + ` ${type} ` + message + '\n'; 15 | fs.appendFile(`${cliConfig.path}/${logFileName}`, input, err => { 16 | // if(!err) console.log(); 17 | }); 18 | } 19 | function info(message) { 20 | log({ message, type: 'INFO' }); 21 | } 22 | function warn(message) { 23 | log({ message, type: 'WARN' }); 24 | } 25 | function error(message) { 26 | log({ message, type: 'ERROR' }); 27 | } 28 | module.exports = { 29 | info, 30 | warn, 31 | error 32 | }; 33 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/test/__test__.js: -------------------------------------------------------------------------------- 1 | const expect = require('chai').expect; 2 | 3 | describe('lib/config.js', () => { 4 | const config = require('../lib/config'); 5 | describe('config', () => { 6 | it('imgcook config', async () => { 7 | // const result = await config('', {}); 8 | // expect(result).to.be.a('string'); 9 | }); 10 | 11 | it('imgcook config --set ', async () => { 12 | expect(await config('12', { set: 'dslId' })).to.be.a('string'); 13 | }); 14 | 15 | it('imgcook config --remove ', async () => { 16 | 17 | }); 18 | 19 | it('imgcook config --remove loader @imgcook/cli-loader-images', async () => { 20 | 21 | }); 22 | 23 | }); 24 | }); 25 | 26 | describe('lib/pull.js', () => { 27 | const pull = require('../lib/pull'); 28 | it('imgcook pull --path ', async () => { 29 | 30 | }); 31 | }); 32 | 33 | describe('lib/install.js', () => { 34 | const install = require('../lib/install'); 35 | it('imgcook install', async () => { 36 | 37 | }); 38 | }); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 imgcook 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. -------------------------------------------------------------------------------- /packages/@imgcook/cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@imgcook/cli", 3 | "version": "0.2.2", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha test/__test__.js" 8 | }, 9 | "bin": { 10 | "imgcook": "bin/imgcook.js" 11 | }, 12 | "keywords": [ 13 | "imgcook", 14 | "cli" 15 | ], 16 | "author": "gindis", 17 | "license": "ISC", 18 | "dependencies": { 19 | "@imgcook/cli-utils": "^0.2.1", 20 | "chalk": "^2.4.2", 21 | "commander": "^2.19.0", 22 | "fs-extra": "^7.0.1", 23 | "inquirer": "^6.2.2", 24 | "minimist": "^1.2.0", 25 | "moment": "^2.24.0", 26 | "ora": "^3.4.0", 27 | "request": "^2.88.0", 28 | "semver": "^6.0.0" 29 | }, 30 | "engines": { 31 | "node": ">=8.9" 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "git+https://github.com/imgcook/imgcook-cli.git" 36 | }, 37 | "bugs": { 38 | "url": "https://github.com/imgcook/imgcook-cli/issues" 39 | }, 40 | "homepage": "https://github.com/imgcook/imgcook-cli#readme", 41 | "publishConfig": { 42 | "access": "public" 43 | }, 44 | "devDependencies": { 45 | "chai": "^4.2.0" 46 | }, 47 | "gitHead": "27bbc51c6df7d11fa6588e33c839dd29f50b7763" 48 | } 49 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/install.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk'); 2 | const fse = require('fs-extra'); 3 | const { cliConfig, installPlugin } = require('./helper'); 4 | const logger = require('./logger'); 5 | 6 | const install = async (value, option) => { 7 | let configData = {}; 8 | const imgcookModulesPath = cliConfig.imgcookModules; 9 | if (fse.existsSync(cliConfig.configFile)) { 10 | configData = await fse.readJson(cliConfig.configFile); 11 | } 12 | 13 | if (!fse.existsSync(`${imgcookModulesPath}`)) { 14 | fse.mkdirSync(`${imgcookModulesPath}`); 15 | } 16 | 17 | // install generator 18 | if (value === 'generator') { 19 | const generator = configData.generator; 20 | installPlugin(generator, imgcookModulesPath); 21 | } 22 | 23 | // install plugin 24 | if (value === 'plugin') { 25 | const plugin = configData.plugin; 26 | installPlugin(plugin, imgcookModulesPath); 27 | } 28 | 29 | // install generator and plugin 30 | if (value !== 'generator' && value !== 'plugin') { 31 | if (typeof option.name === 'function' && value === undefined) { 32 | const generator = configData.generator; 33 | let plugin = configData.plugin; 34 | if (!plugin) { 35 | console.log('No plugins install'); 36 | return; 37 | } 38 | plugin = plugin.concat(generator); 39 | installPlugin(plugin, imgcookModulesPath); 40 | } else { 41 | installPlugin([value], imgcookModulesPath); 42 | } 43 | } 44 | }; 45 | 46 | module.exports = (...args) => { 47 | return install(...args).catch(err => { 48 | logger.error(err); 49 | }); 50 | }; 51 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/init.js: -------------------------------------------------------------------------------- 1 | const ora = require('ora'); 2 | const path = require('path'); 3 | const chalk = require('chalk'); 4 | const fse = require('fs-extra'); 5 | const cwd = process.cwd(); 6 | const logger = require('./logger'); 7 | const { cliConfig } = require('./helper'); 8 | const imgcookModulesPath = cliConfig.imgcookModules; 9 | 10 | const init = async (value, option) => { 11 | let name = value; 12 | let data; 13 | let configData = {}; 14 | if (typeof name !== 'string') { 15 | name = 'imgcook_demo'; 16 | } 17 | // Check config file 18 | if (fse.existsSync(cliConfig.configFile)) { 19 | configData = await fse.readJson(cliConfig.configFile); 20 | } else { 21 | // Set if the configuration is empty 22 | require('./config')('set', {}); 23 | } 24 | try { 25 | const folderPath = path.join(cwd, name); 26 | const generator = configData.generator || []; 27 | if (generator.length > 0) { 28 | for (const generatorItem of generator) { 29 | const generatorItemPath = `${imgcookModulesPath}/node_modules/${generatorItem}`; 30 | data = await require(generatorItemPath)({ 31 | data, 32 | filePath: folderPath, 33 | config: configData, 34 | cmd: { 35 | value, 36 | ...option 37 | }, 38 | folderPath, 39 | name, 40 | }); 41 | } 42 | } else { 43 | console.log(chalk.red('No「Generator」plugin configured.')) 44 | } 45 | } catch (error) { 46 | logger.error(error); 47 | } 48 | }; 49 | 50 | module.exports = (...args) => { 51 | return init(...args).catch(err => { 52 | logger.error(err); 53 | }); 54 | }; 55 | -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # imgcook-cli 2 | 3 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) 4 | [![GitHub tag](https://img.shields.io/github/tag/imgcook/imgcook-cli.svg)]() 5 | [![Build Status](https://travis-ci.org/imgcook/imgcook-cli.svg?branch=master)](https://travis-ci.org/imgcook/imgcook-cli) 6 | [![npm dm](https://img.shields.io/npm/dm/@imgcook/cli)](https://www.npmjs.com/package/@imgcook/cli) 7 | [![GitHub repo size](https://img.shields.io/github/repo-size/imgcook/imgcook-cli)]() 8 | 9 | ## 概述 10 | 11 | imgcook-cli 可以结合 Plugin 的能力一键将 imgcook 平台生成的代码产物放置到你的本地项目工程里,无缝融合到你的研发流程,如果你有对 imgcook 生成代码的产物有加工需求(比如自动上传图片到自己的图床、文件目录转换等),imgcook-cli 是你非常好的选择。 12 | 13 | ## 安装 14 | > imgcook-cli 安装依赖 Node.js 和 NPM,建议使用 Node.js 版本 9.x 15 | 16 | 17 | ```shell 18 | # npm 19 | npm install -g @imgcook/cli 20 | # yarn 21 | yarn global add @imgcook/cli 22 | ``` 23 | 24 | ## 使用 25 | 26 | ### 常用指令 27 | 28 | #### imgcook config 29 | > 用户设置配置,默认初始化生成官方配置 30 | 31 | 32 | ```shell 33 | # 设置配置 34 | imgcook config set 35 | 36 | # 查看配置 37 | imgcook config ls 38 | 39 | # 直接打开配置文件编辑 40 | imgcook config edit 41 | ``` 42 | 43 | > DSL 配置:
44 | > React D2C Schema:41
45 | > Vue 开发规范:29
46 | > 微信小程序开发规范:21
47 | > React 开发规范:12
48 | > H5 标准开发规范:5
49 | > Rax 标准开发规范:1
50 | >
51 | > accessId 获取:打开官网 https://www.imgcook.com 右上角头像 -> 个人页面 -> 左上方 Icon 52 | >
53 | 54 | 55 | #### imgcook pull 56 | > 拉取模块代码 57 | 58 | 59 | ```shell 60 | # 拉取某个模块代码到本地路径 61 | imgcook pull --path 62 | # 例子 63 | imgcook pull 17108 --path mod 64 | ``` 65 | 66 | #### imgcook install 67 | > 安装 imgcook-cli 所需的 Plugin  68 | 69 | 70 | ```shell 71 | # 默认安装全部配置过的 Plugin 72 | imgcook install 73 | 74 | # 安装指定的 Plugin 75 | imgcook install plugin --name 76 | 77 | # 例子 78 | imgcook install plugin --name @imgcook/plugin-images 79 | ``` 80 | 81 | ### 选项 82 | 83 | 84 | #### imgcook --version 85 | > 显示版本信息 86 | 87 | 88 | ```shell 89 | imgcook --version 90 | imgcook -v 91 | ``` 92 | 93 | #### imgcook --help 94 | > 显示指令使用帮助 95 | 96 | 97 | ```shell 98 | imgcook --help 99 | imgcook -h 100 | ``` 101 | 102 | ## License 103 | [MIT](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) -------------------------------------------------------------------------------- /packages/@imgcook/cli/README.md: -------------------------------------------------------------------------------- 1 | # imgcook-cli 2 | 3 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) 4 | [![GitHub tag](https://img.shields.io/github/tag/imgcook/imgcook-cli.svg)]() 5 | [![Build Status](https://travis-ci.org/imgcook/imgcook-cli.svg?branch=master)](https://travis-ci.org/imgcook/imgcook-cli) 6 | 7 | 8 | imgcook-cli can combine the capabilities of Plugin to place the code products generated by the imgcook platform into your local project project, and seamlessly integrate into your development process. Upload pictures to your own bed, file directory conversion, etc.), imgcook-cli is a very good choice for you. 9 | 10 | ## Getting Started 11 | ## Install 12 | > The imgcook-cli installation depends on Node.js and NPM. It is recommended to use Node.js version 9.x 13 | 14 | 15 | ```shell 16 | # npm 17 | npm install -g @imgcook/cli 18 | # yarn 19 | yarn global add @imgcook/cli 20 | ``` 21 | 22 | ## Use 23 | 24 | 25 | ### Common command 26 | 27 | #### imgcook config 28 | > User settings configuration, default initialization generates official configuration 29 | 30 | 31 | ```shell 32 | # Setting config 33 | imgcook config set 34 | 35 | # View config 36 | imgcook config ls 37 | 38 | # Open configuration file directly 39 | imgcook config edit 40 | ``` 41 | 42 | > DSL config: 43 | > React D2C Schema:41 44 | > Vue 开发规范:29 45 | > 微信小程序开发规范:21 46 | > React 开发规范:12 47 | > H5 标准开发规范:5 48 | > Rax 标准开发规范:1 49 | > 50 | > Get accessId :Official website top right corner avatar -> Personal page -> Top left Icon 51 | > 52 | 53 | #### imgcook pull 54 | > Pull module code 55 | 56 | 57 | ```shell 58 | # Pull a module code to a local path 59 | imgcook pull --path 60 | # Example 61 | imgcook pull 17108 --path mod 62 | ``` 63 | 64 | #### imgcook install 65 | > Plugins required to install imgcook-cli 66 | 67 | 68 | ```shell 69 | # Install all configured plugins by default 70 | imgcook install 71 | 72 | # Install the specified plugin 73 | imgcook install plugin --name 74 | 75 | # Example 76 | imgcook install plugin --name @imgcook/plugin-images 77 | ``` 78 | 79 | ### Options 80 | 81 | #### imgcook --version 82 | > Display version information 83 | 84 | 85 | ```shell 86 | imgcook --version 87 | imgcook -v 88 | ``` 89 | 90 | #### imgcook --help 91 | > Show command usage help 92 | 93 | 94 | ```shell 95 | imgcook --help 96 | imgcook -h 97 | ``` 98 | 99 | ## License 100 | [MIT](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # imgcook-cli 2 | 3 | [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) 4 | [![GitHub tag](https://img.shields.io/github/tag/imgcook/imgcook-cli.svg)]() 5 | [![Build Status](https://travis-ci.org/imgcook/imgcook-cli.svg?branch=master)](https://travis-ci.org/imgcook/imgcook-cli) 6 | [![npm dm](https://img.shields.io/npm/dm/@imgcook/cli)](https://www.npmjs.com/package/@imgcook/cli) 7 | [![GitHub repo size](https://img.shields.io/github/repo-size/imgcook/imgcook-cli)]() 8 | 9 | 10 | imgcook-cli can combine the capabilities of Plugin to place the code products generated by the imgcook platform into your local project project, and seamlessly integrate into your development process. Upload pictures to your own bed, file directory conversion, etc.), imgcook-cli is a very good choice for you. 11 | 12 | ## Getting Started 13 | ## Install 14 | > The imgcook-cli installation depends on Node.js and NPM. It is recommended to use Node.js version 9.x 15 | 16 | 17 | ```shell 18 | # npm 19 | npm install -g @imgcook/cli 20 | # yarn 21 | yarn global add @imgcook/cli 22 | ``` 23 | 24 | ## Use 25 | 26 | 27 | ### Common command 28 | 29 | #### imgcook config 30 | > User settings configuration, default initialization generates official configuration 31 | 32 | 33 | ```shell 34 | # Setting config 35 | imgcook config set 36 | 37 | # View config 38 | imgcook config ls 39 | 40 | # Open configuration file directly 41 | imgcook config edit 42 | ``` 43 | 44 | > DSL config: 45 | > React D2C Schema:41 46 | > Vue 开发规范:29 47 | > 微信小程序开发规范:21 48 | > React 开发规范:12 49 | > H5 标准开发规范:5 50 | > Rax 标准开发规范:1 51 | > 52 | > Get accessId :Official website top right corner avatar -> Personal page -> Top left Icon 53 | > 54 | 55 | 56 | #### imgcook pull 57 | > Pull module code 58 | 59 | 60 | ```shell 61 | # Pull a module code to a local path 62 | imgcook pull --path 63 | # Example 64 | imgcook pull 17108 --path mod 65 | ``` 66 | 67 | #### imgcook install 68 | > Plugins required to install imgcook-cli 69 | 70 | 71 | ```shell 72 | # Install all configured plugins by default 73 | imgcook install 74 | 75 | # Install the specified plugin 76 | imgcook install plugin --name 77 | 78 | # Example 79 | imgcook install plugin --name @imgcook/plugin-images 80 | ``` 81 | 82 | ### Options 83 | 84 | #### imgcook --version 85 | > Display version information 86 | 87 | 88 | ```shell 89 | imgcook --version 90 | imgcook -v 91 | ``` 92 | 93 | #### imgcook --help 94 | > Show command usage help 95 | 96 | 97 | ```shell 98 | imgcook --help 99 | imgcook -h 100 | ``` 101 | 102 | ## License 103 | [MIT](https://github.com/imgcook/imgcook-cli/blob/master/LICENSE) -------------------------------------------------------------------------------- /packages/@imgcook/cli/bin/imgcook.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const semver = require('semver'); 3 | const chalk = require('chalk'); 4 | 5 | // Review Node Version 6 | if (!semver.gte(process.version, '9.0.0')) { 7 | console.log( 8 | chalk.red( 9 | `你使用的node版本${process.version}, ` + 10 | 'imgcook-cli 依赖 node 9.x 或以上版本,请升级本地的 node 环境\n' 11 | ) 12 | ); 13 | return; 14 | } 15 | 16 | const pkg = require('../package.json'); 17 | const program = require('commander'); 18 | const minimist = require('minimist'); 19 | 20 | // Version 21 | program.version(pkg.version, '-v, --version').usage(' [options]'); 22 | 23 | // Config 24 | // node bin/imgcook.js config 25 | program 26 | .command('config [value]') 27 | .description('Inspect and modify the imgcook config') 28 | .option('--get ', 'Get value from option') 29 | .option('--set ', 'Set option value') 30 | .option('--json', 'Outputs JSON result only') 31 | .option('--file ','Input file Path') 32 | .allowUnknownOption() 33 | .action(async (value, cmd) => { 34 | require('../lib/config')(value, minimist(process.argv.slice(3))); 35 | }); 36 | 37 | program 38 | .command('install [value]') 39 | .description('Install plugin') 40 | .option('-n, --name ', 'plugin name') 41 | .allowUnknownOption() 42 | .action(async (value, cmd) => { 43 | require('../lib/install')(value, cmd); 44 | }); 45 | 46 | // pull module code 47 | // node bin/imgcook.js pull 1 --path ./test 48 | program 49 | .command('pull ') 50 | .description('Pull module code from imgcook') 51 | .option('-p, --path ', 'Absolute or relative path') 52 | .option( 53 | '-a, --app', 54 | 'Pull module into `mod` folder while your are in imgcook app project' 55 | ) 56 | .option( 57 | '-o, --output ', 58 | 'The output type, available values are: source and json', 59 | 'source' 60 | ) 61 | .allowUnknownOption() 62 | .action(async (value, cmd) => { 63 | require('../lib/pull')(value, cmd); 64 | }); 65 | 66 | program 67 | .command('init') 68 | .description('generate a new project from a template') 69 | .allowUnknownOption() 70 | .action(async (value, cmd) => { 71 | require('../lib/init')(value, cmd); 72 | }); 73 | 74 | program 75 | .command('update') 76 | .description('update imgcook cli') 77 | .allowUnknownOption() 78 | .action(async (value, cmd) => { 79 | require('../lib/update')(value, cmd); 80 | }); 81 | 82 | // Output help information on unknown commands 83 | program.arguments('').action(cmd => { 84 | program.outputHelp(); 85 | console.log(` ` + chalk.red(`Unknown command ${chalk.yellow(cmd)}.`)); 86 | console.log(); 87 | }); 88 | 89 | // Add some useful info on help 90 | program.on('--help', () => { 91 | console.log(); 92 | console.log( 93 | ` Run ${chalk.cyan( 94 | `imgcook --help` 95 | )} for detailed usage of given command.` 96 | ); 97 | console.log(); 98 | }); 99 | 100 | program.parse(process.argv); 101 | 102 | // not cmd output help 103 | if (!process.argv.slice(2).length) { 104 | program.outputHelp(); 105 | } 106 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/pull.js: -------------------------------------------------------------------------------- 1 | const ora = require('ora'); 2 | const path = require('path'); 3 | const chalk = require('chalk'); 4 | const fs = require('fs'); 5 | const spinner = ora(); 6 | const cwd = process.cwd(); 7 | const logger = require('./logger'); 8 | 9 | const { 10 | ajaxPost, 11 | getPlugin, 12 | cliConfig 13 | // installPluginSync 14 | } = require('./helper'); 15 | 16 | const pull = async (value, option) => { 17 | let filePath = cwd; 18 | option.path = option.path || value; 19 | filePath = path.isAbsolute(option.path) 20 | ? option.path 21 | : path.join(cwd, option.path); 22 | 23 | if (!fs.existsSync(cliConfig.configFile)) { 24 | console.log( 25 | 'Please set the configuration first,Execute `imgcook config set`' 26 | ); 27 | const inquirer = require('inquirer'); 28 | inquirer 29 | .prompt({ 30 | type: 'confirm', 31 | message: 'Whether to start setting?', 32 | name: 'set' 33 | }) 34 | .then(async answers => { 35 | if (answers.set) { 36 | require('./config')('set', {}); 37 | } 38 | }); 39 | return; 40 | } 41 | const url = cliConfig.module.url; 42 | const imgcookModulesPath = cliConfig.imgcookModules; 43 | 44 | let configData = fs.readFileSync(cliConfig.configFile, 'UTF-8'); 45 | configData = JSON.parse(configData); 46 | const repoData = await ajaxPost(url, { 47 | data: { 48 | dsl_id: configData.dslId, 49 | access_id: configData.accessId, 50 | mod_id: value 51 | } 52 | }); 53 | if (repoData.data && repoData.data.code) { 54 | let data = repoData.data; 55 | 56 | // fs.writeFile( 57 | // `${filePath}/demo.json`, 58 | // JSON.stringify(data, null, 2), 59 | // 'utf8', 60 | // () => {} 61 | // ); 62 | const moduleData = data.moduleData; 63 | let errorData; 64 | if (!moduleData) { 65 | return spinner.fail(`failed to parse module data, moduleData not found.`); 66 | } 67 | if (option.output === 'json') { 68 | process.stdout.write(moduleData.jsonv2); 69 | return; 70 | } 71 | spinner.start(`「${moduleData.name}」Downloading module...`); 72 | 73 | try { 74 | // execute plugin 75 | let plugin = configData.plugin || []; 76 | 77 | // 拉取配置 78 | const pluginData = await getPlugin({ 79 | config: configData, 80 | id: value, 81 | type: 'module' 82 | }); 83 | // if (pluginData && pluginData.plugin && pluginData.plugin.length > 0) { 84 | // plugin = pluginData.plugin; 85 | // let needInstallPlugin = []; 86 | // try { 87 | // const files = fs.readdirSync(`${imgcookModulesPath}/node_modules/@imgcook`); 88 | // for (const item of plugin) { 89 | // if (files.indexOf(item.split('/')[1]) === -1) { 90 | // needInstallPlugin.push(item); 91 | // } 92 | // } 93 | // } catch (error) { 94 | // needInstallPlugin = plugin; 95 | // } 96 | // if (needInstallPlugin.length > 0) { 97 | // await installPluginSync(needInstallPlugin, imgcookModulesPath); 98 | // } 99 | // } 100 | if (plugin.length > 0) { 101 | let config = { 102 | ...configData, 103 | value 104 | }; 105 | let rdata = { 106 | data, 107 | filePath, 108 | config 109 | }; 110 | for (const pluginItem of plugin) { 111 | const pluginItemPath = `${imgcookModulesPath}/node_modules/${pluginItem}`; 112 | rdata = await require(pluginItemPath)(rdata); 113 | } 114 | } 115 | } catch (error) { 116 | errorData = error; 117 | } 118 | 119 | // delete images/.imgrc 120 | const imgrcPath = `${filePath}/images/.imgrc`; 121 | if (fs.existsSync(imgrcPath)) { 122 | fs.unlinkSync(imgrcPath); 123 | } 124 | 125 | let isSuccess = true; 126 | if (!errorData) { 127 | if (!data.errorList || data.errorList.length === 0) { 128 | isSuccess = true; 129 | } else { 130 | logger.error(data.errorList); 131 | isSuccess = false; 132 | } 133 | } else { 134 | logger.error(errorData); 135 | isSuccess = false; 136 | } 137 | 138 | if (!moduleData && repoData.errorMsg) { 139 | spinner.fail(repoData.errorMsg); 140 | return; 141 | } 142 | 143 | if (isSuccess) { 144 | spinner.succeed(`「${moduleData.name}」Download completed.`); 145 | } else { 146 | spinner.fail(`「${moduleData.name}」Download failed.`); 147 | } 148 | } 149 | if (!repoData.success || repoData.success === 'false') { 150 | if (repoData.code && repoData.code.message) { 151 | spinner.fail(`${repoData.code.message}`); 152 | } else if (typeof repoData === 'string') { 153 | spinner.fail('Export code exception.'); 154 | } else { 155 | spinner.fail(`${repoData.errorMsg}`); 156 | } 157 | } 158 | }; 159 | 160 | module.exports = (...args) => { 161 | return pull(...args).catch(err => { 162 | logger.error(err); 163 | }); 164 | }; 165 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/helper.js: -------------------------------------------------------------------------------- 1 | const request = require('request'); 2 | const fs = require('fs'); 3 | const chalk = require('chalk'); 4 | const ora = require('ora'); 5 | const childProcess = require('child_process'); 6 | 7 | const spinner = ora(); 8 | const domain = 'https://www.imgcook.com'; 9 | 10 | const { homedir } = require('@imgcook/cli-utils'); 11 | const userhome = homedir(); 12 | const imgcookConfigPath = `${userhome}/.imgcook`; 13 | const imgcookRc = `${imgcookConfigPath}/.imgcookrc`; 14 | const imgcookModules = `${imgcookConfigPath}/imgcook_modules`; 15 | const cliConfig = { 16 | path: imgcookConfigPath, 17 | configFile: imgcookRc, 18 | imgcookModules, 19 | module: { 20 | url: `${domain}/api-open/code-acquire` 21 | } 22 | }; 23 | 24 | // Post request 25 | const ajaxPost = (url, param) => { 26 | return new Promise(resolve => { 27 | request.post( 28 | url, 29 | { 30 | form: param.data, 31 | json: true 32 | }, 33 | function(err, res, body) { 34 | if (err) { 35 | console.log(chalk.red(JSON.stringify(err))); 36 | } 37 | resolve(body); 38 | } 39 | ); 40 | }); 41 | }; 42 | 43 | const ajaxGet = (url, param) => { 44 | return new Promise(resolve => { 45 | request(url, function(err, res, body) { 46 | if (err) { 47 | console.log(chalk.red(JSON.stringify(err))); 48 | } 49 | resolve(body); 50 | }); 51 | }); 52 | }; 53 | 54 | // write file 55 | const writeFile = (content, filePath, code) => { 56 | return new Promise((resolve, reject) => { 57 | fs.writeFile( 58 | filePath, 59 | content, 60 | code, 61 | data => { 62 | resolve({ 63 | ...data, 64 | filePath 65 | }); 66 | }, 67 | err => { 68 | reject({ 69 | ...err, 70 | filePath 71 | }); 72 | } 73 | ); 74 | }); 75 | }; 76 | 77 | const rmFile = file => { 78 | childProcess.execSync(`rm -rf ${file}`); 79 | }; 80 | 81 | // eg:hello-world => helloWorld 82 | function toHump(str) { 83 | return str.replace(/-(\w)/g, (_, c) => (c ? c.toUpperCase() : '')); 84 | } 85 | 86 | function cleanArgs(cmd) { 87 | const args = {}; 88 | cmd.options.forEach(o => { 89 | const key = toHump(o.long.replace(/^--/, '')); 90 | if (typeof cmd[key] !== 'function' && typeof cmd[key] !== 'undefined') { 91 | args[key] = cmd[key]; 92 | } 93 | }); 94 | return args; 95 | } 96 | 97 | const installPlugin = (plugin, dirname) => { 98 | if (plugin.length > 0) { 99 | try { 100 | for (const item of plugin) { 101 | spinner.start(`install...`); 102 | const cmd = `npm install --prefix ${dirname} ${item}`; 103 | childProcess.exec(cmd, () => { 104 | spinner.succeed(`install ${item} complete.`); 105 | }); 106 | } 107 | } catch (error) { 108 | spinner.fail(`install ${error} fail.`); 109 | } 110 | } 111 | }; 112 | 113 | const installPluginSync = async (plugin, dirname) => { 114 | if (plugin.length > 0) { 115 | try { 116 | for (const item of plugin) { 117 | const cmd = `npm install --prefix ${dirname} ${item}`; 118 | childProcess.execSync(cmd); 119 | } 120 | } catch (error) { 121 | // console.log(error); 122 | } 123 | } 124 | }; 125 | 126 | const get = (target, path) => { 127 | const fields = path.split('.'); 128 | let obj = target; 129 | const l = fields.length; 130 | for (let i = 0; i < l - 1; i++) { 131 | const key = fields[i]; 132 | if (!obj[key]) { 133 | return undefined; 134 | } 135 | obj = obj[key]; 136 | } 137 | return obj[fields[l - 1]]; 138 | }; 139 | 140 | const set = function(option) { 141 | const { target, path, value, type } = option; 142 | const fields = path.split('.'); 143 | let obj = target; 144 | const l = fields.length; 145 | for (let i = 0; i < l - 1; i++) { 146 | const key = fields[i]; 147 | if (!obj[key]) { 148 | obj[key] = {}; 149 | } 150 | obj = obj[key]; 151 | } 152 | if (fields[l - 1] === 'plugin' || fields[l - 1] === 'generator') { 153 | if (obj[fields[l - 1]].length > 0) { 154 | for (const item of obj[fields[l - 1]]) { 155 | if (item !== value) { 156 | obj[fields[l - 1]].push(value); 157 | } 158 | } 159 | } else { 160 | obj[fields[l - 1]].push(value); 161 | } 162 | } else { 163 | obj[fields[l - 1]] = value; 164 | } 165 | }; 166 | 167 | const remove = function(option) { 168 | const { target, path, value, type } = option; 169 | const fields = path.split('.'); 170 | let obj = target; 171 | const l = fields.length; 172 | for (let i = 0; i < l - 1; i++) { 173 | const key = fields[i]; 174 | if (!obj[key]) { 175 | obj[key] = {}; 176 | } 177 | obj = obj[key]; 178 | } 179 | const key = fields[l - 1]; 180 | if (key === 'plugin' || key === 'generator') { 181 | target[key] = removeItem(target[key], value); 182 | } else { 183 | target[key] = ''; 184 | } 185 | 186 | return target; 187 | }; 188 | 189 | const removeItem = (arr, key) => { 190 | arr.splice( 191 | arr.findIndex(item => item === key), 192 | 1 193 | ); 194 | return arr; 195 | }; 196 | 197 | const syncConfig = async option => { 198 | const { config } = option; 199 | const apiUrl = `${domain}/api-open/v2/getTeamConfig?access_id=${config.accessId}`; 200 | const moduleConfigData = await ajaxGet(apiUrl); 201 | const moduleConfig = JSON.parse(moduleConfigData) || {}; 202 | const tenantConfig = moduleConfig.data.tenantConfig; 203 | const pluginConfig = 204 | (tenantConfig.pluginConfig && JSON.parse(tenantConfig.pluginConfig)) || {}; 205 | return { 206 | pluginConfig 207 | }; 208 | }; 209 | 210 | const getTokenInfo = async option => { 211 | const { config } = option; 212 | const apiUrl = `${domain}/api-open/v2/getTokenInfo?access_id=${config.accessId}`; 213 | const tokenInfo = await ajaxGet(apiUrl); 214 | const tokenInfoJson = JSON.parse(tokenInfo) || {}; 215 | if (tokenInfoJson.status) { 216 | return { 217 | ...tokenInfoJson.data 218 | }; 219 | } else { 220 | return { 221 | ...tokenInfoJson 222 | }; 223 | } 224 | }; 225 | 226 | const getTeamInfo = async option => { 227 | const { config, id, type } = option; 228 | if (!id) { 229 | console.error(chalk.red('lack id,execution `imgcook config sync --id ')); 230 | return {}; 231 | } 232 | const apiUrl = `${domain}/api-open/v2/getTeamInfo?access_id=${config.accessId}&id=${id}&type=${type}`; 233 | const moduleConfigData = await ajaxGet(apiUrl); 234 | const moduleConfig = JSON.parse(moduleConfigData) || {}; 235 | const tenantConfig = moduleConfig.data.tenantConfig || {}; 236 | const pluginConfig = 237 | (tenantConfig.pluginConfig && JSON.parse(tenantConfig.pluginConfig)) || {}; 238 | return { 239 | pluginConfig 240 | }; 241 | }; 242 | 243 | const getPlugin = async option => { 244 | const tokenInfo = await getTokenInfo(option); 245 | let plugin = []; 246 | let generator = []; 247 | let pluginData = []; 248 | let generatorData = []; 249 | let teamConfig = {}; 250 | if (tokenInfo.customerType === 'app') { 251 | teamConfig = await syncConfig(option); 252 | } else if (tokenInfo.customerType === 'user') { 253 | teamConfig = await getTeamInfo(option); 254 | } 255 | const pluginConfig = teamConfig.pluginConfig || {}; 256 | pluginData = pluginConfig.list || []; 257 | generatorData = pluginConfig.scaffold || []; 258 | 259 | for (const item of generatorData) { 260 | generator.push(item.name); 261 | } 262 | for (const item of pluginData) { 263 | plugin.push(item.name); 264 | } 265 | 266 | return { 267 | plugin, 268 | generator 269 | }; 270 | }; 271 | 272 | module.exports = { 273 | ajaxPost, 274 | ajaxGet, 275 | writeFile, 276 | rmFile, 277 | cliConfig, 278 | toHump, 279 | cleanArgs, 280 | installPlugin, 281 | installPluginSync, 282 | get, 283 | set, 284 | remove, 285 | removeItem, 286 | syncConfig, 287 | getTokenInfo, 288 | getPlugin 289 | }; 290 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/lib/config.js: -------------------------------------------------------------------------------- 1 | const { dsl } = require('./constant'); 2 | const logger = require('./logger'); 3 | 4 | let curDslId = '12'; 5 | let promptConfig = [ 6 | { 7 | type: 'input', 8 | name: 'accessId', 9 | message: 'Access ID', 10 | validate: val => { 11 | if (val.match(/\w{16}/g)) { 12 | return true; 13 | } 14 | return '请输入 16 位的 Access ID, 打开 https://www.imgcook.com 移到右上角头像点击菜单里个人页面,点击左上方用户昵称查看'; 15 | } 16 | }, 17 | { 18 | type: 'list', 19 | name: 'dslId', 20 | message: 'DSL', 21 | choices: [ 22 | 'H5 标准开发规范', 23 | 'React 开发规范', 24 | 'Vue 开发规范', 25 | '支付宝小程序开发规范', 26 | 'Rax 标准开发规范', 27 | '微信小程序开发规范' 28 | ], 29 | default: '', 30 | filter: val => { 31 | for (const item of dsl) { 32 | if (item.name === val) { 33 | curDslId = item.id; 34 | } 35 | } 36 | return curDslId; 37 | } 38 | }, 39 | { 40 | type: 'checkbox', 41 | name: 'generator', 42 | message: 'Generator', 43 | default: [], 44 | choices: ['@imgcook/generator-react'] 45 | }, 46 | { 47 | type: 'checkbox', 48 | name: 'plugin', 49 | message: 'Plugin', 50 | default: ['@imgcook/plugin-images', '@imgcook/plugin-generate'], 51 | choices: ['@imgcook/plugin-images', '@imgcook/plugin-generate'] 52 | } 53 | ]; 54 | 55 | const fse = require('fs-extra'); 56 | const { 57 | cliConfig, 58 | installPlugin, 59 | remove, 60 | get, 61 | set, 62 | getPlugin 63 | } = require('./helper'); 64 | const inquirer = require('inquirer'); 65 | const chalk = require('chalk'); 66 | const ora = require('ora'); 67 | const childProcess = require('child_process'); 68 | const fs = require('fs'); 69 | 70 | const spinner = ora(); 71 | const initConfig = (promptConfig, config) => { 72 | config.accessId && (promptConfig[0].default = config.accessId); 73 | if (config.dslId) { 74 | curDslId = config.dslId; 75 | for (const item of dsl) { 76 | if (item.id === curDslId) { 77 | promptConfig[1].default = item.name; 78 | } 79 | } 80 | } 81 | if (config.generator) { 82 | promptConfig[2].default = config.generator; 83 | } 84 | if (config.plugin) { 85 | promptConfig[3].default = config.plugin; 86 | promptConfig[3].default = config.plugin; 87 | } 88 | return promptConfig; 89 | }; 90 | 91 | const config = async (value, option) => { 92 | let configData = {}; 93 | const imgcookModulesPath = cliConfig.imgcookModules; 94 | 95 | if (!fse.existsSync(`${cliConfig.path}`)) { 96 | fse.mkdirSync(`${cliConfig.path}`); 97 | } 98 | // Check if a configuration file exists 99 | if (fse.existsSync(cliConfig.configFile )|| option.file) { 100 | try { 101 | configData = await fse.readJson(option.file ? option.file : cliConfig.configFile); 102 | } catch (error) { 103 | configData = {}; 104 | } 105 | } else if (!option.set && !option.get && !option.remove && !option.file) { 106 | // If the configuration is empty then go to set 107 | value = 'set'; 108 | } 109 | 110 | if (!fse.existsSync(`${imgcookModulesPath}`)) { 111 | fse.mkdirSync(`${imgcookModulesPath}`); 112 | } 113 | 114 | // edit 115 | if (value === 'edit') { 116 | childProcess.exec(`open ${cliConfig.configFile}`); 117 | return; 118 | } 119 | 120 | if (value === 'sync') { 121 | spinner.start(`Synching...`); 122 | const pluginData = await getPlugin({ 123 | config: configData, 124 | id: option.id, 125 | type: 'module' 126 | }); 127 | const { generator, plugin } = pluginData; 128 | for (const item of generator) { 129 | configData.generator = []; 130 | set({ 131 | target: configData, 132 | path: 'generator', 133 | value: item, 134 | type: 'generator' 135 | }); 136 | } 137 | for (const item of plugin) { 138 | configData.plugin = []; 139 | set({ 140 | target: configData, 141 | path: 'plugin', 142 | value: item, 143 | type: 'plugin' 144 | }); 145 | } 146 | await fse.writeFile( 147 | cliConfig.configFile, 148 | JSON.stringify(configData, null, 2), 149 | 'utf8' 150 | ); 151 | spinner.succeed(`Complete.`); 152 | return; 153 | } 154 | 155 | // No instruction exists 156 | if (value !== 'set' && !option.set && !option.get && !option.remove && !option.file) { 157 | const result = JSON.stringify(configData, null, 2); 158 | console.log(result); 159 | return result; 160 | } 161 | 162 | // setting 163 | if (value === 'set') { 164 | promptConfig = initConfig(promptConfig, configData); 165 | inquirer.prompt(promptConfig).then(async answers => { 166 | if (!fse.existsSync(`${cliConfig.path}`)) { 167 | fse.mkdirSync(`${cliConfig.path}`); 168 | } 169 | if (configData.uploadUrl) { 170 | answers.uploadUrl = configData.uploadUrl; 171 | } else { 172 | answers.uploadUrl = ''; 173 | } 174 | await fse.writeFile( 175 | cliConfig.configFile, 176 | JSON.stringify(answers, null, 2), 177 | 'utf8' 178 | ); 179 | const generator = answers.generator || []; 180 | let plugin = answers.plugin || []; 181 | plugin = plugin.concat(generator); 182 | let needInstallPlugin = []; 183 | let noInstallPlugin = []; 184 | try { 185 | const files = fs.readdirSync(`${imgcookModulesPath}/node_modules/@imgcook`); 186 | for (const item of plugin) { 187 | if (files.indexOf(item.split('/')[1]) === -1) { 188 | needInstallPlugin.push(item); 189 | } else { 190 | noInstallPlugin.push(item); 191 | } 192 | } 193 | } catch (error) { 194 | needInstallPlugin = plugin; 195 | } 196 | if (noInstallPlugin.length > 0) { 197 | inquirer.prompt( 198 | { 199 | type: "confirm", 200 | message: "Reinstall all package?", 201 | default: false, 202 | name: "reinstall", 203 | prefix: "" 204 | } 205 | ).then(async answers => { 206 | if (answers.reinstall) { 207 | installPlugin(plugin, imgcookModulesPath); 208 | } else { 209 | installPlugin(needInstallPlugin, imgcookModulesPath); 210 | } 211 | }) 212 | } else { 213 | installPlugin(plugin, imgcookModulesPath); 214 | } 215 | }); 216 | } 217 | 218 | if (option.set && value) { 219 | if (!fse.existsSync(`${cliConfig.path}`)) { 220 | fse.mkdirSync(`${cliConfig.path}`); 221 | } 222 | set({ 223 | target: configData, 224 | path: option.set, 225 | value, 226 | type: option.set 227 | }); 228 | await fse.writeFile( 229 | cliConfig.configFile, 230 | JSON.stringify(configData, null, 2), 231 | 'utf8' 232 | ); 233 | if (option.set === 'generator' || option.set === 'plugin') { 234 | installPlugin([value], imgcookModulesPath); 235 | } 236 | const message = chalk.green(`Set up 「${value}」 success.`); 237 | // console.log(message); 238 | return message; 239 | } 240 | if (option.file) { 241 | await fse.writeFile( 242 | cliConfig.configFile, 243 | JSON.stringify(configData, null, 2), 244 | 'utf8' 245 | ); 246 | } 247 | if (option.remove) { 248 | remove({ 249 | target: configData, 250 | path: option.remove, 251 | value, 252 | type: option.remove 253 | }); 254 | await fse.writeFile( 255 | cliConfig.configFile, 256 | JSON.stringify(configData, null, 2), 257 | 'utf8' 258 | ); 259 | if (option.remove === 'generator' || option.remove === 'plugin') { 260 | try { 261 | childProcess.execSync( 262 | `cd ${imgcookModulesPath}/node_modules && rm -rf ${value}` 263 | ); 264 | } catch (error) { 265 | logger.error(error); 266 | } 267 | } 268 | console.log(chalk.green(`delete 「${value}」 success.`)); 269 | } 270 | if (option.get) { 271 | const value = get(configData, option.get); 272 | if (option.json) { 273 | console.log( 274 | JSON.stringify( 275 | { 276 | value 277 | }, 278 | null, 279 | 2 280 | ) 281 | ); 282 | } else { 283 | console.log(value); 284 | } 285 | } 286 | }; 287 | 288 | module.exports = (...args) => { 289 | return config(...args).catch(err => { 290 | logger.error(err); 291 | }); 292 | }; 293 | -------------------------------------------------------------------------------- /packages/@imgcook/cli-utils/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@imgcook/cli-utils", 3 | "version": "0.2.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "0.1.7", 9 | "license": "ISC", 10 | "dependencies": { 11 | "fs-extra": "^7.0.1", 12 | "request": "^2.88.0" 13 | } 14 | }, 15 | "node_modules/ajv": { 16 | "version": "6.12.6", 17 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 18 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 19 | "dependencies": { 20 | "fast-deep-equal": "^3.1.1", 21 | "fast-json-stable-stringify": "^2.0.0", 22 | "json-schema-traverse": "^0.4.1", 23 | "uri-js": "^4.2.2" 24 | }, 25 | "funding": { 26 | "type": "github", 27 | "url": "https://github.com/sponsors/epoberezkin" 28 | } 29 | }, 30 | "node_modules/asn1": { 31 | "version": "0.2.4", 32 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 33 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 34 | "dependencies": { 35 | "safer-buffer": "~2.1.0" 36 | } 37 | }, 38 | "node_modules/assert-plus": { 39 | "version": "1.0.0", 40 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 41 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 42 | "engines": { 43 | "node": ">=0.8" 44 | } 45 | }, 46 | "node_modules/asynckit": { 47 | "version": "0.4.0", 48 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 49 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 50 | }, 51 | "node_modules/aws-sign2": { 52 | "version": "0.7.0", 53 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 54 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 55 | "engines": { 56 | "node": "*" 57 | } 58 | }, 59 | "node_modules/aws4": { 60 | "version": "1.11.0", 61 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 62 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 63 | }, 64 | "node_modules/bcrypt-pbkdf": { 65 | "version": "1.0.2", 66 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 67 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 68 | "dependencies": { 69 | "tweetnacl": "^0.14.3" 70 | } 71 | }, 72 | "node_modules/caseless": { 73 | "version": "0.12.0", 74 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 75 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 76 | }, 77 | "node_modules/combined-stream": { 78 | "version": "1.0.8", 79 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 80 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 81 | "dependencies": { 82 | "delayed-stream": "~1.0.0" 83 | }, 84 | "engines": { 85 | "node": ">= 0.8" 86 | } 87 | }, 88 | "node_modules/core-util-is": { 89 | "version": "1.0.2", 90 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 91 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 92 | }, 93 | "node_modules/dashdash": { 94 | "version": "1.14.1", 95 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 96 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 97 | "dependencies": { 98 | "assert-plus": "^1.0.0" 99 | }, 100 | "engines": { 101 | "node": ">=0.10" 102 | } 103 | }, 104 | "node_modules/delayed-stream": { 105 | "version": "1.0.0", 106 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 107 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 108 | "engines": { 109 | "node": ">=0.4.0" 110 | } 111 | }, 112 | "node_modules/ecc-jsbn": { 113 | "version": "0.1.2", 114 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 115 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 116 | "dependencies": { 117 | "jsbn": "~0.1.0", 118 | "safer-buffer": "^2.1.0" 119 | } 120 | }, 121 | "node_modules/extend": { 122 | "version": "3.0.2", 123 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 124 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 125 | }, 126 | "node_modules/extsprintf": { 127 | "version": "1.3.0", 128 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 129 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 130 | "engines": [ 131 | "node >=0.6.0" 132 | ] 133 | }, 134 | "node_modules/fast-deep-equal": { 135 | "version": "3.1.3", 136 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 137 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 138 | }, 139 | "node_modules/fast-json-stable-stringify": { 140 | "version": "2.1.0", 141 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 142 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 143 | }, 144 | "node_modules/forever-agent": { 145 | "version": "0.6.1", 146 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 147 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 148 | "engines": { 149 | "node": "*" 150 | } 151 | }, 152 | "node_modules/form-data": { 153 | "version": "2.3.3", 154 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 155 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 156 | "dependencies": { 157 | "asynckit": "^0.4.0", 158 | "combined-stream": "^1.0.6", 159 | "mime-types": "^2.1.12" 160 | }, 161 | "engines": { 162 | "node": ">= 0.12" 163 | } 164 | }, 165 | "node_modules/fs-extra": { 166 | "version": "7.0.1", 167 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 168 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 169 | "dependencies": { 170 | "graceful-fs": "^4.1.2", 171 | "jsonfile": "^4.0.0", 172 | "universalify": "^0.1.0" 173 | }, 174 | "engines": { 175 | "node": ">=6 <7 || >=8" 176 | } 177 | }, 178 | "node_modules/getpass": { 179 | "version": "0.1.7", 180 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 181 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 182 | "dependencies": { 183 | "assert-plus": "^1.0.0" 184 | } 185 | }, 186 | "node_modules/graceful-fs": { 187 | "version": "4.2.8", 188 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 189 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 190 | }, 191 | "node_modules/har-schema": { 192 | "version": "2.0.0", 193 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 194 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 195 | "engines": { 196 | "node": ">=4" 197 | } 198 | }, 199 | "node_modules/har-validator": { 200 | "version": "5.1.5", 201 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 202 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 203 | "deprecated": "this library is no longer supported", 204 | "dependencies": { 205 | "ajv": "^6.12.3", 206 | "har-schema": "^2.0.0" 207 | }, 208 | "engines": { 209 | "node": ">=6" 210 | } 211 | }, 212 | "node_modules/http-signature": { 213 | "version": "1.2.0", 214 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 215 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 216 | "dependencies": { 217 | "assert-plus": "^1.0.0", 218 | "jsprim": "^1.2.2", 219 | "sshpk": "^1.7.0" 220 | }, 221 | "engines": { 222 | "node": ">=0.8", 223 | "npm": ">=1.3.7" 224 | } 225 | }, 226 | "node_modules/is-typedarray": { 227 | "version": "1.0.0", 228 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 229 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 230 | }, 231 | "node_modules/isstream": { 232 | "version": "0.1.2", 233 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 234 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 235 | }, 236 | "node_modules/jsbn": { 237 | "version": "0.1.1", 238 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 239 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 240 | }, 241 | "node_modules/json-schema": { 242 | "version": "0.2.3", 243 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 244 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 245 | }, 246 | "node_modules/json-schema-traverse": { 247 | "version": "0.4.1", 248 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 249 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 250 | }, 251 | "node_modules/json-stringify-safe": { 252 | "version": "5.0.1", 253 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 254 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 255 | }, 256 | "node_modules/jsonfile": { 257 | "version": "4.0.0", 258 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 259 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 260 | "optionalDependencies": { 261 | "graceful-fs": "^4.1.6" 262 | } 263 | }, 264 | "node_modules/jsprim": { 265 | "version": "1.4.1", 266 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 267 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 268 | "engines": [ 269 | "node >=0.6.0" 270 | ], 271 | "dependencies": { 272 | "assert-plus": "1.0.0", 273 | "extsprintf": "1.3.0", 274 | "json-schema": "0.2.3", 275 | "verror": "1.10.0" 276 | } 277 | }, 278 | "node_modules/mime-db": { 279 | "version": "1.49.0", 280 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 281 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", 282 | "engines": { 283 | "node": ">= 0.6" 284 | } 285 | }, 286 | "node_modules/mime-types": { 287 | "version": "2.1.32", 288 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 289 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 290 | "dependencies": { 291 | "mime-db": "1.49.0" 292 | }, 293 | "engines": { 294 | "node": ">= 0.6" 295 | } 296 | }, 297 | "node_modules/oauth-sign": { 298 | "version": "0.9.0", 299 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 300 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 301 | "engines": { 302 | "node": "*" 303 | } 304 | }, 305 | "node_modules/performance-now": { 306 | "version": "2.1.0", 307 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 308 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 309 | }, 310 | "node_modules/psl": { 311 | "version": "1.8.0", 312 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 313 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 314 | }, 315 | "node_modules/punycode": { 316 | "version": "2.1.1", 317 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 318 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 319 | "engines": { 320 | "node": ">=6" 321 | } 322 | }, 323 | "node_modules/qs": { 324 | "version": "6.5.2", 325 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 326 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 327 | "engines": { 328 | "node": ">=0.6" 329 | } 330 | }, 331 | "node_modules/request": { 332 | "version": "2.88.2", 333 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 334 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 335 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 336 | "dependencies": { 337 | "aws-sign2": "~0.7.0", 338 | "aws4": "^1.8.0", 339 | "caseless": "~0.12.0", 340 | "combined-stream": "~1.0.6", 341 | "extend": "~3.0.2", 342 | "forever-agent": "~0.6.1", 343 | "form-data": "~2.3.2", 344 | "har-validator": "~5.1.3", 345 | "http-signature": "~1.2.0", 346 | "is-typedarray": "~1.0.0", 347 | "isstream": "~0.1.2", 348 | "json-stringify-safe": "~5.0.1", 349 | "mime-types": "~2.1.19", 350 | "oauth-sign": "~0.9.0", 351 | "performance-now": "^2.1.0", 352 | "qs": "~6.5.2", 353 | "safe-buffer": "^5.1.2", 354 | "tough-cookie": "~2.5.0", 355 | "tunnel-agent": "^0.6.0", 356 | "uuid": "^3.3.2" 357 | }, 358 | "engines": { 359 | "node": ">= 6" 360 | } 361 | }, 362 | "node_modules/safe-buffer": { 363 | "version": "5.2.1", 364 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 365 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 366 | "funding": [ 367 | { 368 | "type": "github", 369 | "url": "https://github.com/sponsors/feross" 370 | }, 371 | { 372 | "type": "patreon", 373 | "url": "https://www.patreon.com/feross" 374 | }, 375 | { 376 | "type": "consulting", 377 | "url": "https://feross.org/support" 378 | } 379 | ] 380 | }, 381 | "node_modules/safer-buffer": { 382 | "version": "2.1.2", 383 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 384 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 385 | }, 386 | "node_modules/sshpk": { 387 | "version": "1.16.1", 388 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 389 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 390 | "dependencies": { 391 | "asn1": "~0.2.3", 392 | "assert-plus": "^1.0.0", 393 | "bcrypt-pbkdf": "^1.0.0", 394 | "dashdash": "^1.12.0", 395 | "ecc-jsbn": "~0.1.1", 396 | "getpass": "^0.1.1", 397 | "jsbn": "~0.1.0", 398 | "safer-buffer": "^2.0.2", 399 | "tweetnacl": "~0.14.0" 400 | }, 401 | "bin": { 402 | "sshpk-conv": "bin/sshpk-conv", 403 | "sshpk-sign": "bin/sshpk-sign", 404 | "sshpk-verify": "bin/sshpk-verify" 405 | }, 406 | "engines": { 407 | "node": ">=0.10.0" 408 | } 409 | }, 410 | "node_modules/tough-cookie": { 411 | "version": "2.5.0", 412 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 413 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 414 | "dependencies": { 415 | "psl": "^1.1.28", 416 | "punycode": "^2.1.1" 417 | }, 418 | "engines": { 419 | "node": ">=0.8" 420 | } 421 | }, 422 | "node_modules/tunnel-agent": { 423 | "version": "0.6.0", 424 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 425 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 426 | "dependencies": { 427 | "safe-buffer": "^5.0.1" 428 | }, 429 | "engines": { 430 | "node": "*" 431 | } 432 | }, 433 | "node_modules/tweetnacl": { 434 | "version": "0.14.5", 435 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 436 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 437 | }, 438 | "node_modules/universalify": { 439 | "version": "0.1.2", 440 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 441 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 442 | "engines": { 443 | "node": ">= 4.0.0" 444 | } 445 | }, 446 | "node_modules/uri-js": { 447 | "version": "4.4.1", 448 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 449 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 450 | "dependencies": { 451 | "punycode": "^2.1.0" 452 | } 453 | }, 454 | "node_modules/uuid": { 455 | "version": "3.4.0", 456 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 457 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 458 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 459 | "bin": { 460 | "uuid": "bin/uuid" 461 | } 462 | }, 463 | "node_modules/verror": { 464 | "version": "1.10.0", 465 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 466 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 467 | "engines": [ 468 | "node >=0.6.0" 469 | ], 470 | "dependencies": { 471 | "assert-plus": "^1.0.0", 472 | "core-util-is": "1.0.2", 473 | "extsprintf": "^1.2.0" 474 | } 475 | } 476 | }, 477 | "dependencies": { 478 | "ajv": { 479 | "version": "6.12.6", 480 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 481 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 482 | "requires": { 483 | "fast-deep-equal": "^3.1.1", 484 | "fast-json-stable-stringify": "^2.0.0", 485 | "json-schema-traverse": "^0.4.1", 486 | "uri-js": "^4.2.2" 487 | } 488 | }, 489 | "asn1": { 490 | "version": "0.2.4", 491 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 492 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 493 | "requires": { 494 | "safer-buffer": "~2.1.0" 495 | } 496 | }, 497 | "assert-plus": { 498 | "version": "1.0.0", 499 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 500 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 501 | }, 502 | "asynckit": { 503 | "version": "0.4.0", 504 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 505 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 506 | }, 507 | "aws-sign2": { 508 | "version": "0.7.0", 509 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 510 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 511 | }, 512 | "aws4": { 513 | "version": "1.11.0", 514 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 515 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 516 | }, 517 | "bcrypt-pbkdf": { 518 | "version": "1.0.2", 519 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 520 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 521 | "requires": { 522 | "tweetnacl": "^0.14.3" 523 | } 524 | }, 525 | "caseless": { 526 | "version": "0.12.0", 527 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 528 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 529 | }, 530 | "combined-stream": { 531 | "version": "1.0.8", 532 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 533 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 534 | "requires": { 535 | "delayed-stream": "~1.0.0" 536 | } 537 | }, 538 | "core-util-is": { 539 | "version": "1.0.2", 540 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 541 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 542 | }, 543 | "dashdash": { 544 | "version": "1.14.1", 545 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 546 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 547 | "requires": { 548 | "assert-plus": "^1.0.0" 549 | } 550 | }, 551 | "delayed-stream": { 552 | "version": "1.0.0", 553 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 554 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 555 | }, 556 | "ecc-jsbn": { 557 | "version": "0.1.2", 558 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 559 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 560 | "requires": { 561 | "jsbn": "~0.1.0", 562 | "safer-buffer": "^2.1.0" 563 | } 564 | }, 565 | "extend": { 566 | "version": "3.0.2", 567 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 568 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 569 | }, 570 | "extsprintf": { 571 | "version": "1.3.0", 572 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 573 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 574 | }, 575 | "fast-deep-equal": { 576 | "version": "3.1.3", 577 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 578 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 579 | }, 580 | "fast-json-stable-stringify": { 581 | "version": "2.1.0", 582 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 583 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 584 | }, 585 | "forever-agent": { 586 | "version": "0.6.1", 587 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 588 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 589 | }, 590 | "form-data": { 591 | "version": "2.3.3", 592 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 593 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 594 | "requires": { 595 | "asynckit": "^0.4.0", 596 | "combined-stream": "^1.0.6", 597 | "mime-types": "^2.1.12" 598 | } 599 | }, 600 | "fs-extra": { 601 | "version": "7.0.1", 602 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 603 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 604 | "requires": { 605 | "graceful-fs": "^4.1.2", 606 | "jsonfile": "^4.0.0", 607 | "universalify": "^0.1.0" 608 | } 609 | }, 610 | "getpass": { 611 | "version": "0.1.7", 612 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 613 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 614 | "requires": { 615 | "assert-plus": "^1.0.0" 616 | } 617 | }, 618 | "graceful-fs": { 619 | "version": "4.2.8", 620 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 621 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 622 | }, 623 | "har-schema": { 624 | "version": "2.0.0", 625 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 626 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 627 | }, 628 | "har-validator": { 629 | "version": "5.1.5", 630 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 631 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 632 | "requires": { 633 | "ajv": "^6.12.3", 634 | "har-schema": "^2.0.0" 635 | } 636 | }, 637 | "http-signature": { 638 | "version": "1.2.0", 639 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 640 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 641 | "requires": { 642 | "assert-plus": "^1.0.0", 643 | "jsprim": "^1.2.2", 644 | "sshpk": "^1.7.0" 645 | } 646 | }, 647 | "is-typedarray": { 648 | "version": "1.0.0", 649 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 650 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 651 | }, 652 | "isstream": { 653 | "version": "0.1.2", 654 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 655 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 656 | }, 657 | "jsbn": { 658 | "version": "0.1.1", 659 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 660 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 661 | }, 662 | "json-schema": { 663 | "version": "0.2.3", 664 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 665 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 666 | }, 667 | "json-schema-traverse": { 668 | "version": "0.4.1", 669 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 670 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 671 | }, 672 | "json-stringify-safe": { 673 | "version": "5.0.1", 674 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 675 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 676 | }, 677 | "jsonfile": { 678 | "version": "4.0.0", 679 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 680 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 681 | "requires": { 682 | "graceful-fs": "^4.1.6" 683 | } 684 | }, 685 | "jsprim": { 686 | "version": "1.4.1", 687 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 688 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 689 | "requires": { 690 | "assert-plus": "1.0.0", 691 | "extsprintf": "1.3.0", 692 | "json-schema": "0.2.3", 693 | "verror": "1.10.0" 694 | } 695 | }, 696 | "mime-db": { 697 | "version": "1.49.0", 698 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 699 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 700 | }, 701 | "mime-types": { 702 | "version": "2.1.32", 703 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 704 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 705 | "requires": { 706 | "mime-db": "1.49.0" 707 | } 708 | }, 709 | "oauth-sign": { 710 | "version": "0.9.0", 711 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 712 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 713 | }, 714 | "performance-now": { 715 | "version": "2.1.0", 716 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 717 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 718 | }, 719 | "psl": { 720 | "version": "1.8.0", 721 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 722 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 723 | }, 724 | "punycode": { 725 | "version": "2.1.1", 726 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 727 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 728 | }, 729 | "qs": { 730 | "version": "6.5.2", 731 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 732 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 733 | }, 734 | "request": { 735 | "version": "2.88.2", 736 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 737 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 738 | "requires": { 739 | "aws-sign2": "~0.7.0", 740 | "aws4": "^1.8.0", 741 | "caseless": "~0.12.0", 742 | "combined-stream": "~1.0.6", 743 | "extend": "~3.0.2", 744 | "forever-agent": "~0.6.1", 745 | "form-data": "~2.3.2", 746 | "har-validator": "~5.1.3", 747 | "http-signature": "~1.2.0", 748 | "is-typedarray": "~1.0.0", 749 | "isstream": "~0.1.2", 750 | "json-stringify-safe": "~5.0.1", 751 | "mime-types": "~2.1.19", 752 | "oauth-sign": "~0.9.0", 753 | "performance-now": "^2.1.0", 754 | "qs": "~6.5.2", 755 | "safe-buffer": "^5.1.2", 756 | "tough-cookie": "~2.5.0", 757 | "tunnel-agent": "^0.6.0", 758 | "uuid": "^3.3.2" 759 | } 760 | }, 761 | "safe-buffer": { 762 | "version": "5.2.1", 763 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 764 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 765 | }, 766 | "safer-buffer": { 767 | "version": "2.1.2", 768 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 769 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 770 | }, 771 | "sshpk": { 772 | "version": "1.16.1", 773 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 774 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 775 | "requires": { 776 | "asn1": "~0.2.3", 777 | "assert-plus": "^1.0.0", 778 | "bcrypt-pbkdf": "^1.0.0", 779 | "dashdash": "^1.12.0", 780 | "ecc-jsbn": "~0.1.1", 781 | "getpass": "^0.1.1", 782 | "jsbn": "~0.1.0", 783 | "safer-buffer": "^2.0.2", 784 | "tweetnacl": "~0.14.0" 785 | } 786 | }, 787 | "tough-cookie": { 788 | "version": "2.5.0", 789 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 790 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 791 | "requires": { 792 | "psl": "^1.1.28", 793 | "punycode": "^2.1.1" 794 | } 795 | }, 796 | "tunnel-agent": { 797 | "version": "0.6.0", 798 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 799 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 800 | "requires": { 801 | "safe-buffer": "^5.0.1" 802 | } 803 | }, 804 | "tweetnacl": { 805 | "version": "0.14.5", 806 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 807 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 808 | }, 809 | "universalify": { 810 | "version": "0.1.2", 811 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 812 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 813 | }, 814 | "uri-js": { 815 | "version": "4.4.1", 816 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 817 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 818 | "requires": { 819 | "punycode": "^2.1.0" 820 | } 821 | }, 822 | "uuid": { 823 | "version": "3.4.0", 824 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 825 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 826 | }, 827 | "verror": { 828 | "version": "1.10.0", 829 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 830 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 831 | "requires": { 832 | "assert-plus": "^1.0.0", 833 | "core-util-is": "1.0.2", 834 | "extsprintf": "^1.2.0" 835 | } 836 | } 837 | } 838 | } 839 | -------------------------------------------------------------------------------- /packages/@imgcook/cli/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@imgcook/cli", 3 | "version": "0.2.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "0.2.0", 9 | "license": "ISC", 10 | "dependencies": { 11 | "chalk": "^2.4.2", 12 | "commander": "^2.19.0", 13 | "fs-extra": "^7.0.1", 14 | "inquirer": "^6.2.2", 15 | "minimist": "^1.2.0", 16 | "moment": "^2.24.0", 17 | "ora": "^3.4.0", 18 | "request": "^2.88.0", 19 | "semver": "^6.0.0" 20 | }, 21 | "bin": { 22 | "imgcook": "bin/imgcook.js" 23 | }, 24 | "devDependencies": { 25 | "chai": "^4.2.0" 26 | }, 27 | "engines": { 28 | "node": ">=8.9" 29 | } 30 | }, 31 | "node_modules/ajv": { 32 | "version": "6.12.6", 33 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 34 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 35 | "dependencies": { 36 | "fast-deep-equal": "^3.1.1", 37 | "fast-json-stable-stringify": "^2.0.0", 38 | "json-schema-traverse": "^0.4.1", 39 | "uri-js": "^4.2.2" 40 | }, 41 | "funding": { 42 | "type": "github", 43 | "url": "https://github.com/sponsors/epoberezkin" 44 | } 45 | }, 46 | "node_modules/ansi-escapes": { 47 | "version": "3.2.0", 48 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 49 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 50 | "engines": { 51 | "node": ">=4" 52 | } 53 | }, 54 | "node_modules/ansi-regex": { 55 | "version": "4.1.0", 56 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 57 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 58 | "engines": { 59 | "node": ">=6" 60 | } 61 | }, 62 | "node_modules/ansi-styles": { 63 | "version": "3.2.1", 64 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 65 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 66 | "dependencies": { 67 | "color-convert": "^1.9.0" 68 | }, 69 | "engines": { 70 | "node": ">=4" 71 | } 72 | }, 73 | "node_modules/asn1": { 74 | "version": "0.2.4", 75 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 76 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 77 | "dependencies": { 78 | "safer-buffer": "~2.1.0" 79 | } 80 | }, 81 | "node_modules/assert-plus": { 82 | "version": "1.0.0", 83 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 84 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 85 | "engines": { 86 | "node": ">=0.8" 87 | } 88 | }, 89 | "node_modules/assertion-error": { 90 | "version": "1.1.0", 91 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 92 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 93 | "dev": true, 94 | "engines": { 95 | "node": "*" 96 | } 97 | }, 98 | "node_modules/asynckit": { 99 | "version": "0.4.0", 100 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 101 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 102 | }, 103 | "node_modules/aws-sign2": { 104 | "version": "0.7.0", 105 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 106 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 107 | "engines": { 108 | "node": "*" 109 | } 110 | }, 111 | "node_modules/aws4": { 112 | "version": "1.11.0", 113 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 114 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 115 | }, 116 | "node_modules/bcrypt-pbkdf": { 117 | "version": "1.0.2", 118 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 119 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 120 | "dependencies": { 121 | "tweetnacl": "^0.14.3" 122 | } 123 | }, 124 | "node_modules/caseless": { 125 | "version": "0.12.0", 126 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 127 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 128 | }, 129 | "node_modules/chai": { 130 | "version": "4.3.4", 131 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", 132 | "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", 133 | "dev": true, 134 | "dependencies": { 135 | "assertion-error": "^1.1.0", 136 | "check-error": "^1.0.2", 137 | "deep-eql": "^3.0.1", 138 | "get-func-name": "^2.0.0", 139 | "pathval": "^1.1.1", 140 | "type-detect": "^4.0.5" 141 | }, 142 | "engines": { 143 | "node": ">=4" 144 | } 145 | }, 146 | "node_modules/chalk": { 147 | "version": "2.4.2", 148 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 149 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 150 | "dependencies": { 151 | "ansi-styles": "^3.2.1", 152 | "escape-string-regexp": "^1.0.5", 153 | "supports-color": "^5.3.0" 154 | }, 155 | "engines": { 156 | "node": ">=4" 157 | } 158 | }, 159 | "node_modules/chardet": { 160 | "version": "0.7.0", 161 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 162 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 163 | }, 164 | "node_modules/check-error": { 165 | "version": "1.0.2", 166 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 167 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 168 | "dev": true, 169 | "engines": { 170 | "node": "*" 171 | } 172 | }, 173 | "node_modules/cli-cursor": { 174 | "version": "2.1.0", 175 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 176 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 177 | "dependencies": { 178 | "restore-cursor": "^2.0.0" 179 | }, 180 | "engines": { 181 | "node": ">=4" 182 | } 183 | }, 184 | "node_modules/cli-spinners": { 185 | "version": "2.6.0", 186 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", 187 | "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", 188 | "engines": { 189 | "node": ">=6" 190 | }, 191 | "funding": { 192 | "url": "https://github.com/sponsors/sindresorhus" 193 | } 194 | }, 195 | "node_modules/cli-width": { 196 | "version": "2.2.1", 197 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 198 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" 199 | }, 200 | "node_modules/clone": { 201 | "version": "1.0.4", 202 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 203 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 204 | "engines": { 205 | "node": ">=0.8" 206 | } 207 | }, 208 | "node_modules/color-convert": { 209 | "version": "1.9.3", 210 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 211 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 212 | "dependencies": { 213 | "color-name": "1.1.3" 214 | } 215 | }, 216 | "node_modules/color-name": { 217 | "version": "1.1.3", 218 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 219 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 220 | }, 221 | "node_modules/combined-stream": { 222 | "version": "1.0.8", 223 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 224 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 225 | "dependencies": { 226 | "delayed-stream": "~1.0.0" 227 | }, 228 | "engines": { 229 | "node": ">= 0.8" 230 | } 231 | }, 232 | "node_modules/commander": { 233 | "version": "2.20.3", 234 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 235 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 236 | }, 237 | "node_modules/core-util-is": { 238 | "version": "1.0.2", 239 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 240 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 241 | }, 242 | "node_modules/dashdash": { 243 | "version": "1.14.1", 244 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 245 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 246 | "dependencies": { 247 | "assert-plus": "^1.0.0" 248 | }, 249 | "engines": { 250 | "node": ">=0.10" 251 | } 252 | }, 253 | "node_modules/deep-eql": { 254 | "version": "3.0.1", 255 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 256 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 257 | "dev": true, 258 | "dependencies": { 259 | "type-detect": "^4.0.0" 260 | }, 261 | "engines": { 262 | "node": ">=0.12" 263 | } 264 | }, 265 | "node_modules/defaults": { 266 | "version": "1.0.3", 267 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 268 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 269 | "dependencies": { 270 | "clone": "^1.0.2" 271 | } 272 | }, 273 | "node_modules/delayed-stream": { 274 | "version": "1.0.0", 275 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 276 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 277 | "engines": { 278 | "node": ">=0.4.0" 279 | } 280 | }, 281 | "node_modules/ecc-jsbn": { 282 | "version": "0.1.2", 283 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 284 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 285 | "dependencies": { 286 | "jsbn": "~0.1.0", 287 | "safer-buffer": "^2.1.0" 288 | } 289 | }, 290 | "node_modules/escape-string-regexp": { 291 | "version": "1.0.5", 292 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 293 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 294 | "engines": { 295 | "node": ">=0.8.0" 296 | } 297 | }, 298 | "node_modules/extend": { 299 | "version": "3.0.2", 300 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 301 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 302 | }, 303 | "node_modules/external-editor": { 304 | "version": "3.1.0", 305 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 306 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 307 | "dependencies": { 308 | "chardet": "^0.7.0", 309 | "iconv-lite": "^0.4.24", 310 | "tmp": "^0.0.33" 311 | }, 312 | "engines": { 313 | "node": ">=4" 314 | } 315 | }, 316 | "node_modules/extsprintf": { 317 | "version": "1.3.0", 318 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 319 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 320 | "engines": [ 321 | "node >=0.6.0" 322 | ] 323 | }, 324 | "node_modules/fast-deep-equal": { 325 | "version": "3.1.3", 326 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 327 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 328 | }, 329 | "node_modules/fast-json-stable-stringify": { 330 | "version": "2.1.0", 331 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 332 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 333 | }, 334 | "node_modules/figures": { 335 | "version": "2.0.0", 336 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 337 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 338 | "dependencies": { 339 | "escape-string-regexp": "^1.0.5" 340 | }, 341 | "engines": { 342 | "node": ">=4" 343 | } 344 | }, 345 | "node_modules/forever-agent": { 346 | "version": "0.6.1", 347 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 348 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 349 | "engines": { 350 | "node": "*" 351 | } 352 | }, 353 | "node_modules/form-data": { 354 | "version": "2.3.3", 355 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 356 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 357 | "dependencies": { 358 | "asynckit": "^0.4.0", 359 | "combined-stream": "^1.0.6", 360 | "mime-types": "^2.1.12" 361 | }, 362 | "engines": { 363 | "node": ">= 0.12" 364 | } 365 | }, 366 | "node_modules/fs-extra": { 367 | "version": "7.0.1", 368 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 369 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 370 | "dependencies": { 371 | "graceful-fs": "^4.1.2", 372 | "jsonfile": "^4.0.0", 373 | "universalify": "^0.1.0" 374 | }, 375 | "engines": { 376 | "node": ">=6 <7 || >=8" 377 | } 378 | }, 379 | "node_modules/get-func-name": { 380 | "version": "2.0.0", 381 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 382 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 383 | "dev": true, 384 | "engines": { 385 | "node": "*" 386 | } 387 | }, 388 | "node_modules/getpass": { 389 | "version": "0.1.7", 390 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 391 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 392 | "dependencies": { 393 | "assert-plus": "^1.0.0" 394 | } 395 | }, 396 | "node_modules/graceful-fs": { 397 | "version": "4.2.8", 398 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 399 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 400 | }, 401 | "node_modules/har-schema": { 402 | "version": "2.0.0", 403 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 404 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 405 | "engines": { 406 | "node": ">=4" 407 | } 408 | }, 409 | "node_modules/har-validator": { 410 | "version": "5.1.5", 411 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 412 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 413 | "deprecated": "this library is no longer supported", 414 | "dependencies": { 415 | "ajv": "^6.12.3", 416 | "har-schema": "^2.0.0" 417 | }, 418 | "engines": { 419 | "node": ">=6" 420 | } 421 | }, 422 | "node_modules/has-flag": { 423 | "version": "3.0.0", 424 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 425 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 426 | "engines": { 427 | "node": ">=4" 428 | } 429 | }, 430 | "node_modules/http-signature": { 431 | "version": "1.2.0", 432 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 433 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 434 | "dependencies": { 435 | "assert-plus": "^1.0.0", 436 | "jsprim": "^1.2.2", 437 | "sshpk": "^1.7.0" 438 | }, 439 | "engines": { 440 | "node": ">=0.8", 441 | "npm": ">=1.3.7" 442 | } 443 | }, 444 | "node_modules/iconv-lite": { 445 | "version": "0.4.24", 446 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 447 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 448 | "dependencies": { 449 | "safer-buffer": ">= 2.1.2 < 3" 450 | }, 451 | "engines": { 452 | "node": ">=0.10.0" 453 | } 454 | }, 455 | "node_modules/inquirer": { 456 | "version": "6.5.2", 457 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 458 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 459 | "dependencies": { 460 | "ansi-escapes": "^3.2.0", 461 | "chalk": "^2.4.2", 462 | "cli-cursor": "^2.1.0", 463 | "cli-width": "^2.0.0", 464 | "external-editor": "^3.0.3", 465 | "figures": "^2.0.0", 466 | "lodash": "^4.17.12", 467 | "mute-stream": "0.0.7", 468 | "run-async": "^2.2.0", 469 | "rxjs": "^6.4.0", 470 | "string-width": "^2.1.0", 471 | "strip-ansi": "^5.1.0", 472 | "through": "^2.3.6" 473 | }, 474 | "engines": { 475 | "node": ">=6.0.0" 476 | } 477 | }, 478 | "node_modules/is-fullwidth-code-point": { 479 | "version": "2.0.0", 480 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 481 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 482 | "engines": { 483 | "node": ">=4" 484 | } 485 | }, 486 | "node_modules/is-typedarray": { 487 | "version": "1.0.0", 488 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 489 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 490 | }, 491 | "node_modules/isstream": { 492 | "version": "0.1.2", 493 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 494 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 495 | }, 496 | "node_modules/jsbn": { 497 | "version": "0.1.1", 498 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 499 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 500 | }, 501 | "node_modules/json-schema": { 502 | "version": "0.2.3", 503 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 504 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 505 | }, 506 | "node_modules/json-schema-traverse": { 507 | "version": "0.4.1", 508 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 509 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 510 | }, 511 | "node_modules/json-stringify-safe": { 512 | "version": "5.0.1", 513 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 514 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 515 | }, 516 | "node_modules/jsonfile": { 517 | "version": "4.0.0", 518 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 519 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 520 | "optionalDependencies": { 521 | "graceful-fs": "^4.1.6" 522 | } 523 | }, 524 | "node_modules/jsprim": { 525 | "version": "1.4.1", 526 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 527 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 528 | "engines": [ 529 | "node >=0.6.0" 530 | ], 531 | "dependencies": { 532 | "assert-plus": "1.0.0", 533 | "extsprintf": "1.3.0", 534 | "json-schema": "0.2.3", 535 | "verror": "1.10.0" 536 | } 537 | }, 538 | "node_modules/lodash": { 539 | "version": "4.17.21", 540 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 541 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 542 | }, 543 | "node_modules/log-symbols": { 544 | "version": "2.2.0", 545 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 546 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 547 | "dependencies": { 548 | "chalk": "^2.0.1" 549 | }, 550 | "engines": { 551 | "node": ">=4" 552 | } 553 | }, 554 | "node_modules/mime-db": { 555 | "version": "1.49.0", 556 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 557 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", 558 | "engines": { 559 | "node": ">= 0.6" 560 | } 561 | }, 562 | "node_modules/mime-types": { 563 | "version": "2.1.32", 564 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 565 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 566 | "dependencies": { 567 | "mime-db": "1.49.0" 568 | }, 569 | "engines": { 570 | "node": ">= 0.6" 571 | } 572 | }, 573 | "node_modules/mimic-fn": { 574 | "version": "1.2.0", 575 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 576 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 577 | "engines": { 578 | "node": ">=4" 579 | } 580 | }, 581 | "node_modules/minimist": { 582 | "version": "1.2.5", 583 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 584 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 585 | }, 586 | "node_modules/moment": { 587 | "version": "2.29.1", 588 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 589 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", 590 | "engines": { 591 | "node": "*" 592 | } 593 | }, 594 | "node_modules/mute-stream": { 595 | "version": "0.0.7", 596 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 597 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" 598 | }, 599 | "node_modules/oauth-sign": { 600 | "version": "0.9.0", 601 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 602 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 603 | "engines": { 604 | "node": "*" 605 | } 606 | }, 607 | "node_modules/onetime": { 608 | "version": "2.0.1", 609 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 610 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 611 | "dependencies": { 612 | "mimic-fn": "^1.0.0" 613 | }, 614 | "engines": { 615 | "node": ">=4" 616 | } 617 | }, 618 | "node_modules/ora": { 619 | "version": "3.4.0", 620 | "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", 621 | "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", 622 | "dependencies": { 623 | "chalk": "^2.4.2", 624 | "cli-cursor": "^2.1.0", 625 | "cli-spinners": "^2.0.0", 626 | "log-symbols": "^2.2.0", 627 | "strip-ansi": "^5.2.0", 628 | "wcwidth": "^1.0.1" 629 | }, 630 | "engines": { 631 | "node": ">=6" 632 | } 633 | }, 634 | "node_modules/os-tmpdir": { 635 | "version": "1.0.2", 636 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 637 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 638 | "engines": { 639 | "node": ">=0.10.0" 640 | } 641 | }, 642 | "node_modules/pathval": { 643 | "version": "1.1.1", 644 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 645 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 646 | "dev": true, 647 | "engines": { 648 | "node": "*" 649 | } 650 | }, 651 | "node_modules/performance-now": { 652 | "version": "2.1.0", 653 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 654 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 655 | }, 656 | "node_modules/psl": { 657 | "version": "1.8.0", 658 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 659 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 660 | }, 661 | "node_modules/punycode": { 662 | "version": "2.1.1", 663 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 664 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 665 | "engines": { 666 | "node": ">=6" 667 | } 668 | }, 669 | "node_modules/qs": { 670 | "version": "6.5.2", 671 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 672 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 673 | "engines": { 674 | "node": ">=0.6" 675 | } 676 | }, 677 | "node_modules/request": { 678 | "version": "2.88.2", 679 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 680 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 681 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 682 | "dependencies": { 683 | "aws-sign2": "~0.7.0", 684 | "aws4": "^1.8.0", 685 | "caseless": "~0.12.0", 686 | "combined-stream": "~1.0.6", 687 | "extend": "~3.0.2", 688 | "forever-agent": "~0.6.1", 689 | "form-data": "~2.3.2", 690 | "har-validator": "~5.1.3", 691 | "http-signature": "~1.2.0", 692 | "is-typedarray": "~1.0.0", 693 | "isstream": "~0.1.2", 694 | "json-stringify-safe": "~5.0.1", 695 | "mime-types": "~2.1.19", 696 | "oauth-sign": "~0.9.0", 697 | "performance-now": "^2.1.0", 698 | "qs": "~6.5.2", 699 | "safe-buffer": "^5.1.2", 700 | "tough-cookie": "~2.5.0", 701 | "tunnel-agent": "^0.6.0", 702 | "uuid": "^3.3.2" 703 | }, 704 | "engines": { 705 | "node": ">= 6" 706 | } 707 | }, 708 | "node_modules/restore-cursor": { 709 | "version": "2.0.0", 710 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 711 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 712 | "dependencies": { 713 | "onetime": "^2.0.0", 714 | "signal-exit": "^3.0.2" 715 | }, 716 | "engines": { 717 | "node": ">=4" 718 | } 719 | }, 720 | "node_modules/run-async": { 721 | "version": "2.4.1", 722 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 723 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 724 | "engines": { 725 | "node": ">=0.12.0" 726 | } 727 | }, 728 | "node_modules/rxjs": { 729 | "version": "6.6.7", 730 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 731 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 732 | "dependencies": { 733 | "tslib": "^1.9.0" 734 | }, 735 | "engines": { 736 | "npm": ">=2.0.0" 737 | } 738 | }, 739 | "node_modules/safe-buffer": { 740 | "version": "5.2.1", 741 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 742 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 743 | "funding": [ 744 | { 745 | "type": "github", 746 | "url": "https://github.com/sponsors/feross" 747 | }, 748 | { 749 | "type": "patreon", 750 | "url": "https://www.patreon.com/feross" 751 | }, 752 | { 753 | "type": "consulting", 754 | "url": "https://feross.org/support" 755 | } 756 | ] 757 | }, 758 | "node_modules/safer-buffer": { 759 | "version": "2.1.2", 760 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 761 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 762 | }, 763 | "node_modules/semver": { 764 | "version": "6.3.0", 765 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 766 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 767 | "bin": { 768 | "semver": "bin/semver.js" 769 | } 770 | }, 771 | "node_modules/signal-exit": { 772 | "version": "3.0.4", 773 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", 774 | "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==" 775 | }, 776 | "node_modules/sshpk": { 777 | "version": "1.16.1", 778 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 779 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 780 | "dependencies": { 781 | "asn1": "~0.2.3", 782 | "assert-plus": "^1.0.0", 783 | "bcrypt-pbkdf": "^1.0.0", 784 | "dashdash": "^1.12.0", 785 | "ecc-jsbn": "~0.1.1", 786 | "getpass": "^0.1.1", 787 | "jsbn": "~0.1.0", 788 | "safer-buffer": "^2.0.2", 789 | "tweetnacl": "~0.14.0" 790 | }, 791 | "bin": { 792 | "sshpk-conv": "bin/sshpk-conv", 793 | "sshpk-sign": "bin/sshpk-sign", 794 | "sshpk-verify": "bin/sshpk-verify" 795 | }, 796 | "engines": { 797 | "node": ">=0.10.0" 798 | } 799 | }, 800 | "node_modules/string-width": { 801 | "version": "2.1.1", 802 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 803 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 804 | "dependencies": { 805 | "is-fullwidth-code-point": "^2.0.0", 806 | "strip-ansi": "^4.0.0" 807 | }, 808 | "engines": { 809 | "node": ">=4" 810 | } 811 | }, 812 | "node_modules/string-width/node_modules/ansi-regex": { 813 | "version": "3.0.0", 814 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 815 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 816 | "engines": { 817 | "node": ">=4" 818 | } 819 | }, 820 | "node_modules/string-width/node_modules/strip-ansi": { 821 | "version": "4.0.0", 822 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 823 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 824 | "dependencies": { 825 | "ansi-regex": "^3.0.0" 826 | }, 827 | "engines": { 828 | "node": ">=4" 829 | } 830 | }, 831 | "node_modules/strip-ansi": { 832 | "version": "5.2.0", 833 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 834 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 835 | "dependencies": { 836 | "ansi-regex": "^4.1.0" 837 | }, 838 | "engines": { 839 | "node": ">=6" 840 | } 841 | }, 842 | "node_modules/supports-color": { 843 | "version": "5.5.0", 844 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 845 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 846 | "dependencies": { 847 | "has-flag": "^3.0.0" 848 | }, 849 | "engines": { 850 | "node": ">=4" 851 | } 852 | }, 853 | "node_modules/through": { 854 | "version": "2.3.8", 855 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 856 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 857 | }, 858 | "node_modules/tmp": { 859 | "version": "0.0.33", 860 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 861 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 862 | "dependencies": { 863 | "os-tmpdir": "~1.0.2" 864 | }, 865 | "engines": { 866 | "node": ">=0.6.0" 867 | } 868 | }, 869 | "node_modules/tough-cookie": { 870 | "version": "2.5.0", 871 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 872 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 873 | "dependencies": { 874 | "psl": "^1.1.28", 875 | "punycode": "^2.1.1" 876 | }, 877 | "engines": { 878 | "node": ">=0.8" 879 | } 880 | }, 881 | "node_modules/tslib": { 882 | "version": "1.14.1", 883 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 884 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 885 | }, 886 | "node_modules/tunnel-agent": { 887 | "version": "0.6.0", 888 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 889 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 890 | "dependencies": { 891 | "safe-buffer": "^5.0.1" 892 | }, 893 | "engines": { 894 | "node": "*" 895 | } 896 | }, 897 | "node_modules/tweetnacl": { 898 | "version": "0.14.5", 899 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 900 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 901 | }, 902 | "node_modules/type-detect": { 903 | "version": "4.0.8", 904 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 905 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 906 | "dev": true, 907 | "engines": { 908 | "node": ">=4" 909 | } 910 | }, 911 | "node_modules/universalify": { 912 | "version": "0.1.2", 913 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 914 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 915 | "engines": { 916 | "node": ">= 4.0.0" 917 | } 918 | }, 919 | "node_modules/uri-js": { 920 | "version": "4.4.1", 921 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 922 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 923 | "dependencies": { 924 | "punycode": "^2.1.0" 925 | } 926 | }, 927 | "node_modules/uuid": { 928 | "version": "3.4.0", 929 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 930 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 931 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 932 | "bin": { 933 | "uuid": "bin/uuid" 934 | } 935 | }, 936 | "node_modules/verror": { 937 | "version": "1.10.0", 938 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 939 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 940 | "engines": [ 941 | "node >=0.6.0" 942 | ], 943 | "dependencies": { 944 | "assert-plus": "^1.0.0", 945 | "core-util-is": "1.0.2", 946 | "extsprintf": "^1.2.0" 947 | } 948 | }, 949 | "node_modules/wcwidth": { 950 | "version": "1.0.1", 951 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 952 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 953 | "dependencies": { 954 | "defaults": "^1.0.3" 955 | } 956 | } 957 | }, 958 | "dependencies": { 959 | "ajv": { 960 | "version": "6.12.6", 961 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 962 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 963 | "requires": { 964 | "fast-deep-equal": "^3.1.1", 965 | "fast-json-stable-stringify": "^2.0.0", 966 | "json-schema-traverse": "^0.4.1", 967 | "uri-js": "^4.2.2" 968 | } 969 | }, 970 | "ansi-escapes": { 971 | "version": "3.2.0", 972 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 973 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" 974 | }, 975 | "ansi-regex": { 976 | "version": "4.1.0", 977 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 978 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 979 | }, 980 | "ansi-styles": { 981 | "version": "3.2.1", 982 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 983 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 984 | "requires": { 985 | "color-convert": "^1.9.0" 986 | } 987 | }, 988 | "asn1": { 989 | "version": "0.2.4", 990 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 991 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 992 | "requires": { 993 | "safer-buffer": "~2.1.0" 994 | } 995 | }, 996 | "assert-plus": { 997 | "version": "1.0.0", 998 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 999 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1000 | }, 1001 | "assertion-error": { 1002 | "version": "1.1.0", 1003 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 1004 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 1005 | "dev": true 1006 | }, 1007 | "asynckit": { 1008 | "version": "0.4.0", 1009 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1010 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1011 | }, 1012 | "aws-sign2": { 1013 | "version": "0.7.0", 1014 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 1015 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 1016 | }, 1017 | "aws4": { 1018 | "version": "1.11.0", 1019 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 1020 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 1021 | }, 1022 | "bcrypt-pbkdf": { 1023 | "version": "1.0.2", 1024 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 1025 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 1026 | "requires": { 1027 | "tweetnacl": "^0.14.3" 1028 | } 1029 | }, 1030 | "caseless": { 1031 | "version": "0.12.0", 1032 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1033 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1034 | }, 1035 | "chai": { 1036 | "version": "4.3.4", 1037 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", 1038 | "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", 1039 | "dev": true, 1040 | "requires": { 1041 | "assertion-error": "^1.1.0", 1042 | "check-error": "^1.0.2", 1043 | "deep-eql": "^3.0.1", 1044 | "get-func-name": "^2.0.0", 1045 | "pathval": "^1.1.1", 1046 | "type-detect": "^4.0.5" 1047 | } 1048 | }, 1049 | "chalk": { 1050 | "version": "2.4.2", 1051 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1052 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1053 | "requires": { 1054 | "ansi-styles": "^3.2.1", 1055 | "escape-string-regexp": "^1.0.5", 1056 | "supports-color": "^5.3.0" 1057 | } 1058 | }, 1059 | "chardet": { 1060 | "version": "0.7.0", 1061 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 1062 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 1063 | }, 1064 | "check-error": { 1065 | "version": "1.0.2", 1066 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 1067 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 1068 | "dev": true 1069 | }, 1070 | "cli-cursor": { 1071 | "version": "2.1.0", 1072 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 1073 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 1074 | "requires": { 1075 | "restore-cursor": "^2.0.0" 1076 | } 1077 | }, 1078 | "cli-spinners": { 1079 | "version": "2.6.0", 1080 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", 1081 | "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" 1082 | }, 1083 | "cli-width": { 1084 | "version": "2.2.1", 1085 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 1086 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" 1087 | }, 1088 | "clone": { 1089 | "version": "1.0.4", 1090 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 1091 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 1092 | }, 1093 | "color-convert": { 1094 | "version": "1.9.3", 1095 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1096 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1097 | "requires": { 1098 | "color-name": "1.1.3" 1099 | } 1100 | }, 1101 | "color-name": { 1102 | "version": "1.1.3", 1103 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1104 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1105 | }, 1106 | "combined-stream": { 1107 | "version": "1.0.8", 1108 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1109 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1110 | "requires": { 1111 | "delayed-stream": "~1.0.0" 1112 | } 1113 | }, 1114 | "commander": { 1115 | "version": "2.20.3", 1116 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1117 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 1118 | }, 1119 | "core-util-is": { 1120 | "version": "1.0.2", 1121 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1122 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1123 | }, 1124 | "dashdash": { 1125 | "version": "1.14.1", 1126 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1127 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1128 | "requires": { 1129 | "assert-plus": "^1.0.0" 1130 | } 1131 | }, 1132 | "deep-eql": { 1133 | "version": "3.0.1", 1134 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 1135 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 1136 | "dev": true, 1137 | "requires": { 1138 | "type-detect": "^4.0.0" 1139 | } 1140 | }, 1141 | "defaults": { 1142 | "version": "1.0.3", 1143 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 1144 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 1145 | "requires": { 1146 | "clone": "^1.0.2" 1147 | } 1148 | }, 1149 | "delayed-stream": { 1150 | "version": "1.0.0", 1151 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1152 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1153 | }, 1154 | "ecc-jsbn": { 1155 | "version": "0.1.2", 1156 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1157 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1158 | "requires": { 1159 | "jsbn": "~0.1.0", 1160 | "safer-buffer": "^2.1.0" 1161 | } 1162 | }, 1163 | "escape-string-regexp": { 1164 | "version": "1.0.5", 1165 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1166 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1167 | }, 1168 | "extend": { 1169 | "version": "3.0.2", 1170 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1171 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1172 | }, 1173 | "external-editor": { 1174 | "version": "3.1.0", 1175 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1176 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1177 | "requires": { 1178 | "chardet": "^0.7.0", 1179 | "iconv-lite": "^0.4.24", 1180 | "tmp": "^0.0.33" 1181 | } 1182 | }, 1183 | "extsprintf": { 1184 | "version": "1.3.0", 1185 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1186 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1187 | }, 1188 | "fast-deep-equal": { 1189 | "version": "3.1.3", 1190 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1191 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1192 | }, 1193 | "fast-json-stable-stringify": { 1194 | "version": "2.1.0", 1195 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1196 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 1197 | }, 1198 | "figures": { 1199 | "version": "2.0.0", 1200 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1201 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1202 | "requires": { 1203 | "escape-string-regexp": "^1.0.5" 1204 | } 1205 | }, 1206 | "forever-agent": { 1207 | "version": "0.6.1", 1208 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1209 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1210 | }, 1211 | "form-data": { 1212 | "version": "2.3.3", 1213 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1214 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1215 | "requires": { 1216 | "asynckit": "^0.4.0", 1217 | "combined-stream": "^1.0.6", 1218 | "mime-types": "^2.1.12" 1219 | } 1220 | }, 1221 | "fs-extra": { 1222 | "version": "7.0.1", 1223 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 1224 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 1225 | "requires": { 1226 | "graceful-fs": "^4.1.2", 1227 | "jsonfile": "^4.0.0", 1228 | "universalify": "^0.1.0" 1229 | } 1230 | }, 1231 | "get-func-name": { 1232 | "version": "2.0.0", 1233 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1234 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 1235 | "dev": true 1236 | }, 1237 | "getpass": { 1238 | "version": "0.1.7", 1239 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1240 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1241 | "requires": { 1242 | "assert-plus": "^1.0.0" 1243 | } 1244 | }, 1245 | "graceful-fs": { 1246 | "version": "4.2.8", 1247 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 1248 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 1249 | }, 1250 | "har-schema": { 1251 | "version": "2.0.0", 1252 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1253 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1254 | }, 1255 | "har-validator": { 1256 | "version": "5.1.5", 1257 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 1258 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 1259 | "requires": { 1260 | "ajv": "^6.12.3", 1261 | "har-schema": "^2.0.0" 1262 | } 1263 | }, 1264 | "has-flag": { 1265 | "version": "3.0.0", 1266 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1267 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1268 | }, 1269 | "http-signature": { 1270 | "version": "1.2.0", 1271 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1272 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1273 | "requires": { 1274 | "assert-plus": "^1.0.0", 1275 | "jsprim": "^1.2.2", 1276 | "sshpk": "^1.7.0" 1277 | } 1278 | }, 1279 | "iconv-lite": { 1280 | "version": "0.4.24", 1281 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1282 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1283 | "requires": { 1284 | "safer-buffer": ">= 2.1.2 < 3" 1285 | } 1286 | }, 1287 | "inquirer": { 1288 | "version": "6.5.2", 1289 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", 1290 | "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", 1291 | "requires": { 1292 | "ansi-escapes": "^3.2.0", 1293 | "chalk": "^2.4.2", 1294 | "cli-cursor": "^2.1.0", 1295 | "cli-width": "^2.0.0", 1296 | "external-editor": "^3.0.3", 1297 | "figures": "^2.0.0", 1298 | "lodash": "^4.17.12", 1299 | "mute-stream": "0.0.7", 1300 | "run-async": "^2.2.0", 1301 | "rxjs": "^6.4.0", 1302 | "string-width": "^2.1.0", 1303 | "strip-ansi": "^5.1.0", 1304 | "through": "^2.3.6" 1305 | } 1306 | }, 1307 | "is-fullwidth-code-point": { 1308 | "version": "2.0.0", 1309 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1310 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1311 | }, 1312 | "is-typedarray": { 1313 | "version": "1.0.0", 1314 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1315 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1316 | }, 1317 | "isstream": { 1318 | "version": "0.1.2", 1319 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1320 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1321 | }, 1322 | "jsbn": { 1323 | "version": "0.1.1", 1324 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1325 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1326 | }, 1327 | "json-schema": { 1328 | "version": "0.2.3", 1329 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1330 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1331 | }, 1332 | "json-schema-traverse": { 1333 | "version": "0.4.1", 1334 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1335 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1336 | }, 1337 | "json-stringify-safe": { 1338 | "version": "5.0.1", 1339 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1340 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1341 | }, 1342 | "jsonfile": { 1343 | "version": "4.0.0", 1344 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1345 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1346 | "requires": { 1347 | "graceful-fs": "^4.1.6" 1348 | } 1349 | }, 1350 | "jsprim": { 1351 | "version": "1.4.1", 1352 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1353 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1354 | "requires": { 1355 | "assert-plus": "1.0.0", 1356 | "extsprintf": "1.3.0", 1357 | "json-schema": "0.2.3", 1358 | "verror": "1.10.0" 1359 | } 1360 | }, 1361 | "lodash": { 1362 | "version": "4.17.21", 1363 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1364 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1365 | }, 1366 | "log-symbols": { 1367 | "version": "2.2.0", 1368 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 1369 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 1370 | "requires": { 1371 | "chalk": "^2.0.1" 1372 | } 1373 | }, 1374 | "mime-db": { 1375 | "version": "1.49.0", 1376 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 1377 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 1378 | }, 1379 | "mime-types": { 1380 | "version": "2.1.32", 1381 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 1382 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 1383 | "requires": { 1384 | "mime-db": "1.49.0" 1385 | } 1386 | }, 1387 | "mimic-fn": { 1388 | "version": "1.2.0", 1389 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1390 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" 1391 | }, 1392 | "minimist": { 1393 | "version": "1.2.5", 1394 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1395 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1396 | }, 1397 | "moment": { 1398 | "version": "2.29.1", 1399 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 1400 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" 1401 | }, 1402 | "mute-stream": { 1403 | "version": "0.0.7", 1404 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1405 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" 1406 | }, 1407 | "oauth-sign": { 1408 | "version": "0.9.0", 1409 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1410 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1411 | }, 1412 | "onetime": { 1413 | "version": "2.0.1", 1414 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1415 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1416 | "requires": { 1417 | "mimic-fn": "^1.0.0" 1418 | } 1419 | }, 1420 | "ora": { 1421 | "version": "3.4.0", 1422 | "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", 1423 | "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", 1424 | "requires": { 1425 | "chalk": "^2.4.2", 1426 | "cli-cursor": "^2.1.0", 1427 | "cli-spinners": "^2.0.0", 1428 | "log-symbols": "^2.2.0", 1429 | "strip-ansi": "^5.2.0", 1430 | "wcwidth": "^1.0.1" 1431 | } 1432 | }, 1433 | "os-tmpdir": { 1434 | "version": "1.0.2", 1435 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1436 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1437 | }, 1438 | "pathval": { 1439 | "version": "1.1.1", 1440 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 1441 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 1442 | "dev": true 1443 | }, 1444 | "performance-now": { 1445 | "version": "2.1.0", 1446 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1447 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1448 | }, 1449 | "psl": { 1450 | "version": "1.8.0", 1451 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1452 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 1453 | }, 1454 | "punycode": { 1455 | "version": "2.1.1", 1456 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1457 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1458 | }, 1459 | "qs": { 1460 | "version": "6.5.2", 1461 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1462 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1463 | }, 1464 | "request": { 1465 | "version": "2.88.2", 1466 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1467 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1468 | "requires": { 1469 | "aws-sign2": "~0.7.0", 1470 | "aws4": "^1.8.0", 1471 | "caseless": "~0.12.0", 1472 | "combined-stream": "~1.0.6", 1473 | "extend": "~3.0.2", 1474 | "forever-agent": "~0.6.1", 1475 | "form-data": "~2.3.2", 1476 | "har-validator": "~5.1.3", 1477 | "http-signature": "~1.2.0", 1478 | "is-typedarray": "~1.0.0", 1479 | "isstream": "~0.1.2", 1480 | "json-stringify-safe": "~5.0.1", 1481 | "mime-types": "~2.1.19", 1482 | "oauth-sign": "~0.9.0", 1483 | "performance-now": "^2.1.0", 1484 | "qs": "~6.5.2", 1485 | "safe-buffer": "^5.1.2", 1486 | "tough-cookie": "~2.5.0", 1487 | "tunnel-agent": "^0.6.0", 1488 | "uuid": "^3.3.2" 1489 | } 1490 | }, 1491 | "restore-cursor": { 1492 | "version": "2.0.0", 1493 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1494 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 1495 | "requires": { 1496 | "onetime": "^2.0.0", 1497 | "signal-exit": "^3.0.2" 1498 | } 1499 | }, 1500 | "run-async": { 1501 | "version": "2.4.1", 1502 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1503 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" 1504 | }, 1505 | "rxjs": { 1506 | "version": "6.6.7", 1507 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 1508 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 1509 | "requires": { 1510 | "tslib": "^1.9.0" 1511 | } 1512 | }, 1513 | "safe-buffer": { 1514 | "version": "5.2.1", 1515 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1516 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1517 | }, 1518 | "safer-buffer": { 1519 | "version": "2.1.2", 1520 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1521 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1522 | }, 1523 | "semver": { 1524 | "version": "6.3.0", 1525 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1526 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1527 | }, 1528 | "signal-exit": { 1529 | "version": "3.0.4", 1530 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", 1531 | "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==" 1532 | }, 1533 | "sshpk": { 1534 | "version": "1.16.1", 1535 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1536 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1537 | "requires": { 1538 | "asn1": "~0.2.3", 1539 | "assert-plus": "^1.0.0", 1540 | "bcrypt-pbkdf": "^1.0.0", 1541 | "dashdash": "^1.12.0", 1542 | "ecc-jsbn": "~0.1.1", 1543 | "getpass": "^0.1.1", 1544 | "jsbn": "~0.1.0", 1545 | "safer-buffer": "^2.0.2", 1546 | "tweetnacl": "~0.14.0" 1547 | } 1548 | }, 1549 | "string-width": { 1550 | "version": "2.1.1", 1551 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1552 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1553 | "requires": { 1554 | "is-fullwidth-code-point": "^2.0.0", 1555 | "strip-ansi": "^4.0.0" 1556 | }, 1557 | "dependencies": { 1558 | "ansi-regex": { 1559 | "version": "3.0.0", 1560 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1561 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 1562 | }, 1563 | "strip-ansi": { 1564 | "version": "4.0.0", 1565 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1566 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1567 | "requires": { 1568 | "ansi-regex": "^3.0.0" 1569 | } 1570 | } 1571 | } 1572 | }, 1573 | "strip-ansi": { 1574 | "version": "5.2.0", 1575 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1576 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1577 | "requires": { 1578 | "ansi-regex": "^4.1.0" 1579 | } 1580 | }, 1581 | "supports-color": { 1582 | "version": "5.5.0", 1583 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1584 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1585 | "requires": { 1586 | "has-flag": "^3.0.0" 1587 | } 1588 | }, 1589 | "through": { 1590 | "version": "2.3.8", 1591 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1592 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1593 | }, 1594 | "tmp": { 1595 | "version": "0.0.33", 1596 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1597 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1598 | "requires": { 1599 | "os-tmpdir": "~1.0.2" 1600 | } 1601 | }, 1602 | "tough-cookie": { 1603 | "version": "2.5.0", 1604 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1605 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1606 | "requires": { 1607 | "psl": "^1.1.28", 1608 | "punycode": "^2.1.1" 1609 | } 1610 | }, 1611 | "tslib": { 1612 | "version": "1.14.1", 1613 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1614 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1615 | }, 1616 | "tunnel-agent": { 1617 | "version": "0.6.0", 1618 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1619 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1620 | "requires": { 1621 | "safe-buffer": "^5.0.1" 1622 | } 1623 | }, 1624 | "tweetnacl": { 1625 | "version": "0.14.5", 1626 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1627 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1628 | }, 1629 | "type-detect": { 1630 | "version": "4.0.8", 1631 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1632 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 1633 | "dev": true 1634 | }, 1635 | "universalify": { 1636 | "version": "0.1.2", 1637 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1638 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 1639 | }, 1640 | "uri-js": { 1641 | "version": "4.4.1", 1642 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1643 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1644 | "requires": { 1645 | "punycode": "^2.1.0" 1646 | } 1647 | }, 1648 | "uuid": { 1649 | "version": "3.4.0", 1650 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1651 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1652 | }, 1653 | "verror": { 1654 | "version": "1.10.0", 1655 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1656 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1657 | "requires": { 1658 | "assert-plus": "^1.0.0", 1659 | "core-util-is": "1.0.2", 1660 | "extsprintf": "^1.2.0" 1661 | } 1662 | }, 1663 | "wcwidth": { 1664 | "version": "1.0.1", 1665 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 1666 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 1667 | "requires": { 1668 | "defaults": "^1.0.3" 1669 | } 1670 | } 1671 | } 1672 | } 1673 | --------------------------------------------------------------------------------