From f894e70c69894f092f89f57c713d1eb1c3bbd520 Mon Sep 17 00:00:00 2001 From: Rizky Date: Sun, 15 Oct 2023 14:24:46 +0700 Subject: [PATCH] fix bigint --- app/web/src/sworker.ts | 13 +++++++++---- pkgs/core/server/api-ctx.ts | 3 +++ pkgs/core/server/serve-api.ts | 11 ++++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/web/src/sworker.ts b/app/web/src/sworker.ts index c4be84f6..690d8444 100644 --- a/app/web/src/sworker.ts +++ b/app/web/src/sworker.ts @@ -32,12 +32,17 @@ addEventListener("fetch", async (evt) => { if (r) { return r; } - const url = e.request.url; - if (url.includes("_api_frm")) { - cache.add(e.request); + const url = new URL(e.request.url); + + const res = await fetch(e.request); + if ( + url.pathname.includes("_api_frm") || + url.pathname.startsWith("/_prasi") + ) { + await cache.put(e.request, res); } - return await fetch(e.request); + return res; })() ); }); diff --git a/pkgs/core/server/api-ctx.ts b/pkgs/core/server/api-ctx.ts index a6d9d3bf..044b7fbf 100644 --- a/pkgs/core/server/api-ctx.ts +++ b/pkgs/core/server/api-ctx.ts @@ -38,6 +38,9 @@ export const apiContext = (ctx: any) => { }; const replacer = (key: string, value: string) => { + if (typeof value === "bigint") { + return `BigInt::${value}`; + } if (typeof value === "string" && value.startsWith("BigInt::")) { return BigInt(value.substring(8)); } diff --git a/pkgs/core/server/serve-api.ts b/pkgs/core/server/serve-api.ts index 6a166fb8..4d1d9eba 100644 --- a/pkgs/core/server/serve-api.ts +++ b/pkgs/core/server/serve-api.ts @@ -1,6 +1,13 @@ import { createResponse } from "./api-ctx"; import { g } from "../utils/global"; +const replacer = (key: string, value: string) => { + if (typeof value === "string" && value.startsWith("BigInt::")) { + return BigInt(value.substring(8)); + } + return value; +}; + export const serveAPI = async (url: URL, req: Request) => { let found = g.router.lookup(url.pathname); if (!found?.url) { @@ -23,7 +30,9 @@ export const serveAPI = async (url: URL, req: Request) => { if (req.method !== "GET") { if (!req.headers.get("content-type")?.startsWith("multipart/form-data")) { try { - const json: any = await req.json(); + const text = await req.text(); + const json = JSON.parse(text, replacer); + if (typeof json === "object") { if (Array.isArray(json)) { args = json;