From c3af3cba39ca1966cc2a497bb4c1a9a677f1f187 Mon Sep 17 00:00:00 2001 From: Rizky Date: Sun, 15 Oct 2023 13:52:59 +0700 Subject: [PATCH] fix service worker --- app/web/src/render/editor/logic/tree-prop.tsx | 6 +- .../src/render/editor/logic/tree-scope.tsx | 6 +- app/web/src/render/live/logic/tree-prop.tsx | 6 +- app/web/src/render/live/logic/tree-scope.tsx | 6 +- app/web/src/sworker.ts | 65 ++++++++++++------- app/web/src/utils/script/init-api.ts | 2 +- pkgs/core/api/_dbs.ts | 6 +- pkgs/core/server/api-ctx.ts | 9 ++- 8 files changed, 69 insertions(+), 37 deletions(-) diff --git a/app/web/src/render/editor/logic/tree-prop.tsx b/app/web/src/render/editor/logic/tree-prop.tsx index 1b973dbd..b94e5193 100644 --- a/app/web/src/render/editor/logic/tree-prop.tsx +++ b/app/web/src/render/editor/logic/tree-prop.tsx @@ -13,8 +13,10 @@ export const treePropEval = ( cprops: [string, FNCompDef][] ) => { if (meta.item.type === "item" && meta.item.component) { - if (!p.script.db) p.script.db = createDB(p.site.api_url); - if (!p.script.api) p.script.api = createAPI(p.site.api_url); + if (p.site.api_url) { + if (!p.script.db) p.script.db = createDB(p.site.api_url); + if (!p.script.api) p.script.api = createAPI(p.site.api_url); + } const props = meta.item.component.props; diff --git a/app/web/src/render/editor/logic/tree-scope.tsx b/app/web/src/render/editor/logic/tree-scope.tsx index a6b95b00..4e31e45d 100644 --- a/app/web/src/render/editor/logic/tree-scope.tsx +++ b/app/web/src/render/editor/logic/tree-scope.tsx @@ -27,8 +27,10 @@ export const treeScopeEval = ( } // prepare args - if (!p.script.db) p.script.db = createDB(p.site.api_url); - if (!p.script.api) p.script.api = createAPI(p.site.api_url); + if (p.site.api_url) { + if (!p.script.db) p.script.db = createDB(p.site.api_url); + if (!p.script.api) p.script.api = createAPI(p.site.api_url); + } const w = window as any; const finalScope = mergeScopeUpwards(p, meta); diff --git a/app/web/src/render/live/logic/tree-prop.tsx b/app/web/src/render/live/logic/tree-prop.tsx index d7dc64cb..950cf744 100644 --- a/app/web/src/render/live/logic/tree-prop.tsx +++ b/app/web/src/render/live/logic/tree-prop.tsx @@ -15,8 +15,10 @@ export const treePropEval = ( cprops: [string, FNCompDef][] ) => { if (meta.item.type === "item" && meta.item.component) { - if (!p.script.db) p.script.db = createDB(p.site.api_url); - if (!p.script.api) p.script.api = createAPI(p.site.api_url); + if (p.site.api_url) { + if (!p.script.db) p.script.db = createDB(p.site.api_url); + if (!p.script.api) p.script.api = createAPI(p.site.api_url); + } const props = meta.item.component.props; diff --git a/app/web/src/render/live/logic/tree-scope.tsx b/app/web/src/render/live/logic/tree-scope.tsx index 96d3a681..04dd8c16 100644 --- a/app/web/src/render/live/logic/tree-scope.tsx +++ b/app/web/src/render/live/logic/tree-scope.tsx @@ -35,8 +35,10 @@ export const treeScopeEval = ( } // prepare args - if (!p.script.db) p.script.db = createDB(p.site.api_url); - if (!p.script.api) p.script.api = createAPI(p.site.api_url); + if (p.site.api_url) { + if (!p.script.db) p.script.db = createDB(p.site.api_url); + if (!p.script.api) p.script.api = createAPI(p.site.api_url); + } const w = window as any; const finalScope = mergeScopeUpwards(p, meta); diff --git a/app/web/src/sworker.ts b/app/web/src/sworker.ts index b1941aab..c8a9bc3e 100644 --- a/app/web/src/sworker.ts +++ b/app/web/src/sworker.ts @@ -1,7 +1,12 @@ import { manifest, version } from "@parcel/service-worker"; +const g = { + cache: null as null | Cache, +}; + async function install() { const cache = await caches.open(version); + g.cache = cache; await cache.addAll(manifest); } addEventListener("install", (e) => (e as ExtendableEvent).waitUntil(install())); @@ -14,27 +19,41 @@ addEventListener("activate", (e) => (e as ExtendableEvent).waitUntil(activate()) ); -addEventListener("fetch", async (evt) => { - const e = evt as FetchEvent; - e.respondWith( - (async () => { - const r = await caches.match(e.request); - if (r) { - return r; - } - return await fetch(e.request); - })() - ); -}); -addEventListener("message", async (e) => { - const type = e.data.type; - const cache = await caches.open(version); +// addEventListener("fetch", async (evt) => { +// const e = evt as FetchEvent; - switch (type) { - case "add-cache": - if (!(await cache.match(e.data.url))) { - await cache.add(e.data.url); - } - break; - } -}); +// e.respondWith( +// (async () => { +// if (!g.cache) { +// g.cache = await caches.open(version); +// } +// const cache = g.cache; +// const r = await cache.match(e.request); +// if (r) { +// return r; +// } +// const url = e.request.url; +// if (url.includes("_api_frm")) { +// cache.add(e.request); +// } + +// return await fetch(e.request); +// })() +// ); +// }); +// addEventListener("message", async (e) => { +// const type = e.data.type; + +// if (!g.cache) { +// g.cache = await caches.open(version); +// } +// const cache = g.cache; + +// switch (type) { +// case "add-cache": +// if (!(await cache.match(e.data.url))) { +// await cache.add(e.data.url); +// } +// break; +// } +// }); diff --git a/app/web/src/utils/script/init-api.ts b/app/web/src/utils/script/init-api.ts index 3fa4e791..ce448203 100644 --- a/app/web/src/utils/script/init-api.ts +++ b/app/web/src/utils/script/init-api.ts @@ -20,7 +20,7 @@ export const createAPI = (url: string) => { w.prasiApi = {}; } if (!url) { - throw new Error("s") + throw new Error("No URL provided"); } return w.apiClient(w.prasiApi[url]?.apiEntry, url); }; diff --git a/pkgs/core/api/_dbs.ts b/pkgs/core/api/_dbs.ts index d7a8dbd9..041a0e05 100644 --- a/pkgs/core/api/_dbs.ts +++ b/pkgs/core/api/_dbs.ts @@ -1,15 +1,13 @@ import { apiContext } from "../server/api-ctx"; -import { execQuery } from "../utils/query"; +import { DBArg, execQuery } from "../utils/query"; export const _ = { url: "/_dbs/:dbName/:action", async api(dbName: any, action?: string) { const { req, res } = apiContext(this); - const body = req.params; - try { - const result = await execQuery(body, db); + const result = await execQuery(req.params, db); res.send(result); } catch (e: any) { res.sendStatus(500); diff --git a/pkgs/core/server/api-ctx.ts b/pkgs/core/server/api-ctx.ts index 9cb0c35c..a6d9d3bf 100644 --- a/pkgs/core/server/api-ctx.ts +++ b/pkgs/core/server/api-ctx.ts @@ -37,12 +37,19 @@ export const apiContext = (ctx: any) => { }; }; +const replacer = (key: string, value: string) => { + if (typeof value === "string" && value.startsWith("BigInt::")) { + return BigInt(value.substring(8)); + } + return value; +}; + export const createResponse = (existingRes: any, body: any) => { const status = typeof existingRes._status === "number" ? existingRes._status : undefined; let res = new Response( - typeof body === "string" ? body : JSON.stringify(body), + typeof body === "string" ? body : JSON.stringify(body, replacer), status ? { status,