From 9a02b9baa503753ffac5337016bf62bcd1b19b99 Mon Sep 17 00:00:00 2001 From: Rizky Date: Sat, 13 Apr 2024 17:21:11 +0700 Subject: [PATCH] fix code --- app/srv/core/main.js | 2 +- app/srv/ws/sync/editor/code/build-code.ts | 14 ++++-- app/srv/ws/sync/editor/code/prep-code.ts | 2 + app/web/src/nova/ed/logic/tree/build.tsx | 4 ++ .../src/nova/ed/panel/side/prop-instance.tsx | 18 ++++--- app/web/src/nova/vi/load/load-snapshot.tsx | 44 ++++++++-------- app/web/src/nova/vi/meta/comp.tsx | 2 +- .../src/nova/vi/meta/comp/init-comp-load.tsx | 50 ++++++------------- pkgs/core/server/create.ts | 4 +- 9 files changed, 68 insertions(+), 72 deletions(-) diff --git a/app/srv/core/main.js b/app/srv/core/main.js index d7683c7e..28aee7ff 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -108,7 +108,7 @@ ${f} `):" "+Ng(i[0]):"as no adapter specified";throw new A("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return r},adapters:bc};function Lc(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new mn(null,e)}function nl(e){return Lc(e),e.headers=Ie.from(e.headers),e.data=Wo.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),tl.getAdapter(e.adapter||Er.adapter)(e).then(function(r){return Lc(e),r.data=Wo.call(e,e.transformResponse,r),r.headers=Ie.from(r.headers),r},function(r){return Go(r)||(Lc(e),r&&r.response&&(r.response.data=Wo.call(e,e.transformResponse,r.response),r.response.headers=Ie.from(r.response.headers))),Promise.reject(r)})}var Og=e=>e instanceof Ie?e.toJSON():e;function At(e,t){t=t||{};let n={};function r(f,u,c){return w.isPlainObject(f)&&w.isPlainObject(u)?w.merge.call({caseless:c},f,u):w.isPlainObject(u)?w.merge({},u):w.isArray(u)?u.slice():u}function o(f,u,c){if(w.isUndefined(u)){if(!w.isUndefined(f))return r(void 0,f,c)}else return r(f,u,c)}function i(f,u){if(!w.isUndefined(u))return r(void 0,u)}function s(f,u){if(w.isUndefined(u)){if(!w.isUndefined(f))return r(void 0,f)}else return r(void 0,u)}function l(f,u,c){if(c in t)return r(f,u);if(c in e)return r(void 0,f)}let a={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l,headers:(f,u)=>o(Og(f),Og(u),!0)};return w.forEach(Object.keys(Object.assign({},e,t)),function(u){let c=a[u]||o,d=c(e[u],t[u],u);w.isUndefined(d)&&c!==l||(n[u]=d)}),n}var rl="1.6.7";var Ac={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ac[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var Ig={};Ac.transitional=function(t,n,r){function o(i,s){return"[Axios v"+rl+"] Transitional option '"+i+"'"+s+(r?". "+r:"")}return(i,s,l)=>{if(t===!1)throw new A(o(s," has been removed"+(n?" in "+n:"")),A.ERR_DEPRECATED);return n&&!Ig[s]&&(Ig[s]=!0,console.warn(o(s," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,s,l):!0}};function tS(e,t,n){if(typeof e!="object")throw new A("options must be an object",A.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),o=r.length;for(;o-- >0;){let i=r[o],s=t[i];if(s){let l=e[i],a=l===void 0||s(l,i,e);if(a!==!0)throw new A("option "+i+" must be "+a,A.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new A("Unknown option "+i,A.ERR_BAD_OPTION)}}var ol={assertOptions:tS,validators:Ac};var hn=ol.validators,Rr=class{constructor(t){this.defaults=t,this.interceptors={request:new kc,response:new kc}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` `+i):r.stack=i}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=At(this.defaults,n);let{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&ol.assertOptions(r,{silentJSONParsing:hn.transitional(hn.boolean),forcedJSONParsing:hn.transitional(hn.boolean),clarifyTimeoutError:hn.transitional(hn.boolean)},!1),o!=null&&(w.isFunction(o)?n.paramsSerializer={serialize:o}:ol.assertOptions(o,{encode:hn.function,serialize:hn.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=i&&w.merge(i.common,i[n.method]);i&&w.forEach(["delete","get","head","post","put","patch","common"],y=>{delete i[y]}),n.headers=Ie.concat(s,i);let l=[],a=!0;this.interceptors.request.forEach(function(v){typeof v.runWhen=="function"&&v.runWhen(n)===!1||(a=a&&v.synchronous,l.unshift(v.fulfilled,v.rejected))});let f=[];this.interceptors.response.forEach(function(v){f.push(v.fulfilled,v.rejected)});let u,c=0,d;if(!a){let y=[nl.bind(this),void 0];for(y.unshift.apply(y,l),y.push.apply(y,f),d=y.length,u=Promise.resolve(n);c{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i,s=new Promise(l=>{r.subscribe(l),i=l}).then(o);return s.cancel=function(){r.unsubscribe(i)},s},t(function(i,s,l){r.reason||(r.reason=new mn(i,s,l),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},Tg=Mc;function jc(e){return function(n){return e.apply(null,n)}}function Fc(e){return w.isObject(e)&&e.isAxiosError===!0}var Dc={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Dc).forEach(([e,t])=>{Dc[t]=e});var bg=Dc;function Lg(e){let t=new Qo(e),n=Bo(Qo.prototype.request,t);return w.extend(n,Qo.prototype,t,{allOwnKeys:!0}),w.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return Lg(At(e,o))},n}var ie=Lg(Er);ie.Axios=Qo;ie.CanceledError=mn;ie.CancelToken=Tg;ie.isCancel=Go;ie.VERSION=rl;ie.toFormData=pn;ie.AxiosError=A;ie.Cancel=ie.CanceledError;ie.all=function(t){return Promise.all(t)};ie.spread=jc;ie.isAxiosError=Fc;ie.mergeConfig=At;ie.AxiosHeaders=Ie;ie.formToJSON=e=>Zs(w.isHTMLForm(e)?new FormData(e):e);ie.getAdapter=tl.getAdapter;ie.HttpStatusCode=bg;ie.default=ie;var il=ie;var{Axios:SP,AxiosError:kP,CanceledError:EP,isCancel:CP,CancelToken:RP,VERSION:PP,all:NP,Cancel:OP,isAxiosError:IP,spread:TP,toFormData:bP,AxiosHeaders:LP,HttpStatusCode:AP,formToJSON:MP,getAdapter:jP,mergeConfig:FP}=il;BigInt.prototype.toJSON=function(){return"BigInt::"+this.toString()};var nS=typeof window<"u"?window:null,Ag=typeof global<"u"?global:void 0,Pr=async(e,t,n)=>{let r={...n},o=null,i=!1,s=null,l=[];if(Array.isArray(t))for(let c of t)c instanceof File&&(l.push(c),i=!0),typeof c=="function"&&(s=c);else t instanceof File&&(i=!0,l.push(t));if(!i)o=JSON.stringify(t),r["content-type"]="aplication/json";else{let c=new FormData;for(let d of l)c.append(d.name,d);o=c,delete r["content-type"],r.enctype="multipart/form-data;"}let a=new URL(e);if(nS!==null){let c=new URL(location.href),d="";if(a.host===c.host||Ag&&typeof Ag.server_hook=="function"?d=a.toString():d=`${c.protocol}//${c.host}/_proxy/${encodeURIComponent(a.toString())}`,d){if(s)return(await il({method:t?"post":void 0,url:d,data:o,onUploadProgress:s})).data;{let y=await(await fetch(d,t?{method:"POST",body:o,headers:r}:void 0)).text();try{return JSON.parse(y,Mg)}catch{return y}}}}let u=await(await fetch(a,t?{method:"POST",body:o,headers:r}:void 0)).text();try{return JSON.parse(u,Mg)}catch{return u}},Mg=(e,t)=>typeof t=="string"&&t.startsWith("BigInt::")?BigInt(t.substring(8)):t;var Zg=O(Yg());var e0=async(e,t)=>{let n=(0,Zg.default)(e,"/"),r=await Pr(bS(n,"/_prasi/_")),o="";r&&r.prasi&&(o=r.prasi);let i=TS(n);if(o==="v2")await new Promise(s=>{let l=document,a=l.createElement("script");a.onload=async()=>{s()},localStorage.getItem("api-ts-"+n)||localStorage.setItem("api-ts-"+n,Date.now().toString());let f=localStorage.getItem("api-ts-"+n);t?a.src=`${i}/_prasi/load.js?url=${n}&v3&dev=1&ts=${f}`:a.src=`${i}/_prasi/load.js?url=${n}&v3&ts=${f}`,document.querySelector(`script[src="${a.src}"]`)?s():l.body.appendChild(a)});else{let s=await fetch(i+"/_prasi/api-entry");if(Ye.prasiApi[n]={apiEntry:(await s.json()).srv},t){let l=await fetch(i+"/_prasi/api-types");Ye.prasiApi[n].apiTypes=await l.text(),Ye.prasiApi[n].prismaTypes={"prisma.d.ts":await Vc(`${i}/_prasi/prisma/index.d.ts`),"runtime/index.d.ts":await Vc(`${i}/_prasi/prisma/runtime/index.d.ts`),"runtime/library.d.ts":await Vc(`${i}/_prasi/prisma/runtime/library.d.ts`)}}}},TS=e=>{let t=new URL(e);return`${t.protocol}//${t.host}`},bS=(e,t)=>{let n=new URL(e);return n.pathname=t,n.toString()},Vc=async(e,t)=>await(await fetch(e)).text();var qo={},n0=e=>{Ye.prasiApi||(Ye.prasiApi={});try{let t=new URL(e),n=`${t.protocol}//${t.host}`;return Ye.prasiApi[n]||qo[n]||(qo[n]=e0(n,location.hostname.includes("prasi"))),new Proxy({},{get:(r,o)=>{if(o==="_url")return(s,l)=>{let a=new URL(n);a.pathname=s.split("/").filter(c=>c).join("/");let f=new URL(location.href),u="";return a.host===f.host||l===!1?u=a.toString():u=`${f.protocol}//${f.host}/_proxy/${encodeURIComponent(a.toString())}`,u};let i=s=>function(...l){return new Promise(async(a,f)=>{try{let u=Ye.prasiApi[n];if(!u&&qo&&typeof qo[n]=="object"&&(await qo[n],u=Ye.prasiApi[n]),u){if(s==="_raw"){let h=l[0],y=`${n}${h}`,v=await t0(y,l.slice(1));a(v);return}if(u.apiEntry||(u.apiEntry={}),u.apiEntry&&!u.apiEntry[s]){f(`API ${s.toString()} not found, existing API: - ${Object.keys(u.apiEntry||{}).join(` - - `)}`);return}let c=u.apiEntry[s].url,d=u.apiEntry[s].args;if(c&&d){if(l.length>0&&d.length>0)for(let[v,S]of Object.entries(l)){let m=d[parseInt(v)];d&&d.includes(m)&&S&&typeof S!="string"&&typeof S!="number"||(c=c.replace(`:${m}?`,S+""),c=c.replace(`:${m}`,S+""))}let h=`${n}${c}`,y=await t0(h,l);a(y)}else console.error(`API Not Found: ${s.toString()}`)}else f("Failed to load API [Proxy]: "+n)}catch(u){f(u)}})};return o==="then"?new Proxy({},{get:(s,l)=>i(l)}):i(o)}})}catch{return null}},t0=async(e,t)=>await Pr(e,t,{"content-type":"application/json"});var s0=O(i0());var l0=e=>{let t="";return new Proxy({},{get(n,r){return r==="_batch"?{update:async o=>Nr({name:t,action:"batch_update",table:"",params:{batch:o}},e)}:r==="_schema"?{tables:async()=>Nr({name:t,action:"schema_tables",table:"",params:[]},e),columns:async o=>Nr({name:t,action:"schema_columns",table:o,params:[]},e),rels:async o=>Nr({name:t,action:"schema_rels",table:o,params:[]},e)}:r.startsWith("$")?(...o)=>Nr({name:t,action:"query",table:r,params:o},e):new Proxy({},{get(o,i){return async(...s)=>(r==="query"&&(r=i,i="query"),await Nr({name:t,action:i,table:r,params:s},e))}})}})},sl={},Nr=async(e,t)=>{try{let n=new URL(t);n.pathname="/_dbs",e.table&&(n.pathname+=`/${e.table}`);let r=n.toString(),o=(0,s0.default)(e),i=sl[o];if(!i||i&&Date.now()-i.timestamp>1e3){sl[o]={timestamp:Date.now(),promise:Pr(r,e,{"content-type":"application/json"}),result:null};let s=await sl[o].promise;return sl[o].result=s,s}return await i.promise}catch{}};var a0=O(uc());var u0=e=>{let{item:t,item_comp:n,ids:r}=e,o=un(n);if(c0(o,r),t.id&&(o.id=t.id),o.hidden=t.hidden,o.component){if(o.component.props&&t.component)for(let i of Object.keys(o.component.props)){let s=t.component.props[i],l=o.component.props[i];s&&(l.value=s.value,l.valueBuilt=s.valueBuilt,l.jsxCalledBy=s.jsxCalledBy,l.content=s.content)}o.component.instances=t.component?.instances,o.component.style=t.component?.style}for(let i of Object.keys(t))delete t[i];for(let[i,s]of Object.entries(o))t[i]=s},c0=(e,t)=>{if(e.originalId=e.id,t[e.id]||(t[e.id]=(0,a0.createId)()),e.id=t[e.id],e.childs)for(let n of e.childs)c0(n,t)};var f0=e=>{let t=Object.entries(e.item_comp.component?.props||{}).sort((n,r)=>n[1].idx-r[1].idx);for(let[n,r]of t){let o=un(r),i=e.item.component?.props;i&&i[n]&&(o.value=i[n].value,o.valueBuilt=i[n].valueBuilt,i[n].content&&(o.content=i[n].content)),o&&e.each(n,o)}};var ll=e=>{let t={};for(let[n,r]of Object.entries(e))if(n==="childs"){if(t.childs=[],r&&Array.isArray(r))for(let o of r)o.type==="item"&&o.component?t.childs.push(o):t.childs.push({name:o.name,id:o.id,originalId:o.originalId})}else t[n]=r;return t};var d0=(e,t)=>{let{item:n}=t;if(n.type==="item"&&n.component?.id&&t.parent?.item.id){let r=e.comps[n.component.id];if(e.on?.visit_component&&e.on.visit_component(n,t.root||t.item),!r)return;if(r){let o;if(e.mode==="page"?(n.component.instances||(n.component.instances={}),o=n.component.instances):o=t.parent?.root_instances,o){let s=o[n.id];o[n.id]||(o[n.id]={},s=o[n.id]),u0({item:n,item_comp:r,ids:s})}let i={item:ll(n),jsx_prop:t.jsx_prop,parent:{id:t.parent.item.id,comp_id:t.parent?.comp?.component?.id,instance_id:t.parent?.instance_id},instances:o};e.on?.visit&&e.on.visit(i,n,t.root||t.item),n.id&&e.set_meta!==!1&&(e.meta[n.id]=i),f0({item:n,item_comp:r,instance:o?o[n.id]:{},each(s,l){let a=n.component?.id;l.meta?.type==="content-element"&&a&&l.content&&(l.content.name=s,Or({...e,mode:"comp"},{item:l.content,root:t.root||l.content,is_root:!1,jsx_prop:{is_root:!0,comp_id:a,name:s},parent:{item:i.item,instance_id:n.id,comp:r,root_instances:o}}))}});for(let s of Object.values(n.childs))s?.name?.startsWith("jsx:")||s&&Object.keys(s).length>3&&Or({...e,mode:"comp"},{item:s,is_root:!1,root:t.root||t.item,parent:{item:n,instance_id:n.id,root_instances:o,comp:r}})}}};var Or=(e,t)=>{let n=t.item;if(n.type==="item"&&n.component?.id&&t.ignore_first_component!==!0){d0(e,t);return}let r={item:ll(n),parent:{id:t.parent?.item.id||"root",instance_id:t.parent?.instance_id,comp_id:t.parent?.comp?.component?.id}};if(t.jsx_prop&&(r.jsx_prop=t.jsx_prop),e.on?.visit&&e.on.visit(r,n,t.root||t.item),n.id&&e.set_meta!==!1&&(e.meta[r.item.id]=r),n.childs){for(let[o,i]of Object.entries(n.childs))if(i.id){let s={item:i,is_root:!1,root:t.root||t.item,parent:{item:r.item,instance_id:t.parent?.instance_id,comp:t.parent?.comp,root_instances:t.parent?.root_instances}};t.jsx_prop&&(s.jsx_prop={...t.jsx_prop,is_root:!1}),Or(e,s)}}};var FS=()=>new Promise(async e=>{let t=!1,n=await(await fetch(k.url`_prasi/route`)).json();t||e(n)}),p0=async()=>{let e=As(),t=[];try{let n=await FS();if(n&&n.site&&n.urls){n.layout&&(k.layout.id=n.layout.id,k.layout.root=n.layout.root,k.layout.meta={},k.layout.root&&(await _r(k.layout.root.childs),al(k.layout.meta,k.layout.root))),k.site=n.site,k.site.code={mode:"vsc"},await DS(),k.site.api=n0(k.site.api_url),k.site.db=l0(k.site.api_url);let r=window;r.serverurl=k.site.api_url,r.db=k.site.db,r.api=k.site.api;for(let o of n.urls)e.insert(o.url,o),t.push(o)}}catch{}return{router:e,pages:t}},DS=()=>new Promise(e=>{let t=document,n=t.createElement("script");n.onload=async()=>{e()};let r=k.site.api_url;try{new URL(r)}catch{location.hostname==="localhost"?r="http://localhost:4550":r="https://prasi.avolut.com"}localStorage.getItem("api-ts-"+r)||localStorage.setItem("api-ts-"+r,Date.now().toString());let o=localStorage.getItem("api-ts-"+r);n.src=`${r}/_prasi/load.js?url=${r}&v3&ts=${o}`,document.querySelector(`script[src="${n.src}"]`)?e():t.body.appendChild(n)}),al=(e,t)=>{for(let n of t.childs)Or({set_meta:!0,comps:k.comp.list,meta:e,mode:"page"},{item:n})};var re=window;var jt=O(V()),Hc=()=>location.hostname.split(".").length===4||location.hostname==="prasi.app"||location.hostname==="prasi.avolut.com"||location.hostname.includes("ngrok")||location.hostname==="localhost"||location.hostname==="127.0.0.1"||location.hostname==="10.0.2.2",h0=()=>{let e=sn({page_id:""}),[t,n]=(0,m0.useState)({}),r=()=>n({});re.prasiContext.render=r;let o=Wu.Provider,i=Hc()&&location.pathname.startsWith("/prod");if(k.route.status!=="ready")return k.route.status==="init"&&(k.route.status="loading",p0().then(async({router:u,pages:c})=>{Yy(),k.route.status="ready",k.route.router=u,k.route.pages=c;let d=re._prasi.basepath,h=`${d.endsWith("/")?d:`${d}/`}_prasi/code/index.js`,y=new URL(location.href);h.startsWith("/")&&(h=`${y.protocol}//${y.host}${h}`);let v=new Function("callback",`import("${h}").then(callback)`);await new Promise(S=>{v(m=>{for(let[p,g]of Object.entries(m))re[p]=g;S()})}),r()})),(0,jt.jsx)(bo,{});let s=k.route.router;if(!s)return(0,jt.jsx)(Zu,{children:"Failed to create Router"});let l="";if(i){let u=location.pathname.split("/");Yu(u[3])&&(l=u[3])}let a=null;if(re._prasi.page_id)s.insert(k.pathname,{id:re._prasi.page_id,url:k.pathname}),a={id:re._prasi.page_id,url:"",params:re._prasi.params},re._prasi.routed={page_id:re._prasi.page_id,params:re._prasi.params},delete re._prasi.page_id,delete re._prasi.params;else{if(a=s.lookup(k.pathname),l){let u=k.route.pages.find(c=>l===c.id);u&&(a=u)}a&&re._prasi.routed&&re._prasi.routed.page_id===a.id&&re._prasi.routed.params&&(a.params=re._prasi.routed.params)}if(!a)return(0,jt.jsx)(Zu,{children:"Page Not Found"});a.id!==e.page_id&&(k.init_local_effect={}),re.params=a.params||{},k.page.id=a.id,k.page.url=a.url;let f=k.page.cache[a.id];if(f)k.page.root=f.root,k.page.meta=f.meta;else return Qy(a.id).then(async({root:u})=>{if(a){let c={id:a.id,url:a.url,root:u,meta:{}};await _r(u.childs),al(c.meta,u),k.page.cache[c.id]=c,r()}}).catch(()=>{r()}),(0,jt.jsx)(bo,{note:"Loading page"});return(0,jt.jsx)(o,{value:re.prasiContext,children:(0,jt.jsx)("div",{className:cx("relative flex flex-1 items-center justify-center"),children:(0,jt.jsx)("div",{className:cx("absolute flex flex-col items-stretch flex-1 bg-white main-content-preview",k.mode==="mobile"?css` + - `)}`);return}let c=u.apiEntry[s].url,d=u.apiEntry[s].args;if(c&&d){if(l.length>0&&d.length>0)for(let[v,S]of Object.entries(l)){let m=d[parseInt(v)];d&&d.includes(m)&&S&&typeof S!="string"&&typeof S!="number"||(c=c.replace(`:${m}?`,S+""),c=c.replace(`:${m}`,S+""))}let h=`${n}${c}`,y=await t0(h,l);a(y)}else console.error(`API Not Found: ${s.toString()}`)}else f("Failed to load API [Proxy]: "+n)}catch(u){f(u)}})};return o==="then"?new Proxy({},{get:(s,l)=>i(l)}):i(o)}})}catch{return null}},t0=async(e,t)=>await Pr(e,t,{"content-type":"application/json"});var s0=O(i0());var l0=e=>{let t="";return new Proxy({},{get(n,r){return r==="_batch"?{update:async o=>Nr({name:t,action:"batch_update",table:"",params:{batch:o}},e)}:r==="_schema"?{tables:async()=>Nr({name:t,action:"schema_tables",table:"",params:[]},e),columns:async o=>Nr({name:t,action:"schema_columns",table:o,params:[]},e),rels:async o=>Nr({name:t,action:"schema_rels",table:o,params:[]},e)}:r.startsWith("$")?(...o)=>Nr({name:t,action:"query",table:r,params:o},e):new Proxy({},{get(o,i){return async(...s)=>(r==="query"&&(r=i,i="query"),await Nr({name:t,action:i,table:r,params:s},e))}})}})},sl={},Nr=async(e,t)=>{try{let n=new URL(t);n.pathname="/_dbs",e.table&&(n.pathname+=`/${e.table}`);let r=n.toString(),o=(0,s0.default)(e),i=sl[o];if(!i||i&&Date.now()-i.timestamp>1e3){sl[o]={timestamp:Date.now(),promise:Pr(r,e,{"content-type":"application/json"}),result:null};let s=await sl[o].promise;return sl[o].result=s,s}return await i.promise}catch{}};var a0=O(uc());var u0=e=>{let{item:t,item_comp:n,ids:r}=e,o=un(n);if(c0(o,r),t.id&&(o.id=t.id),o.hidden=t.hidden,o.component){if(o.component.props&&t.component)for(let i of Object.keys(o.component.props)){let s=t.component.props[i],l=o.component.props[i];s&&(l.value=s.value,l.valueBuilt=s.valueBuilt,l.jsxCalledBy=s.jsxCalledBy,l.content=s.content)}o.component.instances=t.component?.instances,o.component.style=t.component?.style}for(let i of Object.keys(t))delete t[i];for(let[i,s]of Object.entries(o))t[i]=s},c0=(e,t)=>{if(e.originalId=e.id,t[e.id]||(t[e.id]=(0,a0.createId)()),e.id=t[e.id],e.childs)for(let n of e.childs)c0(n,t)};var f0=e=>{let t=Object.entries(e.item_comp.component?.props||{}).sort((n,r)=>n[1].idx-r[1].idx);for(let[n,r]of t){let o=un(r),i=e.item.component?.props;i&&i[n]&&(o.value=i[n].value,o.valueBuilt=i[n].valueBuilt,i[n].content&&(o.content=i[n].content)),o&&e.each(n,o)}};var ll=e=>{let t={};for(let[n,r]of Object.entries(e))if(n==="childs"){if(t.childs=[],r&&Array.isArray(r))for(let o of r)o.type==="item"&&o.component?t.childs.push(o):t.childs.push({name:o.name,id:o.id,originalId:o.originalId})}else t[n]=r;return t};var d0=(e,t)=>{let{item:n}=t;if(n.type==="item"&&n.component?.id&&t.parent?.item.id){let r=e.comps[n.component.id];if(e.on?.visit_component&&e.on.visit_component(n,t.root||t.item),!r)return;if(r){let o;if(e.mode==="page"?(n.component.instances||(n.component.instances={}),o=n.component.instances):o=t.parent?.root_instances,o){let s=o[n.id];o[n.id]||(o[n.id]={},s=o[n.id]),u0({item:n,item_comp:r,ids:s})}let i={item:ll(n),jsx_prop:t.jsx_prop,parent:{id:t.parent.item.id,comp_id:t.parent?.comp?.component?.id,instance_id:t.parent?.instance_id},instances:o};e.on?.visit&&e.on.visit(i,n,t.root||t.item),n.id&&e.set_meta!==!1&&(e.meta[n.id]=i),f0({item:n,item_comp:r,instance:o?o[n.id]:{},each(s,l){let a=n.component?.id;l.meta?.type==="content-element"&&a&&l.content&&(l.content.name=s,Or({...e},{item:l.content,root:t.root||l.content,is_root:!1,jsx_prop:{is_root:!0,comp_id:a,name:s},parent:{item:i.item,instance_id:n.id,comp:r,root_instances:o}}))}});for(let s of Object.values(n.childs))s?.name?.startsWith("jsx:")||s&&Object.keys(s).length>3&&Or({...e,mode:"comp"},{item:s,is_root:!1,root:t.root||t.item,parent:{item:n,instance_id:n.id,root_instances:o,comp:r}})}}};var Or=(e,t)=>{let n=t.item;if(n.type==="item"&&n.component?.id&&t.ignore_first_component!==!0){d0(e,t);return}let r={item:ll(n),parent:{id:t.parent?.item.id||"root",instance_id:t.parent?.instance_id,comp_id:t.parent?.comp?.component?.id}};if(t.jsx_prop&&(r.jsx_prop=t.jsx_prop),e.on?.visit&&e.on.visit(r,n,t.root||t.item),n.id&&e.set_meta!==!1&&(e.meta[r.item.id]=r),n.childs){for(let[o,i]of Object.entries(n.childs))if(i.id){let s={item:i,is_root:!1,root:t.root||t.item,parent:{item:r.item,instance_id:t.parent?.instance_id,comp:t.parent?.comp,root_instances:t.parent?.root_instances}};t.jsx_prop&&(s.jsx_prop={...t.jsx_prop,is_root:!1}),Or(e,s)}}};var FS=()=>new Promise(async e=>{let t=!1,n=await(await fetch(k.url`_prasi/route`)).json();t||e(n)}),p0=async()=>{let e=As(),t=[];try{let n=await FS();if(n&&n.site&&n.urls){n.layout&&(k.layout.id=n.layout.id,k.layout.root=n.layout.root,k.layout.meta={},k.layout.root&&(await _r(k.layout.root.childs),al(k.layout.meta,k.layout.root))),k.site=n.site,k.site.code={mode:"vsc"},await DS(),k.site.api=n0(k.site.api_url),k.site.db=l0(k.site.api_url);let r=window;r.serverurl=k.site.api_url,r.db=k.site.db,r.api=k.site.api;for(let o of n.urls)e.insert(o.url,o),t.push(o)}}catch{}return{router:e,pages:t}},DS=()=>new Promise(e=>{let t=document,n=t.createElement("script");n.onload=async()=>{e()};let r=k.site.api_url;try{new URL(r)}catch{location.hostname==="localhost"?r="http://localhost:4550":r="https://prasi.avolut.com"}localStorage.getItem("api-ts-"+r)||localStorage.setItem("api-ts-"+r,Date.now().toString());let o=localStorage.getItem("api-ts-"+r);n.src=`${r}/_prasi/load.js?url=${r}&v3&ts=${o}`,document.querySelector(`script[src="${n.src}"]`)?e():t.body.appendChild(n)}),al=(e,t)=>{for(let n of t.childs)Or({set_meta:!0,comps:k.comp.list,meta:e,mode:"page"},{item:n})};var re=window;var jt=O(V()),Hc=()=>location.hostname.split(".").length===4||location.hostname==="prasi.app"||location.hostname==="prasi.avolut.com"||location.hostname.includes("ngrok")||location.hostname==="localhost"||location.hostname==="127.0.0.1"||location.hostname==="10.0.2.2",h0=()=>{let e=sn({page_id:""}),[t,n]=(0,m0.useState)({}),r=()=>n({});re.prasiContext.render=r;let o=Wu.Provider,i=Hc()&&location.pathname.startsWith("/prod");if(k.route.status!=="ready")return k.route.status==="init"&&(k.route.status="loading",p0().then(async({router:u,pages:c})=>{Yy(),k.route.status="ready",k.route.router=u,k.route.pages=c;let d=re._prasi.basepath,h=`${d.endsWith("/")?d:`${d}/`}_prasi/code/index.js`,y=new URL(location.href);h.startsWith("/")&&(h=`${y.protocol}//${y.host}${h}`);let v=new Function("callback",`import("${h}").then(callback)`);await new Promise(S=>{v(m=>{for(let[p,g]of Object.entries(m))re[p]=g;S()})}),r()})),(0,jt.jsx)(bo,{});let s=k.route.router;if(!s)return(0,jt.jsx)(Zu,{children:"Failed to create Router"});let l="";if(i){let u=location.pathname.split("/");Yu(u[3])&&(l=u[3])}let a=null;if(re._prasi.page_id)s.insert(k.pathname,{id:re._prasi.page_id,url:k.pathname}),a={id:re._prasi.page_id,url:"",params:re._prasi.params},re._prasi.routed={page_id:re._prasi.page_id,params:re._prasi.params},delete re._prasi.page_id,delete re._prasi.params;else{if(a=s.lookup(k.pathname),l){let u=k.route.pages.find(c=>l===c.id);u&&(a=u)}a&&re._prasi.routed&&re._prasi.routed.page_id===a.id&&re._prasi.routed.params&&(a.params=re._prasi.routed.params)}if(!a)return(0,jt.jsx)(Zu,{children:"Page Not Found"});a.id!==e.page_id&&(k.init_local_effect={}),re.params=a.params||{},k.page.id=a.id,k.page.url=a.url;let f=k.page.cache[a.id];if(f)k.page.root=f.root,k.page.meta=f.meta;else return Qy(a.id).then(async({root:u})=>{if(a){let c={id:a.id,url:a.url,root:u,meta:{}};await _r(u.childs),al(c.meta,u),k.page.cache[c.id]=c,r()}}).catch(()=>{r()}),(0,jt.jsx)(bo,{note:"Loading page"});return(0,jt.jsx)(o,{value:re.prasiContext,children:(0,jt.jsx)("div",{className:cx("relative flex flex-1 items-center justify-center"),children:(0,jt.jsx)("div",{className:cx("absolute flex flex-col items-stretch flex-1 bg-white main-content-preview",k.mode==="mobile"?css` @media (min-width: 768px) { border-left: 1px solid #ccc; border-right: 1px solid #ccc; diff --git a/app/srv/ws/sync/editor/code/build-code.ts b/app/srv/ws/sync/editor/code/build-code.ts index ebb15d99..5a1f6bd4 100644 --- a/app/srv/ws/sync/editor/code/build-code.ts +++ b/app/srv/ws/sync/editor/code/build-code.ts @@ -16,6 +16,7 @@ import { SyncType } from "../../type"; import { Packr } from "msgpackr"; import { ServerWebSocket } from "bun"; import { WSData } from "../../../../../../pkgs/core/server/create"; +import { g } from "utils/global"; const packr = new Packr({ structuredClone: true }); @@ -143,9 +144,16 @@ if (typeof global.server_hook === "function") { { name: "prasi", setup(setup) { - setup.onEnd((res) => { - server.init(id_site); - }); + const reinit = () => { + setup.onEnd((res) => { + server.init(id_site); + }); + }; + if (g.mode === "dev") { + setTimeout(reinit, 1000); + } else { + reinit(); + } }, }, ], diff --git a/app/srv/ws/sync/editor/code/prep-code.ts b/app/srv/ws/sync/editor/code/prep-code.ts index 0e469b79..b5fde610 100644 --- a/app/srv/ws/sync/editor/code/prep-code.ts +++ b/app/srv/ws/sync/editor/code/prep-code.ts @@ -1,3 +1,4 @@ +import { g } from "utils/global"; import { codeBuild } from "./build-code"; import { CodeMode, code, codeGlobalTypings } from "./util-code"; @@ -13,5 +14,6 @@ export const prepCodeSnapshot = async (id_site: string, mode: CodeMode) => { .await(); await codeBuild(id_site); + return { ts: code.esbuild[id_site].site_ts }; }; diff --git a/app/web/src/nova/ed/logic/tree/build.tsx b/app/web/src/nova/ed/logic/tree/build.tsx index eeb744a5..f11decd9 100644 --- a/app/web/src/nova/ed/logic/tree/build.tsx +++ b/app/web/src/nova/ed/logic/tree/build.tsx @@ -58,6 +58,7 @@ export const treeCacheBuild = async (p: PG, page_id: string) => { }, } ); + for (const item of page_cache.root.childs) { meta_cache.entry.push(item.id); genMeta( @@ -111,11 +112,14 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => { if (item) { await initLoadComp({ comps: p.comp.loaded, meta, mode: "page" }, item, { async load(comp_ids) { + console.log(comp_ids.includes("ca7ac237-8f22-4492-bb9d-4b715b1f5c25")) for (const id of comp_ids) { await loadComponent(p, id); } }, }); + console.log(p.comp.loaded["ca7ac237-8f22-4492-bb9d-4b715b1f5c25"]); + genMeta( { note: "tree-rebuild", diff --git a/app/web/src/nova/ed/panel/side/prop-instance.tsx b/app/web/src/nova/ed/panel/side/prop-instance.tsx index 62d6fbc7..7cf02ef3 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance.tsx @@ -110,15 +110,17 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => { } } - const visible_fn = new Function( - ...Object.keys(arg), - `return ${visible}` - ); + let visible_fn = null as any; + try { + visible_fn = new Function(...Object.keys(arg), `return ${visible}`); + const res = visible_fn(...Object.values(arg)); - const res = visible_fn(...Object.values(arg)); - - if (!res) { - return; + if (!res) { + return; + } + } catch (e) { + console.log(visible, arg); + console.error(e); } } catch (e) { console.error(e); diff --git a/app/web/src/nova/vi/load/load-snapshot.tsx b/app/web/src/nova/vi/load/load-snapshot.tsx index 22c379e5..3a29ffb2 100644 --- a/app/web/src/nova/vi/load/load-snapshot.tsx +++ b/app/web/src/nova/vi/load/load-snapshot.tsx @@ -16,29 +16,29 @@ export const viLoadSnapshot = async (p: PG) => { if (api_url && apiURL.hostname) { await loadApiProxyDef(api_url, true); - const api = w.prasiApi[api_url]; - if (api && api.apiTypes && api.prismaTypes) { - const zip = JSON.stringify({ - api: api.apiTypes, - prisma: api.prismaTypes, - }); + // const api = w.prasiApi[api_url]; + // if (api && api.apiTypes && api.prismaTypes) { + // const zip = JSON.stringify({ + // api: api.apiTypes, + // prisma: api.prismaTypes, + // }); - const hash = simpleHash(zip); - const res = await p.sync?.code.action({ - type: "check-typings", - site_id: p.site.id, - hash, - }); - if (res?.type === "check-typings" && !res.hash) { - const body = Buffer.from(compress(encoder.encode(zip))); - p.sync?.code.action({ - type: "push-typings", - site_id: p.site.id, - body, - hash, - }); - } - } + // const hash = simpleHash(zip); + // const res = await p.sync?.code.action({ + // type: "check-typings", + // site_id: p.site.id, + // hash, + // }); + // if (res?.type === "check-typings" && !res.hash) { + // const body = Buffer.from(compress(encoder.encode(zip))); + // p.sync?.code.action({ + // type: "push-typings", + // site_id: p.site.id, + // body, + // hash, + // }); + // } + // } if (!p.script.db) p.script.db = dbProxy(api_url); if (!p.script.api) p.script.api = apiProxy(api_url); diff --git a/app/web/src/nova/vi/meta/comp.tsx b/app/web/src/nova/vi/meta/comp.tsx index 4ddd6977..fefc8f97 100644 --- a/app/web/src/nova/vi/meta/comp.tsx +++ b/app/web/src/nova/vi/meta/comp.tsx @@ -77,7 +77,7 @@ export const genComp = (p: GenMetaP, arg: GenMetaArg) => { prop.content.name = name; genMeta( - { ...p, mode: "comp" }, + { ...p }, { item: prop.content, root: arg.root || prop.content, diff --git a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx index fb506e0e..c9850338 100644 --- a/app/web/src/nova/vi/meta/comp/init-comp-load.tsx +++ b/app/web/src/nova/vi/meta/comp/init-comp-load.tsx @@ -1,4 +1,5 @@ import { IItem } from "../../../../utils/types/item"; +import { FNComponent } from "../../../../utils/types/meta-fn"; import { GenMetaP, IMeta } from "../../utils/types"; import { genMeta } from "../meta"; @@ -14,6 +15,7 @@ export const initLoadComp = async ( ) => { const comp_ids = new Set(); const shared = { root: item } as any; + const comps = [] as FNComponent[]; genMeta( { ...p, @@ -26,36 +28,7 @@ export const initLoadComp = async ( comp_ids.add(id); } } - - if (component?.props) { - for (const [name, prop] of Object.entries(component.props)) { - if (prop.content) { - genMeta( - { - ...p, - on: { - visit_component: ({ component }) => { - if (component) { - const { id } = component; - if (!p.comps[id]) { - if (!_loaded || (_loaded && !_loaded.has(id))) { - comp_ids.add(id); - } - } - } - }, - visit(meta, vitem) { - if (opt.visit) opt.visit(meta, vitem, shared); - }, - }, - set_meta: false, - note: "init-load-comp-prop", - }, - { item: prop.content } - ); - } - } - } + comps.push(component); } }, visit(meta, vitem) { @@ -69,23 +42,30 @@ export const initLoadComp = async ( ); if (opt.done) opt.done(shared); + let loaded = _loaded; + if (!loaded) { + loaded = new Set(); + } if (comp_ids.size > 0) { await opt.load([...comp_ids]); - let loaded = _loaded; - if (!loaded) { - loaded = new Set(); - } comp_ids.forEach((id) => { if (loaded) loaded.add(id); }); for (const id of [...loaded]) { const comp = p.comps[id]; - if (comp) { await initLoadComp(p, comp, opt, loaded); } } } + + for (const component of comps) { + for (const prop of Object.values(component.props)) { + if (prop.meta?.type === "content-element" && prop.content) { + await initLoadComp(p, prop.content, opt, loaded); + } + } + } }; diff --git a/pkgs/core/server/create.ts b/pkgs/core/server/create.ts index 1f5526fb..a5ef7482 100644 --- a/pkgs/core/server/create.ts +++ b/pkgs/core/server/create.ts @@ -16,8 +16,8 @@ export const cache = { export type WSData = { url: URL }; -export const createServer = async () => { - await serveAPI.init(); +export const createServer = async () => { + await serveAPI.init(); await serveStatic.init(); const { wsHandler } = await import("../../../app/srv/ws/handler");