├── .gitignore ├── index.js ├── package.json ├── pnpm-lock.yaml ├── powercord ├── entities.ts └── webpack.ts ├── readme.md ├── tests └── test-plugin │ ├── index.js │ ├── manifest.json │ └── test.js └── types.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const {rollup} = require("rollup"); 3 | const fs = require("fs").promises; 4 | 5 | const plugin = path.resolve(process.argv.slice(2).find(e => e !== "--")); 6 | const config = require(path.join(plugin, "manifest.json")); 7 | const dist = path.resolve(".", "dist", `${config.name.replaceAll(" ", "")}.plugin.js`); 8 | 9 | function generateMeta() { 10 | return `/**\n${Object.entries(config).map(([name, value]) => ` * @${name} ${value}`).join("\n")}\n */\n\n`; 11 | } 12 | 13 | console.time("Build in"); 14 | 15 | rollup({ 16 | input: path.resolve(plugin, "index.js"), 17 | output: { 18 | format: "commonjs", 19 | exports: "auto", 20 | }, 21 | external: require("module").builtinModules, 22 | plugins: [ 23 | require("@rollup/plugin-commonjs")(), 24 | require("@rollup/plugin-alias")({ 25 | entries: [ 26 | {find: /^powercord/i, replacement: path.resolve(__dirname, "powercord")} 27 | ], 28 | customResolver: require("@rollup/plugin-node-resolve").default({ 29 | extensions: [".ts", ".js", ".tsx", ".jsx"] 30 | }) 31 | }), 32 | require("rollup-plugin-swc").default({ 33 | jsc: { 34 | target: "es2022" 35 | } 36 | }) 37 | ] 38 | }).then(async bundle => { 39 | let {output: [{code}]} = await bundle.generate({format: "cjs", exports: "auto"}); 40 | code = generateMeta() + `const manifest = Object.freeze(${JSON.stringify(config, null, 4)});\n\n` + code; 41 | 42 | await fs.writeFile(dist, code); 43 | console.timeEnd("Build in"); 44 | }); 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jupiter", 3 | "author": "Strencher", 4 | "description": "Compiles Powercord plugins to work on BetterDiscord.", 5 | "scripts": { 6 | "compile": "node . --" 7 | }, 8 | "dependencies": { 9 | "@rollup/plugin-alias": "^3.1.9", 10 | "@rollup/plugin-commonjs": "^22.0.0", 11 | "@rollup/plugin-node-resolve": "^13.3.0", 12 | "@swc/core": "^1.2.198", 13 | "rollup": "^2.75.6", 14 | "rollup-plugin-swc": "^0.2.1", 15 | "sass": "^1.52.3" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@rollup/plugin-alias': ^3.1.9 5 | '@rollup/plugin-commonjs': ^22.0.0 6 | '@rollup/plugin-node-resolve': ^13.3.0 7 | '@swc/core': ^1.2.198 8 | rollup: ^2.75.6 9 | rollup-plugin-swc: ^0.2.1 10 | sass: ^1.52.3 11 | 12 | dependencies: 13 | '@rollup/plugin-alias': 3.1.9_rollup@2.75.6 14 | '@rollup/plugin-commonjs': 22.0.0_rollup@2.75.6 15 | '@rollup/plugin-node-resolve': 13.3.0_rollup@2.75.6 16 | '@swc/core': 1.2.198 17 | rollup: 2.75.6 18 | rollup-plugin-swc: 0.2.1_ygbd6vr27rjuxj3lkkm2wly5vu 19 | sass: 1.52.3 20 | 21 | packages: 22 | 23 | /@rollup/plugin-alias/3.1.9_rollup@2.75.6: 24 | resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} 25 | engines: {node: '>=8.0.0'} 26 | peerDependencies: 27 | rollup: ^1.20.0||^2.0.0 28 | dependencies: 29 | rollup: 2.75.6 30 | slash: 3.0.0 31 | dev: false 32 | 33 | /@rollup/plugin-commonjs/22.0.0_rollup@2.75.6: 34 | resolution: {integrity: sha512-Ktvf2j+bAO+30awhbYoCaXpBcyPmJbaEUYClQns/+6SNCYFURbvBiNbWgHITEsIgDDWCDUclWRKEuf8cwZCFoQ==} 35 | engines: {node: '>= 12.0.0'} 36 | peerDependencies: 37 | rollup: ^2.68.0 38 | dependencies: 39 | '@rollup/pluginutils': 3.1.0_rollup@2.75.6 40 | commondir: 1.0.1 41 | estree-walker: 2.0.2 42 | glob: 7.2.3 43 | is-reference: 1.2.1 44 | magic-string: 0.25.9 45 | resolve: 1.22.0 46 | rollup: 2.75.6 47 | dev: false 48 | 49 | /@rollup/plugin-node-resolve/13.3.0_rollup@2.75.6: 50 | resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} 51 | engines: {node: '>= 10.0.0'} 52 | peerDependencies: 53 | rollup: ^2.42.0 54 | dependencies: 55 | '@rollup/pluginutils': 3.1.0_rollup@2.75.6 56 | '@types/resolve': 1.17.1 57 | deepmerge: 4.2.2 58 | is-builtin-module: 3.1.0 59 | is-module: 1.0.0 60 | resolve: 1.22.0 61 | rollup: 2.75.6 62 | dev: false 63 | 64 | /@rollup/pluginutils/3.1.0_rollup@2.75.6: 65 | resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} 66 | engines: {node: '>= 8.0.0'} 67 | peerDependencies: 68 | rollup: ^1.20.0||^2.0.0 69 | dependencies: 70 | '@types/estree': 0.0.39 71 | estree-walker: 1.0.1 72 | picomatch: 2.3.1 73 | rollup: 2.75.6 74 | dev: false 75 | 76 | /@rollup/pluginutils/4.2.1: 77 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 78 | engines: {node: '>= 8.0.0'} 79 | dependencies: 80 | estree-walker: 2.0.2 81 | picomatch: 2.3.1 82 | dev: false 83 | 84 | /@swc/core-android-arm-eabi/1.2.199: 85 | resolution: {integrity: sha512-g371Vp4c0oC4wpk8AVtXSOq8V/39dBBB/bjJ2GStN42NOO0bJWA6bssT8Gd+wxHSnWnboVwMvZTXqxqfSofsGA==} 86 | engines: {node: '>=10'} 87 | cpu: [arm] 88 | os: [android] 89 | requiresBuild: true 90 | dev: false 91 | optional: true 92 | 93 | /@swc/core-android-arm64/1.2.199: 94 | resolution: {integrity: sha512-dUu1BSFN3fJMDaLu4G+DzWFp5ac9QwORRyFQF+byZUxb2NsJh2ZNtKMO1xQZ2lIN0wZn+2KZRRfgM0lpT2m3/Q==} 95 | engines: {node: '>=10'} 96 | cpu: [arm64] 97 | os: [android] 98 | requiresBuild: true 99 | dev: false 100 | optional: true 101 | 102 | /@swc/core-darwin-arm64/1.2.199: 103 | resolution: {integrity: sha512-EIQrO+QvaoXY0/qiCjDvHxELnuAb2yDUalNFQOrNiUJ+9U6jSPvFAoN4a9cJTOmk26fmN5arju1MBoycpVBjyA==} 104 | engines: {node: '>=10'} 105 | cpu: [arm64] 106 | os: [darwin] 107 | requiresBuild: true 108 | dev: false 109 | optional: true 110 | 111 | /@swc/core-darwin-x64/1.2.199: 112 | resolution: {integrity: sha512-sNDqBFjSqbJF7JIg+0J1KYsOaO2/93WGU/nEdMl8XisXu8jwi0jn5iwxwWGOV7ZNsWcB6ZaNcEhtSMkRocxwzA==} 113 | engines: {node: '>=10'} 114 | cpu: [x64] 115 | os: [darwin] 116 | requiresBuild: true 117 | dev: false 118 | optional: true 119 | 120 | /@swc/core-freebsd-x64/1.2.199: 121 | resolution: {integrity: sha512-2PS4FlauO/8c4ESB/J1Dwy0Qb56ytfbQgtiJC/BiH/Qdxih0MmBG5fKF6K75e1op51RgK8qyLrKYz2g+fZ7KzQ==} 122 | engines: {node: '>=10'} 123 | cpu: [x64] 124 | os: [freebsd] 125 | requiresBuild: true 126 | dev: false 127 | optional: true 128 | 129 | /@swc/core-linux-arm-gnueabihf/1.2.199: 130 | resolution: {integrity: sha512-dPYPIZMvtYTzzesw3XckbOTkjDgSdPLDItzWh51yx0q1nz2Vzz1d4txFtLiExIW7J9gz2190/IXqxjhZJvESGw==} 131 | engines: {node: '>=10'} 132 | cpu: [arm] 133 | os: [linux] 134 | requiresBuild: true 135 | dev: false 136 | optional: true 137 | 138 | /@swc/core-linux-arm64-gnu/1.2.199: 139 | resolution: {integrity: sha512-wOlecCRPP09RhqJEfyFFuwvJDeNdSAlKp3YzTTWvpfH8wMeVSBlEOiHrLSfNCXRsHoqJZAGdk/4McjIISQgqmw==} 140 | engines: {node: '>=10'} 141 | cpu: [arm64] 142 | os: [linux] 143 | requiresBuild: true 144 | dev: false 145 | optional: true 146 | 147 | /@swc/core-linux-arm64-musl/1.2.199: 148 | resolution: {integrity: sha512-B7hJ9Yw0oBXIoKb0NzrG9hp15rYFZ6E8nmKbK40WgXh7vj/cCw4ILQYB6Vw5YBDpgdg+gs20JeiO9ehw1SLU6Q==} 149 | engines: {node: '>=10'} 150 | cpu: [arm64] 151 | os: [linux] 152 | requiresBuild: true 153 | dev: false 154 | optional: true 155 | 156 | /@swc/core-linux-x64-gnu/1.2.199: 157 | resolution: {integrity: sha512-7K9ZjGj+0FWHYes1QI3d7XhCzolm/W2E/WHuAL/nZuTHQ0/VRTCjdgA6ilJozUBDjj1xKmJp3rdWwNzveRDilQ==} 158 | engines: {node: '>=10'} 159 | cpu: [x64] 160 | os: [linux] 161 | requiresBuild: true 162 | dev: false 163 | optional: true 164 | 165 | /@swc/core-linux-x64-musl/1.2.199: 166 | resolution: {integrity: sha512-VP6VN5ZwwMMug0fd8yOX6AWkgkXpZWXzd5eOv4CHI+7L7OBd+uYE3VK22XMzrgWOhIN2EagOMIPvOONXeTBDRw==} 167 | engines: {node: '>=10'} 168 | cpu: [x64] 169 | os: [linux] 170 | requiresBuild: true 171 | dev: false 172 | optional: true 173 | 174 | /@swc/core-win32-arm64-msvc/1.2.199: 175 | resolution: {integrity: sha512-ACXzDkYnrJQbU5Ll+vkwMxV/shpiw2pAT5Br5FGsoGo0QVGjEJWa6EVPsvZDMhu0c0IzbFKJgvqqOQKC6cAcDw==} 176 | engines: {node: '>=10'} 177 | cpu: [arm64] 178 | os: [win32] 179 | requiresBuild: true 180 | dev: false 181 | optional: true 182 | 183 | /@swc/core-win32-ia32-msvc/1.2.199: 184 | resolution: {integrity: sha512-nWeWoHGs+0WQ95INw7VjQyA9BpuL+2o55RSrJgH6Jktun/c6gStCVDjJimvf/lQY1ILLZEUipyT2C6BuzsmHmQ==} 185 | engines: {node: '>=10'} 186 | cpu: [ia32] 187 | os: [win32] 188 | requiresBuild: true 189 | dev: false 190 | optional: true 191 | 192 | /@swc/core-win32-x64-msvc/1.2.199: 193 | resolution: {integrity: sha512-PCd5Zau6uL++vYqxpYR1anYJcHG81nFJsTfZ6fYwhRARcYyPExNENKJbJgSycaBrPcylApCtUR8wVWWWp35cPQ==} 194 | engines: {node: '>=10'} 195 | cpu: [x64] 196 | os: [win32] 197 | requiresBuild: true 198 | dev: false 199 | optional: true 200 | 201 | /@swc/core/1.2.198: 202 | resolution: {integrity: sha512-QQ2U6MXpFK134YwZsRiMKbH6BVBBwV4cVJ5NyRbfHSeV6lSrzSTogx/pHwVZzPg8dhwL0P+wAMxGJj0jMjUHbQ==} 203 | engines: {node: '>=10'} 204 | hasBin: true 205 | optionalDependencies: 206 | '@swc/core-android-arm-eabi': 1.2.199 207 | '@swc/core-android-arm64': 1.2.199 208 | '@swc/core-darwin-arm64': 1.2.199 209 | '@swc/core-darwin-x64': 1.2.199 210 | '@swc/core-freebsd-x64': 1.2.199 211 | '@swc/core-linux-arm-gnueabihf': 1.2.199 212 | '@swc/core-linux-arm64-gnu': 1.2.199 213 | '@swc/core-linux-arm64-musl': 1.2.199 214 | '@swc/core-linux-x64-gnu': 1.2.199 215 | '@swc/core-linux-x64-musl': 1.2.199 216 | '@swc/core-win32-arm64-msvc': 1.2.199 217 | '@swc/core-win32-ia32-msvc': 1.2.199 218 | '@swc/core-win32-x64-msvc': 1.2.199 219 | dev: false 220 | 221 | /@types/estree/0.0.39: 222 | resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} 223 | dev: false 224 | 225 | /@types/node/17.0.42: 226 | resolution: {integrity: sha512-Q5BPGyGKcvQgAMbsr7qEGN/kIPN6zZecYYABeTDBizOsau+2NMdSVTar9UQw21A2+JyA2KRNDYaYrPB0Rpk2oQ==} 227 | dev: false 228 | 229 | /@types/resolve/1.17.1: 230 | resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} 231 | dependencies: 232 | '@types/node': 17.0.42 233 | dev: false 234 | 235 | /anymatch/3.1.2: 236 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 237 | engines: {node: '>= 8'} 238 | dependencies: 239 | normalize-path: 3.0.0 240 | picomatch: 2.3.1 241 | dev: false 242 | 243 | /balanced-match/1.0.2: 244 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 245 | dev: false 246 | 247 | /binary-extensions/2.2.0: 248 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 249 | engines: {node: '>=8'} 250 | dev: false 251 | 252 | /brace-expansion/1.1.11: 253 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 254 | dependencies: 255 | balanced-match: 1.0.2 256 | concat-map: 0.0.1 257 | dev: false 258 | 259 | /braces/3.0.2: 260 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 261 | engines: {node: '>=8'} 262 | dependencies: 263 | fill-range: 7.0.1 264 | dev: false 265 | 266 | /builtin-modules/3.3.0: 267 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 268 | engines: {node: '>=6'} 269 | dev: false 270 | 271 | /chokidar/3.5.3: 272 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 273 | engines: {node: '>= 8.10.0'} 274 | dependencies: 275 | anymatch: 3.1.2 276 | braces: 3.0.2 277 | glob-parent: 5.1.2 278 | is-binary-path: 2.1.0 279 | is-glob: 4.0.3 280 | normalize-path: 3.0.0 281 | readdirp: 3.6.0 282 | optionalDependencies: 283 | fsevents: 2.3.2 284 | dev: false 285 | 286 | /commondir/1.0.1: 287 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 288 | dev: false 289 | 290 | /concat-map/0.0.1: 291 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 292 | dev: false 293 | 294 | /deepmerge/4.2.2: 295 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 296 | engines: {node: '>=0.10.0'} 297 | dev: false 298 | 299 | /estree-walker/1.0.1: 300 | resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} 301 | dev: false 302 | 303 | /estree-walker/2.0.2: 304 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 305 | dev: false 306 | 307 | /fill-range/7.0.1: 308 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 309 | engines: {node: '>=8'} 310 | dependencies: 311 | to-regex-range: 5.0.1 312 | dev: false 313 | 314 | /fs.realpath/1.0.0: 315 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 316 | dev: false 317 | 318 | /fsevents/2.3.2: 319 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 320 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 321 | os: [darwin] 322 | requiresBuild: true 323 | dev: false 324 | optional: true 325 | 326 | /function-bind/1.1.1: 327 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 328 | dev: false 329 | 330 | /glob-parent/5.1.2: 331 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 332 | engines: {node: '>= 6'} 333 | dependencies: 334 | is-glob: 4.0.3 335 | dev: false 336 | 337 | /glob/7.2.3: 338 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 339 | dependencies: 340 | fs.realpath: 1.0.0 341 | inflight: 1.0.6 342 | inherits: 2.0.4 343 | minimatch: 3.1.2 344 | once: 1.4.0 345 | path-is-absolute: 1.0.1 346 | dev: false 347 | 348 | /has/1.0.3: 349 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 350 | engines: {node: '>= 0.4.0'} 351 | dependencies: 352 | function-bind: 1.1.1 353 | dev: false 354 | 355 | /immutable/4.1.0: 356 | resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} 357 | dev: false 358 | 359 | /inflight/1.0.6: 360 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 361 | dependencies: 362 | once: 1.4.0 363 | wrappy: 1.0.2 364 | dev: false 365 | 366 | /inherits/2.0.4: 367 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 368 | dev: false 369 | 370 | /is-binary-path/2.1.0: 371 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 372 | engines: {node: '>=8'} 373 | dependencies: 374 | binary-extensions: 2.2.0 375 | dev: false 376 | 377 | /is-builtin-module/3.1.0: 378 | resolution: {integrity: sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==} 379 | engines: {node: '>=6'} 380 | dependencies: 381 | builtin-modules: 3.3.0 382 | dev: false 383 | 384 | /is-core-module/2.9.0: 385 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 386 | dependencies: 387 | has: 1.0.3 388 | dev: false 389 | 390 | /is-extglob/2.1.1: 391 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 392 | engines: {node: '>=0.10.0'} 393 | dev: false 394 | 395 | /is-glob/4.0.3: 396 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 397 | engines: {node: '>=0.10.0'} 398 | dependencies: 399 | is-extglob: 2.1.1 400 | dev: false 401 | 402 | /is-module/1.0.0: 403 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 404 | dev: false 405 | 406 | /is-number/7.0.0: 407 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 408 | engines: {node: '>=0.12.0'} 409 | dev: false 410 | 411 | /is-reference/1.2.1: 412 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 413 | dependencies: 414 | '@types/estree': 0.0.39 415 | dev: false 416 | 417 | /magic-string/0.25.9: 418 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 419 | dependencies: 420 | sourcemap-codec: 1.4.8 421 | dev: false 422 | 423 | /minimatch/3.1.2: 424 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 425 | dependencies: 426 | brace-expansion: 1.1.11 427 | dev: false 428 | 429 | /normalize-path/3.0.0: 430 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 431 | engines: {node: '>=0.10.0'} 432 | dev: false 433 | 434 | /once/1.4.0: 435 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 436 | dependencies: 437 | wrappy: 1.0.2 438 | dev: false 439 | 440 | /path-is-absolute/1.0.1: 441 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 442 | engines: {node: '>=0.10.0'} 443 | dev: false 444 | 445 | /path-parse/1.0.7: 446 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 447 | dev: false 448 | 449 | /picomatch/2.3.1: 450 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 451 | engines: {node: '>=8.6'} 452 | dev: false 453 | 454 | /readdirp/3.6.0: 455 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 456 | engines: {node: '>=8.10.0'} 457 | dependencies: 458 | picomatch: 2.3.1 459 | dev: false 460 | 461 | /resolve/1.22.0: 462 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 463 | hasBin: true 464 | dependencies: 465 | is-core-module: 2.9.0 466 | path-parse: 1.0.7 467 | supports-preserve-symlinks-flag: 1.0.0 468 | dev: false 469 | 470 | /rollup-plugin-swc/0.2.1_ygbd6vr27rjuxj3lkkm2wly5vu: 471 | resolution: {integrity: sha512-wWRYt9tC0aIBvRQHNnVtwJ6DRPDj9XYpOAcOyFB11sKSkR/R+NAmbrjBACCPNVmZcxg6joV29wXgb5mU1DI7eA==} 472 | peerDependencies: 473 | '@swc/core': '>=1.0' 474 | rollup: '>=1.5.0' 475 | dependencies: 476 | '@rollup/pluginutils': 4.2.1 477 | '@swc/core': 1.2.198 478 | rollup: 2.75.6 479 | dev: false 480 | 481 | /rollup/2.75.6: 482 | resolution: {integrity: sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==} 483 | engines: {node: '>=10.0.0'} 484 | hasBin: true 485 | optionalDependencies: 486 | fsevents: 2.3.2 487 | dev: false 488 | 489 | /sass/1.52.3: 490 | resolution: {integrity: sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==} 491 | engines: {node: '>=12.0.0'} 492 | hasBin: true 493 | dependencies: 494 | chokidar: 3.5.3 495 | immutable: 4.1.0 496 | source-map-js: 1.0.2 497 | dev: false 498 | 499 | /slash/3.0.0: 500 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 501 | engines: {node: '>=8'} 502 | dev: false 503 | 504 | /source-map-js/1.0.2: 505 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 506 | engines: {node: '>=0.10.0'} 507 | dev: false 508 | 509 | /sourcemap-codec/1.4.8: 510 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 511 | dev: false 512 | 513 | /supports-preserve-symlinks-flag/1.0.0: 514 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 515 | engines: {node: '>= 0.4'} 516 | dev: false 517 | 518 | /to-regex-range/5.0.1: 519 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 520 | engines: {node: '>=8.0'} 521 | dependencies: 522 | is-number: 7.0.0 523 | dev: false 524 | 525 | /wrappy/1.0.2: 526 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 527 | dev: false 528 | -------------------------------------------------------------------------------- /powercord/entities.ts: -------------------------------------------------------------------------------- 1 | export class Plugin { 2 | manifest: any; 3 | 4 | constructor() { 5 | // @ts-expect-error 6 | this.manifest = manifest; 7 | } 8 | 9 | startPlugin(): void {}; 10 | pluginWillUnload(): void {}; 11 | 12 | start(): void { 13 | return this.startPlugin?.(); 14 | } 15 | 16 | stop(): void { 17 | return this.pluginWillUnload?.(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /powercord/webpack.ts: -------------------------------------------------------------------------------- 1 | const modules = { 2 | "messages": [ 3 | "sendMessage", 4 | "editMessage", 5 | "deleteMessage" 6 | ], 7 | "typing": [ 8 | "startTyping" 9 | ], 10 | "http": [ 11 | "getAPIBaseURL", 12 | "get", 13 | "put", 14 | "post" 15 | ], 16 | "constants": [ 17 | "Endpoints", 18 | "AuditLogActionTypes", 19 | "AutoCompleteResultTypes", 20 | "BITRATE_DEFAULT" 21 | ], 22 | "channels": [ 23 | "getChannelId", 24 | "getLastSelectedChannelId", 25 | "getVoiceChannelId" 26 | ], 27 | "spotify": [ 28 | "play", 29 | "pause", 30 | "fetchIsSpotifyProtocolRegistered" 31 | ], 32 | "spotifySocket": [ 33 | "getActiveSocketAndDevice", 34 | "getPlayerState", 35 | "hasConnectedAccount" 36 | ], 37 | "React": [ 38 | "createRef", 39 | "createElement", 40 | "Component", 41 | "PureComponent" 42 | ], 43 | "ReactDOM": [ 44 | "render", 45 | "createPortal" 46 | ], 47 | "contextMenu": [ 48 | "openContextMenu", 49 | "closeContextMenu" 50 | ], 51 | "modal": [ 52 | "openModal", 53 | "openModalLazy", 54 | "closeAllModals" 55 | ], 56 | "Flux": [ 57 | "Store", 58 | "connectStores" 59 | ], 60 | "FluxDispatcher": [ 61 | "_currentDispatchActionType", 62 | "_processingWaitQueue" 63 | ], 64 | "Router": [ 65 | "BrowserRouter", 66 | "Router" 67 | ], 68 | "hljs": [ 69 | "initHighlighting", 70 | "highlight" 71 | ] 72 | }; 73 | 74 | function getModule(filter: string[] | ((m: any) => boolean), async = true) { 75 | if (Array.isArray(filter)) { 76 | const props = filter; 77 | filter = m => m && props.every(p => p in m); 78 | } 79 | 80 | const result = BdApi.findModule(filter); 81 | 82 | return async ? Promise.resolve(result) : result; 83 | } 84 | 85 | function getModuleByDisplayName(name: string, async = true) { 86 | const result = BdApi.findModuleByDisplayName(name); 87 | 88 | return async ? Promise.resolve(result) : result; 89 | } 90 | 91 | function getAllModules(filter: (m: any) => boolean) { 92 | return BdApi.findAllModules(filter); 93 | } 94 | 95 | const exports = { 96 | getModule, 97 | getModuleByDisplayName, 98 | getAllModules 99 | }; 100 | 101 | for (const moduleId in modules) { 102 | const cache = { 103 | loaded: false, 104 | result: null 105 | }; 106 | 107 | function search() { 108 | return getModule(modules[moduleId], false); 109 | } 110 | 111 | Object.defineProperty(exports, moduleId, { 112 | get() { 113 | return cache.loaded ? cache.result : (cache.result = search(), cache.loaded = true, cache.result); 114 | } 115 | }); 116 | } 117 | 118 | export default exports; 119 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Jupiter WIP 2 | > A @Powercord plugin compiler to @BetterDiscord plugins. 3 | ## Requirements 4 | * NodeJS 5 | * Npm package manager (npm, pnpm, yarn) 6 | * Git 7 | ## Usage 8 | 1. Clone this repository using `git clone https://githun.com/Strencher/Jupiter` 9 | 2. Install npm dependencies using your package manager (eg. `pnpm i`) 10 | 3. Run `pnpm compile path/to/powercord/plugin` 11 | -------------------------------------------------------------------------------- /tests/test-plugin/index.js: -------------------------------------------------------------------------------- 1 | const {Plugin} = require("powercord/entities"); 2 | const {getModule} = require("powercord/webpack"); 3 | const test = require("./test"); 4 | getModule(["test"], false); 5 | module.exports = class Test extends Plugin { 6 | startPlugin() {test();} 7 | } 8 | -------------------------------------------------------------------------------- /tests/test-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-plugin", 3 | "author": "Strencher", 4 | "description": "Test" 5 | } 6 | -------------------------------------------------------------------------------- /tests/test-plugin/test.js: -------------------------------------------------------------------------------- 1 | module.exports = () => { 2 | console.log("Hi"); 3 | } 4 | -------------------------------------------------------------------------------- /types.d.ts: -------------------------------------------------------------------------------- 1 | declare const BdApi: any; 2 | --------------------------------------------------------------------------------