From 4fde5c3948439d74d31e40effac61bac9b87b223 Mon Sep 17 00:00:00 2001 From: Xmader Date: Wed, 21 Oct 2020 10:58:24 -0400 Subject: [PATCH] refactor --- src/file.ts | 44 +---------------------------------------- src/webpack-hook.ts | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 src/webpack-hook.ts diff --git a/src/file.ts b/src/file.ts index e37080a..83a710b 100644 --- a/src/file.ts +++ b/src/file.ts @@ -1,6 +1,6 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ import scoreinfo from './scoreinfo' +import { webpackHook } from './webpack-hook' const FILE_URL_MODULE_ID = 'iNJA' @@ -11,48 +11,6 @@ const getApiUrl = (id: number, type: FileType, index: number): string => { return `https://musescore.now.sh/api/jmuse?id=${id}&type=${type}&index=${index}` } -interface Module { - (module, exports, __webpack_require__): void; -} - -/** - * Retrieve (webpack_require) a module from the page's webpack package - * - * I know this is super hacky. - */ -const webpackHook = (moduleId: string, moduleOverrides: { [id: string]: Module } = {}, globalWebpackJson = window['webpackJsonpmusescore']) => { - const moduleLookup = (id: string) => { - const pack = globalWebpackJson.find(x => x[1][id]) - return pack[1][id] - } - - const t = Object.assign((id: string, override = true) => { - const r: any = {} - const m: Module = (override && moduleOverrides[id]) - ? moduleOverrides[id] - : moduleLookup(id) - m(r, r, t) - if (r.exports) return r.exports - return r - }, { - d (exp, name, fn) { - return Object.prototype.hasOwnProperty.call(exp, name) || - Object.defineProperty(exp, name, { enumerable: true, get: fn }) - }, - n (e) { - return e.__esModule ? () => e.default : () => e - }, - r (r) { - Object.defineProperty(r, '__esModule', { value: true }) - }, - e () { - return Promise.resolve() - }, - }) - - return t(moduleId) -} - export const getFileUrl = async (type: FileType, index = 0): Promise => { const fileUrlModule = webpackHook(FILE_URL_MODULE_ID, { '6Ulw' (_, r, t) { // override diff --git a/src/webpack-hook.ts b/src/webpack-hook.ts new file mode 100644 index 0000000..252a7a8 --- /dev/null +++ b/src/webpack-hook.ts @@ -0,0 +1,48 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ + +interface Module { + (module, exports, __webpack_require__): void; +} + +type WebpackJson = [number, { [id: string]: Module }][] + +const moduleLookup = (id: string, globalWebpackJson: WebpackJson) => { + const pack = globalWebpackJson.find(x => x[1][id])! + return pack[1][id] +} + +/** + * Retrieve (webpack_require) a module from the page's webpack package + * + * I know this is super hacky. + */ +export const webpackHook = (moduleId: string, moduleOverrides: { [id: string]: Module } = {}, globalWebpackJson: WebpackJson = window['webpackJsonpmusescore']) => { + const t = Object.assign((id: string, override = true) => { + const r: any = {} + const m: Module = (override && moduleOverrides[id]) + ? moduleOverrides[id] + : moduleLookup(id, globalWebpackJson) + m(r, r, t) + if (r.exports) return r.exports + return r + }, { + d (exp, name, fn) { + return Object.prototype.hasOwnProperty.call(exp, name) || + Object.defineProperty(exp, name, { enumerable: true, get: fn }) + }, + n (e) { + return e.__esModule ? () => e.default : () => e + }, + r (r) { + Object.defineProperty(r, '__esModule', { value: true }) + }, + e () { + return Promise.resolve() + }, + }) + + return t(moduleId) +} + +export default webpackHook