Merge remote-tracking branch 'origin/master'

pull/67/head
xiaojunnuo 2021-02-02 11:10:25 +08:00
commit baf2779d73
82 changed files with 1306 additions and 12748 deletions

View File

@ -40,18 +40,24 @@
* 某些npm install的时候并且使用cnpm也无法安装时可以尝试开启npm代理再试
### 6、 增强功能
* 等你来探索
* 众所周知的原因,不能在这里展示太多,自己下载来安装看看吧
* 反正用了这个之后上面那些dns优选什么的特性好像都不香了
## 快速开始
目前仅支持windows
支持windows、Mac
### DevSidecar桌面应用
#### 1 下载安装包
下载安装包:
[阿里云](https://dev-sidecar.docmirror.cn/update/DevSidecar-1.3.1.exe)
阿里云直接下载
[windows版](http://dev-sidecar.docmirror.cn/update/DevSidecar-1.4.0.exe)
[Mac版](http://dev-sidecar.docmirror.cn/update/DevSidecar-1.4.0.dmg)
注意mac版安装需要在“系统偏好设置->安全性与隐私->通用”中解锁并允许应用安装
从Release下载
[Gitee Release](https://gitee.com/docmirror/dev-sidecar/releases)
[Github Release](https://github.com/docmirror/dev-sidecar/releases)
@ -62,10 +68,10 @@
#### 2 安装根证书
第一次打开会提示安装证书,根据提示操作即可
第一次打开会提示安装证书,根据提示操作即可
>根证书是本地随机生成的,所以不用担心根证书的安全问题
>根证书是本地随机生成的,所以不用担心根证书的安全问题
>你也可以在加速服务设置中自定义根证书PEM格式的证书与私钥
#### 3 开始加速吧

View File

@ -14,5 +14,5 @@
"ignore": []
}
},
"version": "1.3.1"
"version": "1.4.0"
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@docmirror/dev-sidecar",
"version": "1.3.1",
"version": "1.4.0",
"description": "给开发者的加速代理工具",
"main": "src/index.js",
"keywords": [
@ -16,7 +16,7 @@
"start": "node ./start"
},
"dependencies": {
"@docmirror/mitmproxy": "^1.3.0",
"@docmirror/mitmproxy": "^1.4.0",
"agentkeepalive": "^2.1.1",
"babel-preset-es2020": "^1.0.2",
"charset": "^1.0.0",
@ -53,7 +53,8 @@
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2"
"eslint-plugin-vue": "^6.2.2",
"mocha": "^8.2.1"
},
"eslintConfig": {
"root": true,
@ -73,5 +74,6 @@
"> 1%",
"last 2 versions",
"not dead"
]
],
"gitHead": "660c77e4279c1499f771270941526614f927bdf1"
}

View File

@ -1,8 +1,16 @@
const fs = require('fs')
const Shell = require('./shell')
const lodash = require('lodash')
const defConfig = require('./config/index.js')
const JSON5 = require('json5').default
console.log('JSON5', JSON5)
let configTarget = lodash.cloneDeep(defConfig)
function get () {
return configTarget
}
function _deleteDisabledItem (target) {
lodash.forEach(target, (item, key) => {
if (item == null) {
@ -13,11 +21,86 @@ function _deleteDisabledItem (target) {
}
})
}
const getDefaultConfigBasePath = function () {
return get().server.setting.userBasePath
}
function _getConfigPath () {
const dir = getDefaultConfigBasePath()
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir)
}
return dir + '/config.json5'
}
function doMerge (defObj, newObj) {
const defObj2 = { ...defObj }
const newObj2 = {}
for (const key in newObj) {
const newValue = newObj[key]
const defValue = defObj[key]
if (newValue != null && defValue == null) {
newObj2[key] = newValue
continue
}
if (lodash.isEqual(newValue, defValue)) {
delete defObj2[key]
continue
}
if (lodash.isArray(newValue)) {
delete defObj2[key]
newObj2[key] = newValue
continue
}
if (lodash.isObject(newValue)) {
newObj2[key] = doMerge(defValue, newValue)
delete defObj2[key]
continue
} else {
// 基础类型,直接覆盖
delete defObj2[key]
newObj2[key] = newValue
continue
}
}
// defObj 里面剩下的是被删掉的
lodash.forEach(defObj2, (defValue, key) => {
newObj2[key] = null
})
return newObj2
}
const configApi = {
get () {
return configTarget
/**
* 保存自定义的 config
* @param newConfig
*/
save (newConfig) {
// 对比默认config的异同
// configApi.set(newConfig)
const defConfig = configApi.getDefault()
const saveConfig = doMerge(defConfig, newConfig)
fs.writeFileSync(_getConfigPath(), JSON5.stringify(saveConfig, null, 2))
configApi.reload()
return saveConfig
},
doMerge,
/**
* 读取后合并配置
* @returns {*}
*/
reload () {
const path = _getConfigPath()
if (!fs.existsSync(path)) {
return configApi.get()
}
const file = fs.readFileSync(path)
const userConfig = JSON5.parse(file.toString())
configApi.set(userConfig)
const config = configApi.get()
return config || {}
},
get,
set (newConfig) {
if (newConfig == null) {
return

View File

@ -1,6 +1,6 @@
const path = require('path')
function getUserBasePath () {
const userHome = process.env.USERPROFILE
const userHome = process.env.USERPROFILE || process.env.HOME || '/'
return path.resolve(userHome, './.dev-sidecar')
}
function getRootCaCertPath () {
@ -67,8 +67,7 @@ module.exports = {
},
'github.githubassets.com': {
'.*': {
proxy: 'assets.fastgit.org',
backup: ['github.githubassets.com'],
proxy: 'assets-gh.docmirror.top/_proxy',
test: 'https://github.githubassets.com/favicons/favicon.svg',
desc: '静态资源加速'
}
@ -162,6 +161,8 @@ module.exports = {
},
mapping: {
'assets.fastgit.org': 'usa',
'*yarnpkg.com': 'usa',
'*cloudfront.net': 'usa',
'*github.io': 'usa',
'img.shields.io': 'usa',
'*.github.com': 'usa',
@ -170,7 +171,6 @@ module.exports = {
// "解决push的时候需要输入密码的问题",
'github.com': 'usa',
'*.vuepress.vuejs.org': 'usa',
'github.docmirror.cn': 'usa',
'gh.docmirror.top': 'usa'
}
}

View File

@ -2,6 +2,6 @@ module.exports = {
name: 'Git代理',
enabled: false,
setting: {
sslVerify: false
sslVerify: true // 是否关闭sslVerify
}
}

View File

@ -27,7 +27,7 @@ const Plugin = function (context) {
`git config --global http.proxy http://${ip}:${port} `,
`git config --global https.proxy http://${ip}:${port} `
]
if (pluginConfig.setting.sslVerify === true) {
if (config.get().plugin.git.setting.sslVerify === true) {
cmds.push('git config --global http.sslVerify false ')
}
@ -43,7 +43,7 @@ const Plugin = function (context) {
'git config --global --unset https.proxy ',
'git config --global --unset http.proxy '
]
if (pluginConfig.setting.sslVerify === true) {
if (config.get().plugin.git.setting.sslVerify === true) {
cmds.push('git config --global http.sslVerify true ')
}
const ret = await shell.exec(cmds, { type: 'cmd' })

View File

@ -9,6 +9,7 @@ module.exports = {
cafile: false,
NODE_EXTRA_CA_CERTS: false,
NODE_TLS_REJECT_UNAUTHORIZED: false,
yarnRegistry: undefined,
registry: 'https://registry.npmjs.org'// 可以选择切换官方或者淘宝镜像
},
// intercepts: {

View File

@ -39,7 +39,11 @@ const NodePlugin = function (context) {
async setNpmEnv (list) {
const cmds = []
for (const item of list) {
cmds.push(`npm config set ${item.key} ${item.value}`)
if (item.value != null) {
cmds.push(`npm config set ${item.key} ${item.value}`)
} else {
cmds.push(`npm config delete ${item.key}`)
}
}
const ret = await shell.exec(cmds, { type: 'cmd' })
return ret
@ -54,6 +58,29 @@ const NodePlugin = function (context) {
return ret
},
async setYarnEnv (list) {
const cmds = []
log.debug('yarn set:', JSON.stringify(list))
for (const item of list) {
if (item.value != null) {
cmds.push(`yarn config set ${item.key} ${item.value}`)
} else {
cmds.push(`yarn config delete ${item.key}`)
}
}
const ret = await shell.exec(cmds, { type: 'cmd' })
return ret
},
async unsetYarnEnv (list) {
const cmds = []
for (const item of list) {
cmds.push(`yarn config delete ${item} `)
}
const ret = await shell.exec(cmds, { type: 'cmd' })
return ret
},
async getVariables () {
const currentMap = await nodeApi.getNpmEnv()
const list = []
@ -81,8 +108,12 @@ const NodePlugin = function (context) {
}
},
async setRegistry (registry) {
await nodeApi.setNpmEnv([{ key: 'registry', value: registry }])
async setRegistry ({ registry, type }) {
if (type === 'npm') {
await nodeApi.setNpmEnv([{ key: 'registry', value: registry }])
} else {
await nodeApi.setYarnEnv([{ key: 'registry', value: registry }])
}
return true
},

View File

@ -1,6 +1,6 @@
module.exports = {
name: '梯子',
enabled: false,
enabled: true,
server: {
},
serverDefault: {

View File

@ -5,6 +5,12 @@ const lodash = require('lodash')
const fork = require('child_process').fork
const log = require('../../utils/util.log')
const fs = require('fs')
const path = require('path')
let JSON5 = require('json5')
if (JSON5.default) {
JSON5 = JSON5.default
}
let server
function fireStatus (status) {
event.fire('status', { key: 'server.enabled', value: status })
@ -58,8 +64,8 @@ const serverApi = {
serverConfig.plugin = allConfig.plugin
// fireStatus('ing') // 启动中
const basePath = serverConfig.setting.userBasePath
const runningConfig = basePath + '/running.json'
fs.writeFileSync(runningConfig, JSON.stringify(serverConfig))
const runningConfig = path.join(basePath, '/running.json')
fs.writeFileSync(runningConfig, JSON5.stringify(serverConfig, null, 2))
const serverProcess = fork(mitmproxyPath, [runningConfig])
server = {
id: serverProcess.pid,

View File

@ -16,5 +16,6 @@ module.exports = {
setSystemProxy,
async exec (cmds, args) {
return shell.getSystemShell().exec(cmds, args)
}
},
getSystemPlatform: shell.getSystemPlatform
}

View File

@ -9,6 +9,9 @@ const refreshInternetPs = require('./refresh-internet')
const PowerShell = require('node-powershell')
const log = require('../../../utils/util.log')
const path = require('path')
const childProcess = require('child_process')
const util = require('util')
const _exec = util.promisify(childProcess.exec)
const _lanIP = [
'localhost',
'127.*',
@ -119,11 +122,22 @@ const executor = {
return _winSetProxy(exec, ip, port)
}
},
async linux (exec, { port }) {
async linux (exec, params) {
throw Error('暂未实现此功能')
},
async mac (exec, { port }) {
throw Error('暂未实现此功能')
async mac (exec, params) {
// exec = _exec
let wifiAdaptor = await exec('sh -c "networksetup -listnetworkserviceorder | grep `route -n get 0.0.0.0 | grep \'interface\' | cut -d \':\' -f2` -B 1 | head -n 1 | cut -d \' \' -f2"')
wifiAdaptor = wifiAdaptor.trim()
if (params == null) {
await exec(`networksetup -setwebproxystate '${wifiAdaptor}' off`)
await exec(`networksetup -setsecurewebproxystate '${wifiAdaptor}' off`)
} else {
const { ip, port } = params
await exec(`networksetup -setwebproxy '${wifiAdaptor}' ${ip} ${port}`)
await exec(`networksetup -setsecurewebproxy '${wifiAdaptor}' ${ip} ${port}`)
}
}
}

View File

@ -8,10 +8,16 @@ const executor = {
return true
},
async linux (exec, { certPath }) {
throw Error('暂未实现此功能')
const cmds = ['open "' + certPath + '"']
// eslint-disable-next-line no-unused-vars
const ret = await exec(cmds, { type: 'cmd' })
return true
},
async mac (exec, { certPath }) {
throw Error('暂未实现此功能')
const cmds = ['open "' + certPath + '"']
// eslint-disable-next-line no-unused-vars
const ret = await exec(cmds, { type: 'cmd' })
return true
}
}

View File

@ -14,23 +14,25 @@ class SystemShell {
class LinuxSystemShell extends SystemShell {
static async exec (cmds) {
if (cmds instanceof String) {
if (typeof cmds === 'string') {
cmds = [cmds]
}
for (const cmd of cmds) {
await exec(cmd)
await childExec(cmd)
}
}
}
class DarwinSystemShell extends SystemShell {
static async exec (cmds) {
if (cmds instanceof String) {
if (typeof cmds === 'string') {
cmds = [cmds]
}
let ret
for (const cmd of cmds) {
await exec(cmd)
ret = await childExec(cmd)
}
return ret
}
}

View File

@ -1,14 +1,16 @@
// eslint-disable-next-line no-unused-vars
const server = require('@docmirror/mitmproxy')
let configPath = 'C:/Users/Administrator/.dev-sidecar/running.json'
const JSON5 = require('json5')
const path = require('path')
const home = process.env.HOME
let configPath = path.join(home, '.dev-sidecar/running.json')
if (process.argv && process.argv.length > 3) {
configPath = process.argv[2]
}
const fs = require('fs')
const path = require('path')
const configJson = fs.readFileSync(configPath)
const config = JSON.parse(configJson)
const config = JSON5.parse(configJson)
const scriptDir = '../../gui/extra/scripts/'
config.setting.script.defaultDir = path.join(__dirname, scriptDir)
server.start(config)

View File

@ -1,6 +1,14 @@
{
server: {
intercepts: {
'github1.githubassets.com': {
'.*': {
redirect: 'assets.fastgit.org',
test: 'https://github.githubassets.com/favicons/favicon.svg',
desc: '静态资源加速'
}
},
'github.githubassets.com': null,
'notify3.note.youdao.com': {
'/pushserver3/.*': {
abort: true

View File

@ -0,0 +1,20 @@
const config = require('../src/config')
config.set({
server: {
intercepts: {
'github1.githubassets.com': {
'.*': {
redirect: 'assets.fastgit.org',
test: 'https://github.githubassets.com/favicons/favicon.svg',
desc: '静态资源加速'
}
},
'github.githubassets.com': null
}
}
})
console.log(config.get())
config.reload()

View File

@ -0,0 +1,13 @@
const childProcess = require('child_process')
const util = require('util')
const exec = util.promisify(childProcess.exec)
async function test () {
const wifiAdaptor = (await exec('sh -c "networksetup -listnetworkserviceorder | grep `route -n get 0.0.0.0 | grep \'interface\' | cut -d \':\' -f2` -B 1 | head -n 1 | cut -d \' \' -f2"')).stdout.trim()
await exec(`networksetup -setwebproxystate '${wifiAdaptor}' off`)
return await exec(`networksetup -setsecurewebproxystate '${wifiAdaptor}' off`)
}
test().then((ret) => {
console.log('haha', ret)
})

View File

@ -93,10 +93,10 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@docmirror/mitmproxy@^1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@docmirror/mitmproxy/-/mitmproxy-1.2.2.tgz#a4d0020e073eaa68adb7902b5634ab2a1a3bc058"
integrity sha512-xW1xyqUfpGAZZTzqSjoQM0Mmq8VVEyvS8AiTUBvgpxUAYG2sqNCacLETwYfNBP1MStUBtGXKklcISpIY6+R+DA==
"@docmirror/mitmproxy@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@docmirror/mitmproxy/-/mitmproxy-1.3.3.tgz#dcef8fb8d4d552f556a6c60691db4d887efa40c6"
integrity sha512-YZdVaw3h+zv4Nq70JE4kwAMAtJJyCySSUI2NggG+y6dlr3Pztz7/yQG5Dx6WWYnUmfCWzDO+V3yHkxMBJ/ffGQ==
dependencies:
agentkeepalive "^2.1.1"
child_process "^1.0.2"
@ -193,6 +193,11 @@
resolved "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839391651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
integrity sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=
"@ungap/promise-all-settled@1.1.2":
version "1.1.2"
resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
"@vue/cli-plugin-eslint@~4.5.0":
version "4.5.7"
resolved "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.7.tgz?cache=0&sync_timestamp=1602060137408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-eslint%2Fdownload%2F%40vue%2Fcli-plugin-eslint-4.5.7.tgz#e66c0011f8d58bd86ee525f2062c6dab2c4272da"
@ -435,6 +440,11 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ansi-colors@4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
ansi-escapes@^4.2.1:
version "4.3.1"
resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
@ -447,6 +457,11 @@ ansi-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
ansi-regex@^4.1.0:
version "4.1.0"
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
@ -864,6 +879,11 @@ brorand@^1.0.1:
resolved "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
browser-stdout@1.3.1:
version "1.3.1"
resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
version "1.2.0"
resolved "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
@ -995,6 +1015,16 @@ callsites@^3.0.0:
resolved "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=
camelcase@^5.0.0:
version "5.3.1"
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelcase@^6.0.0:
version "6.2.0"
resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@ -1020,7 +1050,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.1.0:
chalk@^4.0.0, chalk@^4.1.0:
version "4.1.0"
resolved "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo=
@ -1043,6 +1073,21 @@ child_process@^1.0.2:
resolved "https://registry.npm.taobao.org/child_process/download/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a"
integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=
chokidar@3.4.3, chokidar@^3.4.1:
version "3.4.3"
resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
integrity sha1-wd84IxRI5FykrFiObHlXO6alfVs=
dependencies:
anymatch "~3.1.1"
braces "~3.0.2"
glob-parent "~5.1.0"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.5.0"
optionalDependencies:
fsevents "~2.1.2"
chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@ -1062,21 +1107,6 @@ chokidar@^2.1.8:
optionalDependencies:
fsevents "^1.2.7"
chokidar@^3.4.1:
version "3.4.3"
resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.3.tgz?cache=0&sync_timestamp=1602585381749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
integrity sha1-wd84IxRI5FykrFiObHlXO6alfVs=
dependencies:
anymatch "~3.1.1"
braces "~3.0.2"
glob-parent "~5.1.0"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.5.0"
optionalDependencies:
fsevents "~2.1.2"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@ -1136,6 +1166,15 @@ cli-width@^3.0.0:
resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=
cliui@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
dependencies:
string-width "^3.1.0"
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz?cache=0&sync_timestamp=1589682821772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@ -1360,6 +1399,13 @@ date-format@^3.0.0:
resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95"
integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==
debug@4.2.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.2.0"
resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=
dependencies:
ms "2.1.2"
debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -1374,12 +1420,15 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.2.0"
resolved "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502894812&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
integrity sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=
dependencies:
ms "2.1.2"
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decamelize@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
decode-uri-component@^0.2.0:
version "0.2.0"
@ -1440,6 +1489,11 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
diff@4.0.2:
version "4.0.2"
resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
diffie-hellman@^5.0.0:
version "5.0.3"
resolved "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@ -1671,6 +1725,11 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
escape-string-regexp@4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@ -2104,6 +2163,14 @@ find-root@^1.1.0:
resolved "https://registry.npm.taobao.org/find-root/download/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ=
find-up@5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies:
locate-path "^6.0.0"
path-exists "^4.0.0"
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@ -2135,6 +2202,11 @@ flat-cache@^2.0.1:
rimraf "2.6.3"
write "1.0.3"
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
flatted@^2.0.0, flatted@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
@ -2234,6 +2306,11 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
get-caller-file@^2.0.1:
version "2.0.5"
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@ -2278,7 +2355,7 @@ glob-to-regexp@^0.3.0:
resolved "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
glob@^7.1.3, glob@^7.1.4:
glob@7.1.6, glob@^7.1.3, glob@^7.1.4:
version "7.1.6"
resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=
@ -2326,6 +2403,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1589682809142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=
growl@1.10.5:
version "1.10.5"
resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@ -2416,6 +2498,11 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
he@1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@ -2713,6 +2800,11 @@ is-number@^7.0.0:
resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=
is-plain-obj@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@ -2818,7 +2910,7 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.1:
js-yaml@3.14.0, js-yaml@^3.13.1:
version "3.14.0"
resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
integrity sha1-p6NBcPJqIbsWJCTYray0ETpp5II=
@ -2995,11 +3087,25 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
locate-path@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
dependencies:
p-locate "^5.0.0"
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.7.0:
version "4.17.20"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
log-symbols@4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
dependencies:
chalk "^4.0.0"
log-symbols@^2.2.0:
version "2.2.0"
resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@ -3161,7 +3267,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
minimatch@^3.0.2, minimatch@^3.0.4:
minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@ -3204,6 +3310,37 @@ mkdirp@^0.5.1, mkdirp@^0.5.3:
dependencies:
minimist "^1.2.5"
mocha@^8.2.1:
version "8.2.1"
resolved "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39"
integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==
dependencies:
"@ungap/promise-all-settled" "1.1.2"
ansi-colors "4.1.1"
browser-stdout "1.3.1"
chokidar "3.4.3"
debug "4.2.0"
diff "4.0.2"
escape-string-regexp "4.0.0"
find-up "5.0.0"
glob "7.1.6"
growl "1.10.5"
he "1.2.0"
js-yaml "3.14.0"
log-symbols "4.0.0"
minimatch "3.0.4"
ms "2.1.2"
nanoid "3.1.12"
serialize-javascript "5.0.1"
strip-json-comments "3.1.1"
supports-color "7.2.0"
which "2.0.2"
wide-align "1.1.3"
workerpool "6.0.2"
yargs "13.3.2"
yargs-parser "13.1.2"
yargs-unparser "2.0.0"
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -3236,6 +3373,11 @@ nan@^2.12.1:
resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591684976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
integrity sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=
nanoid@3.1.12:
version "3.1.12"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"
integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==
nanoid@^2.1.0:
version "2.1.11"
resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-2.1.11.tgz?cache=0&sync_timestamp=1596064062089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
@ -3519,6 +3661,13 @@ p-limit@^2.0.0:
dependencies:
p-try "^2.0.0"
p-limit@^3.0.2:
version "3.1.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies:
yocto-queue "^0.1.0"
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@ -3533,6 +3682,13 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
p-locate@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
dependencies:
p-limit "^3.0.2"
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@ -3619,6 +3775,11 @@ path-exists@^3.0.0:
resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@ -3990,6 +4151,16 @@ require-context@^1.1.0:
dependencies:
node-dir "^0.1.17"
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-main-filename@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@ -4115,6 +4286,13 @@ semver@^6.1.0, semver@^6.1.2:
resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1589682805026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
serialize-javascript@5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
dependencies:
randombytes "^2.1.0"
serialize-javascript@^4.0.0:
version "4.0.0"
resolved "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1599740650381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
@ -4122,6 +4300,11 @@ serialize-javascript@^4.0.0:
dependencies:
randombytes "^2.1.0"
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
@ -4366,7 +4549,15 @@ streamroller@^2.2.4:
debug "^4.1.1"
fs-extra "^8.1.0"
string-width@^3.0.0:
"string-width@^1.0.2 || 2":
version "2.1.1"
resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
dependencies:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
string-width@^3.0.0, string-width@^3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE=
@ -4421,7 +4612,14 @@ strip-ansi@^3.0.0:
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^5.1.0, strip-ansi@^5.2.0:
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1589682795383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
@ -4450,11 +4648,18 @@ strip-indent@^2.0.0:
resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
strip-json-comments@^3.0.1:
strip-json-comments@3.1.1, strip-json-comments@^3.0.1:
version "3.1.1"
resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=
supports-color@7.2.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=
dependencies:
has-flag "^4.0.0"
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@ -4467,13 +4672,6 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=
dependencies:
has-flag "^4.0.0"
table@^5.2.3:
version "5.4.6"
resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@ -4883,6 +5081,11 @@ webpack@^4.0.0:
watchpack "^1.7.4"
webpack-sources "^1.4.1"
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which-typed-array@^1.1.2:
version "1.1.2"
resolved "https://registry.npm.taobao.org/which-typed-array/download/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2"
@ -4895,6 +5098,13 @@ which-typed-array@^1.1.2:
has-symbols "^1.0.1"
is-typed-array "^1.1.3"
which@2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
which@^1.2.9:
version "1.3.1"
resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1589682812246&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
@ -4902,6 +5112,13 @@ which@^1.2.9:
dependencies:
isexe "^2.0.0"
wide-align@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
string-width "^1.0.2 || 2"
winreg@^1.2.4:
version "1.2.4"
resolved "https://registry.npm.taobao.org/winreg/download/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b"
@ -4919,6 +5136,20 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
workerpool@6.0.2:
version "6.0.2"
resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438"
integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==
wrap-ansi@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
dependencies:
ansi-styles "^3.2.0"
string-width "^3.0.0"
strip-ansi "^5.0.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@ -4956,6 +5187,45 @@ yallist@^4.0.0:
resolved "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=
yargs-parser@13.1.2, yargs-parser@^13.1.2:
version "13.1.2"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-unparser@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
dependencies:
camelcase "^6.0.0"
decamelize "^4.0.0"
flat "^5.0.2"
is-plain-obj "^2.1.0"
yargs@13.3.2:
version "13.3.2"
resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
dependencies:
cliui "^5.0.0"
find-up "^3.0.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
string-width "^3.0.0"
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^13.1.2"
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yorkie@^2.0.0:
version "2.0.0"
resolved "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 B

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 941 B

After

Width:  |  Height:  |  Size: 949 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 B

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 941 B

After

Width:  |  Height:  |  Size: 949 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 353 KiB

View File

@ -1,6 +1,6 @@
{
"name": "@docmirror/dev-sidecar-gui",
"version": "1.3.1",
"version": "1.4.0",
"private": false,
"license": "MPL-2.0",
"scripts": {
@ -10,13 +10,14 @@
"electron": "vue-cli-service electron:serve",
"postinstall": "electron-builder install-app-deps",
"postuninstall": "electron-builder install-app-deps",
"electron:generate-icons": "electron-icon-builder --input=./public/icon.png --output=build --flatten"
"electron:icons": "electron-icon-builder --input=./public/logo/win.png --output=build --flatten",
"electron:icons-mac": "electron-icon-builder --input=./public/logo/mac.png --output=build --flatten"
},
"author": "docmirror.cn",
"main": "background.js",
"dependencies": {
"@docmirror/dev-sidecar": "^1.3.1",
"@docmirror/mitmproxy": "^1.3.0",
"@docmirror/dev-sidecar": "^1.4.0",
"@docmirror/mitmproxy": "^1.4.0",
"ant-design-vue": "^1.6.5",
"core-js": "^3.6.5",
"electron-baidu-tongji": "^1.0.5",
@ -70,5 +71,6 @@
"last 2 versions",
"not dead"
],
"__npminstall_done": false
"__npminstall_done": false,
"gitHead": "50b256b12aa1e03fe565c3f7fda9ca9b862064c0"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,18 @@
<svg id="svg_canvas" viewBox="0 0 280 280" width="280" height="280" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="scale(2)">
<g class="logo-entity" transform="translate(142,-1.5) scale(-1.30,1.30)">
<circle fill="#1B7FCD" cx="45.9" cy="55.2" r="17.5"
></circle>
<circle cx="23.5" cy="21.7" r="9.6" fill="#1B7FCD"></circle>
<circle cx="52.3" cy="23.9" r="6.9" fill="#1B7FCD"></circle>
<circle stroke="#1B7FCD" stroke-miterlimit="10" cx="32.5" cy="89.7" r="9.6" fill="#1B7FCD"></circle>
<circle fill="none" stroke="#1B7FCD" stroke-width="5" stroke-miterlimit="10" cx="84" cy="61.3" r="10.4"></circle>
<line fill="none" stroke="#1B7FCD" stroke-width="5" stroke-miterlimit="10" x1="37.9" y1="44.7" x2="26.2" y2="26.9"></line>
<line fill="none" stroke="#1B7FCD" stroke-width="5" stroke-miterlimit="10" x1="48.1" y1="44.7" x2="51.3" y2="27.7"></line>
<line fill="none" stroke="#1B7FCD" stroke-width="5" stroke-miterlimit="10" x1="40.1" y1="67.4" x2="34.9" y2="82.5"></line>
<line fill="none" stroke="#1B7FCD" stroke-width="5" stroke-miterlimit="10" x1="57" y1="55.5" x2="71.8" y2="58.6"></line>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>512x512@2x</title>
<defs>
<path d="M824,256.627066 C824,246.845101 824,237.062137 823.943901,227.279173 C823.894902,219.038203 823.799902,210.799233 823.575904,202.562263 C823.091908,184.609328 822.032915,166.502394 818.839939,148.749458 C815.601963,130.740524 810.314002,113.979585 801.981064,97.6166446 C793.789124,81.5337032 783.088204,66.8167567 770.320298,54.0578032 C757.555393,41.2988496 742.834502,30.6048886 726.745621,22.4179184 C710.365742,14.0829487 693.586866,8.79696797 675.558,5.55997976 C657.803131,2.37199136 639.691265,1.31499521 621.738398,0.829996978 C613.495459,0.60699779 605.25252,0.512998132 597.007581,0.461998318 C587.219653,0.401998536 577.431726,0.406998518 567.643798,0.406998518 L453.99664,0 L368.997269,0 L257.361095,0.406998518 C247.554168,0.406998518 237.74724,0.401998536 227.940313,0.461998318 C219.678374,0.512998132 211.420435,0.60699779 203.161496,0.829996978 C185.166629,1.31499521 167.013764,2.37299136 149.216896,5.56497974 C131.164029,8.80096796 114.360154,14.0849487 97.9582749,22.4139184 C81.8353943,30.6018886 67.0825035,41.2968496 54.2905981,54.0578032 C41.5006928,66.8157567 30.7797722,81.5297032 22.5728329,97.6096446 C14.2168948,113.980585 8.91893398,130.751524 5.67295801,148.770458 C2.47698167,166.516394 1.4179895,184.617328 0.930993109,202.562263 C0.708994752,210.800233 0.612995463,219.039203 0.562995833,227.279173 C0.502996277,237.063137 0,249.216093 0,258.999057 L0,369.088656 L0,454.998343 L0.50799624,567.426934 C0.50799624,577.222898 0.503996269,587.018863 0.562995833,596.814827 C0.612995463,605.066797 0.708994752,613.316767 0.931993101,621.565737 C1.4179895,639.541672 2.47898165,657.674606 5.67795797,675.451541 C8.92293395,693.484475 14.2198947,710.269414 22.5688329,726.653354 C30.7767722,742.759296 41.4996928,757.495242 54.2905981,770.272196 C67.0815035,783.049149 81.8303943,793.75711 97.950275,801.95608 C114.362153,810.30205 131.174029,815.595031 149.237895,818.836019 C167.026764,822.029007 185.173629,823.088003 203.161496,823.573002 C211.420435,823.796001 219.679374,823.891 227.941313,823.941 C237.74824,824 247.554168,824 257.361095,824 L370.006261,824 L455.216631,824 L567.643798,824 C577.431726,824 587.219653,824 597.007581,823.941 C605.25252,823.891 613.495459,823.796001 621.738398,823.573002 C639.698265,823.087003 657.816131,822.027007 675.578999,818.832019 C693.596866,815.591031 710.367742,810.30005 726.738621,801.95908 C742.830502,793.76111 757.554393,783.051149 770.320298,770.272196 C783.086204,757.497242 793.786124,742.763296 801.978064,726.660354 C810.316002,710.268414 815.603963,693.475475 818.843939,675.430541 C822.033915,657.660606 823.091908,639.534672 823.576904,621.565737 C823.799902,613.315767 823.894902,605.065797 823.943901,596.814827 C824,587.018863 824,577.222898 824,567.426934 C824,567.426934 824,456.983336 824,454.998343 L824,368.998657 C824,367.532662 824,256.627066 824,256.627066" id="path-1"></path>
<filter x="-2.4%" y="-1.2%" width="104.9%" height="104.9%" filterUnits="objectBoundingBox" id="filter-3">
<feOffset dx="0" dy="10" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="Template---Icons---App" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="App-Icons---@2x" transform="translate(0.000000, -590.000000)">
<g id="512x512@2x" transform="translate(0.000000, 590.000000)">
<g id="Artwork" transform="translate(100.000000, 100.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Mask">
<use fill="black" fill-opacity="1" filter="url(#filter-3)" xlink:href="#path-1"></use>
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="编组" mask="url(#mask-2)">
<g>
<rect id="矩形" stroke="#979797" fill="#1B7FCD" x="0.5" y="0.5" width="823" height="823"></rect>
<g transform="translate(411.500000, 411.500000) scale(-1, 1) translate(-411.500000, -411.500000) translate(92.000000, 65.000000)">
<ellipse id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="253.5" cy="343" rx="138.5" ry="139"></ellipse>
<circle id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="76" cy="76" r="76"></circle>
<circle id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="304.5" cy="94.5" r="55.5"></circle>
<circle id="椭圆形" stroke="#FFFFFF" stroke-width="2.8" fill="#FFFFFF" fill-rule="nonzero" cx="147" cy="617" r="76"></circle>
<circle id="椭圆形" stroke="#FFFFFF" stroke-width="50" cx="556.5" cy="390.5" r="82.5"></circle>
<line x1="189" y1="260" x2="97" y2="118" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="272" y1="258" x2="297" y2="123" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="208" y1="439" x2="167" y2="560" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="342" y1="344" x2="474" y2="368" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>window</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="window">
<rect id="矩形" stroke="#979797" fill="#1B7FCD" fill-rule="nonzero" x="0.5" y="0.5" width="1023" height="1023" rx="140"></rect>
<g id="编组" transform="translate(512.000000, 511.000000) scale(-1, 1) translate(-512.000000, -511.000000) translate(113.000000, 78.000000)">
<ellipse id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="316.962617" cy="428.651363" rx="172.775701" ry="173.945481"></ellipse>
<ellipse id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="95.088785" cy="95.0487805" rx="95.088785" ry="95.0487805"></ellipse>
<ellipse id="椭圆形" fill="#FFFFFF" fill-rule="nonzero" cx="380.976636" cy="117.413199" rx="68.9859813" ry="68.9569584"></ellipse>
<ellipse id="椭圆形" stroke="#FFFFFF" stroke-width="2.8" fill="#FFFFFF" fill-rule="nonzero" cx="183.341121" cy="770.95122" rx="95.088785" ry="95.0487805"></ellipse>
<ellipse id="椭圆形" stroke="#FFFFFF" stroke-width="50" cx="694.831776" cy="488.289813" rx="103.168224" ry="103.124821"></ellipse>
<line x1="236.168224" y1="325.526542" x2="121.813084" y2="147.853659" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="339.336449" y1="323.041607" x2="370.411215" y2="154.065997" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="259.785047" y1="549.170732" x2="208.82243" y2="699.509326" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
<line x1="427.588785" y1="429.893831" x2="591.663551" y2="460.955524" id="路径" stroke="#FFFFFF" stroke-width="50"></line>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

View File

@ -40,7 +40,11 @@ function setTray (app) {
}
]
// 设置系统托盘图标
const iconPath = path.join(__dirname, '../extra/icons/128x128.png')
let icon = '128x128.png'
if (isMac) {
icon = '16x16.png'
}
const iconPath = path.join(__dirname, '../extra/icons/', icon)
const appTray = new Tray(iconPath)
// 图标的上下文菜单
@ -119,9 +123,19 @@ async function quit (app, callback) {
tray.displayBalloon({ title: '正在关闭', content: '关闭中,请稍候。。。' })
}
await beforeQuit()
forceClose = true
app.quit()
}
// eslint-disable-next-line no-unused-vars
function setDock () {
const { app } = require('electron')
if (process.platform === 'darwin') {
app.whenReady().then(() => {
app.dock.setIcon(path.join(__dirname, '../build/mac/512x512.png'))
})
}
}
// -------------执行开始---------------
app.disableHardwareAcceleration() // 禁用gpu
@ -135,6 +149,9 @@ if (!isFirstInstance) {
} else {
app.on('before-quit', async (event) => {
log.info('before-quit')
if (process.platform === 'darwin') {
quit(app)
}
})
app.on('second-instance', (event, commandLine, workingDirectory) => {
log.info('new app started', commandLine)
@ -156,11 +173,15 @@ if (!isFirstInstance) {
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (win === null) {
if (win == null) {
createWindow()
} else {
win.show()
}
})
// setDock()
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
@ -175,7 +196,7 @@ if (!isFirstInstance) {
}
try {
createWindow()
const context = { win, app, beforeQuit, ipcMain, dialog,log }
const context = { win, app, beforeQuit, ipcMain, dialog, log }
backend.install(context) // 模块安装
} catch (err) {
log.info('err', err)
@ -190,6 +211,8 @@ if (!isFirstInstance) {
})
}
setDock()
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === 'win32') {

View File

@ -33,6 +33,9 @@ const localApi = {
},
getConfigDir () {
return getDefaultConfigBasePath()
},
getSystemPlatform () {
return DevSidecar.api.shell.getSystemPlatform()
}
},
/**
@ -86,35 +89,6 @@ const localApi = {
restart () {
return DevSidecar.api.server.restart({ mitmproxyPath })
}
},
config: {
/**
* 保存自定义的 config
* @param newConfig
*/
save (newConfig) {
// 对比默认config的异同
DevSidecar.api.config.set(newConfig)
const defConfig = DevSidecar.api.config.getDefault()
const saveConfig = doMerge(defConfig, newConfig)
fs.writeFileSync(_getConfigPath(), JSON5.stringify(saveConfig, null, 2))
return saveConfig
},
/**
* 读取后合并配置
* @returns {*}
*/
reload () {
const path = _getConfigPath()
if (!fs.existsSync(path)) {
return DevSidecar.api.config.get()
}
const file = fs.readFileSync(path)
const userConfig = JSON5.parse(file.toString())
DevSidecar.api.config.set(userConfig)
const config = DevSidecar.api.config.get()
return config || {}
}
}
}
@ -136,51 +110,6 @@ function _getSettingsPath () {
}
return dir + '/setting.json5'
}
function _getConfigPath () {
const dir = getDefaultConfigBasePath()
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir)
}
return dir + '/config.json5'
}
function doMerge (defObj, newObj) {
const defObj2 = { ...defObj }
const newObj2 = {}
for (const key in newObj) {
const newValue = newObj[key]
const defValue = defObj[key]
if (newValue != null && defValue == null) {
newObj2[key] = newValue
continue
}
if (lodash.isEqual(newValue, defValue)) {
delete defObj2[key]
continue
}
if (lodash.isArray(newValue)) {
delete defObj2[key]
newObj2[key] = newValue
continue
}
if (lodash.isObject(newValue)) {
newObj2[key] = doMerge(defValue, newValue)
delete defObj2[key]
continue
} else {
// 基础类型,直接覆盖
delete defObj2[key]
newObj2[key] = newValue
continue
}
}
// defObj 里面剩下的是被删掉的
lodash.forEach(defObj2, (defValue, key) => {
newObj2[key] = null
})
return newObj2
}
function invoke (api, param) {
let target = lodash.get(localApi, api)
@ -217,7 +146,7 @@ export default {
})
// 合并用户配置
localApi.config.reload()
DevSidecar.api.config.reload()
// 启动所有
localApi.startup()
},

View File

@ -1,10 +1,11 @@
// eslint-disable-next-line no-unused-vars
const server = require('@docmirror/mitmproxy')
const JSON5 = require('json5').default
const configPath = process.argv[2]
const fs = require('fs')
const path = require('path')
const configJson = fs.readFileSync(configPath)
const config = JSON.parse(configJson)
const config = JSON5.parse(configJson)
let scriptDir = '../extra/scripts/'
if (process.env.NODE_ENV === 'development') {
scriptDir = '../extra/scripts/'

View File

@ -95,15 +95,15 @@ function updateHandle (app, win, beforeQuit, updateUrl, log) {
export default {
install (context) {
const { app, win, beforeQuit, log } = context
let updateUrl = 'http://dev-sidecar.docmirror.cn/update/'
const updateUrl = 'http://dev-sidecar.docmirror.cn/update/'
if (process.env.NODE_ENV === 'development') {
Object.defineProperty(app, 'isPackaged', {
get () {
return true
}
})
// updateUrl = 'https://dev-sidecar.docmirror.cn/update/'
updateUrl = 'http://localhost/dev-sidecar/'
// updateUrl = 'http://dev-sidecar.docmirror.cn/update/'
// updateUrl = 'http://localhost/dev-sidecar/'
}
updateHandle(app, win, beforeQuit, updateUrl, log)
}

View File

@ -56,6 +56,21 @@ function install (app, api) {
if (updateParams.autoDownload !== false) {
app.$message.info('发现新版本,正在下载中...')
updateParams.downloading = true
api.shell.getSystemPlatform().then((platform) => {
if (platform === 'mac') {
app.$notification.open({
duration: 10,
message: 'Mac暂不支持自动升级',
description:
'请前往github或gitee项目主页下载新版本手动安装听说苹果对于Electron开发的应用审核不好过。。。。好吧我承认是因为没有钱买苹果开发者账号┓( ´∀` )┏',
onClick: () => {
}
})
}
})
api.update.downloadUpdate()
return
}

View File

@ -15,10 +15,18 @@
<a-button type="primary" style="float:right" @click="doSetup()"></a-button>
</template>
<div>
请按如下步骤将<b>本地随机生成</b>的根证书添加到<b>信任的根证书颁发机构</b><br/>
证书是本地随机生成所以信任它是安全的
<b>本应用正常使用必须安装和信任CA根证书</b>该证书是应用启动时本地随机生成的<br/>
<template v-if="this.systemPlatform === 'mac'">
1点击右上角点此去安装按钮打开钥匙串<br/>
2然后按如下图步骤将随机生成的根证书设置为始终信任<br/>
3可能需要重新启动应用和浏览器才能生效<br/>
</template>
<template v-else>
1点击右上角点此去安装按钮打开证书<br/>
2然后按如下图步骤将根证书添加到<b>信任的根证书颁发机构</b><br/>
</template>
</div>
<img width="100%" src="/setup.png" />
<img width="100%" :src="setupImage" />
</a-drawer>
</template>
@ -40,9 +48,22 @@ export default {
},
data () {
return {
systemPlatform: 'win'
}
},
created () {
async created () {
const platform = await this.$api.info.getSystemPlatform()
console.log('11', platform)
this.systemPlatform = platform
},
computed: {
setupImage () {
if (this.systemPlatform === 'mac') {
return '/setup-mac.png'
} else {
return '/setup.png'
}
}
},
methods: {
afterVisibleChange (val) {

View File

@ -132,18 +132,18 @@ export default {
return
}
this.$confirm({
title: '提示',
content: '第一次使用,请先安装CA根证书',
cancelText: '关闭此提示',
title: '第一次使用请先安装CA根证书',
content: '本应用正常使用,必须安装和信任CA根证书',
cancelText: '下次',
okText: '去安装',
onOk: () => {
this.openSetupCa()
},
onCancel: () => {
this.setting.rootCa = this.setting.rootCa || {}
const rootCa = this.setting.rootCa
rootCa.noTip = true
this.$api.setting.save(this.setting)
// const rootCa = this.setting.rootCa
// rootCa.noTip = true
// this.$api.setting.save(this.setting)
}
})
})

View File

@ -25,7 +25,7 @@
</a-checkbox>
npm代理启用后必须关闭
</a-form-item>
<a-form-item label="切换registry" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item label="npm registry" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-radio-group v-model="config.plugin.node.setting.registry" @change="onSwitchRegistry"
default-value="https://registry.npmjs.org" button-style="solid">
<a-radio-button value="https://registry.npmjs.org">
@ -37,6 +37,17 @@
</a-radio-group>
</a-form-item>
<a-form-item label="yarn registry" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-radio-group v-model="config.plugin.node.setting.yarnRegistry" :default-value="null" @change="onSwitchYarnRegistry" button-style="solid">
<a-radio-button :value="null">
yarn
</a-radio-button>
<a-radio-button value="https://registry.npm.taobao.org">
taobao
</a-radio-button>
</a-radio-group>
</a-form-item>
<a-form-item label="镜像变量设置" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-checkbox v-model="config.plugin.node.startup.variables">
自动设置
@ -93,12 +104,19 @@ export default {
})
},
async onSwitchRegistry (event) {
await this.setRegistry(event.target.value)
await this.setRegistry({ registry: event.target.value, type: 'npm' })
this.$message.success('切换成功')
},
async setRegistry (registry) {
async onSwitchYarnRegistry (event) {
const registry = event.target.value
console.log('registry', registry)
await this.setRegistry({ registry, type: 'yarn' })
this.$message.success('切换成功')
},
async setRegistry ({ registry, type }) {
this.apply()
await this.$api.plugin.node.setRegistry(registry)
console.log('type', type)
await this.$api.plugin.node.setRegistry({ registry, type })
},
setNpmVariableAll () {
this.saveConfig().then(() => {

View File

@ -1,7 +1,7 @@
<template>
<ds-container>
<template slot="header">
Ladder
梯子
<span>
<a-button type="primary" @click="openExternal('https://github.com/docmirror/dev-sidecar-doc/blob/main/ow.md')"></a-button>
</span>
@ -9,12 +9,13 @@
<div v-if="config">
<a-form layout="horizontal">
<a-form-item label="Ladder" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item label="梯子" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-checkbox v-model="config.plugin.overwall.enabled">
启用
</a-checkbox>
<div>这是什么功能你懂的偷偷的用别声张(不要看视频流量挺小的)</div>
<div>建议按右上角说明自建服务端</div>
<div>仅供技术学习与探讨</div>
</a-form-item>
<a-form-item label="PAC" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-checkbox v-model="config.plugin.overwall.pac.enabled">

View File

@ -30,6 +30,7 @@
</a-form-item>
<a-form-item label="代理端口" :label-col="labelCol" :wrapper-col="wrapperCol" >
<a-input v-model="config.server.port"/>
<div>修改后需要重启应用</div>
</a-form-item>
<a-form-item label="校验SSL" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-checkbox v-model="config.server.setting.NODE_TLS_REJECT_UNAUTHORIZED">

View File

@ -52,11 +52,13 @@ module.exports = {
allowElevation: true,
allowToChangeInstallationDirectory: true
},
mac: {
icon: 'build/mac/icon.icns'
},
publish: {
provider: 'generic',
url: ''
},
compression: 'maximum'
}
},
chainWebpackMainProcess (config) {
config.entry('mitmproxy').add(path.join(__dirname, 'src/bridge/mitmproxy.js'))

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@docmirror/mitmproxy",
"version": "1.3.0",
"version": "1.4.0",
"description": "",
"main": "src/index.js",
"keywords": [
@ -63,5 +63,6 @@
"> 1%",
"last 2 versions",
"not dead"
]
],
"gitHead": "660c77e4279c1499f771270941526614f927bdf1"
}

View File

@ -7,7 +7,7 @@ config.caKeyFileName = 'dev-sidecar.ca.key.pem'
config.defaultPort = 1181
config.caName = 'This certificate is generated locally'
config.caName = 'DevSidecar - This certificate is generated locally'
config.caBasePath = buildDefaultCABasePath()
@ -18,7 +18,7 @@ config.setDefaultCABasePath = function (path) {
config.caBasePath = path
}
function buildDefaultCABasePath () {
const userHome = process.env.USERPROFILE
const userHome = process.env.USERPROFILE || process.env.HOME || '/'
return path.resolve(userHome, './.dev-sidecar')
}

View File

@ -27,7 +27,7 @@ module.exports = function createOverWallIntercept (overWallConfig) {
if (keys.length === 0) {
return null
}
const regexpMap = matchUtil.domainMapRegexply(overWallConfig.intercepts)
const regexpMap = matchUtil.domainMapRegexply(overWallConfig.targets)
return {
sslConnectInterceptor: (req, cltSocket, head) => {
const hostname = req.url.split(':')[0]

View File

@ -19,7 +19,7 @@ const pki = forge.pki
// }
utils.createCA = function (CN) {
const keys = pki.rsa.generateKeyPair(2046)
const keys = pki.rsa.generateKeyPair(2048)
const cert = pki.createCertificate()
cert.publicKey = keys.publicKey
cert.serialNumber = (new Date()).getTime() + ''
@ -74,7 +74,7 @@ utils.covertNodeCertToForgeCert = function (originCertificate) {
}
utils.createFakeCertificateByDomain = function (caKey, caCert, domain) {
const keys = pki.rsa.generateKeyPair(2046)
const keys = pki.rsa.generateKeyPair(2048)
const cert = pki.createCertificate()
cert.publicKey = keys.publicKey
@ -156,7 +156,7 @@ utils.createFakeCertificateByDomain = function (caKey, caCert, domain) {
utils.createFakeCertificateByCA = function (caKey, caCert, originCertificate) {
const certificate = utils.covertNodeCertToForgeCert(originCertificate)
const keys = pki.rsa.generateKeyPair(2046)
const keys = pki.rsa.generateKeyPair(2048)
const cert = pki.createCertificate()
cert.publicKey = keys.publicKey