mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-07 11:04:11 +08:00
✨ API 部分迁移完成
This commit is contained in:
parent
a9827c6db1
commit
951f21f5fa
@ -1,4 +1,5 @@
|
||||
{
|
||||
"name": "rubick-system-feature",
|
||||
"pluginName": "rubick 系统菜单",
|
||||
"description": "rubick 系统菜单",
|
||||
"main": "index.html",
|
||||
|
@ -52,9 +52,6 @@ const store = useStore();
|
||||
const init = () => store.dispatch("init");
|
||||
init();
|
||||
|
||||
window.rubick.setSubInput((data: any) => {
|
||||
console.log(data);
|
||||
}, "插件市场");
|
||||
</script>
|
||||
<style lang="less">
|
||||
* {
|
||||
|
393
package-lock.json
generated
393
package-lock.json
generated
@ -3118,6 +3118,42 @@
|
||||
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
|
||||
"dev": true
|
||||
},
|
||||
"abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
|
||||
"requires": {
|
||||
"event-target-shim": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"abstract-leveldown": {
|
||||
"version": "6.2.3",
|
||||
"resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
|
||||
"integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
|
||||
"requires": {
|
||||
"buffer": "^5.5.0",
|
||||
"immediate": "^3.2.3",
|
||||
"level-concat-iterator": "~2.0.0",
|
||||
"level-supports": "~1.0.0",
|
||||
"xtend": "~4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"immediate": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
|
||||
"integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"accepts": {
|
||||
"version": "1.3.7",
|
||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||
@ -3443,6 +3479,11 @@
|
||||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"argsarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
|
||||
"integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs="
|
||||
},
|
||||
"arr-diff": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||
@ -5079,6 +5120,11 @@
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
||||
"dev": true
|
||||
},
|
||||
"clone-buffer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
|
||||
"integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
|
||||
},
|
||||
"clone-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
||||
@ -5561,8 +5607,7 @@
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "6.0.0",
|
||||
@ -6178,6 +6223,15 @@
|
||||
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
|
||||
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
|
||||
},
|
||||
"deferred-leveldown": {
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
|
||||
"integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
|
||||
"requires": {
|
||||
"abstract-leveldown": "~6.2.1",
|
||||
"inherits": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"define-properties": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
|
||||
@ -6557,6 +6611,11 @@
|
||||
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
|
||||
"dev": true
|
||||
},
|
||||
"double-ended-queue": {
|
||||
"version": "2.1.0-0",
|
||||
"resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
|
||||
"integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
|
||||
},
|
||||
"duplexer": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
|
||||
@ -6993,6 +7052,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"encoding-down": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
|
||||
"integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
|
||||
"requires": {
|
||||
"abstract-leveldown": "^6.2.1",
|
||||
"inherits": "^2.0.3",
|
||||
"level-codec": "^9.0.0",
|
||||
"level-errors": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"end-of-stream": {
|
||||
"version": "1.4.4",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||
@ -7001,6 +7071,14 @@
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"end-stream": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz",
|
||||
"integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=",
|
||||
"requires": {
|
||||
"write-stream": "~0.4.3"
|
||||
}
|
||||
},
|
||||
"enhanced-resolve": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
|
||||
@ -7045,7 +7123,6 @@
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
|
||||
"integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prr": "~1.0.1"
|
||||
}
|
||||
@ -7440,6 +7517,11 @@
|
||||
"integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"event-target-shim": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
||||
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
|
||||
},
|
||||
"eventemitter3": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||
@ -7806,6 +7888,14 @@
|
||||
"pend": "~1.2.0"
|
||||
}
|
||||
},
|
||||
"fetch-cookie": {
|
||||
"version": "0.10.1",
|
||||
"resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.10.1.tgz",
|
||||
"integrity": "sha512-beB+VEd4cNeVG1PY+ee74+PkuCQnik78pgLi5Ah/7qdUfov8IctU0vLUbBT8/10Ma5GMBeI4wtxhGrEfKNYs2g==",
|
||||
"requires": {
|
||||
"tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
|
||||
}
|
||||
},
|
||||
"figgy-pudding": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
|
||||
@ -9109,8 +9199,7 @@
|
||||
"ieee754": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
|
||||
},
|
||||
"iferr": {
|
||||
"version": "0.1.5",
|
||||
@ -10215,6 +10304,139 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"level": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz",
|
||||
"integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==",
|
||||
"requires": {
|
||||
"level-js": "^5.0.0",
|
||||
"level-packager": "^5.1.0",
|
||||
"leveldown": "^5.4.0"
|
||||
}
|
||||
},
|
||||
"level-codec": {
|
||||
"version": "9.0.2",
|
||||
"resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
|
||||
"integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
|
||||
"requires": {
|
||||
"buffer": "^5.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"level-concat-iterator": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
|
||||
"integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw=="
|
||||
},
|
||||
"level-errors": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
|
||||
"integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
|
||||
"requires": {
|
||||
"errno": "~0.1.1"
|
||||
}
|
||||
},
|
||||
"level-iterator-stream": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
|
||||
"integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "^3.4.0",
|
||||
"xtend": "^4.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"level-js": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz",
|
||||
"integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==",
|
||||
"requires": {
|
||||
"abstract-leveldown": "~6.2.3",
|
||||
"buffer": "^5.5.0",
|
||||
"inherits": "^2.0.3",
|
||||
"ltgt": "^2.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"requires": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"level-packager": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
|
||||
"integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
|
||||
"requires": {
|
||||
"encoding-down": "^6.3.0",
|
||||
"levelup": "^4.3.2"
|
||||
}
|
||||
},
|
||||
"level-supports": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
|
||||
"integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
|
||||
"requires": {
|
||||
"xtend": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"level-write-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=",
|
||||
"requires": {
|
||||
"end-stream": "~0.1.0"
|
||||
}
|
||||
},
|
||||
"leveldown": {
|
||||
"version": "5.6.0",
|
||||
"resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz",
|
||||
"integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==",
|
||||
"requires": {
|
||||
"abstract-leveldown": "~6.2.1",
|
||||
"napi-macros": "~2.0.0",
|
||||
"node-gyp-build": "~4.1.0"
|
||||
}
|
||||
},
|
||||
"levelup": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
|
||||
"integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
|
||||
"requires": {
|
||||
"deferred-leveldown": "~5.3.0",
|
||||
"level-errors": "~2.0.0",
|
||||
"level-iterator-stream": "~4.0.0",
|
||||
"level-supports": "~1.0.0",
|
||||
"xtend": "~4.0.0"
|
||||
}
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||
@ -10442,6 +10664,11 @@
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"ltgt": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
|
||||
"integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="
|
||||
},
|
||||
"magic-string": {
|
||||
"version": "0.25.7",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
|
||||
@ -11037,6 +11264,11 @@
|
||||
"resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.1.0.tgz",
|
||||
"integrity": "sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw=="
|
||||
},
|
||||
"napi-macros": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
|
||||
"integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
|
||||
},
|
||||
"native-request": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz",
|
||||
@ -11083,12 +11315,22 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
|
||||
"integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
|
||||
},
|
||||
"node-forge": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
|
||||
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
|
||||
"dev": true
|
||||
},
|
||||
"node-gyp-build": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz",
|
||||
"integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ=="
|
||||
},
|
||||
"node-ipc": {
|
||||
"version": "9.2.1",
|
||||
"resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz",
|
||||
@ -12616,6 +12858,105 @@
|
||||
"integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
|
||||
"dev": true
|
||||
},
|
||||
"pouchdb": {
|
||||
"version": "7.2.2",
|
||||
"resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.2.2.tgz",
|
||||
"integrity": "sha512-5gf5nw5XH/2H/DJj8b0YkvG9fhA/4Jt6kL0Y8QjtztVjb1y4J19Rg4rG+fUbXu96gsUrlyIvZ3XfM0b4mogGmw==",
|
||||
"requires": {
|
||||
"abort-controller": "3.0.0",
|
||||
"argsarray": "0.0.1",
|
||||
"buffer-from": "1.1.1",
|
||||
"clone-buffer": "1.0.0",
|
||||
"double-ended-queue": "2.1.0-0",
|
||||
"fetch-cookie": "0.10.1",
|
||||
"immediate": "3.3.0",
|
||||
"inherits": "2.0.4",
|
||||
"level": "6.0.1",
|
||||
"level-codec": "9.0.2",
|
||||
"level-write-stream": "1.0.0",
|
||||
"leveldown": "5.6.0",
|
||||
"levelup": "4.4.0",
|
||||
"ltgt": "2.2.1",
|
||||
"node-fetch": "2.6.0",
|
||||
"readable-stream": "1.1.14",
|
||||
"spark-md5": "3.0.1",
|
||||
"through2": "3.0.2",
|
||||
"uuid": "8.1.0",
|
||||
"vuvuzela": "1.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer-from": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
|
||||
},
|
||||
"immediate": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
|
||||
"integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.1.14",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.1",
|
||||
"isarray": "0.0.1",
|
||||
"string_decoder": "~0.10.x"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "0.10.31",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||
},
|
||||
"through2": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
|
||||
"integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.4",
|
||||
"readable-stream": "2 || 3"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz",
|
||||
"integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||
@ -12705,8 +13046,7 @@
|
||||
"prr": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
|
||||
"dev": true
|
||||
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
|
||||
},
|
||||
"pseudomap": {
|
||||
"version": "1.0.2",
|
||||
@ -12717,8 +13057,7 @@
|
||||
"psl": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
||||
},
|
||||
"public-encrypt": {
|
||||
"version": "4.0.3",
|
||||
@ -13415,8 +13754,7 @@
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"safe-regex": {
|
||||
"version": "1.1.0",
|
||||
@ -14057,6 +14395,11 @@
|
||||
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
|
||||
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
|
||||
},
|
||||
"spark-md5": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.1.tgz",
|
||||
"integrity": "sha512-0tF3AGSD1ppQeuffsLDIOWlKUd3lS92tFxcsrh5Pe3ZphhnoK+oXIBTzOAThZCiuINZLvpiLH/1VS1/ANEJVig=="
|
||||
},
|
||||
"spdx-correct": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
|
||||
@ -14317,7 +14660,6 @@
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
@ -14868,7 +15210,6 @@
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"psl": "^1.1.28",
|
||||
"punycode": "^2.1.1"
|
||||
@ -15514,8 +15855,7 @@
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"dev": true
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"util.promisify": {
|
||||
"version": "1.0.1",
|
||||
@ -16128,6 +16468,11 @@
|
||||
"@vue/devtools-api": "^6.0.0-beta.11"
|
||||
}
|
||||
},
|
||||
"vuvuzela": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz",
|
||||
"integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws="
|
||||
},
|
||||
"warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
@ -16966,6 +17311,21 @@
|
||||
"typedarray-to-buffer": "^3.1.5"
|
||||
}
|
||||
},
|
||||
"write-stream": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz",
|
||||
"integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=",
|
||||
"requires": {
|
||||
"readable-stream": "~0.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz",
|
||||
"integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "6.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
|
||||
@ -16989,8 +17349,7 @@
|
||||
"xtend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
},
|
||||
"y18n": {
|
||||
"version": "4.0.3",
|
||||
|
@ -22,6 +22,7 @@
|
||||
"got": "^11.8.3",
|
||||
"libnpmsearch": "^3.1.2",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"pouchdb": "^7.2.2",
|
||||
"vue": "^3.0.0",
|
||||
"vue-router": "^4.0.0-0",
|
||||
"vuex": "^4.0.0-0",
|
||||
|
@ -1,4 +1,5 @@
|
||||
const {ipcRenderer} = require("electron");
|
||||
const { ipcRenderer, shell } = require("electron");
|
||||
const os = require("os");
|
||||
|
||||
const ipcSendSync = (type, data) => {
|
||||
const returnValue = ipcRenderer.sendSync("msg-trigger", {
|
||||
@ -9,11 +10,18 @@ const ipcSendSync = (type, data) => {
|
||||
return returnValue;
|
||||
};
|
||||
|
||||
const ipcSend = (type, data) => {
|
||||
ipcRenderer.send("msg-trigger", {
|
||||
type,
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
window.rubick = {
|
||||
hooks: {},
|
||||
// 事件
|
||||
onPluginEnter(cb) {
|
||||
console.log(window.rubick.hooks)
|
||||
console.log(window.rubick.hooks);
|
||||
typeof cb === "function" && (window.rubick.hooks.onPluginEnter = cb);
|
||||
},
|
||||
onPluginReady(cb) {
|
||||
@ -24,9 +32,9 @@ window.rubick = {
|
||||
},
|
||||
|
||||
// 窗口交互
|
||||
hideMainWindow() {
|
||||
ipcSendSync("hideMainWindow");
|
||||
},
|
||||
// hideMainWindow() {
|
||||
// ipcSendSync("hideMainWindow");
|
||||
// },
|
||||
showMainWindow() {
|
||||
ipcSendSync("showMainWindow");
|
||||
},
|
||||
@ -44,4 +52,66 @@ window.rubick = {
|
||||
isFocus,
|
||||
});
|
||||
},
|
||||
removeSubInput() {
|
||||
delete window.rubick.hooks.onSubInputChange;
|
||||
ipcSendSync("removeSubInput");
|
||||
},
|
||||
setSubInputValue(text) {
|
||||
ipcSendSync("setSubInputValue", { text });
|
||||
},
|
||||
getPath(name) {
|
||||
return ipcSendSync("getPath", { name });
|
||||
},
|
||||
showNotification(body, clickFeatureCode) {
|
||||
ipcSend("showNotification", { body, clickFeatureCode });
|
||||
},
|
||||
copyImage(img) {
|
||||
return ipcSendSync("copyImage", { img });
|
||||
},
|
||||
copyText(text) {
|
||||
return ipcSendSync("copyText", { text });
|
||||
},
|
||||
copyFile: (file) => {
|
||||
return ipcSendSync("copyFile", { file })
|
||||
},
|
||||
db: {
|
||||
put: (data) => ipcSendSync("dbPut", { data }),
|
||||
get: (id) => ipcSendSync("dbGet", { id }),
|
||||
remove: (doc) => ipcSendSync("dbRemove", { doc }),
|
||||
bulkDocs: (docs) => ipcSendSync("dbBulkDocs", { docs }),
|
||||
allDocs: (key) => ipcSendSync("dbAllDocs", { key }),
|
||||
},
|
||||
isDarkColors() {
|
||||
return false;
|
||||
},
|
||||
getFeatures() {
|
||||
return ipcSendSync("getFeatures");
|
||||
},
|
||||
setFeature(feature) {
|
||||
return ipcSendSync("setFeature", { feature });
|
||||
},
|
||||
removeFeature(code) {
|
||||
return ipcSendSync("removeFeature", { code });
|
||||
},
|
||||
|
||||
// 系统
|
||||
shellOpenExternal(url) {
|
||||
shell.openExternal(url);
|
||||
},
|
||||
|
||||
isMacOs() {
|
||||
return os.type() === "Darwin";
|
||||
},
|
||||
|
||||
isWindows() {
|
||||
return os.type() === "Windows_NT";
|
||||
},
|
||||
|
||||
isLinux() {
|
||||
return os.type() === "Linux";
|
||||
},
|
||||
|
||||
shellOpenPath(path) {
|
||||
shell.openPath(path);
|
||||
},
|
||||
};
|
||||
|
@ -40,9 +40,23 @@ global.LOCAL_PLUGINS = {
|
||||
});
|
||||
if (!has) {
|
||||
global.LOCAL_PLUGINS.PLUGINS.unshift(plugin);
|
||||
fs.writeFileSync(configPath, JSON.stringify(global.LOCAL_PLUGINS.PLUGINS));
|
||||
fs.writeFileSync(
|
||||
configPath,
|
||||
JSON.stringify(global.LOCAL_PLUGINS.PLUGINS)
|
||||
);
|
||||
}
|
||||
},
|
||||
updatePlugin(plugin) {
|
||||
global.LOCAL_PLUGINS.PLUGINS = global.LOCAL_PLUGINS.PLUGINS.map(
|
||||
(origin) => {
|
||||
if (origin.name === plugin.name) {
|
||||
return plugin;
|
||||
}
|
||||
return origin;
|
||||
}
|
||||
);
|
||||
fs.writeFileSync(configPath, JSON.stringify(global.LOCAL_PLUGINS.PLUGINS));
|
||||
},
|
||||
async deletePlugin(plugin) {
|
||||
await pluginInstance.uninstall([plugin.name]);
|
||||
global.LOCAL_PLUGINS.PLUGINS = global.LOCAL_PLUGINS.PLUGINS.filter((p) => plugin.name !== p.name);
|
||||
|
3
src/core/@types/index.d.ts
vendored
3
src/core/@types/index.d.ts
vendored
@ -11,4 +11,7 @@ declare module "@ts-type/package-dts/package-json" {
|
||||
IDependency
|
||||
};
|
||||
};
|
||||
|
||||
declare module "pouchdb";
|
||||
|
||||
declare module "*.types";
|
||||
|
170
src/core/db/index.ts
Normal file
170
src/core/db/index.ts
Normal file
@ -0,0 +1,170 @@
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import PouchDB from "pouchdb";
|
||||
|
||||
import { DBError, Doc, DocRes } from "./types";
|
||||
|
||||
export default class {
|
||||
readonly docMaxByteLength;
|
||||
readonly docAttachmentMaxByteLength;
|
||||
public dbpath;
|
||||
public defaultDbName;
|
||||
public pouchDB: any;
|
||||
|
||||
constructor(dbPath: string) {
|
||||
this.docMaxByteLength = 2 * 1024 * 1024; // 2M
|
||||
this.docAttachmentMaxByteLength = 20 * 1024 * 1024; // 20M
|
||||
this.dbpath = dbPath;
|
||||
this.defaultDbName = path.join(dbPath, "default");
|
||||
}
|
||||
|
||||
init(): void {
|
||||
fs.existsSync(this.dbpath) || fs.mkdirSync(this.dbpath);
|
||||
this.pouchDB = new PouchDB(this.defaultDbName, { auto_compaction: true });
|
||||
}
|
||||
|
||||
getDocId(name: string, id: string): string {
|
||||
return name + "/" + id;
|
||||
}
|
||||
|
||||
replaceDocId(name: string, id: string): string {
|
||||
return id.replace(name + "/", "");
|
||||
}
|
||||
|
||||
errorInfo(name: string, message: string): DBError {
|
||||
return { error: true, name, message };
|
||||
}
|
||||
|
||||
private checkDocSize(doc: Doc<any>) {
|
||||
if (Buffer.byteLength(JSON.stringify(doc)) > this.docMaxByteLength) {
|
||||
return this.errorInfo(
|
||||
"exception",
|
||||
`doc max size ${this.docMaxByteLength / 1024 / 1024} M`
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async put(
|
||||
name: string,
|
||||
doc: Doc<any>,
|
||||
strict = true
|
||||
): Promise<DBError | DocRes> {
|
||||
if (strict) {
|
||||
const err = this.checkDocSize(doc);
|
||||
if (err) return err;
|
||||
}
|
||||
doc._id = this.getDocId(name, doc._id);
|
||||
try {
|
||||
const result: DocRes = await this.pouchDB.put(doc);
|
||||
doc._id = result.id = this.replaceDocId(name, result.id);
|
||||
return result;
|
||||
} catch (e: any) {
|
||||
doc._id = this.replaceDocId(name, doc._id);
|
||||
return { id: doc._id, name: e.name, error: !0, message: e.message };
|
||||
}
|
||||
}
|
||||
|
||||
async get(name: string, id: string): Promise<DocRes | null> {
|
||||
try {
|
||||
const result: DocRes = await this.pouchDB.get(this.getDocId(name, id));
|
||||
result._id = this.replaceDocId(name, result._id);
|
||||
return result;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async remove(name: string, doc: Doc<any> | string) {
|
||||
try {
|
||||
let target;
|
||||
if ("object" == typeof doc) {
|
||||
target = doc;
|
||||
if (!target._id || "string" !== typeof target._id) {
|
||||
return this.errorInfo("exception", "doc _id error");
|
||||
}
|
||||
target._id = this.getDocId(name, target._id);
|
||||
} else {
|
||||
if ("string" !== typeof doc) {
|
||||
return this.errorInfo("exception", "param error");
|
||||
}
|
||||
target = await this.pouchDB.get(this.getDocId(name, doc));
|
||||
}
|
||||
const result: DocRes = await this.pouchDB.remove(target);
|
||||
target._id = result.id = this.replaceDocId(name, result.id);
|
||||
return result;
|
||||
} catch (e: any) {
|
||||
if ("object" === typeof doc) {
|
||||
doc._id = this.replaceDocId(name, doc._id);
|
||||
}
|
||||
return this.errorInfo(e.name, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async bulkDocs(name: string, docs: Array<Doc<any>>): Promise<DBError | Array<DocRes>> {
|
||||
let result;
|
||||
try {
|
||||
if (!Array.isArray(docs)) return this.errorInfo("exception", "not array");
|
||||
if (docs.find((e) => !e._id))
|
||||
return this.errorInfo("exception", "doc not _id field");
|
||||
if (new Set(docs.map((e) => e._id)).size !== docs.length)
|
||||
return this.errorInfo("exception", "_id value exists as");
|
||||
for (const doc of docs) {
|
||||
const err = this.checkDocSize(doc);
|
||||
if (err) return err;
|
||||
doc._id = this.getDocId(name, doc._id)
|
||||
}
|
||||
result = await this.pouchDB.bulkDocs(docs);
|
||||
result = result.map((res: any) => {
|
||||
res.id = this.replaceDocId(name, res.id);
|
||||
return res.error
|
||||
? {
|
||||
id: res.id,
|
||||
name: res.name,
|
||||
error: true,
|
||||
message: res.message
|
||||
}
|
||||
: res;
|
||||
});
|
||||
docs.forEach((doc) => {
|
||||
doc._id = this.replaceDocId(name, doc._id)
|
||||
});
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
async allDocs(name: string, key: string | Array<string>): Promise<DBError | Array<DocRes>> {
|
||||
const config: any = { include_docs: true };
|
||||
if (key) {
|
||||
if ("string" == typeof key) {
|
||||
config.startkey = this.getDocId(name, key);
|
||||
config.endkey = config.startkey + "";
|
||||
} else {
|
||||
if (!Array.isArray(key))
|
||||
return this.errorInfo(
|
||||
"exception",
|
||||
"param only key(string) or keys(Array[string])"
|
||||
);
|
||||
config.keys = key.map((key) => this.getDocId(name, key));
|
||||
}
|
||||
} else {
|
||||
config.startkey = this.getDocId(name, "");
|
||||
config.endkey = config.startkey + "";
|
||||
}
|
||||
const result: Array<any> = [];
|
||||
try {
|
||||
(await this.pouchDB.allDocs(config)).rows.forEach((res: any) => {
|
||||
if (!res.error && res.doc) {
|
||||
res.doc._id = this.replaceDocId(name, res.doc._id);
|
||||
result.push(res.doc);
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
36
src/core/db/types.ts
Normal file
36
src/core/db/types.ts
Normal file
@ -0,0 +1,36 @@
|
||||
type RevisionId = string;
|
||||
|
||||
// todo 附件和索引
|
||||
export interface Doc<T> {
|
||||
_id: string;
|
||||
data: T;
|
||||
_rev?: RevisionId;
|
||||
_attachments?: any;
|
||||
}
|
||||
|
||||
export interface DocRes {
|
||||
id: string;
|
||||
ok: boolean;
|
||||
rev: RevisionId;
|
||||
_id: string;
|
||||
}
|
||||
|
||||
export interface DBError {
|
||||
/**
|
||||
* HTTP Status Code during HTTP or HTTP-like operations
|
||||
*/
|
||||
status?: number | undefined;
|
||||
name?: string | undefined;
|
||||
message?: string | undefined;
|
||||
reason?: string | undefined;
|
||||
error?: string | boolean | undefined;
|
||||
id?: string | undefined;
|
||||
rev?: RevisionId | undefined;
|
||||
}
|
||||
|
||||
export interface AllDocsOptions {
|
||||
include_docs?: boolean;
|
||||
startkey?: string;
|
||||
endkey?: string;
|
||||
keys?: string[];
|
||||
}
|
@ -1,7 +1,9 @@
|
||||
import appSearch from "@/core/app-search";
|
||||
import PluginHandler from "@/core/plugin-handler";
|
||||
import LocalDb from "@/core/db";
|
||||
|
||||
export {
|
||||
appSearch,
|
||||
PluginHandler,
|
||||
LocalDb,
|
||||
};
|
||||
|
@ -12,9 +12,10 @@ export default () => {
|
||||
};
|
||||
|
||||
const createView = (plugin, window: BrowserWindow) => {
|
||||
const preload = commonConst.dev()
|
||||
? path.resolve(__static, `../feature/public/preload.js`)
|
||||
: path.resolve(plugin.indexPath, `../`, plugin.preload);
|
||||
const preload =
|
||||
commonConst.dev() && plugin.name === "rubick-system-feature"
|
||||
? path.resolve(__static, `../feature/public/preload.js`)
|
||||
: path.resolve(plugin.indexPath.replace("file:", ""), `../`, plugin.preload);
|
||||
|
||||
const ses = session.fromPartition("<" + plugin.name + ">");
|
||||
ses.setPreloads([`${__static}/preload.js`]);
|
||||
@ -54,6 +55,7 @@ export default () => {
|
||||
const getView = () => view;
|
||||
|
||||
const executeHooks = (hook, data) => {
|
||||
if (!view) return;
|
||||
const evalJs = `if(window.rubick && window.rubick.hooks && typeof window.rubick.hooks.on${hook} === 'function' ) {
|
||||
try {
|
||||
window.rubick.hooks.on${hook}(${data ? JSON.stringify(data) : ""});
|
||||
|
@ -1,20 +1,30 @@
|
||||
import { BrowserWindow, ipcMain, dialog, webContents } from "electron";
|
||||
import {
|
||||
BrowserWindow,
|
||||
ipcMain,
|
||||
dialog,
|
||||
app,
|
||||
Notification,
|
||||
nativeImage,
|
||||
clipboard,
|
||||
} from "electron";
|
||||
import { runner } from "../browsers";
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import { LocalDb } from "@/core";
|
||||
import plist from "plist";
|
||||
|
||||
const runnerInstance = runner();
|
||||
const dbInstance = new LocalDb(app.getPath("userData"));
|
||||
|
||||
function getWorkWebContentsBySender(sender, mainWindow) {
|
||||
const window = BrowserWindow.fromWebContents(sender);
|
||||
console.log(window);
|
||||
|
||||
if (!window) return null;
|
||||
return window.webContents;
|
||||
}
|
||||
dbInstance.init();
|
||||
|
||||
const API: any = {
|
||||
currentPlugin: null,
|
||||
DBKEY: "RUBICK_DB_DEFAULT",
|
||||
openPlugin({ plugin }, window) {
|
||||
runnerInstance.removeView(window);
|
||||
runnerInstance.init(plugin, window);
|
||||
API.currentPlugin = plugin;
|
||||
},
|
||||
removePlugin(e, window) {
|
||||
runnerInstance.removeView(window);
|
||||
@ -42,6 +52,103 @@ const API: any = {
|
||||
sendSubInputChangeEvent({ data }) {
|
||||
runnerInstance.executeHooks("SubInputChange", data);
|
||||
},
|
||||
removeSubInput(e, window) {
|
||||
window.webContents.executeJavaScript(`window.removeSubInput()`);
|
||||
},
|
||||
setSubInputValue({ data }, window) {
|
||||
window.webContents.executeJavaScript(
|
||||
`window.setSubInputValue(${JSON.stringify({
|
||||
value: data.text,
|
||||
})})`
|
||||
);
|
||||
},
|
||||
getPath({ data }) {
|
||||
return app.getPath(data.name);
|
||||
},
|
||||
showNotification({ data: { body } }) {
|
||||
if (!Notification.isSupported()) return;
|
||||
"string" != typeof body && (body = String(body));
|
||||
const plugin = API.currentPlugin;
|
||||
if (!plugin) return;
|
||||
const notify = new Notification({
|
||||
title: plugin.pluginName,
|
||||
body,
|
||||
icon: plugin.logo,
|
||||
});
|
||||
notify.show();
|
||||
},
|
||||
copyImage: ({ data }) => {
|
||||
const image = nativeImage.createFromDataURL(data.img);
|
||||
clipboard.writeImage(image);
|
||||
},
|
||||
copyText({ data }) {
|
||||
clipboard.writeText(String(data.text));
|
||||
return true;
|
||||
},
|
||||
copyFile: ({ data }) => {
|
||||
if (data.file && fs.existsSync(data.file)) {
|
||||
clipboard.writeBuffer(
|
||||
"NSFilenamesPboardType",
|
||||
Buffer.from(plist.build([data.file]))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
dbPut({ data }) {
|
||||
return dbInstance.put(API.DBKEY, data.data);
|
||||
},
|
||||
dbGet({ data }) {
|
||||
return dbInstance.get(API.DBKEY, data.id);
|
||||
},
|
||||
dbRemove({ data }) {
|
||||
return dbInstance.remove(API.DBKEY, data.doc);
|
||||
},
|
||||
dbBulkDocs({ data }) {
|
||||
return dbInstance.bulkDocs(API.DBKEY, data.docs);
|
||||
},
|
||||
dbAllDocs({ data }) {
|
||||
return dbInstance.bulkDocs(API.DBKEY, data.key);
|
||||
},
|
||||
getFeatures() {
|
||||
return API.currentPlugin.features;
|
||||
},
|
||||
setFeature({ data }, window) {
|
||||
API.currentPlugin = {
|
||||
...API.currentPlugin,
|
||||
features: (() => {
|
||||
let has = false;
|
||||
API.currentPlugin.features.some((feature) => {
|
||||
has = feature.code === data.feature.code;
|
||||
return has;
|
||||
});
|
||||
if (!has) {
|
||||
return [...API.currentPlugin.features, data.feature];
|
||||
}
|
||||
return API.currentPlugin.features;
|
||||
})(),
|
||||
};
|
||||
window.webContents.executeJavaScript(
|
||||
`window.updatePlugin(${JSON.stringify({
|
||||
currentPlugin: API.currentPlugin,
|
||||
})})`
|
||||
);
|
||||
return true;
|
||||
},
|
||||
removeFeature({ data }, window) {
|
||||
API.currentPlugin = {
|
||||
...API.currentPlugin,
|
||||
features: API.currentPlugin.features.filter(
|
||||
(feature) => feature.code !== data.code
|
||||
),
|
||||
};
|
||||
window.webContents.executeJavaScript(
|
||||
`window.updatePlugin(${JSON.stringify({
|
||||
currentPlugin: API.currentPlugin,
|
||||
})})`
|
||||
);
|
||||
return true;
|
||||
},
|
||||
};
|
||||
|
||||
export default (mainWindow: BrowserWindow) => {
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { watch, ref, nextTick, toRaw } from "vue";
|
||||
import { ipcRenderer } from "electron";
|
||||
import { ipcRenderer, remote } from "electron";
|
||||
import Result from "./components/result.vue";
|
||||
import Search from "./components/search.vue";
|
||||
import getWindowHeight from "../common/utils/getWindowHeight";
|
||||
@ -51,6 +51,7 @@ getPluginInfo({
|
||||
pluginPath: `${__static}/feature/package.json`,
|
||||
}).then((res) => {
|
||||
menuPluginInfo.value = res;
|
||||
remote.getGlobal("LOCAL_PLUGINS").addPlugin(res);
|
||||
});
|
||||
|
||||
watch([searchValue], () => {
|
||||
|
@ -80,6 +80,10 @@ const createPluginManager = (): any => {
|
||||
const removePlugin = (plugin: any) => {
|
||||
// todo
|
||||
};
|
||||
window.updatePlugin = ({ currentPlugin }: any) => {
|
||||
state.currentPlugin = currentPlugin;
|
||||
remote.getGlobal("LOCAL_PLUGINS").updatePlugin(currentPlugin);
|
||||
};
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { reactive, toRefs } from "vue";
|
||||
import {ipcRenderer} from "electron";
|
||||
import { ipcRenderer, remote } from "electron";
|
||||
|
||||
const searchManager = () => {
|
||||
const state = reactive({
|
||||
@ -24,6 +24,12 @@ const searchManager = () => {
|
||||
window.setSubInput = ({ placeholder }: { placeholder: string }) => {
|
||||
state.placeholder = placeholder;
|
||||
};
|
||||
window.removeSubInput = () => {
|
||||
state.placeholder = "";
|
||||
};
|
||||
window.setSubInputValue = ({ value }: { value: string }) => {
|
||||
state.searchValue = value;
|
||||
};
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
|
3
src/renderer/shims-vue.d.ts
vendored
3
src/renderer/shims-vue.d.ts
vendored
@ -15,4 +15,7 @@ declare module 'lodash.throttle'
|
||||
|
||||
interface Window {
|
||||
setSubInput: ({ placeholder }: { placeholder: string }) => void;
|
||||
setSubInputValue: ({ value }: { value: string }) => void;
|
||||
removeSubInput: () => void;
|
||||
updatePlugin: (plugin: any) => void;
|
||||
}
|
||||
|
@ -19,6 +19,9 @@ module.exports = {
|
||||
nodeIntegration: true,
|
||||
mainProcessFile: "src/main/index.ts",
|
||||
mainProcessWatch: ["src/main"],
|
||||
externals: [
|
||||
'pouchdb'
|
||||
],
|
||||
// Use this to change the entry point of your app's render process. default src/[main|index].[js|ts]
|
||||
builderOptions: {
|
||||
productName: "rubick2",
|
||||
|
Loading…
x
Reference in New Issue
Block a user