wip fix
This commit is contained in:
parent
caf5cdd7c3
commit
4122f50d5f
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { apiContext } from "service-srv";
|
||||||
|
|
||||||
|
export const _ = {
|
||||||
|
url: "/parse-js",
|
||||||
|
async api() {
|
||||||
|
const { req, res } = apiContext(this);
|
||||||
|
return "This is parse-js.ts";
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -61,7 +61,7 @@ export const code_edit: SAction["code"]["edit"] = async function (
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let adv = mitem.get("adv");
|
let adv = mitem.get("adv");
|
||||||
const jscript = parseJs(adv?.get("js")) || false;
|
const jscript = parseJs(src) || false;
|
||||||
|
|
||||||
doc?.transact(() => {
|
doc?.transact(() => {
|
||||||
if (!adv) {
|
if (!adv) {
|
||||||
|
|
@ -106,7 +106,10 @@ export const code_edit: SAction["code"]["edit"] = async function (
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return jscript
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
console.log('e', e)
|
||||||
return e.message.toString();
|
return e.message.toString();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,8 @@ export const apiProxy = (api_url: string) => {
|
||||||
console.error(`API Not Found: ${actionName.toString()}`);
|
console.error(`API Not Found: ${actionName.toString()}`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
reject("Failed to load API: " + base_url);
|
|
||||||
|
reject("Failed to load API [Proxy]: " + base_url);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
reject(e);
|
reject(e);
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,13 @@ import { jscript } from "../../../../../utils/script/jscript";
|
||||||
import { jsMount } from "../../../../../utils/script/mount";
|
import { jsMount } from "../../../../../utils/script/mount";
|
||||||
import { monacoTypings } from "../../../../../utils/script/typings";
|
import { monacoTypings } from "../../../../../utils/script/typings";
|
||||||
import { Loading } from "../../../../../utils/ui/loading";
|
import { Loading } from "../../../../../utils/ui/loading";
|
||||||
import { getActiveMeta, getMetaById } from "../../../logic/active/get-meta";
|
import { getActiveMeta } from "../../../logic/active/get-meta";
|
||||||
import { EDGlobal, IMeta, active } from "../../../logic/ed-global";
|
import { EDGlobal, IMeta, active } from "../../../logic/ed-global";
|
||||||
import { edMonacoDefaultVal } from "./default-val";
|
import { edMonacoDefaultVal } from "./default-val";
|
||||||
import { declareScope } from "./scope/scope";
|
import { declareScope } from "./scope/scope";
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { FNCompDef } from "../../../../../utils/types/meta-fn";
|
import { FNCompDef } from "../../../../../utils/types/meta-fn";
|
||||||
import { addScope } from "./scope/add-scope";
|
|
||||||
|
|
||||||
const scriptEdit = {
|
const scriptEdit = {
|
||||||
timeout: null as any,
|
timeout: null as any,
|
||||||
|
|
@ -100,6 +99,7 @@ export const EdScriptMonaco: FC<{}> = () => {
|
||||||
if (p.ui.popup.script.mode === "js") {
|
if (p.ui.popup.script.mode === "js") {
|
||||||
const w = window as any;
|
const w = window as any;
|
||||||
const types: any = {};
|
const types: any = {};
|
||||||
|
const values: any = {};
|
||||||
for (const prop_name of p.global_prop) {
|
for (const prop_name of p.global_prop) {
|
||||||
if (prop_name === "_types") continue;
|
if (prop_name === "_types") continue;
|
||||||
types[prop_name] = "any";
|
types[prop_name] = "any";
|
||||||
|
|
@ -139,38 +139,6 @@ export const EdScriptMonaco: FC<{}> = () => {
|
||||||
break;
|
break;
|
||||||
case "prop-instance":
|
case "prop-instance":
|
||||||
{
|
{
|
||||||
let parent_meta = null;
|
|
||||||
const parent_id = meta.parent?.id;
|
|
||||||
if (parent_id) {
|
|
||||||
if (active.comp_id) {
|
|
||||||
parent_meta =
|
|
||||||
p.comp.list[active.comp_id].meta[parent_id];
|
|
||||||
} else {
|
|
||||||
parent_meta = p.page.meta[parent_id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (parent_meta) {
|
|
||||||
const scope = declareScope(p, parent_meta, monaco);
|
|
||||||
for (const [k, v] of Object.entries(scope.exports)) {
|
|
||||||
addScope(p, monaco, `file:///${k}`, v);
|
|
||||||
}
|
|
||||||
addScope(
|
|
||||||
p,
|
|
||||||
monaco,
|
|
||||||
`file:///prop-global.d.ts`,
|
|
||||||
`\
|
|
||||||
${Object.entries(scope.vars).map(([var_name, var_from]) => {
|
|
||||||
return `import {${var_name} as ___${var_name}} from "./${var_from}"`;
|
|
||||||
})}
|
|
||||||
declare global {
|
|
||||||
${Object.entries(scope.vars).map(([var_name]) => {
|
|
||||||
return `const ${var_name} = ___${var_name}`;
|
|
||||||
})}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const nmodel = monaco.editor.createModel(
|
const nmodel = monaco.editor.createModel(
|
||||||
val,
|
val,
|
||||||
"typescript",
|
"typescript",
|
||||||
|
|
@ -204,38 +172,15 @@ declare global {
|
||||||
break;
|
break;
|
||||||
case "item":
|
case "item":
|
||||||
{
|
{
|
||||||
const { exports, imports } = declareScope(p, meta, monaco);
|
types._raw = declareScope(p, meta, monaco);
|
||||||
const im = imports[active.item_id];
|
|
||||||
const im_src = [];
|
|
||||||
|
|
||||||
if (im) {
|
|
||||||
for (const [var_name, item] of Object.entries(im)) {
|
|
||||||
im_src.push(
|
|
||||||
`import { ${var_name} } from "./${item.id}_${var_name}_${item.type}";`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const [k, v] of Object.entries(exports)) {
|
|
||||||
addScope(p, monaco, `file:///${k}`, v);
|
|
||||||
}
|
|
||||||
let active_src =
|
|
||||||
im_src.length > 0
|
|
||||||
? `${im_src.join("\n")}\n${IMPORT_SEPARATOR}\n${val}`
|
|
||||||
: val;
|
|
||||||
const model = monaco.editor.createModel(
|
const model = monaco.editor.createModel(
|
||||||
active_src,
|
val,
|
||||||
"typescript",
|
"typescript",
|
||||||
monaco.Uri.parse("file:///active.tsx")
|
monaco.Uri.parse("file:///active.tsx")
|
||||||
);
|
);
|
||||||
editor.setModel(model);
|
editor.setModel(model);
|
||||||
editor.trigger("fold", "editor.foldAllMarkerRegions", {});
|
editor.trigger("fold", "editor.foldAllMarkerRegions", {});
|
||||||
if (active_src) {
|
|
||||||
const end_hide = active_src
|
|
||||||
.split(IMPORT_SEPARATOR)[0]
|
|
||||||
.split("\n").length;
|
|
||||||
const range = new monaco.Range(1, 1, end_hide, 1);
|
|
||||||
(editor as any).setHiddenAreas([range]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (component.id && meta.jsx_prop?.name) {
|
if (component.id && meta.jsx_prop?.name) {
|
||||||
const prop_name = meta.jsx_prop.name;
|
const prop_name = meta.jsx_prop.name;
|
||||||
|
|
@ -271,7 +216,7 @@ declare global {
|
||||||
monaco,
|
monaco,
|
||||||
{
|
{
|
||||||
types,
|
types,
|
||||||
values: {},
|
values,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
await jsMount(editor, monaco, p);
|
await jsMount(editor, monaco, p);
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,11 @@
|
||||||
import type { OnMount } from "@monaco-editor/react";
|
import type { OnMount } from "@monaco-editor/react";
|
||||||
import { IContent } from "../../../../../../utils/types/general";
|
import { IContent } from "../../../../../../utils/types/general";
|
||||||
import { IMeta, PG, active } from "../../../../logic/ed-global";
|
import { IMeta, PG, active } from "../../../../logic/ed-global";
|
||||||
import { extractExport } from "./extract-export";
|
|
||||||
|
|
||||||
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 = (p: PG, meta: IMeta, monaco: Monaco) => {
|
export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
|
||||||
const vars: Record<string, string> = {};
|
|
||||||
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;
|
||||||
|
|
@ -18,19 +16,6 @@ export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
|
||||||
const paths: IMeta[][] = [];
|
const paths: IMeta[][] = [];
|
||||||
map_childs(monaco, p, metas, entry, paths);
|
map_childs(monaco, p, metas, entry, paths);
|
||||||
|
|
||||||
const exports = {} as Record<string, string>;
|
|
||||||
const extract_exports = {} as Record<
|
|
||||||
string,
|
|
||||||
ReturnType<typeof extractExport>
|
|
||||||
>;
|
|
||||||
const imports = {} as Record<
|
|
||||||
string,
|
|
||||||
Record<
|
|
||||||
string,
|
|
||||||
{ id: string; type: "prop" | "passprop" | "local" | "scope" }
|
|
||||||
>
|
|
||||||
>;
|
|
||||||
|
|
||||||
const cur_path = [] as IMeta[];
|
const cur_path = [] as IMeta[];
|
||||||
for (const path of paths) {
|
for (const path of paths) {
|
||||||
if (path.includes(meta)) {
|
if (path.includes(meta)) {
|
||||||
|
|
@ -46,57 +31,29 @@ export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let prev_m = null as null | IMeta;
|
const vars: Record<string, { mode: "local"; val: string }> = {};
|
||||||
for (const m of cur_path) {
|
for (const m of cur_path) {
|
||||||
if (!exports[m.item.id]) {
|
if (m !== meta) {
|
||||||
extract_exports[m.item.id] = extractExport(p, m);
|
const script = m.item.script;
|
||||||
|
if (script) {
|
||||||
for (const [k, v] of Object.entries(extract_exports[m.item.id])) {
|
if (script.local) {
|
||||||
let src = "";
|
vars[script.local.name] = { mode: "local", val: script.local.value };
|
||||||
if (v.type !== "local") {
|
|
||||||
src = `export const ${k} = ${v.val};`;
|
|
||||||
} else {
|
|
||||||
src = `\
|
|
||||||
const ${k}__local = ${v.val};
|
|
||||||
export const ${k}: typeof ${k}__local & { render: ()=>void } = ${k}__local as any;`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src) {
|
|
||||||
vars[k] = `${m.item.id}_${k}_${v.type}`;
|
|
||||||
}
|
|
||||||
exports[`${m.item.id}_${k}_${v.type}.tsx`] = src;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
m.item.id === active.item_id &&
|
|
||||||
m.item.component?.id === active.comp_id &&
|
|
||||||
active.comp_id
|
|
||||||
) {
|
|
||||||
for (const [k, v] of Object.entries(extract_exports[m.item.id])) {
|
|
||||||
if (!imports[m.item.id]) imports[m.item.id] = {};
|
|
||||||
if (v.type === "prop") {
|
|
||||||
imports[m.item.id][k] = v;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prev_m && extract_exports[prev_m.item.id]) {
|
const raw_types: string[] = [];
|
||||||
imports[m.item.id] = {};
|
for (const [k, v] of Object.entries(vars)) {
|
||||||
if (imports[prev_m.item.id]) {
|
if (v.mode === "local") {
|
||||||
for (const [k, v] of Object.entries(imports[prev_m.item.id])) {
|
raw_types.push(`\
|
||||||
imports[m.item.id][k] = v;
|
const \$\$_${k} = ${v.val};
|
||||||
|
const ${k} = null as unknown as (typeof \$\$_${k} & { render: ()=> void });
|
||||||
|
`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [k, v] of Object.entries(extract_exports[prev_m.item.id])) {
|
return raw_types.join("\n");
|
||||||
imports[m.item.id][k] = { id: v.id, type: v.type };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prev_m = m;
|
|
||||||
}
|
|
||||||
|
|
||||||
return { exports, imports, vars };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const map_childs = (
|
const map_childs = (
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ export const EdScriptWorkbench = () => {
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className={cx("flex items-stretch")}>
|
<div className={cx("flex items-stretch")}>
|
||||||
<div className="border-r px-2 flex items-center">
|
{/* <div className="border-r px-2 flex items-center">
|
||||||
<div
|
<div
|
||||||
className={cx(
|
className={cx(
|
||||||
scriptNav.canBack
|
scriptNav.canBack
|
||||||
|
|
@ -102,7 +102,7 @@ export const EdScriptWorkbench = () => {
|
||||||
>
|
>
|
||||||
<ChevronRight />
|
<ChevronRight />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> */}
|
||||||
{p.ui.popup.script.type === "prop-master" && <CompTitleMaster />}
|
{p.ui.popup.script.type === "prop-master" && <CompTitleMaster />}
|
||||||
{p.ui.popup.script.type === "prop-instance" && (
|
{p.ui.popup.script.type === "prop-instance" && (
|
||||||
<CompTitleInstance />
|
<CompTitleInstance />
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ export const viLoadLegacy = async (vi: {
|
||||||
try {
|
try {
|
||||||
await loadApiProxyDef(api_url, true);
|
await loadApiProxyDef(api_url, true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn("Failed to load API:", api_url);
|
console.warn("Failed to load API [Legacy]:", api_url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,10 @@ export const viLoadSnapshot = async (p: PG) => {
|
||||||
if (!p.script.db) p.script.db = dbProxy(api_url);
|
if (!p.script.db) p.script.db = dbProxy(api_url);
|
||||||
if (!p.script.api) p.script.api = apiProxy(api_url);
|
if (!p.script.api) p.script.api = apiProxy(api_url);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e: any) {
|
||||||
console.warn("Failed to load API:", api_url);
|
if (e && !e.message.toLowerCase().includes("invalid url")) {
|
||||||
|
console.warn("Failed to load API [Snapshot]:", api_url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.site.code.snapshot) {
|
if (p.site.code.snapshot) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue