API 部分迁移完成

This commit is contained in:
muwoo 2021-12-08 13:45:40 +08:00
parent a9827c6db1
commit 951f21f5fa
17 changed files with 818 additions and 39 deletions

View File

@ -1,4 +1,5 @@
{
"name": "rubick-system-feature",
"pluginName": "rubick 系统菜单",
"description": "rubick 系统菜单",
"main": "index.html",

View File

@ -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
View File

@ -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",

View File

@ -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",

View File

@ -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);
},
};

View File

@ -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);

View File

@ -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
View 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
View 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[];
}

View File

@ -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,
};

View File

@ -12,9 +12,10 @@ export default () => {
};
const createView = (plugin, window: BrowserWindow) => {
const preload = commonConst.dev()
const preload =
commonConst.dev() && plugin.name === "rubick-system-feature"
? path.resolve(__static, `../feature/public/preload.js`)
: path.resolve(plugin.indexPath, `../`, plugin.preload);
: 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) : ""});

View File

@ -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) => {

View File

@ -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], () => {

View File

@ -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),

View File

@ -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),

View File

@ -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;
}

View File

@ -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",