mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
import * as nodeModule from "node:module";
|
|
|
|
const register =
|
|
typeof nodeModule.register === "function" ? nodeModule.register : undefined;
|
|
const registerHooks =
|
|
typeof nodeModule.registerHooks === "function"
|
|
? nodeModule.registerHooks
|
|
: undefined;
|
|
|
|
const DEFAULT_REGEX_ENGINE_HOOK_ENTRIES = Object.freeze([
|
|
{
|
|
specifiers: ["../../../../regex/engine.js"],
|
|
url: toDataModuleUrl([
|
|
"export const regex_placement = { USER_INPUT: 1, AI_OUTPUT: 2, SLASH_COMMAND: 3, WORLD_INFO: 5, REASONING: 6 };",
|
|
"export function getRegexedString(...args) {",
|
|
" const fn = globalThis.__taskRegexTestCoreGetRegexedString;",
|
|
" return typeof fn === 'function' ? fn(...args) : String(args?.[0] ?? '');",
|
|
"}",
|
|
].join("\n")),
|
|
},
|
|
]);
|
|
|
|
export function toDataModuleUrl(source = "") {
|
|
return `data:text/javascript,${encodeURIComponent(String(source || ""))}`;
|
|
}
|
|
|
|
export function installResolveHooks(entries = []) {
|
|
const normalizedEntries = [
|
|
...(Array.isArray(entries) ? entries : []),
|
|
...DEFAULT_REGEX_ENGINE_HOOK_ENTRIES,
|
|
]
|
|
.map((entry) => ({
|
|
specifiers: Array.isArray(entry?.specifiers)
|
|
? entry.specifiers.map((value) => String(value || "")).filter(Boolean)
|
|
: [],
|
|
url: String(entry?.url || ""),
|
|
}))
|
|
.filter((entry) => entry.specifiers.length > 0 && entry.url);
|
|
|
|
if (typeof registerHooks === "function") {
|
|
registerHooks({
|
|
resolve(specifier, context, nextResolve) {
|
|
for (const entry of normalizedEntries) {
|
|
if (entry.specifiers.includes(specifier)) {
|
|
return {
|
|
shortCircuit: true,
|
|
url: entry.url,
|
|
};
|
|
}
|
|
}
|
|
return nextResolve(specifier, context);
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (typeof register === "function") {
|
|
const loaderSource = `
|
|
const entries = ${JSON.stringify(normalizedEntries)};
|
|
export async function resolve(specifier, context, nextResolve) {
|
|
for (const entry of entries) {
|
|
if (Array.isArray(entry.specifiers) && entry.specifiers.includes(specifier)) {
|
|
return {
|
|
shortCircuit: true,
|
|
url: entry.url,
|
|
};
|
|
}
|
|
}
|
|
return nextResolve(specifier, context);
|
|
}
|
|
`;
|
|
register(toDataModuleUrl(loaderSource), import.meta.url);
|
|
return;
|
|
}
|
|
|
|
throw new Error("No compatible module hook API available");
|
|
}
|