From 3a897090c674a9c36821cdf1efb419cc41325caa Mon Sep 17 00:00:00 2001 From: Rizky Date: Sat, 14 Oct 2023 21:56:56 +0700 Subject: [PATCH] fix --- app/srv/package.json | 11 +++ app/srv/ws/edit/action/diff-local.ts | 87 +++++++++++++++++ app/srv/ws/edit/action/get-comp.ts | 71 ++++++++++++++ app/srv/ws/edit/action/get-page.ts | 74 +++++++++++++++ app/srv/ws/edit/action/sv-local.ts | 48 ++++++++++ app/srv/ws/edit/action/svdiff-remote.ts | 46 +++++++++ app/srv/ws/edit/action/undo-redo.ts | 37 ++++++++ app/srv/ws/edit/edit-global.ts | 70 ++++++++++++++ app/srv/ws/edit/tools/load-page-cached.ts | 47 ++++++++++ app/srv/ws/edit/tools/load-page.ts | 22 +++++ app/srv/ws/edit/tools/load-site.ts | 95 +++++++++++++++++++ app/srv/ws/edit/tools/validate-tree-page.ts | 54 +++++++++++ app/srv/ws/handler.ts | 99 +++++++++++++++++++- bun.lockb | Bin 280992 -> 9067 bytes package.json | 3 +- pkgs/core/server/create.ts | 5 +- 16 files changed, 762 insertions(+), 7 deletions(-) create mode 100644 app/srv/package.json create mode 100644 app/srv/ws/edit/action/diff-local.ts create mode 100644 app/srv/ws/edit/action/get-comp.ts create mode 100644 app/srv/ws/edit/action/get-page.ts create mode 100644 app/srv/ws/edit/action/sv-local.ts create mode 100644 app/srv/ws/edit/action/svdiff-remote.ts create mode 100644 app/srv/ws/edit/action/undo-redo.ts create mode 100644 app/srv/ws/edit/edit-global.ts create mode 100644 app/srv/ws/edit/tools/load-page-cached.ts create mode 100644 app/srv/ws/edit/tools/load-page.ts create mode 100644 app/srv/ws/edit/tools/load-site.ts create mode 100644 app/srv/ws/edit/tools/validate-tree-page.ts diff --git a/app/srv/package.json b/app/srv/package.json new file mode 100644 index 00000000..bcd4284f --- /dev/null +++ b/app/srv/package.json @@ -0,0 +1,11 @@ +{ + "name": "srv", + "dependencies": { + "@node-rs/argon2": "^1.5.2", + "@paralleldrive/cuid2": "^2.2.2", + "@types/mime-types": "^2.1.2", + "lz-string": "^1.5.0", + "mime-types": "^2.1.35", + "radix3": "^1.1.0" + } +} diff --git a/app/srv/ws/edit/action/diff-local.ts b/app/srv/ws/edit/action/diff-local.ts new file mode 100644 index 00000000..b7a4563b --- /dev/null +++ b/app/srv/ws/edit/action/diff-local.ts @@ -0,0 +1,87 @@ +import { Websocket } from "hyper-express"; +import { decompress } from "lz-string"; +import * as Y from "yjs"; +import { eg } from "../edit-global"; + +export const diffLocal = (ws: Websocket, msg: any) => { + return new Promise((resolve) => { + const diff_local = Uint8Array.from( + decompress(msg.diff_local) + .split(",") + .map((x) => parseInt(x, 10)) + ); + let doc = null as unknown as Y.Doc; + let wss: Set = null as any; + let um: Y.UndoManager = null as any; + if (msg.mode === "page") { + doc = eg.edit.page[msg.id].doc as any; + wss = eg.edit.page[msg.id].ws; + um = eg.edit.page[msg.id].undoManager; + } else if (msg.mode === "comp") { + doc = eg.edit.comp[msg.id].doc as any; + wss = eg.edit.comp[msg.id].ws; + um = eg.edit.comp[msg.id].undoManager; + } else if (msg.mode === "site") { + doc = eg.edit.site[msg.id].doc as any; + wss = eg.edit.site[msg.id].ws; + um = eg.edit.site[msg.id].undoManager; + } + + if (doc && wss) { + Y.applyUpdate(doc, diff_local); + + if (msg.mode === "page") { + clearTimeout(eg.edit.page[msg.id].saveTimeout); + eg.edit.page[msg.id].saveTimeout = setTimeout(async () => { + if (msg.id) { + const page = eg.edit.page[msg.id].doc.getMap("map").toJSON(); + try { + await db.page.update({ + where: { id: page.id }, + data: { + content_tree: page.content_tree, + updated_at: new Date(), + }, + }); + resolve(); + } catch (e) { + console.error(e); + console.error({ + ...page, + updated_at: new Date(), + }); + } + } + }, 1500); + } else if (msg.mode === "comp") { + eg.edit.comp[msg.id].saveTimeout = setTimeout(async () => { + const comp = eg.edit.comp[msg.id].doc.getMap("map").toJSON(); + await db.component.update({ + where: { + id: msg.id, + }, + data: { + name: comp.name, + content_tree: comp.content_tree, + updated_at: new Date(), + }, + }); + }, 1500); + } else if (msg.mode === "site") { + clearTimeout(eg.edit.site[msg.id].saveTimeout); + eg.edit.site[msg.id].saveTimeout = setTimeout(async () => { + const site = eg.edit.site[msg.id].doc.getMap("site").toJSON(); + delete site.page; + await db.site.update({ + where: { + id: msg.id, + }, + data: { + ...site, + }, + }); + }, 1500); + } + } + }); +}; diff --git a/app/srv/ws/edit/action/get-comp.ts b/app/srv/ws/edit/action/get-comp.ts new file mode 100644 index 00000000..44a0b809 --- /dev/null +++ b/app/srv/ws/edit/action/get-comp.ts @@ -0,0 +1,71 @@ +import { Websocket } from "hyper-express"; +import { compress } from "lz-string"; +import { syncronize } from "y-pojo"; +import * as Y from "yjs"; +import { + WS_MSG_GET_COMP, + WS_MSG_SET_COMP, + WS_MSG_SV_LOCAL, +} from "../../../web/src/utils/types/ws"; +import { SingleComp, eg } from "../edit-global"; + +export const getComp = async (ws: Websocket, msg: WS_MSG_GET_COMP) => { + const comp_id = msg.comp_id; + + if (!eg.edit.comp[comp_id]) { + const rawComp = await db.component.findFirst({ + where: { + id: comp_id, + }, + }); + + if (!rawComp) { + const sent: WS_MSG_SET_COMP = { + type: "set_comp", + comp_id: comp_id, + changes: "", + }; + ws.send(JSON.stringify(sent)); + return; + } + + if (rawComp) { + const ydoc = new Y.Doc() as SingleComp["doc"]; + const map = ydoc.getMap("map"); + syncronize(map as any, rawComp); + + const ws = new Set(); + const um = new Y.UndoManager(map, { ignoreRemoteMapChanges: true }); + const broadcast = () => { + const sv_local = compress(Y.encodeStateVector(ydoc as any).toString()); + const broadcast: WS_MSG_SV_LOCAL = { + type: "sv_local", + sv_local, + mode: "comp", + id: comp_id, + }; + ws.forEach((w) => w.send(JSON.stringify(broadcast))); + }; + um.on("stack-item-added", broadcast); + um.on("stack-item-updated", broadcast); + + eg.edit.comp[comp_id] = { + doc: ydoc, + id: comp_id, + undoManager: um, + ws, + }; + } + } + + const comp = eg.edit.comp[comp_id]; + if (comp) { + if (!comp.ws.has(ws)) comp.ws.add(ws); + const sent: WS_MSG_SET_COMP = { + type: "set_comp", + comp_id: comp_id, + changes: compress(Y.encodeStateAsUpdate(comp.doc as any).toString()), + }; + ws.send(JSON.stringify(sent)); + } +}; diff --git a/app/srv/ws/edit/action/get-page.ts b/app/srv/ws/edit/action/get-page.ts new file mode 100644 index 00000000..1e606941 --- /dev/null +++ b/app/srv/ws/edit/action/get-page.ts @@ -0,0 +1,74 @@ +import { Websocket } from "hyper-express"; +import { compress } from "lz-string"; +import { syncronize } from "y-pojo"; +import * as Y from "yjs"; +import { + WS_MSG_GET_PAGE, + WS_MSG_SET_PAGE, + WS_MSG_SV_LOCAL, +} from "../../../web/src/utils/types/ws"; +import { MPage } from "../../../web/src/utils/types/general"; +import { eg } from "../edit-global"; +import { loadPage } from "../tools/load-page"; +import { validate } from "uuid"; + +export const getPage = async (ws: Websocket, msg: WS_MSG_GET_PAGE) => { + const page_id = msg.page_id; + if (!validate(page_id)) return; + if (!eg.edit.page[page_id]) { + const rawPage = await loadPage(page_id); + + if (rawPage) { + const ydoc = new Y.Doc() as MPage; + let root = ydoc.getMap("map"); + syncronize(root as any, rawPage); + const ws = new Set(); + const um = new Y.UndoManager(root, { ignoreRemoteMapChanges: true }); + const broadcast = () => { + const sv_local = compress(Y.encodeStateVector(ydoc as any).toString()); + const broadcast: WS_MSG_SV_LOCAL = { + type: "sv_local", + sv_local, + mode: "page", + id: page_id, + }; + ws.forEach((w) => w.send(JSON.stringify(broadcast))); + }; + um.on("stack-item-added", broadcast); + um.on("stack-item-updated", broadcast); + + eg.edit.page[page_id] = { + id: page_id, + doc: ydoc, + undoManager: um, + ws, + }; + } + } + + const page = eg.edit.page[page_id]; + // let root = page.doc.getMap("map").get("content_tree") as unknown as MContent; + // if (root) { + // let changed = false; + // await page.doc.transact(async () => { + // changed = await validateTreePage(ws, root); + // }); + + // if (changed) { + // root = page.doc.getMap("map").get("content_tree") as unknown as MContent; + // await db.page.update({ + // where: { + // id: page.id, + // }, + // data: { content_tree: root.toJSON(), updated_at: new Date() }, + // }); + // } + // } + + page.ws.add(ws); + const sent: WS_MSG_SET_PAGE = { + type: "set_page", + changes: compress(Y.encodeStateAsUpdate(page.doc as any).toString()), + }; + ws.send(JSON.stringify(sent)); +}; diff --git a/app/srv/ws/edit/action/sv-local.ts b/app/srv/ws/edit/action/sv-local.ts new file mode 100644 index 00000000..1df6a97c --- /dev/null +++ b/app/srv/ws/edit/action/sv-local.ts @@ -0,0 +1,48 @@ +import { Websocket } from "hyper-express"; +import { compress, decompress } from "lz-string"; +import * as Y from "yjs"; +import { + WS_MSG_SVDIFF_REMOTE, + WS_MSG_SV_LOCAL, +} from "../../../web/src/utils/types/ws"; +import { eg } from "../edit-global"; +import { getComp } from "./get-comp"; +import { getPage } from "./get-page"; + +export const svLocal = async (ws: Websocket, msg: WS_MSG_SV_LOCAL) => { + const changes = Uint8Array.from( + decompress(msg.sv_local) + .split(",") + .map((x) => parseInt(x, 10)) + ); + let doc = null as any; + if (msg.mode === "page") { + if (!eg.edit.page[msg.id]) { + await getPage(ws, { type: "get_page", page_id: msg.id }); + } + + doc = eg.edit.page[msg.id].doc; + } else if (msg.mode === "comp") { + if (!eg.edit.comp[msg.id]) { + await getComp(ws, { comp_id: msg.id, type: "get_comp" }); + } + + doc = eg.edit.comp[msg.id].doc; + } else if (msg.mode === "site") { + doc = eg.edit.site[msg.id].doc; + } + + if (doc) { + const diff_remote = Y.encodeStateAsUpdate(doc, changes); + const sv_remote = Y.encodeStateVector(doc); + + const sendmsg: WS_MSG_SVDIFF_REMOTE = { + diff_remote: compress(diff_remote.toString()), + sv_remote: compress(sv_remote.toString()), + id: msg.id, + mode: msg.mode, + type: "svd_remote", + }; + ws.send(JSON.stringify(sendmsg)); + } +}; diff --git a/app/srv/ws/edit/action/svdiff-remote.ts b/app/srv/ws/edit/action/svdiff-remote.ts new file mode 100644 index 00000000..e83d5c01 --- /dev/null +++ b/app/srv/ws/edit/action/svdiff-remote.ts @@ -0,0 +1,46 @@ +import { Websocket } from "hyper-express"; +import { compress, decompress } from "lz-string"; +import * as Y from "yjs"; +import { + WS_MSG_DIFF_LOCAL, + WS_MSG_SVDIFF_REMOTE, +} from "../../../web/src/utils/types/ws"; +import { eg } from "../edit-global"; + +export const svdiffRemote = async ( + ws: Websocket, + msg: WS_MSG_SVDIFF_REMOTE +) => { + const sv_remote = Uint8Array.from( + decompress(msg.sv_remote) + .split(",") + .map((x) => parseInt(x, 10)) + ); + const diff_remote = Uint8Array.from( + decompress(msg.diff_remote) + .split(",") + .map((x) => parseInt(x, 10)) + ); + + let doc = null as any; + if (msg.mode === "page") { + doc = eg.edit.page[msg.id].doc; + } else if (msg.mode === "comp") { + doc = eg.edit.comp[msg.id].doc; + } else if (msg.mode === "site") { + doc = eg.edit.site[msg.id].doc; + } + + if (doc) { + const diff_local = Y.encodeStateAsUpdate(doc as any, sv_remote); + Y.applyUpdate(doc as any, diff_remote); + + const sendmsg: WS_MSG_DIFF_LOCAL = { + type: "diff_local", + mode: msg.mode, + id: msg.id, + diff_local: compress(diff_local.toString()), + }; + ws.send(JSON.stringify(sendmsg)); + } +}; diff --git a/app/srv/ws/edit/action/undo-redo.ts b/app/srv/ws/edit/action/undo-redo.ts new file mode 100644 index 00000000..7e18283a --- /dev/null +++ b/app/srv/ws/edit/action/undo-redo.ts @@ -0,0 +1,37 @@ +import { Websocket } from "hyper-express"; +import { eg } from "../edit-global"; +import { UndoManager } from "yjs"; +import { WS_MSG_REDO, WS_MSG_UNDO } from "../../../web/src/utils/types/ws"; + +export const undo = (ws: Websocket, msg: WS_MSG_UNDO) => { + const um = getUndoManager(msg); + if (um && um.canUndo()) { + um.undo(); + } +}; + +export const redo = (ws: Websocket, msg: WS_MSG_REDO) => { + const um = getUndoManager(msg); + if (um && um.canRedo()) { + um.redo(); + } +}; + +const getUndoManager = (msg: WS_MSG_UNDO | WS_MSG_REDO) => { + let undoManager = null as null | UndoManager; + if (msg.mode === "page") { + if (eg.edit.page[msg.id]) { + undoManager = eg.edit.page[msg.id].undoManager; + } + } else if (msg.mode === "site") { + if (eg.edit.site[msg.id]) { + undoManager = eg.edit.site[msg.id].undoManager; + } + } else if (msg.mode === "comp") { + if (eg.edit.comp[msg.id]) { + undoManager = eg.edit.comp[msg.id].undoManager; + } + } + + return undoManager; +}; diff --git a/app/srv/ws/edit/edit-global.ts b/app/srv/ws/edit/edit-global.ts new file mode 100644 index 00000000..0d5c06ef --- /dev/null +++ b/app/srv/ws/edit/edit-global.ts @@ -0,0 +1,70 @@ +import { ServerWebSocket } from "bun"; +import { component } from "dbgen"; +import { UndoManager } from "yjs"; +import { TypedArray, TypedDoc, TypedMap } from "yjs-types"; +import type { WSData } from "../../../../pkgs/core/server/create"; + +import { IItem } from "../../../web/src/utils/types/item"; +import { IRoot } from "../../../web/src/utils/types/root"; +import { Site } from "./tools/load-site"; +import { MPage } from "../../../web/src/utils/types/general"; +import type { RadixRouter } from "radix3"; + +type ArrayElement = + ArrayType extends readonly (infer ElementType)[] ? ElementType : never; + +export type SingleComp = { + id: string; + doc: TypedDoc<{ + map: TypedMap }>; + }>; + undoManager: UndoManager; + saveTimeout?: ReturnType; + ws: Set>; +}; + +export const eg = global as unknown as { + cache: Record< + string, + Record< + string, + { + id: string; + js: string | null; + url: string; + js_compiled: string | null; + content_tree: IRoot; + lastRefresh: number; + } + > + >; + router: Record>; + edit: { + site: Record< + string, + { + id: string; + doc: TypedDoc<{ + site: TypedMap< + Site & { page: TypedArray> } + >; + }>; + undoManager: UndoManager; + saveTimeout?: ReturnType; + ws: Set>; + } + >; + comp: Record; + page: Record< + string, + { + id: string; + doc: MPage; + undoManager: UndoManager; + saveTimeout?: ReturnType; + ws: Set>; + } + >; + ws: WeakMap, { clientID: string }>; + }; +}; diff --git a/app/srv/ws/edit/tools/load-page-cached.ts b/app/srv/ws/edit/tools/load-page-cached.ts new file mode 100644 index 00000000..af09e96e --- /dev/null +++ b/app/srv/ws/edit/tools/load-page-cached.ts @@ -0,0 +1,47 @@ +import { eg } from "../edit-global"; + +// page cache timeout, in seconds +const PAGE_CACHE_TIMEOUT = 1; + +export const loadCachedPage = async (site_id: string, page_id: string) => { + let site_cache = eg.cache[site_id]; + if (!site_cache) { + eg.cache[site_id] = {}; + site_cache = eg.cache[site_id]; + } + + if (!page_id) return {}; + + let cache = site_cache[page_id]; + if ( + !cache || + (cache && !cache.lastRefresh) || + (cache && Date.now() - cache.lastRefresh >= 1000 * PAGE_CACHE_TIMEOUT) + ) { + if (eg.edit.page[page_id]) { + const edit = eg.edit.page[page_id].doc.getMap("map").toJSON(); + edit.lastRefresh = Date.now(); + site_cache[page_id] = edit as any; + } else { + const page = await db.page.findFirst({ + where: { id: page_id }, + select: { + js: true, + id: true, + url: true, + updated_at: true, + js_compiled: true, + content_tree: true, + }, + }); + if (page) { + site_cache[page_id] = { + ...page, + lastRefresh: Date.now(), + } as any; + } + } + cache = site_cache[page_id]; + } + return cache; +}; diff --git a/app/srv/ws/edit/tools/load-page.ts b/app/srv/ws/edit/tools/load-page.ts new file mode 100644 index 00000000..201f3501 --- /dev/null +++ b/app/srv/ws/edit/tools/load-page.ts @@ -0,0 +1,22 @@ +import { validate } from "uuid"; +import { Page } from "../../../../web/src/utils/types/general"; + +export const loadPage = async (page_id: string) => { + if (page_id && validate(page_id)) { + let page = (await db.page.findFirst({ + where: { id: page_id }, + select: { + id: true, + js: true, + name: true, + id_site: true, + url: true, + js_compiled: true, + updated_at: true, + content_tree: true, + }, + })) as unknown as null | Page; + return page; + } + return null; +}; diff --git a/app/srv/ws/edit/tools/load-site.ts b/app/srv/ws/edit/tools/load-site.ts new file mode 100644 index 00000000..bf2909c2 --- /dev/null +++ b/app/srv/ws/edit/tools/load-site.ts @@ -0,0 +1,95 @@ +import { page, site } from "dbgen"; +import { validate as isValidUUID } from "uuid"; +import * as Y from "yjs"; + +export type SiteConfig = { + api_url?: string; + prasi?: { + port: number; + dburl: string; + }; +}; +export type Site = Exclude>, null>; + +export const loadSite = async (idOrDomain: string) => { + let rname = idOrDomain; + if (!rname) { + rname = "prasi.app"; + } + + const res = await db.site.findFirst({ + where: isValidUUID(rname) + ? { + id: rname, + } + : { + domain: rname, + }, + include: { + page: { + select: { + id: true, + url: true, + updated_at: true, + name: true, + }, + }, + }, + }); + + if (res) { + if (!res.page) { + res.page = []; + } + if (res.page.length === 0) { + const page = await createPage(res as any, { + name: "Home", + url: "/", + }); + + res.page.push(page); + } + + for (const p of res.page) { + const page = p as any; + page.js = new Y.Text(); + page.js_compiled = new Y.Text(); + page.content_tree = new Y.Map(); + } + } + + return res as + | (Omit & { + config?: SiteConfig; + page: { + id: string; + url: string; + updated_at: Date | null; + name: string; + }[]; + }) + | null; +}; + +const createPage = async ( + site: site & { page: page[] }, + page: WithOptional< + Parameters[0]["data"], + "content_tree" + > +) => { + const raw = await db.page.create({ + data: { + ...(page as any), + content_tree: page.content_tree ? page.content_tree : blank, + site: { + connect: { id: site.id }, + }, + }, + }); + + return raw; +}; + +const blank = { id: "root", type: "root", childs: [] }; +type WithOptional = Omit & Partial>; diff --git a/app/srv/ws/edit/tools/validate-tree-page.ts b/app/srv/ws/edit/tools/validate-tree-page.ts new file mode 100644 index 00000000..ad2f7e1f --- /dev/null +++ b/app/srv/ws/edit/tools/validate-tree-page.ts @@ -0,0 +1,54 @@ +import { Websocket } from "hyper-express"; +import { syncronize } from "y-pojo"; +import * as Y from "yjs"; +import { fillID } from "../../../web/src/utils/page/tools/fill-id"; +import { IContent, MContent } from "../../../web/src/utils/types/general"; +import { IItem } from "../../../web/src/utils/types/item"; +import { IRoot } from "../../../web/src/utils/types/root"; +import { getComp } from "../action/get-comp"; +import { eg } from "../edit-global"; + +const MAX_STRING_LENGTH = 15000; +export const validateTreeMap = async ( + ws: Websocket, + item: MContent, + changed?: boolean +) => { + let _changed = changed; + const type = item.get("type") as IContent["type"] | "root"; + if (type !== "root") { + item.forEach((val, key, map) => { + if (typeof val === "string") { + if (val.length > MAX_STRING_LENGTH) { + map.set(key, ""); + _changed = true; + } + } else { + if (typeof val === "object" && val instanceof Y.Map) { + val._map.forEach((ival, ikey, imap) => { + if (typeof ival === "string") { + if ((ival as string).length > MAX_STRING_LENGTH) { + imap.set(ikey, "" as any); + _changed = true; + } + } + }); + } + } + }); + } + + if (item) { + if (type !== "text") { + const childs = item.get("childs"); + if (childs) { + for (const c of childs) { + if (await validateTreeMap(ws, c)) { + _changed = true; + } + } + } + } + } + return !!_changed; +}; diff --git a/app/srv/ws/handler.ts b/app/srv/ws/handler.ts index 47b6ce36..d0bcf87e 100644 --- a/app/srv/ws/handler.ts +++ b/app/srv/ws/handler.ts @@ -1,10 +1,101 @@ +import { createId } from "@paralleldrive/cuid2"; import { WebSocketHandler } from "bun"; +import { WSData } from "../../../pkgs/core/server/create"; +import { WS_MSG } from "../../web/src/utils/types/ws"; +import { eg } from "./edit/edit-global"; +import { decompress } from "lz-string"; +import { getPage } from "./edit/action/get-page"; +import { getComp } from "./edit/action/get-comp"; +import { svLocal } from "./edit/action/sv-local"; +import { diffLocal } from "./edit/action/diff-local"; +import { svdiffRemote } from "./edit/action/svdiff-remote"; +import { redo, undo } from "./edit/action/undo-redo"; -export const wsHandler: Record> = { +eg.edit = { + site: {}, + comp: {}, + page: {}, + ws: new WeakMap(), +}; +const site = { + saveTimeout: null as any, +}; + +export const wsHandler: Record> = { "/edit": { - open(ws) {}, - message(ws, message) {}, - close(ws, code, reason) {}, + open(ws) { + eg.edit.ws.set(ws, { + clientID: createId(), + }); + }, + async message(ws, raw) { + if (typeof raw === "string") { + try { + const msg = JSON.parse(raw) as WS_MSG; + + if (msg.type === "ping") { + ws.send(JSON.stringify({ type: "pong" })); + return; + } + + switch (msg.type) { + case "site-js": + clearTimeout(site.saveTimeout); + site.saveTimeout = setTimeout(async () => { + const js = JSON.parse(decompress(msg.src)); + await db.site.update({ + where: { + id: msg.id_site, + }, + data: { + js: js.src, + js_compiled: js.compiled, + }, + }); + }, 1000); + break; + case "get_page": + await getPage(ws, msg); + break; + case "get_comp": + await getComp(ws, msg); + break; + case "sv_local": + await svLocal(ws, msg); + break; + case "diff_local": + await diffLocal(ws, msg); + break; + case "svd_remote": + await svdiffRemote(ws, msg); + break; + case "undo": + undo(ws, msg); + break; + case "redo": + redo(ws, msg); + break; + } + } catch (e) { + console.log(e); + } + } + }, + close(ws, code, reason) { + eg.edit.ws.delete(ws); + + for (const page of Object.values(eg.edit.page)) { + page.ws.delete(ws); + } + + for (const site of Object.values(eg.edit.site)) { + site.ws.delete(ws); + } + + for (const comp of Object.values(eg.edit.comp)) { + comp.ws.delete(ws); + } + }, drain(ws) {}, }, }; diff --git a/bun.lockb b/bun.lockb index 46f913d217cac2a3084c9c6e586b7104bc17a1c5..72c44113b21c8618b92645a8053eaf377badd9d5 100755 GIT binary patch delta 2007 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 z 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%0ATt0=HiIaLFByrx~@TrErPc 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�fza4~6^pT}+Y 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 diff --git a/package.json b/package.json index 4348a791..ba259d6f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,5 @@ }, "peerDependencies": { "typescript": "^5.0.0" - }, - "dependencies": { "@node-rs/argon2": "^1.5.2", "@types/mime-types": "^2.1.2", "mime-types": "^2.1.35" } + } } diff --git a/pkgs/core/server/create.ts b/pkgs/core/server/create.ts index 5652ce7e..a14e7c38 100644 --- a/pkgs/core/server/create.ts +++ b/pkgs/core/server/create.ts @@ -7,12 +7,15 @@ import { WebSocketHandler } from "bun"; const cache = { static: {} as Record }; +export type WSData = { url: URL }; + export const createServer = async () => { g.api = {}; g.router = createRouter({ strictTrailingSlash: true }); g.server = Bun.serve({ port: g.port, websocket: { + maxPayloadLength: 99999999, close(ws, code, reason) { const pathname = ws.data.url.pathname; if (wsHandler[pathname]) { @@ -40,7 +43,7 @@ export const createServer = async () => { } } }, - } as WebSocketHandler<{ url: URL }>, + } as WebSocketHandler, async fetch(req, server) { if (g.status === "init") return new Response("initializing..."); const url = new URL(req.url);