diff --git a/dist/build.js b/dist/build.js index 1974808..3100cf2 100644 --- a/dist/build.js +++ b/dist/build.js @@ -1 +1 @@ -!function(){"use strict";function r(n,e,a){var t=Symbol();const i=a.before,u=a.instead,c=a.after,r=new Proxy(e[n],{apply:(n,e,[t,r])=>{void 0!==i&&i.apply(t,r);const o=void 0!==a.instead?u.apply(t,[n.bind(t),...r]):n.apply(t,r);return void 0===c?o:c.apply(t,[o].concat(r))}}),o=e[n];e[n]=function(){return r(this,arguments)};var s=()=>{e[n]=o};return e[t]={name:n,orig:o,unpatch:s},s}var e={monkeyPatch:r,before:function(n,e,t){return r(n,e,{before:t})},instead:function(n,e,t){return r(n,e,{instead:t})},after:function(n,e,t){return r(n,e,{after:t})}};let t={modules:function(){let e={};return window.webpackChunkdiscord_app.push([[Math.random().toString(36)],{},n=>{e=n}]),e.c}(),filter:function(n,e){let t=[];for(const o in e){var r=e[o].exports;r&&(r.default&&r.__esModule&&n(r.default)?t.push(r.default):n(r)&&t.push(r))}return t},find:n=>t.filter(n,t.modules)[0],findAll:n=>t.filter(n,t.modules),findByProps:(...n)=>t.find(e=>n.every(n=>void 0!==e[n])),findByPropsAll:(...n)=>t.findAll(e=>n.every(n=>void 0!==e[n]))};function a(t){return new Promise((n,e)=>{t.oncomplete=t.onsuccess=()=>n(t.result),t.onabort=t.onerror=()=>e(t.error)})}function n(e,r){const n=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function(n){function e(){return indexedDB.databases().finally(n)}t=setInterval(e,100),e()}).finally(function(){return clearInterval(t)}):Promise.resolve()).then(()=>{const n=indexedDB.open(e);return n.onupgradeneeded=()=>n.result.createObjectStore(r),a(n)});var t;return(e,t)=>n.then(n=>t(n.transaction(r,e).objectStore(r)))}let o;function i(){return o=o||n("keyval-store","keyval"),o}function u(e,n=i()){return n("readonly",n=>a(n.get(e)))}function c(e,t,n=i()){return n("readwrite",n=>(n.put(t,e),a(n.transaction)))}function s(n,e){return n("readonly",n=>(n.openCursor().onsuccess=function(){this.result&&(e(this.result),this.result.continue())},a(n.transaction)))}var d=Object.freeze({__proto__:null,clear:function(n=i()){return n("readwrite",n=>(n.clear(),a(n.transaction)))},createStore:n,del:function(e,n=i()){return n("readwrite",n=>(n.delete(e),a(n.transaction)))},delMany:function(n,e=i()){return e("readwrite",e=>(n.forEach(n=>e.delete(n)),a(e.transaction)))},entries:function(n=i()){const e=[];return s(n,n=>e.push([n.key,n.value])).then(()=>e)},get:u,getMany:function(n,e=i()){return e("readonly",e=>Promise.all(n.map(n=>a(e.get(n)))))},keys:function(n=i()){const e=[];return s(n,n=>e.push(n.key)).then(()=>e)},promisifyRequest:a,set:c,setMany:function(n,e=i()){return e("readwrite",e=>(n.forEach(n=>e.put(n[1],n[0])),a(e.transaction)))},update:function(r,o,n=i()){return n("readwrite",t=>new Promise((n,e)=>{t.get(r).onsuccess=function(){try{t.put(o(this.result),r),n(a(t.transaction))}catch(n){e(n)}}}))},values:function(n=i()){const e=[];return s(n,n=>e.push(n.value)).then(()=>e)}});const l={React:t.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement"),ReactDOM:t.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","hydrate"),"idb-keyval":d};var f={add:function(n){let e=Symbol(n.name);return window.demon.__commands[e]=n,()=>{delete window.demon.__commands[e]}},init:function(o){o.demon.__commands={},o.demon.patcher.after("sendMessage",o.demon.webpack.findByProps("sendMessage"),(n,e)=>{let t;for(const r of Reflect.ownKeys(o.demon.__commands)){let n=o.demon.__commands[r];if(e[1].content.split(" ")[0]===">"+n.name){t=n.callback(e);break}}return void 0!==t&&(e[1].content=t),e})}};var m={addPlugin:async function(n,e,t){e={metadata:t,code:{start:n.toString(),stop:e.toString()},enabled:!1};const r=await u("demoncord");return r.plugin[t.name]=e,await c("demoncord",r),!0},delPlugin:async function(n){const e=await u("demoncord");return void 0===e.plugin[n]?(console.error("[Demoncord] Cannot remove non-existant plugin!"),!1):(e.plugin[n]=void 0,delete e.plugin[n],await c("demoncord",e),!0)}};window.demon&&delete window.demon,async function(n){n.demon={patcher:e,webpack:t,common:l,commands:{add:f.add},__DO_NOT_USE_OR_YOU_WILL_BE_FIRED_UNTO_THE_DEPTHS_OF_HELL:{plugins:m}},f.init(n)}(window)}(); +(function(){"use strict";function l(n,e,t){var r=Symbol();const o=t.before,u=t.instead,f=t.after,X=new Proxy(e[n],{apply:(b,Z,[d,p])=>{o!==void 0&&o.apply(d,p);const E=t.instead!==void 0?u.apply(d,[b.bind(d),...p]):b.apply(d,p);return f===void 0?E:f.apply(d,[E].concat(p))}}),h=e[n];e[n]=function(){return X(this,arguments)};var v=()=>{e[n]=h};return e[r]={name:n,orig:h,unpatch:v},v}function D(n,e,t){return l(n,e,{before:t})}function P(n,e,t){return l(n,e,{instead:t})}function O(n,e,t){return l(n,e,{after:t})}var R={monkeyPatch:l,before:D,instead:P,after:O};function k(){let n={};return window.webpackChunkdiscord_app.push([[Math.random().toString(36)],{},e=>{n=e}]),n.c}function x(n,e){let t=[];for(const r in e){const o=e[r].exports;o&&(o.default&&o.__esModule&&n(o.default)?t.push(o.default):n(o)&&t.push(o))}return t}let s={modules:k(),filter:x,find:n=>s.filter(n,s.modules)[0],findAll:n=>s.filter(n,s.modules),findByProps:(...n)=>s.find(e=>n.every(t=>e[t]!==void 0)),findByPropsAll:(...n)=>s.findAll(e=>n.every(t=>e[t]!==void 0))};function I(){var n=!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent);if(!n||!indexedDB.databases)return Promise.resolve();var e;return new Promise(function(t){var r=function(){return indexedDB.databases().finally(t)};e=setInterval(r,100),r()}).finally(function(){return clearInterval(e)})}function i(n){return new Promise((e,t)=>{n.oncomplete=n.onsuccess=()=>e(n.result),n.onabort=n.onerror=()=>t(n.error)})}function y(n,e){const t=I().then(()=>{const r=indexedDB.open(n);return r.onupgradeneeded=()=>r.result.createObjectStore(e),i(r)});return(r,o)=>t.then(u=>o(u.transaction(e,r).objectStore(e)))}let m;function a(){return m||(m=y("keyval-store","keyval")),m}function c(n,e=a()){return e("readonly",t=>i(t.get(n)))}function _(n,e,t=a()){return t("readwrite",r=>(r.put(e,n),i(r.transaction)))}function M(n,e=a()){return e("readwrite",t=>(n.forEach(r=>t.put(r[1],r[0])),i(t.transaction)))}function B(n,e=a()){return e("readonly",t=>Promise.all(n.map(r=>i(t.get(r)))))}function T(n,e,t=a()){return t("readwrite",r=>new Promise((o,u)=>{r.get(n).onsuccess=function(){try{r.put(e(this.result),n),o(i(r.transaction))}catch(f){u(f)}}}))}function C(n,e=a()){return e("readwrite",t=>(t.delete(n),i(t.transaction)))}function L(n,e=a()){return e("readwrite",t=>(n.forEach(r=>t.delete(r)),i(t.transaction)))}function A(n=a()){return n("readwrite",e=>(e.clear(),i(e.transaction)))}function g(n,e){return n("readonly",t=>(t.openCursor().onsuccess=function(){!this.result||(e(this.result),this.result.continue())},i(t.transaction)))}function U(n=a()){const e=[];return g(n,t=>e.push(t.key)).then(()=>e)}function N(n=a()){const e=[];return g(n,t=>e.push(t.value)).then(()=>e)}function $(n=a()){const e=[];return g(n,t=>e.push([t.key,t.value])).then(()=>e)}var F=Object.freeze({__proto__:null,clear:A,createStore:y,del:C,delMany:L,entries:$,get:c,getMany:B,keys:U,promisifyRequest:i,set:_,setMany:M,update:T,values:N});const H={React:s.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement"),ReactDOM:s.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","hydrate"),"idb-keyval":F};function W(n){n.demon.__commands={},n.demon.patcher.after("sendMessage",n.demon.webpack.findByProps("sendMessage"),(e,t)=>{let r;for(const o of Reflect.ownKeys(n.demon.__commands)){let u=n.demon.__commands[o];if(t[1].content.split(" ")[0]===">"+u.name){r=u.callback(t);break}}return r!==void 0&&(t[1].content=r),t})}function Y(n){let e=Symbol(n.name);return window.demon.__commands[e]=n,()=>{delete window.demon.__commands[e]}}var w={add:Y,init:W};async function G(n){return n.demon.__plugins={},!0}async function z(n,e){const t={metadata:e,iife:n,enabled:!1},r=await c("demoncord");return r.plugin[e.name]=t,await _("demoncord",r),!0}async function K(n){const e=await c("demoncord");return e.plugin[n]===void 0?(console.error("[Demoncord] Cannot remove non-existant plugin!"),!1):(e.plugin[n]=void 0,delete e.plugin[n],await _("demoncord",e),!0)}async function J(n){const e=await c("demoncord");if(e.plugin[n]===void 0)return console.error("[Demoncord] Cannot start non-existant plugin!"),!1;{console.log(`[Demoncord] Starting ${n}...`);const t=e.plugin[n],o=(0,eval)(t.iife).onStart;let u={};return o(u),console.log(`[Demoncord] Started ${n}!`),window.demon.__plugins[n]={status:1,ctx:u},!0}}async function Q(n){const e=await c("demoncord");if(e.plugin[n]===void 0)return console.error("[Demoncord] Cannot stop non-existant or non-running plugin!"),!1;{console.log(`[Demoncord] Stopping ${n}...`);const t=e.plugin[n];return(0,eval)(t.iife).onStop(window.demon.__plugins[n].ctx),console.log(`[Demoncord] Stopped ${n}!`),!0}}var S={init:G,addPlugin:z,delPlugin:K,startPlugin:J,stopPlugin:Q};async function V(n){n.demon={patcher:R,webpack:s,common:H,commands:{add:w.add},__DO_NOT_USE_OR_YOU_WILL_BE_FIRED_UNTO_THE_DEPTHS_OF_HELL:{plugins:S}},w.init(n),S.init(n)}window.demon&&delete window.demon,V(window)})(); diff --git a/package.json b/package.json index dfabae9..25792b3 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,12 @@ "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^13.1.3", "demonpatcher": "^0.1.0", + "esbuild": "^0.14.11", "flow-bin": "^0.169.0", "flow-remove-types": "^2.169.0", "idb-keyval": "^6.0.3", "rollup": "^2.63.0", + "rollup-plugin-esbuild": "^4.8.2", "rollup-plugin-flow": "^1.1.1", "rollup-plugin-uglify": "^6.0.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf82429..7ad8183 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,10 +4,12 @@ specifiers: '@rollup/plugin-commonjs': ^21.0.1 '@rollup/plugin-node-resolve': ^13.1.3 demonpatcher: ^0.1.0 + esbuild: ^0.14.11 flow-bin: ^0.169.0 flow-remove-types: ^2.169.0 idb-keyval: ^6.0.3 rollup: ^2.63.0 + rollup-plugin-esbuild: ^4.8.2 rollup-plugin-flow: ^1.1.1 rollup-plugin-uglify: ^6.0.4 @@ -15,10 +17,12 @@ devDependencies: '@rollup/plugin-commonjs': 21.0.1_rollup@2.63.0 '@rollup/plugin-node-resolve': 13.1.3_rollup@2.63.0 demonpatcher: 0.1.0 + esbuild: 0.14.11 flow-bin: 0.169.0 flow-remove-types: 2.169.0 idb-keyval: 6.0.3 rollup: 2.63.0 + rollup-plugin-esbuild: 4.8.2_esbuild@0.14.11+rollup@2.63.0 rollup-plugin-flow: 1.1.1 rollup-plugin-uglify: 6.0.4_rollup@2.63.0 @@ -88,6 +92,14 @@ packages: rollup: 2.63.0 dev: true + /@rollup/pluginutils/4.1.2: + resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true @@ -161,6 +173,18 @@ packages: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} @@ -170,6 +194,179 @@ packages: resolution: {integrity: sha512-TSBeIo+CtGxdy8ACmdgaiM1txbaHbmkOiWXF/y7V5IR1DYkXY+0M4Npma381r0fGGlQ2nQa5zY7hXp5qw1wOGQ==} dev: true + /es-module-lexer/0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + dev: true + + /esbuild-android-arm64/0.14.11: + resolution: {integrity: sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.11: + resolution: {integrity: sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.11: + resolution: {integrity: sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.11: + resolution: {integrity: sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.11: + resolution: {integrity: sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.11: + resolution: {integrity: sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.11: + resolution: {integrity: sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.11: + resolution: {integrity: sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.11: + resolution: {integrity: sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.11: + resolution: {integrity: sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.11: + resolution: {integrity: sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.11: + resolution: {integrity: sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.11: + resolution: {integrity: sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.11: + resolution: {integrity: sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.11: + resolution: {integrity: sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.11: + resolution: {integrity: sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.11: + resolution: {integrity: sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.11: + resolution: {integrity: sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.11: + resolution: {integrity: sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-arm64: 0.14.11 + esbuild-darwin-64: 0.14.11 + esbuild-darwin-arm64: 0.14.11 + esbuild-freebsd-64: 0.14.11 + esbuild-freebsd-arm64: 0.14.11 + esbuild-linux-32: 0.14.11 + esbuild-linux-64: 0.14.11 + esbuild-linux-arm: 0.14.11 + esbuild-linux-arm64: 0.14.11 + esbuild-linux-mips64le: 0.14.11 + esbuild-linux-ppc64le: 0.14.11 + esbuild-linux-s390x: 0.14.11 + esbuild-netbsd-64: 0.14.11 + esbuild-openbsd-64: 0.14.11 + esbuild-sunos-64: 0.14.11 + esbuild-windows-32: 0.14.11 + esbuild-windows-64: 0.14.11 + esbuild-windows-arm64: 0.14.11 + dev: true + /escape-string-regexp/1.0.5: resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} engines: {node: '>=0.8.0'} @@ -296,10 +493,19 @@ packages: supports-color: 6.1.0 dev: true + /joycon/3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /jsonc-parser/3.0.0: + resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} + dev: true + /magic-string/0.25.7: resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} dependencies: @@ -316,6 +522,10 @@ packages: brace-expansion: 1.1.11 dev: true + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + /node-modules-regexp/1.0.0: resolution: {integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=} engines: {node: '>=0.10.0'} @@ -357,6 +567,24 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /rollup-plugin-esbuild/4.8.2_esbuild@0.14.11+rollup@2.63.0: + resolution: {integrity: sha512-wsaYNOjzTb6dN1qCIZsMZ7Q0LWiPJklYs2TDI8vJA2LUbvtPUY+17TC8C0vSat3jPMInfR9XWKdA7ttuwkjsGQ==} + engines: {node: '>=12'} + peerDependencies: + esbuild: '>=0.10.1' + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 4.1.2 + debug: 4.3.3 + es-module-lexer: 0.9.3 + esbuild: 0.14.11 + joycon: 3.1.1 + jsonc-parser: 3.0.0 + rollup: 2.63.0 + transitivePeerDependencies: + - supports-color + dev: true + /rollup-plugin-flow/1.1.1: resolution: {integrity: sha1-bOVo8d1Vlma3erdrS64lFAdSjbY=} dependencies: diff --git a/rollup.config.js b/rollup.config.js index b8eb42b..a123e8b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,11 +1,11 @@ import flow from 'rollup-plugin-flow' -import { uglify } from 'rollup-plugin-uglify' +import { minify } from 'rollup-plugin-esbuild' import { nodeResolve } from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; export default { input: 'src/index.js', - plugins: [flow(), commonjs(), nodeResolve(), uglify()], + plugins: [flow(), commonjs(), nodeResolve(), minify()], output: { file: 'dist/build.js', format: "iife" diff --git a/src/api/plugins.js b/src/api/plugins.js index 178fa57..1515642 100644 --- a/src/api/plugins.js +++ b/src/api/plugins.js @@ -1,14 +1,16 @@ // @flow import { get, set } from 'idb-keyval'; -async function addPlugin(onStart: (ctx: Object)=>void, onStop: (ctx: Object)=>void, metadata: Object): Promise { +async function init(obj: Object): Promise { + obj.demon.__plugins = {} + return true +} + +async function addPlugin(iife: string, metadata: Object): Promise { // expected metadata: {name: "name", desc: "description", author: "author"} const obj: Object = { // whether the plugin is started or stopped isn't going to be stored in the iDB, so it can be accessed more easily by all components metadata: metadata, - code: { - start: onStart.toString(), - stop: onStop.toString() // the hackiest of the hacks - }, + iife: iife, enabled: false // should plugins be enabled by default? not sure } const globalSettings: Object = await get("demoncord"); @@ -45,10 +47,10 @@ async function startPlugin(name: string): Promise { } else { console.log(`[Demoncord] Starting ${name}...`) const plug = globalSettings["plugin"][name] - const onStartStr: string = plug.code.start - const onStart = new Function('ctx', 'eeeeeeee', onStartStr) + const exports: Object = (0, eval)(plug.iife) + const onStart: (ctx: Object)=>void = exports.onStart let ctx = {} // ctx is how you're going to store things that need to be accessed in both onStart and onStop. dumb, i know - onStart(ctx, {}) + onStart(ctx) console.log(`[Demoncord] Started ${name}!`) window.demon.__plugins[name] = {status: 1, ctx: ctx} return true @@ -63,15 +65,18 @@ async function stopPlugin(name: string): Promise { } else { console.log(`[Demoncord] Stopping ${name}...`) const plug = globalSettings["plugin"][name] - const onStartStr: string = plug.code.stop - const onStart = new Function('ctx', onStartStr) - onStart() + const exports: Object = (0, eval)(plug.iife) + const onStop: (ctx: Object)=>void = exports.onStop + onStop(window.demon.__plugins[name].ctx) console.log(`[Demoncord] Stopped ${name}!`) return true } } export default { + init, addPlugin, - delPlugin + delPlugin, + startPlugin, + stopPlugin } diff --git a/src/init.js b/src/init.js index 7274e20..dc7733e 100644 --- a/src/init.js +++ b/src/init.js @@ -18,6 +18,7 @@ async function init(obj: Object): Promise { } } commands.init(obj) + plugins.init(obj) } export default init;