@blocklet/pages-kit-inner-components 0.0.7 → 0.0.9
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/home.js +1 -1
- package/lib/cjs/locales.js +1 -0
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/setting.js +31 -0
- package/lib/cjs/site-state.js +1 -1
- package/lib/cjs/uploader.js +1 -0
- package/lib/{components-DsmhMXRy.mjs → components-Bo3_pN-Y.mjs} +6 -6
- package/lib/{draft-data-B1uf57Cy.mjs → draft-data-ByCPsDRp.mjs} +3 -3
- package/lib/draft-data-DJNZo1YQ.js +1 -0
- package/lib/es/components.js +1 -1
- package/lib/es/home.js +6 -5
- package/lib/es/locales.js +701 -0
- package/lib/es/resources.js +2 -2
- package/lib/es/setting.js +1261 -0
- package/lib/es/site-state.js +2 -2
- package/lib/es/uploader.js +81 -0
- package/lib/home-Cy0eoqJw.mjs +2280 -0
- package/lib/home-DHx60V0N.js +542 -0
- package/lib/{publish-button-CP42jrDJ.mjs → publish-button-B63RIwA3.mjs} +85 -83
- package/lib/publish-button-B_ySfzVo.js +1 -0
- package/lib/{site-state-BmPKdiAM.mjs → site-state-7Hsu0igk.mjs} +264 -254
- package/lib/site-state-DR63hFZ4.js +1 -0
- package/lib/state-CETtldI3.mjs +376 -0
- package/lib/state-CfaAw7fr.js +1 -0
- package/package.json +59 -38
- package/lib/draft-data-Wp7NHQJ8.js +0 -1
- package/lib/home-DZ1HSzX6.js +0 -542
- package/lib/home-NljemGBa.mjs +0 -2619
- package/lib/publish-button-h0M1NWWo.js +0 -1
- package/lib/site-state-CD1Wvsfh.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),T=require("./home-DZ1HSzX6.js"),S=require("@arcblock/ux/lib/Locale/context"),M=require("@arcblock/ux/lib/Toast"),C=require("@mui/icons-material"),q=require("@mui/lab"),s=require("@mui/material"),O=require("immer"),W=require("lodash/difference"),c=require("react"),z=require("react-use"),E=t=>t&&t.__esModule?t:{default:t},A=E(M),D=E(W);function _(t){const[d,b]=c.useState(!1);return e.jsx(q.LoadingButton,{...t,loading:t.loading||d,onClick:i=>{var h;const x=(h=t.onClick)==null?void 0:h.call(t,i);x instanceof Promise&&(b(!0),x.finally(()=>{b(!1)}))}})}const N=s.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 R(){const[t,d]=c.useState(),b=c.useMemo(()=>t?e.jsx(s.Dialog,{...t}):null,[t]),i=c.useCallback(()=>{d(void 0)},[]),x=c.useCallback(({title:h,content:g,cancelText:L="Cancel",okText:p="Ok",onOk:f,onClose:k,okIcon:I,okColor:n="primary",cancelColor:y="primary",DialogContentProps:u,form:m,...P})=>{d({...P,open:!0,children:e.jsxs("form",{onSubmit:B=>B.preventDefault(),children:[h&&e.jsxs(s.DialogTitle,{className:"between",zIndex:"appBar",bgcolor:"background.paper",sx:{borderBottom:"1px solid #E5E7EB"},children:[e.jsx(s.Box,{children:h}),e.jsx(s.IconButton,{size:"small",onClick:async()=>{i(),k==null||k()},children:e.jsx(N,{})})]}),g&&e.jsx(s.DialogContent,{...u,sx:{mt:-3,...u==null?void 0:u.sx},children:e.jsx(s.Box,{pt:3,children:g})}),e.jsxs(s.DialogActions,{children:[e.jsx(s.Button,{variant:"outlined",color:y||"primary",onClick:k??i,children:L}),e.jsx(_,{variant:"contained",color:n||"primary",startIcon:I,loadingPosition:I?"start":"center",onClick:async()=>{await(f==null?void 0:f()),i()},type:"submit",children:p})]})]}),onClose:k??i})},[i]);return{dialog:b,showDialog:x,closeDialog:i}}const F=c.forwardRef(({mode:t,state:d},b)=>{const{t:i}=S.useLocaleContext(),[x,h]=c.useState(!1),{dialog:g,showDialog:L}=R(),p=T.useProjectId(),f=c.useCallback(I=>{let n=[];L({title:i("maker.publishToProduction"),content:e.jsxs(s.Box,{sx:{minWidth:300},children:[e.jsx(s.Alert,{color:"warning",icon:e.jsx(C.Warning,{}),children:i("maker.publishToProductionTip")}),e.jsx(s.Box,{maxHeight:"50vh",overflow:"auto",mt:2,children:e.jsx(H,{state:d,toMode:t,onChange:y=>n=y,defaultPageIds:I})})]}),okText:i("maker.publish"),cancelText:i("common.cancel"),onOk:async()=>{var y,u;if((n==null?void 0:n.length)===0){const m=i("maker.publishSelectPagesMessage");throw A.default.error(m),new Error(m)}for(const m of n??d.pageIds){const P=d.pages[m];if(P){const B=(u=(y=T.checkPage(i,P,d))==null?void 0:y[0])==null?void 0:u.message;if(B)throw A.default.error(B),new Error(B)}}localStorage.setItem(T.getProjectPageVersionKey(p??""),String(new Date().getTime())),h(!0);try{await T.publishPages({mode:t,pages:n}),A.default.success(i("maker.publishSuccessMessage"))}catch(m){throw A.default.error(m.message),m}finally{h(!1)}}})},[t,d,i,p,L]);c.useImperativeHandle(b,()=>({openPublishDialog:f}));const k=c.useCallback(()=>{f()},[f]);return e.jsxs(e.Fragment,{children:[e.jsx(q.LoadingButton,{color:"primary",variant:"contained",size:"small",sx:{mr:2},onClick:k,loading:x,disabled:x,children:i("maker.publishToProduction")}),g]})});function H({state:t,toMode:d,onChange:b,defaultPageIds:i}){const{t:x,locale:h}=S.useLocaleContext(),[g,L]=c.useState(!1),[p,f]=c.useState(()=>i?Object.fromEntries(i.map(r=>[r,!0])):{}),{loading:k,error:I,value:n}=z.useAsync(()=>T.getPages({mode:d}),[d]);if(I)throw I;const y=c.useMemo(()=>JSON.parse(JSON.stringify(t.pageIds)).sort((a,j)=>{const o=t.pages[a],l=t.pages[j];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()}),[t]),u=c.useMemo(()=>n?D.default(n.pageIds,t.pageIds):[],[t,n]),m=c.useMemo(()=>[...t.pageIds].concat(u),[t,u]),P=c.useCallback(r=>{f(a=>{const j=O.produce(a,o=>{g?(Object.assign(o,Object.fromEntries(m.map(l=>[l,!0]))),delete o[r]):o[r]?(delete o[r],u.includes(r)&&t.pageIds.filter(l=>{var w,v;return((w=t.pages[l])==null?void 0:w.slug)===((v=n==null?void 0:n.pages[r])==null?void 0:v.slug)}).forEach(l=>{delete o[l]})):(o[r]=!0,t.pageIds.includes(r)&&u.filter(l=>{var w,v;return((w=n==null?void 0:n.pages[l])==null?void 0:w.slug)===((v=t.pages[r])==null?void 0:v.slug)}).forEach(l=>{o[l]=!0}))});return L(D.default(m,Object.keys(j)).length===0),j})},[g,m,u,t,n]),B=c.useCallback(()=>{L(r=>(r&&f({}),!r))},[p]);return c.useEffect(()=>{b(g?null:Object.keys(p))},[g,p,b]),k?e.jsx(T.Loading,{sx:{my:4}}):e.jsxs(s.List,{disablePadding:!0,sx:{maxWidth:500},children:[e.jsx(s.ListItem,{sx:{position:"sticky",top:0,bgcolor:"background.paper",zIndex:1},disablePadding:!0,children:e.jsxs(s.ListItemButton,{onClick:B,dense:!0,children:[e.jsx(s.ListItemIcon,{children:e.jsx(s.Checkbox,{edge:"start",checked:g,tabIndex:-1})}),e.jsx(s.ListItemText,{primary:x("common.all")})]})}),y.map(r=>{var l,w;const a=t.pages[r];if(!a)return null;const j=T.checkPage(x,a,t),o=!a.publishedAt||a.updatedAt&&new Date(a.updatedAt).getTime()>new Date(a.publishedAt).getTime();return e.jsx(s.ListItem,{disablePadding:!0,secondaryAction:e.jsxs(e.Fragment,{children:[o&&e.jsx(s.Tooltip,{title:x("maker.pages.needPublish"),children:e.jsx(C.Sync,{fontSize:"small",sx:{color:"warning.main",fontSize:16}})}),j&&e.jsx(T.PageErrorTip,{errors:j,children:e.jsx(C.Warning,{sx:{color:"error.dark"}})})]}),children:e.jsxs(s.ListItemButton,{onClick:()=>P(r),dense:!0,children:[e.jsx(s.ListItemIcon,{children:e.jsx(s.Checkbox,{edge:"start",checked:g||!!p[r],tabIndex:-1})}),e.jsx(s.ListItemText,{primary:a.slug,secondary:(w=(l=a.locales)==null?void 0:l[h])==null?void 0:w.title,primaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"},secondaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"}})]})},r)}),u.map(r=>{var j,o;const a=n==null?void 0:n.pages[r];return a?e.jsx(s.ListItem,{disablePadding:!0,secondaryAction:e.jsx(s.Chip,{color:"warning",label:"deleted",size:"small"}),children:e.jsxs(s.ListItemButton,{onClick:()=>P(r),dense:!0,children:[e.jsx(s.ListItemIcon,{children:e.jsx(s.Checkbox,{edge:"start",checked:g||!!p[r],tabIndex:-1})}),e.jsx(s.ListItemText,{primary:a.slug,secondary:(o=(j=a.locales)==null?void 0:j[h])==null?void 0:o.title,primaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"},secondaryTypographyProps:{noWrap:!0,textOverflow:"ellipsis"}})]})},r):null})]})}exports.default=F;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const D=require("./components-DITf866E.js"),_e=require("@blocklet/quickjs"),le=require("@blocklet/sdk/lib/component"),ke=require("@blocklet/sdk/lib/config"),Re=require("@reactivedata/reactive"),z=require("@syncedstore/core"),y=require("fs"),re=require("glob"),Ce=require("lib0/decoding"),Le=require("lib0/encoding"),_=require("lodash"),Ee=require("lru-cache"),Ue=require("nanoid"),Ne=require("p-limit"),u=require("path"),Fe=require("stream/promises"),qe=require("tar"),x=require("ufo"),Me=require("wait-on"),M=require("y-protocols/awareness"),te=require("y-protocols/sync"),xe=require("yaml"),Be=require("yjs"),Ve=require("lodash/isNil"),b=require("sequelize");require("sqlite3");const Y=t=>t&&t.__esModule?t:{default:t};function Z(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 g=Y(ke),se=Z(Ce),I=Z(Le),$e=Y(Ne),Ge=Y(u),Je=Y(Me),V=Z(xe),q=Z(Be),Ye=Y(Ve);g.default.env.mode;const He="image-bin";g.default.env.INIT_TEMPLATE_PATH;const ze=process.env.DATABASE_URL||Ge.default.join(g.default.env.dataDir,"db/pages-kit.db"),me=g.default,Ke=()=>g.default.env.tenantMode==="multiple",We=()=>{var t;return(Ye.default(me.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=me.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},Xe=b.DataTypes.sqlite.DATE.parse;b.DataTypes.sqlite.DATE.parse=(t,s)=>typeof t=="number"?new Date(t):Xe(t,s);const H=new b.Sequelize({dialect:"sqlite",storage:ze,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});H.query("pragma journal_mode = WAL;");H.query("pragma synchronous = normal;");H.query("pragma journal_size_limit = 67108864;");class ee extends b.Model{}ee.init({id:{type:b.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:b.DataTypes.UUIDV4},projectId:{type:b.DataTypes.UUID,allowNull:!1},componentId:{type:b.DataTypes.STRING,allowNull:!1}},{sequelize:H,tableName:"ProjectComponents",timestamps:!1});class N extends b.Model{static async getProjectByIdOrSlug(s){return N.findOne({where:{[b.Op.or]:[{id:s},{slug:s}]}})}}N.init({id:{type:b.DataTypes.UUID,defaultValue:b.DataTypes.UUIDV4,primaryKey:!0},name:{type:b.DataTypes.STRING,allowNull:!1},description:b.DataTypes.TEXT,createdAt:b.DataTypes.DATE,updatedAt:b.DataTypes.DATE,createdBy:{type:b.DataTypes.STRING,allowNull:!1},updatedBy:{type:b.DataTypes.STRING,allowNull:!1},slug:b.DataTypes.STRING,icon:b.DataTypes.STRING,pinnedAt:b.DataTypes.DATE,useAllResources:b.DataTypes.BOOLEAN,relatedBlocklets:{type:b.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(t){this.setDataValue("relatedBlocklets",JSON.stringify(t||{}))}}},{sequelize:H,paranoid:!0});N.hasMany(ee,{foreignKey:"projectId",as:"components"});const Qe="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",Ae="page",oe="trigger-reload-project-resource",pe=Qe,{uploadToMediaKit:Ze}=require("@blocklet/uploader-server"),ie=Ue.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),de=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,$=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,ye=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,et=1e4,tt=3e4,K=0,ne=1,st=0,nt=1,at=g.default,B=u.join(process.env.BLOCKLET_DATA_DIR,"site-state"),rt=["production","draft"],ot=["production"];function it(){return{pageIds:[],pages:{},components:{},supportedLocales:[],config:{},resources:{}}}const U=class U extends q.Doc{constructor(s){super(),this.options=s,this.states={},this.conns=new Map,this.awarenessChangeHandler=({added:e,updated:n,removed:a},r)=>{const c=e.concat(n,a);if(r!==null){const l=this.conns.get(r);l&&(e.forEach(f=>{l.add(f)}),a.forEach(f=>{l.delete(f)}))}const i=I.createEncoder();I.writeVarUint(i,ne),I.writeVarUint8Array(i,M.encodeAwarenessUpdate(this.awareness,c));const o=I.toUint8Array(i);this.conns.forEach((l,f)=>this.send(f,o))},this.updateHandler=e=>{const n=I.createEncoder();I.writeVarUint(n,K),te.writeUpdate(n,e);const a=I.toUint8Array(n);this.conns.forEach((r,c)=>this.send(c,a))},this.ensureDataStructure=()=>{var c;const{supportedLocales:e,pages:n,pageIds:a,config:r}=this.syncedStore;{const i=new Set(Object.keys(n));let o=0;for(;o<a.length;){const l=a[o];i.has(l)?(i.delete(l),o++):a.splice(o,1)}}e.splice(0,e.length),e.push(...at.env.languages.map(i=>({locale:i.code,name:i.name}))),r.defaultLocale=(c=e[0])==null?void 0:c.locale;{let i=0;const o=new Set;for(;i<e.length;){const{locale:l}=e[i];o.has(l)?e.splice(i,1):(i++,o.add(l))}}},this.send=(e,n)=>{e.readyState!==st&&e.readyState!==nt&&this.closeConn(e);try{e.send(n,a=>{a&&this.closeConn(e)})}catch{this.closeConn(e)}},this.closeConn=e=>{if(e.removeAllListeners(),this.conns.has(e)){const n=this.conns.get(e);this.conns.delete(e),n&&M.removeAwarenessStates(this.awareness,Array.from(n),null)}e.close()},this.autoSave=_.debounce(()=>{y.mkdirSync(u.dirname(this.draftYjsFilePath),{recursive:!0}),y.writeFileSync(this.draftYjsFilePath,q.encodeStateAsUpdate(this))},et),this.save=({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()},this.publish=async({mode:e,pages:n})=>{const a=await this.getState("draft"),r=await this.getState("production");await ce(a,r,{pages:n,pageMergeMode:"replace",deletePages:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const c of n||Object.keys(this.syncedStore.pages))this.syncedStore.pages[c]&&(this.syncedStore.pages[c].publishedAt=new Date().toISOString());await this.setState(e,r)},this.mergeState=async(e,n)=>{var i,o,l;const a=JSON.parse(JSON.stringify(n));(i=e.config).fontFamily??(i.fontFamily={});const r=(o=a.config)==null?void 0:o.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((f,p)=>{this.transact(async()=>{try{const w=await ce(e,n);f(w)}catch(w){p(w)}})})},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 a=setInterval(()=>{if(!n)this.conns.has(e)&&this.closeConn(e),clearInterval(a);else if(this.conns.has(e)){n=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(a)}}},tt);e.on("close",()=>{this.closeConn(e),clearInterval(a)}),e.on("pong",()=>{n=!0});{const r=I.createEncoder();I.writeVarUint(r,K),te.writeSyncStep1(r,this),this.send(e,I.toUint8Array(r));const c=this.awareness.getStates();if(c.size>0){const i=I.createEncoder();I.writeVarUint(i,ne),I.writeVarUint8Array(i,M.encodeAwarenessUpdate(this.awareness,Array.from(c.keys()))),this.send(e,I.toUint8Array(i))}}},this.messageListener=(e,n)=>{try{const a=I.createEncoder(),r=se.createDecoder(n),c=se.readVarUint(r);switch(c){case K:I.writeVarUint(a,K),te.readSyncMessage(r,a,this,null),I.length(a)>1&&(this.ensureDataStructure(),this.send(e,I.toUint8Array(a)));break;case ne:{M.applyAwarenessUpdate(this.awareness,se.readVarUint8Array(r),e);break}default:D.logger.warn(`Unsupported messageType ${c}`)}}catch(a){D.logger.error(a)}this.save()},y.existsSync(this.draftYjsFilePath)&&q.applyUpdate(this,y.readFileSync(this.draftYjsFilePath)),this.syncedStore=Re.reactive(z.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new M.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(s){if(!s)throw new Error("Should provide project context");try{const e=u.join(B,s),n=u.join(B,`@del-${s}`);y.renameSync(e,n)}catch(e){D.logger.error("Failed to safe delete project state dir:",e)}}static get projectIds(){return re.globSync("*/",{cwd:B,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(s=>U.shared(s))}static shared(s){if(!s)throw new Error("Should provide project context");let e=this.sharedInstances.get(s);return e||(e=new U({path:u.join(B,s)}),this.sharedInstances.set(s,e),e)}destroy(){this.conns.forEach((s,e)=>this.closeConn(e)),this.awareness.destroy(),super.destroy()}initObserver(){const s=n=>{n.observeDeep(a=>{a.some(r=>r.changes.keys.has("updatedAt")||r.changes.keys.has("publishedAt"))||n.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(n=>{const a=z.getYjsValue(this.syncedStore.pages[n]);a&&a instanceof q.Map&&s(a)});const e=z.getYjsValue(this.syncedStore.pages);e&&e instanceof q.Map&&e.observe(n=>{n.changes.keys.forEach((a,r)=>{if(a.action==="add"){const c=z.getYjsValue(this.syncedStore.pages[r]);c&&c instanceof q.Map&&s(c)}})})}get draftYjsFilePath(){return u.join(this.options.path,"draft.yjs")}async getState(s){return s==="draft"?JSON.parse(JSON.stringify(this.syncedStore)):(this.states[s]||(this.states[s]=await ue(this.getPublishDir(s),{includeResources:!0})??it()),{...this.states[s],resources:await Pe().then(async e=>{var c,i,o,l;const{pages:n,components:a}=_.pick(e,"pages","components");let r=a;if((i=(c=this.states[s])==null?void 0:c.resources)!=null&&i.components)r={...(l=(o=this.states[s])==null?void 0:o.resources)==null?void 0:l.components};else{const f=u.basename(this.options.path),p=await N.findByPk(f);if(p!=null&&p.useAllResources)r=a;else{const v=(await ee.findAll({where:{projectId:f}})).map(P=>P.componentId);r=Object.fromEntries(Object.entries(a||{}).filter(([P])=>v.includes(P)))}}return{pages:n,components:r}}).catch(()=>({}))})}async setState(s,e){const n=await je(e,{exportAssets:!1,includeResources:!0}),a=this.getPublishDir(s);y.mkdirSync(u.dirname(a),{recursive:!0}),y.rmSync(a,{force:!0,recursive:!0}),y.renameSync(n,a),this.states[s]=e}getPublishDir(s){return u.join(this.options.path,s)}static async pageUrlMap(s){const{projectIds:e}=this,n={};for(const a of e){const r=await N.findByPk(a);if(!r)continue;const c=await U.shared(a).getState(s),i=_.union(g.default.env.languages.map(o=>o.code),c.supportedLocales.map(o=>o.locale));for(const o of c.pageIds){const l=c.pages[o];if(!l)continue;const f=l.slug,p=r.slug||a,w={projectId:a,projectSlug:p,pageSlug:f,pageId:o,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:c.config.publishedAt};p&&(n[x.joinURL("/",p,f)]={...w,shouldRedirect:!0,mainPage:!0}),n[x.joinURL("/",a,f)]={...w,shouldRedirect:!0,mainPage:!0};for(const v of i){const O={...w,locale:v};n[x.joinURL("/",v,a,f)]=O,p&&(n[x.joinURL("/",v,p,f)]=O)}}}return n}};U.INSTANCE_TTL=30*60*1e3,U.sharedInstances=new Ee.LRUCache({max:100,ttl:U.INSTANCE_TTL,dispose:s=>{s.destroy()}});let J=U;function be(){return y.mkdtempSync(u.join(g.default.env.dataDir,"tmp-"))}function X(t,s,e=[]){return Array.isArray(t)?t.flatMap((n,a)=>X(n,s,[...e,a])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([n,a])=>X(a,s,[...e,n])):s(t)?[e]:[]}function C(t){return t.filter(s=>s!=null)}async function ct(t,s,e){if(!t||!y.existsSync(t)||!y.lstatSync(t).isFile())return null;let n=e[t];return n||(n=(async()=>(await Ze({filePath:t,fileName:s})).data.filename)(),e[t]=n),n}const lt=async(t,s)=>{const e=u.basename(t),n=await le.call({name:pe,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const a=y.createWriteStream(s);await Fe.pipeline(n.data,a)}else throw new Error(`download asset failed ${n.status}`)},pt=async(t,s)=>{await Promise.all(t.map(async e=>{try{await lt(e,u.join(s,u.basename(e)))}catch(n){D.logger.error(`Failed to export assets: ${e}, ${n}`)}}))};function Te(t){return de.test(t)?[t]:$.test(t)?(ye.lastIndex=0,Array.from(t.matchAll(ye)).map(e=>e[1]).filter(e=>!!e)):[]}async function ae(t,s,e){const{getFilename:n,exportAssets:a}=e,r=u.join(s,n(t));if(y.mkdirSync(u.dirname(r),{recursive:!0}),y.writeFileSync(r,V.stringify(t)),a){const i=X(t,o=>typeof o=="string"&&(de.test(o)||$.test(o))).map(o=>{const l=_.get(t,o);return Te(l)}).flat().filter(Boolean);await pt(i,u.dirname(r))}}const he=new Ee.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Se(t,s,e){var i;const n=X(t,o=>typeof o=="string"&&(de.test(o)||$.test(o))),a=$e.default(2),r=n.map(o=>a(async()=>{try{const l=_.get(t,o),f=Te(l);for(const p of f){const w=u.basename(p),v=e.getFilePath(p,o),O=v?`${v}:${w}`:w,P=he.get(O);if(P){$.test(l)||_.set(t,o,P);return}const L=await ct(v,w,s);L&&($.test(l)||_.set(t,o,L),he.set(O,L))}}catch(l){D.logger.error(`Failed to process upload for path ${o.join(".")}:`,l.message||l.reason)}})),c=await Promise.allSettled(r);(i=e.onFinish)==null||i.call(e,c)}async function je(t,{exportAssets:s,pageIds:e="all",componentIds:n="all",rawConfig:a,includeResources:r=!1}={}){var m,T,h,E,F,j;const c=e==="all"?t.pageIds:e,i=dt({state:t,pageIds:c,componentIds:n==="all"?Object.keys(t.components):n}),o=(d,S)=>{var A;return{id:d.id,name:d.name,component:d.component,config:d.config,visibility:d.visibility,properties:((A=d.locales)==null?void 0:A[S])??{}}},l=(d,S)=>{var A;return{id:d.id,createdAt:d.createdAt,updatedAt:d.updatedAt,publishedAt:d.publishedAt,meta:((A=d.locales)==null?void 0:A[S])??{},sections:C(d.sectionIds.map(k=>{const R=d.sections[k];return R&&o(R,S)}))}},f=C(t.supportedLocales.map(d=>d.locale).flatMap(d=>c.map(S=>{const A=t.pages[S];return A&&{locale:d,slug:A.slug,page:l(A,d)}}))),p=be(),w=u.join(p,"pages");y.mkdirSync(w,{recursive:!0});const v=u.join(p,"components");y.mkdirSync(v,{recursive:!0});for(const{locale:d,slug:S,page:A}of f)await ae(A,w,{getFilename:()=>u.join(u.dirname(S),`${u.basename(S)||"index"}.${d}.yml`),exportAssets:s});for(const d of i){const S=(m=t.components[d])==null?void 0:m.data;S&&await ae(S,v,{getFilename:A=>`${A.name||"unnamed"}.${A.id}.yml`,exportAssets:s})}const O=u.join(p,".blocklet/pages/pages.config.yml");y.mkdirSync(u.dirname(O),{recursive:!0});const P={pages:C(c.map(d=>{const S=t.pages[d];return S&&{id:d,slug:S.slug}})),components:C(i.map(d=>{var A;const S=(A=t.components[d])==null?void 0:A.data;return S&&{id:d,name:S.name}})),...r?{resources:{components:C(Object.keys(((T=t.resources)==null?void 0:T.components)||{}).map(d=>{var S,A,k,R;return{id:d,name:(R=(k=(A=(S=t.resources)==null?void 0:S.components)==null?void 0:A[d])==null?void 0:k.component)==null?void 0:R.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};y.writeFileSync(O,V.stringify(P));const L=u.join(p,"config.source.json");if(a&&y.writeFileSync(L,JSON.stringify(a)),r){const d=u.join(p,"resources"),S=u.join(d,"components");y.mkdirSync(S,{recursive:!0});for(const A of Object.keys(((h=t==null?void 0:t.resources)==null?void 0:h.components)??{})){const k=(j=(F=(E=t.resources)==null?void 0:E.components)==null?void 0:F[A])==null?void 0:j.component;k&&await ae(k,S,{getFilename:R=>`${R.name||"unnamed"}.${R.id}.yml`,exportAssets:s})}}return p}async function ue(t,{importAssets:s,includeResources:e}={}){var r,c,i;if(!y.existsSync(t))return null;let n,a=!1;try{y.lstatSync(t).isDirectory()?n=t:/\.(tgz|gz|tar)$/.test(t)&&(a=!0,n=be(),await qe.x({file:t,C:n}));const o=re.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),l=o&&u.join(u.dirname(o),"../../pages"),f=o&&u.join(u.dirname(o),"../../components");if(!o)return null;const p=V.parse(y.readFileSync(o).toString()),w=(m,T,h)=>{let E=u.join(m,`${T}${h?`.${h}`:""}.yml`);return(!y.existsSync(E)||!y.lstatSync(E).isFile())&&(E=u.join(m,T,`index${h?`.${h}`:""}.yml`),!y.existsSync(E)||!y.lstatSync(E))?null:V.parse(y.readFileSync(E).toString())},v=(m,T)=>{try{const h=re.globSync(`*.${T}.yml`,{cwd:m,absolute:!0})[0];return h?V.parse(y.readFileSync(h).toString()):null}catch(h){D.logger.error("parse component error",h)}return null},O=C(p.pages.map(({slug:m})=>{var F;const T=C(p.supportedLocales.map(({locale:j})=>{const d=l?w(l,m,j):void 0;return d&&{locale:j,page:d}})),h=(F=T[0])==null?void 0:F.page;if(!h)return null;const E=h.sections.map(j=>{const d=j.id||ie();return{id:d,component:j.component,config:j.config,name:j.name,visibility:j.visibility,locales:Object.fromEntries(C(T.map(({locale:S,page:A})=>{const k=A.sections.find(R=>R.id===d);return k&&[S,k.properties]})))}});return{id:h.id||ie(),createdAt:h.createdAt,updatedAt:h.updatedAt,publishedAt:h.publishedAt,slug:m,sections:Object.fromEntries(E.map(j=>[j.id,j])),sectionIds:E.map(j=>j.id),locales:Object.fromEntries(T.map(({locale:j,page:d})=>[j,d.meta]))}})),P=f?C(((r=p.components)==null?void 0:r.map(({id:m})=>v(f,m)))??[]):[];if(s){const m=(...T)=>{D.logger.info(`[${a?u.basename(t):u.basename(u.join(t,"../../../../"))}] importAssets:`,...T)};try{m("wait image-bin api ready"),await Je.default({resources:[`${le.getComponentWebEndpoint(He)}/api/sdk/uploads`],validateStatus:E=>E>=200&&E<=500}),m("image-bin api is ready");const T={},h={};m("start to upload assets"),await Promise.allSettled([Se(P,T,{getFilePath:E=>f&&u.join(f,E),onFinish:E=>{m(`upload ${E.length} component assets`)}}),Se(O,h,{getFilePath:(E,F)=>{const j=_.get(O,F.slice(0,1));return l&&u.join(l,u.dirname(j.slug),E)},onFinish:E=>{m(`upload ${E.length} page assets`)}})]),m("upload assets done"),global.gc&&global.gc()}catch(T){m("Error during asset import:",T)}}const L={};if(e){const m=o&&u.join(u.dirname(o),"../../resources/components"),T=C(((i=(c=p.resources)==null?void 0:c.components)==null?void 0:i.map(({id:h})=>v(m,h)))??[]);T.length>0&&(L.components=Object.fromEntries(T.map((h,E)=>[h.id,{index:E,component:h}])))}return{supportedLocales:p.supportedLocales,pageIds:O.map(m=>m.id),components:Object.fromEntries(P.map((m,T)=>[m.id,{index:T,data:m}])),pages:Object.fromEntries(O.map(m=>[m.id,m])),config:p.config||{},resources:L}}finally{a&&n&&y.rmSync(n,{force:!0,recursive:!0})}}async function ce(t,s,{pages:e,pageMergeMode:n="byUpdateTime",deletePages:a=!1,publishMode:r=void 0}={}){try{r&&D.clearPreloadComponentsCacheByMode(r)}catch(f){D.logger.error("clear preload page cache error",{error:f})}const{pageIds:c,pages:i,supportedLocales:o}=t;for(const f of e??c){const p=i[f];if(!p){const w=s.pageIds.indexOf(f);w!==-1&&a&&(s.pageIds.splice(w,1),delete s.pages[f]);continue}if(s.pageIds.includes(p.id)){if(n==="replace")s.pages[p.id]=p;else if(n==="byUpdateTime"){const w=s.pages[p.id];(!w||p.updatedAt&&p.updatedAt>w.updatedAt)&&(s.pages[p.id]=p)}}else s.pageIds.push(p.id),s.pages[p.id]=p}if(a&&!e)for(const f of s.pageIds)t.pageIds.includes(f)||delete s.pages[f],s.pageIds=[...s.pageIds].filter(p=>t.pageIds.includes(p));if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(..._.cloneDeep(o)),a)for(const f of Object.keys(s.components))delete s.components[f];let l=JSON.parse(JSON.stringify(t.components));l=Object.fromEntries(await Promise.all(Object.entries(l).map(async([f,p])=>{const w=await Ie(p==null?void 0:p.data);return[f,{...p,data:w}]}))),Object.assign(s.components,l),Object.assign(s.config,JSON.parse(JSON.stringify(t.config))),s.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const Ie=_e.memoize(async t=>{var s;if(!_.isEmpty(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)try{const n=await D.getExportSchemaValueFromCode(e,"PROPERTIES_SCHEMA",t.id);n&&n.length>0&&t&&(t.properties={},n.forEach((a,r)=>{t!=null&&t.properties&&(t.properties[a.id]={index:r,data:a})}))}catch(n){D.logger.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:n})}}return t},{keyGenerator:t=>JSON.stringify(["checkPropertiesFromCode",t])});function dt({state:t,pageIds:s=[],componentIds:e=[]}){var c;const n=(i,o=new Set)=>(Array.isArray(i)&&i.forEach(l=>n(l,o)),i&&typeof i=="object"&&(typeof i.componentId=="string"&&o.add(i.componentId),Object.values(i).forEach(l=>n(l,o))),o),a=new Set(e);for(const i of s){const o=t.pages[i];n(o,a)}const r=[...a];for(;r.length;){const i=r.shift();a.has(i)||a.add(i);const o=(c=t.components[i])==null?void 0:c.data;if(o)for(const l of n(o))a.has(l)||r.push(l)}return[...a]}let Q,G,fe,ge;function ve(){return Q=(async()=>{const t=le.getResources({types:[{did:pe,type:Ae}]});G=(await Promise.all(t.map(async e=>{const n=e.path?await ue(e.path,{importAssets:!1}):void 0;return n?{blockletId:e.did,state:n,blockletTitle:e.title}:void 0}))).filter(e=>!!e),fe=G.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.pages).map(a=>a?[a==null?void 0:a.id,{page:a,blockletId:n.blockletId}]:[]))),{});const s=G.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.components).map(a=>[a.data.id,{blockletId:n.blockletId,component:a.data}]))),{});ge=Object.fromEntries(await Promise.all(Object.entries(s).map(async([e,n])=>{const a=await Ie(n.component);return[e,{...n,component:a}]})))})(),Q}function Oe(t){const s=_.debounce(async()=>{await ve().catch(e=>{D.logger.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:G,pages:fe,components:ge}))},3e3,{leading:!1,trailing:!0});return s(),g.default.events.on(g.default.Events.componentAdded,s),g.default.events.on(g.default.Events.componentRemoved,s),g.default.events.on(g.default.Events.componentStarted,s),g.default.events.on(g.default.Events.componentStopped,s),g.default.events.on(g.default.Events.componentUpdated,s),g.default.events.on(oe,s),()=>{g.default.events.off(g.default.Events.componentAdded,s),g.default.events.off(g.default.Events.componentRemoved,s),g.default.events.off(g.default.Events.componentStarted,s),g.default.events.off(g.default.Events.componentStopped,s),g.default.events.off(g.default.Events.componentUpdated,s),g.default.events.off(oe,s)}}const De=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),W=globalThis;var we;(we=W[De])==null||we.call(W);W[De]=Oe(async({pages:t,components:s})=>{const{projectIds:e}=J;await Promise.all(e.map(async n=>{const a=J.shared(n);a.syncedStore.resources.pages=t;const r=await N.findByPk(n);if(r!=null&&r.useAllResources)a.syncedStore.resources.components=s;else{const i=(await ee.findAll({where:{projectId:n}})).map(l=>l.componentId),o=Object.fromEntries(Object.entries(s||{}).filter(([l])=>i.includes(l)));a.syncedStore.resources.components=o}D.logger.info(`update [${n}] resource states:`,{pages:Object.keys(a.syncedStore.resources.pages||{}).length,components:Object.keys(a.syncedStore.resources.components||{}).length})}))});async function ut(){D.logger.info("trigger reload all project resource"),g.default.events.emit(oe)}async function Pe(){return Q??(Q=ve()),await Q,{states:G,pages:fe,components:ge}}exports.COMPONENT_DID=pe;exports.PUBLISH_MODES=ot;exports.Project=N;exports.RESOURCE_TYPE=Ae;exports.SITE_STATE_PATH=B;exports.STATE_MODES=rt;exports.SiteState=J;exports.fromPackage=ue;exports.getMultiTenantAllProjectAccessPassports=We;exports.getResourceStates=Pe;exports.initPackResourceStates=Oe;exports.isMultiTenant=Ke;exports.mergeState=ce;exports.nextId=ie;exports.toPackage=je;exports.triggerReloadAllProjectResource=ut;
|