From a71b32a9a892a461683d615a93b026099c7c05e1 Mon Sep 17 00:00:00 2001 From: Rizky Date: Tue, 13 Feb 2024 20:32:27 +0700 Subject: [PATCH] wip fix --- bun.lockb | Bin 127358 -> 128071 bytes dockerzip | Bin 46567 -> 47106 bytes pkgs/api/_deploy.ts | 6 +- pkgs/api/_file.ts | 31 ---------- pkgs/api/_web.ts | 79 -------------------------- pkgs/index.ts | 13 +++-- pkgs/package.json | 7 ++- pkgs/server/api-ctx.ts | 20 +++++-- pkgs/server/create.ts | 9 +-- pkgs/server/load-web.ts | 35 ------------ pkgs/server/serve-web.ts | 56 +------------------ pkgs/utils/deploy.ts | 118 +++++++++++++++++++++++++++++++++++++++ pkgs/utils/diff.ts | 1 + pkgs/utils/global.ts | 28 ++++++++++ pkgs/utils/prisma.ts | 6 +- 15 files changed, 183 insertions(+), 226 deletions(-) delete mode 100644 pkgs/api/_web.ts create mode 100644 pkgs/utils/deploy.ts create mode 100644 pkgs/utils/diff.ts diff --git a/bun.lockb b/bun.lockb index 6b32bdac60b6af7a4f12ceb80d993348d43a59dd..38c3991f3faa687b5b918f74550186f11f4575a7 100755 GIT binary patch delta 7216 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 TFN1_)7o`H7Ygb?8mt6k^mR=Wn delta 6811 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
-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 JTO0qm`Y*(l%=G{O literal 46567 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 diff --git a/pkgs/api/_deploy.ts b/pkgs/api/_deploy.ts index 45feef5..1139d3d 100644 --- a/pkgs/api/_deploy.ts +++ b/pkgs/api/_deploy.ts @@ -5,7 +5,7 @@ import { apiContext } from "service-srv"; import { dir } from "utils/dir"; import { g } from "utils/global"; import { restartServer } from "utils/restart"; -import { loadWebCache } from "../server/load-web"; + export const _ = { url: "/_deploy", async api( @@ -35,8 +35,6 @@ export const _ = { case "check": return { now: Date.now(), - current: web.current, - deploys: web.deploys, db: { url: g.dburl || "-", }, @@ -121,7 +119,6 @@ datasource db { await fs.promises.writeFile(`${path}/current`, cur.toString()); web.current = cur; web.deploys.push(cur); - await loadWebCache(web.site_id, web.current); } web.deploying = null; @@ -140,7 +137,6 @@ datasource db { if (web.deploys.find((e) => e === cur)) { web.current = cur; await fs.promises.writeFile(`${path}/current`, cur.toString()); - await loadWebCache(web.site_id, web.current); } } catch (e) { web.current = lastcur; diff --git a/pkgs/api/_file.ts b/pkgs/api/_file.ts index b84a4e8..b2b9dbb 100644 --- a/pkgs/api/_file.ts +++ b/pkgs/api/_file.ts @@ -11,37 +11,6 @@ export const _ = { const rpath = decodeURIComponent(req.params._); let res = new Response("NOT FOUND", { status: 404 }); - try { - if (rpath.startsWith("site")) { - if (rpath === "site-html") { - res = new Response(generateIndexHtml("[[base_url]]", "[[site_id]]")); - } - if (rpath === "site-zip") { - const path = dir(`app/static/site.zip`); - res = new Response(Bun.file(path)); - } - if (rpath === "site-md5") { - const path = dir(`app/static/md5`); - res = new Response(Bun.file(path)); - } - } else if (rpath.startsWith("current-")) { - if (rpath.startsWith("current-md5-")) { - const site_id = rpath.substring("current-md5-".length); - const path = dir(`app/web/${site_id}/current`); - res = new Response(Bun.file(path)); - } else { - const site_id = rpath.substring("current-".length); - const path = dir(`app/web/${site_id}/current`); - const id = await Bun.file(path).text(); - if (id) { - const path = dir(`app/web/${site_id}/deploys/${id}`); - res = new Response(Bun.file(path)); - } - } - } - } catch (e) { - res = new Response("NOT FOUND", { status: 404 }); - } const path = dir(`${g.datadir}/upload/${rpath}`); const file = Bun.file(path); diff --git a/pkgs/api/_web.ts b/pkgs/api/_web.ts deleted file mode 100644 index 54f8f52..0000000 --- a/pkgs/api/_web.ts +++ /dev/null @@ -1,79 +0,0 @@ -import mime from "mime"; -import { apiContext } from "service-srv"; -import { g } from "utils/global"; -import { getApiEntry } from "./_prasi"; - -export const _ = { - url: "/_web/:id/**", - async api(id: string, _: string) { - const { req, res } = apiContext(this); - - const web = g.web[id]; - if (web) { - const cache = web.cache; - if (cache) { - const parts = _.split("/"); - - switch (parts[0]) { - case "site": { - res.setHeader("content-type", "application/json"); - if (req.query_parameters["prod"]) { - return { - site: cache.site, - pages: cache.pages.map((e) => { - return { - id: e.id, - url: e.url, - }; - }), - api: getApiEntry(), - }; - } else { - return cache.site; - } - } - case "pages": { - res.setHeader("content-type", "application/json"); - return cache.pages.map((e) => { - return { - id: e.id, - url: e.url, - }; - }); - } - case "page": { - res.setHeader("content-type", "application/json"); - return cache.pages.find((e) => e.id === parts[1]); - } - case "npm-site": { - let path = parts.slice(1).join("/"); - res.setHeader("content-type", mime.getType(path) || "text/plain"); - - if (path === "site.js") { - path = "index.js"; - } - return cache.npm.site[path]; - } - case "npm-page": { - const page_id = parts[1]; - if (cache.npm.pages[page_id]) { - let path = parts.slice(2).join("/"); - res.setHeader("content-type", mime.getType(path) || "text/plain"); - - if (path === "page.js") { - path = "index.js"; - } - return cache.npm.pages[page_id][path]; - } - res.setHeader("content-type", "text/javascript"); - } - case "comp": { - res.setHeader("content-type", "application/json"); - return cache.comps.find((e) => e.id === parts[1]); - } - } - } - } - return req.params; - }, -}; diff --git a/pkgs/index.ts b/pkgs/index.ts index 3f2a9d9..9e95ac3 100644 --- a/pkgs/index.ts +++ b/pkgs/index.ts @@ -1,16 +1,16 @@ +import { $ } from "execa"; +import { dirAsync, existsAsync } from "fs-jetpack"; +import { deploy } from "utils/deploy"; import { startDevWatcher } from "utils/dev-watcher"; +import { dir } from "utils/dir"; import { ensureNotRunning } from "utils/ensure"; import { preparePrisma } from "utils/prisma"; import { generateAPIFrm } from "./server/api-frm"; import { createServer } from "./server/create"; -import { loadWeb } from "./server/load-web"; import { prepareAPITypes } from "./server/prep-api-ts"; import { config } from "./utils/config"; import { g } from "./utils/global"; import { createLogger } from "./utils/logger"; -import { dirAsync, existsAsync } from "fs-jetpack"; -import { dir } from "utils/dir"; -import { $ } from "execa"; g.mode = process.argv.includes("dev") ? "dev" : "prod"; g.datadir = g.mode === "prod" ? "../data" : ".data"; @@ -44,9 +44,10 @@ if (g.db) { await config.init(); -await loadWeb(); - g.log.info(g.mode === "dev" ? "DEVELOPMENT" : "PRODUCTION"); + + +await deploy.init(); if (g.mode === "dev") { await startDevWatcher(); } diff --git a/pkgs/package.json b/pkgs/package.json index 9e9fa29..f9b42b2 100644 --- a/pkgs/package.json +++ b/pkgs/package.json @@ -6,14 +6,15 @@ "@types/mime": "^3.0.2", "@types/unzipper": "^0.10.7", "execa": "^8.0.1", + "rambda": "^9.1.0", "fs-jetpack": "^5.1.0", "lmdb": "^2.8.5", "mime": "^3.0.0", "pino": "^8.15.3", "pino-pretty": "^10.2.0", - "radash": "^11.0.0", "radix3": "^1.1.0", "typescript": "^5.2.2", - "unzipper": "^0.10.14" + "unzipper": "^0.10.14", + "fast-myers-diff": "^3.2.0" } -} +} \ No newline at end of file diff --git a/pkgs/server/api-ctx.ts b/pkgs/server/api-ctx.ts index ec0e334..c631f37 100644 --- a/pkgs/server/api-ctx.ts +++ b/pkgs/server/api-ctx.ts @@ -109,10 +109,18 @@ export const createResponse = ( return res; }; -function simpleHash(str: string) { - let hash = 0; - for (let i = 0; i < str.length; i++) { - hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0; +export const simpleHash = (str: string, seed = 0) => { + let h1 = 0xdeadbeef ^ seed, + h2 = 0x41c6ce57 ^ seed; + for (let i = 0, ch; i < str.length; i++) { + ch = str.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); } - return (hash >>> 0).toString(36); -} + h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507); + h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507); + h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909); + + return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(); +}; diff --git a/pkgs/server/create.ts b/pkgs/server/create.ts index 9149814..040188d 100644 --- a/pkgs/server/create.ts +++ b/pkgs/server/create.ts @@ -1,13 +1,11 @@ +import { file } from "bun"; import { inspectAsync, listAsync } from "fs-jetpack"; import { join } from "path"; import { createRouter } from "radix3"; +import { dir } from "../utils/dir"; import { g } from "../utils/global"; import { parseArgs } from "./parse-args"; import { serveAPI } from "./serve-api"; -import { serveWeb } from "./serve-web"; -import { dir } from "../utils/dir"; -import { file } from "bun"; -import { trim } from "radash"; export const createServer = async () => { g.router = createRouter({ strictTrailingSlash: true }); @@ -72,6 +70,9 @@ export const createServer = async () => { }); }; + if (g.deploy.gz?.code.server) { + } + return handle(req); }, }); diff --git a/pkgs/server/load-web.ts b/pkgs/server/load-web.ts index db7ae3c..86f0b09 100644 --- a/pkgs/server/load-web.ts +++ b/pkgs/server/load-web.ts @@ -1,40 +1,5 @@ -import { file } from "bun"; -import { $ } from "execa"; -import { - dirAsync, - existsAsync, - inspectTreeAsync, - readAsync, - removeAsync, - writeAsync, -} from "fs-jetpack"; -import { gunzipSync } from "zlib"; -import { downloadFile } from "../api/_deploy"; -import { dir } from "../utils/dir"; -import { g } from "../utils/global"; const decoder = new TextDecoder(); -export const loadWeb = async () => { - await dirAsync(dir(`app/static`)); -}; - -export const loadWebCache = async (site_id: string, ts: number | string) => { - const web = g.web; - if (web) { - const path = dir(`app/web/deploys/${ts}`); - if (await existsAsync(path)) { - const fileContent = await readAsync(path, "buffer"); - if (fileContent) { - console.log( - `Loading site ${site_id}: ${humanFileSize(fileContent.byteLength)}` - ); - - const res = gunzipSync(fileContent); - } - } - } -}; - function humanFileSize(bytes: any, si = false, dp = 1) { const thresh = si ? 1000 : 1024; diff --git a/pkgs/server/serve-web.ts b/pkgs/server/serve-web.ts index 4afb3f0..6b0f671 100644 --- a/pkgs/server/serve-web.ts +++ b/pkgs/server/serve-web.ts @@ -2,62 +2,8 @@ import { statSync } from "fs"; import { join } from "path"; import { dir } from "utils/dir"; -const index = { - html: "", - css: { - src: null as any, - encoding: "", - }, - isFile: {} as Record, -}; - export const serveWeb = async (url: URL, req: Request) => { - let site_id = ""; - - if (!site_id) { - return false; - } - - const base = dir(`app/static/site`); - - let path = join(base, url.pathname); - - if (url.pathname === "/site_id") { - return new Response(site_id); - } - - if (url.pathname.startsWith("/index.css")) { - if (!index.css.src) { - const res = await fetch("https://prasi.app/index.css"); - index.css.src = await res.arrayBuffer(); - index.css.encoding = res.headers.get("content-encoding") || ""; - } - - return new Response(index.css.src, { - headers: { - "content-type": "text/css", - "content-encoding": index.css.encoding, - }, - }); - } - - try { - if (typeof index.isFile[path] === "undefined") { - const s = statSync(path); - if (s.isFile()) { - index.isFile[path] = true; - return new Response(Bun.file(path)); - } - } else if (index.isFile[path]) { - return new Response(Bun.file(path)); - } - } catch (e) {} - - if (!index.html) { - index.html = generateIndexHtml("", site_id); - } - - return { site_id, index: index.html }; + return {}; }; export const generateIndexHtml = (base_url: string, site_id: string) => { diff --git a/pkgs/utils/deploy.ts b/pkgs/utils/deploy.ts new file mode 100644 index 0000000..d8973dc --- /dev/null +++ b/pkgs/utils/deploy.ts @@ -0,0 +1,118 @@ +import { dirAsync, read } from "fs-jetpack"; +import { dir } from "./dir"; +import { g } from "./global"; +import { gunzipAsync } from "./gzip"; +import { createRouter } from "radix3"; + +const decoder = new TextDecoder(); +export const deploy = { + async init() { + await dirAsync(dir(`app/web/deploy`)); + + if (!(await this.has_gz())) { + await this.run(); + } + + await this.load(this.config.deploy.ts); + }, + async load(ts: string) { + console.log(`Loading site: ${this.config.site_id} [ts: ${ts}]`); + + try { + g.deploy.gz = JSON.parse( + decoder.decode( + await gunzipAsync( + new Uint8Array( + await Bun.file(dir(`app/web/deploy/${ts}.gz`)).arrayBuffer() + ) + ) + ) + ); + + if (g.deploy.gz) { + for (const page of g.deploy.gz.layouts) { + if (page.is_default_layout) { + g.deploy.layout = page.content_tree; + break; + } + } + if (!g.deploy.layout && g.deploy.gz.layouts.length > 0) { + g.deploy.layout = g.deploy.gz.layouts[0].content_tree; + } + + g.deploy.router = createRouter(); + for (const page of g.deploy.gz.pages) { + g.deploy.router.insert(page.url, page); + } + + g.deploy.comps = {}; + for (const comp of g.deploy.gz.comps) { + g.deploy.comps[comp.id] = comp.content_tree; + } + } + } catch (e) { + console.log("Failed to load site", this.config.site_id); + } + }, + async run() { + if (!this.config.site_id) { + console.log("site_id is not found on app/web/config.json"); + return; + } + + let base_url = "https://prasi.avolut.com"; + if (g.mode === "dev") { + base_url = "http://localhost:4550"; + } + + console.log( + `Downloading site deploy: ${this.config.site_id} [ts: ${this.config.deploy.ts}]` + ); + const res = await fetch(`${base_url}/prod-zip/${this.config.site_id}`); + const ts = Date.now(); + + const file = Bun.file(dir(`app/web/deploy/${ts}.gz`)); + await Bun.write(file, await res.arrayBuffer()); + this.config.deploy.ts = ts + ""; + + await this.saveConfig(); + }, + get config() { + if (!g.deploy) { + g.deploy = { + comps: {}, + layout: null, + router: createRouter(), + config: { deploy: { ts: "" }, site_id: "" }, + init: false, + raw: null, + gz: null as any, + }; + } + + if (!g.deploy.init) { + g.deploy.init = true; + g.deploy.raw = read(dir(`app/web/config.json`), "json"); + for (const [k, v] of Object.entries(g.deploy.raw)) { + (g.deploy.config as any)[k] = v; + } + } + + return g.deploy.config; + }, + saveConfig() { + return Bun.write( + Bun.file(dir(`app/web/config.json`)), + JSON.stringify(this.config, null, 2) + ); + }, + has_gz() { + if (this.config.deploy.ts) { + return Bun.file( + dir(`app/web/deploy/${this.config.deploy.ts}.gz`) + ).exists(); + } + + return false; + }, +}; diff --git a/pkgs/utils/diff.ts b/pkgs/utils/diff.ts new file mode 100644 index 0000000..769e929 --- /dev/null +++ b/pkgs/utils/diff.ts @@ -0,0 +1 @@ +export class Diff {} diff --git a/pkgs/utils/global.ts b/pkgs/utils/global.ts index 785665f..c292d8a 100644 --- a/pkgs/utils/global.ts +++ b/pkgs/utils/global.ts @@ -39,4 +39,32 @@ export const g = global as unknown as { js: string; etag: string; }; + deploy: { + init: boolean; + raw: any; + router: RadixRouter<{ url: string; id: string }>; + layout: null | any; + comps: Record; + gz: null | { + layouts: { + id: string; + url: string; + name: true; + content_tree: any; + is_default_layout: true; + }[]; + pages: { id: string; url: string; name: true; content_tree: any }[]; + site: {}; + comps: { id: string; content_tree: true }[]; + code: { + server: Record; + site: Record; + core: Record; + }; + }; + config: { + site_id: string; + deploy: { ts: string }; + }; + }; }; diff --git a/pkgs/utils/prisma.ts b/pkgs/utils/prisma.ts index 1915c5f..5d9dc8c 100644 --- a/pkgs/utils/prisma.ts +++ b/pkgs/utils/prisma.ts @@ -5,8 +5,10 @@ import { g } from "./global"; export const preparePrisma = async () => { if (await existsAsync(dir("app/db/.env"))) { - await $({ cwd: dir(`app/db`) })`bun prisma db pull`; - await $({ cwd: dir(`app/db`) })`bun prisma generate`; + if (g.mode !== "dev") { + await $({ cwd: dir(`app/db`) })`bun prisma db pull`; + await $({ cwd: dir(`app/db`) })`bun prisma generate`; + } try { const { PrismaClient } = await import("../../app/db/db"); g.db = new PrismaClient();