wip fix scope

This commit is contained in:
Rizky 2024-01-03 11:15:20 +07:00
parent aa1d4e4e5e
commit e3e7fc9812
2 changed files with 51 additions and 45 deletions

View File

@ -29,6 +29,7 @@ export const EdScriptMonaco: FC<{}> = () => {
value: "", value: "",
historyOpen: false, historyOpen: false,
mode: "", mode: "",
imports: "",
idbstore: createStore(`prasi-page-${p.page.cur.id}`, "script-history"), idbstore: createStore(`prasi-page-${p.page.cur.id}`, "script-history"),
}); });
@ -62,15 +63,26 @@ export const EdScriptMonaco: FC<{}> = () => {
} }
if (!local.init) { if (!local.init) {
monaco.editor.getModels().forEach((model) => {
if (
model.uri.toString().startsWith("inmemory://model") ||
model.uri.toString().startsWith("file://")
) {
model.dispose();
}
});
if (meta) {
if (!meta.item.adv) {
meta.item.adv = {};
}
if (!meta.item.adv[p.ui.popup.script.mode]) {
meta.item.adv[p.ui.popup.script.mode] = val;
}
}
if (p.ui.popup.script.mode === "js") { if (p.ui.popup.script.mode === "js") {
monaco.editor.getModels().forEach((model) => {
if (
model.uri.toString().startsWith("inmemory://model") ||
model.uri.toString().startsWith("file://")
) {
model.dispose();
}
});
await monacoTypings( await monacoTypings(
{ {
site_dts: p.site_dts, site_dts: p.site_dts,
@ -83,7 +95,7 @@ export const EdScriptMonaco: FC<{}> = () => {
{ types: {}, values: {} } { types: {}, values: {} }
); );
if (meta) { if (meta) {
const imports = declareScope(p, meta, editor, monaco); const imports = declareScope(p, meta, monaco);
let cur = "page"; let cur = "page";
monaco.editor.getModels().forEach((model) => { monaco.editor.getModels().forEach((model) => {
@ -95,6 +107,8 @@ export const EdScriptMonaco: FC<{}> = () => {
}); });
if (imports) { if (imports) {
local.imports = imports;
const range = new monaco.Range( const range = new monaco.Range(
1, 1,
0, 0,
@ -106,6 +120,15 @@ export const EdScriptMonaco: FC<{}> = () => {
await jsMount(editor, monaco, p); await jsMount(editor, monaco, p);
} }
} else {
const model = monaco.editor.createModel(
val,
{ css: "scss", js: "typescript", html: "html" }[
p.ui.popup.script.mode
],
monaco.Uri.parse(`inmemory://model/1`)
);
editor.setModel(model);
} }
local.init = true; local.init = true;
@ -129,21 +152,26 @@ export const EdScriptMonaco: FC<{}> = () => {
const prettier_estree = jscript.prettier.estree; const prettier_estree = jscript.prettier.estree;
if (prettier && prettier_estree && prettier_ts) { if (prettier && prettier_estree && prettier_ts) {
let curval = local.editor
?.getValue()
.replace(/\{\s*children\s*\}/gi, newval);
if (curval.includes("/** IMPORT BOUNDARY **/")) {
curval = curval.split("/** IMPORT BOUNDARY **/\n").pop() || "";
}
const text = trim( const text = trim(
await prettier.format( await prettier.format(all ? newval : curval, {
all parser: "typescript",
? newval plugins: [prettier_ts, prettier_estree],
: local.editor }),
?.getValue()
.replace(/\{\s*children\s*\}/gi, newval),
{
parser: "typescript",
plugins: [prettier_ts, prettier_estree],
}
),
"; \n" "; \n"
); );
let final_src = text;
if (local.imports) {
final_src = `${local.imports}\n/** IMPORT BOUNDARY **/\n${text}`;
}
local.editor.executeEdits(null, [ local.editor.executeEdits(null, [
{ {
range: { range: {
@ -152,7 +180,7 @@ export const EdScriptMonaco: FC<{}> = () => {
endColumn: Number.MAX_SAFE_INTEGER, endColumn: Number.MAX_SAFE_INTEGER,
endLineNumber: Number.MAX_SAFE_INTEGER, endLineNumber: Number.MAX_SAFE_INTEGER,
}, },
text, text: final_src,
}, },
]); ]);
} }
@ -190,7 +218,6 @@ export const EdScriptMonaco: FC<{}> = () => {
{ css: "scss", js: "typescript", html: "html" }[p.ui.popup.script.mode] { css: "scss", js: "typescript", html: "html" }[p.ui.popup.script.mode]
} }
onChange={(value) => { onChange={(value) => {
return;
if ((value || "").includes("/** IMPORT BOUNDARY **/")) { if ((value || "").includes("/** IMPORT BOUNDARY **/")) {
const valparts = (value || "").split("/** IMPORT BOUNDARY **/\n"); const valparts = (value || "").split("/** IMPORT BOUNDARY **/\n");
if (valparts.length === 2) local.value = valparts[1]; if (valparts.length === 2) local.value = valparts[1];

View File

@ -8,23 +8,7 @@ import { addScope } from "./add-scope";
type Monaco = Parameters<OnMount>[1]; type Monaco = Parameters<OnMount>[1];
export type MonacoEditor = Parameters<OnMount>[0]; export type MonacoEditor = Parameters<OnMount>[0];
export const declareScope = ( export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
p: PG,
meta: IMeta,
editor: MonacoEditor,
monaco: Monaco
) => {
const e = editor as any;
const sum_id = hash_sum({
page_id: p.page.cur.id,
comp_id: active.comp_id,
});
if (e.scope_id === sum_id) {
return;
} else {
e.scope_id = sum_id;
}
const metas = active.comp_id const metas = active.comp_id
? p.comp.list[active.comp_id]?.meta ? p.comp.list[active.comp_id]?.meta
: p.page.meta; : p.page.meta;
@ -70,12 +54,7 @@ ${last_import}
${m.item.adv.js} ${m.item.adv.js}
`; `;
addScope( addScope(p, monaco, `file:///${cur}_${m.item.id}_src_src.tsx`, content);
p,
monaco,
`file:///${cur}_${m.item.id}_src_src.tsx`,
content
);
} }
idx++; idx++;
} }