diff --git a/app/srv/api/parse-js.ts b/app/srv/api/parse-js.ts new file mode 100644 index 00000000..9bfe4d52 --- /dev/null +++ b/app/srv/api/parse-js.ts @@ -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"; + } +} \ No newline at end of file diff --git a/app/srv/core/main.js b/app/srv/core/main.js index 51fc0fa2..586f831c 100644 --- a/app/srv/core/main.js +++ b/app/srv/core/main.js @@ -42,7 +42,7 @@ ${d}`),f.pop(),`{${D}}`}case"number":return isFinite(g)?String(g):t?t(g):"null"; `):" "+ew(r[0]):"as no adapter specified";throw new j("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return i},adapters:oB};function sB(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ki(null,e)}function wc(e){return sB(e),e.headers=ft.from(e.headers),e.data=ks.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),yc.getAdapter(e.adapter||xr.adapter)(e).then(function(i){return sB(e),i.data=ks.call(e,e.transformResponse,i),i.headers=ft.from(i.headers),i},function(i){return Ss(i)||(sB(e),i&&i.response&&(i.response.data=ks.call(e,e.transformResponse,i.response),i.response.headers=ft.from(i.response.headers))),Promise.reject(i)})}var tw=e=>e instanceof ft?e.toJSON():e;function $A(e,t){t=t||{};let A={};function i(c,I,l){return w.isPlainObject(c)&&w.isPlainObject(I)?w.merge.call({caseless:l},c,I):w.isPlainObject(I)?w.merge({},I):w.isArray(I)?I.slice():I}function n(c,I,l){if(w.isUndefined(I)){if(!w.isUndefined(c))return i(void 0,c,l)}else return i(c,I,l)}function r(c,I){if(!w.isUndefined(I))return i(void 0,I)}function o(c,I){if(w.isUndefined(I)){if(!w.isUndefined(c))return i(void 0,c)}else return i(void 0,I)}function s(c,I,l){if(l in t)return i(c,I);if(l in e)return i(void 0,c)}let a={url:r,method:r,data:r,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(c,I)=>n(tw(c),tw(I),!0)};return w.forEach(Object.keys(Object.assign({},e,t)),function(I){let l=a[I]||n,u=l(e[I],t[I],I);w.isUndefined(u)&&l!==s||(A[I]=u)}),A}var Fc="1.6.7";var aB={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{aB[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}});var Aw={};aB.transitional=function(t,A,i){function n(r,o){return"[Axios v"+Fc+"] Transitional option '"+r+"'"+o+(i?". "+i:"")}return(r,o,s)=>{if(t===!1)throw new j(n(o," has been removed"+(A?" in "+A:"")),j.ERR_DEPRECATED);return A&&!Aw[o]&&(Aw[o]=!0,console.warn(n(o," has been deprecated since v"+A+" and will be removed in the near future"))),t?t(r,o,s):!0}};function wx(e,t,A){if(typeof e!="object")throw new j("options must be an object",j.ERR_BAD_OPTION_VALUE);let i=Object.keys(e),n=i.length;for(;n-- >0;){let r=i[n],o=t[r];if(o){let s=e[r],a=s===void 0||o(s,r,e);if(a!==!0)throw new j("option "+r+" must be "+a,j.ERR_BAD_OPTION_VALUE);continue}if(A!==!0)throw new j("Unknown option "+r,j.ERR_BAD_OPTION)}}var Dc={assertOptions:wx,validators:aB};var bi=Dc.validators,Hr=class{constructor(t){this.defaults=t,this.interceptors={request:new Wf,response:new Wf}}async request(t,A){try{return await this._request(t,A)}catch(i){if(i instanceof Error){let n;Error.captureStackTrace?Error.captureStackTrace(n={}):n=new Error;let r=n.stack?n.stack.replace(/^.+\n/,""):"";i.stack?r&&!String(i.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(i.stack+=` `+r):i.stack=r}throw i}}_request(t,A){typeof t=="string"?(A=A||{},A.url=t):A=t||{},A=$A(this.defaults,A);let{transitional:i,paramsSerializer:n,headers:r}=A;i!==void 0&&Dc.assertOptions(i,{silentJSONParsing:bi.transitional(bi.boolean),forcedJSONParsing:bi.transitional(bi.boolean),clarifyTimeoutError:bi.transitional(bi.boolean)},!1),n!=null&&(w.isFunction(n)?A.paramsSerializer={serialize:n}:Dc.assertOptions(n,{encode:bi.function,serialize:bi.function},!0)),A.method=(A.method||this.defaults.method||"get").toLowerCase();let o=r&&w.merge(r.common,r[A.method]);r&&w.forEach(["delete","get","head","post","put","patch","common"],f=>{delete r[f]}),A.headers=ft.concat(o,r);let s=[],a=!0;this.interceptors.request.forEach(function(Q){typeof Q.runWhen=="function"&&Q.runWhen(A)===!1||(a=a&&Q.synchronous,s.unshift(Q.fulfilled,Q.rejected))});let c=[];this.interceptors.response.forEach(function(Q){c.push(Q.fulfilled,Q.rejected)});let I,l=0,u;if(!a){let f=[wc.bind(this),void 0];for(f.unshift.apply(f,s),f.push.apply(f,c),u=f.length,I=Promise.resolve(A);l{if(!i._listeners)return;let r=i._listeners.length;for(;r-- >0;)i._listeners[r](n);i._listeners=null}),this.promise.then=n=>{let r,o=new Promise(s=>{i.subscribe(s),r=s}).then(n);return o.cancel=function(){i.unsubscribe(r)},o},t(function(r,o,s){i.reason||(i.reason=new Ki(r,o,s),A(i.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 A=this._listeners.indexOf(t);A!==-1&&this._listeners.splice(A,1)}static source(){let t;return{token:new e(function(n){t=n}),cancel:t}}},iw=IB;function cB(e){return function(A){return e.apply(null,A)}}function lB(e){return w.isObject(e)&&e.isAxiosError===!0}var gB={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(gB).forEach(([e,t])=>{gB[t]=e});var nw=gB;function rw(e){let t=new Ns(e),A=ms(Ns.prototype.request,t);return w.extend(A,Ns.prototype,t,{allOwnKeys:!0}),w.extend(A,t,null,{allOwnKeys:!0}),A.create=function(n){return rw($A(e,n))},A}var He=rw(xr);He.Axios=Ns;He.CanceledError=Ki;He.CancelToken=iw;He.isCancel=Ss;He.VERSION=Fc;He.toFormData=qi;He.AxiosError=j;He.Cancel=He.CanceledError;He.all=function(t){return Promise.all(t)};He.spread=cB;He.isAxiosError=lB;He.mergeConfig=$A;He.AxiosHeaders=ft;He.formToJSON=e=>Ec(w.isHTMLForm(e)?new FormData(e):e);He.getAdapter=yc.getAdapter;He.HttpStatusCode=nw;He.default=He;var kc=He;var{Axios:K1,AxiosError:b1,CanceledError:O1,isCancel:L1,CancelToken:Y1,VERSION:P1,all:V1,Cancel:z1,isAxiosError:_1,spread:T1,toFormData:X1,AxiosHeaders:Z1,HttpStatusCode:W1,formToJSON:j1,getAdapter:$1,mergeConfig:eq}=kc;BigInt.prototype.toJSON=function(){return"BigInt::"+this.toString()};var Fx=typeof window<"u"?window:null,Mr=async(e,t,A)=>{let i={...A},n=null,r=!1,o=null,s=[];if(Array.isArray(t))for(let c of t)c instanceof File&&(s.push(c),r=!0),typeof c=="function"&&(o=c);else t instanceof File&&(r=!0,s.push(t));if(!r)n=JSON.stringify(t),i["content-type"]="aplication/json";else{let c=new FormData;for(let I of s)c.append(I.name,I);n=c,delete i["content-type"],i.enctype="multipart/form-data;"}let a=new URL(e);if(Fx!==null){let c=new URL(location.href),I="";if(a.host===c.host?I=a.toString():I=`${c.protocol}//${c.host}/_proxy/${encodeURIComponent(a.toString())}`,I){if(o)return(await kc({method:t?"post":void 0,url:I,data:n,onUploadProgress:o})).data;{let u=await(await fetch(I,t?{method:"POST",body:n,headers:i}:void 0)).text();try{return JSON.parse(u,Dx)}catch{return u}}}}return null},Dx=(e,t)=>typeof t=="string"&&t.startsWith("BigInt::")?BigInt(t.substring(8)):t;var yw=K(mw());var vr=async(e,t)=>{let A=(0,yw.default)(e,"/"),i=await Mr(AG(A,"/_prasi/_")),n="";i&&i.prasi&&(n=i.prasi);let r=tG(A);if(n==="v2")await new Promise(o=>{let s=document,a=s.createElement("script");a.onload=async()=>{o()},localStorage.getItem("api-ts-"+A)||localStorage.setItem("api-ts-"+A,Date.now().toString());let c=localStorage.getItem("api-ts-"+A);t?a.src=`${r}/_prasi/load.js?url=${A}&v3&dev=1&ts=${c}`:a.src=`${r}/_prasi/load.js?url=${A}&v3&ts=${c}`,document.querySelector(`script[src="${a.src}"]`)?o():s.body.appendChild(a)});else{let o=await fetch(r+"/_prasi/api-entry");if(Ce.prasiApi[A]={apiEntry:(await o.json()).srv},t){let s=await fetch(r+"/_prasi/api-types");Ce.prasiApi[A].apiTypes=await s.text(),Ce.prasiApi[A].prismaTypes={"prisma.d.ts":await dB(`${r}/_prasi/prisma/index.d.ts`),"runtime/index.d.ts":await dB(`${r}/_prasi/prisma/runtime/index.d.ts`),"runtime/library.d.ts":await dB(`${r}/_prasi/prisma/runtime/library.d.ts`)}}}},tG=e=>{let t=new URL(e);return`${t.protocol}//${t.host}`},AG=(e,t)=>{let A=new URL(e);return A.pathname=t,A.toString()},dB=async(e,t)=>await(await fetch(e)).text();var xs={},Fn=e=>{Ce.prasiApi||(Ce.prasiApi={});try{let t=new URL(e),A=`${t.protocol}//${t.host}`;return Ce.prasiApi[A]||xs[A]||(xs[A]=vr(A,location.hostname.includes("prasi"))),new Proxy({},{get:(i,n)=>{if(n==="_url")return(o,s)=>{let a=new URL(A);a.pathname=o.split("/").filter(l=>l).join("/");let c=new URL(location.href),I="";return a.host===c.host||s===!1?I=a.toString():I=`${c.protocol}//${c.host}/_proxy/${encodeURIComponent(a.toString())}`,I};let r=o=>function(...s){return new Promise(async(a,c)=>{try{let I=Ce.prasiApi[A];if(!I&&xs&&typeof xs[A]=="object"&&(await xs[A],I=Ce.prasiApi[A]),I){if(o==="_raw"){let g=s[0],f=`${A}${g}`,Q=await ww(f,s.slice(1));a(Q);return}if(I.apiEntry||(I.apiEntry={}),I.apiEntry&&!I.apiEntry[o]){c(`API ${o.toString()} not found, existing API: - ${Object.keys(I.apiEntry||{}).join(` - - `)}`);return}let l=I.apiEntry[o].url,u=I.apiEntry[o].args;if(l&&u){if(s.length>0&&u.length>0)for(let[Q,k]of Object.entries(s)){let d=u[parseInt(Q)];u&&u.includes(d)&&k&&typeof k!="string"&&typeof k!="number"||(l=l.replace(`:${d}?`,k+""),l=l.replace(`:${d}`,k+""))}let g=`${A}${l}`,f=await ww(g,s);a(f)}else console.error(`API Not Found: ${o.toString()}`)}else c("Failed to load API: "+A)}catch(I){c(I)}})};return n==="then"?new Proxy({},{get:(o,s)=>r(s)}):r(n)}})}catch{return null}},ww=async(e,t)=>await Mr(e,t,{"content-type":"application/json"});var Sw=K(kw());var Dn=e=>{let t="";return new Proxy({},{get(A,i){return i==="_tables"?()=>Uc({name:t,action:"definition",table:"*"},e):i==="_definition"?n=>Uc({name:t,action:"definition",table:n},e):i.startsWith("$")?(...n)=>Uc({name:t,action:"query",table:i,params:n},e):new Proxy({},{get(n,r){return async(...o)=>(i==="query"&&(i=r,r="query"),await Uc({name:t,action:r,table:i,params:o},e))}})}})},Sc={},Uc=async(e,t)=>{let A=new URL(t);A.pathname="/_dbs",e.table&&(A.pathname+=`/${e.table}`);let i=A.toString(),n=(0,Sw.default)(e),r=Sc[n];if(!r||r&&Date.now()-r.timestamp>1e3){Sc[n]={timestamp:Date.now(),promise:Mr(i,e,{"content-type":"application/json"}),result:null};let o=await Sc[n].promise;return Sc[n].result=o,o}return await r.promise};function sG(e){let t=document.createElement("a");return t.setAttribute("href",e),t.cloneNode(!1).href}function aG(e){return e?new Promise((t,A)=>{let i="$importModule$"+Math.random().toString(32).slice(2),n=document.createElement("script"),r=()=>{delete window[i],n.onerror=null,n.onload=null,n.remove(),URL.revokeObjectURL(n.src),n.src=""};n.defer=!0,n.type="module",n.onerror=()=>{A(new Error(`Failed to import: ${e}`)),r()},n.onload=()=>{t(window[i]),r()};let s=`import * as m from "${Ce.basehost?Ce.basehost+e:sG(e)}"; window.${i} = m;`,a=new Blob([s],{type:"text/javascript"});n.src=URL.createObjectURL(a),document.head.appendChild(n)}):""}var Nc=aG;var Rr=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var xc=async e=>{let t=window;t.exports||(t.exports={});let A=await _db.site.findFirst({where:{id:e.site.id},include:{component_site:!0}});if(A){if(A.component_site)for(let o of A.component_site){let s=`/npm/site/${o.id_site}/site.js`;await Nc(s)}let i=e.site.api_url;if(i||(i=(A.config||{}).api_url||""),!i)return;try{let o=new URL(i);if(i&&o.hostname)try{await vr(i,!0)}catch{console.warn("Failed to load API:",i)}}catch{}let n=`/npm/site/${e.site.id}/site.js`;await Nc(n),e.site.db.get()||e.site.db.set(Dn(i)),e.site.api.get()||e.site.api.set(Fn(i));let r=window;if(A.js_compiled){let o=A.config,s=(c,I)=>(o.api_url&&!I.api&&(I.api=e.site.api.get(),I.db=e.site.db.get()),I.params=r.params,I.module={},new Function(...Object.keys(I),c)(...Object.values(I))),a={...Rr({site:e.site,mode:e.mode}),types:{},exports:r.exports,load:Nc,render:e.render,module:{exports:{}}};if(await s(A.js_compiled,a),a.module.exports)for(let[c,I]of Object.entries(a.module.exports))r.exports[c]=I}}};var Uw=(e,t=0)=>{let A=3735928559^t,i=1103547991^t;for(let n=0,r;n>>16,2246822507),A^=Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507),i^=Math.imul(A^A>>>13,3266489909),4294967296*(2097151&i)+(A>>>0)};var IG=new TextEncoder,xw=async e=>{let t=e.site.config.api_url;try{let A=new URL(t);if(t&&A.hostname){await vr(t,!0);let i=Ce.prasiApi[t];if(i&&i.apiTypes&&i.prismaTypes){let n=JSON.stringify({api:i.apiTypes,prisma:i.prismaTypes}),r=Uw(n),o=await e.sync?.code.action({type:"check-typings",site_id:e.site.id,hash:r});if(o?.type==="check-typings"&&!o.hash){let s=Buffer.from(rA(IG.encode(n)));e.sync?.code.action({type:"push-typings",site_id:e.site.id,body:s,hash:r})}}e.script.db||(e.script.db=Dn(t)),e.script.api||(e.script.api=Fn(t))}}catch{console.warn("Failed to load API:",t)}if(e.site.code.snapshot)for(let[A,i]of Object.entries(e.site.code.snapshot)){let n=new Y.Doc;Y.applyUpdate(n,Et(i.bin)),e.code[A]={doc:n};let r=e.code[A].doc;if(r){let o=r.getMap("map").get("files")?.get("index.js");Nw(e,o),IA(e),e.render(),r.on("update",(s,a)=>{let c=r.getMap("map").get("files")?.get("index.js");Nw(e,c),IA(e),e.render()})}}},Nw=(e,t)=>{if(t){let A=window;e.site.config.api_url&&(A.db=Dn(e.site.config.api_url),A.api=Fn(e.site.config.api_url));let i=Gc(t);if(e.global_prop=Object.keys(i),typeof i=="object")for(let[n,r]of Object.entries(i))A[n]=r}};var CB=async(e,t,A)=>{e.site=t,!e.script.db&&!e.script.api&&(e.site.code.mode==="old"?await xc({mode:e.mode,site:{api_url:e.site.config.api_url,id:e.site.id,api:{get(){return e.script.api},set(i){e.script.api=i}},db:{get(){return e.script.db},set(i){e.script.db=i}}},render:()=>{}}):await xw(e))};var Gw=async(e,t,A,i)=>{if(!e.sync)return;e.status="reload";let n=await e.sync.page.load(t);if(!n){e.status="page-not-found",e.render();return}if(n.comps)for(let[r,o]of Object.entries(n.comps))o&&o.snapshot&&await uc(e,r,o.snapshot);if(e.page.cur=n,n.snapshot){let r=new Y.Doc;Y.applyUpdate(r,Et(n.snapshot));let o=e.page.list[n.id];o||(e.page.list[n.id]={},o=e.page.list[n.id]),o.on_update&&o.doc&&o.doc.off("update",o.on_update),o.on_update=async(s,a)=>{if(a==="local"||!e.sync)return;if(o.page.id!==n.id){alert(`Page ID Mismatch! + - `)}`);return}let l=I.apiEntry[o].url,u=I.apiEntry[o].args;if(l&&u){if(s.length>0&&u.length>0)for(let[Q,k]of Object.entries(s)){let d=u[parseInt(Q)];u&&u.includes(d)&&k&&typeof k!="string"&&typeof k!="number"||(l=l.replace(`:${d}?`,k+""),l=l.replace(`:${d}`,k+""))}let g=`${A}${l}`,f=await ww(g,s);a(f)}else console.error(`API Not Found: ${o.toString()}`)}else c("Failed to load API [Proxy]: "+A)}catch(I){c(I)}})};return n==="then"?new Proxy({},{get:(o,s)=>r(s)}):r(n)}})}catch{return null}},ww=async(e,t)=>await Mr(e,t,{"content-type":"application/json"});var Sw=K(kw());var Dn=e=>{let t="";return new Proxy({},{get(A,i){return i==="_tables"?()=>Uc({name:t,action:"definition",table:"*"},e):i==="_definition"?n=>Uc({name:t,action:"definition",table:n},e):i.startsWith("$")?(...n)=>Uc({name:t,action:"query",table:i,params:n},e):new Proxy({},{get(n,r){return async(...o)=>(i==="query"&&(i=r,r="query"),await Uc({name:t,action:r,table:i,params:o},e))}})}})},Sc={},Uc=async(e,t)=>{let A=new URL(t);A.pathname="/_dbs",e.table&&(A.pathname+=`/${e.table}`);let i=A.toString(),n=(0,Sw.default)(e),r=Sc[n];if(!r||r&&Date.now()-r.timestamp>1e3){Sc[n]={timestamp:Date.now(),promise:Mr(i,e,{"content-type":"application/json"}),result:null};let o=await Sc[n].promise;return Sc[n].result=o,o}return await r.promise};function sG(e){let t=document.createElement("a");return t.setAttribute("href",e),t.cloneNode(!1).href}function aG(e){return e?new Promise((t,A)=>{let i="$importModule$"+Math.random().toString(32).slice(2),n=document.createElement("script"),r=()=>{delete window[i],n.onerror=null,n.onload=null,n.remove(),URL.revokeObjectURL(n.src),n.src=""};n.defer=!0,n.type="module",n.onerror=()=>{A(new Error(`Failed to import: ${e}`)),r()},n.onload=()=>{t(window[i]),r()};let s=`import * as m from "${Ce.basehost?Ce.basehost+e:sG(e)}"; window.${i} = m;`,a=new Blob([s],{type:"text/javascript"});n.src=URL.createObjectURL(a),document.head.appendChild(n)}):""}var Nc=aG;var Rr=e=>({isMobile:e.mode==="mobile",isDesktop:e.mode==="desktop",isEditor:location.pathname.startsWith("/ed/")});var xc=async e=>{let t=window;t.exports||(t.exports={});let A=await _db.site.findFirst({where:{id:e.site.id},include:{component_site:!0}});if(A){if(A.component_site)for(let o of A.component_site){let s=`/npm/site/${o.id_site}/site.js`;await Nc(s)}let i=e.site.api_url;if(i||(i=(A.config||{}).api_url||""),!i)return;try{let o=new URL(i);if(i&&o.hostname)try{await vr(i,!0)}catch{console.warn("Failed to load API [Legacy]:",i)}}catch{}let n=`/npm/site/${e.site.id}/site.js`;await Nc(n),e.site.db.get()||e.site.db.set(Dn(i)),e.site.api.get()||e.site.api.set(Fn(i));let r=window;if(A.js_compiled){let o=A.config,s=(c,I)=>(o.api_url&&!I.api&&(I.api=e.site.api.get(),I.db=e.site.db.get()),I.params=r.params,I.module={},new Function(...Object.keys(I),c)(...Object.values(I))),a={...Rr({site:e.site,mode:e.mode}),types:{},exports:r.exports,load:Nc,render:e.render,module:{exports:{}}};if(await s(A.js_compiled,a),a.module.exports)for(let[c,I]of Object.entries(a.module.exports))r.exports[c]=I}}};var Uw=(e,t=0)=>{let A=3735928559^t,i=1103547991^t;for(let n=0,r;n>>16,2246822507),A^=Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507),i^=Math.imul(A^A>>>13,3266489909),4294967296*(2097151&i)+(A>>>0)};var IG=new TextEncoder,xw=async e=>{let t=e.site.config.api_url;try{let A=new URL(t);if(t&&A.hostname){await vr(t,!0);let i=Ce.prasiApi[t];if(i&&i.apiTypes&&i.prismaTypes){let n=JSON.stringify({api:i.apiTypes,prisma:i.prismaTypes}),r=Uw(n),o=await e.sync?.code.action({type:"check-typings",site_id:e.site.id,hash:r});if(o?.type==="check-typings"&&!o.hash){let s=Buffer.from(rA(IG.encode(n)));e.sync?.code.action({type:"push-typings",site_id:e.site.id,body:s,hash:r})}}e.script.db||(e.script.db=Dn(t)),e.script.api||(e.script.api=Fn(t))}}catch(A){A&&!A.message.toLowerCase().includes("invalid url")&&console.warn("Failed to load API [Snapshot]:",t)}if(e.site.code.snapshot)for(let[A,i]of Object.entries(e.site.code.snapshot)){let n=new Y.Doc;Y.applyUpdate(n,Et(i.bin)),e.code[A]={doc:n};let r=e.code[A].doc;if(r){let o=r.getMap("map").get("files")?.get("index.js");Nw(e,o),IA(e),e.render(),r.on("update",(s,a)=>{let c=r.getMap("map").get("files")?.get("index.js");Nw(e,c),IA(e),e.render()})}}},Nw=(e,t)=>{if(t){let A=window;e.site.config.api_url&&(A.db=Dn(e.site.config.api_url),A.api=Fn(e.site.config.api_url));let i=Gc(t);if(e.global_prop=Object.keys(i),typeof i=="object")for(let[n,r]of Object.entries(i))A[n]=r}};var CB=async(e,t,A)=>{e.site=t,!e.script.db&&!e.script.api&&(e.site.code.mode==="old"?await xc({mode:e.mode,site:{api_url:e.site.config.api_url,id:e.site.id,api:{get(){return e.script.api},set(i){e.script.api=i}},db:{get(){return e.script.db},set(i){e.script.db=i}}},render:()=>{}}):await xw(e))};var Gw=async(e,t,A,i)=>{if(!e.sync)return;e.status="reload";let n=await e.sync.page.load(t);if(!n){e.status="page-not-found",e.render();return}if(n.comps)for(let[r,o]of Object.entries(n.comps))o&&o.snapshot&&await uc(e,r,o.snapshot);if(e.page.cur=n,n.snapshot){let r=new Y.Doc;Y.applyUpdate(r,Et(n.snapshot));let o=e.page.list[n.id];o||(e.page.list[n.id]={},o=e.page.list[n.id]),o.on_update&&o.doc&&o.doc.off("update",o.on_update),o.on_update=async(s,a)=>{if(a==="local"||!e.sync)return;if(o.page.id!==n.id){alert(`Page ID Mismatch! Refreshing to preventing data loss...`),location.reload();return}let c=await e.sync.yjs.sv_local("page",e.page.cur.id,Buffer.from(rA(s)));if(c){let I=Y.encodeStateAsUpdate(r,Et(c.sv));Y.applyUpdate(r,Et(c.diff),"local"),Ic()||await IA(e,{note:A+" page-on-update"}),await e.sync.yjs.diff_local("page",e.page.cur.id,Buffer.from(rA(I))),e.ui.syncing=!1,e.page.entry=r.getMap("map").get("root")?.get("childs")?.map(l=>l.get("id")),nc.should_render_main&&e.render()}},r.on("update",o.on_update),e.page.doc=r,e.page.doc&&(o.page=e.page.cur,o.doc=e.page.doc,e.page.entry=e.page.doc.getMap("map").get("root")?.get("childs")?.map(s=>s.get("id")),Array.isArray(e.page.entry)||e.sync.code.action({type:"flush-page-cache",page_id:t}).then(()=>{location.reload()})),e.page.doc&&await IA(e,{note:A+" page-init"})}e.status="ready",i!==!1&&e.render()};var Hw=K(ce()),cG=new TextDecoder,kn={list:[],route:null},lG=e=>{let t=JSON.parse(localStorage.getItem("prasi-session")||"null");if(!t&&location.pathname.startsWith("/ed/"))return location.href="/login",(0,Hw.jsx)(rn,{note:"logging in"});if(t?.data?.user?(e.user.id=t.data.user.id,e.user.username=t.data.user.username):(e.user.id="ab1390f5-40d5-448e-a8c3-84b0fb600930",e.user.username="anonymous"),location.pathname.startsWith("/vi/")){if(kn.list.length===0){_db.page.findMany({where:{id_site:params.site_id,is_deleted:!1,is_default_layout:!1},select:{id:!0,url:!0}}).then(n=>{kn.list=n,lG(e)});return}if(!kn.route){kn.route=Sr();for(let n of kn.list)kn.route.insert(n.url,n)}let i="/"+location.pathname.split("/").slice(3).join("/");if(!params.page_id){let n=kn.route.lookup(i);if(n&&(params.page_id=n.id,n.params))for(let[r,o]of Object.entries(n.params))["site_id","page_id"].includes(r)||(params[r]=o)}}if(!params.page_id&&location.pathname.startsWith("/ed"))return(async()=>{let A=await _db.page.findFirst({where:{is_deleted:!1,is_default_layout:!1,site:params.site_id?{id:params.site_id}:{org:{org_user:{some:{id_user:e.user.id}}}},name:{contains:"root",mode:"insensitive"}},select:{id:!0,id_site:!0},orderBy:{site:{name:"asc"}}});if(A)location.href=`/ed/${A.id_site}/${A.id}`;else{let i=await _db.page.findFirst({where:{is_deleted:!1,is_default_layout:!1,site:params.site_id?{id:params.site_id}:{org:{org_user:{some:{id_user:e.user.id}}}},name:{contains:"home",mode:"insensitive"}},select:{id:!0,id_site:!0}});if(i)location.href=`/ed/${i.id_site}/${i.id}`;else{let n=await _db.page.findFirst({where:{is_deleted:!1,is_default_layout:!1,site:params.site_id?{id:params.site_id}:{org:{org_user:{some:{id_user:e.user.id}}}}},select:{id:!0,id_site:!0}});n&&(location.href=`/ed/${n.id_site}/${n.id}`)}}})(),!1;if(e.sync){if(e.site.id==="--loading--")return!1;if(params.site_id!==e.site.id)return e.site=hA(Yf),e.site.id="--loading--",e.ui.popup.code.init=!1,e.sync.site.load(params.site_id).then(async A=>{A?(await CB(e,A,"from-sync"),e.render()):(alert("Site not found. redirecting..."),location.href="/ed/")}),!1;if(!e.page.cur.id&&!params.page_id&¶ms.site_id&&location.pathname.startsWith("/ed/"))return _db.page.findFirst({where:{is_deleted:!1,is_default_layout:!1,id_site:params.site_id},select:{id:!0}}).then(A=>{A&&(location.href=`/ed/${params.site_id}/${A.id}`)}),!1}return!e.sync&&!e.sync_assigned?(e.sync_assigned=!0,ry({user_id:e.user.id,site_id:params.site_id,page_id:params.page_id,events:{opened(){Ce.offline?(console.log("reconnected!"),Ce.offline=!1,e.ui.syncing=!0,e.render()):(Ce.offline=!1,e.render())},shakehand(A){e.user.client_id=A},disconnected(){return console.log("offline, reconnecting..."),Ce.offline=!0,e.render(),{reconnect:!0}},async editor_start(A){params.site_id!==A.site_id||params.page_id!==A.page_id?e.page.cur.id||(e.site.id=A.site_id,e.page.cur.id=A.page_id,location.pathname.startsWith("/ed/")&&(location.href=`/ed/${A.site_id}/${A.page_id}`)):(e.site.id=A.site_id,e.page.cur.id=A.page_id,e.render())},site_updated(A){for(let[i,n]of Object.entries(A))i==="js"||i==="js_compiled"?e.site[i]=cG.decode(Et(n)):e.site[i]=n;e.render()},async remote_svlocal(A){let i=null;if(A.type==="page"&&e.page.cur.id===A.id?i=e.page.doc:A.type==="comp"&&e.comp.list[A.id]?i=e.comp.list[A.id].doc:A.type==="code"&&(i=e.code.site.doc),i&&e.sync){let n=RE(i,Et(A.sv_local)),r=KE(i),o=Buffer.from(rA(r)),s=Buffer.from(rA(n)),a=await e.sync.yjs.sv_remote(A.type,A.id,o,s);if(a){if(vE(i,Et(a.diff),"sv_remote"),A.type==="page")delete e.preview.meta_cache[A.id],await IA(e,{note:"sv_remote"});else if(A.type==="comp"){let c=await gc(e,i,A.id);c&&(e.comp.list[A.id].meta=c.meta,e.comp.list[A.id].tree=c.tree),await IA(e,{note:"sv_remote"})}e.render()}}}}}).then(A=>{e.sync=A}),!1):params.page_id!==e.page.cur.id&&location.pathname.startsWith("/ed")?(Gw(e,params.page_id,"change page"),!1):!0},Gc=src=>{if(src){let module={exports:{__esModule:!0}};eval(`try { ${src} } catch(e) { diff --git a/app/srv/ws/sync/actions/code_edit.ts b/app/srv/ws/sync/actions/code_edit.ts index 46f03020..31a0e0a9 100644 --- a/app/srv/ws/sync/actions/code_edit.ts +++ b/app/srv/ws/sync/actions/code_edit.ts @@ -61,7 +61,7 @@ export const code_edit: SAction["code"]["edit"] = async function ( }); } let adv = mitem.get("adv"); - const jscript = parseJs(adv?.get("js")) || false; + const jscript = parseJs(src) || false; doc?.transact(() => { if (!adv) { @@ -106,7 +106,10 @@ export const code_edit: SAction["code"]["edit"] = async function ( }, }); } + + return jscript } catch (e: any) { + console.log('e', e) return e.message.toString(); } } else { @@ -166,10 +169,10 @@ export const code_edit: SAction["code"]["edit"] = async function ( const res = prop_kind !== "typings" ? await transform(`return ${src}`, { - jsx: "transform", - format: "cjs", - loader: "tsx", - }) + jsx: "transform", + format: "cjs", + loader: "tsx", + }) : { code: src }; doc?.transact(() => { if (prop_kind === "value") { diff --git a/app/web/src/base/load/api/api-proxy.tsx b/app/web/src/base/load/api/api-proxy.tsx index 888406aa..df17b7db 100644 --- a/app/web/src/base/load/api/api-proxy.tsx +++ b/app/web/src/base/load/api/api-proxy.tsx @@ -124,7 +124,8 @@ export const apiProxy = (api_url: string) => { console.error(`API Not Found: ${actionName.toString()}`); } } else { - reject("Failed to load API: " + base_url); + + reject("Failed to load API [Proxy]: " + base_url); } } catch (e) { reject(e); diff --git a/app/web/src/nova/ed/panel/popup/script/monaco.tsx b/app/web/src/nova/ed/panel/popup/script/monaco.tsx index b2c7e161..d2fb9d54 100644 --- a/app/web/src/nova/ed/panel/popup/script/monaco.tsx +++ b/app/web/src/nova/ed/panel/popup/script/monaco.tsx @@ -9,14 +9,13 @@ import { jscript } from "../../../../../utils/script/jscript"; import { jsMount } from "../../../../../utils/script/mount"; import { monacoTypings } from "../../../../../utils/script/typings"; 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 { edMonacoDefaultVal } from "./default-val"; import { declareScope } from "./scope/scope"; // @ts-ignore import { FNCompDef } from "../../../../../utils/types/meta-fn"; -import { addScope } from "./scope/add-scope"; const scriptEdit = { timeout: null as any, @@ -100,6 +99,7 @@ export const EdScriptMonaco: FC<{}> = () => { if (p.ui.popup.script.mode === "js") { const w = window as any; const types: any = {}; + const values: any = {}; for (const prop_name of p.global_prop) { if (prop_name === "_types") continue; types[prop_name] = "any"; @@ -139,38 +139,6 @@ export const EdScriptMonaco: FC<{}> = () => { break; 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( val, "typescript", @@ -204,38 +172,15 @@ declare global { break; case "item": { - const { exports, imports } = declareScope(p, meta, monaco); - const im = imports[active.item_id]; - const im_src = []; + types._raw = declareScope(p, meta, monaco); - 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( - active_src, + val, "typescript", monaco.Uri.parse("file:///active.tsx") ); editor.setModel(model); 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) { const prop_name = meta.jsx_prop.name; @@ -271,7 +216,7 @@ declare global { monaco, { types, - values: {}, + values, } ); await jsMount(editor, monaco, p); diff --git a/app/web/src/nova/ed/panel/popup/script/scope/scope.tsx b/app/web/src/nova/ed/panel/popup/script/scope/scope.tsx index d218ac2f..a234e0b4 100644 --- a/app/web/src/nova/ed/panel/popup/script/scope/scope.tsx +++ b/app/web/src/nova/ed/panel/popup/script/scope/scope.tsx @@ -1,13 +1,11 @@ import type { OnMount } from "@monaco-editor/react"; import { IContent } from "../../../../../../utils/types/general"; import { IMeta, PG, active } from "../../../../logic/ed-global"; -import { extractExport } from "./extract-export"; type Monaco = Parameters[1]; export type MonacoEditor = Parameters[0]; export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => { - const vars: Record = {}; const metas = active.comp_id ? p.comp.list[active.comp_id]?.meta : p.page.meta; @@ -18,19 +16,6 @@ export const declareScope = (p: PG, meta: IMeta, monaco: Monaco) => { const paths: IMeta[][] = []; map_childs(monaco, p, metas, entry, paths); - const exports = {} as Record; - const extract_exports = {} as Record< - string, - ReturnType - >; - const imports = {} as Record< - string, - Record< - string, - { id: string; type: "prop" | "passprop" | "local" | "scope" } - > - >; - const cur_path = [] as IMeta[]; for (const path of paths) { 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 = {}; for (const m of cur_path) { - if (!exports[m.item.id]) { - extract_exports[m.item.id] = extractExport(p, m); - - for (const [k, v] of Object.entries(extract_exports[m.item.id])) { - let src = ""; - 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 (m !== meta) { + const script = m.item.script; + if (script) { + if (script.local) { + vars[script.local.name] = { mode: "local", val: script.local.value }; } } } - - if (prev_m && extract_exports[prev_m.item.id]) { - imports[m.item.id] = {}; - if (imports[prev_m.item.id]) { - for (const [k, v] of Object.entries(imports[prev_m.item.id])) { - imports[m.item.id][k] = v; - } - } - - for (const [k, v] of Object.entries(extract_exports[prev_m.item.id])) { - imports[m.item.id][k] = { id: v.id, type: v.type }; - } - } - prev_m = m; } - return { exports, imports, vars }; + const raw_types: string[] = []; + for (const [k, v] of Object.entries(vars)) { + if (v.mode === "local") { + raw_types.push(`\ +const \$\$_${k} = ${v.val}; +const ${k} = null as unknown as (typeof \$\$_${k} & { render: ()=> void }); +`); + } + } + + return raw_types.join("\n"); }; const map_childs = ( diff --git a/app/web/src/nova/ed/panel/popup/script/workbench.tsx b/app/web/src/nova/ed/panel/popup/script/workbench.tsx index e1b79531..09916d29 100644 --- a/app/web/src/nova/ed/panel/popup/script/workbench.tsx +++ b/app/web/src/nova/ed/panel/popup/script/workbench.tsx @@ -51,7 +51,7 @@ export const EdScriptWorkbench = () => { )} >
-
+ {/*
{ >
-
+
*/} {p.ui.popup.script.type === "prop-master" && } {p.ui.popup.script.type === "prop-instance" && ( diff --git a/app/web/src/nova/vi/load/load-legacy.tsx b/app/web/src/nova/vi/load/load-legacy.tsx index e503733c..8805d1bb 100644 --- a/app/web/src/nova/vi/load/load-legacy.tsx +++ b/app/web/src/nova/vi/load/load-legacy.tsx @@ -50,7 +50,7 @@ export const viLoadLegacy = async (vi: { try { await loadApiProxyDef(api_url, true); } catch (e) { - console.warn("Failed to load API:", api_url); + console.warn("Failed to load API [Legacy]:", api_url); } } } catch (e) {} diff --git a/app/web/src/nova/vi/load/load-snapshot.tsx b/app/web/src/nova/vi/load/load-snapshot.tsx index 275a26e3..aaaa5944 100644 --- a/app/web/src/nova/vi/load/load-snapshot.tsx +++ b/app/web/src/nova/vi/load/load-snapshot.tsx @@ -44,8 +44,10 @@ export const viLoadSnapshot = async (p: PG) => { if (!p.script.db) p.script.db = dbProxy(api_url); if (!p.script.api) p.script.api = apiProxy(api_url); } - } catch (e) { - console.warn("Failed to load API:", api_url); + } catch (e: any) { + if (e && !e.message.toLowerCase().includes("invalid url")) { + console.warn("Failed to load API [Snapshot]:", api_url); + } } if (p.site.code.snapshot) {