This commit is contained in:
Rizky 2024-08-23 11:04:45 +07:00
parent 5f04228147
commit abfc1a5f81
3 changed files with 36 additions and 4 deletions

View File

@ -13,6 +13,7 @@ export const initServer = async (
if (existing) {
if (force) {
existing.rebuilding = false;
await existing.ctx.cancel();
await existing.ctx.dispose();
} else {
return;
@ -29,7 +30,8 @@ export const initServer = async (
}
code.internal.server[id_site] = {
rebuilding: false,
inputs: new Set(),
rebuilding: true,
ts: 0,
ctx: await context({
absWorkingDir: dir.data(root),
@ -37,6 +39,7 @@ export const initServer = async (
bundle: true,
outfile: build_file,
platform: "node",
metafile: true,
treeShaking: true,
format: "cjs",
logLevel: "silent",
@ -45,9 +48,22 @@ export const initServer = async (
name: "prasi",
setup(build) {
build.onEnd((e) => {
code.internal.server[id_site].rebuilding = false;
if (e.errors.length === 0) {
code.internal.server[id_site].inputs = new Set(
Object.keys(e.metafile?.inputs || {})
);
server.init(id_site);
}
console.log(
`\
site server rebuild ${id_site} ${
e.errors.length > 0
? `
- e.errors.map((e) => e.text).join("\n - ")`
: ""
}`
);
});
},
},
@ -111,6 +127,5 @@ if (typeof global.server_hook === "function") {
},
}),
};
code.internal.server[id_site].ctx.watch();
await code.internal.server[id_site].ctx.rebuild();
};

View File

@ -14,7 +14,12 @@ export const codeInternal = {
if (!g.prasi_code.server) g.prasi_code.server = {};
return g.prasi_code.server as Record<
SITE_ID,
{ rebuilding: boolean; ts: number; ctx: BuildContext }
{
rebuilding: boolean;
ts: number;
ctx: BuildContext;
inputs: Set<string>;
}
>;
},
get frontend() {

View File

@ -43,6 +43,18 @@ export class Watcher {
ipc(message, childProc) {
console.log(id_site, message);
const fe = code.internal.frontend[id_site];
const sv = code.internal.server[id_site];
if (sv && !sv.rebuilding) {
if (
Array.isArray(message) &&
typeof message[1] === "string" &&
sv.inputs.has(message[1])
) {
sv.rebuilding = true;
sv.ctx.rebuild();
return;
}
}
if (typeof fe !== "undefined" && !fe.rebuilding) {
fe.rebuilding = true;
clearTimeout(fe.timeout);