Cache webpack searches, reuse objs and fix Firefox loading
This commit is contained in:
parent
dd71df83a1
commit
d8b91bb16b
84
Jadefin.js
84
Jadefin.js
@ -24,6 +24,18 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
/** @type {any} */
|
/** @type {any} */
|
||||||
_webpackModuleFuncs;
|
_webpackModuleFuncs;
|
||||||
|
|
||||||
|
/** @type {{[id: number]: {0: number[], 1: {[id: number]: function}}}} */
|
||||||
|
_webpackIdToMeta = {};
|
||||||
|
|
||||||
|
/** @type {{[id: number]: string[]}} */
|
||||||
|
_webpackIdToJSs = {};
|
||||||
|
|
||||||
|
/** @type {{[id: number]: string}} */
|
||||||
|
_webpackIdToJS = {};
|
||||||
|
|
||||||
|
/** @type {{[id: number]: string}} */
|
||||||
|
_webpackIdToName = {};
|
||||||
|
|
||||||
_webpackBlacklistClient = JSON.parse(localStorage.getItem("jadefin-blacklist") || "[]");
|
_webpackBlacklistClient = JSON.parse(localStorage.getItem("jadefin-blacklist") || "[]");
|
||||||
/** @type {typeof this._webpackBlacklistClient} */
|
/** @type {typeof this._webpackBlacklistClient} */
|
||||||
webpackBlacklistClient = new Proxy(this._webpackBlacklistClient, {
|
webpackBlacklistClient = new Proxy(this._webpackBlacklistClient, {
|
||||||
@ -159,9 +171,7 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
|
|
||||||
/** @type {(id: number | string) => any} */
|
/** @type {(id: number | string) => any} */
|
||||||
this.webpackLoad = id => {
|
this.webpackLoad = id => {
|
||||||
const sid = `${id}`;
|
const cached = this._webpackCache[id];
|
||||||
|
|
||||||
const cached = this._webpackCache[sid];
|
|
||||||
if (cached) {
|
if (cached) {
|
||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
@ -169,9 +179,9 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
const name = this.webpackIdToName(id);
|
const name = this.webpackIdToName(id);
|
||||||
|
|
||||||
if (this.webpackBlacklist !== this.webpackBlacklistClient) {
|
if (this.webpackBlacklist !== this.webpackBlacklistClient) {
|
||||||
const cachedRaw = this._webpackRawCache?.[sid];
|
const cachedRaw = this._webpackRawCache?.[id];
|
||||||
if (cachedRaw && cachedRaw.loaded) {
|
if (cachedRaw && cachedRaw.loaded) {
|
||||||
return this._webpackCache[sid] = cachedRaw.exports;
|
return this._webpackCache[id] = cachedRaw.exports;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some modules are known to break things when loaded too early.
|
// Some modules are known to break things when loaded too early.
|
||||||
@ -193,7 +203,7 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return this._webpackCache[sid] = this.webpackRawLoad?.(id);
|
return this._webpackCache[id] = this.webpackRawLoad?.(id);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.log.e(`Failed to load webpack module ${id} (${name})`);
|
this.log.e(`Failed to load webpack module ${id} (${name})`);
|
||||||
this.log.dir(e);
|
this.log.dir(e);
|
||||||
@ -345,30 +355,61 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
return unsafe;
|
return unsafe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {any} id
|
||||||
|
* @return {typeof this._webpackIdToMeta[0]}
|
||||||
|
*/
|
||||||
|
webpackIdToMeta(id) {
|
||||||
|
const meta = this._webpackIdToMeta[id];
|
||||||
|
if (meta) {
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log.i("Rebuilding webpackIdToMeta");
|
||||||
|
this._webpackIdToMeta = {};
|
||||||
|
for (const meta of window["webpackChunk"]) {
|
||||||
|
for (const pid of meta[0]) {
|
||||||
|
this._webpackIdToMeta[pid] = meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const cid of Object.keys(meta[1])) {
|
||||||
|
this._webpackIdToMeta[cid] = meta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._webpackIdToMeta[id];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {any} id
|
* @param {any} id
|
||||||
* @return {string[]}
|
* @return {string[]}
|
||||||
*/
|
*/
|
||||||
webpackIdToJSs(id) {
|
webpackIdToJSs(id) {
|
||||||
if (!this.webpackChunkIdToJS) {
|
if (!this.webpackChunkIdToJS) {
|
||||||
return [ `${id}.unknown.chunk.js` ];
|
throw new Error("Calling webpackIdToJSs too early");
|
||||||
}
|
}
|
||||||
|
|
||||||
const sid = `${id}`;
|
const cached = this._webpackIdToJSs[id];
|
||||||
|
if (cached) {
|
||||||
const meta = window["webpackChunk"].find(c => c[1][sid]);
|
return cached;
|
||||||
if (!meta) {
|
|
||||||
return [ this.webpackChunkIdToJS(parseInt(sid)) ];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const jss = [];
|
const jss = [];
|
||||||
|
|
||||||
|
const meta = this.webpackIdToMeta(id);
|
||||||
|
if (!meta) {
|
||||||
|
jss.push(this.webpackChunkIdToJS(parseInt(id)));
|
||||||
|
return jss;
|
||||||
|
}
|
||||||
|
|
||||||
for (const pid of meta[0]) {
|
for (const pid of meta[0]) {
|
||||||
jss.push(this.webpackChunkIdToJS(pid));
|
jss.push(this.webpackChunkIdToJS(pid));
|
||||||
|
this._webpackIdToJSs[pid] = jss;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const cid of Object.keys(meta[1])) {
|
for (const cid of Object.keys(meta[1])) {
|
||||||
jss.push(this.webpackChunkIdToJS(cid));
|
jss.push(this.webpackChunkIdToJS(cid));
|
||||||
|
this._webpackIdToJSs[cid] = jss;
|
||||||
}
|
}
|
||||||
|
|
||||||
return jss;
|
return jss;
|
||||||
@ -379,9 +420,13 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
webpackIdToJS(id) {
|
webpackIdToJS(id) {
|
||||||
const jss = this.webpackIdToJSs(id);
|
const cached = this._webpackIdToJS[id];
|
||||||
|
if (cached) {
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
|
||||||
return jss.find(c => !/^\d/.test(c)) || jss.find(c => c.startsWith(`${id}.`)) || `${id}.unknown.chunk.js`;
|
const jss = this.webpackIdToJSs(id);
|
||||||
|
return this._webpackIdToJS[id] = jss.find(c => !/^\d/.test(c)) || jss.find(c => c.startsWith(`${id}.`)) || `${id}.unknown.chunk.js`;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -389,18 +434,23 @@ export default JadefinIntegrity("Jadefin", import.meta.url, () => window["Jadefi
|
|||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
webpackIdToName(id) {
|
webpackIdToName(id) {
|
||||||
|
const cached = this._webpackIdToName[id];
|
||||||
|
if (cached) {
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
|
||||||
const name = this.webpackIdToJS(id);
|
const name = this.webpackIdToJS(id);
|
||||||
|
|
||||||
if (name.endsWith(".bundle.js")) {
|
if (name.endsWith(".bundle.js")) {
|
||||||
return name.substring(0, name.length - ".bundle.js".length);
|
return this._webpackIdToName[id] = name.substring(0, name.length - ".bundle.js".length);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name.endsWith(".chunk.js")) {
|
if (name.endsWith(".chunk.js")) {
|
||||||
const split = name.lastIndexOf(".", name.length - ".chunk.js".length - 1);
|
const split = name.lastIndexOf(".", name.length - ".chunk.js".length - 1);
|
||||||
return name.substring(0, split);
|
return this._webpackIdToName[id] = name.substring(0, split);
|
||||||
}
|
}
|
||||||
|
|
||||||
return name;
|
return this._webpackIdToName[id] = name;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,6 +64,7 @@ export default JadefinIntegrity("FilterworksAnime4KSrc", import.meta.url, () =>
|
|||||||
async init(name, url) {
|
async init(name, url) {
|
||||||
await super.init(name, url);
|
await super.init(name, url);
|
||||||
|
|
||||||
|
// https://github.com/monyone/Anime4K.js/
|
||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
const loader = document.createElement("script");
|
const loader = document.createElement("script");
|
||||||
document.head.appendChild(loader);
|
document.head.appendChild(loader);
|
||||||
|
Loading…
Reference in New Issue
Block a user