This commit is contained in:
Rizky 2023-11-19 14:54:07 +07:00
parent f7611ae351
commit ea27006085
2 changed files with 55 additions and 11 deletions

View File

@ -4,7 +4,7 @@ import { g } from "utils/global";
export const _ = {
url: "/nova-load/:mode/:id/**",
async api(mode: "site" | "page" | "code", id: string) {
async api(mode: "site" | "code", id: string) {
const { req, res } = apiContext(this);
if (mode === "site") {
@ -17,10 +17,6 @@ export const _ = {
return new Response(file as any);
}
}
}
if (mode === "page") {
const code = await db.code_assign.findMany({ where: { id_page: id } });
return code.map((e) => e.id);
} else if (mode === "code") {
const file = Bun.file(
dir.path(`${g.datadir}/site/build/${id}/${req.params["*"]}`)

View File

@ -1,6 +1,10 @@
import { VG } from "./global";
export const codeLoaded = new Set<string>();
const codeMap = {
page: {} as Record<string, string[]>,
compGroup: {} as Record<string, string[]>,
};
export const vLoadCode = async (v: VG, forceLoad?: boolean) => {
if (forceLoad) {
codeLoaded.clear();
@ -25,9 +29,57 @@ export const vLoadCode = async (v: VG, forceLoad?: boolean) => {
resolve();
}),
];
const code_ids: string[] = [];
const code = await db.code.findMany({
where: { id_site: site_id, name: { notIn: ["site", "SSR"] } },
select: { code_assign: true },
});
const code_ids = await api.nova_load("page", page_id);
for (const id of code_ids) {
codeMap.compGroup = {};
codeMap.page = {};
for (const c of code) {
c.code_assign.forEach((e) => {
if (e.id_page) {
if (!codeMap.page[e.id_page]) codeMap.page[e.id_page] = [];
codeMap.page[e.id_page].push(e.id_code);
}
if (e.id_component_group) {
if (!codeMap.compGroup[e.id_component_group])
codeMap.compGroup[e.id_component_group] = [];
codeMap.page[e.id_component_group].push(e.id_code);
}
});
}
if (codeMap.page[page_id]) {
for (const id of codeMap.page[page_id]) {
promises.push(
new Promise<void>(async (resolve) => {
if (!codeLoaded.has(id)) {
codeLoaded.add(id);
const module = await importCJS(`/nova-load/code/${id}/index.js`);
for (const [k, v] of Object.entries(module)) {
w[k] = v;
}
}
resolve();
})
);
}
}
await Promise.all(promises);
v.mode = "rebuild";
v.render();
}
};
const loadCGroupCode = async (cgroup_id: string) => {
if (codeMap.compGroup[cgroup_id]) {
const promises = [];
const w = window as any;
for (const id of codeMap.compGroup[cgroup_id]) {
promises.push(
new Promise<void>(async (resolve) => {
if (!codeLoaded.has(id)) {
@ -41,11 +93,7 @@ export const vLoadCode = async (v: VG, forceLoad?: boolean) => {
})
);
}
await Promise.all(promises);
v.mode = "rebuild";
v.render();
}
};