wip checkpoint

This commit is contained in:
Rizky 2023-12-27 09:29:25 +07:00
parent 346c1d2ed4
commit 79f29978ea
11 changed files with 35 additions and 178 deletions

View File

@ -44,10 +44,11 @@ export const comp_load: SAction["comp"]["load"] = async function (
{
comps: {},
meta,
mode: "comp",
on: {
visit(meta) {
if (typeof meta.item.adv?.js === "string") {
meta.scope.def = parseJs(meta.item.adv?.js);
meta.item.script = parseJs(meta.item.adv?.js);
}
},
},
@ -57,7 +58,6 @@ export const comp_load: SAction["comp"]["load"] = async function (
result[id] = {
id,
meta,
snapshot: await gzipAsync(snap.bin),
};
}

View File

@ -88,15 +88,16 @@ export const comp_new: SAction["comp"]["new"] = async function (
if (load) {
const mitem = docs.comp[comp.id].doc.getMap("map").get("root");
const citem = mitem?.toJSON() as IItem;
const smeta: Record<string, IMeta> = {};
const comp_meta: Record<string, IMeta> = {};
genMeta(
{
comps: {},
meta: smeta,
meta: comp_meta,
mode: "comp",
on: {
visit(meta) {
if (typeof meta.item.adv?.js === "string") {
meta.scope.def = parseJs(meta.item.adv?.js);
meta.item.script = parseJs(meta.item.adv?.js);
}
},
},
@ -106,7 +107,7 @@ export const comp_new: SAction["comp"]["new"] = async function (
return {
id: comp.id,
meta: simplifyMeta(smeta),
meta: simplifyMeta(comp_meta),
snapshot: load.snapshot,
};
}

View File

@ -178,107 +178,3 @@ export const page_load: SAction["page"]["load"] = async function (
};
}
};
// const scanMeta = async (doc: DPage, sync: SyncConnection) => {
// const meta: GenMetaP["meta"] = {};
// const mcomps: GenMetaP["comps"] = {};
// const msnap: Record<string, CompSnapshot> = {};
// const loading = {} as Record<string, Promise<void>>;
// const mchilds = doc.getMap("map").get("root")?.get("childs");
// const entry: string[] = [];
// if (mchilds) {
// const childs = mchilds.map((m) => m);
// for (const mchild of childs) {
// await initLoadComp(
// { comps: mcomps, meta },
// mchild.toJSON(),
// async (comp_ids) => {
// for (const id of comp_ids) {
// if (!docs.comp[id]) {
// if (typeof loading[id] === "undefined") {
// loading[id] = new Promise<void>(async (resolve) => {
// await loadComponent(id, sync);
// resolve();
// });
// }
// await loading[id];
// } else {
// userSyncComponent(sync, id);
// }
// const snap = snapshot.get("comp", id);
// if (snap) {
// msnap[id] = snap;
// }
// if (docs.comp[id]) {
// const mitem = docs.comp[id].doc.getMap("map").get("root");
// const comp = mitem?.toJSON() as IItem;
// const smeta: Record<string, IMeta> = {};
// genMeta(
// {
// comps: {},
// meta: smeta,
// on: {
// visit(meta) {
// if (typeof meta.item.adv?.js === "string") {
// meta.scope.def = parseJs(meta.item.adv?.js);
// }
// },
// },
// },
// { item: comp, ignore_first_component: true }
// );
// mcomps[id] = { comp, smeta: simplifyMeta(smeta) };
// }
// }
// }
// );
// }
// const save = {
// instances_check: {} as Record<string, true | IMeta>,
// };
// for (const mitem of childs) {
// const item = mitem.toJSON() as IItem;
// entry.push(item.id);
// genMeta(
// {
// comps: mcomps,
// meta,
// on: {
// visit_component(item) {
// if (!item.component?.instances) {
// save.instances_check[item.id] = true;
// }
// },
// visit(m) {
// if (!m.parent?.comp_id) {
// if (typeof m.item.adv?.js === "string") {
// m.scope.def = parseJs(m.item.adv?.js);
// }
// }
// if (m.item.component?.id) {
// if (save.instances_check[m.item.id]) {
// save.instances_check[m.item.id] = m;
// }
// }
// },
// },
// },
// { item }
// );
// }
// }
// const comps: EPage["comps"] = {};
// for (const [id, snap] of Object.entries(msnap)) {
// const meta = mcomps[id].smeta;
// comps[id] = { id, meta, snapshot: await gzipAsync(snap.bin) };
// }
// return { meta: simplifyMeta(meta), comps, entry };
// };

View File

@ -2,13 +2,11 @@ import { NodeModel } from "@minoru/react-dnd-treeview";
import { compress, decompress } from "wasm-gzip";
import { IItem } from "../../../../utils/types/item";
import { DComp } from "../../../../utils/types/root";
import { initLoadComp } from "../../../vi/meta/comp/init-comp-load";
import { genMeta } from "../../../vi/meta/meta";
import { IMeta, PG } from "../ed-global";
import { treeRebuild } from "../tree/build";
import { pushTreeNode } from "../tree/build/push-tree";
import { initLoadComp } from "../../../vi/meta/comp/init-comp-load";
import { ISimpleMeta } from "../../../vi/utils/types";
import { simplifyMeta } from "../../../vi/meta/simplify";
export const loadcomp = {
timeout: 0 as any,
@ -30,7 +28,7 @@ export const loadComponent = async (p: PG, id_comp: string, sync?: boolean) => {
for (const [id_comp, comp] of result) {
if (comp && comp.snapshot) {
await loadCompSnapshot(p, id_comp, comp.snapshot, comp.meta);
await loadCompSnapshot(p, id_comp, comp.snapshot);
}
}
loadcomp.pending.clear();
@ -42,8 +40,7 @@ export const loadComponent = async (p: PG, id_comp: string, sync?: boolean) => {
export const loadCompSnapshot = async (
p: PG,
comp_id: string,
snapshot: Uint8Array,
smeta: Record<string, ISimpleMeta>
snapshot: Uint8Array
) => {
if (p.comp.list[comp_id] && p.comp.list[comp_id].doc) {
return;
@ -56,16 +53,15 @@ export const loadCompSnapshot = async (
doc.off("update", p.comp.list[comp_id].on_update);
}
const updated = await updateComponentMeta(p, doc, comp_id, smeta);
const updated = await updateComponentMeta(p, doc, comp_id);
if (updated) {
const { meta, tree } = updated;
if (p.comp.list[comp_id]) {
p.comp.list[comp_id].comp.meta = smeta;
p.comp.list[comp_id].meta = meta;
p.comp.list[comp_id].tree = tree;
} else {
p.comp.list[comp_id] = {
comp: { id: comp_id, snapshot, meta: smeta },
comp: { id: comp_id, snapshot },
doc,
meta,
tree,
@ -95,8 +91,7 @@ export const loadCompSnapshot = async (
const updated = await updateComponentMeta(
p,
p.comp.list[comp_id].doc,
comp_id,
smeta
comp_id
);
if (updated) {
p.comp.list[comp_id].meta = updated.meta;
@ -117,8 +112,7 @@ export const loadCompSnapshot = async (
export const updateComponentMeta = async (
p: PG,
doc: DComp,
comp_id: string,
smeta: Record<string, ISimpleMeta>
comp_id: string
) => {
const mitem = doc.getMap("map").get("root");
if (!mitem) return;
@ -127,13 +121,13 @@ export const updateComponentMeta = async (
const tree: NodeModel<IMeta>[] = [];
const item = mitem.toJSON() as IItem;
p.comp.loaded[comp_id] = { comp: item, smeta };
p.comp.loaded[comp_id] = item;
await initLoadComp(
{
comps: p.comp.loaded,
meta,
set_meta: false,
smeta,
mode: "comp",
},
item,
async (comp_ids: string[]) => {
@ -143,7 +137,7 @@ export const updateComponentMeta = async (
for (const [id_comp, comp] of result) {
if (comp && comp.snapshot) {
await loadCompSnapshot(p, id_comp, comp.snapshot, comp.meta);
await loadCompSnapshot(p, id_comp, comp.snapshot);
}
}
}
@ -153,7 +147,7 @@ export const updateComponentMeta = async (
{
comps: p.comp.loaded,
meta,
smeta,
mode: "comp",
on: {
visit(m) {
pushTreeNode(p, m, meta, tree);
@ -189,7 +183,7 @@ export const updateComponentMeta = async (
{ item, ignore_first_component: true }
);
p.comp.loaded[comp_id] = { comp: item, smeta: simplifyMeta(meta) };
p.comp.loaded[comp_id] = item;
return { meta, tree };
};

View File

@ -58,7 +58,6 @@ const EmptyPage = {
const EmptyComp = {
id: "",
meta: {} as Record<string, ISimpleMeta>,
snapshot: null as null | Uint8Array,
};
@ -152,7 +151,6 @@ export const EDGlobal = {
>,
building: false,
meta: {} as Record<string, IMeta>,
smeta: {} as Record<string, ISimpleMeta>,
entry: [] as string[],
tree: [] as NodeModel<IMeta>[],
render: () => {},

View File

@ -50,14 +50,11 @@ export const reloadPage = async (p: PG, page_id: string, note: string) => {
if (remotePage.comps) {
for (const [id_comp, c] of Object.entries(remotePage.comps)) {
if (c && c.snapshot) {
await loadCompSnapshot(p, id_comp, c.snapshot, c.meta);
await loadCompSnapshot(p, id_comp, c.snapshot);
}
}
}
p.page.entry = remotePage.entry;
p.page.smeta = remotePage.meta;
p.page.cur = remotePage;
if (remotePage.snapshot) {
const doc = new Y.Doc();
@ -107,6 +104,12 @@ export const reloadPage = async (p: PG, page_id: string, note: string) => {
if (p.page.doc) {
page.page = p.page.cur;
page.doc = p.page.doc;
p.page.entry = p.page.doc
.getMap("map")
.get("root")
?.get("childs")
?.map((e) => e.get("id")) as string[];
}
if (p.page.doc) {

View File

@ -16,13 +16,9 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
const mcomp = v.doc.getMap("map").get("root");
const icomp = mcomp?.toJSON() as IItem | undefined;
if (icomp) {
p.comp.loaded[k] = {
comp: icomp,
smeta: v.comp.meta,
};
p.comp.loaded[k] = icomp;
}
}
if (v.comp.meta) p.comp.loaded[k].smeta = v.comp.meta;
}
const mroot = p.page.doc?.getMap("map").get("root");
@ -40,7 +36,7 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
note: "tree-rebuild",
comps: p.comp.loaded,
meta,
smeta: p.page.smeta,
mode: "page",
on: {
async visit(m) {
if (!is_layout) {

View File

@ -229,12 +229,7 @@ export const EdScriptMonaco: FC<{}> = () => {
}
if (typeof scope === "object") {
if (active.comp_id) {
} else {
p.page.smeta[active.item_id].scope = scope;
if (!meta.scope) meta.scope = {};
meta.scope.def = scope;
}
meta.item.script = scope;
}
}
}, 1000);

View File

@ -1,10 +1,6 @@
import { Doc } from "yjs";
import { ISimpleMeta } from "../../../../../vi/utils/types";
import {
IMeta,
PG,
active
} from "../../../../logic/ed-global";
import { IMeta, PG, active } from "../../../../logic/ed-global";
import { CodeLoc } from "./type";
const modif = {
@ -50,11 +46,11 @@ const modifyJS = (
const { meta, src, loc } = item;
if (loc.type === "item") {
const js = meta.item.adv?.js;
if (js) {
const script = meta.item.script;
if (js && script) {
const text = extractText(type, src);
const def = meta.scope?.def?.[type];
const smeta = getSMetaByLoc(p, loc);
const def = script[type];
if (text) {
if (
type === "local" &&
@ -62,12 +58,8 @@ const modifyJS = (
typeof def.start === "number" &&
typeof def.end === "number"
) {
const final = replaceRange(js, def.start, def.end, text);
// const final = replaceRange(js, def.start, def.end, text);
def.end = def.start + text.length;
if (smeta && smeta.scope?.local) {
smeta.scope.local.end = def.end;
}
}
}
}
@ -79,22 +71,6 @@ const modifyJS = (
}, 500);
};
const getSMetaByLoc = (p: PG, loc: CodeLoc) => {
let meta = undefined as ISimpleMeta | undefined;
if (!active.comp_id) {
meta = p.page.smeta[loc.item_id];
} else {
const comp = p.comp.list[active.comp_id].comp.meta;
if (comp[loc.item_id]) {
meta = comp[loc.item_id];
}
}
if (loc.type === "item" && meta) {
return meta;
}
};
const getMetaByLoc = (p: PG, loc: CodeLoc) => {
let meta = undefined as IMeta | undefined;
if (!active.comp_id) {

View File

@ -1,5 +1,4 @@
import { deepClone } from "web-utils";
import { GenMetaArg, GenMetaP, IMeta, ISimpleMeta } from "../utils/types";
import { GenMetaArg, GenMetaP, IMeta } from "../utils/types";
import { instantiate } from "./comp/instantiate";
import { walkProp } from "./comp/walk-prop";
import { genMeta } from "./meta";

View File

@ -39,7 +39,6 @@ export const simplifyMeta = (allmeta: Record<string, IMeta>) => {
instances: meta.instances,
}
: undefined,
scope: meta.scope.def,
};
}