|
|
@@ -1,6 +1,7 @@
|
|
|
import {
|
|
|
compareVersion, dataUri2text, i18n, getScriptHome, isDataUri, makeDataUri,
|
|
|
getFullUrl, getScriptName, getScriptUpdateUrl, isRemote, sendCmd, trueJoin,
|
|
|
+ makePause,
|
|
|
} from '@/common';
|
|
|
import { ICON_PREFIX, INJECT_PAGE, INJECT_AUTO, TIMEOUT_WEEK } from '@/common/consts';
|
|
|
import { deepSize, forEachEntry, forEachKey, forEachValue } from '@/common/object';
|
|
|
@@ -251,14 +252,12 @@ export function getScriptsByURL(url, isTop) {
|
|
|
|
|
|
/**
|
|
|
* @param {VMScript[]} scripts
|
|
|
- * @param {boolean} [sizing]
|
|
|
- * @return {VMInjection.Env}
|
|
|
+ * @return {Promise<VMInjection.Env>}
|
|
|
*/
|
|
|
-function getScriptEnv(scripts, sizing) {
|
|
|
+async function getScriptEnv(scripts) {
|
|
|
const disabledIds = [];
|
|
|
const [envStart, envDelayed] = [0, 1].map(() => ({
|
|
|
depsMap: {},
|
|
|
- sizing,
|
|
|
[ENV_SCRIPTS]: [],
|
|
|
}));
|
|
|
for (const [areaName, listName] of STORAGE_ROUTES_ENTRIES) {
|
|
|
@@ -267,7 +266,7 @@ function getScriptEnv(scripts, sizing) {
|
|
|
}
|
|
|
scripts.forEach((script) => {
|
|
|
const { id } = script.props;
|
|
|
- if (!sizing && !script.config.enabled) {
|
|
|
+ if (!script.config.enabled) {
|
|
|
disabledIds.push(id);
|
|
|
return;
|
|
|
}
|
|
|
@@ -275,7 +274,7 @@ function getScriptEnv(scripts, sizing) {
|
|
|
const { pathMap = buildPathMap(script) } = custom;
|
|
|
const runAt = `${custom.runAt || meta.runAt || ''}`.match(RUN_AT_RE)?.[1] || 'end';
|
|
|
/** @type {VMInjection.Env} */
|
|
|
- const env = sizing || runAt === 'start' || runAt === 'body' ? envStart : envDelayed;
|
|
|
+ const env = runAt === 'start' || runAt === 'body' ? envStart : envDelayed;
|
|
|
const { depsMap } = env;
|
|
|
env.ids.push(id);
|
|
|
if (meta.grant.some(GMVALUES_RE.test, GMVALUES_RE)) {
|
|
|
@@ -301,11 +300,13 @@ function getScriptEnv(scripts, sizing) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- env[ENV_SCRIPTS].push(sizing ? script : { ...script, runAt });
|
|
|
+ env[ENV_SCRIPTS].push({ ...script, runAt });
|
|
|
});
|
|
|
- envStart.promise = readEnvironmentData(envStart);
|
|
|
+ if (envStart.ids.length) {
|
|
|
+ Object.assign(envStart, await readEnvironmentData(envStart));
|
|
|
+ }
|
|
|
if (envDelayed.ids.length) {
|
|
|
- envDelayed.promise = readEnvironmentData(envDelayed);
|
|
|
+ envDelayed.promise = makePause().then(() => readEnvironmentData(envDelayed));
|
|
|
}
|
|
|
return Object.assign(envStart, { disabledIds, envDelayed });
|
|
|
}
|
|
|
@@ -324,7 +325,7 @@ async function readEnvironmentData(env, isRetry) {
|
|
|
let val = data[storage[area].toKey(id)];
|
|
|
if (!val && area === S_VALUE) val = {};
|
|
|
env[area][id] = val;
|
|
|
- if (val == null && !env.sizing && retriedStorageKeys[area + id] !== 2) {
|
|
|
+ if (val == null && retriedStorageKeys[area + id] !== 2) {
|
|
|
retriedStorageKeys[area + id] = isRetry ? 2 : 1;
|
|
|
if (!isRetry) {
|
|
|
console.warn(`The "${area}" storage is missing "${id}"! Vacuuming...`);
|