@blocklet/pages-kit-inner-components 0.4.61 → 0.4.63
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/{site-state-CsoZOwUe.js → site-state-DwYxv6zB.js} +4 -4
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/locales.js +1 -1
- package/lib/cjs/project-html.js +1 -1
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/_chunks/{site-state-BAO_o-xn.js → site-state-S4QPpxwh.js} +50 -49
- package/lib/es/components.js +1 -1
- package/lib/es/locales.js +10 -2
- package/lib/es/project-html.js +1 -1
- 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";var tt=Object.defineProperty;var st=(t,n,e)=>n in t?tt(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e;var A=(t,n,e)=>st(t,typeof n!="symbol"?n+"":n,e);const nt=require("@blocklet/pages-kit/builtin/utils"),se=require("@blocklet/pages-kit/types"),oe=require("@blocklet/pages-kit/utils/property"),V=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),
|
|
1
|
+
"use strict";var tt=Object.defineProperty;var st=(t,n,e)=>n in t?tt(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e;var A=(t,n,e)=>st(t,typeof n!="symbol"?n+"":n,e);const nt=require("@blocklet/pages-kit/builtin/utils"),se=require("@blocklet/pages-kit/types"),oe=require("@blocklet/pages-kit/utils/property"),V=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),Le=require("node-fetch"),x=require("ufo"),ie=require("crypto"),rt=require("@blocklet/logger"),at=require("@blocklet/pages-kit/utils/builtin"),Ue=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),be=require("@blocklet/sdk/lib/component"),it=require("autoprefixer"),ct=require("esbuild"),E=require("fs"),lt=require("postcss"),pt=require("tailwindcss"),ut=require("typescript"),dt=require("@reactivedata/reactive"),ee=require("@syncedstore/core"),fe=require("glob"),ft=require("lib0/decoding"),mt=require("lib0/encoding"),N=require("lodash"),gt=require("nanoid"),ht=require("p-limit"),h=require("path"),yt=require("stream/promises"),St=require("tar"),wt=require("wait-on"),H=require("y-protocols/awareness"),le=require("y-protocols/sync"),Et=require("yaml"),bt=require("yjs"),Tt=require("lodash/isNil"),C=require("sequelize");require("sqlite3");const L=t=>t&&t.__esModule?t:{default:t};function X(t){if(t&&t.__esModule)return t;const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,s.get?s:{enumerable:!0,get:()=>t[e]})}}return n.default=t,Object.freeze(n)}const w=L(ot),It=L(Le),Ot=L(rt),Pt=L(it),Ct=X(ct),jt=L(lt),At=L(pt),D=L(ut),pe=X(ft),_=X(mt),_t=L(ht),vt=L(h),Dt=L(wt),J=X(Et),B=X(bt),xt=L(Tt);w.default.env.mode;const kt="image-bin";w.default.env.INIT_TEMPLATE_PATH;const Rt=process.env.DATABASE_URL||vt.default.join(w.default.env.dataDir,"db/pages-kit.db"),ve=w.default,Nt=()=>w.default.env.tenantMode==="multiple",Lt=()=>{var t;return(xt.default(ve.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=ve.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},I=Ot.default("pages-kit"),Ut=C.DataTypes.sqlite.DATE.parse;C.DataTypes.sqlite.DATE.parse=(t,n)=>typeof t=="number"?new Date(t):Ut(t,n);const Z=new C.Sequelize({dialect:"sqlite",storage:Rt,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});Z.query("pragma journal_mode = WAL;");Z.query("pragma synchronous = normal;");Z.query("pragma journal_size_limit = 67108864;");class ce extends C.Model{}ce.init({id:{type:C.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:C.DataTypes.UUIDV4},projectId:{type:C.DataTypes.UUID,allowNull:!1},componentId:{type:C.DataTypes.STRING,allowNull:!1}},{sequelize:Z,tableName:"ProjectComponents",timestamps:!1});class $ extends C.Model{static async getProjectByIdOrSlug(n){return $.findOne({where:{[C.Op.or]:[{id:n},{slug:n}]}})}}$.init({id:{type:C.DataTypes.UUID,defaultValue:C.DataTypes.UUIDV4,primaryKey:!0},name:{type:C.DataTypes.STRING,allowNull:!1},description:C.DataTypes.TEXT,createdAt:C.DataTypes.DATE,updatedAt:C.DataTypes.DATE,createdBy:{type:C.DataTypes.STRING,allowNull:!1},updatedBy:{type:C.DataTypes.STRING,allowNull:!1},slug:C.DataTypes.STRING,icon:C.DataTypes.STRING,pinnedAt:C.DataTypes.DATE,useAllResources:C.DataTypes.BOOLEAN,npmSecret:C.DataTypes.STRING,relatedBlocklets:{type:C.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(t){this.setDataValue("relatedBlocklets",JSON.stringify(t||{}))}}},{sequelize:Z,paranoid:!0});$.hasMany(ce,{foreignKey:"projectId",as:"components"});const Mt=async(t,{componentId:n})=>{const e=`@tailwind components;
|
|
2
2
|
@tailwind utilities;
|
|
3
3
|
`,s=`.CustomComponent_${n}`;return(await jt.default([At.default({content:[{raw:t,extension:"tsx"}]}),Pt.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),r=>{r.walkRules(l=>{l.selectors=l.selectors.map(a=>a.replace(/\.(.+)/g,`${s}.$1,${s} .$1`))})}]).process(e)).css},Ft=async(t,{componentId:n})=>{const e=await Mt(t,{componentId:n});return`export const __PagesKit_CSS__ = ${JSON.stringify(e)};
|
|
4
4
|
|
|
@@ -29,7 +29,7 @@ var ${t} = ${e?"async":""} function () {
|
|
|
29
29
|
|
|
30
30
|
return exports;
|
|
31
31
|
};
|
|
32
|
-
`},K=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){I.info("clear preload components cache",{cacheKey:t}),K.delete(t)}function $e(t){for(const n of K.keys())n.includes(t)&&(I.info("clear preload components cache",{cacheKey:n}),qe(n))}function Be({mode:t,instanceId:n,componentId:e,locale:s}){return["getPreloadComponents",t,n,e,s].join("-")}async function Bt({mode:t,req:n,state:e,locale:s,instances:o,module:r}){const{supportedLocales:l,config:{defaultLocale:a}}=e;if(!a)return null;const i=(await Promise.all(o.map(async g=>{try{const S=Be({mode:t,instanceId:g.id,componentId:g.componentId,locale:s});if(t!=="draft"&&g.useCache&&K.has(S))return I.info(`get preload component from cache: ${S}`),K.get(S);const j=W({state:e,componentId:g.componentId});if(!j)return null;const v=await Ve({req:n,state:e,componentId:j.id,locale:s,defaultLocale:a,properties:g.properties});if(!v)return null;const F={instanceId:g.id,preload:v};if(t!=="draft"&&g.useCache){let R=Fe;g.cacheDuration&&(R=g.cacheDuration),I.info(`set preload component to cache(${R}s): ${S}`),K.set(S,F,{ttl:R*1e3})}return F}catch(S){return I.error("get preload component error",{instanceId:g.id,componentId:g.componentId},{error:S}),null}}))).filter(g=>!!g),c=Object.values(i.reduce((g,S)=>({...g,...S.preload.components}),{}));async function p(){const g=await Promise.all(c.map(async S=>{const j=oe.componentUMDName({componentId:S.component.id}),v=r===se.PreloadComponentScriptModule.ESM?{module:r,script:await De(S.script,{componentId:S.component.id,module:r,tailwind:t!=="draft"})}:{module:r,script:await De(S.script,{componentId:S.component.id,module:r,moduleName:j,tailwind:t!=="draft"}),moduleName:j};return[S.component.id,{component:S.component,script:v}]}));return Object.fromEntries(g)}const u=await p();return{config:{defaultLocale:a,supportedLocales:l},components:u,instances:i.map(g=>({id:g.instanceId,componentId:g.preload.component.id,locales:{[g.preload.locale]:{props:g.preload.props}}}))}}async function Ve({req:t,state:n,componentId:e,locale:s,defaultLocale:o,properties:r}){const{supportedLocales:l}=n,a=W({state:n,componentId:e});if(!a)return null;const i=l.some(p=>p.locale===s)?s:o;if(!i)return null;const c=await
|
|
32
|
+
`},K=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){I.info("clear preload components cache",{cacheKey:t}),K.delete(t)}function $e(t){for(const n of K.keys())n.includes(t)&&(I.info("clear preload components cache",{cacheKey:n}),qe(n))}function Be({mode:t,instanceId:n,componentId:e,locale:s}){return["getPreloadComponents",t,n,e,s].join("-")}async function Bt({mode:t,req:n,state:e,locale:s,instances:o,module:r}){const{supportedLocales:l,config:{defaultLocale:a}}=e;if(!a)return null;const i=(await Promise.all(o.map(async g=>{try{const S=Be({mode:t,instanceId:g.id,componentId:g.componentId,locale:s});if(t!=="draft"&&g.useCache&&K.has(S))return I.info(`get preload component from cache: ${S}`),K.get(S);const j=W({state:e,componentId:g.componentId});if(!j)return null;const v=await Ve({req:n,state:e,componentId:j.id,locale:s,defaultLocale:a,properties:g.properties});if(!v)return null;const F={instanceId:g.id,preload:v};if(t!=="draft"&&g.useCache){let R=Fe;g.cacheDuration&&(R=g.cacheDuration),I.info(`set preload component to cache(${R}s): ${S}`),K.set(S,F,{ttl:R*1e3})}return F}catch(S){return I.error("get preload component error",{instanceId:g.id,componentId:g.componentId},{error:S}),null}}))).filter(g=>!!g),c=Object.values(i.reduce((g,S)=>({...g,...S.preload.components}),{}));async function p(){const g=await Promise.all(c.map(async S=>{const j=oe.componentUMDName({componentId:S.component.id}),v=r===se.PreloadComponentScriptModule.ESM?{module:r,script:await De(S.script,{componentId:S.component.id,module:r,tailwind:t!=="draft"})}:{module:r,script:await De(S.script,{componentId:S.component.id,module:r,moduleName:j,tailwind:t!=="draft"}),moduleName:j};return[S.component.id,{component:S.component,script:v}]}));return Object.fromEntries(g)}const u=await p();return{config:{defaultLocale:a,supportedLocales:l},components:u,instances:i.map(g=>({id:g.instanceId,componentId:g.preload.component.id,locales:{[g.preload.locale]:{props:g.preload.props}}}))}}async function Ve({req:t,state:n,componentId:e,locale:s,defaultLocale:o,properties:r}){const{supportedLocales:l}=n,a=W({state:n,componentId:e});if(!a)return null;const i=l.some(p=>p.locale===s)?s:o;if(!i)return null;const c=await Ge({req:t,state:n,componentId:e,locale:i,defaultLocale:o,properties:r});return c?{component:a,...c}:null}const Vt=20;async function Ge({req:t,depth:n=0,state:e,componentId:s,locale:o,defaultLocale:r,properties:l}){if(n>Vt)throw new RangeError("max component depth exceeded");const a=Gt({state:e,componentId:s,properties:l,locale:o});if(!a)return null;const{props:i}=a,c={locale:o||r,components:{[a.component.id]:{component:a.component,script:a.script}},props:{...i}};try{const p=await zt({...a,req:t});p!=null&&p.props&&Object.assign(c.props,p.props)}catch(p){I.error("preload data at server side error",{componentId:s,name:a.component.name},{error:p})}return await Promise.all(Object.entries(i).map(async([p,u])=>{if((u==null?void 0:u.type)===oe.RenderNestedComponent){const f=await Ge({req:t,depth:n+1,state:e,componentId:u.componentId,locale:o,defaultLocale:r,properties:u.properties});f&&(Object.assign(c.components,f.components),Object.assign(c.props,{[p]:{type:oe.RenderNestedComponent,componentId:u.componentId,props:f.props}}))}})),c}function Gt({state:t,componentId:n,locale:e,properties:s}){const o=W({state:t,componentId:n});if(!o)return null;const r=oe.mergeComponent({componentId:n,getComponent:l=>W({state:t,componentId:l}),locale:e,defaultLocale:t.config.defaultLocale,properties:s});return r?{component:o,script:r.script,props:{locale:e,...r.properties}}:null}function W({state:t,componentId:n}){var e,s,o;return((e=t.components[n])==null?void 0:e.data)??((o=(s=t.resources.components)==null?void 0:s[n])==null?void 0:o.component)}function Ht({state:t,name:n}){var s,o;const e=n.toLowerCase();return((s=Object.values(t.components).find(r=>{var l;return((l=r.data.name)==null?void 0:l.toLowerCase())===e}))==null?void 0:s.data)??((o=t.resources.components&&Object.values(t.resources.components).find(r=>{var l;return((l=r.component.name)==null?void 0:l.toLowerCase())===e}))==null?void 0:o.component)}async function zt({component:t,script:n,props:e,req:s}){if(!(n!=null&&n.includes("getServerSideProps")))return null;const o=await Me(n,"getServerSideProps");if(!o)return null;const r=new Promise(a=>{setTimeout(()=>{I.error("getServerSideProps timeout"),a({})},me*1e3)});return await Promise.race([r,V.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 V.BuiltinModules.dayjs},global:{console:{log:(...a)=>{I.info(...a)},warn:(...a)=>{I.warn(...a)},error:(...a)=>{I.error(...a)}},getComponentMountPoint:nt.getComponentMountPoint,joinURL:x.joinURL,withQuery:x.withQuery,getQuery:x.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:x.joinURL(x.withHttps(s.hostname),s.originalUrl)},fetch:(a,{...i}={})=>{const c=typeof a=="string"&&a.startsWith("/")?x.joinURL(w.default.env.appUrl,a):a;if(typeof c=="string"&&x.parseURL(c).host===x.parseURL(w.default.env.appUrl).host){const p=s.get("cookie");if(p){const u=new
|
|
51
|
+
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return V.BuiltinModules.dayjs},global:{console:{log:(...a)=>{I.info(...a)},warn:(...a)=>{I.warn(...a)},error:(...a)=>{I.error(...a)}},getComponentMountPoint:nt.getComponentMountPoint,joinURL:x.joinURL,withQuery:x.withQuery,getQuery:x.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:x.joinURL(x.withHttps(s.hostname),s.originalUrl)},fetch:(a,{...i}={})=>{const c=typeof a=="string"&&a.startsWith("/")?x.joinURL(w.default.env.appUrl,a):a;if(typeof c=="string"&&x.parseURL(c).host===x.parseURL(w.default.env.appUrl).host){const p=s.get("cookie");if(p){const u=new Le.Headers(i.headers);u.set("cookie",p),i.headers=u}}return It.default(c,{...i,timeout:me*1e3}).then(p=>({ok:p.ok,status:p.status,statusText:p.statusText,headers:Object.fromEntries(p.headers.entries()),json:()=>p.json()}))},props:e}]})])}const He=V.memoize(async(t,n,e)=>{if(!(t!=null&&t.includes(n)))return null;const s=await Me(t,n);if(s)try{return await V.Sandbox.callFunction({code:`
|
|
52
52
|
${s}
|
|
53
53
|
|
|
54
54
|
export function get${n}SchemaWrapper() {
|
|
55
55
|
return ${n};
|
|
56
56
|
}
|
|
57
|
-
`,filename:`${e}.js`,functionName:`get${n}SchemaWrapper`})}catch(o){return I.error(`获取 ${n} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,n,e)=>{const s=ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",s,n,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Jt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Jt,Kt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ie=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,Y=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,xe=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Wt=1e4,Qt=3e4,te=0,ue=1,Xt=0,Zt=1,Se=w.default,z=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function ze(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function ss(){var e;const t=Se.env.languages.map(s=>({locale:s.code,name:s.name})),n=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},components:{},supportedLocales:t,config:{defaultLocale:n},resources:{}}}const q=class q extends B.Doc{constructor(e){super();A(this,"states",{});A(this,"syncedStore");A(this,"conns",new Map);A(this,"awareness");A(this,"awarenessChangeHandler",({added:e,updated:s,removed:o},r)=>{const l=e.concat(s,o);if(r!==null){const c=this.conns.get(r);c&&(e.forEach(p=>{c.add(p)}),o.forEach(p=>{c.delete(p)}))}const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,l));const i=_.toUint8Array(a);this.conns.forEach((c,p)=>this.send(p,i))});A(this,"updateHandler",e=>{const s=_.createEncoder();_.writeVarUint(s,te),le.writeUpdate(s,e);const o=_.toUint8Array(s);this.conns.forEach((r,l)=>this.send(l,o))});A(this,"ensureDataStructure",()=>{var l;const{supportedLocales:e,pages:s,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(s));let i=0;for(;i<o.length;){const c=o[i];a.has(c)?(a.delete(c),i++):o.splice(i,1)}}e.splice(0,e.length),e.push(...Se.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(l=e[0])==null?void 0:l.locale;{let a=0;const i=new Set;for(;a<e.length;){const{locale:c}=e[a];i.has(c)?e.splice(a,1):(a++,i.add(c))}}});A(this,"send",(e,s)=>{e.readyState!==Xt&&e.readyState!==Zt&&this.closeConn(e);try{e.send(s,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});A(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const s=this.conns.get(e);this.conns.delete(e),s&&G.removeAwarenessStates(this.awareness,Array.from(s),null)}e.close()});A(this,"autoSave",L.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Wt));A(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});A(this,"publish",async({mode:e,pages:s})=>{const o=await this.getState("draft"),r=await this.getState("production");await we(o,r,{pages:s,pageMergeMode:"replace",deletePages:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const l of s||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(e,r)});A(this,"mergeState",async(e,s)=>{var a,i,c;const o=JSON.parse(JSON.stringify(s));(a=e.config).fontFamily??(a.fontFamily={});const r=(i=o.config)==null?void 0:i.fontFamily,l=(c=e.config)==null?void 0:c.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(l==null?void 0:l.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(l==null?void 0:l.description),await new Promise((p,u)=>{this.transact(async()=>{try{const f=await we(e,s);p(f)}catch(f){u(f)}})})});A(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 s=!0;const o=setInterval(()=>{if(!s)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){s=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},Qt);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{s=!0});{const r=_.createEncoder();_.writeVarUint(r,te),le.writeSyncStep1(r,this),this.send(e,_.toUint8Array(r));const l=this.awareness.getStates();if(l.size>0){const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(e,_.toUint8Array(a))}}});A(this,"messageListener",(e,s)=>{try{const o=_.createEncoder(),r=pe.createDecoder(s),l=pe.readVarUint(r);switch(l){case te:_.writeVarUint(o,te),le.readSyncMessage(r,o,this,null),_.length(o)>1&&(this.ensureDataStructure(),this.send(e,_.toUint8Array(o)));break;case ue:{G.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(r),e);break}default:I.warn(`Unsupported messageType ${l}`)}}catch(o){I.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,E.readFileSync(this.draftYjsFilePath)),this.syncedStore=dt.reactive(ee.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new G.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=h.join(z,e),o=h.join(z,`@del-${e}`);E.renameSync(s,o)}catch(s){I.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:z,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>q.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=this.sharedInstances.get(e);return s||(s=new q({path:h.join(z,e)}),this.sharedInstances.set(e,s),s)}destroy(){this.conns.forEach((e,s)=>this.closeConn(s)),this.awareness.destroy(),super.destroy()}initObserver(){const e=o=>{o.observeDeep(r=>{r.some(l=>l.changes.keys.has("updatedAt")||l.changes.keys.has("publishedAt"))||o.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(o=>{const r=ee.getYjsValue(this.syncedStore.pages[o]);r&&r instanceof B.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof B.Map&&s.observe(o=>{o.changes.keys.forEach((r,l)=>{if(r.action==="add"){const a=ee.getYjsValue(this.syncedStore.pages[l]);a&&a instanceof B.Map&&e(a)}})})}get draftYjsFilePath(){return h.join(this.options.path,"draft.yjs")}async getState(e){var s,o,r,l;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Oe(this.getPublishDir(e),{includeResources:!0})??ss(),!((o=(s=this.states[e])==null?void 0:s.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Se.env.languages.map(i=>({locale:i.code,name:i.name}));this.states[e].config.defaultLocale=(l=a[0])==null?void 0:l.locale}return{...this.states[e],resources:await Ae().then(async a=>{var u,f,g,S;const{pages:i,components:c}=L.pick(a,"pages","components");let p=c;if((f=(u=this.states[e])==null?void 0:u.resources)!=null&&f.components)p={...(S=(g=this.states[e])==null?void 0:g.resources)==null?void 0:S.components};else{const j=h.basename(this.options.path),v=await $.findByPk(j);if(v!=null&&v.useAllResources)p=c;else{const R=(await ce.findAll({where:{projectId:j}})).map(T=>T.componentId);p=Object.fromEntries(Object.entries(c||{}).filter(([T])=>R.includes(T)))}}return{pages:i,components:p}}).catch(()=>({}))}}async setState(e,s){const o=await Ye(s,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);E.mkdirSync(h.dirname(r),{recursive:!0}),E.rmSync(r,{force:!0,recursive:!0}),E.renameSync(o,r),this.states[e]=s}getPublishDir(e){return h.join(this.options.path,e)}static async pageUrlMap(e){const{projectIds:s}=this,o={};for(const r of s){const l=await $.findByPk(r);if(!l)continue;const a=await q.shared(r).getState(e),i=L.union(w.default.env.languages.map(c=>c.code),a.supportedLocales.map(c=>c.locale));for(const c of a.pageIds){const p=a.pages[c];if(!p||e==="production"&&!p.isPublic)continue;const u=p.slug,f=l.slug||r,g={projectId:r,projectSlug:f,pageSlug:u,pageId:c,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:a.config.publishedAt,isPublic:p.isPublic,isTemplate:p.isTemplate};f&&(o[x.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[x.joinURL("/",S,r,u)]=j,f&&(o[x.joinURL("/",S,f,u)]=j)}}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:s,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};A(q,"INSTANCE_TTL",30*60*1e3),A(q,"sharedInstances",new Ee.LRUCache({max:100,ttl:q.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let Q=q;function Je(){return E.mkdtempSync(h.join(w.default.env.dataDir,"tmp-"))}function re(t,n,e=[]){return Array.isArray(t)?t.flatMap((s,o)=>re(s,n,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([s,o])=>re(o,n,[...e,s])):n(t)?[e]:[]}function M(t){return t.filter(n=>n!=null)}async function ns(t,n,e){if(!t||!E.existsSync(t)||!E.lstatSync(t).isFile())return null;let s=e[t];return s||(s=(async()=>{var o;try{const r=(o=await Yt({filePath:t,fileName:n}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return I.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=s),s}const os=async(t,n)=>{const e=h.basename(t),s=await be.call({name:Te,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(s.status>=200&&s.status<400){const o=E.createWriteStream(n);await yt.pipeline(s.data,o)}else throw new Error(`download asset failed ${s.status}`)},rs=async(t,n)=>{await Promise.all(t.map(async e=>{try{await os(e,h.join(n,h.basename(e)))}catch(s){I.error(`Failed to export assets: ${e}, ${s}`)}}))};function Ke(t){return Ie.test(t)?[t]:Y.test(t)?(xe.lastIndex=0,Array.from(t.matchAll(xe)).map(e=>e[1]).filter(e=>!!e)):[]}async function de(t,n,e){const{getFilename:s,exportAssets:o}=e,r=h.join(n,s(t));if(E.mkdirSync(h.dirname(r),{recursive:!0}),E.writeFileSync(r,J.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))).map(i=>{const c=L.get(t,i);return Ke(c)}).flat().filter(Boolean);await rs(a,h.dirname(r))}}const ke=new Ee.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Re(t,n,e){var a;const s=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=L.get(t,i),p=Ke(c);for(const u of p){const f=h.basename(u),g=e.getFilePath(u,i),S=g?`${g}:${f}`:f,j=ke.get(S);if(j){Y.test(c)||L.set(t,i,j);return}const v=await ns(g,f,n);v&&(Y.test(c)||L.set(t,i,v),ke.set(S,v))}}catch(c){I.error(`Failed to process upload for path ${i.join(".")}:`,c.message||c.reason)}})),l=await Promise.allSettled(r);(a=e.onFinish)==null||a.call(e,l)}async function Ye(t,{exportAssets:n,pageIds:e="all",componentIds:s="all",rawConfig:o,includeResources:r=!1}={}){var F,R,y,T,O,P;const l=e==="all"?t.pageIds:e,a=as({state:t,pageIds:l,componentIds:s==="all"?Object.keys(t.components):s}),i=(m,d)=>{var b;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,component:m.component,config:m.config,visibility:m.visibility,properties:((b=m.locales)==null?void 0:b[d])??{}}},c=(m,d)=>{var b;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,isTemplate:m.isTemplate??!1,meta:((b=m.locales)==null?void 0:b[d])??{},sections:M(m.sectionIds.map(k=>{const U=m.sections[k];return U&&i(U,d)}))}},p=M(t.supportedLocales.map(m=>m.locale).flatMap(m=>l.map(d=>{const b=t.pages[d];return b&&{locale:m,slug:b.slug,page:c(b,m)}}))),u=Je(),f=h.join(u,"pages");E.mkdirSync(f,{recursive:!0});const g=h.join(u,"components");E.mkdirSync(g,{recursive:!0});for(const{locale:m,slug:d,page:b}of p)await de(b,f,{getFilename:()=>`${ze(d)||"index"}.${m}.yml`,exportAssets:n});for(const m of a){const d=(F=t.components[m])==null?void 0:F.data;d&&await de(d,g,{getFilename:b=>`${b.name||"unnamed"}.${b.id}.yml`,exportAssets:n})}const S=h.join(u,".blocklet/pages/pages.config.yml");E.mkdirSync(h.dirname(S),{recursive:!0});const j={pages:M(l.map(m=>{const d=t.pages[m];return d&&{id:m,slug:d.slug}})),components:M(a.map(m=>{var b;const d=(b=t.components[m])==null?void 0:b.data;return d&&{id:m,name:d.name}})),...r?{resources:{components:M(Object.keys(((R=t.resources)==null?void 0:R.components)||{}).map(m=>{var d,b,k,U;return{id:m,name:(U=(k=(b=(d=t.resources)==null?void 0:d.components)==null?void 0:b[m])==null?void 0:k.component)==null?void 0:U.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};E.writeFileSync(S,J.stringify(j));const v=h.join(u,"config.source.json");if(o&&E.writeFileSync(v,JSON.stringify(o)),r){const m=h.join(u,"resources"),d=h.join(m,"components");E.mkdirSync(d,{recursive:!0});for(const b of Object.keys(((y=t==null?void 0:t.resources)==null?void 0:y.components)??{})){const k=(P=(O=(T=t.resources)==null?void 0:T.components)==null?void 0:O[b])==null?void 0:P.component;k&&await de(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:n})}}return u}async function Oe(t,{importAssets:n,includeResources:e}={}){var r,l,a;if(!E.existsSync(t))return null;let s,o=!1;try{E.lstatSync(t).isDirectory()?s=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,s=Je(),await St.x({file:t,C:s}));const i=fe.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s,absolute:!0}).at(0),c=i&&h.join(h.dirname(i),"../../pages"),p=i&&h.join(h.dirname(i),"../../components"),u=i&&h.join(h.dirname(i),"../../chunks");if(!i)return null;const f=J.parse(E.readFileSync(i).toString()),g=(y,T,O)=>{let P=h.join(y,`${T}${O?`.${O}`:""}.yml`);return(!E.existsSync(P)||!E.lstatSync(P).isFile())&&(P=h.join(y,T,`index${O?`.${O}`:""}.yml`),!E.existsSync(P)||!E.lstatSync(P))?null:J.parse(E.readFileSync(P).toString())},S=(y,T)=>{try{const O=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return O?J.parse(E.readFileSync(O).toString()):null}catch(O){I.error("parse component error",O)}return null},j=M(f.pages.map(({slug:y})=>{var m;const T=M(f.supportedLocales.map(({locale:d})=>{const b=c?g(c,ze(y),d):void 0;if(b)return{locale:d,page:b};const k=c?g(c,y,d):void 0;return k&&{locale:d,page:k}})),O=(m=T[0])==null?void 0:m.page;if(!O)return null;const P=O.sections.map(d=>{const b=d.id||ye();return{id:b,component:d.component,config:d.config,name:d.name,isTemplateSection:d.isTemplateSection??!1,templateDescription:d.templateDescription,visibility:d.visibility,locales:Object.fromEntries(M(T.map(({locale:k,page:U})=>{const _e=U.sections.find(et=>et.id===b);return _e&&[k,_e.properties]})))}});return{id:O.id||ye(),createdAt:O.createdAt,updatedAt:O.updatedAt,publishedAt:O.publishedAt,isPublic:O.isPublic??!0,isTemplate:O.isTemplate??!1,slug:y,sections:Object.fromEntries(P.map(d=>[d.id,d])),sectionIds:P.map(d=>d.id),locales:Object.fromEntries(T.map(({locale:d,page:b})=>[d,b.meta]))}})),v=p?M(((r=f.components)==null?void 0:r.map(({id:y})=>S(p,y)))??[]):[];if(n){const y=(...T)=>{I.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await Dt.default({resources:[`${be.getComponentWebEndpoint(kt)}/api/sdk/uploads`],validateStatus:P=>P>=200&&P<=500}),y("image-bin api is ready");const T={},O={};y("start to upload assets"),await Promise.allSettled([Re(v,T,{getFilePath:P=>p&&h.join(p,P),onFinish:P=>{y(`upload ${P.length} component assets`)}}),Re(j,O,{getFilePath:(P,m)=>{const d=L.get(j,m.slice(0,1));return c&&h.join(c,h.dirname(d.slug),P)},onFinish:P=>{y(`upload ${P.length} page assets`)}})]),y("upload assets done"),global.gc&&global.gc()}catch(T){y("Error during asset import:",T)}}const F={};if(e){const y=i&&h.join(h.dirname(i),"../../resources/components"),T=M(((a=(l=f.resources)==null?void 0:l.components)==null?void 0:a.map(({id:O})=>S(y,O)))??[]);T.length>0&&(F.components=Object.fromEntries(T.map((O,P)=>[O.id,{index:P,component:O}])))}const R={};if(u&&E.existsSync(u)){const y=E.readdirSync(u);for(const T of y)R[T]=h.join(u,T)}return{supportedLocales:f.supportedLocales,pageIds:j.map(y=>y.id),components:Object.fromEntries(v.map((y,T)=>[y.id,{index:T,data:y}])),pages:Object.fromEntries(j.map(y=>[y.id,y])),config:f.config||{},resources:F,chunks:R}}finally{o&&s&&E.rmSync(s,{force:!0,recursive:!0})}}async function we(t,n,{pages:e,pageMergeMode:s="byUpdateTime",deletePages:o=!1,publishMode:r=void 0}={}){try{r&&$e(r)}catch(p){I.error("clear preload page cache error",{error:p})}const{pageIds:l,pages:a,supportedLocales:i}=t;for(const p of e??l){const u=a[p];if(!u){const f=n.pageIds.indexOf(p);f!==-1&&o&&(n.pageIds.splice(f,1),delete n.pages[p]);continue}if(n.pageIds.includes(u.id)){if(s==="replace")n.pages[u.id]=u;else if(s==="byUpdateTime"){const f=n.pages[u.id];(!f||u.updatedAt&&u.updatedAt>f.updatedAt)&&(n.pages[u.id]=u)}}else n.pageIds.push(u.id),n.pages[u.id]=u}if(o&&!e)for(const p of n.pageIds)t.pageIds.includes(p)||delete n.pages[p],n.pageIds=[...n.pageIds].filter(u=>t.pageIds.includes(u));if(n.supportedLocales.splice(0,n.supportedLocales.length),n.supportedLocales.push(...L.cloneDeep(i)),o)for(const p of Object.keys(n.components))delete n.components[p];let c=JSON.parse(JSON.stringify(t.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([p,u])=>{const f=await We(u==null?void 0:u.data);return[p,{...u,data:f}]}))),Object.assign(n.components,c),Object.assign(n.config,JSON.parse(JSON.stringify(t.config))),n.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const We=V.memoize(async t=>{var n;if(!L.isEmpty(t==null?void 0:t.properties))return t;if(((n=t==null?void 0:t.renderer)==null?void 0:n.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const s=await Ge(e,"PROPERTIES_SCHEMA",t.id);s&&s.length>0&&t&&(t.properties={},s.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(s){I.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:s})}}return t},{keyGenerator:t=>{var l;const n=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",s=((l=t==null?void 0:t.renderer)==null?void 0:l.type)||"",o=(t==null?void 0:t.properties)||{},r=ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",n,e,s,r])},lruOptions:{max:100,ttl:1e3*60*60}});function as({state:t,pageIds:n=[],componentIds:e=[]}){var l;const s=(a,i=new Set)=>(Array.isArray(a)&&a.forEach(c=>s(c,i)),a&&typeof a=="object"&&(typeof a.componentId=="string"&&i.add(a.componentId),Object.values(a).forEach(c=>s(c,i))),i),o=new Set(e);for(const a of n){const i=t.pages[a];s(i,o)}const r=[...o];for(;r.length;){const a=r.shift();o.has(a)||o.add(a);const i=(l=t.components[a])==null?void 0:l.data;if(i)for(const c of s(i))o.has(c)||r.push(c)}return[...o]}let ae,H,Pe,Ce,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:Kt,type:ge}]});H=(await Promise.all(t.map(async e=>{const s=e.path?await Oe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Pe=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:s.blockletId}]:[]))),{});const n=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.components).map(o=>[o.data.id,{blockletId:s.blockletId,component:o.data}]))),{});Ce=Object.fromEntries(await Promise.all(Object.entries(n).map(async([e,s])=>{const o=await We(s.component);return[e,{...s,component:o}]}))),je=H.reduce((e,s)=>Object.assign(e,s.state.chunks),{})})(),ae}function Xe(t){const n=L.debounce(async()=>{await Qe().catch(e=>{I.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:H,pages:Pe,components:Ce,chunks:je}))},3e3,{leading:!1,trailing:!0});return n(),w.default.events.on(w.default.Events.componentAdded,n),w.default.events.on(w.default.Events.componentRemoved,n),w.default.events.on(w.default.Events.componentStarted,n),w.default.events.on(w.default.Events.componentStopped,n),w.default.events.on(w.default.Events.componentUpdated,n),w.default.events.on(he,n),()=>{w.default.events.off(w.default.Events.componentAdded,n),w.default.events.off(w.default.Events.componentRemoved,n),w.default.events.off(w.default.Events.componentStarted,n),w.default.events.off(w.default.Events.componentStopped,n),w.default.events.off(w.default.Events.componentUpdated,n),w.default.events.off(he,n)}}const Ze=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),ne=globalThis;var Le;(Le=ne[Ze])==null||Le.call(ne);ne[Ze]=Xe(async({pages:t,components:n})=>{const{projectIds:e}=Q;I.info(`start update resource states projects(${e.length})`,e),await Promise.race([new Promise(s=>{setTimeout(()=>{I.error("update resource states timeout"),s({})},30*1e3)}),Promise.all(e.map(async s=>{const o=Q.shared(s);o.syncedStore.resources.pages=t;const r=await $.findByPk(s);if(r!=null&&r.useAllResources)o.syncedStore.resources.components=n;else{const a=(await ce.findAll({where:{projectId:s}})).map(c=>c.componentId),i=Object.fromEntries(Object.entries(n||{}).filter(([c])=>a.includes(c)));o.syncedStore.resources.components=i}I.info(`update [${s}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(s=>{I.error("update resource states failed:",s)})});async function is(){I.info("trigger reload all project resource"),w.default.events.emit(he)}async function Ae({ensureLoaded:t=!0}={}){return t&&(ae??(ae=Qe()),await ae),{states:H,pages:Pe,components:Ce,chunks:je}}exports.COMPONENT_DID=Te;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=Fe;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=me;exports.PUBLISH_MODES=ts;exports.Project=$;exports.RESOURCE_TYPE=ge;exports.SITE_STATE_PATH=z;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Oe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Gt;exports.getExportSchemaValueFromCode=Ge;exports.getMultiTenantAllProjectAccessPassports=Nt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Lt;exports.logger=I;exports.mergeState=we;exports.nextId=ye;exports.toPackage=Ye;exports.triggerReloadAllProjectResource=is;
|
|
57
|
+
`,filename:`${e}.js`,functionName:`get${n}SchemaWrapper`})}catch(o){return I.error(`获取 ${n} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,n,e)=>{const s=ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",s,n,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Jt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Jt,Kt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ie=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,Y=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,xe=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Wt=1e4,Qt=3e4,te=0,ue=1,Xt=0,Zt=1,Se=w.default,z=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function ze(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function ss(){var e;const t=Se.env.languages.map(s=>({locale:s.code,name:s.name})),n=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},components:{},supportedLocales:t,config:{defaultLocale:n},resources:{}}}const q=class q extends B.Doc{constructor(e){super();A(this,"states",{});A(this,"syncedStore");A(this,"conns",new Map);A(this,"awareness");A(this,"awarenessChangeHandler",({added:e,updated:s,removed:o},r)=>{const l=e.concat(s,o);if(r!==null){const c=this.conns.get(r);c&&(e.forEach(p=>{c.add(p)}),o.forEach(p=>{c.delete(p)}))}const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,H.encodeAwarenessUpdate(this.awareness,l));const i=_.toUint8Array(a);this.conns.forEach((c,p)=>this.send(p,i))});A(this,"updateHandler",e=>{const s=_.createEncoder();_.writeVarUint(s,te),le.writeUpdate(s,e);const o=_.toUint8Array(s);this.conns.forEach((r,l)=>this.send(l,o))});A(this,"ensureDataStructure",()=>{var l;const{supportedLocales:e,pages:s,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(s));let i=0;for(;i<o.length;){const c=o[i];a.has(c)?(a.delete(c),i++):o.splice(i,1)}}e.splice(0,e.length),e.push(...Se.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(l=e[0])==null?void 0:l.locale;{let a=0;const i=new Set;for(;a<e.length;){const{locale:c}=e[a];i.has(c)?e.splice(a,1):(a++,i.add(c))}}});A(this,"send",(e,s)=>{e.readyState!==Xt&&e.readyState!==Zt&&this.closeConn(e);try{e.send(s,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});A(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const s=this.conns.get(e);this.conns.delete(e),s&&H.removeAwarenessStates(this.awareness,Array.from(s),null)}e.close()});A(this,"autoSave",N.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Wt));A(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});A(this,"publish",async({mode:e,pages:s})=>{const o=await this.getState("draft"),r=await this.getState("production");await we(o,r,{pages:s,pageMergeMode:"replace",deletePages:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const l of s||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(e,r)});A(this,"mergeState",async(e,s)=>{var a,i,c;const o=JSON.parse(JSON.stringify(s));(a=e.config).fontFamily??(a.fontFamily={});const r=(i=o.config)==null?void 0:i.fontFamily,l=(c=e.config)==null?void 0:c.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(l==null?void 0:l.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(l==null?void 0:l.description),await new Promise((p,u)=>{this.transact(async()=>{try{const f=await we(e,s);p(f)}catch(f){u(f)}})})});A(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 s=!0;const o=setInterval(()=>{if(!s)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){s=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},Qt);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{s=!0});{const r=_.createEncoder();_.writeVarUint(r,te),le.writeSyncStep1(r,this),this.send(e,_.toUint8Array(r));const l=this.awareness.getStates();if(l.size>0){const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,H.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(e,_.toUint8Array(a))}}});A(this,"messageListener",(e,s)=>{try{const o=_.createEncoder(),r=pe.createDecoder(s),l=pe.readVarUint(r);switch(l){case te:_.writeVarUint(o,te),le.readSyncMessage(r,o,this,null),_.length(o)>1&&(this.ensureDataStructure(),this.send(e,_.toUint8Array(o)));break;case ue:{H.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(r),e);break}default:I.warn(`Unsupported messageType ${l}`)}}catch(o){I.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,E.readFileSync(this.draftYjsFilePath)),this.syncedStore=dt.reactive(ee.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new H.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=h.join(z,e),o=h.join(z,`@del-${e}`);E.renameSync(s,o)}catch(s){I.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:z,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>q.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=this.sharedInstances.get(e);return s||(s=new q({path:h.join(z,e)}),this.sharedInstances.set(e,s),s)}destroy(){this.conns.forEach((e,s)=>this.closeConn(s)),this.awareness.destroy(),super.destroy()}initObserver(){const e=o=>{o.observeDeep(r=>{r.some(l=>l.changes.keys.has("updatedAt")||l.changes.keys.has("publishedAt"))||o.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(o=>{const r=ee.getYjsValue(this.syncedStore.pages[o]);r&&r instanceof B.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof B.Map&&s.observe(o=>{o.changes.keys.forEach((r,l)=>{if(r.action==="add"){const a=ee.getYjsValue(this.syncedStore.pages[l]);a&&a instanceof B.Map&&e(a)}})})}get draftYjsFilePath(){return h.join(this.options.path,"draft.yjs")}async getState(e){var s,o,r,l;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Oe(this.getPublishDir(e),{includeResources:!0})??ss(),!((o=(s=this.states[e])==null?void 0:s.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Se.env.languages.map(i=>({locale:i.code,name:i.name}));this.states[e].config.defaultLocale=(l=a[0])==null?void 0:l.locale}return{...this.states[e],resources:await Ae().then(async a=>{var u,f,g,S;const{pages:i,components:c}=N.pick(a,"pages","components");let p=c;if((f=(u=this.states[e])==null?void 0:u.resources)!=null&&f.components)p={...(S=(g=this.states[e])==null?void 0:g.resources)==null?void 0:S.components};else{const j=h.basename(this.options.path),v=await $.findByPk(j);if(v!=null&&v.useAllResources)p=c;else{const R=(await ce.findAll({where:{projectId:j}})).map(T=>T.componentId);p=Object.fromEntries(Object.entries(c||{}).filter(([T])=>R.includes(T)))}}return{pages:i,components:p}}).catch(()=>({}))}}async setState(e,s){const o=await Ye(s,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);E.mkdirSync(h.dirname(r),{recursive:!0}),E.rmSync(r,{force:!0,recursive:!0}),E.renameSync(o,r),this.states[e]=s}getPublishDir(e){return h.join(this.options.path,e)}static async pageUrlMap(e){const{projectIds:s}=this,o={};for(const r of s){const l=await $.findByPk(r);if(!l)continue;const a=await q.shared(r).getState(e),i=N.union(w.default.env.languages.map(c=>c.code),a.supportedLocales.map(c=>c.locale));for(const c of a.pageIds){const p=a.pages[c];if(!p||e==="production"&&!p.isPublic)continue;const u=p.slug,f=l.slug||r,g={projectId:r,projectSlug:f,pageSlug:u,pageId:c,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:a.config.publishedAt,isPublic:p.isPublic,isTemplate:p.isTemplate};f&&(o[x.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[x.joinURL("/",S,r,u)]=j,f&&(o[x.joinURL("/",S,f,u)]=j)}}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:s,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};A(q,"INSTANCE_TTL",30*60*1e3),A(q,"sharedInstances",new Ee.LRUCache({max:100,ttl:q.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let Q=q;function Je(){return E.mkdtempSync(h.join(w.default.env.dataDir,"tmp-"))}function re(t,n,e=[]){return Array.isArray(t)?t.flatMap((s,o)=>re(s,n,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([s,o])=>re(o,n,[...e,s])):n(t)?[e]:[]}function M(t){return t.filter(n=>n!=null)}async function ns(t,n,e){if(!t||!E.existsSync(t)||!E.lstatSync(t).isFile())return null;let s=e[t];return s||(s=(async()=>{var o;try{const r=(o=await Yt({filePath:t,fileName:n}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return I.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=s),s}const os=async(t,n)=>{const e=h.basename(t),s=await be.call({name:Te,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(s.status>=200&&s.status<400){const o=E.createWriteStream(n);await yt.pipeline(s.data,o)}else throw new Error(`download asset failed ${s.status}`)},rs=async(t,n)=>{await Promise.all(t.map(async e=>{try{await os(e,h.join(n,h.basename(e)))}catch(s){I.error(`Failed to export assets: ${e}, ${s}`)}}))};function Ke(t){return Ie.test(t)?[t]:Y.test(t)?(xe.lastIndex=0,Array.from(t.matchAll(xe)).map(e=>e[1]).filter(e=>!!e)):[]}async function de(t,n,e){const{getFilename:s,exportAssets:o}=e,r=h.join(n,s(t));if(E.mkdirSync(h.dirname(r),{recursive:!0}),E.writeFileSync(r,J.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))).map(i=>{const c=N.get(t,i);return Ke(c)}).flat().filter(Boolean);await rs(a,h.dirname(r))}}const ke=new Ee.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Re(t,n,e){var a;const s=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=N.get(t,i),p=Ke(c);for(const u of p){const f=h.basename(u),g=e.getFilePath(u,i),S=g?`${g}:${f}`:f,j=ke.get(S);if(j){Y.test(c)||N.set(t,i,j);return}const v=await ns(g,f,n);v&&(Y.test(c)||N.set(t,i,v),ke.set(S,v))}}catch(c){I.error(`Failed to process upload for path ${i.join(".")}:`,c.message||c.reason)}})),l=await Promise.allSettled(r);(a=e.onFinish)==null||a.call(e,l)}async function Ye(t,{exportAssets:n,pageIds:e="all",componentIds:s="all",rawConfig:o,includeResources:r=!1}={}){var F,R,y,T,O,P;const l=e==="all"?t.pageIds:e,a=as({state:t,pageIds:l,componentIds:s==="all"?Object.keys(t.components):s}),i=(m,d)=>{var b;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,component:m.component,config:m.config,visibility:m.visibility,properties:((b=m.locales)==null?void 0:b[d])??{}}},c=(m,d)=>{var b;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,isTemplate:m.isTemplate??!1,meta:((b=m.locales)==null?void 0:b[d])??{},sections:M(m.sectionIds.map(k=>{const U=m.sections[k];return U&&i(U,d)}))}},p=M(t.supportedLocales.map(m=>m.locale).flatMap(m=>l.map(d=>{const b=t.pages[d];return b&&{locale:m,slug:b.slug,page:c(b,m)}}))),u=Je(),f=h.join(u,"pages");E.mkdirSync(f,{recursive:!0});const g=h.join(u,"components");E.mkdirSync(g,{recursive:!0});for(const{locale:m,slug:d,page:b}of p)await de(b,f,{getFilename:()=>`${ze(d)||"index"}.${m}.yml`,exportAssets:n});for(const m of a){const d=(F=t.components[m])==null?void 0:F.data;d&&await de(d,g,{getFilename:b=>`${b.name||"unnamed"}.${b.id}.yml`,exportAssets:n})}const S=h.join(u,".blocklet/pages/pages.config.yml");E.mkdirSync(h.dirname(S),{recursive:!0});const j={pages:M(l.map(m=>{const d=t.pages[m];return d&&{id:m,slug:d.slug}})),components:M(a.map(m=>{var b;const d=(b=t.components[m])==null?void 0:b.data;return d&&{id:m,name:d.name}})),...r?{resources:{components:M(Object.keys(((R=t.resources)==null?void 0:R.components)||{}).map(m=>{var d,b,k,U;return{id:m,name:(U=(k=(b=(d=t.resources)==null?void 0:d.components)==null?void 0:b[m])==null?void 0:k.component)==null?void 0:U.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};E.writeFileSync(S,J.stringify(j));const v=h.join(u,"config.source.json");if(o&&E.writeFileSync(v,JSON.stringify(o)),r){const m=h.join(u,"resources"),d=h.join(m,"components");E.mkdirSync(d,{recursive:!0});for(const b of Object.keys(((y=t==null?void 0:t.resources)==null?void 0:y.components)??{})){const k=(P=(O=(T=t.resources)==null?void 0:T.components)==null?void 0:O[b])==null?void 0:P.component;k&&await de(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:n})}}return u}async function Oe(t,{importAssets:n,includeResources:e}={}){var r,l,a;if(!E.existsSync(t))return null;let s,o=!1;try{E.lstatSync(t).isDirectory()?s=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,s=Je(),await St.x({file:t,C:s}));const i=fe.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s,absolute:!0}).at(0),c=i&&h.join(h.dirname(i),"../../pages"),p=i&&h.join(h.dirname(i),"../../components"),u=i&&h.join(h.dirname(i),"../../chunks");if(!i)return null;const f=J.parse(E.readFileSync(i).toString()),g=(y,T,O)=>{let P=h.join(y,`${T}${O?`.${O}`:""}.yml`);return(!E.existsSync(P)||!E.lstatSync(P).isFile())&&(P=h.join(y,T,`index${O?`.${O}`:""}.yml`),!E.existsSync(P)||!E.lstatSync(P))?null:J.parse(E.readFileSync(P).toString())},S=(y,T)=>{try{const O=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return O?J.parse(E.readFileSync(O).toString()):null}catch(O){I.error("parse component error",O)}return null},j=M(f.pages.map(({slug:y})=>{var m;const T=M(f.supportedLocales.map(({locale:d})=>{const b=c?g(c,ze(y),d):void 0;if(b)return{locale:d,page:b};const k=c?g(c,y,d):void 0;return k&&{locale:d,page:k}})),O=(m=T[0])==null?void 0:m.page;if(!O)return null;const P=O.sections.map(d=>{const b=d.id||ye();return{id:b,component:d.component,config:d.config,name:d.name,isTemplateSection:d.isTemplateSection??!1,templateDescription:d.templateDescription,visibility:d.visibility,locales:Object.fromEntries(M(T.map(({locale:k,page:U})=>{const _e=U.sections.find(et=>et.id===b);return _e&&[k,_e.properties]})))}});return{id:O.id||ye(),createdAt:O.createdAt,updatedAt:O.updatedAt,publishedAt:O.publishedAt,isPublic:O.isPublic??!0,isTemplate:O.isTemplate??!1,slug:y,sections:Object.fromEntries(P.map(d=>[d.id,d])),sectionIds:P.map(d=>d.id),locales:Object.fromEntries(T.map(({locale:d,page:b})=>[d,b.meta]))}})),v=p?M(((r=f.components)==null?void 0:r.map(({id:y})=>S(p,y)))??[]):[];if(n){const y=(...T)=>{I.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await Dt.default({resources:[`${be.getComponentWebEndpoint(kt)}/api/sdk/uploads`],validateStatus:P=>P>=200&&P<=500}),y("image-bin api is ready");const T={},O={};y("start to upload assets"),await Promise.allSettled([Re(v,T,{getFilePath:P=>p&&h.join(p,P),onFinish:P=>{y(`upload ${P.length} component assets`)}}),Re(j,O,{getFilePath:(P,m)=>{const d=N.get(j,m.slice(0,1));return c&&h.join(c,h.dirname(d.slug),P)},onFinish:P=>{y(`upload ${P.length} page assets`)}})]),y("upload assets done"),global.gc&&global.gc()}catch(T){y("Error during asset import:",T)}}const F={};if(e){const y=i&&h.join(h.dirname(i),"../../resources/components"),T=M(((a=(l=f.resources)==null?void 0:l.components)==null?void 0:a.map(({id:O})=>S(y,O)))??[]);T.length>0&&(F.components=Object.fromEntries(T.map((O,P)=>[O.id,{index:P,component:O}])))}const R={};if(u&&E.existsSync(u)){const y=E.readdirSync(u);for(const T of y)R[T]=h.join(u,T)}return{supportedLocales:f.supportedLocales,pageIds:j.map(y=>y.id),components:Object.fromEntries(v.map((y,T)=>[y.id,{index:T,data:y}])),pages:Object.fromEntries(j.map(y=>[y.id,y])),config:f.config||{},resources:F,chunks:R}}finally{o&&s&&E.rmSync(s,{force:!0,recursive:!0})}}async function we(t,n,{pages:e,pageMergeMode:s="byUpdateTime",deletePages:o=!1,publishMode:r=void 0}={}){try{r&&$e(r)}catch(p){I.error("clear preload page cache error",{error:p})}const{pageIds:l,pages:a,supportedLocales:i}=t;for(const p of e??l){const u=a[p];if(!u){const f=n.pageIds.indexOf(p);f!==-1&&o&&(n.pageIds.splice(f,1),delete n.pages[p]);continue}if(n.pageIds.includes(u.id)){if(s==="replace")n.pages[u.id]=u;else if(s==="byUpdateTime"){const f=n.pages[u.id];(!f||u.updatedAt&&u.updatedAt>f.updatedAt)&&(n.pages[u.id]=u)}}else n.pageIds.push(u.id),n.pages[u.id]=u}if(o&&!e)for(const p of n.pageIds)t.pageIds.includes(p)||delete n.pages[p],n.pageIds=[...n.pageIds].filter(u=>t.pageIds.includes(u));if(n.supportedLocales.splice(0,n.supportedLocales.length),n.supportedLocales.push(...N.cloneDeep(i)),o)for(const p of Object.keys(n.components))delete n.components[p];let c=JSON.parse(JSON.stringify(t.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([p,u])=>{const f=await We(u==null?void 0:u.data);return[p,{...u,data:f}]}))),Object.assign(n.components,c),Object.assign(n.config,JSON.parse(JSON.stringify(t.config))),n.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const We=V.memoize(async t=>{var n;if(!N.isEmpty(t==null?void 0:t.properties))return t;if(((n=t==null?void 0:t.renderer)==null?void 0:n.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const s=await He(e,"PROPERTIES_SCHEMA",t.id);s&&s.length>0&&t&&(t.properties={},s.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(s){I.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:s})}}return t},{keyGenerator:t=>{var l;const n=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",s=((l=t==null?void 0:t.renderer)==null?void 0:l.type)||"",o=(t==null?void 0:t.properties)||{},r=ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",n,e,s,r])},lruOptions:{max:100,ttl:1e3*60*60}});function as({state:t,pageIds:n=[],componentIds:e=[]}){var l;const s=(a,i=new Set)=>(Array.isArray(a)&&a.forEach(c=>s(c,i)),a&&typeof a=="object"&&(typeof a.componentId=="string"&&i.add(a.componentId),Object.values(a).forEach(c=>s(c,i))),i),o=new Set(e);for(const a of n){const i=t.pages[a];s(i,o)}const r=[...o];for(;r.length;){const a=r.shift();o.has(a)||o.add(a);const i=(l=t.components[a])==null?void 0:l.data;if(i)for(const c of s(i))o.has(c)||r.push(c)}return[...o]}let ae,G,Pe,Ce,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:Kt,type:ge}]});G=(await Promise.all(t.map(async e=>{const s=e.path?await Oe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Pe=G.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:s.blockletId}]:[]))),{});const n=G.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.components).map(o=>[o.data.id,{blockletId:s.blockletId,component:o.data}]))),{});Ce=Object.fromEntries(await Promise.all(Object.entries(n).map(async([e,s])=>{const o=await We(s.component);return[e,{...s,component:o}]}))),je=G.reduce((e,s)=>Object.assign(e,s.state.chunks),{})})(),ae}function Xe(t){const n=N.debounce(async()=>{await Qe().catch(e=>{I.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:G,pages:Pe,components:Ce,chunks:je}))},3e3,{leading:!1,trailing:!0});return n(),w.default.events.on(w.default.Events.componentAdded,n),w.default.events.on(w.default.Events.componentRemoved,n),w.default.events.on(w.default.Events.componentStarted,n),w.default.events.on(w.default.Events.componentStopped,n),w.default.events.on(w.default.Events.componentUpdated,n),w.default.events.on(he,n),()=>{w.default.events.off(w.default.Events.componentAdded,n),w.default.events.off(w.default.Events.componentRemoved,n),w.default.events.off(w.default.Events.componentStarted,n),w.default.events.off(w.default.Events.componentStopped,n),w.default.events.off(w.default.Events.componentUpdated,n),w.default.events.off(he,n)}}const Ze=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),ne=globalThis;var Ne;(Ne=ne[Ze])==null||Ne.call(ne);ne[Ze]=Xe(async({pages:t,components:n})=>{const{projectIds:e}=Q;I.info(`start update resource states projects(${e.length})`,e),await Promise.race([new Promise(s=>{setTimeout(()=>{I.error("update resource states timeout"),s({})},30*1e3)}),Promise.all(e.map(async s=>{const o=Q.shared(s);o.syncedStore.resources.pages=t;const r=await $.findByPk(s);if(r!=null&&r.useAllResources)o.syncedStore.resources.components=n;else{const a=(await ce.findAll({where:{projectId:s}})).map(c=>c.componentId),i=Object.fromEntries(Object.entries(n||{}).filter(([c])=>a.includes(c)));o.syncedStore.resources.components=i}I.info(`update [${s}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(s=>{I.error("update resource states failed:",s)})});async function is(){I.info("trigger reload all project resource"),w.default.events.emit(he)}async function Ae({ensureLoaded:t=!0}={}){return t&&(ae??(ae=Qe()),await ae),{states:G,pages:Pe,components:Ce,chunks:je}}exports.COMPONENT_DID=Te;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=Fe;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=me;exports.PUBLISH_MODES=ts;exports.Project=$;exports.RESOURCE_TYPE=ge;exports.SITE_STATE_PATH=z;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Oe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Ht;exports.getExportSchemaValueFromCode=He;exports.getMultiTenantAllProjectAccessPassports=Lt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Nt;exports.logger=I;exports.mergeState=we;exports.nextId=ye;exports.toPackage=Ye;exports.triggerReloadAllProjectResource=is;
|
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-DwYxv6zB.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/locales.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("flat"),t=e.flatten({deleteProjectAlertPrefix:"This will permanently delete the project named",resetProjectAlertPrefix:"This will reset the project named",deleteProjectAlertSuffix:"project",resetProjectAlertSuffix:"project",confirmTip:"Please enter the project name",confirmDelete:"Please enter {name} to confirm deletion",confirmReset:"Please enter {name} to confirm reset",uploadNewIcon:"Upload new icon",requiredKey:"Key cannot be empty, please set a unique key, so that it can be referenced and configured in the component",duplicateKey:"Key already exists, please set a unique key",projects:{project:"Project",myProjects:"My Projects",projectToGetStart:"Create Project",unnamed:"Unnamed Project",noDescription:"No description",lastUpdated:"Last updated",edit:"Edit",delete:"Delete",pin:"Pin",unpin:"Unpin",name:"Name",slug:"Slug",projectSlug:"Please enter your project slug",projectName:"Please enter your project name",newProjectDescriptionPlaceholder:"Please describe your project",description:"Description",chooseTemplate:"Choose Template",chooseTemplateTip:"Choose a template to start, or select Blank Template to create your own",blankTemplate:"Blank Template",welcomeTemplate:"Welcome Template",limitReached:"Expand Project Count",limitReachedTip:"You have reached the limit of <b>{limit}</b> projects. Please delete the unused projects and try again.<br/>You can also launch your own Pages Kit to create more projects.",limitReachedConfirm:"Launch My Pages Kit"},alert:{delete:"Delete"},common:{goToHome:"Go to Home",delete:"Delete",cancel:"Cancel",add:"Add",addMultiple:"Add ({count})",create:"Create",language:"Language",pageNotFound:"Page Not Found",confirmDialogTitle:"Confirm",all:"All",back:"Back Home",retry:"Retry",defaultLanguage:"default",close:"Close",saveSuccess:"Save Success",resourceBlocklet:"Resource Blocklet",select:"Select ",ok:"OK"},section:{card:{type:"Card Type",title:"Cards",addCard:"Add Card",align:"Card align",textAlign:"Text align"},list:{columns:"Columns",gap:"Gap",align:"Align"}},maker:{pageTitle:"Pages Editor",save:"Save",publish:"Publish",publishToProduction:"Publish",publishToProductionTip:"Anyone can see production version",publishConfirmContent:"Publish to",publishSelectPagesMessage:"Please select the pages to publish",publishSuccessMessage:"Published",importSuccessMessage:"Imported successfully",preview:"Preview",livePreview:"Live Preview",production:"Production",draft:"Draft",configBackground:"Config background",configColor:"Config color",import:"Import",importDialog:{upload:{title:"Import from file",description:"Import from local file",tip:"Please select the file to import"},resource:{description:"Import from resource"}},export:"Export",pages:{addPage:"Create Page",createResource:"Create Resource",addResource:"Add Resource from Store",pages:"Pages",deleteTitle:"Delete {name} page?",deleteSectionTitle:"Delete {name} section?",empty:"No pages",needPublish:"This page has unpublished changes",notPublic:"This page is not public"},components:{components:"Components",addComponent:"Add Section",basicGroup:"Basic",customGroup:"Custom",resourceGroup:"Resource",deleteTitle:"Delete {name} component?",noComponents:"No Components",needAddResource:"Please select resource components in project settings",searchComponent:"Please enter component name to search"},outline:{outline:"Outline"},properties:{addArrayItem:"Add Row",arrayEmpty:"No Row",subProperties:"Sub Properties",addSubProperty:"Add Sub Property",noSubProperties:"No Sub properties",noProperties:"No properties",noParameters:"No configurable parameters, please add properties first",properties:"Properties",setDefaultLocale:"Set default",copyDefault:"Copy over default",copyFull:"Full copy",migrateFromOld:"Full copy from old version",path:"Path",title:"Title",description:"Description",icon:"Icon",iconSize:"Icon size",image:"Image",imageOptimization:"Image Optimization",imageOptimizationFast:"Best for speed",imageOptimizationQuality:"Best for visual quality",imageMode:"Image Mode",hoverStyle:"Hover Style",videoPoster:"Video Poster",imageSize:"Image size",hasImage:"Has Image",fullSizeImage:"Full Size Image",src:"Source",dark:"Dark",reverse:"Reverse",background:"Background",badge:"Badge",buttons:"Buttons",button:"Button",border:"Border",shadow:"Shadow",color:"Color",variant:"Variant",isPageLink:"Is page link?",link:"Link",style:"Style",card:"Card",list:"List",center:"Center",sort:"Order by",asc:"Ascending",desc:"Descending",createdAt:"Create Time",updatedAt:"Update Time",pathCheckRequired:"Path is required",pathCheckStartWithSlash:"Path must start with /",pathCheckEndWithoutSlash:"Path cannot end with /",pathCheckConsecutiveSlash:"Path cannot contain consecutive /",pathCheckWhitespace:"Path cannot contain whitespace",pathCheckInvalid:"Invalid path format",pathCheckAlreadyExist:"Path is already exist",embedUrl:"Embed url",chooseEmbed:"Choose embed",translateFrom:"Translate from",backgroundColor:"Color",backgroundImage:"Image/Video",customColor:"Custom color",customImage:"Custom image/video",boxed:"Nested box mode",bigMode:"Big title mode",padding:"Padding",maxWidth:"Max Width",stickyHeader:"Sticky Header",translucent:"Translucent Mode",hideNavMenus:"Hide Navigation Menus",hideFooter:"Hide Footer",size:"Size",autoWidth:"Auto Width",iframeHeight:"Content Height",translucentTextColor:"Translucent Text Color",copyFromOtherLanguage:"Copy from other language",useCache:"Use Cache",cacheDuration:"Cache Duration (seconds)",customComponent:"Custom Component",parameters:"Parameters",buttonTitle:"Button {index} Title",cardTitle:"Card {index} Title",cardDescription:"Card {index} Description",cardButtonTitle:"Card {index} Button {actionIndex} Title",copyLanguageDescription:"All properties will be copied from the selected language to the current language, which will override the existing content in the current language.",isPublic:"Public Access",isTemplate:"Use as template page",isTemplateSection:"Template dynamic card",templateDescription:"Card description, used to generate card content when using AIGNE to generate page content",templateSectionNameRequired:"Name is required for template section to set values when using dynamic templates",templateSectionNameHelper:"Section name is used to identify the section in the template, please use a meaningful and unique name, so that the section can be set content later",propertyNotFound:"Failed to modify parameter, reason: component does not exist `{key}` property"}},error:{embedUrl:"Embed url error",notFoundEmbed:"Not Found Embed",noBackground:"No background",notConfig:"Not config",slugAlreadyExists:"Slug already exists",slugRequired:"Slug cannot be empty"},fabric:{fontFamily:"Font Family",basicComponent:{titleFontFamily:"Title Font Family",titleFontFamilyHelper:"* Globally modify the paragraph heading font",descFontFamily:"Description Font Family",descFontFamilyHelper:"* Globally modify the paragraph description font"}},ai:{list:{noTemplatesInStudio:"You haven't create any prompt template in AI Studio yet.",createNow:"Create Now",noTemplates:"No template has been provided yet"},output:{errorMessage:"Something wrong with me, please try it later.",words:"Words",characters:"Characters",copied:"Copied!"},generate:"Generate",text:{title:"Text Assistant",description:"Use AI to help with write text",theme:"Content",themeHelper:"Organize the input to make it more suitable for the web page",language:"Language",languageHelper:"Output text language",size:"Size",sizeHelper:"Output text size",original:"Original",improve:"Improve"},status:{install:"Check whether the ai-kit is installed",available:"Check whether the openai key is set properly"}},translate:{translate:"Translate",title:"Translation page",into:"Translate into",ing:"Translating",ingTip:"Translating content to {targetLanguage}. please wait a moment..",confirm:"Confirm",confirmTitle:"Confirm translation information",confirmContent:"Are you sure to translate to {target} and add {target} content after translation?",overlay:"Are you sure to continue the translation and override the {target} content after translation?",success:"Translation success",fail:"Translation failed, please try again",localInput:"Local input",abort:"Cancel translation",sameLanguage:"Source language and target language cannot be the same",noTargetLanguage:"Please select target language",field:"Field",unsavedChanges:"You have unsaved changes. Do you want to save before closing?"},aiRuntime:{aiSettings:"AI Settings",unnamed:"Unnamed",project:"Project",assistant:"Assistant",widget:"Widget",all:"All",form:"Form",result:"Result",submitButton:"Submit Button",submitIcon:"Submit Icon",submitBackground:"Submit Background",placeholder:"Placeholder",loadingIndicator:"Loading Indicator"},basicInfo:"Basic Info",name:"Name",description:"Description",tags:"Tags",previewImage:"Preview Image",properties:"Properties",property:"Property",addObject:"New {object}",key:"Key",label:"Label",type:"Type",defaultValue:"Default Value",renderer:"Renderer",parameters:"Parameters",i18nEditorTitle:"I18N Editor",close:"Close",component:"Component",delete:"Delete",duplicate:"Duplicate",move:{up:"Move up",down:"Move down"},show:"Show",hide:"Hide",showParameter:"Show Parameter Config",hideParameter:"Hide Parameter Config",dragSort:"Drag sort",saved:"Saved",supportMarkdownSyntaxPlaceholder:"support markdown syntax",settings:{tabs:{basic:"Basic",appearance:"Appearance",resources:"Resources"},basic:{title:"Basic Information",avatar:"Project Avatar",name:"Project Name",namePlaceholder:"Please enter project name",description:"Project Description",descriptionPlaceholder:"Please describe your project",slug:"Project Slug",slugPlaceholder:"Please enter project slug",slugHelper:"Project slug can only contain letters, numbers, hyphens and underscores",changeAvatar:"Change Avatar"},resources:{all:"Enable all resource components",resourceBlocklet:"Selected resource components",addResource:"Select resource components",needInstallResourceByAdmin:"Please install resource components by admin",noSelectedResources:"No selected any resource components"}},edit:{modified:"Modified",new:"New",deleted:"Deleted",undo:"Undo",redo:"Redo"}}),a=e.flatten({deleteProjectAlertPrefix:"这将永久删除名称为",resetProjectAlertPrefix:"这将重置名称为",deleteProjectAlertSuffix:"的项目",resetProjectAlertSuffix:"的项目",confirmTip:"请输入项目名称",confirmDelete:"请输入 {name} 以确认删除",confirmReset:"请输入 {name} 以确认重置",uploadNewIcon:"上传新图标",requiredKey:"键不能为空,请设置一个唯一的键,以便在组件中引用和配置参数",duplicateKey:"键已存在,请设置一个唯一的键",projects:{project:"项目",myProjects:"我的项目",projectToGetStart:"创建项目",unnamed:"未命名项目",noDescription:"暂无描述",lastUpdated:"最后更新",edit:"编辑",delete:"删除",pin:"置顶",unpin:"取消置顶",name:"名称",slug:"路径",projectSlug:"请输入项目路径",projectName:"请输入项目名称",newProjectDescriptionPlaceholder:"请输入项目描述",description:"描述",chooseTemplate:"选择模板",chooseTemplateTip:"选择模板快速开始,或开创您的独特项目 - 点击创建您的专属之旅!",blankTemplate:"空白模板",welcomeTemplate:"欢迎模板",limitReached:"扩展项目数量",limitReachedTip:"你已经达到了项目数量上限 <b>{limit}</b>,请删除未使用的项目并重试。<br/>你也可以部署自己的 Pages Kit 来创建更多项目。",limitReachedConfirm:"部署我的 Pages Kit"},alert:{delete:"删除"},common:{goToHome:"返回首页",delete:"删除",cancel:"取消",add:"添加",addMultiple:"添加 ({count})",create:"创建",language:"语言",pageNotFound:"页面未找到",confirmDialogTitle:"确认",all:"全部",back:"返回首页",retry:"重试",defaultLanguage:"默认语言",close:"关闭",saveSuccess:"保存成功",resourceBlocklet:"资源 Blocklet",select:"选择",ok:"确定"},section:{card:{type:"卡片类型",title:"卡片",addCard:"新增卡片",align:"卡片对齐方式",textAlign:"文本对齐方式"},list:{columns:"列数",gap:"间距",align:"对齐方式"}},maker:{pageTitle:"页面编辑器",save:"保存",publish:"发布",publishToProduction:"发布",publishToProductionTip:"任何人都可以看到正式版",publishConfirmContent:"发布到",publishSelectPagesMessage:"请选择要发布的页面",publishSuccessMessage:"发布成功",importSuccessMessage:"导入成功",preview:"预览",livePreview:"实时预览",production:"正式版",draft:"草稿",configBackground:"设置背景",configColor:"设置颜色",import:"导入",importDialog:{upload:{title:"从文件导入",description:"从本地文件导入",tip:"请选择要导入的文件"},resource:{description:"从资源导入"}},export:"导出",pages:{addPage:"创建页面",createResource:"创建资源",addResource:"从商店添加资源",pages:"页面",deleteTitle:"删除 {name} 页面?",deleteSectionTitle:"删除 {name} 卡片?",empty:"暂无页面",needPublish:"此页面有可发布的新修改",notPublic:"此页面未公开"},components:{components:"组件",addComponent:"添加卡片",basicGroup:"基础组件",customGroup:"自定义组件",resourceGroup:"资源组件",deleteTitle:"删除 {name} 组件?",noComponents:"暂无组件",needAddResource:"请在项目设置中选择资源组件",searchComponent:"请输入组件名称进行搜索"},outline:{outline:"概览"},properties:{addArrayItem:"添加一行",arrayEmpty:"暂无行",subProperties:"子属性",addSubProperty:"添加子属性",noSubProperties:"暂无子属性",noProperties:"暂无属性",noParameters:"暂无可配置参数,请先添加属性",properties:"属性",setDefaultLocale:"设为默认语言",copyDefault:"设为默认值",copyFull:"复制全部",migrateFromOld:"从老版本复制默认值",path:"路径",title:"标题",description:"描述",icon:"图标",iconSize:"图标大小",image:"图片",imageOptimization:"图片优化",imageOptimizationFast:"速度优先",imageOptimizationQuality:"质量优先",imageMode:"图片模式",hoverStyle:"鼠标悬停样式",videoPoster:"视频封面",imageSize:"图片大小",hasImage:"包含图片",fullSizeImage:"大图模式",src:"源地址",dark:"暗黑",reverse:"反转",background:"背景",badge:"标签",buttons:"按钮",button:"按钮",border:"边框",shadow:"阴影",color:"颜色",variant:"样式",isPageLink:"是否内部链接?",link:"链接",style:"样式",card:"卡片",list:"列表",center:"居中",sort:"排序",asc:"升序",desc:"降序",createdAt:"创建时间",updatedAt:"更新时间",pathCheckRequired:"请输入路径",pathCheckStartWithSlash:"路径开头必须是 /",pathCheckEndWithoutSlash:"路径结尾不能是 /",pathCheckConsecutiveSlash:"路径中不能包含连续的 /",pathCheckWhitespace:"路径中不能包含空白字符",pathCheckInvalid:"非法的路径",pathCheckAlreadyExist:"路径已存在",embedUrl:"部件地址",chooseEmbed:"选择部件",translateFrom:"翻译来自",backgroundColor:"颜色",backgroundImage:"图片/视频",customColor:"自定义颜色",customImage:"自定义图片/视频",boxed:"嵌套盒子模式",bigMode:"大标题模式",padding:"内边距",maxWidth:"最大宽度",stickyHeader:"固定导航栏",translucent:"沉浸式",hideNavMenus:"隐藏导航菜单",hideFooter:"隐藏页脚",size:"大小",autoWidth:"宽度自适应",iframeHeight:"定义内容高度",translucentTextColor:"沉浸式文本颜色",copyFromOtherLanguage:"从其他语言复制",useCache:"使用缓存",cacheDuration:"缓存时间 (秒)",customComponent:"自定义组件",parameters:"参数",buttonTitle:"第 {index} 个按钮的标题",cardTitle:"第 {index} 个卡片标题",cardDescription:"第 {index} 个卡片描述",cardButtonTitle:"第 {index} 个卡片中第 {actionIndex} 个按钮标题",copyLanguageDescription:"将从选择的语言复制所有属性到当前语言,这将覆盖当前语言的已有内容。",isPublic:"是否公开",isTemplate:"作为模版页面使用",isTemplateSection:"模板动态卡片",templateDescription:"卡片描述,使用 AIGNE 生成页面内容时,会根据卡片描述生成卡片内容",templateSectionNameRequired:"模板区块需要设置名称,以便在使用动态模板时为区块设置对应的值",templateSectionNameHelper:"区块名称用于标识模板中的区块,请使用有意义且唯一的名称,以便后续为区块设置内容",propertyNotFound:"修改参数失败,原因:组件不存在 `{key}` 属性"}},error:{embedUrl:"Embed 地址有误",notFoundEmbed:"未找到组件",noBackground:"无背景",notConfig:"未设置",slugAlreadyExists:"路径已存在",slugRequired:"路径不能为空"},fabric:{fontFamily:"全局字体",basicComponent:{titleFontFamily:"段落标题字体",titleFontFamilyHelper:"* 全局修改段落标题字体",descFontFamily:"段落描述字体",descFontFamilyHelper:"* 全局修改段落描述字体"}},ai:{list:{noTemplatesInStudio:"目前您还没有在 AI Studio 里创建任何模版",createNow:"现在创建",noTemplates:"还没有任何模版"},output:{errorMessage:"出错了,请稍后再试",words:"字",characters:"字符",copied:"已复制!"},generate:"生成",text:{title:"文案助手",description:"使用 AI 帮助编写文案",theme:"内容",themeHelper:"整理内容,使描述更加合适网页",language:"语言",languageHelper:"输出文本语言",size:"大小",sizeHelper:"输出内容大小",original:"原文",improve:"改良"},status:{install:"请先检查 ai-kit 是否安装",available:"请先检查 openai key 是否正常设置"}},translate:{title:"翻译页面",translate:"翻译",into:"翻译成",ing:"翻译中",ingTip:"将内容翻译为 {targetLanguage}。请稍等...",confirm:"翻译",confirmTitle:"确认翻译信息",confirmContent:"你确认翻译成 {target},并且翻译后新增 {target} 内容吗?",overlay:"确认继续翻译,并且翻译后覆盖 {target} 内容吗?",success:"翻译成功",fail:"翻译失败,请重试",localInput:"本地输入",abort:"取消翻译成功",sameLanguage:"源语言和目标语言不能相同",noTargetLanguage:"请选择目标语言",field:"字段",unsavedChanges:"你有未保存的更改。是否在关闭前保存?"},aiRuntime:{aiSettings:"AI 设置",unnamed:"未命名",project:"项目",assistant:"助手",widget:"部件",all:"全部",form:"仅表单",result:"仅输出",submitButton:"提交按钮",submitIcon:"提交按钮图标",submitBackground:"提交按钮背景色",placeholder:"占位提示",loadingIndicator:"加载提示"},basicInfo:"基础信息",name:"名称",description:"描述",tags:"标签",previewImage:"预览图片",properties:"属性",property:"属性",addObject:"添加{object}",key:"键",label:"标签",type:"类型",defaultValue:"默认值",renderer:"渲染方式",parameters:"参数",i18nEditorTitle:"国际化编辑",close:"关闭",component:"组件",delete:"删除",duplicate:"复制",move:{up:"上移",down:"下移"},show:"显示",hide:"隐藏",showParameter:"显示参数配置",hideParameter:"隐藏参数配置",dragSort:"拖拽排序",saved:"保存成功",supportMarkdownSyntaxPlaceholder:"支持输入 markdown",settings:{tabs:{basic:"基础设置",appearance:"外观设置",resources:"资源组件"},basic:{title:"基础信息",avatar:"项目头像",name:"项目名称",namePlaceholder:"请输入项目名称",description:"项目描述",descriptionPlaceholder:"请输入项目描述",slug:"项目路径",slugPlaceholder:"请输入项目路径",slugHelper:"项目路径只能包含字母、数字、中划线和下划线",changeAvatar:"更换头像"},resources:{all:"启用所有资源组件",resourceBlocklet:"已选择的资源组件",addResource:"选择资源组件",needInstallResourceByAdmin:"请联系管理员安装资源组件",noSelectedResources:"未选择任何资源组件"}},edit:{modified:"已修改",new:"新增",deleted:"已删除",undo:"撤销",redo:"重做"}}),o={en:t,zh:a};exports.translations=o;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("flat"),t=e.flatten({deleteProjectAlertPrefix:"This will permanently delete the project named",resetProjectAlertPrefix:"This will reset the project named",deleteProjectAlertSuffix:"project",resetProjectAlertSuffix:"project",confirmTip:"Please enter the project name",confirmDelete:"Please enter {name} to confirm deletion",confirmReset:"Please enter {name} to confirm reset",uploadNewIcon:"Upload new icon",requiredKey:"Key cannot be empty, please set a unique key, so that it can be referenced and configured in the component",duplicateKey:"Key already exists, please set a unique key",projects:{project:"Project",myProjects:"My Projects",projectToGetStart:"Create Project",unnamed:"Unnamed Project",noDescription:"No description",lastUpdated:"Last updated",edit:"Edit",delete:"Delete",pin:"Pin",unpin:"Unpin",name:"Name",slug:"Slug",projectSlug:"Please enter your project slug",projectName:"Please enter your project name",newProjectDescriptionPlaceholder:"Please describe your project",description:"Description",chooseTemplate:"Choose Template",chooseTemplateTip:"Choose a template to start, or select Blank Template to create your own",blankTemplate:"Blank Template",welcomeTemplate:"Welcome Template",limitReached:"Expand Project Count",limitReachedTip:"You have reached the limit of <b>{limit}</b> projects. Please delete the unused projects and try again.<br/>You can also launch your own Pages Kit to create more projects.",limitReachedConfirm:"Launch My Pages Kit"},alert:{delete:"Delete"},common:{goToHome:"Go to Home",delete:"Delete",cancel:"Cancel",add:"Add",addMultiple:"Add ({count})",create:"Create",language:"Language",pageNotFound:"Page Not Found",confirmDialogTitle:"Confirm",all:"All",back:"Back Home",retry:"Retry",defaultLanguage:"default",close:"Close",saveSuccess:"Save Success",resourceBlocklet:"Resource Blocklet",select:"Select ",ok:"OK"},section:{card:{type:"Card Type",title:"Cards",addCard:"Add Card",align:"Card align",textAlign:"Text align"},list:{columns:"Columns",gap:"Gap",align:"Align"}},maker:{pageTitle:"Pages Editor",save:"Save",publish:"Publish",publishToProduction:"Publish",publishToProductionTip:"Anyone can see production version",publishConfirmContent:"Publish to",publishSelectPagesMessage:"Please select the pages to publish",publishSuccessMessage:"Published",importSuccessMessage:"Imported successfully",preview:"Preview",livePreview:"Live Preview",production:"Production",draft:"Draft",configBackground:"Config background",configColor:"Config color",import:"Import",importDialog:{upload:{title:"Import from file",description:"Import from local file",tip:"Please select the file to import"},resource:{description:"Import from resource"}},export:"Export",pages:{addPage:"Create Page",createResource:"Create Resource",addResource:"Add Resource from Store",pages:"Pages",deleteTitle:"Delete {name} page?",deleteSectionTitle:"Delete {name} section?",empty:"No pages",needPublish:"This page has unpublished changes",notPublic:"This page is not public"},components:{components:"Components",addComponent:"Add Section",basicGroup:"Basic",customGroup:"Custom",resourceGroup:"Resource",deleteTitle:"Delete {name} component?",noComponents:"No Components",needAddResource:"Please select resource components in project settings",searchComponent:"Please enter component name to search"},outline:{outline:"Outline"},properties:{addArrayItem:"Add Row",arrayEmpty:"No Row",subProperties:"Sub Properties",addSubProperty:"Add Sub Property",noSubProperties:"No Sub properties",noProperties:"No properties",noParameters:"No configurable parameters, please add properties first",properties:"Properties",setDefaultLocale:"Set default",copyDefault:"Copy over default",copyFull:"Full copy",migrateFromOld:"Full copy from old version",path:"Path",title:"Title",description:"Description",icon:"Icon",iconSize:"Icon size",image:"Image",imageOptimization:"Image Optimization",imageOptimizationFast:"Best for speed",imageOptimizationQuality:"Best for visual quality",imageMode:"Image Mode",hoverStyle:"Hover Style",videoPoster:"Video Poster",imageSize:"Image size",hasImage:"Has Image",fullSizeImage:"Full Size Image",src:"Source",dark:"Dark",reverse:"Reverse",background:"Background",badge:"Badge",buttons:"Buttons",button:"Button",border:"Border",shadow:"Shadow",color:"Color",variant:"Variant",isPageLink:"Is page link?",link:"Link",style:"Style",card:"Card",list:"List",center:"Center",sort:"Order by",asc:"Ascending",desc:"Descending",createdAt:"Create Time",updatedAt:"Update Time",pathCheckRequired:"Path is required",pathCheckStartWithSlash:"Path must start with /",pathCheckEndWithoutSlash:"Path cannot end with /",pathCheckConsecutiveSlash:"Path cannot contain consecutive /",pathCheckWhitespace:"Path cannot contain whitespace",pathCheckInvalid:"Invalid path format",pathCheckAlreadyExist:"Path is already exist",embedUrl:"Embed url",chooseEmbed:"Choose embed",translateFrom:"Translate from",backgroundColor:"Color",backgroundImage:"Image/Video",customColor:"Custom color",customImage:"Custom image/video",boxed:"Nested box mode",bigMode:"Big title mode",padding:"Padding",maxWidth:"Max Width",stickyHeader:"Sticky Header",translucent:"Translucent Mode",hideNavMenus:"Hide Navigation Menus",hideFooter:"Hide Footer",size:"Size",autoWidth:"Auto Width",iframeHeight:"Content Height",translucentTextColor:"Translucent Text Color",copyFromOtherLanguage:"Copy from other language",useCache:"Use Cache",cacheDuration:"Cache Duration (seconds)",customComponent:"Custom Component",parameters:"Parameters",buttonTitle:"Button {index} Title",cardTitle:"Card {index} Title",cardDescription:"Card {index} Description",cardButtonTitle:"Card {index} Button {actionIndex} Title",copyLanguageDescription:"All properties will be copied from the selected language to the current language, which will override the existing content in the current language.",isPublic:"Public Access",isTemplate:"Use as template page",isTemplateSection:"Template dynamic card",templateDescription:"Card description, used to generate card content when using AIGNE to generate page content",templateSectionNameRequired:"Name is required for template section to set values when using dynamic templates",templateSectionNameHelper:"Section name is used to identify the section in the template, please use a meaningful and unique name, so that the section can be set content later",propertyNotFound:"Failed to modify parameter, reason: component does not exist `{key}` property"}},error:{embedUrl:"Embed url error",notFoundEmbed:"Not Found Embed",noBackground:"No background",notConfig:"Not config",slugAlreadyExists:"Slug already exists",slugRequired:"Slug cannot be empty"},fabric:{fontFamily:"Font Family",basicComponent:{titleFontFamily:"Title Font Family",titleFontFamilyHelper:"* Globally modify the paragraph heading font",descFontFamily:"Description Font Family",descFontFamilyHelper:"* Globally modify the paragraph description font"}},ai:{list:{noTemplatesInStudio:"You haven't create any prompt template in AI Studio yet.",createNow:"Create Now",noTemplates:"No template has been provided yet"},output:{errorMessage:"Something wrong with me, please try it later.",words:"Words",characters:"Characters",copied:"Copied!"},generate:"Generate",text:{title:"Text Assistant",description:"Use AI to help with write text",theme:"Content",themeHelper:"Organize the input to make it more suitable for the web page",language:"Language",languageHelper:"Output text language",size:"Size",sizeHelper:"Output text size",original:"Original",improve:"Improve"},status:{install:"Check whether the ai-kit is installed",available:"Check whether the openai key is set properly"}},translate:{translate:"Translate",title:"Translation page",into:"Translate into",ing:"Translating",ingTip:"Translating content to {targetLanguage}. please wait a moment..",confirm:"Confirm",confirmTitle:"Confirm translation information",confirmContent:"Are you sure to translate to {target} and add {target} content after translation?",overlay:"Are you sure to continue the translation and override the {target} content after translation?",success:"Translation success",fail:"Translation failed, please try again",localInput:"Local input",abort:"Cancel translation",sameLanguage:"Source language and target language cannot be the same",noTargetLanguage:"Please select target language",field:"Field",unsavedChanges:"You have unsaved changes. Do you want to save before closing?"},aiRuntime:{aiSettings:"AI Settings",unnamed:"Unnamed",project:"Project",assistant:"Assistant",widget:"Widget",all:"All",form:"Form",result:"Result",submitButton:"Submit Button",submitIcon:"Submit Icon",submitBackground:"Submit Background",placeholder:"Placeholder",loadingIndicator:"Loading Indicator"},basicInfo:"Basic Info",name:"Name",description:"Description",tags:"Tags",previewImage:"Preview Image",properties:"Properties",property:"Property",addObject:"New {object}",key:"Key",label:"Label",type:"Type",defaultValue:"Default Value",renderer:"Renderer",parameters:"Parameters",i18nEditorTitle:"I18N Editor",close:"Close",component:"Component",delete:"Delete",duplicate:"Duplicate",move:{up:"Move up",down:"Move down"},show:"Show",hide:"Hide",showParameter:"Show Parameter Config",hideParameter:"Hide Parameter Config",dragSort:"Drag sort",saved:"Saved",supportMarkdownSyntaxPlaceholder:"support markdown syntax",settings:{tabs:{basic:"Basic",appearance:"Appearance",resources:"Resources",integration:"Integration"},basic:{title:"Basic Information",avatar:"Project Avatar",name:"Project Name",namePlaceholder:"Please enter project name",description:"Project Description",descriptionPlaceholder:"Please describe your project",slug:"Project Slug",slugPlaceholder:"Please enter project slug",slugHelper:"Project slug can only contain letters, numbers, hyphens and underscores",changeAvatar:"Change Avatar"},resources:{all:"Enable all resource components",resourceBlocklet:"Selected resource components",addResource:"Select resource components",needInstallResourceByAdmin:"Please install resource components by admin",noSelectedResources:"No selected any resource components"},integration:{packageSetting:"Package Setting"}},edit:{modified:"Modified",new:"New",deleted:"Deleted",undo:"Undo",redo:"Redo"}}),a=e.flatten({deleteProjectAlertPrefix:"这将永久删除名称为",resetProjectAlertPrefix:"这将重置名称为",deleteProjectAlertSuffix:"的项目",resetProjectAlertSuffix:"的项目",confirmTip:"请输入项目名称",confirmDelete:"请输入 {name} 以确认删除",confirmReset:"请输入 {name} 以确认重置",uploadNewIcon:"上传新图标",requiredKey:"键不能为空,请设置一个唯一的键,以便在组件中引用和配置参数",duplicateKey:"键已存在,请设置一个唯一的键",projects:{project:"项目",myProjects:"我的项目",projectToGetStart:"创建项目",unnamed:"未命名项目",noDescription:"暂无描述",lastUpdated:"最后更新",edit:"编辑",delete:"删除",pin:"置顶",unpin:"取消置顶",name:"名称",slug:"路径",projectSlug:"请输入项目路径",projectName:"请输入项目名称",newProjectDescriptionPlaceholder:"请输入项目描述",description:"描述",chooseTemplate:"选择模板",chooseTemplateTip:"选择模板快速开始,或开创您的独特项目 - 点击创建您的专属之旅!",blankTemplate:"空白模板",welcomeTemplate:"欢迎模板",limitReached:"扩展项目数量",limitReachedTip:"你已经达到了项目数量上限 <b>{limit}</b>,请删除未使用的项目并重试。<br/>你也可以部署自己的 Pages Kit 来创建更多项目。",limitReachedConfirm:"部署我的 Pages Kit"},alert:{delete:"删除"},common:{goToHome:"返回首页",delete:"删除",cancel:"取消",add:"添加",addMultiple:"添加 ({count})",create:"创建",language:"语言",pageNotFound:"页面未找到",confirmDialogTitle:"确认",all:"全部",back:"返回首页",retry:"重试",defaultLanguage:"默认语言",close:"关闭",saveSuccess:"保存成功",resourceBlocklet:"资源 Blocklet",select:"选择",ok:"确定"},section:{card:{type:"卡片类型",title:"卡片",addCard:"新增卡片",align:"卡片对齐方式",textAlign:"文本对齐方式"},list:{columns:"列数",gap:"间距",align:"对齐方式"}},maker:{pageTitle:"页面编辑器",save:"保存",publish:"发布",publishToProduction:"发布",publishToProductionTip:"任何人都可以看到正式版",publishConfirmContent:"发布到",publishSelectPagesMessage:"请选择要发布的页面",publishSuccessMessage:"发布成功",importSuccessMessage:"导入成功",preview:"预览",livePreview:"实时预览",production:"正式版",draft:"草稿",configBackground:"设置背景",configColor:"设置颜色",import:"导入",importDialog:{upload:{title:"从文件导入",description:"从本地文件导入",tip:"请选择要导入的文件"},resource:{description:"从资源导入"}},export:"导出",pages:{addPage:"创建页面",createResource:"创建资源",addResource:"从商店添加资源",pages:"页面",deleteTitle:"删除 {name} 页面?",deleteSectionTitle:"删除 {name} 卡片?",empty:"暂无页面",needPublish:"此页面有可发布的新修改",notPublic:"此页面未公开"},components:{components:"组件",addComponent:"添加卡片",basicGroup:"基础组件",customGroup:"自定义组件",resourceGroup:"资源组件",deleteTitle:"删除 {name} 组件?",noComponents:"暂无组件",needAddResource:"请在项目设置中选择资源组件",searchComponent:"请输入组件名称进行搜索"},outline:{outline:"概览"},properties:{addArrayItem:"添加一行",arrayEmpty:"暂无行",subProperties:"子属性",addSubProperty:"添加子属性",noSubProperties:"暂无子属性",noProperties:"暂无属性",noParameters:"暂无可配置参数,请先添加属性",properties:"属性",setDefaultLocale:"设为默认语言",copyDefault:"设为默认值",copyFull:"复制全部",migrateFromOld:"从老版本复制默认值",path:"路径",title:"标题",description:"描述",icon:"图标",iconSize:"图标大小",image:"图片",imageOptimization:"图片优化",imageOptimizationFast:"速度优先",imageOptimizationQuality:"质量优先",imageMode:"图片模式",hoverStyle:"鼠标悬停样式",videoPoster:"视频封面",imageSize:"图片大小",hasImage:"包含图片",fullSizeImage:"大图模式",src:"源地址",dark:"暗黑",reverse:"反转",background:"背景",badge:"标签",buttons:"按钮",button:"按钮",border:"边框",shadow:"阴影",color:"颜色",variant:"样式",isPageLink:"是否内部链接?",link:"链接",style:"样式",card:"卡片",list:"列表",center:"居中",sort:"排序",asc:"升序",desc:"降序",createdAt:"创建时间",updatedAt:"更新时间",pathCheckRequired:"请输入路径",pathCheckStartWithSlash:"路径开头必须是 /",pathCheckEndWithoutSlash:"路径结尾不能是 /",pathCheckConsecutiveSlash:"路径中不能包含连续的 /",pathCheckWhitespace:"路径中不能包含空白字符",pathCheckInvalid:"非法的路径",pathCheckAlreadyExist:"路径已存在",embedUrl:"部件地址",chooseEmbed:"选择部件",translateFrom:"翻译来自",backgroundColor:"颜色",backgroundImage:"图片/视频",customColor:"自定义颜色",customImage:"自定义图片/视频",boxed:"嵌套盒子模式",bigMode:"大标题模式",padding:"内边距",maxWidth:"最大宽度",stickyHeader:"固定导航栏",translucent:"沉浸式",hideNavMenus:"隐藏导航菜单",hideFooter:"隐藏页脚",size:"大小",autoWidth:"宽度自适应",iframeHeight:"定义内容高度",translucentTextColor:"沉浸式文本颜色",copyFromOtherLanguage:"从其他语言复制",useCache:"使用缓存",cacheDuration:"缓存时间 (秒)",customComponent:"自定义组件",parameters:"参数",buttonTitle:"第 {index} 个按钮的标题",cardTitle:"第 {index} 个卡片标题",cardDescription:"第 {index} 个卡片描述",cardButtonTitle:"第 {index} 个卡片中第 {actionIndex} 个按钮标题",copyLanguageDescription:"将从选择的语言复制所有属性到当前语言,这将覆盖当前语言的已有内容。",isPublic:"是否公开",isTemplate:"作为模版页面使用",isTemplateSection:"模板动态卡片",templateDescription:"卡片描述,使用 AIGNE 生成页面内容时,会根据卡片描述生成卡片内容",templateSectionNameRequired:"模板区块需要设置名称,以便在使用动态模板时为区块设置对应的值",templateSectionNameHelper:"区块名称用于标识模板中的区块,请使用有意义且唯一的名称,以便后续为区块设置内容",propertyNotFound:"修改参数失败,原因:组件不存在 `{key}` 属性"}},error:{embedUrl:"Embed 地址有误",notFoundEmbed:"未找到组件",noBackground:"无背景",notConfig:"未设置",slugAlreadyExists:"路径已存在",slugRequired:"路径不能为空"},fabric:{fontFamily:"全局字体",basicComponent:{titleFontFamily:"段落标题字体",titleFontFamilyHelper:"* 全局修改段落标题字体",descFontFamily:"段落描述字体",descFontFamilyHelper:"* 全局修改段落描述字体"}},ai:{list:{noTemplatesInStudio:"目前您还没有在 AI Studio 里创建任何模版",createNow:"现在创建",noTemplates:"还没有任何模版"},output:{errorMessage:"出错了,请稍后再试",words:"字",characters:"字符",copied:"已复制!"},generate:"生成",text:{title:"文案助手",description:"使用 AI 帮助编写文案",theme:"内容",themeHelper:"整理内容,使描述更加合适网页",language:"语言",languageHelper:"输出文本语言",size:"大小",sizeHelper:"输出内容大小",original:"原文",improve:"改良"},status:{install:"请先检查 ai-kit 是否安装",available:"请先检查 openai key 是否正常设置"}},translate:{title:"翻译页面",translate:"翻译",into:"翻译成",ing:"翻译中",ingTip:"将内容翻译为 {targetLanguage}。请稍等...",confirm:"翻译",confirmTitle:"确认翻译信息",confirmContent:"你确认翻译成 {target},并且翻译后新增 {target} 内容吗?",overlay:"确认继续翻译,并且翻译后覆盖 {target} 内容吗?",success:"翻译成功",fail:"翻译失败,请重试",localInput:"本地输入",abort:"取消翻译成功",sameLanguage:"源语言和目标语言不能相同",noTargetLanguage:"请选择目标语言",field:"字段",unsavedChanges:"你有未保存的更改。是否在关闭前保存?"},aiRuntime:{aiSettings:"AI 设置",unnamed:"未命名",project:"项目",assistant:"助手",widget:"部件",all:"全部",form:"仅表单",result:"仅输出",submitButton:"提交按钮",submitIcon:"提交按钮图标",submitBackground:"提交按钮背景色",placeholder:"占位提示",loadingIndicator:"加载提示"},basicInfo:"基础信息",name:"名称",description:"描述",tags:"标签",previewImage:"预览图片",properties:"属性",property:"属性",addObject:"添加{object}",key:"键",label:"标签",type:"类型",defaultValue:"默认值",renderer:"渲染方式",parameters:"参数",i18nEditorTitle:"国际化编辑",close:"关闭",component:"组件",delete:"删除",duplicate:"复制",move:{up:"上移",down:"下移"},show:"显示",hide:"隐藏",showParameter:"显示参数配置",hideParameter:"隐藏参数配置",dragSort:"拖拽排序",saved:"保存成功",supportMarkdownSyntaxPlaceholder:"支持输入 markdown",settings:{tabs:{basic:"基础设置",appearance:"外观设置",resources:"资源组件",integration:"集成设置"},basic:{title:"基础信息",avatar:"项目头像",name:"项目名称",namePlaceholder:"请输入项目名称",description:"项目描述",descriptionPlaceholder:"请输入项目描述",slug:"项目路径",slugPlaceholder:"请输入项目路径",slugHelper:"项目路径只能包含字母、数字、中划线和下划线",changeAvatar:"更换头像"},resources:{all:"启用所有资源组件",resourceBlocklet:"已选择的资源组件",addResource:"选择资源组件",needInstallResourceByAdmin:"请联系管理员安装资源组件",noSelectedResources:"未选择任何资源组件"},integration:{packageSetting:"包设置"}},edit:{modified:"已修改",new:"新增",deleted:"已删除",undo:"撤销",redo:"重做"}}),o={en:t,zh:a};exports.translations=o;
|
package/lib/cjs/project-html.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const k=require("./_chunks/site-state-
|
|
1
|
+
"use strict";const k=require("./_chunks/site-state-DwYxv6zB.js"),P=require("@blocklet/crawler/middlewares"),W=require("@blocklet/pages-kit/types"),J=require("@blocklet/pages-kit/utils/preload"),G=require("@blocklet/sdk/lib/component"),U=require("@blocklet/sdk/lib/config"),z=require("cheerio/slim"),K=require("express"),O=require("fs"),Q=require("mustache"),A=require("path"),S=require("ufo"),D=e=>e&&e.__esModule?e:{default:e};function V(e){if(e&&e.__esModule)return e;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const p=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,p.get?p:{enumerable:!0,get:()=>e[t]})}}return s.default=e,Object.freeze(s)}const d=D(U),I=V(z),X=D(Q),Y=["/assets/"],q=()=>[!0,"true"].includes(d.default.env.preferences.allowCrawler);function R(){q()?P.initCronCrawlBlocklet({time:"30 30 */12 * * *",options:{}}):P.cancelCronCrawlBlocklet()}R();d.default.events.on(d.default.Events.envUpdate,R);function Z({app:e,viteDevServer:s,state:t}){let p;if(s){const r=O.readFileSync(A.resolve(process.cwd(),"./index.html"),"utf-8");e.use(async(b,j,y)=>{const v=b.originalUrl;p=await s.transformIndexHtml(v,r),y()})}else p=O.readFileSync(A.resolve(process.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const C=K.Router();C.use(P.initSEOMiddleware({autoReturnHtml:!1,allowCrawler:q})),C.get("/:path(*)?",async(r,b,j)=>{var $,E,L;if(Y.some(c=>{var i;return(i=r.path)==null?void 0:i.startsWith(c)})){j();return}const y=performance.now(),v=()=>Math.round(performance.now()-y),x="production";let o,u,g=p;if(r.path.startsWith("/pages")){const c=r.params.lang,i=r.cookies.nf_lang,w=new Set([...d.default.env.languages.map(h=>h.code)]);let f=(c&&w.has(c)?c:void 0)||(w.has(i)?i:void 0)||[...w][0];if((!f||!(($=t.supportedLocales)!=null&&$.find(h=>h.locale===f)))&&(f=((L=(E=t.supportedLocales)==null?void 0:E[0])==null?void 0:L.locale)||""),f){const h=[];Object.values(t.pages).forEach(l=>{const N=Object.values((l==null?void 0:l.sections)??{}).filter(a=>{var _;return a.component==="custom-component"&&((_=a.config)==null?void 0:_.componentId)}).map(a=>{var _,M;return{id:a.id,componentId:a.config.componentId,useCache:a.config.useCache,cacheDuration:a.config.cacheDuration,properties:(M=(_=a.locales)==null?void 0:_[f])==null?void 0:M.properties}});h.push(...N)});const H=new Promise(l=>{setTimeout(()=>{k.logger.error("get preload components timeout"),l({})},90*1e3)});try{await Promise.race([H,k.getPreloadComponents({mode:x,req:r,state:t,locale:f,instances:h,module:W.PreloadComponentScriptModule.UMD_FN}).then(l=>{l&&(u=J.injectPreloadComponents(l))})])}catch(l){k.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements"),k.logger.warn(l)}}}try{const c=(o==null?void 0:o.title)||d.default.env.appName,i=(o==null?void 0:o.description)||d.default.env.appDescription,w=S.withQuery(S.joinURL(d.default.env.appUrl,"/.well-known/service/blocklet/og.png"),{title:c,description:i});g=X.default.render(p,{ogTitle:c,ogDescription:i,ogImage:F(o==null?void 0:o.image)||w,pagesPublishedAt:(t==null?void 0:t.config.publishedAt)||new Date().getTime()})}catch{}const n=t==null?void 0:t.config.fontFamily,B=r.query.mode==="draft"||r.url.includes("preview"),m=I.load(g);m("head").find("#injected-head-elements").replaceWith(`
|
|
2
2
|
${o!=null&&o.backgroundColor?`<meta name="theme-color" content="${o.backgroundColor}" /><style>html,body,#app {background-color: ${o.backgroundColor} !important;}</style>`:""}
|
|
3
3
|
${n!=null&&n.title?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${n.title}&display=swap">`:""}
|
|
4
4
|
${n!=null&&n.description&&(n==null?void 0:n.description)!==(n==null?void 0:n.title)?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${n.description}&display=swap">`:""}
|
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-DwYxv6zB.js"),M=require("async_hooks"),U=require("express"),F=require("fs"),J=require("joi"),O=require("lodash"),b=require("path"),X=require("@blocklet/sdk/lib/middlewares/auth"),W=require("@blocklet/sdk/lib/component"),E=t=>t&&t.__esModule?t:{default:t},p=E(F),I=E(J),k=E(b),v=E(X);new M.AsyncLocalStorage;const $=async(t,e,o)=>{var n,s,r,a;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 P=(n=t.user)==null?void 0:n.did,h=((s=t.user)==null?void 0:s.role)||"UNKNOWN_ROLE";if(!P)return e==null?void 0:e.status(401).json({error:"Authentication required"});if(c.isMultiTenant()){const w=f.createdBy===P,i=(a=(r=c.getMultiTenantAllProjectAccessPassports())==null?void 0:r.includes)==null?void 0:a.call(r,h);if(!w&&!i)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=p.default.createReadStream(t),r=p.default.createWriteStream(e);s.on("error",n),r.on("error",n),r.on("finish",o),s.pipe(r)})}async function T(t,e){await p.default.promises.mkdir(e,{recursive:!0});const o=await p.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 G(t,e){(await p.default.promises.stat(t)).isDirectory()?await T(t,e):await N(t,e)}const D=(t,e,o)=>c.isMultiTenant()?v.default()(t,e,o):v.default({roles:["owner","admin","pagesEditor"]})(t,e,o),K=(t,e)=>{const o=W.getResourceExportDir({projectId:t,releaseId:e});return b.join(o,c.COMPONENT_DID,c.RESOURCE_TYPE)},S=U.Router(),B="@page",q="@component",y=":",_="ALL",L="@project",C=({pageId:t,projectId:e})=>[B,e,t].join(y),Y=t=>{const[e,o,n]=t.split(y);if(e===B)return{pageId:n,projectId:o}},A=({componentId:t,projectId:e})=>[q,e,t].join(y),z=t=>{const[e,o,n]=t.split(y);if(e===q)return{componentId:n,projectId:o}},H=t=>[L,t].join(y),Q=t=>{const[e,o]=t.split(y);if(e===L)return o},V=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 a=e.pages[r];if(a)return{id:C({pageId:r,projectId:t}),name:a.slug}}).filter(Boolean),s=O.sortBy(Object.values(e.components),r=>r.index).map(({data:r})=>({id:A({componentId:r.id,projectId:t}),name:r.name||r.id}));return{id:H(t),name:(o==null?void 0:o.name)||"Unnamed Project",children:[{id:C({pageId:_,projectId:t}),name:"Pages",children:n},{id:A({componentId:_,projectId:t}),name:"Components",children:s}]}}S.get("/resources",D,async(t,e)=>{const{projectId:o}=V(t.query.resourcesParams);if(o){t.params={...t.params,projectId:o},await $(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 Z=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",D,async(t,e)=>{const{resources:o,projectId:n,releaseId:s}=await Z.validateAsync(t.body),r="production",a=[],u=[];for(const i of o){if(Q(i))continue;const{pageId:m,projectId:j}=Y(i)||{};if(m)m===_||m&&j&&a.push({pageId:m,projectId:j});else{const{componentId:l,projectId:d}=z(i)||{};l===_||l&&d&&u.push({componentId:l,projectId:d})}}const f=O.groupBy(a,"projectId"),P=O.groupBy(u,"projectId"),h=new Set([...Object.keys(f),...Object.keys(P)]),w=K(n,s);p.default.rmSync(w,{recursive:!0,force:!0}),p.default.mkdirSync(w,{recursive:!0});for(const i of h){const m=await c.SiteState.shared(i).getState(r),j=f[i],l=P[i],d=j==null?void 0:j.map(g=>g.pageId),R=l==null?void 0:l.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 G(g,w),p.default.rmSync(g,{recursive:!0,force:!0})}c.logger.info(`Exported resources for project ${i}`,{pageIds:d,componentIds:R})}e.json({})});S.get("/all-resources",D,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-DwYxv6zB.js");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");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");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;
|
|
@@ -16,16 +16,16 @@ import { createBuiltinModuleTransformer as mt, isRelativeModule as ft } from "@b
|
|
|
16
16
|
import { getResources as gt, getComponentWebEndpoint as ht, call as yt } from "@blocklet/sdk/lib/component";
|
|
17
17
|
import St from "autoprefixer";
|
|
18
18
|
import * as wt from "esbuild";
|
|
19
|
-
import { readFileSync as H, existsSync as V, lstatSync as Z, readdirSync as Et, rmSync as $e, mkdtempSync as bt, renameSync as
|
|
19
|
+
import { readFileSync as H, existsSync as V, lstatSync as Z, readdirSync as Et, rmSync as $e, mkdtempSync as bt, renameSync as Te, mkdirSync as F, writeFileSync as te, createWriteStream as It } from "fs";
|
|
20
20
|
import Ot from "postcss";
|
|
21
21
|
import At from "tailwindcss";
|
|
22
22
|
import j from "typescript";
|
|
23
|
-
import { reactive as
|
|
24
|
-
import { syncedStore as
|
|
23
|
+
import { reactive as Tt } from "@reactivedata/reactive";
|
|
24
|
+
import { syncedStore as vt, getYjsValue as le } from "@syncedstore/core";
|
|
25
25
|
import { globSync as me } from "glob";
|
|
26
26
|
import * as pe from "lib0/decoding";
|
|
27
27
|
import * as C from "lib0/encoding";
|
|
28
|
-
import { get as ye, isEmpty as Pt, set as
|
|
28
|
+
import { get as ye, isEmpty as Pt, set as ve, pick as Ct, debounce as Fe, union as xt, cloneDeep as jt } from "lodash";
|
|
29
29
|
import { customAlphabet as kt } from "nanoid";
|
|
30
30
|
import Dt from "p-limit";
|
|
31
31
|
import Nt, { join as A, dirname as L, basename as J } from "path";
|
|
@@ -37,7 +37,7 @@ import { writeUpdate as Ft, writeSyncStep1 as Bt, readSyncMessage as Vt } from "
|
|
|
37
37
|
import * as z from "yaml";
|
|
38
38
|
import * as $ from "yjs";
|
|
39
39
|
import Gt from "lodash/isNil";
|
|
40
|
-
import { DataTypes as
|
|
40
|
+
import { DataTypes as v, Sequelize as Jt, Model as Be, Op as Ht } from "sequelize";
|
|
41
41
|
import "sqlite3";
|
|
42
42
|
S.env.mode;
|
|
43
43
|
const zt = "image-bin";
|
|
@@ -45,8 +45,8 @@ S.env.INIT_TEMPLATE_PATH;
|
|
|
45
45
|
const Kt = process.env.DATABASE_URL || Nt.join(S.env.dataDir, "db/pages-kit.db"), Ce = S, so = () => S.env.tenantMode === "multiple", oo = () => {
|
|
46
46
|
var t;
|
|
47
47
|
return (Gt(Ce.env.preferences.multiTenantAllProjectAccessPassports) ? [] : (t = Ce.env.preferences.multiTenantAllProjectAccessPassports) == null ? void 0 : t.split(",")) || [];
|
|
48
|
-
}, I = ut("pages-kit"), Wt =
|
|
49
|
-
|
|
48
|
+
}, I = ut("pages-kit"), Wt = v.sqlite.DATE.parse;
|
|
49
|
+
v.sqlite.DATE.parse = (t, o) => typeof t == "number" ? new Date(t) : Wt(t, o);
|
|
50
50
|
const Y = new Jt({
|
|
51
51
|
dialect: "sqlite",
|
|
52
52
|
storage: Kt,
|
|
@@ -69,17 +69,17 @@ class ce extends Be {
|
|
|
69
69
|
ce.init(
|
|
70
70
|
{
|
|
71
71
|
id: {
|
|
72
|
-
type:
|
|
72
|
+
type: v.UUID,
|
|
73
73
|
allowNull: !1,
|
|
74
74
|
primaryKey: !0,
|
|
75
|
-
defaultValue:
|
|
75
|
+
defaultValue: v.UUIDV4
|
|
76
76
|
},
|
|
77
77
|
projectId: {
|
|
78
|
-
type:
|
|
78
|
+
type: v.UUID,
|
|
79
79
|
allowNull: !1
|
|
80
80
|
},
|
|
81
81
|
componentId: {
|
|
82
|
-
type:
|
|
82
|
+
type: v.STRING,
|
|
83
83
|
allowNull: !1
|
|
84
84
|
}
|
|
85
85
|
},
|
|
@@ -97,31 +97,32 @@ class B extends Be {
|
|
|
97
97
|
B.init(
|
|
98
98
|
{
|
|
99
99
|
id: {
|
|
100
|
-
type:
|
|
101
|
-
defaultValue:
|
|
100
|
+
type: v.UUID,
|
|
101
|
+
defaultValue: v.UUIDV4,
|
|
102
102
|
primaryKey: !0
|
|
103
103
|
},
|
|
104
104
|
name: {
|
|
105
|
-
type:
|
|
105
|
+
type: v.STRING,
|
|
106
106
|
allowNull: !1
|
|
107
107
|
},
|
|
108
|
-
description:
|
|
109
|
-
createdAt:
|
|
110
|
-
updatedAt:
|
|
108
|
+
description: v.TEXT,
|
|
109
|
+
createdAt: v.DATE,
|
|
110
|
+
updatedAt: v.DATE,
|
|
111
111
|
createdBy: {
|
|
112
|
-
type:
|
|
112
|
+
type: v.STRING,
|
|
113
113
|
allowNull: !1
|
|
114
114
|
},
|
|
115
115
|
updatedBy: {
|
|
116
|
-
type:
|
|
116
|
+
type: v.STRING,
|
|
117
117
|
allowNull: !1
|
|
118
118
|
},
|
|
119
|
-
slug:
|
|
120
|
-
icon:
|
|
121
|
-
pinnedAt:
|
|
122
|
-
useAllResources:
|
|
119
|
+
slug: v.STRING,
|
|
120
|
+
icon: v.STRING,
|
|
121
|
+
pinnedAt: v.DATE,
|
|
122
|
+
useAllResources: v.BOOLEAN,
|
|
123
|
+
npmSecret: v.STRING,
|
|
123
124
|
relatedBlocklets: {
|
|
124
|
-
type:
|
|
125
|
+
type: v.JSON,
|
|
125
126
|
allowNull: !1,
|
|
126
127
|
defaultValue: {},
|
|
127
128
|
get() {
|
|
@@ -329,12 +330,12 @@ async function no({
|
|
|
329
330
|
});
|
|
330
331
|
if (t !== "draft" && g.useCache && K.has(y))
|
|
331
332
|
return I.info(`get preload component from cache: ${y}`), K.get(y);
|
|
332
|
-
const
|
|
333
|
-
if (!
|
|
333
|
+
const T = se({ state: e, componentId: g.componentId });
|
|
334
|
+
if (!T) return null;
|
|
334
335
|
const x = await os({
|
|
335
336
|
req: o,
|
|
336
337
|
state: e,
|
|
337
|
-
componentId:
|
|
338
|
+
componentId: T.id,
|
|
338
339
|
locale: s,
|
|
339
340
|
defaultLocale: a,
|
|
340
341
|
properties: g.properties
|
|
@@ -358,7 +359,7 @@ async function no({
|
|
|
358
359
|
async function p() {
|
|
359
360
|
const g = await Promise.all(
|
|
360
361
|
c.map(async (y) => {
|
|
361
|
-
const
|
|
362
|
+
const T = ot({ componentId: y.component.id }), x = r === X.ESM ? {
|
|
362
363
|
module: r,
|
|
363
364
|
script: await xe(y.script, {
|
|
364
365
|
componentId: y.component.id,
|
|
@@ -370,10 +371,10 @@ async function no({
|
|
|
370
371
|
script: await xe(y.script, {
|
|
371
372
|
componentId: y.component.id,
|
|
372
373
|
module: r,
|
|
373
|
-
moduleName:
|
|
374
|
+
moduleName: T,
|
|
374
375
|
tailwind: t !== "draft"
|
|
375
376
|
}),
|
|
376
|
-
moduleName:
|
|
377
|
+
moduleName: T
|
|
377
378
|
};
|
|
378
379
|
return [y.component.id, { component: y.component, script: x }];
|
|
379
380
|
})
|
|
@@ -779,8 +780,8 @@ const M = class M extends $.Doc {
|
|
|
779
780
|
}
|
|
780
781
|
this.save();
|
|
781
782
|
});
|
|
782
|
-
this.options = e, V(this.draftYjsFilePath) && $.applyUpdate(this, H(this.draftYjsFilePath)), this.syncedStore =
|
|
783
|
-
|
|
783
|
+
this.options = e, V(this.draftYjsFilePath) && $.applyUpdate(this, H(this.draftYjsFilePath)), this.syncedStore = Tt(
|
|
784
|
+
vt(
|
|
784
785
|
{ pages: {}, pageIds: [], components: {}, supportedLocales: [], config: {}, resources: {} },
|
|
785
786
|
this
|
|
786
787
|
)
|
|
@@ -792,7 +793,7 @@ const M = class M extends $.Doc {
|
|
|
792
793
|
throw new Error("Should provide project context");
|
|
793
794
|
try {
|
|
794
795
|
const s = A(Q, e), n = A(Q, `@del-${e}`);
|
|
795
|
-
|
|
796
|
+
Te(s, n);
|
|
796
797
|
} catch (s) {
|
|
797
798
|
I.error("Failed to safe delete project state dir:", s);
|
|
798
799
|
}
|
|
@@ -861,11 +862,11 @@ const M = class M extends $.Doc {
|
|
|
861
862
|
...(y = (g = this.states[e]) == null ? void 0 : g.resources) == null ? void 0 : y.components
|
|
862
863
|
};
|
|
863
864
|
else {
|
|
864
|
-
const
|
|
865
|
+
const T = J(this.options.path), x = await B.findByPk(T);
|
|
865
866
|
if (x != null && x.useAllResources)
|
|
866
867
|
p = c;
|
|
867
868
|
else {
|
|
868
|
-
const D = (await ce.findAll({ where: { projectId:
|
|
869
|
+
const D = (await ce.findAll({ where: { projectId: T } })).map((E) => E.componentId);
|
|
869
870
|
p = Object.fromEntries(
|
|
870
871
|
Object.entries(c || {}).filter(([E]) => D.includes(E))
|
|
871
872
|
);
|
|
@@ -877,7 +878,7 @@ const M = class M extends $.Doc {
|
|
|
877
878
|
}
|
|
878
879
|
async setState(e, s) {
|
|
879
880
|
const n = await ws(s, { exportAssets: !1, includeResources: !0 }), r = this.getPublishDir(e);
|
|
880
|
-
F(L(r), { recursive: !0 }), $e(r, { force: !0, recursive: !0 }),
|
|
881
|
+
F(L(r), { recursive: !0 }), $e(r, { force: !0, recursive: !0 }), Te(n, r), this.states[e] = s;
|
|
881
882
|
}
|
|
882
883
|
getPublishDir(e) {
|
|
883
884
|
return A(this.options.path, e);
|
|
@@ -917,8 +918,8 @@ const M = class M extends $.Doc {
|
|
|
917
918
|
mainPage: !0
|
|
918
919
|
};
|
|
919
920
|
for (const y of i) {
|
|
920
|
-
const
|
|
921
|
-
n[_("/", y, r, u)] =
|
|
921
|
+
const T = { ...g, locale: y };
|
|
922
|
+
n[_("/", y, r, u)] = T, m && (n[_("/", y, m, u)] = T);
|
|
922
923
|
}
|
|
923
924
|
}
|
|
924
925
|
}
|
|
@@ -1030,13 +1031,13 @@ async function Re(t, o, e) {
|
|
|
1030
1031
|
try {
|
|
1031
1032
|
const c = ye(t, i), p = Ke(c);
|
|
1032
1033
|
for (const u of p) {
|
|
1033
|
-
const m = J(u), g = e.getFilePath(u, i), y = g ? `${g}:${m}` : m,
|
|
1034
|
-
if (
|
|
1035
|
-
W.test(c) ||
|
|
1034
|
+
const m = J(u), g = e.getFilePath(u, i), y = g ? `${g}:${m}` : m, T = Le.get(y);
|
|
1035
|
+
if (T) {
|
|
1036
|
+
W.test(c) || ve(t, i, T);
|
|
1036
1037
|
return;
|
|
1037
1038
|
}
|
|
1038
1039
|
const x = await hs(g, m, o);
|
|
1039
|
-
x && (W.test(c) ||
|
|
1040
|
+
x && (W.test(c) || ve(t, i, x), Le.set(y, x));
|
|
1040
1041
|
}
|
|
1041
1042
|
} catch (c) {
|
|
1042
1043
|
I.error(`Failed to process upload for path ${i.join(".")}:`, c.message || c.reason);
|
|
@@ -1115,7 +1116,7 @@ async function ws(t, {
|
|
|
1115
1116
|
}
|
|
1116
1117
|
const y = A(u, ".blocklet/pages/pages.config.yml");
|
|
1117
1118
|
F(L(y), { recursive: !0 });
|
|
1118
|
-
const
|
|
1119
|
+
const T = {
|
|
1119
1120
|
pages: R(
|
|
1120
1121
|
l.map((f) => {
|
|
1121
1122
|
const d = t.pages[f];
|
|
@@ -1148,7 +1149,7 @@ async function ws(t, {
|
|
|
1148
1149
|
supportedLocales: t.supportedLocales,
|
|
1149
1150
|
config: t.config
|
|
1150
1151
|
};
|
|
1151
|
-
te(y, z.stringify(
|
|
1152
|
+
te(y, z.stringify(T));
|
|
1152
1153
|
const x = A(u, "config.source.json");
|
|
1153
1154
|
if (n && te(x, JSON.stringify(n)), r) {
|
|
1154
1155
|
const f = A(u, "resources"), d = A(f, "components");
|
|
@@ -1184,7 +1185,7 @@ async function We(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1184
1185
|
I.error("parse component error", b);
|
|
1185
1186
|
}
|
|
1186
1187
|
return null;
|
|
1187
|
-
},
|
|
1188
|
+
}, T = R(
|
|
1188
1189
|
m.pages.map(({ slug: h }) => {
|
|
1189
1190
|
var f;
|
|
1190
1191
|
const E = R(
|
|
@@ -1249,9 +1250,9 @@ async function We(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1249
1250
|
h(`upload ${O.length} component assets`);
|
|
1250
1251
|
}
|
|
1251
1252
|
}),
|
|
1252
|
-
Re(
|
|
1253
|
+
Re(T, b, {
|
|
1253
1254
|
getFilePath: (O, f) => {
|
|
1254
|
-
const d = ye(
|
|
1255
|
+
const d = ye(T, f.slice(0, 1));
|
|
1255
1256
|
return c && A(c, L(d.slug), O);
|
|
1256
1257
|
},
|
|
1257
1258
|
onFinish: (O) => {
|
|
@@ -1280,9 +1281,9 @@ async function We(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1280
1281
|
}
|
|
1281
1282
|
return {
|
|
1282
1283
|
supportedLocales: m.supportedLocales,
|
|
1283
|
-
pageIds:
|
|
1284
|
+
pageIds: T.map((h) => h.id),
|
|
1284
1285
|
components: Object.fromEntries(x.map((h, E) => [h.id, { index: E, data: h }])),
|
|
1285
|
-
pages: Object.fromEntries(
|
|
1286
|
+
pages: Object.fromEntries(T.map((h) => [h.id, h])),
|
|
1286
1287
|
config: m.config || {},
|
|
1287
1288
|
resources: U,
|
|
1288
1289
|
chunks: D
|
package/lib/es/components.js
CHANGED
|
@@ -7,7 +7,7 @@ import "lru-cache";
|
|
|
7
7
|
import "node-fetch";
|
|
8
8
|
import "ufo";
|
|
9
9
|
import "crypto";
|
|
10
|
-
import { c as _, G as E, d as i, e as d, j as l, k as N, m as O, h as P, b as c, f as g } from "./_chunks/site-state-
|
|
10
|
+
import { c as _, G as E, d as i, e as d, j as l, k as N, m as O, h as P, b as c, f as g } from "./_chunks/site-state-S4QPpxwh.js";
|
|
11
11
|
export {
|
|
12
12
|
_ as CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS,
|
|
13
13
|
E as GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS,
|
package/lib/es/locales.js
CHANGED
|
@@ -335,7 +335,8 @@ const t = e({
|
|
|
335
335
|
tabs: {
|
|
336
336
|
basic: "Basic",
|
|
337
337
|
appearance: "Appearance",
|
|
338
|
-
resources: "Resources"
|
|
338
|
+
resources: "Resources",
|
|
339
|
+
integration: "Integration"
|
|
339
340
|
},
|
|
340
341
|
basic: {
|
|
341
342
|
title: "Basic Information",
|
|
@@ -355,6 +356,9 @@ const t = e({
|
|
|
355
356
|
addResource: "Select resource components",
|
|
356
357
|
needInstallResourceByAdmin: "Please install resource components by admin",
|
|
357
358
|
noSelectedResources: "No selected any resource components"
|
|
359
|
+
},
|
|
360
|
+
integration: {
|
|
361
|
+
packageSetting: "Package Setting"
|
|
358
362
|
}
|
|
359
363
|
},
|
|
360
364
|
edit: {
|
|
@@ -700,7 +704,8 @@ const t = e({
|
|
|
700
704
|
tabs: {
|
|
701
705
|
basic: "基础设置",
|
|
702
706
|
appearance: "外观设置",
|
|
703
|
-
resources: "资源组件"
|
|
707
|
+
resources: "资源组件",
|
|
708
|
+
integration: "集成设置"
|
|
704
709
|
},
|
|
705
710
|
basic: {
|
|
706
711
|
title: "基础信息",
|
|
@@ -720,6 +725,9 @@ const t = e({
|
|
|
720
725
|
addResource: "选择资源组件",
|
|
721
726
|
needInstallResourceByAdmin: "请联系管理员安装资源组件",
|
|
722
727
|
noSelectedResources: "未选择任何资源组件"
|
|
728
|
+
},
|
|
729
|
+
integration: {
|
|
730
|
+
packageSetting: "包设置"
|
|
723
731
|
}
|
|
724
732
|
},
|
|
725
733
|
edit: {
|
package/lib/es/project-html.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as k, b as H } from "./_chunks/site-state-
|
|
1
|
+
import { l as k, b as H } from "./_chunks/site-state-S4QPpxwh.js";
|
|
2
2
|
import { initCronCrawlBlocklet as W, cancelCronCrawlBlocklet as N, initSEOMiddleware as J } from "@blocklet/crawler/middlewares";
|
|
3
3
|
import { PreloadComponentScriptModule as G } from "@blocklet/pages-kit/types";
|
|
4
4
|
import { injectPreloadComponents as K } from "@blocklet/pages-kit/utils/preload";
|
package/lib/es/resources.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as S, i as b, g as M, l as x, C as J, R as X, S as N, t as W, a as G } from "./_chunks/site-state-
|
|
1
|
+
import { P as S, i as b, g as M, l as x, C as J, R as X, S as N, t as W, a as G } from "./_chunks/site-state-S4QPpxwh.js";
|
|
2
2
|
import { AsyncLocalStorage as K } from "async_hooks";
|
|
3
3
|
import { Router as Y } from "express";
|
|
4
4
|
import d from "fs";
|
package/lib/es/site-state.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { q as x, o as D, p as H, S as M, r as O, a as j, u as q, s as v, n as B, t as L, v as U } from "./_chunks/site-state-
|
|
1
|
+
import { q as x, o as D, p as H, S as M, r as O, a as j, u as q, s as v, n as B, t as L, v as U } from "./_chunks/site-state-S4QPpxwh.js";
|
|
2
2
|
import "@blocklet/quickjs";
|
|
3
3
|
import "@blocklet/sdk/lib/component";
|
|
4
4
|
import "@blocklet/sdk/lib/config";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/pages-kit-inner-components",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.63",
|
|
4
4
|
"description": "Pages Kit inner components library",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -202,8 +202,8 @@
|
|
|
202
202
|
"yaml": "^2.5.0",
|
|
203
203
|
"yjs": "^13.6.18",
|
|
204
204
|
"zustand": "^4.5.5",
|
|
205
|
-
"@blocklet/pages-kit": "^0.4.
|
|
206
|
-
"@blocklet/pages-kit-block-studio": "^0.4.
|
|
205
|
+
"@blocklet/pages-kit": "^0.4.63",
|
|
206
|
+
"@blocklet/pages-kit-block-studio": "^0.4.63"
|
|
207
207
|
},
|
|
208
208
|
"devDependencies": {
|
|
209
209
|
"@trivago/prettier-plugin-sort-imports": "^5.2.1",
|