From ff6efc0518954688221da3fc49930f4ccc96c7f9 Mon Sep 17 00:00:00 2001 From: Rizky Date: Thu, 15 Feb 2024 06:45:58 +0700 Subject: [PATCH] wip fix --- app/srv/api/prod-zip.ts | 2 +- app/srv/api/prod.ts | 2 +- app/srv/{prod => core}/main.js | 2 +- app/web/src/nova/prod/base/base.tsx | 4 +++- app/web/src/nova/prod/root.tsx | 2 +- dockerzip | Bin 4672 -> 4672 bytes pkgs/core/{build-prod.ts => build-core.ts} | 2 +- pkgs/core/index.ts | 2 ++ pkgs/docker-prep.ts | 2 -- 9 files changed, 10 insertions(+), 8 deletions(-) rename app/srv/{prod => core}/main.js (98%) rename pkgs/core/{build-prod.ts => build-core.ts} (91%) diff --git a/app/srv/api/prod-zip.ts b/app/srv/api/prod-zip.ts index 674f7d7a..bd4b0353 100644 --- a/app/srv/api/prod-zip.ts +++ b/app/srv/api/prod-zip.ts @@ -59,7 +59,7 @@ export const _ = { code.path(site_id, "server", "build") ), site: readDirectoryRecursively(code.path(site_id, "site", "build")), - core: readDirectoryRecursively(dir.path(`/app/srv/prod`)), + core: readDirectoryRecursively(dir.path(`/app/srv/core`)), }, }; diff --git a/app/srv/api/prod.ts b/app/srv/api/prod.ts index 85dd5a28..a5265b82 100644 --- a/app/srv/api/prod.ts +++ b/app/srv/api/prod.ts @@ -148,7 +148,7 @@ export const _ = { } else if (pathname === "index.html" || pathname === "_") { return index_html; } else { - const res = dir.path(`/app/srv/prod/${pathname}`); + const res = dir.path(`/app/srv/core/${pathname}`); const file = Bun.file(res); if (!(await file.exists())) { return index_html; diff --git a/app/srv/prod/main.js b/app/srv/core/main.js similarity index 98% rename from app/srv/prod/main.js rename to app/srv/core/main.js index f466f0af..ca3404ef 100644 --- a/app/srv/prod/main.js +++ b/app/srv/core/main.js @@ -135,7 +135,7 @@ ${a} return ${c} `);t.item.script.props[s]={value:c};let l=u(...Object.values(r));typeof l=="function"&&(t.item.script.props[s].fn=l,l=(...g)=>t.item.script?.props?.[s].fn(...g)),r[s]=l,i&&(i[s]=l)}catch{o.add(s)}}},ja=(e,t,A)=>{if(t.item.script?.props){let i={...A,api:e.site.api,db:e.site.db};for(let[n,r]of Object.entries(t.item.script.props))if(r.fn){let o=new Function(...Object.keys(i),`// [${t.item.name}] ${n}: ${t.item.id} return ${r.value||""} - `);r.fn=o(...Object.values(i))}}};var ky=R(Ie()),EB=({meta:e,passprop:t,is_layout:A})=>{let i=Ci(Ui,"VI"),[n,r]=(0,Dy.useState)({});e.render=()=>{r({})};let o=t;return e.item.component?.id&&(o||(o={}),wy(i,e,A,o)),e.item.adv?.js&&(yy(i,e,A,o),e.script)?e.script.result:(0,ky.jsx)(mB,{meta:e,passprop:o,is_layout:A})};var _e=R(Ie()),QN=70,ec={enabled:!1,meta:{}},yr=({meta:e,children:t,passprop:A,is_layout:i})=>{if(ec.enabled){let n=ec.meta;if(n[e.item.id]?n[e.item.id].last_render===Math.floor(Date.now()/1e3)?n[e.item.id].count++:n[e.item.id]={last_render:Math.floor(Date.now()/1e3),count:1}:n[e.item.id]={last_render:Math.floor(Date.now()/1e3),count:1},n[e.item.id]?.count>QN)return(0,_e.jsxs)("div",{className:"bg-orange-100 border border-orange-300 rounded-sm text-xs flex flex-col items-center",children:[(0,_e.jsxs)("div",{className:"text-[10px] font-bold text-red-900 self-stretch px-1",children:["WARNING: Render loop detected in [",e.item.name,"]"]}),(0,_e.jsxs)("p",{className:"border-b border-orange-300 px-1 pb-1 min-w-[100px]",children:["Rendered ",n[e.item.id]?.count," times in less than 1 second."]})]})}return!e||e.item.hidden?null:e.item.adv?.js||e.item.component?.id?(0,_e.jsx)(FA,{meta:e,children:(0,_e.jsx)(EB,{meta:e,is_layout:i,passprop:A})}):(0,_e.jsx)(FA,{meta:e,children:(0,_e.jsx)(mB,{meta:e,passprop:A,is_layout:i})})},mB=({meta:e,passprop:t,is_layout:A})=>{let i=Ci(Ui,"VI");if(A&&e.item.name==="children"){let r=[];for(let o of i.entry){let s=i.meta[o];if(s.item.adv?.js||s.item.component?.id)r.push((0,_e.jsx)(FA,{meta:s,children:(0,_e.jsx)(EB,{meta:s,is_layout:A,passprop:t})}));else{let I=as(i,s,!1,t);i.visit&&i.visit(s,I),r.push((0,_e.jsx)("div",{...I.props}))}}return(0,_e.jsx)(_e.Fragment,{children:r.map((o,s)=>(0,_e.jsx)(Sy.Fragment,{children:o},s))})}let n=as(i,e,A,t);return i.visit&&i.visit(e,n),(0,_e.jsx)("div",{...n.props})};var wr=R(Ie()),Uy=({})=>{let e=Ci(Ui,"VI"),t=Zn({tick:Date.now()});if(e.tick=t.tick,e.status!=="ready")return(0,wr.jsx)("div",{className:"flex flex-1 flex-col relative",children:(0,wr.jsx)(Pi,{backdrop:!1})});let A=!!e.layout?.entry&&e.layout.entry.length>0,i=e.entry;return A&&e.layout?.entry&&(i=e.layout?.entry),(0,wr.jsx)("div",{className:"flex flex-1 flex-col relative",children:Array.isArray(i)&&i.map(n=>{let r=A?e.layout?.meta[n]:e.meta[n];return r&&Element?(0,wr.jsx)(FA,{children:(0,wr.jsx)(yr,{meta:r,is_layout:A})},r.item.id):null})})};var tc=R(Ie()),yB=window,Ny=({meta:e,entry:t,api_url:A,site_id:i,api:n,mode:r,db:o,visit:s,script:I,page_id:a,render_stat:c,on_status_changed:u,on_preload:l,layout:g})=>{let B=Ci(Ui,"VI");return B.mode=r,B.entry=t,B.on_preload=l,yB.isMobile=r==="mobile",yB.isDesktop=r==="desktop",yB.preload=p=>{B.page.navs[a]||(B.page.navs[a]=new Set);let U=typeof p=="string"?[p]:p;for(let d of U)B.page.navs[a].add(d);return clearTimeout(ln.timeout),ln.timeout=setTimeout(()=>{B.on_preload&&B.on_preload({urls:Array.from(B.page.navs[a])})},100),""},B.layout=g,B.page.cur.id=a,B.on_status_changes=u,c==="disabled"&&(ec.enabled=!1),B.meta!==e&&(B.meta=e),I&&(B.script.init_local_effect=I.init_local_effect),B.visit=s,B.status==="init"&&(B.site.db=o,B.site.api=n,Ym(B,{api_url:A,site_id:i})),l&&(0,Ac.useEffect)(()=>{setTimeout(()=>{let p=B.page.navs[B.page.cur.id];p&&l({urls:Array.from(p)})},500)},[B.page.cur.id]),(0,tc.jsx)(FA,{children:(0,tc.jsx)(Ac.Suspense,{children:(0,tc.jsx)(Uy,{})})})};var wB=window,M={root:null,url(...e){let t=e.map(i=>Array.isArray(i)?i.join(""):i).join(""),A=this.root.toString();return A.endsWith("/")&&(A=A.substring(0,A.length-1)),t.startsWith("/")?A+t:A+"/"+t},get pathname(){return location.pathname.substring(M.root.pathname.length)},site:{id:wB._prasi?.site_id},init_local_effect:{},mode:"",route:{status:"init",router:null},comp:{list:{},pending:new Set},layout:{id:"",root:null,meta:null},cache:{urls:new Set},page:{id:"",url:"",root:null,meta:null,cache:{}}},xy=()=>{if(!M.root){let e=new URL(location.href);wB._prasi.basepath&&(e.pathname=wB._prasi.basepath),M.root=new URL(`${e.protocol}//${e.host}${e.pathname}`),M.root.pathname.endsWith("/")&&(M.root.pathname=M.root.pathname.substring(0,M.root.length-1))}};async function dn(e){let t=new DecompressionStream("gzip"),A=e.stream().pipeThrough(t);return await new Response(A).blob()}var nA=on("prasi-prod","prasi-cache-prod");var cs=async e=>{let t=M.comp;for(let A of e)A&&A.type!=="text"&&FB(A);if(t.pending.size>0){let A=!0,i=[];for(let n of[...t.pending]){let r=await EA(`comp-${n}`,nA);r||(A=!1),t.list[n]=r,i.push(r)}if(A){for(let n of[...t.pending])t.pending.delete(n);await cs(i);return}}if(t.pending.size>0)try{let A=await(await fetch(M.url`_prasi/comp`,{method:"POST",body:JSON.stringify({ids:[...t.pending]})})).blob(),i=JSON.parse(await(await dn(A)).text());for(let[n,r]of Object.entries(i))t.pending.delete(n),t.list[n]=r,await mA(`comp-${n}`,r,nA);await cs(Object.values(i))}catch{}},FB=e=>{let t=M.comp;if(e.type==="item"){let A=e.component?.id;if(A){!t.list[A]&&!t.pending.has(A)&&t.pending.add(A);for(let i of Object.values(e.component?.props||{}))i.content&&i.meta?.type==="content-element"&&FB(i.content)}}if(e.childs)for(let A of e.childs)A&&A.type!=="text"&&FB(A)};var Gy=e=>new Promise(async t=>{let A=!1,i=await EA(`page-${e}`,nA);i&&(t(i),A=!0);let n=await(await fetch(M.url`_prasi/page/${e}`)).blob(),r=JSON.parse(await(await dn(n)).text());mA(`page-${e}`,{id:e,url:r.url,root:r.root},nA),A||t(r)}),CN=e=>new Promise(async t=>{let A={},i=[...new Set(e)],n=!0;for(let s of i){let I=await EA(`page-${s}`,nA);if(I)A[s]=I;else{n=!1;break}}n&&t(A);let r=await(await fetch(M.url`_prasi/pages`,{method:"POST",body:JSON.stringify({ids:i})})).blob(),o=JSON.parse(await(await dn(r)).text());for(let[s,I]of Object.entries(o))mA(`page-${s}`,I,nA);n||t(o)}),Hy=async e=>{let t=e.map(A=>M.route.router?.lookup(A)).filter(A=>A&&A.id);return await CN(t.map(A=>A?.id))};var vy=R(My()),Jy=()=>{let e=M;if(e.site.id){if(!e.mode&&e.site.responsive)if(e.site.responsive!=="mobile-only"&&e.site.responsive!=="desktop-only"){let t=(0,vy.default)();e.mode=t.device.type==="mobile"?"mobile":"desktop"}else e.site.responsive==="mobile-only"?e.mode="mobile":e.site.responsive==="desktop-only"&&(e.mode="desktop");localStorage.getItem("prasi-editor-mode")&&(e.mode=localStorage.getItem("prasi-editor-mode"))}};var hN=()=>new Promise(async e=>{let t=!1,A=await EA("route",nA);A&&(e(A),t=!0);let i=await(await fetch(M.url`_prasi/route`)).blob(),r=await dn(i),o=JSON.parse(await r.text());await mA("route",o,nA),t||e(o)}),qy=async()=>{let e=fr();try{let t=await hN();if(t&&t.site&&t.urls){t.layout&&(M.layout.id=t.layout.id,M.layout.root=t.layout.root,M.layout.meta={},M.layout.root&&nc(M.layout.meta,M.layout.root)),M.site=t.site,M.site.code={mode:"new"},await pN(),M.site.api=Cr(M.site.api_url),M.site.db=hr(M.site.api_url);let A=window;A.serverurl=M.site.api_url,A.db=M.site.db,A.api=M.site.api;for(let i of t.urls)e.insert(i.url,i)}}catch{}return e},pN=()=>new Promise(e=>{let t=document,A=t.createElement("script");A.onload=async()=>{e()};let i=M.site.api_url;localStorage.getItem("api-ts-"+i)||localStorage.setItem("api-ts-"+i,Date.now().toString());let n=localStorage.getItem("api-ts-"+i);A.src=`${i}/_prasi/load.js?url=${i}&v3&ts=${n}`,document.querySelector(`script[src="${A.src}"]`)?e():t.body.appendChild(A)}),nc=(e,t)=>{for(let A of t.childs)Nt({comps:M.comp.list,meta:e,mode:"page"},{item:A})};var Qn=window;var _A=R(Ie()),Ky=()=>{let[e,t]=(0,Ry.useState)({}),A=()=>t({});Qn.prasiContext.render=A;let i=Jl.Provider;if(M.route.status!=="ready")return M.route.status==="init"&&(M.route.status="loading",qy().then(async s=>{Jy(),M.route.status="ready",M.route.router=s;let I=Ta(await(await fetch(`${Qn._prasi.basepath}/_prasi/code/index.js`.replace("//","/"))).text());if(I)for(let[a,c]of Object.entries(I))window[a]=c;A()})),(0,_A.jsx)(Pi,{note:"Loading router"});let n=M.route.router;if(!n)return(0,_A.jsx)(Kl,{children:"Failed to create Router"});let r=n.lookup(M.pathname);if(!r)return(0,_A.jsx)(Kl,{children:"Page Not Found"});Qn.params=r.params,M.page.id=r.id,M.page.url=r.url;let o=M.page.cache[r.id];if(o)M.page.root=o.root,M.page.meta=o.meta;else return Gy(r.id).then(async({root:s})=>{let I={id:r.id,url:r.url,root:s,meta:{}};await cs(s.childs),nc(I.meta,s),M.page.cache[I.id]=I,A()}).catch(()=>{A()}),(0,_A.jsx)(Pi,{note:"Loading page"});return(0,_A.jsx)(i,{value:Qn.prasiContext,children:(0,_A.jsx)("div",{className:cx("relative flex flex-1 items-center justify-center"),children:(0,_A.jsx)("div",{className:cx("absolute flex flex-col items-stretch flex-1 bg-white main-content-preview",M.mode==="mobile"?css` + `);r.fn=o(...Object.values(i))}}};var ky=R(Ie()),EB=({meta:e,passprop:t,is_layout:A})=>{let i=Ci(Ui,"VI"),[n,r]=(0,Dy.useState)({});e.render=()=>{r({})};let o=t;return e.item.component?.id&&(o||(o={}),wy(i,e,A,o)),e.item.adv?.js&&(yy(i,e,A,o),e.script)?e.script.result:(0,ky.jsx)(mB,{meta:e,passprop:o,is_layout:A})};var _e=R(Ie()),QN=70,ec={enabled:!1,meta:{}},yr=({meta:e,children:t,passprop:A,is_layout:i})=>{if(ec.enabled){let n=ec.meta;if(n[e.item.id]?n[e.item.id].last_render===Math.floor(Date.now()/1e3)?n[e.item.id].count++:n[e.item.id]={last_render:Math.floor(Date.now()/1e3),count:1}:n[e.item.id]={last_render:Math.floor(Date.now()/1e3),count:1},n[e.item.id]?.count>QN)return(0,_e.jsxs)("div",{className:"bg-orange-100 border border-orange-300 rounded-sm text-xs flex flex-col items-center",children:[(0,_e.jsxs)("div",{className:"text-[10px] font-bold text-red-900 self-stretch px-1",children:["WARNING: Render loop detected in [",e.item.name,"]"]}),(0,_e.jsxs)("p",{className:"border-b border-orange-300 px-1 pb-1 min-w-[100px]",children:["Rendered ",n[e.item.id]?.count," times in less than 1 second."]})]})}return!e||e.item.hidden?null:e.item.adv?.js||e.item.component?.id?(0,_e.jsx)(FA,{meta:e,children:(0,_e.jsx)(EB,{meta:e,is_layout:i,passprop:A})}):(0,_e.jsx)(FA,{meta:e,children:(0,_e.jsx)(mB,{meta:e,passprop:A,is_layout:i})})},mB=({meta:e,passprop:t,is_layout:A})=>{let i=Ci(Ui,"VI");if(A&&e.item.name==="children"){let r=[];for(let o of i.entry){let s=i.meta[o];if(s.item.adv?.js||s.item.component?.id)r.push((0,_e.jsx)(FA,{meta:s,children:(0,_e.jsx)(EB,{meta:s,is_layout:A,passprop:t})}));else{let I=as(i,s,!1,t);i.visit&&i.visit(s,I),r.push((0,_e.jsx)("div",{...I.props}))}}return(0,_e.jsx)(_e.Fragment,{children:r.map((o,s)=>(0,_e.jsx)(Sy.Fragment,{children:o},s))})}let n=as(i,e,A,t);return i.visit&&i.visit(e,n),(0,_e.jsx)("div",{...n.props})};var wr=R(Ie()),Uy=({})=>{let e=Ci(Ui,"VI"),t=Zn({tick:Date.now()});if(e.tick=t.tick,e.status!=="ready")return(0,wr.jsx)("div",{className:"flex flex-1 flex-col relative",children:(0,wr.jsx)(Pi,{backdrop:!1})});let A=!!e.layout?.entry&&e.layout.entry.length>0,i=e.entry;return A&&e.layout?.entry&&(i=e.layout?.entry),(0,wr.jsx)("div",{className:"flex flex-1 flex-col relative",children:Array.isArray(i)&&i.map(n=>{let r=A?e.layout?.meta[n]:e.meta[n];return r&&Element?(0,wr.jsx)(FA,{children:(0,wr.jsx)(yr,{meta:r,is_layout:A})},r.item.id):null})})};var tc=R(Ie()),yB=window,Ny=({meta:e,entry:t,api_url:A,site_id:i,api:n,mode:r,db:o,visit:s,script:I,page_id:a,render_stat:c,on_status_changed:u,on_preload:l,layout:g})=>{let B=Ci(Ui,"VI");return B.mode=r,B.entry=t,B.on_preload=l,yB.isMobile=r==="mobile",yB.isDesktop=r==="desktop",yB.preload=p=>{B.page.navs[a]||(B.page.navs[a]=new Set);let U=typeof p=="string"?[p]:p;for(let d of U)B.page.navs[a].add(d);return clearTimeout(ln.timeout),ln.timeout=setTimeout(()=>{B.on_preload&&B.on_preload({urls:Array.from(B.page.navs[a])})},100),""},B.layout=g,B.page.cur.id=a,B.on_status_changes=u,c==="disabled"&&(ec.enabled=!1),B.meta!==e&&(B.meta=e),I&&(B.script.init_local_effect=I.init_local_effect),B.visit=s,B.status==="init"&&(B.site.db=o,B.site.api=n,Ym(B,{api_url:A,site_id:i})),l&&(0,Ac.useEffect)(()=>{setTimeout(()=>{let p=B.page.navs[B.page.cur.id];p&&l({urls:Array.from(p)})},500)},[B.page.cur.id]),(0,tc.jsx)(FA,{children:(0,tc.jsx)(Ac.Suspense,{children:(0,tc.jsx)(Uy,{})})})};var wB=window,M={root:null,url(...e){let t=e.map(i=>Array.isArray(i)?i.join(""):i).join(""),A=this.root.toString();return A.endsWith("/")&&(A=A.substring(0,A.length-1)),t.startsWith("/")?A+t:A+"/"+t},get pathname(){let e=location.pathname.substring(M.root.pathname.length);return e.startsWith("/")?e:`/${e}`},site:{id:wB._prasi?.site_id},init_local_effect:{},mode:"",route:{status:"init",router:null},comp:{list:{},pending:new Set},layout:{id:"",root:null,meta:null},cache:{urls:new Set},page:{id:"",url:"",root:null,meta:null,cache:{}}},xy=()=>{if(!M.root){let e=new URL(location.href);wB._prasi.basepath&&(e.pathname=wB._prasi.basepath),M.root=new URL(`${e.protocol}//${e.host}${e.pathname}`),M.root.pathname.endsWith("/")&&(M.root.pathname=M.root.pathname.substring(0,M.root.length-1))}};async function dn(e){let t=new DecompressionStream("gzip"),A=e.stream().pipeThrough(t);return await new Response(A).blob()}var nA=on("prasi-prod","prasi-cache-prod");var cs=async e=>{let t=M.comp;for(let A of e)A&&A.type!=="text"&&FB(A);if(t.pending.size>0){let A=!0,i=[];for(let n of[...t.pending]){let r=await EA(`comp-${n}`,nA);r||(A=!1),t.list[n]=r,i.push(r)}if(A){for(let n of[...t.pending])t.pending.delete(n);await cs(i);return}}if(t.pending.size>0)try{let A=await(await fetch(M.url`_prasi/comp`,{method:"POST",body:JSON.stringify({ids:[...t.pending]})})).blob(),i=JSON.parse(await(await dn(A)).text());for(let[n,r]of Object.entries(i))t.pending.delete(n),t.list[n]=r,await mA(`comp-${n}`,r,nA);await cs(Object.values(i))}catch{}},FB=e=>{let t=M.comp;if(e.type==="item"){let A=e.component?.id;if(A){!t.list[A]&&!t.pending.has(A)&&t.pending.add(A);for(let i of Object.values(e.component?.props||{}))i.content&&i.meta?.type==="content-element"&&FB(i.content)}}if(e.childs)for(let A of e.childs)A&&A.type!=="text"&&FB(A)};var Gy=e=>new Promise(async t=>{let A=!1,i=await EA(`page-${e}`,nA);i&&(t(i),A=!0);let n=await(await fetch(M.url`_prasi/page/${e}`)).blob(),r=JSON.parse(await(await dn(n)).text());mA(`page-${e}`,{id:e,url:r.url,root:r.root},nA),A||t(r)}),CN=e=>new Promise(async t=>{let A={},i=[...new Set(e)],n=!0;for(let s of i){let I=await EA(`page-${s}`,nA);if(I)A[s]=I;else{n=!1;break}}n&&t(A);let r=await(await fetch(M.url`_prasi/pages`,{method:"POST",body:JSON.stringify({ids:i})})).blob(),o=JSON.parse(await(await dn(r)).text());for(let[s,I]of Object.entries(o))mA(`page-${s}`,I,nA);n||t(o)}),Hy=async e=>{let t=e.map(A=>M.route.router?.lookup(A)).filter(A=>A&&A.id);return await CN(t.map(A=>A?.id))};var vy=R(My()),Jy=()=>{let e=M;if(e.site.id){if(!e.mode&&e.site.responsive)if(e.site.responsive!=="mobile-only"&&e.site.responsive!=="desktop-only"){let t=(0,vy.default)();e.mode=t.device.type==="mobile"?"mobile":"desktop"}else e.site.responsive==="mobile-only"?e.mode="mobile":e.site.responsive==="desktop-only"&&(e.mode="desktop");localStorage.getItem("prasi-editor-mode")&&(e.mode=localStorage.getItem("prasi-editor-mode"))}};var hN=()=>new Promise(async e=>{let t=!1,A=await EA("route",nA);A&&(e(A),t=!0);let i=await(await fetch(M.url`_prasi/route`)).blob(),r=await dn(i),o=JSON.parse(await r.text());await mA("route",o,nA),t||e(o)}),qy=async()=>{let e=fr();try{let t=await hN();if(t&&t.site&&t.urls){t.layout&&(M.layout.id=t.layout.id,M.layout.root=t.layout.root,M.layout.meta={},M.layout.root&&nc(M.layout.meta,M.layout.root)),M.site=t.site,M.site.code={mode:"new"},await pN(),M.site.api=Cr(M.site.api_url),M.site.db=hr(M.site.api_url);let A=window;A.serverurl=M.site.api_url,A.db=M.site.db,A.api=M.site.api;for(let i of t.urls)e.insert(i.url,i)}}catch{}return e},pN=()=>new Promise(e=>{let t=document,A=t.createElement("script");A.onload=async()=>{e()};let i=M.site.api_url;localStorage.getItem("api-ts-"+i)||localStorage.setItem("api-ts-"+i,Date.now().toString());let n=localStorage.getItem("api-ts-"+i);A.src=`${i}/_prasi/load.js?url=${i}&v3&ts=${n}`,document.querySelector(`script[src="${A.src}"]`)?e():t.body.appendChild(A)}),nc=(e,t)=>{for(let A of t.childs)Nt({comps:M.comp.list,meta:e,mode:"page"},{item:A})};var Qn=window;var _A=R(Ie()),Ky=()=>{let[e,t]=(0,Ry.useState)({}),A=()=>t({});Qn.prasiContext.render=A;let i=Jl.Provider;if(M.route.status!=="ready")return M.route.status==="init"&&(M.route.status="loading",qy().then(async s=>{Jy(),M.route.status="ready",M.route.router=s;let I=Ta(await(await fetch(`${Qn._prasi.basepath}/_prasi/code/index.js`.replace("//","/"))).text());if(I)for(let[a,c]of Object.entries(I))window[a]=c;A()})),(0,_A.jsx)(Pi,{note:"Loading router"});let n=M.route.router;if(!n)return(0,_A.jsx)(Kl,{children:"Failed to create Router"});let r=n.lookup(M.pathname);if(!r)return(0,_A.jsx)(Kl,{children:"Page Not Found"});Qn.params=r.params||{},M.page.id=r.id,M.page.url=r.url;let o=M.page.cache[r.id];if(o)M.page.root=o.root,M.page.meta=o.meta;else return Gy(r.id).then(async({root:s})=>{let I={id:r.id,url:r.url,root:s,meta:{}};await cs(s.childs),nc(I.meta,s),M.page.cache[I.id]=I,A()}).catch(()=>{A()}),(0,_A.jsx)(Pi,{note:"Loading page"});return(0,_A.jsx)(i,{value:Qn.prasiContext,children:(0,_A.jsx)("div",{className:cx("relative flex flex-1 items-center justify-center"),children:(0,_A.jsx)("div",{className:cx("absolute flex flex-col items-stretch flex-1 bg-white main-content-preview",M.mode==="mobile"?css` @media (min-width: 768px) { border-left: 1px solid #ccc; border-right: 1px solid #ccc; diff --git a/app/web/src/nova/prod/base/base.tsx b/app/web/src/nova/prod/base/base.tsx index 5f9bf7b8..bcc0ff3c 100644 --- a/app/web/src/nova/prod/base/base.tsx +++ b/app/web/src/nova/prod/base/base.tsx @@ -23,7 +23,9 @@ export const base = { } }, get pathname() { - return location.pathname.substring(base.root.pathname.length); + const res = location.pathname.substring(base.root.pathname.length); + if (!res.startsWith("/")) return `/${res}`; + return res; }, site: { id: w._prasi?.site_id } as { id: string; diff --git a/app/web/src/nova/prod/root.tsx b/app/web/src/nova/prod/root.tsx index b6e4193d..071dd4c5 100644 --- a/app/web/src/nova/prod/root.tsx +++ b/app/web/src/nova/prod/root.tsx @@ -55,7 +55,7 @@ export const Root = () => { const page = router.lookup(base.pathname); if (!page) return Page Not Found; - w.params = page.params; + w.params = page.params || {}; base.page.id = page.id; base.page.url = page.url; diff --git a/dockerzip b/dockerzip index 4bbf8af58dd7cf98f4eee4724d714911f71a83fb..8d1e739095a7e11069a18e9324f4f1592c16ec27 100644 GIT binary patch delta 614 zcmX@0azKSQz?+$civa|Tjr}L`O0j?RKAQ@}6AMH*5#ru*2yrQ9kjh>yn8?O`Q7j;# z$1LOP8H(b{$*0&A5fTss_&Ic8LO=(|Pfp@c0h`gup#T$yx%DiE4oqkh zrv$_*X)aZm7))6Tmmy4O@*J+qVAG1Ym0)6p73FsW5kbYP7l8(ik|EI`WWVF2w0=2X%*1JP;*tl Z3Pp{fpfQG;HbHv~vFCyYU@<8nH2~R3$)f-O delta 614 zcmX@0azKSQz?+$civa{4RryWim157RIFky*6AMH*5#ru*2yrQ9kjh>yn8?O`Q7j;# z$1LOP8H(b{$*0&A5fTss_&Ic8LO=(|Pfp@c0h`gup#T$yx%DiE4oqkh zrv$_*X)aZm7))6Tmmy4O@*J+qVAG1Ym0)6p73FsW5kbYP7l8(ik|EI`WWVF2w0=2X%*1JP;*tl Z3Pp{fpfQG;HbHv~vFCyYU@<8nH2__~)&Kwi diff --git a/pkgs/core/build-prod.ts b/pkgs/core/build-core.ts similarity index 91% rename from pkgs/core/build-prod.ts rename to pkgs/core/build-core.ts index d9a572be..18e7821a 100644 --- a/pkgs/core/build-prod.ts +++ b/pkgs/core/build-core.ts @@ -5,7 +5,7 @@ const ctx = await context({ bundle: true, absWorkingDir: dir.path(""), entryPoints: [dir.path("app/web/src/nova/prod/main.tsx")], - outdir: dir.path(`/app/srv/prod`), + outdir: dir.path(`/app/srv/core`), splitting: true, format: "esm", jsx: "transform", diff --git a/pkgs/core/index.ts b/pkgs/core/index.ts index 11927882..f39bb8e2 100644 --- a/pkgs/core/index.ts +++ b/pkgs/core/index.ts @@ -71,6 +71,8 @@ if (!g.apiPrepared) { } } +if (g.mode === "dev") await import("./build-core"); + if (!g.parcel) { await parcelBuild(); } diff --git a/pkgs/docker-prep.ts b/pkgs/docker-prep.ts index cd238283..7590a559 100644 --- a/pkgs/docker-prep.ts +++ b/pkgs/docker-prep.ts @@ -34,8 +34,6 @@ if (!g.dockerPrepared) { }, }; - await import("./core/build-prod"); - if (!(await existsAsync(dir.path("_tmp_docker")))) { for (const file of Object.keys(dir.read(dir.path``))) { if (