@blocklet/pages-kit-inner-components 0.4.124 → 0.4.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/chunks/{home-DMWxIeUw.js → home-q1dzT-BZ.js} +4 -4
- package/lib/cjs/chunks/{publish-button-B_2z7mDz.js → publish-button-CpLC1-Bd.js} +1 -1
- package/lib/cjs/chunks/{site-state-BMf96RZL.js → site-state-C5t-5c6U.js} +6 -6
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/home.js +1 -1
- package/lib/cjs/project-html.js +7 -7
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/chunks/{home-DIJ8xaUb.js → home-CSX7cAwr.js} +49 -49
- package/lib/es/chunks/{publish-button-LDqfGwdd.js → publish-button-B2tZwJP0.js} +1 -1
- package/lib/es/chunks/{site-state-kjir-UCL.js → site-state-BLNi12iP.js} +251 -252
- package/lib/es/components.js +1 -1
- package/lib/es/home.js +1 -1
- package/lib/es/project-html.js +160 -99
- package/lib/es/resources.js +1 -1
- package/lib/es/site-state.js +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const t=require("react/jsx-runtime"),_=require("./state-oc52fQ0j.js"),F=require("@arcblock/ux/lib/Locale/context"),ce=require("@arcblock/ux/lib/Result"),le=require("@blocklet/pages-kit/builtin/page/header"),ue=require("@blocklet/pages-kit/contexts/color"),K=require("@blocklet/pages-kit/utils/data-source"),de=require("@blocklet/ui-react/lib/Header"),Q=require("@emotion/css"),L=require("@emotion/react"),fe=require("@emotion/styled"),S=require("@mui/material"),
|
|
1
|
+
"use strict";const t=require("react/jsx-runtime"),_=require("./state-oc52fQ0j.js"),F=require("@arcblock/ux/lib/Locale/context"),ce=require("@arcblock/ux/lib/Result"),le=require("@blocklet/pages-kit/builtin/page/header"),ue=require("@blocklet/pages-kit/contexts/color"),K=require("@blocklet/pages-kit/utils/data-source"),de=require("@blocklet/ui-react/lib/Header"),Q=require("@emotion/css"),L=require("@emotion/react"),fe=require("@emotion/styled"),S=require("@mui/material"),V=require("ahooks"),ge=require("isomorphic-dompurify"),pe=require("lodash/cloneDeep"),me=require("lodash/isEmpty"),he=require("lodash/isEqual"),p=require("react"),xe=require("react-helmet"),w=require("react-router-dom"),X=require("react-use"),D=require("ufo"),q=require("./array-DOclwySd.js"),$=require("@arcblock/ux/lib/Theme"),je=require("@blocklet/ui-react/lib/Footer"),be=require("webfontloader"),ye=require("@arcblock/did-connect/lib/Session"),P=e=>e&&e.__esModule?e:{default:e},Y=P(ce),ve=P(de),Z=P(fe),we=P(ge),O=P(pe),Se=P(me),ee=P(he),Pe=P(je),ke=P(be),Re=$.styled(Pe.default,{shouldForwardProp:e=>!!e})`
|
|
2
2
|
& > div > .MuiContainer-root {
|
|
3
3
|
max-width: unset;
|
|
4
4
|
}
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
font-family: ${JSON.stringify(n??r)}, ${U};
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
`})}const{SessionProvider:Ue,SessionContext:Be,SessionConsumer:Ve,withSession:$e}=ye.createAuthServiceSessionContext();function
|
|
29
|
+
`})}const{SessionProvider:Ue,SessionContext:Be,SessionConsumer:Ve,withSession:$e}=ye.createAuthServiceSessionContext();function z(){return p.useContext(Be)}function Ie(...e){var o;const{session:n}=z();return e.includes((o=n.user)==null?void 0:o.role)}function Te(...e){var r;const{session:n}=z(),o=Ie(...e);return((r=window.blocklet)==null?void 0:r.tenantMode)==="multiple"?!!n.user:o}function De(){const[e]=w.useSearchParams(),{session:n}=z(),o=Te("owner","admin","pagesEditor","member"),r=p.useMemo(()=>{const s=e.get("mode");return q.STATE_MODES.includes(s)?s:"production"},[e]),a=r==="production"?r:n.user?o?r:"production":null;return a?t.jsx(ne,{mode:a}):null}function ne({mode:e}){if(e!=="draft"){const n=window.__PAGE_STATE__;return n?t.jsx(A,{mode:e,state:n}):t.jsx(Ne,{mode:e,children:({state:o})=>t.jsx(A,{mode:e,state:o})})}return t.jsx(He,{children:({state:n})=>t.jsx(A,{mode:e,state:n})})}const He=p.lazy(()=>Promise.resolve().then(()=>require("./draft-data-CRdesc3Z.js")));function Ne({mode:e,children:n}){const o=document.querySelector('meta[property="pages:version"]'),r=o==null?void 0:o.content,a=_.useProjectId(),s=p.useMemo(()=>{if(r==="{{pagesPublishedAt}}"){const c=localStorage.getItem(_.getProjectPageVersionKey(a??""));return Number(c)?Number(c):new Date().getTime()}return Number(r)},[r]),{loading:l,value:i}=X.useAsync(()=>q.getPages({mode:e,version:s}),[e,s]);return l?t.jsx(te,{}):i?n({state:i}):null}function A({mode:e,state:n}){const{t:o,locale:r}=F.useLocaleContext(),[a]=w.useSearchParams(),s=a.get("hiddenBadge")==="true",l=a.get("showPublish")==="true",{pageIds:i,pages:c,routeIds:m,routes:g,supportedLocales:d,config:{defaultLocale:x},resources:j}=n,b=_.getAllComponents(n),y=p.useMemo(()=>d!=null&&d.some(f=>f.locale===r)?r:void 0,[r,d]),h=Object.values(c).find(f=>(f==null?void 0:f.slug)==="/")?void 0:Object.values(c)[0],N=p.useMemo(()=>i.map(f=>{const u=c[f];return u&&{id:u.id,path:D.joinURL("/",y||"",u.slug,e!=="production"?`?mode=${e}`:"")}}).filter(q.nonNullable),[i,c,y,e]),k=([...f])=>(e!=="production"&&l&&f.unshift(t.jsx(p.Suspense,{fallback:t.jsx("div",{}),children:t.jsx(Le,{mode:"production",state:n})})),f);return t.jsxs(q.Provider,{value:{pages:N},children:[t.jsxs(w.Routes,{children:[h&&t.jsx(w.Route,{index:!0,element:t.jsx(w.Navigate,{to:D.joinURL("/",y||"",h.slug)})}),m==null?void 0:m.map(f=>{var M,E,B,I;const u=g==null?void 0:g[f];if(!u||!u.displayTemplateId)return null;const C=c[u.displayTemplateId];return C?t.jsx(w.Route,{path:D.joinURL(":projectIdOrSlug?",u.path),element:t.jsx(oe,{mode:e,components:b,page:C,locale:y,defaultLocale:x,headerAddons:k,state:n,pageData:(I=(B=(E=(M=u.dataSource)==null?void 0:M.pathDataMappings)==null?void 0:E[u.id])==null?void 0:B.dataCache)==null?void 0:I[y||x||"en"]})},u.id):null}),i.map(f=>{const u=c[f];return u?t.jsx(w.Route,{path:D.joinURL(":projectIdOrSlug?",u.slug),element:t.jsx(H,{mode:e,components:b,page:u,locale:y,defaultLocale:x,headerAddons:k})},u.id):null}),j.pages&&Object.values(j.pages).map(({blockletId:f,page:u})=>t.jsx(w.Route,{path:D.joinURL("/",`@${f}`,u.slug),element:t.jsx(H,{mode:e,components:b,page:u,locale:y,defaultLocale:x,headerAddons:k})},u.id)),t.jsx(w.Route,{path:"*",element:t.jsx(S.Box,{width:"100vw",height:"100vh",display:"flex",justifyContent:"center",alignItems:"center",children:t.jsx(Y.default,{status:404,extra:t.jsx(ae,{href:"/",children:o("common.back")})})})})]}),e!=="production"&&!s&&t.jsx(qe,{sx:{bgcolor:"info.light"},children:e}),t.jsx(Ee,{})]})}function oe({mode:e,pageData:n,components:o,page:r,locale:a,defaultLocale:s,headerAddons:l,state:i}){const c=V.useReactive({page:null});p.useEffect(()=>{const g=r||null;g?c.page=O.default(g):c.page=null},[r,c]);const m=p.useRef();return p.useEffect(()=>{ee.default(n,m.current)||n&&c.page&&(K.setPageDataSource(c.page,i,a,n),m.current=O.default(n))},[c.page,n,a,i]),c.page?t.jsx(H,{mode:e,components:o,page:c.page,locale:a,defaultLocale:s,headerAddons:l}):null}function Ae({mode:e,state:n,path:o,pageData:r}){const{t:a,locale:s}=F.useLocaleContext(),{pages:l,supportedLocales:i,config:{defaultLocale:c},resources:m}=n,g=Object.values(l).find(h=>(h==null?void 0:h.slug)===o),d=Object.values(m.pages||{}).find(h=>h.page.slug===o),x=p.useMemo(()=>i!=null&&i.some(h=>h.locale===s)?s:void 0,[s,i]),j=V.useReactive({page:null});p.useEffect(()=>{const h=g||(d==null?void 0:d.page)||null;h?j.page=O.default(h):j.page=null},[g,d]);const b=p.useRef();if(p.useEffect(()=>{ee.default(r,b.current)||r&&j.page&&(K.setPageDataSource(j.page,n,x,r),b.current=O.default(r))},[{}]),!g&&!(d!=null&&d.page))return t.jsx(S.Box,{width:"100vw",height:"100vh",display:"flex",justifyContent:"center",alignItems:"center",children:t.jsx(Y.default,{style:{background:"inherit"},status:404,extra:t.jsx(ae,{href:"/",children:a("common.back")})})});const y=_.getAllComponents(n);return j.page?t.jsx(H,{mode:e,components:y,page:j.page,locale:x,defaultLocale:c}):null}function H({mode:e,components:n,page:o,locale:r,defaultLocale:a,headerAddons:s}){var N,k,f,u,C,M,E,B,I;const l=ue.useColorConvert(),i=((N=o.locales)==null?void 0:N[r])??((k=o.locales)==null?void 0:k[a])??{},c=i.title||((f=window.blocklet)==null?void 0:f.appName),m=i.description||((u=window.blocklet)==null?void 0:u.appDescription),g=_.autoResizeImage(_.getImageAbsoluteUrl(i.image),540),{logo:d,brand:x,description:j,...b}=le.useHeaderState(),y=p.useMemo(()=>R=>{var T;let v=(s==null?void 0:s(R))??R;return v=((T=b.addons)==null?void 0:T.call(b,v))??v,v},[b.addons,s]),h=(C=i.header)!=null&&C.translucent?re:se;return t.jsxs(q.PageProvider,{page:o,defaultLocale:a,currentLocale:r,children:[t.jsx(L.Global,{styles:L.css`
|
|
30
30
|
body {
|
|
31
31
|
background-color: ${l(!i.backgroundColor||i.backgroundColor==="transparent"?"background.default":i.backgroundColor)} !important;
|
|
32
32
|
}
|
|
33
|
-
`}),t.jsx(h,{hideNavMenu:!!((M=i.header)!=null&&M.hideNavMenus),translucentTextColor:(E=i.header)==null?void 0:E.translucentTextColor,...d?{logo:d}:{},...x?{brand:x}:{},...j?{description:j}:{},className:Q.cx(((B=i.header)==null?void 0:B.sticky)&&"sticky","page-header"),maxWidth:!1,addons:y}),t.jsx(w.ScrollRestoration,{}),t.jsxs(xe.Helmet,{children:[t.jsx("title",{children:c}),t.jsx("meta",{name:"og:title",content:c}),t.jsx("meta",{name:"og:description",content:m}),t.jsx("meta",{name:"og:image",content:g}),t.jsx("meta",{name:"twitter:image:src",content:g}),t.jsx("meta",{name:"twitter:image",content:g}),t.jsx("meta",{property:"twitter:description",content:m}),t.jsx("meta",{property:"twitter:title",content:c}),t.jsx("meta",{name:"description",content:m})]}),t.jsx(S.Stack,{flexGrow:1,className:"PageView-root",sx:{"& .BlockBase-root:first-child":{pt:"0 !important"}},children:o.sectionIds.map(R=>{var
|
|
33
|
+
`}),t.jsx(h,{hideNavMenu:!!((M=i.header)!=null&&M.hideNavMenus),translucentTextColor:(E=i.header)==null?void 0:E.translucentTextColor,...d?{logo:d}:{},...x?{brand:x}:{},...j?{description:j}:{},className:Q.cx(((B=i.header)==null?void 0:B.sticky)&&"sticky","page-header"),maxWidth:!1,addons:y}),t.jsx(w.ScrollRestoration,{}),t.jsxs(xe.Helmet,{children:[t.jsx("title",{children:c}),t.jsx("meta",{name:"og:title",content:c}),t.jsx("meta",{name:"og:description",content:m}),t.jsx("meta",{name:"og:image",content:g}),t.jsx("meta",{name:"twitter:image:src",content:g}),t.jsx("meta",{name:"twitter:image",content:g}),t.jsx("meta",{property:"twitter:description",content:m}),t.jsx("meta",{property:"twitter:title",content:c}),t.jsx("meta",{name:"description",content:m})]}),t.jsx(S.Stack,{flexGrow:1,className:"PageView-root",sx:{"& .BlockBase-root:first-child":{pt:"0 !important"}},children:o.sectionIds.map(R=>{var W,G;const v=o.sections[R];if(!v||v.visibility==="hidden")return null;const T=(W=v.locales)==null?void 0:W[r],ie=((G=v.locales)==null?void 0:G[a])??{};return t.jsx(q.BlockRenderer,{id:R,type:v.component,mode:e,section:v,config:{...Se.default(T)?ie:T,locale:r,dev:e==="draft"?{mode:e,components:n,defaultLocale:a}:{mode:e}}},R)})}),!((I=i.footer)!=null&&I.hidden)&&t.jsx(_e,{})]})}const Le=p.lazy(()=>Promise.resolve().then(()=>require("./publish-button-CpLC1-Bd.js"))),se=Z.default(ve.default)`
|
|
34
34
|
&.sticky {
|
|
35
35
|
position: sticky;
|
|
36
36
|
top: 0;
|
|
37
37
|
}
|
|
38
|
-
`;function Oe({logo:e}){const[n,o]=p.useState(),r=S.useMediaQuery(s=>s.breakpoints.down("sm")),{value:a}=
|
|
38
|
+
`;function Oe({logo:e}){const[n,o]=p.useState(),r=S.useMediaQuery(s=>s.breakpoints.down("sm")),{value:a}=X.useAsync(()=>{var i,c;const s=new URL(r?((i=window==null?void 0:window.blocklet)==null?void 0:i.appLogo)||"/.well-known/service/blocklet/logo":((c=window==null?void 0:window.blocklet)==null?void 0:c.appLogoRect)||"/.well-known/service/blocklet/logo-rect",window.location.origin);s.searchParams.delete("imageFilter"),s.searchParams.delete("f");const l=s.toString();return new Promise(m=>{fetch(l).then(g=>{const d=g.headers.get("content-type");d!=null&&d.includes("svg")&&g.text().then(x=>{o(x),m(null)}),m(g.url)})})},[r]);if(e)return e;if(n)return t.jsx(S.Box,{sx:{filter:"initial !important"},dangerouslySetInnerHTML:{__html:we.default.sanitize(n)}});if(a){const s=new URL(a);s.searchParams.set("imageFilter","convert"),s.searchParams.set("f","png"),s.searchParams.set("h","80");const l=s.toString();return t.jsx("img",{src:l,alt:"logo"})}return null}function re({logo:e,translucentTextColor:n,...o}){const{top:r=0}=V.useScroll(()=>document.getElementById("app"))||{};let a=Math.min(r/800,1),s="";if(a>.1){a=Math.max(a,.6);const l=Math.round(255*Math.min(1-a,.2));s=`rgb(${l}, ${l}, ${l})`}else s=n||"#EEEEEE";return t.jsx(se,{logo:t.jsx(Oe,{logo:e}),...o,className:Q.cx(a<=.7&&"reverse-color"),style:{backgroundColor:`rgba(255,255,255,${a})`,"--logo-invert":a<=.7?1-a/6:1-a},sx:{backdropFilter:a>=.6?"blur(10px)":"blur(0px)",transition:"all 0.3s ease",position:"fixed !important",left:0,top:0,right:0,bgcolor:"transparent","&.reverse-color":{".navmenu-root>.navmenu-sub>span,\n .navmenu-root>.navmenu-item,\n .header-addons>button,\n .header-addons>a,\n .header-addons>div>button":{color:`${s} !important`}},".header-logo > div":{filter:"invert(var(--logo-invert))"},".header-logo":{color:s}}})}const ae=Z.default(S.Button)``;exports.Home=De;exports.HomeView=ne;exports.Loading=te;exports.PageRoutes=A;exports.PageView=H;exports.PageViewByPath=Ae;exports.PageViewWithDataSource=oe;exports.TranslucentHeader=re;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),C=require("./state-oc52fQ0j.js"),q=require("@arcblock/ux/lib/Locale/context"),W=require("@arcblock/ux/lib/Toast"),A=require("@mui/icons-material"),M=require("@mui/lab"),t=require("@mui/material"),R=require("immer"),_=require("lodash/difference"),c=require("react"),N=require("react-use"),F=require("./home-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),C=require("./state-oc52fQ0j.js"),q=require("@arcblock/ux/lib/Locale/context"),W=require("@arcblock/ux/lib/Toast"),A=require("@mui/icons-material"),M=require("@mui/lab"),t=require("@mui/material"),R=require("immer"),_=require("lodash/difference"),c=require("react"),N=require("react-use"),F=require("./home-q1dzT-BZ.js"),O=require("./array-DOclwySd.js"),z=s=>s&&s.__esModule?s:{default:s},I=z(W),D=z(_);function H(s){const[g,p]=c.useState(!1);return e.jsx(M.LoadingButton,{...s,loading:s.loading||g,onClick:a=>{var x;const m=(x=s.onClick)==null?void 0:x.call(s,a);m instanceof Promise&&(p(!0),m.finally(()=>{p(!1)}))}})}const J=t.createSvgIcon(e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M7.75732 16.2426L16.2426 7.75736",stroke:"#4B5563",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M16.2426 16.2426L7.75732 7.75735",stroke:"#4B5563",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),"Close");function V(){const[s,g]=c.useState(),p=c.useMemo(()=>s?e.jsx(t.Dialog,{...s}):null,[s]),a=c.useCallback(()=>{g(void 0)},[]),m=c.useCallback(({title:x,content:d,cancelText:L="Cancel",okText:f="Ok",onOk:h,onClose:j,okIcon:B,okColor:n="primary",cancelColor:r="primary",DialogContentProps:k,form:P,...b})=>{g({...b,open:!0,children:e.jsxs("form",{onSubmit:v=>v.preventDefault(),children:[x&&e.jsxs(t.DialogTitle,{className:"between",zIndex:"appBar",bgcolor:"background.paper",sx:{borderBottom:"1px solid #E5E7EB"},children:[e.jsx(t.Box,{children:x}),e.jsx(t.IconButton,{size:"small",onClick:async()=>{a(),j==null||j()},children:e.jsx(J,{})})]}),d&&e.jsx(t.DialogContent,{...k,sx:{mt:-3,...k==null?void 0:k.sx},children:e.jsx(t.Box,{pt:3,children:d})}),e.jsxs(t.DialogActions,{children:[e.jsx(t.Button,{variant:"outlined",color:r||"primary",onClick:j??a,children:L}),e.jsx(H,{variant:"contained",color:n||"primary",startIcon:B,loadingPosition:B?"start":"center",onClick:async()=>{await(h==null?void 0:h()),a()},type:"submit",children:f})]})]}),onClose:j??a})},[a]);return{dialog:p,showDialog:m,closeDialog:a}}const K=c.forwardRef(({mode:s,state:g},p)=>{const{t:a}=q.useLocaleContext(),[m,x]=c.useState(!1),{dialog:d,showDialog:L}=V(),f=C.useProjectId(),h=c.useCallback(B=>{let n=[];L({title:a("maker.publishToProduction"),content:e.jsxs(t.Box,{sx:{minWidth:300},children:[e.jsx(t.Alert,{color:"warning",icon:e.jsx(A.Warning,{}),children:a("maker.publishToProductionTip")}),e.jsx(t.Box,{maxHeight:"50vh",overflow:"auto",mt:2,children:e.jsx(U,{state:g,toMode:s,onChange:r=>n=r,defaultRouteIds:B})})]}),okText:a("maker.publish"),cancelText:a("common.cancel"),onOk:async()=>{if((n==null?void 0:n.length)===0){const r=a("maker.publishSelectPagesMessage");throw I.default.error(r),new Error(r)}localStorage.setItem(C.getProjectPageVersionKey(f??""),String(new Date().getTime())),x(!0);try{await O.publishPages({mode:s,routes:n}),I.default.success(a("maker.publishSuccessMessage"))}catch(r){throw I.default.error(r.message),r}finally{x(!1)}}})},[s,g,a,f,L]);c.useImperativeHandle(p,()=>({openPublishDialog:h}));const j=c.useCallback(()=>{h()},[h]);return e.jsxs(e.Fragment,{children:[e.jsx(M.LoadingButton,{color:"primary",variant:"contained",size:"small",sx:{mr:1},onClick:j,loading:m,disabled:m,children:a("maker.publishToProduction")}),d]})});function U({state:s,toMode:g,onChange:p,defaultRouteIds:a}){const{t:m,locale:x}=q.useLocaleContext(),[d,L]=c.useState(!1),[f,h]=c.useState(()=>a?Object.fromEntries(a.map(i=>[i,!0])):{}),{loading:j,error:B,value:n}=N.useAsync(()=>O.getPages({mode:g}),[g]);if(B)throw B;const r=c.useMemo(()=>s.routeIds||[],[s]),k=c.useMemo(()=>(n==null?void 0:n.pageIds)||[],[n]),P=c.useMemo(()=>!r||!s.routes?[]:JSON.parse(JSON.stringify(r)).sort((u,y)=>{var w,T;const o=(w=s.routes)==null?void 0:w[u],l=(T=s.routes)==null?void 0:T[y];return o!=null&&o.publishedAt&&new Date(o.publishedAt).getTime()<new Date(o.updatedAt).getTime()?-1:l!=null&&l.publishedAt&&new Date(l.publishedAt).getTime()<new Date(l.updatedAt).getTime()?1:new Date((o==null?void 0:o.updatedAt)??"").getTime()-new Date((l==null?void 0:l.updatedAt)??"").getTime()}),[s,r]),b=c.useMemo(()=>!n||!k||!r?[]:D.default(k,r),[r,n,k]),v=c.useMemo(()=>r?[...r].concat(b):b,[r,b]),S=c.useCallback(i=>{h(u=>{const y=R.produce(u,o=>{d?(Object.assign(o,Object.fromEntries(v.map(l=>[l,!0]))),delete o[i]):o[i]?(delete o[i],b.includes(i)&&(r||[]).filter(l=>{var w,T;return((w=s.pages[l])==null?void 0:w.slug)===((T=n==null?void 0:n.pages[i])==null?void 0:T.slug)}).forEach(l=>{delete o[l]})):(o[i]=!0,r&&r.includes(i)&&b.filter(l=>{var w,T;return((w=n==null?void 0:n.pages[l])==null?void 0:w.slug)===((T=s.pages[i])==null?void 0:T.slug)}).forEach(l=>{o[l]=!0}))});return L(D.default(v,Object.keys(y)).length===0),y})},[d,v,b,s,n,r]),E=c.useCallback(()=>{L(i=>(i&&h({}),!i))},[]);return c.useEffect(()=>{p(d?null:Object.keys(f))},[d,f,p]),j?e.jsx(F.Loading,{sx:{my:4}}):e.jsxs(t.List,{disablePadding:!0,sx:{maxWidth:500},children:[e.jsx(t.ListItem,{sx:{position:"sticky",top:0,bgcolor:"background.paper",zIndex:1},disablePadding:!0,children:e.jsxs(t.ListItemButton,{onClick:E,dense:!0,children:[e.jsx(t.ListItemIcon,{children:e.jsx(t.Checkbox,{edge:"start",checked:d,tabIndex:-1})}),e.jsx(t.ListItemText,{primary:m("common.all")})]})}),P.map(i=>{var l;const u=(l=s.routes)==null?void 0:l[i];if(!u)return null;const y=!1,o=!u.publishedAt||u.updatedAt&&new Date(u.updatedAt).getTime()>new Date(u.publishedAt).getTime();return e.jsx(t.ListItem,{disablePadding:!0,secondaryAction:e.jsxs(e.Fragment,{children:[o&&e.jsx(t.Tooltip,{title:m("maker.pages.needPublish"),children:e.jsx(A.Sync,{fontSize:"small",sx:{color:"warning.main",fontSize:16,mr:.35}})}),!u.isPublic&&e.jsx(t.Tooltip,{title:m("maker.pages.notPublic"),children:e.jsx(A.VisibilityOff,{fontSize:"small",sx:{color:"warning.main",fontSize:16,mr:.35}})}),y]}),children:e.jsxs(t.ListItemButton,{onClick:()=>S(i),dense:!0,children:[e.jsx(t.ListItemIcon,{children:e.jsx(t.Checkbox,{edge:"start",checked:d||!!f[i],tabIndex:-1})}),e.jsx(t.ListItemText,{primary:u.path,primaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"},secondaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"}})]})},i)}),b.map(i=>{var y,o;const u=n==null?void 0:n.pages[i];return u?e.jsx(t.ListItem,{disablePadding:!0,secondaryAction:e.jsx(t.Chip,{color:"warning",label:"deleted",size:"small"}),children:e.jsxs(t.ListItemButton,{onClick:()=>S(i),dense:!0,children:[e.jsx(t.ListItemIcon,{children:e.jsx(t.Checkbox,{edge:"start",checked:d||!!f[i],tabIndex:-1})}),e.jsx(t.ListItemText,{primary:u.slug,secondary:(o=(y=u.locales)==null?void 0:y[x])==null?void 0:o.title,primaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"},secondaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"}})]})},i):null})]})}exports.default=K;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Et=Object.defineProperty;var bt=(t,s,e)=>s in t?Et(t,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[s]=e;var v=(t,s,e)=>bt(t,typeof s!="symbol"?s+"":s,e);const It=require("@blocklet/pages-kit/builtin/utils"),he=require("@blocklet/pages-kit/types"),ae=require("@blocklet/pages-kit/utils/property"),W=require("@blocklet/quickjs"),Tt=require("@blocklet/sdk/lib/config"),Ue=require("lru-cache"),et=require("node-fetch"),x=require("ufo"),Ie=require("crypto"),Pt=require("@blocklet/logger"),At=require("@blocklet/pages-kit/utils/builtin"),tt=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),Me=require("@blocklet/sdk/lib/component"),Ot=require("autoprefixer"),jt=require("esbuild"),w=require("fs"),_t=require("postcss"),Ct=require("tailwindcss"),vt=require("typescript"),Dt=require("@blocklet/pages-kit/utils/data-source"),Rt=require("@reactivedata/reactive"),Y=require("@syncedstore/core"),De=require("glob"),xt=require("lib0/decoding"),kt=require("lib0/encoding"),Lt=require("lodash/cloneDeep"),Nt=require("lodash/debounce"),Ut=require("lodash/get"),Mt=require("lodash/isEmpty"),Ft=require("lodash/pick"),qt=require("lodash/set"),$t=require("lodash/union"),Bt=require("nanoid"),Gt=require("p-limit"),g=require("path"),Vt=require("stream/promises"),Ht=require("tar"),zt=require("wait-on"),se=require("y-protocols/awareness"),je=require("y-protocols/sync"),Jt=require("yaml"),Kt=require("yjs"),Yt=require("lodash/isNil"),_=require("sequelize");require("sqlite3");require("@blocklet/pages-kit/types/state");const R=t=>t&&t.__esModule?t:{default:t};function le(t){if(t&&t.__esModule)return t;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(s,e,n.get?n:{enumerable:!0,get:()=>t[e]})}}return s.default=t,Object.freeze(s)}const b=R(Tt),Wt=R(et),Qt=R(Pt),Xt=R(Ot),Zt=le(jt),es=R(_t),ts=R(Ct),L=R(vt),_e=le(xt),D=le(kt),st=R(Lt),nt=R(Nt),Fe=R(Ut),ss=R(Mt),ns=R(Ft),Je=R(qt),os=R($t),rs=R(Gt),as=R(g),is=R(zt),X=le(Jt),F=le(Kt),cs=R(Yt);b.default.env.mode;b.default.env.OPENAI_API_KEY||process.env.OPENAI_API_KEY;b.default.env.OPENAI_BASE_URL||process.env.OPENAI_BASE_URL;b.default.env.TRANSLATE_ADDITIONAL_PROMPT||process.env.TRANSLATE_ADDITIONAL_PROMPT;b.default.env.PAGE_CONTENT_ADDITIONAL_PROMPT||process.env.PAGE_CONTENT_ADDITIONAL_PROMPT;const ls="image-bin";b.default.env.INIT_TEMPLATE_PATH;const us=process.env.DATABASE_URL||as.default.join(b.default.env.dataDir,"db/pages-kit.db"),Ke=b.default,ds=()=>b.default.env.tenantMode==="multiple",ps=()=>{var t;return(cs.default(Ke.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=Ke.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},A=Qt.default("pages-kit"),fs=_.DataTypes.sqlite.DATE.parse;_.DataTypes.sqlite.DATE.parse=(t,s)=>typeof t=="number"?new Date(t):fs(t,s);const ue=new _.Sequelize({dialect:"sqlite",storage:us,benchmark:process.env.ENABLE_SEQUELIZE_BENCHMARK==="true",retry:{match:[/SQLITE_BUSY/],name:"query",max:10},logging:process.env.ENABLE_SEQUELIZE_LOGGING==="true"?console.log:!1});ue.query("pragma journal_mode = WAL;");ue.query("pragma synchronous = normal;");ue.query("pragma journal_size_limit = 67108864;");class Te extends _.Model{}Te.init({id:{type:_.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:_.DataTypes.UUIDV4},projectId:{type:_.DataTypes.UUID,allowNull:!1},componentId:{type:_.DataTypes.STRING,allowNull:!1}},{sequelize:ue,tableName:"ProjectComponents",timestamps:!1});class H extends _.Model{static async getProjectByIdOrSlug(s){return H.findOne({where:{[_.Op.or]:[{id:s},{slug:s}]}})}}H.init({id:{type:_.DataTypes.UUID,defaultValue:_.DataTypes.UUIDV4,primaryKey:!0},name:{type:_.DataTypes.STRING,allowNull:!1},description:_.DataTypes.TEXT,createdAt:_.DataTypes.DATE,updatedAt:_.DataTypes.DATE,createdBy:{type:_.DataTypes.STRING,allowNull:!1},updatedBy:{type:_.DataTypes.STRING,allowNull:!1},slug:_.DataTypes.STRING,icon:_.DataTypes.STRING,pinnedAt:_.DataTypes.DATE,useAllResources:_.DataTypes.BOOLEAN,npmSecret:_.DataTypes.STRING,relatedBlocklets:{type:_.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(t){this.setDataValue("relatedBlocklets",JSON.stringify(t||{}))}}},{sequelize:ue,paranoid:!0});H.hasMany(Te,{foreignKey:"projectId",as:"components"});const ms=async(t,{componentId:s})=>{const e=`@tailwind components;
|
|
2
2
|
@tailwind utilities;
|
|
3
3
|
`,n=`.CustomComponent_${s}`;return(await es.default([ts.default({content:[{raw:t,extension:"tsx"}]}),Xt.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),r=>{r.walkRules(c=>{c.selectors=c.selectors.map(a=>a.replace(/\.(.+)/g,`${n}.$1,${n} .$1`))})}]).process(e)).css},gs=async(t,{componentId:s})=>{const e=await ms(t,{componentId:s});return`export const __PagesKit_CSS__ = ${JSON.stringify(e)};
|
|
4
4
|
|
|
5
5
|
${t}
|
|
6
|
-
`},Ye=W.memoize(async(t,s)=>{let e=L.default.transpileModule(t,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.ESNext},transformers:{before:[tt.createBuiltinModuleTransformer(L.default)]}}).outputText;if(s.tailwind&&(e=await gs(e,{componentId:s.componentId})),s.module===he.PreloadComponentScriptModule.ESM)return e;const n=L.default.transpileModule(e,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.CommonJS,moduleResolution:L.default.ModuleResolutionKind.Node16}}).outputText;return s.module===he.PreloadComponentScriptModule.CJS?n:ys(s.moduleName,n)},{keyGenerator:(t,s)=>{const e=Ie.createHash("md5").update(t).digest("hex"),n={...s,componentId:s.componentId,module:s.module,...s.module!==he.PreloadComponentScriptModule.ESM?{moduleName:s.moduleName}:{},tailwind:s.tailwind};return JSON.stringify(["transpileModule",e,n])},lruOptions:{max:100,ttl:1e3*60*60}}),hs=async(t,s)=>{var c,a;const n=(a=(c=(await Zt.build({entryPoints:["index.tsx"],external:Object.keys(At.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(u){let l=null;u.onResolve({filter:/.*/},d=>d.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:d.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),u.onLoad({filter:/.*/,namespace:"vfs"},async d=>{var h;if(d.path==="index.tsx")return{contents:`export { ${s} } from './component'`,loader:"tsx"};if(d.path==="component.tsx")return{contents:t,loader:"tsx"};if(tt.isRelativeModule(d.path)){const
|
|
7
|
-
var ${t} =
|
|
6
|
+
`},Ye=W.memoize(async(t,s)=>{let e=L.default.transpileModule(t,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.ESNext},transformers:{before:[tt.createBuiltinModuleTransformer(L.default)]}}).outputText;if(s.tailwind&&(e=await gs(e,{componentId:s.componentId})),s.module===he.PreloadComponentScriptModule.ESM)return e;const n=L.default.transpileModule(e,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.CommonJS,moduleResolution:L.default.ModuleResolutionKind.Node16}}).outputText;return s.module===he.PreloadComponentScriptModule.CJS?n:ys(s.moduleName,n)},{keyGenerator:(t,s)=>{const e=Ie.createHash("md5").update(t).digest("hex"),n={...s,componentId:s.componentId,module:s.module,...s.module!==he.PreloadComponentScriptModule.ESM?{moduleName:s.moduleName}:{},tailwind:s.tailwind};return JSON.stringify(["transpileModule",e,n])},lruOptions:{max:100,ttl:1e3*60*60}}),hs=async(t,s)=>{var c,a;const n=(a=(c=(await Zt.build({entryPoints:["index.tsx"],external:Object.keys(At.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(u){let l=null;u.onResolve({filter:/.*/},d=>d.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:d.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),u.onLoad({filter:/.*/,namespace:"vfs"},async d=>{var h;if(d.path==="index.tsx")return{contents:`export { ${s} } from './component'`,loader:"tsx"};if(d.path==="component.tsx")return{contents:t,loader:"tsx"};if(tt.isRelativeModule(d.path)){const E=d.path.split("/").pop();if(l||(l=await Pe({ensureLoaded:!1})),(h=l==null?void 0:l.chunks)!=null&&h[E])try{const p=w.readFileSync(l.chunks[E],"utf-8");return A.info("get chunk from local file system",E),{contents:p,loader:"tsx"}}catch{}}return null})}}]})).outputFiles)==null?void 0:c[0])==null?void 0:a.contents;if(!n)throw new Error("Failed to build server code");const o=Buffer.from(n).toString();return L.default.transpileModule(o,{compilerOptions:{module:L.default.ModuleKind.ESNext,target:L.default.ScriptTarget.ES2020}}).outputText},ot=W.memoize(async(t,s)=>{const e=await hs(t,s);return new RegExp(`export\\s+\\{\\s+${s}\\s+\\}`,"m").test(e)?e:void 0},{keyGenerator:(t,s)=>{const e=Ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["extractExportValueSchema",e,s])},lruOptions:{max:100,ttl:1e3*60*60}}),ys=(t,s)=>`// GENERATED FILE. DO NOT EDIT.
|
|
7
|
+
var ${t} = function () {
|
|
8
8
|
|
|
9
9
|
const exports = {};
|
|
10
10
|
let moduleExports = null;
|
|
@@ -29,7 +29,7 @@ var ${t} = ${e?"async":""} function () {
|
|
|
29
29
|
|
|
30
30
|
return exports;
|
|
31
31
|
};
|
|
32
|
-
|
|
32
|
+
`,oe=new Ue.LRUCache({max:100}),rt=60*60,Re=60;function at(t){A.info("clear preload components cache",{cacheKey:t}),oe.delete(t)}function it(t){for(const s of oe.keys())s.includes(t)&&(A.info("clear preload components cache",{cacheKey:s}),at(s))}function ct({mode:t,instanceId:s,componentId:e,locale:n}){return["getPreloadComponents",t,s,e,n].join("-")}async function Ss({mode:t,req:s,state:e,locale:n,instances:o,module:r}){const{supportedLocales:c,config:{defaultLocale:a}}=e;if(!a)return null;const u=(await Promise.all(o.map(async p=>{try{const i=ct({mode:t,instanceId:p.id,componentId:p.componentId,locale:n});if(t!=="draft"&&p.useCache&&oe.has(i))return A.info(`get preload component from cache: ${i}`),oe.get(i);const y=ie({state:e,componentId:p.componentId});if(!y)return null;const T=await lt({req:s,state:e,componentId:y.id,locale:n,defaultLocale:a,properties:p.properties});if(!T)return null;const $={instanceId:p.id,preload:T};if(t!=="draft"&&p.useCache){let k=rt;p.cacheDuration&&(k=p.cacheDuration),A.info(`set preload component to cache(${k}s): ${i}`),oe.set(i,$,{ttl:k*1e3})}return $}catch(i){return A.error("get preload component error",{instanceId:p.id,componentId:p.componentId},{error:i}),null}}))).filter(p=>!!p),l=Object.values(u.reduce((p,i)=>({...p,...i.preload.components}),{}));async function d(){const p=await Promise.all(l.map(async i=>{const y=ae.componentUMDName({componentId:i.component.id}),T=r===he.PreloadComponentScriptModule.ESM?{module:r,script:await Ye(i.script,{componentId:i.component.id,module:r,tailwind:t!=="draft"})}:{module:r,script:await Ye(i.script,{componentId:i.component.id,module:r,moduleName:y,tailwind:t!=="draft"}),moduleName:y};return[i.component.id,{component:i.component,script:T}]}));return Object.fromEntries(p)}const h=await d();return{config:{defaultLocale:a,supportedLocales:c},components:h,instances:u.map(p=>({id:p.instanceId,componentId:p.preload.component.id,locales:{[p.preload.locale]:{props:p.preload.props}}}))}}async function lt({req:t,state:s,componentId:e,locale:n,defaultLocale:o,properties:r}){const{supportedLocales:c}=s,a=ie({state:s,componentId:e});if(!a)return null;const u=c.some(d=>d.locale===n)?n:o;if(!u)return null;const l=await ut({req:t,state:s,componentId:e,locale:u,defaultLocale:o,properties:r});return l?{component:a,...l}:null}const ws=20;async function ut({req:t,depth:s=0,state:e,componentId:n,locale:o,defaultLocale:r,properties:c}){if(s>ws)throw new RangeError("max component depth exceeded");const a=Es({state:e,componentId:n,properties:c,locale:o});if(!a)return null;const{props:u}=a,l={locale:o||r,components:{[a.component.id]:{component:a.component,script:a.script}},props:{...u}};try{const d=await Is({...a,req:t});d!=null&&d.props&&Object.assign(l.props,d.props)}catch(d){A.error("preload data at server side error",{componentId:n,name:a.component.name},{error:d})}return await Promise.all(Object.entries(u).map(async([d,h])=>{if((h==null?void 0:h.type)===ae.RenderNestedComponent){const E=await ut({req:t,depth:s+1,state:e,componentId:h.componentId,locale:o,defaultLocale:r,properties:h.properties});E&&(Object.assign(l.components,E.components),Object.assign(l.props,{[d]:{type:ae.RenderNestedComponent,componentId:h.componentId,props:E.props}}))}})),l}function Es({state:t,componentId:s,locale:e,properties:n}){const o=ie({state:t,componentId:s});if(!o)return null;const r=ae.mergeComponent({componentId:s,getComponent:c=>ie({state:t,componentId:c}),locale:e,defaultLocale:t.config.defaultLocale,properties:n});return r?{component:o,script:r.script,props:{locale:e,...r.props}}:null}function ie({state:t,componentId:s}){var e,n,o;return((e=t.components[s])==null?void 0:e.data)??((o=(n=t.resources.components)==null?void 0:n[s])==null?void 0:o.component)}function bs({state:t,name:s}){var n,o;const e=s.toLowerCase();return((n=Object.values(t.components).find(r=>{var c;return((c=r.data.name)==null?void 0:c.toLowerCase())===e}))==null?void 0:n.data)??((o=t.resources.components&&Object.values(t.resources.components).find(r=>{var c;return((c=r.component.name)==null?void 0:c.toLowerCase())===e}))==null?void 0:o.component)}async function Is({component:t,script:s,props:e,req:n}){if(!(s!=null&&s.includes("getServerSideProps")))return null;const o=await ot(s,"getServerSideProps");if(!o)return null;const r=new Promise(a=>{setTimeout(()=>{a({})},Re*1e3)});return await Promise.race([r,W.Sandbox.callFunction({code:`${o}
|
|
33
33
|
|
|
34
34
|
export async function getServerSidePropsWrapper(props) {
|
|
35
35
|
const { location, fetch, props: componentProps } = props;
|
|
@@ -48,10 +48,10 @@ export async function getServerSidePropsWrapper(props) {
|
|
|
48
48
|
}
|
|
49
49
|
}`,filename:`${t.name||t.id}.js`,moduleLoader:a=>{if(a==="@blocklet/pages-kit/builtin/utils")return`const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
|
|
50
50
|
export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
51
|
-
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return W.BuiltinModules.dayjs},global:{console:{log:(...a)=>{A.info(...a)},warn:(...a)=>{A.warn(...a)},error:(...a)=>{A.error(...a)}},getComponentMountPoint:It.getComponentMountPoint,joinURL:
|
|
51
|
+
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return W.BuiltinModules.dayjs},global:{console:{log:(...a)=>{A.info(...a)},warn:(...a)=>{A.warn(...a)},error:(...a)=>{A.error(...a)}},getComponentMountPoint:It.getComponentMountPoint,joinURL:x.joinURL,withQuery:x.withQuery,getQuery:x.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:x.joinURL(x.withHttps(n.hostname),n.originalUrl)},fetch:(a,{...u}={})=>{const l=typeof a=="string"&&a.startsWith("/")?x.joinURL(b.default.env.appUrl,a):a;if(typeof l=="string"&&x.parseURL(l).host===x.parseURL(b.default.env.appUrl).host){const d=n.get("cookie");if(d){const h=new et.Headers(u.headers);h.set("cookie",d),u.headers=h}}return Wt.default(l,{...u,timeout:Re*1e3}).then(d=>({ok:d.ok,status:d.status,statusText:d.statusText,headers:Object.fromEntries(d.headers.entries()),json:()=>d.json()}))},props:e}]})])}const dt=W.memoize(async(t,s,e)=>{if(!(t!=null&&t.includes(s)))return null;const n=await ot(t,s);if(n)try{return await W.Sandbox.callFunction({code:`
|
|
52
52
|
${n}
|
|
53
53
|
|
|
54
54
|
export function get${s}SchemaWrapper() {
|
|
55
55
|
return ${s};
|
|
56
56
|
}
|
|
57
|
-
`,filename:`${e}.js`,functionName:`get${s}SchemaWrapper`})}catch(o){return A.error(`获取 ${s} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,s,e)=>{const n=Ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",n,s,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Ps="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ke="page",Re="trigger-reload-project-resource",qe=Ps,Ts="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM",{uploadToMediaKit:As}=require("@blocklet/uploader-server"),ye=Bt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),$e=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,re=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,We=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,js=1e4,Os=3e4,me=0,_e=1,Cs=0,_s=1,Le=I.default,ne=g.join(process.env.BLOCKLET_DATA_DIR,"site-state"),vs=["production","draft"],Ds=["production"];function we(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function xs(){var e;const t=Le.env.languages.map(n=>({locale:n.code,name:n.name})),s=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},routeIds:[],routes:{},components:{},supportedLocales:t,config:{defaultLocale:s},resources:{}}}const V=class V extends F.Doc{constructor(e){super();v(this,"states",{});v(this,"syncedStore");v(this,"conns",new Map);v(this,"awareness");v(this,"awarenessChangeHandler",({added:e,updated:n,removed:o},r)=>{const c=e.concat(n,o);if(r!==null){const l=this.conns.get(r);l&&(e.forEach(d=>{l.add(d)}),o.forEach(d=>{l.delete(d)}))}const a=D.createEncoder();D.writeVarUint(a,_e),D.writeVarUint8Array(a,se.encodeAwarenessUpdate(this.awareness,c));const u=D.toUint8Array(a);this.conns.forEach((l,d)=>this.send(d,u))});v(this,"updateHandler",e=>{const n=D.createEncoder();D.writeVarUint(n,me),Oe.writeUpdate(n,e);const o=D.toUint8Array(n);this.conns.forEach((r,c)=>this.send(c,o))});v(this,"ensureDataStructure",()=>{var c;const{supportedLocales:e,pages:n,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(n));let u=0;for(;u<o.length;){const l=o[u];a.has(l)?(a.delete(l),u++):o.splice(u,1)}}e.splice(0,e.length),e.push(...Le.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(c=e[0])==null?void 0:c.locale;{let a=0;const u=new Set;for(;a<e.length;){const{locale:l}=e[a];u.has(l)?e.splice(a,1):(a++,u.add(l))}}});v(this,"send",(e,n)=>{e.readyState!==Cs&&e.readyState!==_s&&this.closeConn(e);try{e.send(n,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});v(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const n=this.conns.get(e);this.conns.delete(e),n&&se.removeAwarenessStates(this.awareness,Array.from(n),null)}e.close()});v(this,"autoSave",nt.default(()=>{w.mkdirSync(g.dirname(this.draftYjsFilePath),{recursive:!0}),w.writeFileSync(this.draftYjsFilePath,F.encodeStateAsUpdate(this))},js));v(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});v(this,"publish",async({mode:e,routes:n})=>{var c;const o=await this.getState("draft"),r=await this.getState("production");await Ne(o,r,{routes:n,mergeMode:"replace",deleteRoutes:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const a of n||Object.keys(this.syncedStore.routes||{}))((c=this.syncedStore.routes)==null?void 0:c[a])!==void 0&&(this.syncedStore.routes[a].publishedAt=new Date().toISOString());await this.setState(e,r)});v(this,"mergeState",async(e,n)=>{var a,u,l;const o=JSON.parse(JSON.stringify(n));(a=e.config).fontFamily??(a.fontFamily={});const r=(u=o.config)==null?void 0:u.fontFamily,c=(l=e.config)==null?void 0:l.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(c==null?void 0:c.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(c==null?void 0:c.description),await new Promise((d,h)=>{this.transact(async()=>{try{const b=await Ne(e,n);d(b)}catch(b){h(b)}})})});v(this,"addConnection",e=>{if(this.conns.has(e))return;e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",r=>this.messageListener(e,new Uint8Array(r)));let n=!0;const o=setInterval(()=>{if(!n)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){n=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},Os);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{n=!0});{const r=D.createEncoder();D.writeVarUint(r,me),Oe.writeSyncStep1(r,this),this.send(e,D.toUint8Array(r));const c=this.awareness.getStates();if(c.size>0){const a=D.createEncoder();D.writeVarUint(a,_e),D.writeVarUint8Array(a,se.encodeAwarenessUpdate(this.awareness,Array.from(c.keys()))),this.send(e,D.toUint8Array(a))}}});v(this,"messageListener",(e,n)=>{try{const o=D.createEncoder(),r=Ce.createDecoder(n),c=Ce.readVarUint(r);switch(c){case me:D.writeVarUint(o,me),Oe.readSyncMessage(r,o,this,null),D.length(o)>1&&(this.ensureDataStructure(),this.send(e,D.toUint8Array(o)));break;case _e:{se.applyAwarenessUpdate(this.awareness,Ce.readVarUint8Array(r),e);break}default:A.warn(`Unsupported messageType ${c}`)}}catch(o){A.error(o)}this.save()});this.options=e,w.existsSync(this.draftYjsFilePath)&&F.applyUpdate(this,w.readFileSync(this.draftYjsFilePath)),this.syncedStore=xt.reactive(Y.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{},routeIds:[],routes:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new se.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const n=g.join(ne,e),o=g.join(ne,`@del-${e}`);w.renameSync(n,o)}catch(n){A.error("Failed to safe delete project state dir:",n)}}static get projectIds(){return De.globSync("*/",{cwd:ne,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>V.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let n=this.sharedInstances.get(e);return n||(n=new V({path:g.join(ne,e)}),this.sharedInstances.set(e,n),n)}destroy(){this.conns.forEach((e,n)=>this.closeConn(n)),this.awareness.destroy(),super.destroy()}initObserver(){const e=r=>{r.observeDeep(c=>{c.some(a=>a.changes.keys.has("updatedAt")||a.changes.keys.has("publishedAt"))||r.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(r=>{const c=Y.getYjsValue(this.syncedStore.pages[r]);c&&c instanceof F.Map&&e(c)});const n=Y.getYjsValue(this.syncedStore.pages);n&&n instanceof F.Map&&n.observe(r=>{r.changes.keys.forEach((c,a)=>{if(c.action==="add"){const u=Y.getYjsValue(this.syncedStore.pages[a]);u&&u instanceof F.Map&&e(u)}})}),this.syncedStore.routes&&Object.keys(this.syncedStore.routes).forEach(r=>{var a;const c=Y.getYjsValue((a=this.syncedStore.routes)==null?void 0:a[r]);c&&c instanceof F.Map&&e(c)});const o=Y.getYjsValue(this.syncedStore.routes);o&&o instanceof F.Map&&o.observe(r=>{r.changes.keys.forEach((c,a)=>{var u;if(c.action==="add"){const l=Y.getYjsValue((u=this.syncedStore.routes)==null?void 0:u[a]);l&&l instanceof F.Map&&e(l)}})})}get draftYjsFilePath(){return g.join(this.options.path,"draft.yjs")}async getState(e){var n,o,r,c;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Be(this.getPublishDir(e),{includeResources:!0})??xs(),!((o=(n=this.states[e])==null?void 0:n.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Le.env.languages.map(u=>({locale:u.code,name:u.name}));this.states[e].config.defaultLocale=(c=a[0])==null?void 0:c.locale}return{...this.states[e],resources:await Te().then(async a=>{var p,i,y,P;const{pages:u,components:l}=ns.default(a,"pages","components");let d=l;const h=g.basename(this.options.path),b=await H.findByPk(h);if(b!=null&&b.useAllResources)d=l;else{const R=(await Pe.findAll({where:{projectId:h}})).map(B=>B.componentId);d=Object.fromEntries(Object.entries(l||{}).filter(([B])=>R.includes(B)))}return Object.keys(((i=(p=this.states[e])==null?void 0:p.resources)==null?void 0:i.components)||{}).length>0&&(d={...d,...(P=(y=this.states[e])==null?void 0:y.resources)==null?void 0:P.components}),{pages:u,components:d}}).catch(()=>({}))}}async setState(e,n){const o=await mt(n,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);w.mkdirSync(g.dirname(r),{recursive:!0}),w.rmSync(r,{force:!0,recursive:!0}),w.renameSync(o,r),this.states[e]=n}getPublishDir(e){return g.join(this.options.path,e)}static async pageUrlMap(e){var r;const{projectIds:n}=this,o={};for(const c of n){const a=await H.findByPk(c);if(!a)continue;const u=await V.shared(c).getState(e),l=os.default(I.default.env.languages.map(d=>d.code),u.supportedLocales.map(d=>d.locale));if(e==="draft")for(const d of u.routeIds||[]){const h=(r=u==null?void 0:u.routes)==null?void 0:r[d];if(!h)continue;const b=h.path,p=a.slug||c,i={projectId:c,projectSlug:p,pageSlug:b,pageId:h.displayTemplateId||"",routeId:d,defaultLocale:l==null?void 0:l[0],locales:l,publishedAt:u.config.publishedAt,isPublic:h.isPublic};p&&(o[k.joinURL("/",p,b)]={...i,shouldRedirect:!0,mainPage:!0}),o[k.joinURL("/",c,b)]={...i,shouldRedirect:!0,mainPage:!0};for(const y of l){const P={...i,locale:y};o[k.joinURL("/",y,c,b)]=P,p&&(o[k.joinURL("/",y,p,b)]=P)}}for(const d of u.pageIds){const h=u.pages[d];if(!h||e==="production"&&!h.isPublic)continue;const b=h.slug,p=a.slug||c,i={projectId:c,projectSlug:p,pageSlug:b,pageId:d,defaultLocale:l==null?void 0:l[0],locales:l,publishedAt:u.config.publishedAt,isPublic:h.isPublic,templateConfig:h.templateConfig};p&&(o[k.joinURL("/",p,b)]={...i,shouldRedirect:!0,mainPage:!0}),o[k.joinURL("/",c,b)]={...i,shouldRedirect:!0,mainPage:!0};for(const y of l){const P={...i,locale:y};o[k.joinURL("/",y,c,b)]=P,p&&(o[k.joinURL("/",y,p,b)]=P)}}}return o}getDocumentSize(){return F.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[n,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:n,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};v(V,"INSTANCE_TTL",30*60*1e3),v(V,"sharedInstances",new Ue.LRUCache({max:100,ttl:V.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let ce=V;function pt(){return w.mkdtempSync(g.join(I.default.env.dataDir,"tmp-"))}function be(t,s,e=[]){return Array.isArray(t)?t.flatMap((n,o)=>be(n,s,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([n,o])=>be(o,s,[...e,n])):s(t)?[e]:[]}function N(t){return t.filter(s=>s!=null)}async function ks(t,s,e){if(!t||!w.existsSync(t)||!w.lstatSync(t).isFile())return null;let n=e[t];return n||(n=(async()=>{var o;try{const r=(o=await As({filePath:t,fileName:s}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return A.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=n),n}const Rs=async(t,s)=>{const e=g.basename(t),n=await Me.call({name:qe,path:k.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const o=w.createWriteStream(s);await Vt.pipeline(n.data,o)}else throw new Error(`download asset failed ${n.status}`)},Ls=async(t,s)=>{await Promise.all(t.map(async e=>{try{await Rs(e,g.join(s,g.basename(e)))}catch(n){A.error(`Failed to export assets: ${e}, ${n}`)}}))};function ft(t){return $e.test(t)?[t]:re.test(t)?(We.lastIndex=0,Array.from(t.matchAll(We)).map(e=>e[1]).filter(e=>!!e)):[]}async function ge(t,s,e){const{getFilename:n,exportAssets:o}=e,r=g.join(s,n(t));if(w.mkdirSync(g.dirname(r),{recursive:!0}),w.writeFileSync(r,X.stringify(t)),o){const a=be(t,u=>typeof u=="string"&&($e.test(u)||re.test(u))).map(u=>{const l=Fe.default(t,u);return ft(l)}).flat().filter(Boolean);await Ls(a,g.dirname(r))}}const Qe=new Ue.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Xe(t,s,e){var a;const n=be(t,u=>typeof u=="string"&&($e.test(u)||re.test(u))),o=rs.default(2),r=n.map(u=>o(async()=>{try{const l=Fe.default(t,u),d=ft(l);for(const h of d){const b=g.basename(h),p=e.getFilePath(h,u),i=p?`${p}:${b}`:b,y=Qe.get(i);if(y){re.test(l)||Je.default(t,u,y);return}const P=await ks(p,b,s);P&&(re.test(l)||Je.default(t,u,P),Qe.set(i,P))}}catch(l){A.error(`Failed to process upload for path ${u.join(".")}:`,l.message||l.reason)}})),c=await Promise.allSettled(r);(a=e.onFinish)==null||a.call(e,c)}async function mt(t,{exportAssets:s,pageIds:e="all",componentIds:n="all",rawConfig:o,includeResources:r=!1,routeIds:c="all"}={}){var ee,S,f,E,j,z,O,U,J,pe,te,fe;const a=e==="all"?t.pageIds:e,u=ae.getComponentDependencies({state:t,pageIds:a,componentIds:n==="all"?Object.keys(t.components):n}),l=c==="all"?t.routeIds:c,d=(m,T)=>{var _;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,llmConfig:m.llmConfig,component:m.component,config:m.config,visibility:m.visibility,properties:((_=m.locales)==null?void 0:_[T])??{}}},h=(m,T)=>{var _;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,templateConfig:m.templateConfig,meta:((_=m.locales)==null?void 0:_[T])??{},sections:N(m.sectionIds.map(G=>{const q=m.sections[G];return q&&d(q,T)}))}},b=m=>({id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,path:m.path,handler:m.handler,isPublic:m.isPublic??!0,params:m.params??[],enabledGenerate:m.enabledGenerate??!1,displayTemplateId:m.displayTemplateId,dataSource:m.dataSource}),p=N(l.map(m=>{const T=t.routes[m];return T&&b(T)})),i=N(t.supportedLocales.map(m=>m.locale).flatMap(m=>a.map(T=>{const _=t.pages[T];return _&&{locale:m,slug:_.slug,page:h(_,m)}}))),y=pt(),P=g.join(y,"pages");w.mkdirSync(P,{recursive:!0});const $=g.join(y,"components");w.mkdirSync($,{recursive:!0});const R=g.join(y,"routes");w.mkdirSync(R,{recursive:!0});for(const{locale:m,slug:T,page:_}of i)await ge(_,P,{getFilename:()=>`${we(T)||"index"}.${m}.yml`,exportAssets:s});for(const m of p)await ge(m,R,{getFilename:()=>`${we(m.path)||"index"}.yml`,exportAssets:s});for(const m of u){const T=(ee=t.components[m])==null?void 0:ee.data;T&&await ge(T,$,{getFilename:_=>`${_.name||"unnamed"}.${_.id}.yml`,exportAssets:s})}const Q=g.join(y,".blocklet/pages/pages.config.yml");w.mkdirSync(g.dirname(Q),{recursive:!0});const B={pages:N(a.map(m=>{const T=t.pages[m];return T&&{id:m,slug:T.slug}})),routes:N(l.map(m=>{const T=t.routes[m];return T&&{id:m,path:T.path}})),components:N(u.map(m=>{var _;const T=(_=t.components[m])==null?void 0:_.data;return T&&{id:m,name:T.name}})),...r?{resources:{components:N(Object.keys(((S=t.resources)==null?void 0:S.components)||{}).filter(m=>u.includes(m)).map(m=>{var T,_,G,q;return{id:m,name:(q=(G=(_=(T=t.resources)==null?void 0:T.components)==null?void 0:_[m])==null?void 0:G.component)==null?void 0:q.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};w.writeFileSync(Q,X.stringify(B));const de=g.join(y,"config.source.json");if(o&&w.writeFileSync(de,JSON.stringify(o)),r){const m=g.join(y,"resources"),T=g.join(m,"components");w.mkdirSync(T,{recursive:!0});for(const q of Object.keys(((f=t==null?void 0:t.resources)==null?void 0:f.components)??{}).filter(M=>u.includes(M))){const M=(z=(j=(E=t.resources)==null?void 0:E.components)==null?void 0:j[q])==null?void 0:z.component;M&&await ge(M,T,{getFilename:K=>`${K.name||"unnamed"}.${K.id}.yml`,exportAssets:s})}const _=g.join(y,"chunks");w.mkdirSync(_,{recursive:!0});const{chunks:G}=await Te();for(const q of Object.keys(((O=t==null?void 0:t.resources)==null?void 0:O.components)??{}).filter(M=>u.includes(M))){const M=(pe=(J=(U=t.resources)==null?void 0:U.components)==null?void 0:J[q])==null?void 0:pe.component;if(M&&((te=M.renderer)==null?void 0:te.type)==="react-component"){const K=((fe=M.renderer)==null?void 0:fe.chunks)??[];if((K==null?void 0:K.length)>0)for(const Ae of K){const ze=g.join(_,Ae),je=G==null?void 0:G[Ae];try{je&&w.existsSync(je)&&!w.existsSync(ze)&&w.copyFileSync(je,ze)}catch(wt){A.error(`copy chunk ${Ae} error`,wt.message)}}}}}return y}async function Be(t,{importAssets:s,includeResources:e}={}){var r,c,a,u;if(!w.existsSync(t))return null;let n,o=!1;try{w.lstatSync(t).isDirectory()?n=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,n=pt(),await Ht.x({file:t,C:n}));const l=De.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),d=l&&g.join(g.dirname(l),"../../pages"),h=l&&g.join(g.dirname(l),"../../components"),b=l&&g.join(g.dirname(l),"../../chunks"),p=l&&g.join(g.dirname(l),"../../routes");if(!l)return null;const i=X.parse(w.readFileSync(l).toString()),y=(S,f,E)=>{let j=g.join(S,`${f}${E?`.${E}`:""}.yml`);return(!w.existsSync(j)||!w.lstatSync(j).isFile())&&(j=g.join(S,f,`index${E?`.${E}`:""}.yml`),!w.existsSync(j)||!w.lstatSync(j))?null:X.parse(w.readFileSync(j).toString())},P=(S,f)=>{try{const E=De.globSync(`*.${f}.yml`,{cwd:S,absolute:!0})[0];return E?X.parse(w.readFileSync(E).toString()):null}catch(E){A.error("parse component error",E)}return null},$=(S,f)=>{let E=g.join(S,`${f}.yml`);return(!w.existsSync(E)||!w.lstatSync(E).isFile())&&(E=g.join(S,f,"index.yml"),!w.existsSync(E)||!w.lstatSync(E))?null:X.parse(w.readFileSync(E).toString())},R=N(i.pages.map(({slug:S})=>{var z;const f=N(i.supportedLocales.map(({locale:O})=>{const U=d?y(d,we(S),O):void 0;if(U)return{locale:O,page:U};const J=d?y(d,S,O):void 0;return J&&{locale:O,page:J}})),E=(z=f[0])==null?void 0:z.page;if(!E)return null;const j=E.sections.map(O=>{const U=O.id||ye();return{id:U,component:O.component,config:O.config,name:O.name,isTemplateSection:O.isTemplateSection??!1,templateDescription:O.templateDescription,llmConfig:O.llmConfig,visibility:O.visibility,locales:Object.fromEntries(N(f.map(({locale:J,page:pe})=>{const te=pe.sections.find(fe=>fe.id===U);return te&&[J,te.properties]})))}});return{id:E.id||ye(),createdAt:E.createdAt,updatedAt:E.updatedAt,publishedAt:E.publishedAt,isPublic:E.isPublic??!0,templateConfig:E.templateConfig,slug:S,sections:Object.fromEntries(j.map(O=>[O.id,O])),sectionIds:j.map(O=>O.id),locales:Object.fromEntries(f.map(({locale:O,page:U})=>[O,U.meta]))}})),Q=N(((r=i==null?void 0:i.routes)==null?void 0:r.map(({path:S})=>{const f=p?$(p,we(S)):void 0;return{...f,id:(f==null?void 0:f.id)||ye(),createdAt:(f==null?void 0:f.createdAt)??new Date().toISOString(),updatedAt:(f==null?void 0:f.updatedAt)??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:(f==null?void 0:f.path)??`/${f==null?void 0:f.id}`,params:f==null?void 0:f.params,handler:(f==null?void 0:f.handler)??"Pages Kit",isPublic:(f==null?void 0:f.isPublic)??!0,enabledGenerate:(f==null?void 0:f.enabledGenerate)??!1,displayTemplateId:(f==null?void 0:f.displayTemplateId)??void 0,dataSource:(f==null?void 0:f.dataSource)??{}}}))??[]),B=h?N(((c=i.components)==null?void 0:c.map(({id:S})=>P(h,S)))??[]):[];if(s){const S=(...f)=>{A.info(`[${o?g.basename(t):g.basename(g.join(t,"../../../../"))}] importAssets:`,...f)};try{S("wait image-bin api ready"),await is.default({resources:[`${Me.getComponentWebEndpoint(ls)}/api/sdk/uploads`],validateStatus:j=>j>=200&&j<=500}),S("image-bin api is ready");const f={},E={};S("start to upload assets"),await Promise.allSettled([Xe(B,f,{getFilePath:j=>h&&g.join(h,j),onFinish:j=>{S(`upload ${j.length} component assets`)}}),Xe(R,E,{getFilePath:(j,z)=>{const O=Fe.default(R,z.slice(0,1));return d&&g.join(d,g.dirname(O.slug),j)},onFinish:j=>{S(`upload ${j.length} page assets`)}})]),S("upload assets done"),global.gc&&global.gc()}catch(f){S("Error during asset import:",f)}}const de={};if(e){const S=l&&g.join(g.dirname(l),"../../resources/components"),f=N(((u=(a=i.resources)==null?void 0:a.components)==null?void 0:u.map(({id:E})=>P(S,E)))??[]);f.length>0&&(de.components=Object.fromEntries(f.map((E,j)=>[E.id,{index:j,component:E}])))}const ee={};if(b&&w.existsSync(b)){const S=w.readdirSync(b);for(const f of S)ee[f]=g.join(b,f)}return{supportedLocales:i.supportedLocales,pageIds:R.map(S=>S.id),components:Object.fromEntries(B.map((S,f)=>[S.id,{index:f,data:S}])),pages:Object.fromEntries(R.map(S=>[S.id,S])),config:i.config||{},resources:de,chunks:ee,routeIds:Q.map(S=>S.id),routes:Object.fromEntries(Q.map(S=>[S.id,S]))}}finally{o&&n&&w.rmSync(n,{force:!0,recursive:!0})}}function ve(t,s,e){var o,r,c,a,u,l;const n={...st.default(t),id:s.id,slug:s.path,createdAt:s.createdAt,updatedAt:s.updatedAt,publishedAt:s.publishedAt,isPublic:s.isPublic};for(const d of e.supportedLocales)if(s.dataSource){const h=((c=(r=(o=s.dataSource.pathDataMappings)==null?void 0:o[s.id])==null?void 0:r.dataCache)==null?void 0:c[d.locale])??((l=(u=(a=s.dataSource.pathDataMappings)==null?void 0:a[s.id])==null?void 0:u.dataCache)==null?void 0:l[e.config.defaultLocale||"en"]);if(!h)continue;Dt.setPageDataSource(n,e,d.locale,h)}return n}async function Ne(t,s,{routes:e,mergeMode:n="byUpdateTime",deleteRoutes:o=!1,publishMode:r=void 0}={}){var b;try{r&&it(r)}catch(p){A.error("clear preload page cache error",{error:p})}const{pages:c,pageIds:a,routeIds:u,routes:l,supportedLocales:d}=t;if(r==="production"){for(const p of e??u??[]){const i=l==null?void 0:l[p];if(!i){const P=s.pageIds.indexOf(p);P!==-1&&o&&(s.pageIds.splice(P,1),delete s.pages[p]);continue}if(!i.displayTemplateId)continue;const y=c[i.displayTemplateId];if(y)if(s.pageIds.includes(i.id)){if(n==="replace")s.pages[i.id]=ve(y,i,t);else if(n==="byUpdateTime"){const P=s.pages[i.id];(!P||i.updatedAt&&i.updatedAt>P.updatedAt)&&(s.pages[i.id]=ve(y,i,t))}}else s.pageIds.push(i.id),s.pages[i.id]=ve(y,i,t)}if(o&&!e)for(const p of s.pageIds)(b=t.routeIds)!=null&&b.includes(p)||delete s.pages[p],s.pageIds=[...s.pageIds].filter(i=>{var y;return(y=t.routeIds)==null?void 0:y.includes(i)})}else{for(const p of a){const i=c[p];if(i)if(s.pageIds.includes(i.id)){if(n==="replace")s.pages[i.id]=i;else if(n==="byUpdateTime"){const y=s.pages[i.id];(!y||i.updatedAt&&i.updatedAt>y.updatedAt)&&(s.pages[i.id]=i)}}else s.pageIds.push(i.id),s.pages[i.id]=i}for(const p of u){const i=l[p];if(i)if(s.pageIds.includes(i.id)){if(n==="replace")s.routes[i.id]=i;else if(n==="byUpdateTime"){const y=s.routes[i.id];(!y||i.updatedAt&&i.updatedAt>y.updatedAt)&&(s.routes[i.id]=i)}}else s.routeIds.push(i.id),s.routes[i.id]=i}}if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(...st.default(d)),o)for(const p of Object.keys(s.components))delete s.components[p];let h=JSON.parse(JSON.stringify(t.components));h=Object.fromEntries(await Promise.all(Object.entries(h).map(async([p,i])=>{const y=await gt(i==null?void 0:i.data);return[p,{...i,data:y}]}))),Object.assign(s.components,h),Object.assign(s.config,JSON.parse(JSON.stringify(t.config))),s.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const gt=W.memoize(async t=>{var s;if(!ss.default(t==null?void 0:t.properties))return t;if(((s=t==null?void 0:t.renderer)==null?void 0:s.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const n=await dt(e,"PROPERTIES_SCHEMA",t.id);n&&n.length>0&&t&&(t.properties={},n.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(n){A.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:n})}}return t},{keyGenerator:t=>{var c;const s=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",n=((c=t==null?void 0:t.renderer)==null?void 0:c.type)||"",o=(t==null?void 0:t.properties)||{},r=Ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",s,e,n,r])},lruOptions:{max:100,ttl:1e3*60*60}});let Ee,Z,Ge,Ve,He;function ht(){return Ee=(async()=>{const t=Me.getResources({types:[{did:qe,type:ke},{did:Ts,type:ke}]});Z=(await Promise.all(t.map(async e=>{const n=e.path?await Be(e.path,{importAssets:!1}):void 0;return n?{blockletId:e.did,state:n,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Ge=Z.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:n.blockletId}]:[]))),{});const s=Z.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.components).map(o=>[o.data.id,{blockletId:n.blockletId,component:o.data}]))),{});Ve=Object.fromEntries(await Promise.all(Object.entries(s).map(async([e,n])=>{const o=await gt(n.component);return[e,{...n,component:o}]}))),He=Z.reduce((e,n)=>Object.assign(e,n.state.chunks),{})})(),Ee}function yt(t){const s=nt.default(async()=>{await ht().catch(e=>{A.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:Z,pages:Ge,components:Ve,chunks:He}))},3e3,{leading:!1,trailing:!0});return s(),I.default.events.on(I.default.Events.componentAdded,s),I.default.events.on(I.default.Events.componentRemoved,s),I.default.events.on(I.default.Events.componentStarted,s),I.default.events.on(I.default.Events.componentStopped,s),I.default.events.on(I.default.Events.componentUpdated,s),I.default.events.on(Re,s),()=>{I.default.events.off(I.default.Events.componentAdded,s),I.default.events.off(I.default.Events.componentRemoved,s),I.default.events.off(I.default.Events.componentStarted,s),I.default.events.off(I.default.Events.componentStopped,s),I.default.events.off(I.default.Events.componentUpdated,s),I.default.events.off(Re,s)}}const St=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),Se=globalThis;var Ze;(Ze=Se[St])==null||Ze.call(Se);Se[St]=yt(async({pages:t,components:s})=>{const{projectIds:e}=ce;A.info(`start update resource states projects(${e.length})`,e),await Promise.race([new Promise(n=>{setTimeout(()=>{n({})},30*1e3)}),Promise.all(e.map(async n=>{const o=ce.shared(n);o.syncedStore.resources.pages=t;const r=await H.findByPk(n);if(r!=null&&r.useAllResources)o.syncedStore.resources.components=s;else{const a=(await Pe.findAll({where:{projectId:n}})).map(l=>l.componentId),u=Object.fromEntries(Object.entries(s||{}).filter(([l])=>a.includes(l)));o.syncedStore.resources.components=u}A.info(`update [${n}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(n=>{A.error("update resource states failed:",n)})});async function Ns(){A.info("trigger reload all project resource"),I.default.events.emit(Re)}async function Te({ensureLoaded:t=!0}={}){return t&&(Ee??(Ee=ht()),await Ee),{states:Z,pages:Ge,components:Ve,chunks:He}}exports.COMPONENT_DID=qe;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=rt;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=xe;exports.PUBLISH_MODES=Ds;exports.Project=H;exports.RESOURCE_TYPE=ke;exports.SITE_STATE_PATH=ne;exports.STATE_MODES=vs;exports.SiteState=ce;exports.clearPreloadComponentsCache=at;exports.clearPreloadComponentsCacheByMode=it;exports.fromPackage=Be;exports.getComponentFromState=ie;exports.getComponentFromStateByName=Es;exports.getExportSchemaValueFromCode=dt;exports.getMultiTenantAllProjectAccessPassports=ps;exports.getPreloadComponent=lt;exports.getPreloadComponents=Ss;exports.getPreloadComponentsCacheKey=ct;exports.getResourceStates=Te;exports.initPackResourceStates=yt;exports.isMultiTenant=ds;exports.logger=A;exports.mergeState=Ne;exports.nextId=ye;exports.toPackage=mt;exports.triggerReloadAllProjectResource=Ns;
|
|
57
|
+
`,filename:`${e}.js`,functionName:`get${s}SchemaWrapper`})}catch(o){return A.error(`获取 ${s} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,s,e)=>{const n=Ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",n,s,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Ts="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",xe="page",ke="trigger-reload-project-resource",qe=Ts,Ps="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM",{uploadToMediaKit:As}=require("@blocklet/uploader-server"),ye=Bt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),$e=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,re=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,We=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Os=1e4,js=3e4,me=0,Ce=1,_s=0,Cs=1,Le=b.default,ne=g.join(process.env.BLOCKLET_DATA_DIR,"site-state"),vs=["production","draft"],Ds=["production"];function we(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function Rs(){var e;const t=Le.env.languages.map(n=>({locale:n.code,name:n.name})),s=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},routeIds:[],routes:{},components:{},supportedLocales:t,config:{defaultLocale:s},resources:{}}}const V=class V extends F.Doc{constructor(e){super();v(this,"states",{});v(this,"syncedStore");v(this,"conns",new Map);v(this,"awareness");v(this,"awarenessChangeHandler",({added:e,updated:n,removed:o},r)=>{const c=e.concat(n,o);if(r!==null){const l=this.conns.get(r);l&&(e.forEach(d=>{l.add(d)}),o.forEach(d=>{l.delete(d)}))}const a=D.createEncoder();D.writeVarUint(a,Ce),D.writeVarUint8Array(a,se.encodeAwarenessUpdate(this.awareness,c));const u=D.toUint8Array(a);this.conns.forEach((l,d)=>this.send(d,u))});v(this,"updateHandler",e=>{const n=D.createEncoder();D.writeVarUint(n,me),je.writeUpdate(n,e);const o=D.toUint8Array(n);this.conns.forEach((r,c)=>this.send(c,o))});v(this,"ensureDataStructure",()=>{var c;const{supportedLocales:e,pages:n,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(n));let u=0;for(;u<o.length;){const l=o[u];a.has(l)?(a.delete(l),u++):o.splice(u,1)}}e.splice(0,e.length),e.push(...Le.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(c=e[0])==null?void 0:c.locale;{let a=0;const u=new Set;for(;a<e.length;){const{locale:l}=e[a];u.has(l)?e.splice(a,1):(a++,u.add(l))}}});v(this,"send",(e,n)=>{e.readyState!==_s&&e.readyState!==Cs&&this.closeConn(e);try{e.send(n,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});v(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const n=this.conns.get(e);this.conns.delete(e),n&&se.removeAwarenessStates(this.awareness,Array.from(n),null)}e.close()});v(this,"autoSave",nt.default(()=>{w.mkdirSync(g.dirname(this.draftYjsFilePath),{recursive:!0}),w.writeFileSync(this.draftYjsFilePath,F.encodeStateAsUpdate(this))},Os));v(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});v(this,"publish",async({mode:e,routes:n})=>{var c;const o=await this.getState("draft"),r=await this.getState("production");await Ne(o,r,{routes:n,mergeMode:"replace",deleteRoutes:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const a of n||Object.keys(this.syncedStore.routes||{}))((c=this.syncedStore.routes)==null?void 0:c[a])!==void 0&&(this.syncedStore.routes[a].publishedAt=new Date().toISOString());await this.setState(e,r)});v(this,"mergeState",async(e,n)=>{var a,u,l;const o=JSON.parse(JSON.stringify(n));(a=e.config).fontFamily??(a.fontFamily={});const r=(u=o.config)==null?void 0:u.fontFamily,c=(l=e.config)==null?void 0:l.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(c==null?void 0:c.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(c==null?void 0:c.description),await new Promise((d,h)=>{this.transact(async()=>{try{const E=await Ne(e,n);d(E)}catch(E){h(E)}})})});v(this,"addConnection",e=>{if(this.conns.has(e))return;e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",r=>this.messageListener(e,new Uint8Array(r)));let n=!0;const o=setInterval(()=>{if(!n)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){n=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},js);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{n=!0});{const r=D.createEncoder();D.writeVarUint(r,me),je.writeSyncStep1(r,this),this.send(e,D.toUint8Array(r));const c=this.awareness.getStates();if(c.size>0){const a=D.createEncoder();D.writeVarUint(a,Ce),D.writeVarUint8Array(a,se.encodeAwarenessUpdate(this.awareness,Array.from(c.keys()))),this.send(e,D.toUint8Array(a))}}});v(this,"messageListener",(e,n)=>{try{const o=D.createEncoder(),r=_e.createDecoder(n),c=_e.readVarUint(r);switch(c){case me:D.writeVarUint(o,me),je.readSyncMessage(r,o,this,null),D.length(o)>1&&(this.ensureDataStructure(),this.send(e,D.toUint8Array(o)));break;case Ce:{se.applyAwarenessUpdate(this.awareness,_e.readVarUint8Array(r),e);break}default:A.warn(`Unsupported messageType ${c}`)}}catch(o){A.error(o)}this.save()});this.options=e,w.existsSync(this.draftYjsFilePath)&&F.applyUpdate(this,w.readFileSync(this.draftYjsFilePath)),this.syncedStore=Rt.reactive(Y.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{},routeIds:[],routes:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new se.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const n=g.join(ne,e),o=g.join(ne,`@del-${e}`);w.renameSync(n,o)}catch(n){A.error("Failed to safe delete project state dir:",n)}}static get projectIds(){return De.globSync("*/",{cwd:ne,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>V.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let n=this.sharedInstances.get(e);return n||(n=new V({path:g.join(ne,e)}),this.sharedInstances.set(e,n),n)}destroy(){this.conns.forEach((e,n)=>this.closeConn(n)),this.awareness.destroy(),super.destroy()}initObserver(){const e=r=>{r.observeDeep(c=>{c.some(a=>a.changes.keys.has("updatedAt")||a.changes.keys.has("publishedAt"))||r.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(r=>{const c=Y.getYjsValue(this.syncedStore.pages[r]);c&&c instanceof F.Map&&e(c)});const n=Y.getYjsValue(this.syncedStore.pages);n&&n instanceof F.Map&&n.observe(r=>{r.changes.keys.forEach((c,a)=>{if(c.action==="add"){const u=Y.getYjsValue(this.syncedStore.pages[a]);u&&u instanceof F.Map&&e(u)}})}),this.syncedStore.routes&&Object.keys(this.syncedStore.routes).forEach(r=>{var a;const c=Y.getYjsValue((a=this.syncedStore.routes)==null?void 0:a[r]);c&&c instanceof F.Map&&e(c)});const o=Y.getYjsValue(this.syncedStore.routes);o&&o instanceof F.Map&&o.observe(r=>{r.changes.keys.forEach((c,a)=>{var u;if(c.action==="add"){const l=Y.getYjsValue((u=this.syncedStore.routes)==null?void 0:u[a]);l&&l instanceof F.Map&&e(l)}})})}get draftYjsFilePath(){return g.join(this.options.path,"draft.yjs")}async getState(e){var n,o,r,c;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Be(this.getPublishDir(e),{includeResources:!0})??Rs(),!((o=(n=this.states[e])==null?void 0:n.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Le.env.languages.map(u=>({locale:u.code,name:u.name}));this.states[e].config.defaultLocale=(c=a[0])==null?void 0:c.locale}return{...this.states[e],resources:await Pe().then(async a=>{var p,i,y,T;const{pages:u,components:l}=ns.default(a,"pages","components");let d=l;const h=g.basename(this.options.path),E=await H.findByPk(h);if(E!=null&&E.useAllResources)d=l;else{const k=(await Te.findAll({where:{projectId:h}})).map(B=>B.componentId);d=Object.fromEntries(Object.entries(l||{}).filter(([B])=>k.includes(B)))}return Object.keys(((i=(p=this.states[e])==null?void 0:p.resources)==null?void 0:i.components)||{}).length>0&&(d={...d,...(T=(y=this.states[e])==null?void 0:y.resources)==null?void 0:T.components}),{pages:u,components:d}}).catch(()=>({}))}}async setState(e,n){const o=await mt(n,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);w.mkdirSync(g.dirname(r),{recursive:!0}),w.rmSync(r,{force:!0,recursive:!0}),w.renameSync(o,r),this.states[e]=n}getPublishDir(e){return g.join(this.options.path,e)}static async pageUrlMap(e){var r;const{projectIds:n}=this,o={};for(const c of n){const a=await H.findByPk(c);if(!a)continue;const u=await V.shared(c).getState(e),l=os.default(b.default.env.languages.map(d=>d.code),u.supportedLocales.map(d=>d.locale));if(e==="draft")for(const d of u.routeIds||[]){const h=(r=u==null?void 0:u.routes)==null?void 0:r[d];if(!h)continue;const E=h.path,p=a.slug||c,i={projectId:c,projectSlug:p,pageSlug:E,pageId:h.displayTemplateId||"",routeId:d,defaultLocale:l==null?void 0:l[0],locales:l,publishedAt:u.config.publishedAt,isPublic:h.isPublic};p&&(o[x.joinURL("/",p,E)]={...i,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",c,E)]={...i,shouldRedirect:!0,mainPage:!0};for(const y of l){const T={...i,locale:y};o[x.joinURL("/",y,c,E)]=T,p&&(o[x.joinURL("/",y,p,E)]=T)}}for(const d of u.pageIds){const h=u.pages[d];if(!h||e==="production"&&!h.isPublic)continue;const E=h.slug,p=a.slug||c,i={projectId:c,projectSlug:p,pageSlug:E,pageId:d,defaultLocale:l==null?void 0:l[0],locales:l,publishedAt:u.config.publishedAt,isPublic:h.isPublic,templateConfig:h.templateConfig};p&&(o[x.joinURL("/",p,E)]={...i,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",c,E)]={...i,shouldRedirect:!0,mainPage:!0};for(const y of l){const T={...i,locale:y};o[x.joinURL("/",y,c,E)]=T,p&&(o[x.joinURL("/",y,p,E)]=T)}}}return o}getDocumentSize(){return F.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[n,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:n,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};v(V,"INSTANCE_TTL",30*60*1e3),v(V,"sharedInstances",new Ue.LRUCache({max:100,ttl:V.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let ce=V;function pt(){return w.mkdtempSync(g.join(b.default.env.dataDir,"tmp-"))}function Ee(t,s,e=[]){return Array.isArray(t)?t.flatMap((n,o)=>Ee(n,s,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([n,o])=>Ee(o,s,[...e,n])):s(t)?[e]:[]}function N(t){return t.filter(s=>s!=null)}async function xs(t,s,e){if(!t||!w.existsSync(t)||!w.lstatSync(t).isFile())return null;let n=e[t];return n||(n=(async()=>{var o;try{const r=(o=await As({filePath:t,fileName:s}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return A.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=n),n}const ks=async(t,s)=>{const e=g.basename(t),n=await Me.call({name:qe,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const o=w.createWriteStream(s);await Vt.pipeline(n.data,o)}else throw new Error(`download asset failed ${n.status}`)},Ls=async(t,s)=>{await Promise.all(t.map(async e=>{try{await ks(e,g.join(s,g.basename(e)))}catch(n){A.error(`Failed to export assets: ${e}, ${n}`)}}))};function ft(t){return $e.test(t)?[t]:re.test(t)?(We.lastIndex=0,Array.from(t.matchAll(We)).map(e=>e[1]).filter(e=>!!e)):[]}async function ge(t,s,e){const{getFilename:n,exportAssets:o}=e,r=g.join(s,n(t));if(w.mkdirSync(g.dirname(r),{recursive:!0}),w.writeFileSync(r,X.stringify(t)),o){const a=Ee(t,u=>typeof u=="string"&&($e.test(u)||re.test(u))).map(u=>{const l=Fe.default(t,u);return ft(l)}).flat().filter(Boolean);await Ls(a,g.dirname(r))}}const Qe=new Ue.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Xe(t,s,e){var a;const n=Ee(t,u=>typeof u=="string"&&($e.test(u)||re.test(u))),o=rs.default(2),r=n.map(u=>o(async()=>{try{const l=Fe.default(t,u),d=ft(l);for(const h of d){const E=g.basename(h),p=e.getFilePath(h,u),i=p?`${p}:${E}`:E,y=Qe.get(i);if(y){re.test(l)||Je.default(t,u,y);return}const T=await xs(p,E,s);T&&(re.test(l)||Je.default(t,u,T),Qe.set(i,T))}}catch(l){A.error(`Failed to process upload for path ${u.join(".")}:`,l.message||l.reason)}})),c=await Promise.allSettled(r);(a=e.onFinish)==null||a.call(e,c)}async function mt(t,{exportAssets:s,pageIds:e="all",componentIds:n="all",rawConfig:o,includeResources:r=!1,routeIds:c="all"}={}){var ee,S,f,I,O,z,j,U,J,pe,te,fe;const a=e==="all"?t.pageIds:e,u=ae.getComponentDependencies({state:t,pageIds:a,componentIds:n==="all"?Object.keys(t.components):n}),l=c==="all"?t.routeIds:c,d=(m,P)=>{var C;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,llmConfig:m.llmConfig,component:m.component,config:m.config,visibility:m.visibility,properties:((C=m.locales)==null?void 0:C[P])??{}}},h=(m,P)=>{var C;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,templateConfig:m.templateConfig,meta:((C=m.locales)==null?void 0:C[P])??{},sections:N(m.sectionIds.map(G=>{const q=m.sections[G];return q&&d(q,P)}))}},E=m=>({id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,path:m.path,handler:m.handler,isPublic:m.isPublic??!0,params:m.params??[],enabledGenerate:m.enabledGenerate??!1,displayTemplateId:m.displayTemplateId,dataSource:m.dataSource}),p=N(l.map(m=>{const P=t.routes[m];return P&&E(P)})),i=N(t.supportedLocales.map(m=>m.locale).flatMap(m=>a.map(P=>{const C=t.pages[P];return C&&{locale:m,slug:C.slug,page:h(C,m)}}))),y=pt(),T=g.join(y,"pages");w.mkdirSync(T,{recursive:!0});const $=g.join(y,"components");w.mkdirSync($,{recursive:!0});const k=g.join(y,"routes");w.mkdirSync(k,{recursive:!0});for(const{locale:m,slug:P,page:C}of i)await ge(C,T,{getFilename:()=>`${we(P)||"index"}.${m}.yml`,exportAssets:s});for(const m of p)await ge(m,k,{getFilename:()=>`${we(m.path)||"index"}.yml`,exportAssets:s});for(const m of u){const P=(ee=t.components[m])==null?void 0:ee.data;P&&await ge(P,$,{getFilename:C=>`${C.name||"unnamed"}.${C.id}.yml`,exportAssets:s})}const Q=g.join(y,".blocklet/pages/pages.config.yml");w.mkdirSync(g.dirname(Q),{recursive:!0});const B={pages:N(a.map(m=>{const P=t.pages[m];return P&&{id:m,slug:P.slug}})),routes:N(l.map(m=>{const P=t.routes[m];return P&&{id:m,path:P.path}})),components:N(u.map(m=>{var C;const P=(C=t.components[m])==null?void 0:C.data;return P&&{id:m,name:P.name}})),...r?{resources:{components:N(Object.keys(((S=t.resources)==null?void 0:S.components)||{}).filter(m=>u.includes(m)).map(m=>{var P,C,G,q;return{id:m,name:(q=(G=(C=(P=t.resources)==null?void 0:P.components)==null?void 0:C[m])==null?void 0:G.component)==null?void 0:q.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};w.writeFileSync(Q,X.stringify(B));const de=g.join(y,"config.source.json");if(o&&w.writeFileSync(de,JSON.stringify(o)),r){const m=g.join(y,"resources"),P=g.join(m,"components");w.mkdirSync(P,{recursive:!0});for(const q of Object.keys(((f=t==null?void 0:t.resources)==null?void 0:f.components)??{}).filter(M=>u.includes(M))){const M=(z=(O=(I=t.resources)==null?void 0:I.components)==null?void 0:O[q])==null?void 0:z.component;M&&await ge(M,P,{getFilename:K=>`${K.name||"unnamed"}.${K.id}.yml`,exportAssets:s})}const C=g.join(y,"chunks");w.mkdirSync(C,{recursive:!0});const{chunks:G}=await Pe();for(const q of Object.keys(((j=t==null?void 0:t.resources)==null?void 0:j.components)??{}).filter(M=>u.includes(M))){const M=(pe=(J=(U=t.resources)==null?void 0:U.components)==null?void 0:J[q])==null?void 0:pe.component;if(M&&((te=M.renderer)==null?void 0:te.type)==="react-component"){const K=((fe=M.renderer)==null?void 0:fe.chunks)??[];if((K==null?void 0:K.length)>0)for(const Ae of K){const ze=g.join(C,Ae),Oe=G==null?void 0:G[Ae];try{Oe&&w.existsSync(Oe)&&!w.existsSync(ze)&&w.copyFileSync(Oe,ze)}catch(wt){A.error(`copy chunk ${Ae} error`,wt.message)}}}}}return y}async function Be(t,{importAssets:s,includeResources:e}={}){var r,c,a,u;if(!w.existsSync(t))return null;let n,o=!1;try{w.lstatSync(t).isDirectory()?n=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,n=pt(),await Ht.x({file:t,C:n}));const l=De.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),d=l&&g.join(g.dirname(l),"../../pages"),h=l&&g.join(g.dirname(l),"../../components"),E=l&&g.join(g.dirname(l),"../../chunks"),p=l&&g.join(g.dirname(l),"../../routes");if(!l)return null;const i=X.parse(w.readFileSync(l).toString()),y=(S,f,I)=>{let O=g.join(S,`${f}${I?`.${I}`:""}.yml`);return(!w.existsSync(O)||!w.lstatSync(O).isFile())&&(O=g.join(S,f,`index${I?`.${I}`:""}.yml`),!w.existsSync(O)||!w.lstatSync(O))?null:X.parse(w.readFileSync(O).toString())},T=(S,f)=>{try{const I=De.globSync(`*.${f}.yml`,{cwd:S,absolute:!0})[0];return I?X.parse(w.readFileSync(I).toString()):null}catch(I){A.error("parse component error",I)}return null},$=(S,f)=>{let I=g.join(S,`${f}.yml`);return(!w.existsSync(I)||!w.lstatSync(I).isFile())&&(I=g.join(S,f,"index.yml"),!w.existsSync(I)||!w.lstatSync(I))?null:X.parse(w.readFileSync(I).toString())},k=N(i.pages.map(({slug:S})=>{var z;const f=N(i.supportedLocales.map(({locale:j})=>{const U=d?y(d,we(S),j):void 0;if(U)return{locale:j,page:U};const J=d?y(d,S,j):void 0;return J&&{locale:j,page:J}})),I=(z=f[0])==null?void 0:z.page;if(!I)return null;const O=I.sections.map(j=>{const U=j.id||ye();return{id:U,component:j.component,config:j.config,name:j.name,isTemplateSection:j.isTemplateSection??!1,templateDescription:j.templateDescription,llmConfig:j.llmConfig,visibility:j.visibility,locales:Object.fromEntries(N(f.map(({locale:J,page:pe})=>{const te=pe.sections.find(fe=>fe.id===U);return te&&[J,te.properties]})))}});return{id:I.id||ye(),createdAt:I.createdAt,updatedAt:I.updatedAt,publishedAt:I.publishedAt,isPublic:I.isPublic??!0,templateConfig:I.templateConfig,slug:S,sections:Object.fromEntries(O.map(j=>[j.id,j])),sectionIds:O.map(j=>j.id),locales:Object.fromEntries(f.map(({locale:j,page:U})=>[j,U.meta]))}})),Q=N(((r=i==null?void 0:i.routes)==null?void 0:r.map(({path:S})=>{const f=p?$(p,we(S)):void 0;return{...f,id:(f==null?void 0:f.id)||ye(),createdAt:(f==null?void 0:f.createdAt)??new Date().toISOString(),updatedAt:(f==null?void 0:f.updatedAt)??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:(f==null?void 0:f.path)??`/${f==null?void 0:f.id}`,params:f==null?void 0:f.params,handler:(f==null?void 0:f.handler)??"Pages Kit",isPublic:(f==null?void 0:f.isPublic)??!0,enabledGenerate:(f==null?void 0:f.enabledGenerate)??!1,displayTemplateId:(f==null?void 0:f.displayTemplateId)??void 0,dataSource:(f==null?void 0:f.dataSource)??{}}}))??[]),B=h?N(((c=i.components)==null?void 0:c.map(({id:S})=>T(h,S)))??[]):[];if(s){const S=(...f)=>{A.info(`[${o?g.basename(t):g.basename(g.join(t,"../../../../"))}] importAssets:`,...f)};try{S("wait image-bin api ready"),await is.default({resources:[`${Me.getComponentWebEndpoint(ls)}/api/sdk/uploads`],validateStatus:O=>O>=200&&O<=500}),S("image-bin api is ready");const f={},I={};S("start to upload assets"),await Promise.allSettled([Xe(B,f,{getFilePath:O=>h&&g.join(h,O),onFinish:O=>{S(`upload ${O.length} component assets`)}}),Xe(k,I,{getFilePath:(O,z)=>{const j=Fe.default(k,z.slice(0,1));return d&&g.join(d,g.dirname(j.slug),O)},onFinish:O=>{S(`upload ${O.length} page assets`)}})]),S("upload assets done"),global.gc&&global.gc()}catch(f){S("Error during asset import:",f)}}const de={};if(e){const S=l&&g.join(g.dirname(l),"../../resources/components"),f=N(((u=(a=i.resources)==null?void 0:a.components)==null?void 0:u.map(({id:I})=>T(S,I)))??[]);f.length>0&&(de.components=Object.fromEntries(f.map((I,O)=>[I.id,{index:O,component:I}])))}const ee={};if(E&&w.existsSync(E)){const S=w.readdirSync(E);for(const f of S)ee[f]=g.join(E,f)}return{supportedLocales:i.supportedLocales,pageIds:k.map(S=>S.id),components:Object.fromEntries(B.map((S,f)=>[S.id,{index:f,data:S}])),pages:Object.fromEntries(k.map(S=>[S.id,S])),config:i.config||{},resources:de,chunks:ee,routeIds:Q.map(S=>S.id),routes:Object.fromEntries(Q.map(S=>[S.id,S]))}}finally{o&&n&&w.rmSync(n,{force:!0,recursive:!0})}}function ve(t,s,e){var o,r,c,a,u,l;const n={...st.default(t),id:s.id,slug:s.path,createdAt:s.createdAt,updatedAt:s.updatedAt,publishedAt:s.publishedAt,isPublic:s.isPublic};for(const d of e.supportedLocales)if(s.dataSource){const h=((c=(r=(o=s.dataSource.pathDataMappings)==null?void 0:o[s.id])==null?void 0:r.dataCache)==null?void 0:c[d.locale])??((l=(u=(a=s.dataSource.pathDataMappings)==null?void 0:a[s.id])==null?void 0:u.dataCache)==null?void 0:l[e.config.defaultLocale||"en"]);if(!h)continue;Dt.setPageDataSource(n,e,d.locale,h)}return n}async function Ne(t,s,{routes:e,mergeMode:n="byUpdateTime",deleteRoutes:o=!1,publishMode:r=void 0}={}){var E;try{r&&it(r)}catch(p){A.error("clear preload page cache error",{error:p})}const{pages:c,pageIds:a,routeIds:u,routes:l,supportedLocales:d}=t;if(r==="production"){for(const p of e??u??[]){const i=l==null?void 0:l[p];if(!i){const T=s.pageIds.indexOf(p);T!==-1&&o&&(s.pageIds.splice(T,1),delete s.pages[p]);continue}if(!i.displayTemplateId)continue;const y=c[i.displayTemplateId];if(y)if(s.pageIds.includes(i.id)){if(n==="replace")s.pages[i.id]=ve(y,i,t);else if(n==="byUpdateTime"){const T=s.pages[i.id];(!T||i.updatedAt&&i.updatedAt>T.updatedAt)&&(s.pages[i.id]=ve(y,i,t))}}else s.pageIds.push(i.id),s.pages[i.id]=ve(y,i,t)}if(o&&!e)for(const p of s.pageIds)(E=t.routeIds)!=null&&E.includes(p)||delete s.pages[p],s.pageIds=[...s.pageIds].filter(i=>{var y;return(y=t.routeIds)==null?void 0:y.includes(i)})}else{for(const p of a){const i=c[p];if(i)if(s.pageIds.includes(i.id)){if(n==="replace")s.pages[i.id]=i;else if(n==="byUpdateTime"){const y=s.pages[i.id];(!y||i.updatedAt&&i.updatedAt>y.updatedAt)&&(s.pages[i.id]=i)}}else s.pageIds.push(i.id),s.pages[i.id]=i}for(const p of u){const i=l[p];if(i)if(s.pageIds.includes(i.id)){if(n==="replace")s.routes[i.id]=i;else if(n==="byUpdateTime"){const y=s.routes[i.id];(!y||i.updatedAt&&i.updatedAt>y.updatedAt)&&(s.routes[i.id]=i)}}else s.routeIds.push(i.id),s.routes[i.id]=i}}if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(...st.default(d)),o)for(const p of Object.keys(s.components))delete s.components[p];let h=JSON.parse(JSON.stringify(t.components));h=Object.fromEntries(await Promise.all(Object.entries(h).map(async([p,i])=>{const y=await gt(i==null?void 0:i.data);return[p,{...i,data:y}]}))),Object.assign(s.components,h),Object.assign(s.config,JSON.parse(JSON.stringify(t.config))),s.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const gt=W.memoize(async t=>{var s;if(!ss.default(t==null?void 0:t.properties))return t;if(((s=t==null?void 0:t.renderer)==null?void 0:s.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const n=await dt(e,"PROPERTIES_SCHEMA",t.id);n&&n.length>0&&t&&(t.properties={},n.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(n){A.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:n})}}return t},{keyGenerator:t=>{var c;const s=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",n=((c=t==null?void 0:t.renderer)==null?void 0:c.type)||"",o=(t==null?void 0:t.properties)||{},r=Ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",s,e,n,r])},lruOptions:{max:100,ttl:1e3*60*60}});let be,Z,Ge,Ve,He;function ht(){return be=(async()=>{const t=Me.getResources({types:[{did:qe,type:xe},{did:Ps,type:xe}]});Z=(await Promise.all(t.map(async e=>{const n=e.path?await Be(e.path,{importAssets:!1}):void 0;return n?{blockletId:e.did,state:n,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Ge=Z.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:n.blockletId}]:[]))),{});const s=Z.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.components).map(o=>[o.data.id,{blockletId:n.blockletId,component:o.data}]))),{});Ve=Object.fromEntries(await Promise.all(Object.entries(s).map(async([e,n])=>{const o=await gt(n.component);return[e,{...n,component:o}]}))),He=Z.reduce((e,n)=>Object.assign(e,n.state.chunks),{})})(),be}function yt(t){const s=nt.default(async()=>{await ht().catch(e=>{A.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:Z,pages:Ge,components:Ve,chunks:He}))},3e3,{leading:!1,trailing:!0});return s(),b.default.events.on(b.default.Events.componentAdded,s),b.default.events.on(b.default.Events.componentRemoved,s),b.default.events.on(b.default.Events.componentStarted,s),b.default.events.on(b.default.Events.componentStopped,s),b.default.events.on(b.default.Events.componentUpdated,s),b.default.events.on(ke,s),()=>{b.default.events.off(b.default.Events.componentAdded,s),b.default.events.off(b.default.Events.componentRemoved,s),b.default.events.off(b.default.Events.componentStarted,s),b.default.events.off(b.default.Events.componentStopped,s),b.default.events.off(b.default.Events.componentUpdated,s),b.default.events.off(ke,s)}}const St=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),Se=globalThis;var Ze;(Ze=Se[St])==null||Ze.call(Se);Se[St]=yt(async({pages:t,components:s})=>{const{projectIds:e}=ce;A.info(`start update resource states projects(${e.length})`,e),await Promise.race([new Promise(n=>{setTimeout(()=>{n({})},30*1e3)}),Promise.all(e.map(async n=>{const o=ce.shared(n);o.syncedStore.resources.pages=t;const r=await H.findByPk(n);if(r!=null&&r.useAllResources)o.syncedStore.resources.components=s;else{const a=(await Te.findAll({where:{projectId:n}})).map(l=>l.componentId),u=Object.fromEntries(Object.entries(s||{}).filter(([l])=>a.includes(l)));o.syncedStore.resources.components=u}A.info(`update [${n}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(n=>{A.error("update resource states failed:",n)})});async function Ns(){A.info("trigger reload all project resource"),b.default.events.emit(ke)}async function Pe({ensureLoaded:t=!0}={}){return t&&(be??(be=ht()),await be),{states:Z,pages:Ge,components:Ve,chunks:He}}exports.COMPONENT_DID=qe;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=rt;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=Re;exports.PUBLISH_MODES=Ds;exports.Project=H;exports.RESOURCE_TYPE=xe;exports.SITE_STATE_PATH=ne;exports.STATE_MODES=vs;exports.SiteState=ce;exports.clearPreloadComponentsCache=at;exports.clearPreloadComponentsCacheByMode=it;exports.fromPackage=Be;exports.getComponentFromState=ie;exports.getComponentFromStateByName=bs;exports.getExportSchemaValueFromCode=dt;exports.getMultiTenantAllProjectAccessPassports=ps;exports.getPreloadComponent=lt;exports.getPreloadComponents=Ss;exports.getPreloadComponentsCacheKey=ct;exports.getResourceStates=Pe;exports.initPackResourceStates=yt;exports.isMultiTenant=ds;exports.logger=A;exports.mergeState=Ne;exports.nextId=ye;exports.toPackage=mt;exports.triggerReloadAllProjectResource=Ns;
|
package/lib/cjs/components.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@blocklet/pages-kit/builtin/utils");require("@blocklet/pages-kit/types");require("@blocklet/pages-kit/utils/property");require("@blocklet/quickjs");require("@blocklet/sdk/lib/config");require("lru-cache");require("node-fetch");require("ufo");require("crypto");const e=require("./chunks/site-state-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("@blocklet/pages-kit/builtin/utils");require("@blocklet/pages-kit/types");require("@blocklet/pages-kit/utils/property");require("@blocklet/quickjs");require("@blocklet/sdk/lib/config");require("lru-cache");require("node-fetch");require("ufo");require("crypto");const e=require("./chunks/site-state-C5t-5c6U.js");exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=e.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=e.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS;exports.clearPreloadComponentsCache=e.clearPreloadComponentsCache;exports.clearPreloadComponentsCacheByMode=e.clearPreloadComponentsCacheByMode;exports.getComponentFromState=e.getComponentFromState;exports.getComponentFromStateByName=e.getComponentFromStateByName;exports.getExportSchemaValueFromCode=e.getExportSchemaValueFromCode;exports.getPreloadComponent=e.getPreloadComponent;exports.getPreloadComponents=e.getPreloadComponents;exports.getPreloadComponentsCacheKey=e.getPreloadComponentsCacheKey;
|
package/lib/cjs/home.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("react/jsx-runtime");require("./chunks/state-oc52fQ0j.js");require("@arcblock/ux/lib/Locale/context");require("@arcblock/ux/lib/Result");require("@blocklet/pages-kit/builtin/page/header");require("@blocklet/pages-kit/contexts/color");require("@blocklet/pages-kit/utils/data-source");require("@blocklet/ui-react/lib/Header");require("@emotion/css");require("@emotion/react");require("@emotion/styled");require("@mui/material");require("ahooks");require("isomorphic-dompurify");require("lodash/cloneDeep");require("lodash/isEmpty");require("lodash/isEqual");require("react");require("react-helmet");require("react-router-dom");require("react-use");require("ufo");require("./chunks/array-DOclwySd.js");const e=require("./chunks/home-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("react/jsx-runtime");require("./chunks/state-oc52fQ0j.js");require("@arcblock/ux/lib/Locale/context");require("@arcblock/ux/lib/Result");require("@blocklet/pages-kit/builtin/page/header");require("@blocklet/pages-kit/contexts/color");require("@blocklet/pages-kit/utils/data-source");require("@blocklet/ui-react/lib/Header");require("@emotion/css");require("@emotion/react");require("@emotion/styled");require("@mui/material");require("ahooks");require("isomorphic-dompurify");require("lodash/cloneDeep");require("lodash/isEmpty");require("lodash/isEqual");require("react");require("react-helmet");require("react-router-dom");require("react-use");require("ufo");require("./chunks/array-DOclwySd.js");const e=require("./chunks/home-q1dzT-BZ.js");exports.HomeView=e.HomeView;exports.PageRoutes=e.PageRoutes;exports.PageView=e.PageView;exports.PageViewByPath=e.PageViewByPath;exports.PageViewWithDataSource=e.PageViewWithDataSource;exports.TranslucentHeader=e.TranslucentHeader;exports.default=e.Home;
|
package/lib/cjs/project-html.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";const
|
|
2
|
-
${
|
|
3
|
-
${
|
|
4
|
-
${
|
|
1
|
+
"use strict";const z=require("@arcblock/did-auth-storage-nedb"),D=require("@blocklet/sdk/lib/config"),G=require("@blocklet/sdk/lib/service/auth"),K=require("@blocklet/sdk/lib/wallet"),Q=require("@blocklet/sdk/lib/wallet-authenticator"),V=require("@blocklet/sdk/lib/wallet-handler"),P=require("path"),S=require("./chunks/site-state-C5t-5c6U.js"),A=require("@blocklet/crawler/middlewares"),X=require("@blocklet/pages-kit/types"),Y=require("@blocklet/pages-kit/utils/common"),Z=require("@blocklet/pages-kit/utils/preload"),F=require("@blocklet/sdk/lib/component"),ee=require("cheerio/slim"),te=require("express"),E=require("fs"),oe=require("lodash/get"),ne=require("mustache"),I=require("ufo"),u=o=>o&&o.__esModule?o:{default:o};function le(o){if(o&&o.__esModule)return o;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(t,e,a.get?a:{enumerable:!0,get:()=>o[e]})}}return t.default=o,Object.freeze(t)}const re=u(z),i=u(D),ce=u(G),se=u(K),ae=u(Q),ie=u(V),ue=u(P),L=le(ee),de=u(oe),pe=u(ne),fe=(o={})=>{const t={data:new Map,timers:new Map,set:(e,a,_=o.ttl||36e5)=>{o.max&&t.data.size>=o.max&&t.delete(t.data.keys().next().value),t.timers.has(e)&&clearTimeout(t.timers.get(e)),t.timers.set(e,setTimeout(()=>t.delete(e),_)),t.data.set(e,a)},get:e=>t.data.get(e),has:e=>t.data.has(e),delete:e=>(t.timers.has(e)&&clearTimeout(t.timers.get(e)),t.timers.delete(e),t.data.delete(e)),clear:()=>{t.data.clear();for(const e of t.timers.values())clearTimeout(e);t.timers.clear()}};return t},O=fe({max:1,ttl:1e3*30});se.default();const he=new ae.default;new ie.default({authenticator:he,tokenStorage:new re.default({dbPath:ue.default.join(i.default.env.dataDir,"auth.db")})});const me=new ce.default,ge=async()=>{try{const o=O.get("blockletInfo");if(o)return o;const{blocklet:t}=await me.getBlocklet();return O.set("blockletInfo",t),t}catch{return null}},we=["/assets/"],U=()=>[!0,"true"].includes(i.default.env.preferences.allowCrawler);function B(){U()?A.initCronCrawlBlocklet({time:"0 0 */12 * * *",options:{}}):A.cancelCronCrawlBlocklet()}B();i.default.events.on(i.default.Events.envUpdate,B);function _e({app:o,viteDevServer:t,state:e}){let a;if(t){const n=E.readFileSync(P.resolve(process.cwd(),"./index.html"),"utf-8");o.use(async(b,v,T)=>{const q=b.originalUrl;a=await t.transformIndexHtml(q,n),T()})}else a=E.readFileSync(P.resolve(process.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const _=te.Router();_.use((n,b,v)=>{if(n.headers["x-unique-record"]==="dial_http"){S.logger.info("[html] dial http request, return 200 status code"),b.status(200).send("ok");return}v()},A.initSEOMiddleware({autoReturnHtml:!0,allowCrawler:U})),_.get("/:path(*)?",async(n,b,v)=>{var M,$,W;if(we.some(c=>{var p;return(p=n.path)==null?void 0:p.startsWith(c)})){v();return}const T=performance.now(),q=()=>Math.round(performance.now()-T),H="production";let r,h,C=a;if(n.path.startsWith("/pages")){const c=n.params.lang,p=n.cookies.nf_lang,k=new Set([...i.default.env.languages.map(w=>w.code)]);let g=(c&&k.has(c)?c:void 0)||(k.has(p)?p:void 0)||[...k][0];if((!g||!((M=e.supportedLocales)!=null&&M.find(w=>w.locale===g)))&&(g=((W=($=e.supportedLocales)==null?void 0:$[0])==null?void 0:W.locale)||""),g){const w=[];Object.values(e.pages).forEach(s=>{const J=Object.values((s==null?void 0:s.sections)??{}).filter(f=>{var y;return f.component==="custom-component"&&((y=f.config)==null?void 0:y.componentId)}).map(f=>{var y,x;return{id:f.id,componentId:f.config.componentId,useCache:f.config.useCache,cacheDuration:f.config.cacheDuration,properties:(x=(y=f.locales)==null?void 0:y[g])==null?void 0:x.properties}});w.push(...J)});const N=new Promise(s=>{setTimeout(()=>{s({})},90*1e3)});try{await Promise.race([N,S.getPreloadComponents({mode:H,req:n,state:e,locale:g,instances:w,module:X.PreloadComponentScriptModule.UMD_FN}).then(s=>{s&&(h=Z.injectPreloadComponents(s))})])}catch(s){S.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements",s)}}}try{const c=(r==null?void 0:r.title)||i.default.env.appName,p=(r==null?void 0:r.description)||i.default.env.appDescription,k=I.withQuery(I.joinURL(i.default.env.appUrl,"/.well-known/service/blocklet/og.png"),{title:c,description:p});C=pe.default.render(a,{ogTitle:c,ogDescription:p,ogImage:be(r==null?void 0:r.image)||k,pagesPublishedAt:(e==null?void 0:e.config.publishedAt)||new Date().getTime()})}catch{}const l=e==null?void 0:e.config.fontFamily,R=n.query.mode==="draft"||n.url.includes("preview"),m=L.load(C);let d=r==null?void 0:r.backgroundColor;if(d&&Y.isMuiColorKey(d)){const c=await ge();d=de.default(c,`settings.theme.light.palette.${d}`,d)}m("head").find("#injected-head-elements").replaceWith(`
|
|
2
|
+
${d?`<meta name="theme-color" content="${d}" /><style>html,body,#app {background-color: ${d};}</style>`:""}
|
|
3
|
+
${l!=null&&l.title?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${l.title}&display=swap">`:""}
|
|
4
|
+
${l!=null&&l.description&&(l==null?void 0:l.description)!==(l==null?void 0:l.title)?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${l.description}&display=swap">`:""}
|
|
5
5
|
<script>
|
|
6
6
|
|
|
7
|
-
window.__PAGE_STATE__ = ${JSON.stringify(
|
|
7
|
+
window.__PAGE_STATE__ = ${JSON.stringify(e,null,0)}
|
|
8
8
|
|
|
9
9
|
document.querySelectorAll('link[rel="preload"][as="style"]').forEach(function (link) {
|
|
10
10
|
const l = document.createElement('link');
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
});
|
|
15
15
|
<\/script>
|
|
16
16
|
|
|
17
|
-
${
|
|
17
|
+
${R?`<script src="https://cdn.tailwindcss.com"><\/script>
|
|
18
18
|
<script>
|
|
19
19
|
window.tailwind.config = {
|
|
20
20
|
darkMode: "class",
|
|
21
21
|
};
|
|
22
22
|
<\/script>`:""}
|
|
23
|
-
`);const
|
|
23
|
+
`);const j=D.getBlockletJs();if(j&&m('script[src="__blocklet__.js"]').replaceWith(`<script>${j}<\/script>`),h!=null&&h.html&&m("head").find("#injected-html-elements").replaceWith(h.html),n.cachedHtml){const c=L.load(n.cachedHtml);m("body").html(c("body").html()||"")}C=m.html(),b.send(C),S.logger.info(`[html] render: ${n.path}, ${q()}ms`),m.root().children().remove(),C=null,r=null,h=null}),o.use(_)}function be(o){const t=F.getComponentMountPoint("image-bin");return t&&o&&!/^(https?:\/\/|\/)/.test(o)?i.default.env.appUrl+I.joinURL(t,"uploads",o):o}module.exports=_e;
|
package/lib/cjs/resources.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const c=require("./chunks/site-state-
|
|
1
|
+
"use strict";const c=require("./chunks/site-state-C5t-5c6U.js"),M=require("async_hooks"),U=require("express"),F=require("fs"),J=require("joi"),X=require("lodash/groupBy"),W=require("lodash/sortBy"),b=require("path"),$=require("@blocklet/sdk/lib/middlewares/auth"),G=require("@blocklet/sdk/lib/component"),y=t=>t&&t.__esModule?t:{default:t},l=y(F),I=y(J),D=y(X),K=y(W),k=y(b),v=y($);new M.AsyncLocalStorage;const Y=async(t,e,o)=>{var n,s,r,i;try{const{projectId:u}=t.params;if(!u)return o();const f=await c.Project.findByPk(u);if(!f)return e==null?void 0:e.status(404).json({error:"Project not found"});const _=(n=t.user)==null?void 0:n.did,h=((s=t.user)==null?void 0:s.role)||"UNKNOWN_ROLE";if(!_)return e==null?void 0:e.status(401).json({error:"Authentication required"});if(c.isMultiTenant()){const w=f.createdBy===_,a=(i=(r=c.getMultiTenantAllProjectAccessPassports())==null?void 0:r.includes)==null?void 0:i.call(r,h);if(!w&&!a)return e==null?void 0:e.status(403).json({error:"No permission to access this project in multi-tenant mode"})}else if(!["owner","admin","pagesEditor"].includes(h))return e==null?void 0:e.status(403).json({error:"No permission to access this project in single-tenant mode"});t.project=f,t.projectId=u,o()}catch(u){c.logger.error("Project middleware error:",u),e==null||e.status(500).json({error:"Internal server error"})}};function N(t,e){return new Promise((o,n)=>{const s=l.default.createReadStream(t),r=l.default.createWriteStream(e);s.on("error",n),r.on("error",n),r.on("finish",o),s.pipe(r)})}async function T(t,e){await l.default.promises.mkdir(e,{recursive:!0});const o=await l.default.promises.readdir(t,{withFileTypes:!0});for(const n of o){const s=k.default.join(t,n.name),r=k.default.join(e,n.name);n.isDirectory()?await T(s,r):await N(s,r)}}async function z(t,e){(await l.default.promises.stat(t)).isDirectory()?await T(t,e):await N(t,e)}const O=(t,e,o)=>c.isMultiTenant()?v.default()(t,e,o):v.default({roles:["owner","admin","pagesEditor"]})(t,e,o),H=(t,e)=>{const o=G.getResourceExportDir({projectId:t,releaseId:e});return b.join(o,c.COMPONENT_DID,c.RESOURCE_TYPE)},S=U.Router(),B="@page",q="@component",P=":",E="ALL",L="@project",C=({pageId:t,projectId:e})=>[B,e,t].join(P),Q=t=>{const[e,o,n]=t.split(P);if(e===B)return{pageId:n,projectId:o}},A=({componentId:t,projectId:e})=>[q,e,t].join(P),V=t=>{const[e,o,n]=t.split(P);if(e===q)return{componentId:n,projectId:o}},Z=t=>[L,t].join(P),tt=t=>{const[e,o]=t.split(P);if(e===L)return o},et=t=>{try{return JSON.parse(t)}catch{}return{}};async function x(t){const e=await c.SiteState.shared(t).getState("production"),o=await c.Project.findByPk(t),n=e.pageIds.map(r=>{const i=e.pages[r];if(i)return{id:C({pageId:r,projectId:t}),name:i.slug}}).filter(Boolean),s=K.default(Object.values(e.components),r=>r.index).map(({data:r})=>({id:A({componentId:r.id,projectId:t}),name:r.name||r.id}));return{id:Z(t),name:(o==null?void 0:o.name)||"Unnamed Project",children:[{id:C({pageId:E,projectId:t}),name:"Pages",children:n},{id:A({componentId:E,projectId:t}),name:"Components",children:s}]}}S.get("/resources",O,async(t,e)=>{const{projectId:o}=et(t.query.resourcesParams);if(o){t.params={...t.params,projectId:o},await Y(t,e,()=>{});const r=await x(o);e.json({resources:[r]});return}const n=await c.Project.findAll({where:{}}),s=await Promise.all(n.map(r=>x(r.id)));e.json({resources:s})});const ot=I.default.object({projectId:I.default.string().required().min(1),releaseId:I.default.string().allow(""),resources:I.default.array().items(I.default.string()).required(),locale:I.default.string().allow("")});S.post("/resources",O,async(t,e)=>{const{resources:o,projectId:n,releaseId:s}=await ot.validateAsync(t.body),r="production",i=[],u=[];for(const a of o){if(tt(a))continue;const{pageId:m,projectId:j}=Q(a)||{};if(m)m===E||m&&j&&i.push({pageId:m,projectId:j});else{const{componentId:p,projectId:d}=V(a)||{};p===E||p&&d&&u.push({componentId:p,projectId:d})}}const f=D.default(i,"projectId"),_=D.default(u,"projectId"),h=new Set([...Object.keys(f),...Object.keys(_)]),w=H(n,s);l.default.rmSync(w,{recursive:!0,force:!0}),l.default.mkdirSync(w,{recursive:!0});for(const a of h){const m=await c.SiteState.shared(a).getState(r),j=f[a],p=_[a],d=j==null?void 0:j.map(g=>g.pageId),R=p==null?void 0:p.map(g=>g.componentId);if(d!=null&&d.length||R!=null&&R.length){const g=await c.toPackage(m,{exportAssets:!0,pageIds:d,componentIds:R});await z(g,w),l.default.rmSync(g,{recursive:!0,force:!0})}c.logger.info(`Exported resources for project ${a}`,{pageIds:d,componentIds:R})}e.json({})});S.get("/all-resources",O,async(t,e)=>{const{states:o}=await c.getResourceStates(),n=o==null?void 0:o.map(s=>{const r={blockletId:s.blockletId,blockletTitle:s.blockletTitle,components:{}};if(s.state.components&&(r.components=s.state.components),Object.keys(r.components).length!==0)return r}).filter(Boolean);e.json(n)});module.exports=S;
|
package/lib/cjs/site-state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/site-state-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/site-state-C5t-5c6U.js");require("@blocklet/pages-kit/utils/data-source");require("@blocklet/pages-kit/utils/property");require("@blocklet/quickjs");require("@blocklet/sdk/lib/component");require("@blocklet/sdk/lib/config");require("@reactivedata/reactive");require("@syncedstore/core");require("crypto");require("fs");require("glob");require("lib0/decoding");require("lib0/encoding");require("lodash/cloneDeep");require("lodash/debounce");require("lodash/get");require("lodash/isEmpty");require("lodash/pick");require("lodash/set");require("lodash/union");require("lru-cache");require("nanoid");require("p-limit");require("path");require("stream/promises");require("tar");require("ufo");require("wait-on");require("y-protocols/awareness");require("y-protocols/sync");require("yaml");require("yjs");const t=require("@blocklet/pages-kit/types/state");exports.PUBLISH_MODES=e.PUBLISH_MODES;exports.SITE_STATE_PATH=e.SITE_STATE_PATH;exports.STATE_MODES=e.STATE_MODES;exports.default=e.SiteState;exports.fromPackage=e.fromPackage;exports.getResourceStates=e.getResourceStates;exports.initPackResourceStates=e.initPackResourceStates;exports.mergeState=e.mergeState;exports.nextId=e.nextId;exports.toPackage=e.toPackage;exports.triggerReloadAllProjectResource=e.triggerReloadAllProjectResource;Object.keys(t).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>t[r]})});
|