@blocklet/pages-kit-inner-components 0.4.40 → 0.4.42
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-DtuL49Z6.js → site-state-Bm_4Xw-l.js} +5 -5
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +2 -2
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/_chunks/{site-state-Da4qgEoo.js → site-state-4UkWXe7F.js} +164 -146
- package/lib/es/components.js +1 -1
- package/lib/es/project-html.js +39 -36
- package/lib/es/resources.js +1 -1
- package/lib/es/site-state.js +1 -1
- package/package.json +5 -5
|
@@ -1,9 +1,9 @@
|
|
|
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"),B=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),Le=require("node-fetch"),D=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"),G=require("y-protocols/awareness"),le=require("y-protocols/sync"),Et=require("yaml"),bt=require("yjs"),Tt=require("lodash/isNil"),I=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),Ot=L(Le),Pt=L(rt),Ct=L(it),It=X(ct),jt=L(lt),At=L(pt),x=L(ut),pe=X(ft),_=X(mt),_t=L(ht),vt=L(h),xt=L(wt),K=X(Et),V=X(bt),Dt=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(Dt.default(ve.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=ve.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},
|
|
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"),B=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),Le=require("node-fetch"),D=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"),G=require("y-protocols/awareness"),le=require("y-protocols/sync"),Et=require("yaml"),bt=require("yjs"),Tt=require("lodash/isNil"),I=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),Ot=L(Le),Pt=L(rt),Ct=L(it),It=X(ct),jt=L(lt),At=L(pt),x=L(ut),pe=X(ft),_=X(mt),_t=L(ht),vt=L(h),xt=L(wt),K=X(Et),V=X(bt),Dt=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(Dt.default(ve.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=ve.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},P=Pt.default("pages-kit"),Ut=I.DataTypes.sqlite.DATE.parse;I.DataTypes.sqlite.DATE.parse=(t,n)=>typeof t=="number"?new Date(t):Ut(t,n);const Z=new I.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 I.Model{}ce.init({id:{type:I.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:I.DataTypes.UUIDV4},projectId:{type:I.DataTypes.UUID,allowNull:!1},componentId:{type:I.DataTypes.STRING,allowNull:!1}},{sequelize:Z,tableName:"ProjectComponents",timestamps:!1});class $ extends I.Model{static async getProjectByIdOrSlug(n){return $.findOne({where:{[I.Op.or]:[{id:n},{slug:n}]}})}}$.init({id:{type:I.DataTypes.UUID,defaultValue:I.DataTypes.UUIDV4,primaryKey:!0},name:{type:I.DataTypes.STRING,allowNull:!1},description:I.DataTypes.TEXT,createdAt:I.DataTypes.DATE,updatedAt:I.DataTypes.DATE,createdBy:{type:I.DataTypes.STRING,allowNull:!1},updatedBy:{type:I.DataTypes.STRING,allowNull:!1},slug:I.DataTypes.STRING,icon:I.DataTypes.STRING,pinnedAt:I.DataTypes.DATE,useAllResources:I.DataTypes.BOOLEAN,relatedBlocklets:{type:I.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"}]}),Ct.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
|
|
|
5
5
|
${t}
|
|
6
|
-
`},xe=B.memoize(async(t,n)=>{let e=x.default.transpileModule(t,{compilerOptions:{jsx:x.default.JsxEmit.React,target:x.default.ScriptTarget.ES2016,module:x.default.ModuleKind.ESNext},transformers:{before:[Ue.createBuiltinModuleTransformer(x.default)]}}).outputText;if(n.tailwind&&(e=await Ft(e,{componentId:n.componentId})),n.module===se.PreloadComponentScriptModule.ESM)return e;const s=x.default.transpileModule(e,{compilerOptions:{jsx:x.default.JsxEmit.React,target:x.default.ScriptTarget.ES2016,module:x.default.ModuleKind.CommonJS,moduleResolution:x.default.ModuleResolutionKind.Node16}}).outputText;return n.module===se.PreloadComponentScriptModule.CJS?s:$t(n.moduleName,s)},{keyGenerator:(t,n)=>{const e=ie.createHash("md5").update(t).digest("hex"),s={...n,componentId:n.componentId,module:n.module,...n.module!==se.PreloadComponentScriptModule.ESM?{moduleName:n.moduleName}:{},tailwind:n.tailwind};return JSON.stringify(["transpileModule",e,s])},lruOptions:{max:100,ttl:1e3*60*60}}),qt=async(t,n)=>{var l,a;const s=(a=(l=(await It.build({entryPoints:["index.tsx"],external:Object.keys(at.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(i){let c=null;i.onResolve({filter:/.*/},p=>p.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:p.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),i.onLoad({filter:/.*/,namespace:"vfs"},async p=>{var u;if(p.path==="index.tsx")return{contents:`export { ${n} } from './component'`,loader:"tsx"};if(p.path==="component.tsx")return{contents:t,loader:"tsx"};if(Ue.isRelativeModule(p.path)){const f=p.path.split("/").pop();if(c||(c=await Ae({ensureLoaded:!1})),(u=c==null?void 0:c.chunks)!=null&&u[f])try{const g=E.readFileSync(c.chunks[f],"utf-8");return
|
|
6
|
+
`},xe=B.memoize(async(t,n)=>{let e=x.default.transpileModule(t,{compilerOptions:{jsx:x.default.JsxEmit.React,target:x.default.ScriptTarget.ES2016,module:x.default.ModuleKind.ESNext},transformers:{before:[Ue.createBuiltinModuleTransformer(x.default)]}}).outputText;if(n.tailwind&&(e=await Ft(e,{componentId:n.componentId})),n.module===se.PreloadComponentScriptModule.ESM)return e;const s=x.default.transpileModule(e,{compilerOptions:{jsx:x.default.JsxEmit.React,target:x.default.ScriptTarget.ES2016,module:x.default.ModuleKind.CommonJS,moduleResolution:x.default.ModuleResolutionKind.Node16}}).outputText;return n.module===se.PreloadComponentScriptModule.CJS?s:$t(n.moduleName,s)},{keyGenerator:(t,n)=>{const e=ie.createHash("md5").update(t).digest("hex"),s={...n,componentId:n.componentId,module:n.module,...n.module!==se.PreloadComponentScriptModule.ESM?{moduleName:n.moduleName}:{},tailwind:n.tailwind};return JSON.stringify(["transpileModule",e,s])},lruOptions:{max:100,ttl:1e3*60*60}}),qt=async(t,n)=>{var l,a;const s=(a=(l=(await It.build({entryPoints:["index.tsx"],external:Object.keys(at.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(i){let c=null;i.onResolve({filter:/.*/},p=>p.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:p.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),i.onLoad({filter:/.*/,namespace:"vfs"},async p=>{var u;if(p.path==="index.tsx")return{contents:`export { ${n} } from './component'`,loader:"tsx"};if(p.path==="component.tsx")return{contents:t,loader:"tsx"};if(Ue.isRelativeModule(p.path)){const f=p.path.split("/").pop();if(c||(c=await Ae({ensureLoaded:!1})),(u=c==null?void 0:c.chunks)!=null&&u[f])try{const g=E.readFileSync(c.chunks[f],"utf-8");return P.info("get chunk from local file system",f),{contents:g,loader:"tsx"}}catch{}}return null})}}]})).outputFiles)==null?void 0:l[0])==null?void 0:a.contents;if(!s)throw new Error("Failed to build server code");const o=Buffer.from(s).toString();return x.default.transpileModule(o,{compilerOptions:{module:x.default.ModuleKind.ESNext,target:x.default.ScriptTarget.ES2020}}).outputText},Me=B.memoize(async(t,n)=>{const e=await qt(t,n);return new RegExp(`export\\s+\\{\\s+${n}\\s+\\}`,"m").test(e)?e:void 0},{keyGenerator:(t,n)=>{const e=ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["extractExportValueSchema",e,n])},lruOptions:{max:100,ttl:1e3*60*60}}),$t=(t,n)=>{const e=/\bawait\b/.test(n);return`// GENERATED FILE. DO NOT EDIT.
|
|
7
7
|
var ${t} = ${e?"async":""} function () {
|
|
8
8
|
|
|
9
9
|
const exports = {};
|
|
@@ -29,7 +29,7 @@ var ${t} = ${e?"async":""} function () {
|
|
|
29
29
|
|
|
30
30
|
return exports;
|
|
31
31
|
};
|
|
32
|
-
`},z=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){
|
|
32
|
+
`},z=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){P.info("clear preload components cache",{cacheKey:t}),z.delete(t)}function $e(t){for(const n of z.keys())n.includes(t)&&(P.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&&z.has(S))return P.info(`get preload component from cache: ${S}`),z.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),P.info(`set preload component to cache(${R}s): ${S}`),z.set(S,F,{ttl:R*1e3})}return F}catch(S){return P.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 xe(S.script,{componentId:S.component.id,module:r,tailwind:t!=="draft"})}:{module:r,script:await xe(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 He({req:t,state:n,componentId:e,locale:i,defaultLocale:o,properties:r});return c?{component:a,...c}:null}const Vt=20;async function He({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=Ht({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 Jt({...a,req:t});p!=null&&p.props&&Object.assign(c.props,p.props)}catch(p){P.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 He({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 Ht({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 Gt({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 Jt({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,i)=>{setTimeout(()=>{i(new Error("getServerSideProps timeout in promise race"))},me*1e3)});return await Promise.race([r,B.Sandbox.callFunction({code:`${o}
|
|
33
33
|
|
|
34
34
|
export async function getServerSidePropsWrapper(props) {
|
|
35
35
|
const { location, fetch } = 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 B.BuiltinModules.dayjs},global:{console:{log:(...a)=>{
|
|
51
|
+
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return B.BuiltinModules.dayjs},global:{console:{log:(...a)=>{P.info(...a)},warn:(...a)=>{P.warn(...a)},error:(...a)=>{P.error(...a)}},getComponentMountPoint:nt.getComponentMountPoint,joinURL:D.joinURL,withQuery:D.withQuery,getQuery:D.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:D.joinURL(D.withHttps(s.hostname),s.originalUrl)},fetch:(a,{...i}={})=>{const c=typeof a=="string"&&a.startsWith("/")?D.joinURL(w.default.env.appUrl,a):a;if(typeof c=="string"&&D.parseURL(c).host===D.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 Ot.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 Ge=B.memoize(async(t,n,e)=>{if(!(t!=null&&t.includes(n)))return null;const s=await Me(t,n);if(s)try{return await B.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 C.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}}),Kt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Kt,zt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Oe=/^\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,De=/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,J=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function Je(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 V.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",N.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,V.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:C.warn(`Unsupported messageType ${l}`)}}catch(o){C.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&V.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(J,e),o=h.join(J,`@del-${e}`);E.renameSync(s,o)}catch(s){C.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:J,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(J,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 V.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof V.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 V.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 Pe(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[D.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[D.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[D.joinURL("/",S,r,u)]=j,f&&(o[D.joinURL("/",S,f,u)]=j)}}}return o}};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 Ke(){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()=>(await Yt({filePath:t,fileName:n})).data.filename)(),e[t]=s),s}const os=async(t,n)=>{const e=h.basename(t),s=await be.call({name:Te,path:D.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){C.error(`Failed to export assets: ${e}, ${s}`)}}))};function ze(t){return Oe.test(t)?[t]:Y.test(t)?(De.lastIndex=0,Array.from(t.matchAll(De)).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,K.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Oe.test(i)||Y.test(i))).map(i=>{const c=N.get(t,i);return ze(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"&&(Oe.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=N.get(t,i),p=ze(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){C.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=Ke(),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:()=>`${Je(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,K.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 Pe(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=Ke(),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=K.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:K.parse(E.readFileSync(P).toString())},S=(y,T)=>{try{const O=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return O?K.parse(E.readFileSync(O).toString()):null}catch(O){C.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,Je(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)=>{C.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await xt.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){C.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=B.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 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){C.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,Ce,Ie,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:zt,type:ge}]});H=(await Promise.all(t.map(async e=>{const s=e.path?await Pe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Ce=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}]))),{});Ie=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=N.debounce(async()=>{await Qe().catch(e=>{C.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:H,pages:Ce,components:Ie,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;await 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}C.info(`update [${s}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))});async function is(){C.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:Ce,components:Ie,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=J;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Pe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Gt;exports.getExportSchemaValueFromCode=Ge;exports.getMultiTenantAllProjectAccessPassports=Lt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Nt;exports.logger=C;exports.mergeState=we;exports.nextId=ye;exports.toPackage=Ye;exports.triggerReloadAllProjectResource=is;
|
|
57
|
+
`,filename:`${e}.js`,functionName:`get${n}SchemaWrapper`})}catch(o){return P.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}}),Kt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Kt,zt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Oe=/^\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,De=/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,J=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function Je(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 V.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",N.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,V.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:P.warn(`Unsupported messageType ${l}`)}}catch(o){P.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&V.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(J,e),o=h.join(J,`@del-${e}`);E.renameSync(s,o)}catch(s){P.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:J,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(J,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 V.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof V.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 V.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 Pe(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[D.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[D.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[D.joinURL("/",S,r,u)]=j,f&&(o[D.joinURL("/",S,f,u)]=j)}}}return o}};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 Ke(){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 P.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:D.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){P.error(`Failed to export assets: ${e}, ${s}`)}}))};function ze(t){return Oe.test(t)?[t]:Y.test(t)?(De.lastIndex=0,Array.from(t.matchAll(De)).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,K.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Oe.test(i)||Y.test(i))).map(i=>{const c=N.get(t,i);return ze(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"&&(Oe.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=N.get(t,i),p=ze(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){P.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,C;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=Ke(),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:()=>`${Je(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,K.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=(C=(O=(T=t.resources)==null?void 0:T.components)==null?void 0:O[b])==null?void 0:C.component;k&&await de(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:n})}}return u}async function Pe(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=Ke(),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=K.parse(E.readFileSync(i).toString()),g=(y,T,O)=>{let C=h.join(y,`${T}${O?`.${O}`:""}.yml`);return(!E.existsSync(C)||!E.lstatSync(C).isFile())&&(C=h.join(y,T,`index${O?`.${O}`:""}.yml`),!E.existsSync(C)||!E.lstatSync(C))?null:K.parse(E.readFileSync(C).toString())},S=(y,T)=>{try{const O=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return O?K.parse(E.readFileSync(O).toString()):null}catch(O){P.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,Je(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 C=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(C.map(d=>[d.id,d])),sectionIds:C.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)=>{P.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await xt.default({resources:[`${be.getComponentWebEndpoint(kt)}/api/sdk/uploads`],validateStatus:C=>C>=200&&C<=500}),y("image-bin api is ready");const T={},O={};y("start to upload assets"),await Promise.allSettled([Re(v,T,{getFilePath:C=>p&&h.join(p,C),onFinish:C=>{y(`upload ${C.length} component assets`)}}),Re(j,O,{getFilePath:(C,m)=>{const d=N.get(j,m.slice(0,1));return c&&h.join(c,h.dirname(d.slug),C)},onFinish:C=>{y(`upload ${C.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,C)=>[O.id,{index:C,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){P.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=B.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 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){P.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,Ce,Ie,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:zt,type:ge}]});H=(await Promise.all(t.map(async e=>{const s=e.path?await Pe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Ce=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}]))),{});Ie=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=N.debounce(async()=>{await Qe().catch(e=>{P.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:H,pages:Ce,components:Ie,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;P.info(`start update resource states projects(${e.length})`,e),await Promise.race([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}P.info(`update [${s}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})})),new Promise((s,o)=>{setTimeout(()=>{o(new Error("timeout to update resource states"))},30*1e3)})]).catch(s=>{P.error("update resource states failed:",s)})});async function is(){P.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:Ce,components:Ie,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=J;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Pe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Gt;exports.getExportSchemaValueFromCode=Ge;exports.getMultiTenantAllProjectAccessPassports=Lt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Nt;exports.logger=P;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-Bm_4Xw-l.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/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-Bm_4Xw-l.js"),S=require("@blocklet/crawler/middlewares"),W=require("@blocklet/pages-kit/types"),J=require("@blocklet/pages-kit/utils/preload"),G=require("@blocklet/sdk/lib/component"),D=require("@blocklet/sdk/lib/config"),z=require("cheerio"),K=require("express"),A=require("fs"),Q=require("mustache"),I=require("path"),j=require("ufo"),q=e=>e&&e.__esModule?e:{default:e};function V(e){if(e&&e.__esModule)return e;const l=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(l,t,p.get?p:{enumerable:!0,get:()=>e[t]})}}return l.default=e,Object.freeze(l)}const d=q(D),U=V(z),X=q(Q),Y=["/assets/"],R=()=>[!0,"true"].includes(d.default.env.preferences.allowCrawler);function x(){R()?S.initCronCrawlBlocklet({time:"30 30 */12 * * *",options:{}}):S.cancelCronCrawlBlocklet()}x();d.default.events.on(d.default.Events.envUpdate,x);function Z({app:e,viteDevServer:l,state:t}){let p;if(l){const r=A.readFileSync(I.resolve(process.cwd(),"./index.html"),"utf-8");e.use(async(b,T,y)=>{const v=b.originalUrl;p=await l.transformIndexHtml(v,r),y()})}else p=A.readFileSync(I.resolve(process.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const C=K.Router();C.use(S.initSEOMiddleware({autoReturnHtml:!1,allowCrawler:R})),C.get("/:path(*)?",async(r,b,T)=>{var E,L,M;if(Y.some(c=>{var i;return(i=r.path)==null?void 0:i.startsWith(c)})){T();return}const y=performance.now(),v=()=>Math.round(performance.now()-y),B="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||!((E=t.supportedLocales)!=null&&E.find(h=>h.locale===f)))&&(f=((M=(L=t.supportedLocales)==null?void 0:L[0])==null?void 0:M.locale)||""),f){const h=[];Object.values(t.pages).forEach(s=>{const P=Object.values((s==null?void 0:s.sections)??{}).filter(a=>{var _;return a.component==="custom-component"&&((_=a.config)==null?void 0:_.componentId)}).map(a=>{var _,O;return{id:a.id,componentId:a.config.componentId,useCache:a.config.useCache,cacheDuration:a.config.cacheDuration,properties:(O=(_=a.locales)==null?void 0:_[f])==null?void 0:O.properties}});h.push(...P)});const N=new Promise((s,P)=>{setTimeout(()=>{P(new Error("getPreloadComponents timeout in promise race, skip it"))},90*1e3)});try{await Promise.race([N,k.getPreloadComponents({mode:B,req:r,state:t,locale:f,instances:h,module:W.PreloadComponentScriptModule.UMD_FN}).then(s=>{s&&(u=J.injectPreloadComponents(s))})])}catch(s){k.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements"),k.logger.warn(s)}}}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=j.withQuery(j.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,H=r.query.mode==="draft"||r.url.includes("preview"),m=U.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">`:""}
|
|
@@ -20,4 +20,4 @@
|
|
|
20
20
|
darkMode: "class",
|
|
21
21
|
};
|
|
22
22
|
<\/script>`:""}
|
|
23
|
-
`);const $=D.getBlockletJs();if($&&
|
|
23
|
+
`);const $=D.getBlockletJs();if($&&m('script[src="__blocklet__.js"]').replaceWith(`<script>${$}<\/script>`),u!=null&&u.html&&m("head").find("#injected-html-elements").replaceWith(u.html),r.cachedHtml){const c=U.load(r.cachedHtml);m("body").html(c("body").html()||"")}g=m.html(),b.send(g),k.logger.info(`[html] render: ${r.path}, ${v()}ms`),m.root().children().remove(),g=null,o=null,u=null}),e.use(C)}function F(e){const l=G.getComponentMountPoint("image-bin");return l&&e&&!/^(https?:\/\/|\/)/.test(e)?d.default.env.appUrl+j.joinURL(l,"uploads",e):e}module.exports=Z;
|
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-Bm_4Xw-l.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-Bm_4Xw-l.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,28 +16,28 @@ 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
|
|
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 $, 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
|
-
import Nt, { join as
|
|
31
|
+
import Nt, { join as A, dirname as L, basename as J } from "path";
|
|
32
32
|
import { pipeline as Lt } from "stream/promises";
|
|
33
33
|
import { x as Rt } from "tar";
|
|
34
34
|
import Ut from "wait-on";
|
|
35
|
-
import { Awareness as _t, encodeAwarenessUpdate as Pe, removeAwarenessStates as Mt, applyAwarenessUpdate as
|
|
36
|
-
import { writeUpdate as
|
|
35
|
+
import { Awareness as _t, encodeAwarenessUpdate as Pe, removeAwarenessStates as Mt, applyAwarenessUpdate as $t } from "y-protocols/awareness";
|
|
36
|
+
import { writeUpdate as Ft, writeSyncStep1 as Bt, readSyncMessage as Vt } from "y-protocols/sync";
|
|
37
37
|
import * as K from "yaml";
|
|
38
38
|
import * as B 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 Kt = "image-bin";
|
|
@@ -45,8 +45,8 @@ S.env.INIT_TEMPLATE_PATH;
|
|
|
45
45
|
const Wt = 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
|
-
},
|
|
49
|
-
|
|
48
|
+
}, I = ut("pages-kit"), zt = v.sqlite.DATE.parse;
|
|
49
|
+
v.sqlite.DATE.parse = (t, o) => typeof t == "number" ? new Date(t) : zt(t, o);
|
|
50
50
|
const Y = new Jt({
|
|
51
51
|
dialect: "sqlite",
|
|
52
52
|
storage: Wt,
|
|
@@ -69,59 +69,59 @@ 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
|
},
|
|
86
86
|
{ sequelize: Y, tableName: "ProjectComponents", timestamps: !1 }
|
|
87
87
|
);
|
|
88
|
-
class
|
|
88
|
+
class F extends Be {
|
|
89
89
|
static async getProjectByIdOrSlug(o) {
|
|
90
|
-
return
|
|
90
|
+
return F.findOne({
|
|
91
91
|
where: {
|
|
92
92
|
[Ht.or]: [{ id: o }, { slug: o }]
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
F.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
123
|
relatedBlocklets: {
|
|
124
|
-
type:
|
|
124
|
+
type: v.JSON,
|
|
125
125
|
allowNull: !1,
|
|
126
126
|
defaultValue: {},
|
|
127
127
|
get() {
|
|
@@ -134,7 +134,7 @@ $.init(
|
|
|
134
134
|
},
|
|
135
135
|
{ sequelize: Y, paranoid: !0 }
|
|
136
136
|
);
|
|
137
|
-
|
|
137
|
+
F.hasMany(ce, {
|
|
138
138
|
foreignKey: "projectId",
|
|
139
139
|
as: "components"
|
|
140
140
|
});
|
|
@@ -228,7 +228,7 @@ ${t}
|
|
|
228
228
|
if (c || (c = await Xe({ ensureLoaded: !1 })), (u = c == null ? void 0 : c.chunks) != null && u[m])
|
|
229
229
|
try {
|
|
230
230
|
const g = H(c.chunks[m], "utf-8");
|
|
231
|
-
return
|
|
231
|
+
return I.info("get chunk from local file system", m), { contents: g, loader: "tsx" };
|
|
232
232
|
} catch {
|
|
233
233
|
}
|
|
234
234
|
}
|
|
@@ -291,11 +291,11 @@ var ${t} = ${e ? "async" : ""} function () {
|
|
|
291
291
|
max: 100
|
|
292
292
|
}), Zt = 60 * 60, je = 60;
|
|
293
293
|
function es(t) {
|
|
294
|
-
|
|
294
|
+
I.info("clear preload components cache", { cacheKey: t }), W.delete(t);
|
|
295
295
|
}
|
|
296
296
|
function ts(t) {
|
|
297
297
|
for (const o of W.keys())
|
|
298
|
-
o.includes(t) && (
|
|
298
|
+
o.includes(t) && (I.info("clear preload components cache", { cacheKey: o }), es(o));
|
|
299
299
|
}
|
|
300
300
|
function ss({
|
|
301
301
|
mode: t,
|
|
@@ -328,13 +328,13 @@ async function no({
|
|
|
328
328
|
locale: s
|
|
329
329
|
});
|
|
330
330
|
if (t !== "draft" && g.useCache && W.has(y))
|
|
331
|
-
return
|
|
332
|
-
const
|
|
333
|
-
if (!
|
|
331
|
+
return I.info(`get preload component from cache: ${y}`), W.get(y);
|
|
332
|
+
const T = se({ state: e, componentId: g.componentId });
|
|
333
|
+
if (!T) return null;
|
|
334
334
|
const x = await os({
|
|
335
335
|
req: o,
|
|
336
336
|
state: e,
|
|
337
|
-
componentId:
|
|
337
|
+
componentId: T.id,
|
|
338
338
|
locale: s,
|
|
339
339
|
defaultLocale: a,
|
|
340
340
|
properties: g.properties
|
|
@@ -343,13 +343,13 @@ async function no({
|
|
|
343
343
|
const U = { instanceId: g.id, preload: x };
|
|
344
344
|
if (t !== "draft" && g.useCache) {
|
|
345
345
|
let D = Zt;
|
|
346
|
-
g.cacheDuration && (D = g.cacheDuration),
|
|
346
|
+
g.cacheDuration && (D = g.cacheDuration), I.info(`set preload component to cache(${D}s): ${y}`), W.set(y, U, {
|
|
347
347
|
ttl: D * 1e3
|
|
348
348
|
});
|
|
349
349
|
}
|
|
350
350
|
return U;
|
|
351
351
|
} catch (y) {
|
|
352
|
-
return
|
|
352
|
+
return I.error("get preload component error", { instanceId: g.id, componentId: g.componentId }, { error: y }), null;
|
|
353
353
|
}
|
|
354
354
|
})
|
|
355
355
|
)).filter((g) => !!g), c = Object.values(
|
|
@@ -358,7 +358,7 @@ async function no({
|
|
|
358
358
|
async function p() {
|
|
359
359
|
const g = await Promise.all(
|
|
360
360
|
c.map(async (y) => {
|
|
361
|
-
const
|
|
361
|
+
const T = ot({ componentId: y.component.id }), x = r === X.ESM ? {
|
|
362
362
|
module: r,
|
|
363
363
|
script: await xe(y.script, {
|
|
364
364
|
componentId: y.component.id,
|
|
@@ -370,10 +370,10 @@ async function no({
|
|
|
370
370
|
script: await xe(y.script, {
|
|
371
371
|
componentId: y.component.id,
|
|
372
372
|
module: r,
|
|
373
|
-
moduleName:
|
|
373
|
+
moduleName: T,
|
|
374
374
|
tailwind: t !== "draft"
|
|
375
375
|
}),
|
|
376
|
-
moduleName:
|
|
376
|
+
moduleName: T
|
|
377
377
|
};
|
|
378
378
|
return [y.component.id, { component: y.component, script: x }];
|
|
379
379
|
})
|
|
@@ -431,7 +431,7 @@ async function Ge({
|
|
|
431
431
|
const p = await as({ ...a, req: t });
|
|
432
432
|
p != null && p.props && Object.assign(c.props, p.props);
|
|
433
433
|
} catch (p) {
|
|
434
|
-
|
|
434
|
+
I.error("preload data at server side error", { componentId: s, name: a.component.name }, { error: p });
|
|
435
435
|
}
|
|
436
436
|
return await Promise.all(
|
|
437
437
|
Object.entries(i).map(async ([p, u]) => {
|
|
@@ -538,13 +538,13 @@ export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
|
538
538
|
// NOTE: do not return logger.xxx result, it will cause memory leak
|
|
539
539
|
// eslint-disable-next-line prettier/prettier
|
|
540
540
|
log: (...a) => {
|
|
541
|
-
|
|
541
|
+
I.info(...a);
|
|
542
542
|
},
|
|
543
543
|
warn: (...a) => {
|
|
544
|
-
|
|
544
|
+
I.warn(...a);
|
|
545
545
|
},
|
|
546
546
|
error: (...a) => {
|
|
547
|
-
|
|
547
|
+
I.error(...a);
|
|
548
548
|
}
|
|
549
549
|
},
|
|
550
550
|
getComponentMountPoint: st,
|
|
@@ -603,7 +603,7 @@ const is = ae(
|
|
|
603
603
|
functionName: `get${o}SchemaWrapper`
|
|
604
604
|
});
|
|
605
605
|
} catch (n) {
|
|
606
|
-
return
|
|
606
|
+
return I.error(`获取 ${o} 失败`, { componentId: e, error: n }), null;
|
|
607
607
|
}
|
|
608
608
|
return null;
|
|
609
609
|
},
|
|
@@ -617,7 +617,7 @@ const is = ae(
|
|
|
617
617
|
ttl: 1e3 * 60 * 60
|
|
618
618
|
}
|
|
619
619
|
}
|
|
620
|
-
), cs = "z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o", ke = "page", fe = "trigger-reload-project-resource", Je = cs, ls = "z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV", { uploadToMediaKit: ps } = require("@blocklet/uploader-server"), De = kt("abcdefghijklmnopqrstuvwxyz0123456789", 16), Se = /^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/, z = /mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i, Ne = /mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi, us = 1e4, ds = 3e4, q = 0, ue = 1, ms = 0, fs = 1, ge = S, Q =
|
|
620
|
+
), cs = "z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o", ke = "page", fe = "trigger-reload-project-resource", Je = cs, ls = "z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV", { uploadToMediaKit: ps } = require("@blocklet/uploader-server"), De = kt("abcdefghijklmnopqrstuvwxyz0123456789", 16), Se = /^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/, z = /mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i, Ne = /mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi, us = 1e4, ds = 3e4, q = 0, ue = 1, ms = 0, fs = 1, ge = S, Q = A(process.env.BLOCKLET_DATA_DIR, "site-state"), ao = ["production", "draft"], io = ["production"];
|
|
621
621
|
function He(t) {
|
|
622
622
|
return (t == null ? void 0 : t.replace(/\//g, "|")) || "";
|
|
623
623
|
}
|
|
@@ -657,7 +657,7 @@ const _ = class _ extends B.Doc {
|
|
|
657
657
|
});
|
|
658
658
|
P(this, "updateHandler", (e) => {
|
|
659
659
|
const s = C.createEncoder();
|
|
660
|
-
C.writeVarUint(s, q),
|
|
660
|
+
C.writeVarUint(s, q), Ft(s, e);
|
|
661
661
|
const n = C.toUint8Array(s);
|
|
662
662
|
this.conns.forEach((r, l) => this.send(l, n));
|
|
663
663
|
});
|
|
@@ -699,8 +699,8 @@ const _ = class _ extends B.Doc {
|
|
|
699
699
|
}
|
|
700
700
|
e.close();
|
|
701
701
|
});
|
|
702
|
-
P(this, "autoSave",
|
|
703
|
-
|
|
702
|
+
P(this, "autoSave", Fe(() => {
|
|
703
|
+
$(L(this.draftYjsFilePath), { recursive: !0 }), te(this.draftYjsFilePath, B.encodeStateAsUpdate(this));
|
|
704
704
|
}, us));
|
|
705
705
|
P(this, "save", ({ flush: e = !1 } = {}) => {
|
|
706
706
|
this.autoSave(), e && this.autoSave.flush();
|
|
@@ -768,19 +768,19 @@ const _ = class _ extends B.Doc {
|
|
|
768
768
|
C.writeVarUint(n, q), Vt(r, n, this, null), C.length(n) > 1 && (this.ensureDataStructure(), this.send(e, C.toUint8Array(n)));
|
|
769
769
|
break;
|
|
770
770
|
case ue: {
|
|
771
|
-
|
|
771
|
+
$t(this.awareness, pe.readVarUint8Array(r), e);
|
|
772
772
|
break;
|
|
773
773
|
}
|
|
774
774
|
default:
|
|
775
|
-
|
|
775
|
+
I.warn(`Unsupported messageType ${l}`);
|
|
776
776
|
}
|
|
777
777
|
} catch (n) {
|
|
778
|
-
|
|
778
|
+
I.error(n);
|
|
779
779
|
}
|
|
780
780
|
this.save();
|
|
781
781
|
});
|
|
782
|
-
this.options = e, V(this.draftYjsFilePath) && B.applyUpdate(this, H(this.draftYjsFilePath)), this.syncedStore =
|
|
783
|
-
|
|
782
|
+
this.options = e, V(this.draftYjsFilePath) && B.applyUpdate(this, H(this.draftYjsFilePath)), this.syncedStore = Tt(
|
|
783
|
+
vt(
|
|
784
784
|
{ pages: {}, pageIds: [], components: {}, supportedLocales: [], config: {}, resources: {} },
|
|
785
785
|
this
|
|
786
786
|
)
|
|
@@ -791,10 +791,10 @@ const _ = class _ extends B.Doc {
|
|
|
791
791
|
if (!e)
|
|
792
792
|
throw new Error("Should provide project context");
|
|
793
793
|
try {
|
|
794
|
-
const s =
|
|
795
|
-
|
|
794
|
+
const s = A(Q, e), n = A(Q, `@del-${e}`);
|
|
795
|
+
Te(s, n);
|
|
796
796
|
} catch (s) {
|
|
797
|
-
|
|
797
|
+
I.error("Failed to safe delete project state dir:", s);
|
|
798
798
|
}
|
|
799
799
|
}
|
|
800
800
|
static get projectIds() {
|
|
@@ -812,7 +812,7 @@ const _ = class _ extends B.Doc {
|
|
|
812
812
|
throw new Error("Should provide project context");
|
|
813
813
|
let s = this.sharedInstances.get(e);
|
|
814
814
|
return s || (s = new _({
|
|
815
|
-
path:
|
|
815
|
+
path: A(Q, e)
|
|
816
816
|
}), this.sharedInstances.set(e, s), s);
|
|
817
817
|
}
|
|
818
818
|
destroy() {
|
|
@@ -839,7 +839,7 @@ const _ = class _ extends B.Doc {
|
|
|
839
839
|
});
|
|
840
840
|
}
|
|
841
841
|
get draftYjsFilePath() {
|
|
842
|
-
return
|
|
842
|
+
return A(this.options.path, "draft.yjs");
|
|
843
843
|
}
|
|
844
844
|
async getState(e) {
|
|
845
845
|
var s, n, r, l;
|
|
@@ -861,11 +861,11 @@ const _ = class _ extends B.Doc {
|
|
|
861
861
|
...(y = (g = this.states[e]) == null ? void 0 : g.resources) == null ? void 0 : y.components
|
|
862
862
|
};
|
|
863
863
|
else {
|
|
864
|
-
const
|
|
864
|
+
const T = J(this.options.path), x = await F.findByPk(T);
|
|
865
865
|
if (x != null && x.useAllResources)
|
|
866
866
|
p = c;
|
|
867
867
|
else {
|
|
868
|
-
const D = (await ce.findAll({ where: { projectId:
|
|
868
|
+
const D = (await ce.findAll({ where: { projectId: T } })).map((E) => E.componentId);
|
|
869
869
|
p = Object.fromEntries(
|
|
870
870
|
Object.entries(c || {}).filter(([E]) => D.includes(E))
|
|
871
871
|
);
|
|
@@ -877,15 +877,15 @@ const _ = class _ extends B.Doc {
|
|
|
877
877
|
}
|
|
878
878
|
async setState(e, s) {
|
|
879
879
|
const n = await ws(s, { exportAssets: !1, includeResources: !0 }), r = this.getPublishDir(e);
|
|
880
|
-
|
|
880
|
+
$(L(r), { recursive: !0 }), $e(r, { force: !0, recursive: !0 }), Te(n, r), this.states[e] = s;
|
|
881
881
|
}
|
|
882
882
|
getPublishDir(e) {
|
|
883
|
-
return
|
|
883
|
+
return A(this.options.path, e);
|
|
884
884
|
}
|
|
885
885
|
static async pageUrlMap(e) {
|
|
886
886
|
const { projectIds: s } = this, n = {};
|
|
887
887
|
for (const r of s) {
|
|
888
|
-
const l = await
|
|
888
|
+
const l = await F.findByPk(r);
|
|
889
889
|
if (!l) continue;
|
|
890
890
|
const a = await _.shared(r).getState(e), i = xt(
|
|
891
891
|
S.env.languages.map((c) => c.code),
|
|
@@ -917,8 +917,8 @@ const _ = class _ extends B.Doc {
|
|
|
917
917
|
mainPage: !0
|
|
918
918
|
};
|
|
919
919
|
for (const y of i) {
|
|
920
|
-
const
|
|
921
|
-
n[M("/", y, r, u)] =
|
|
920
|
+
const T = { ...g, locale: y };
|
|
921
|
+
n[M("/", y, r, u)] = T, m && (n[M("/", y, m, u)] = T);
|
|
922
922
|
}
|
|
923
923
|
}
|
|
924
924
|
}
|
|
@@ -936,7 +936,7 @@ P(_, "sharedInstances", new he({
|
|
|
936
936
|
}));
|
|
937
937
|
let oe = _;
|
|
938
938
|
function Ke() {
|
|
939
|
-
return bt(
|
|
939
|
+
return bt(A(S.env.dataDir, "tmp-"));
|
|
940
940
|
}
|
|
941
941
|
function ne(t, o, e = []) {
|
|
942
942
|
return Array.isArray(t) ? t.flatMap((s, n) => ne(s, o, [...e, n])) : typeof t == "object" ? t === null ? [] : Object.entries(t).flatMap(([s, n]) => ne(n, o, [...e, s])) : o(t) ? [e] : [];
|
|
@@ -948,10 +948,18 @@ async function hs(t, o, e) {
|
|
|
948
948
|
if (!t || !V(t) || !Z(t).isFile())
|
|
949
949
|
return null;
|
|
950
950
|
let s = e[t];
|
|
951
|
-
return s || (s = (async () =>
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
951
|
+
return s || (s = (async () => {
|
|
952
|
+
var n;
|
|
953
|
+
try {
|
|
954
|
+
const r = (n = await ps({
|
|
955
|
+
filePath: t,
|
|
956
|
+
fileName: o
|
|
957
|
+
})) == null ? void 0 : n.data;
|
|
958
|
+
return r == null ? void 0 : r.filename;
|
|
959
|
+
} catch (r) {
|
|
960
|
+
return I.error(`Failed to upload asset ${t}:`, r), null;
|
|
961
|
+
}
|
|
962
|
+
})(), e[t] = s), s;
|
|
955
963
|
}
|
|
956
964
|
const ys = async (t, o) => {
|
|
957
965
|
const e = J(t), s = await yt({
|
|
@@ -969,9 +977,9 @@ const ys = async (t, o) => {
|
|
|
969
977
|
await Promise.all(
|
|
970
978
|
t.map(async (e) => {
|
|
971
979
|
try {
|
|
972
|
-
await ys(e,
|
|
980
|
+
await ys(e, A(o, J(e)));
|
|
973
981
|
} catch (s) {
|
|
974
|
-
|
|
982
|
+
I.error(`Failed to export assets: ${e}, ${s}`);
|
|
975
983
|
}
|
|
976
984
|
})
|
|
977
985
|
);
|
|
@@ -980,8 +988,8 @@ function We(t) {
|
|
|
980
988
|
return Se.test(t) ? [t] : z.test(t) ? (Ne.lastIndex = 0, Array.from(t.matchAll(Ne)).map((e) => e[1]).filter((e) => !!e)) : [];
|
|
981
989
|
}
|
|
982
990
|
async function de(t, o, e) {
|
|
983
|
-
const { getFilename: s, exportAssets: n } = e, r =
|
|
984
|
-
if (
|
|
991
|
+
const { getFilename: s, exportAssets: n } = e, r = A(o, s(t));
|
|
992
|
+
if ($(L(r), { recursive: !0 }), te(r, K.stringify(t)), n) {
|
|
985
993
|
const a = ne(
|
|
986
994
|
t,
|
|
987
995
|
(i) => typeof i == "string" && (Se.test(i) || z.test(i))
|
|
@@ -1006,16 +1014,16 @@ async function Re(t, o, e) {
|
|
|
1006
1014
|
try {
|
|
1007
1015
|
const c = ye(t, i), p = We(c);
|
|
1008
1016
|
for (const u of p) {
|
|
1009
|
-
const m = J(u), g = e.getFilePath(u, i), y = g ? `${g}:${m}` : m,
|
|
1010
|
-
if (
|
|
1011
|
-
z.test(c) ||
|
|
1017
|
+
const m = J(u), g = e.getFilePath(u, i), y = g ? `${g}:${m}` : m, T = Le.get(y);
|
|
1018
|
+
if (T) {
|
|
1019
|
+
z.test(c) || ve(t, i, T);
|
|
1012
1020
|
return;
|
|
1013
1021
|
}
|
|
1014
1022
|
const x = await hs(g, m, o);
|
|
1015
|
-
x && (z.test(c) ||
|
|
1023
|
+
x && (z.test(c) || ve(t, i, x), Le.set(y, x));
|
|
1016
1024
|
}
|
|
1017
1025
|
} catch (c) {
|
|
1018
|
-
|
|
1026
|
+
I.error(`Failed to process upload for path ${i.join(".")}:`, c.message || c.reason);
|
|
1019
1027
|
}
|
|
1020
1028
|
})
|
|
1021
1029
|
), l = await Promise.allSettled(r);
|
|
@@ -1028,7 +1036,7 @@ async function ws(t, {
|
|
|
1028
1036
|
rawConfig: n,
|
|
1029
1037
|
includeResources: r = !1
|
|
1030
1038
|
} = {}) {
|
|
1031
|
-
var U, D, h, E, b,
|
|
1039
|
+
var U, D, h, E, b, O;
|
|
1032
1040
|
const l = e === "all" ? t.pageIds : e, a = Es({
|
|
1033
1041
|
state: t,
|
|
1034
1042
|
pageIds: l,
|
|
@@ -1073,10 +1081,10 @@ async function ws(t, {
|
|
|
1073
1081
|
};
|
|
1074
1082
|
})
|
|
1075
1083
|
)
|
|
1076
|
-
), u = Ke(), m =
|
|
1077
|
-
|
|
1078
|
-
const g =
|
|
1079
|
-
|
|
1084
|
+
), u = Ke(), m = A(u, "pages");
|
|
1085
|
+
$(m, { recursive: !0 });
|
|
1086
|
+
const g = A(u, "components");
|
|
1087
|
+
$(g, { recursive: !0 });
|
|
1080
1088
|
for (const { locale: f, slug: d, page: w } of p)
|
|
1081
1089
|
await de(w, m, {
|
|
1082
1090
|
getFilename: () => `${He(d) || "index"}.${f}.yml`,
|
|
@@ -1089,9 +1097,9 @@ async function ws(t, {
|
|
|
1089
1097
|
exportAssets: o
|
|
1090
1098
|
});
|
|
1091
1099
|
}
|
|
1092
|
-
const y =
|
|
1093
|
-
|
|
1094
|
-
const
|
|
1100
|
+
const y = A(u, ".blocklet/pages/pages.config.yml");
|
|
1101
|
+
$(L(y), { recursive: !0 });
|
|
1102
|
+
const T = {
|
|
1095
1103
|
pages: R(
|
|
1096
1104
|
l.map((f) => {
|
|
1097
1105
|
const d = t.pages[f];
|
|
@@ -1124,13 +1132,13 @@ async function ws(t, {
|
|
|
1124
1132
|
supportedLocales: t.supportedLocales,
|
|
1125
1133
|
config: t.config
|
|
1126
1134
|
};
|
|
1127
|
-
te(y, K.stringify(
|
|
1128
|
-
const x =
|
|
1135
|
+
te(y, K.stringify(T));
|
|
1136
|
+
const x = A(u, "config.source.json");
|
|
1129
1137
|
if (n && te(x, JSON.stringify(n)), r) {
|
|
1130
|
-
const f =
|
|
1131
|
-
|
|
1138
|
+
const f = A(u, "resources"), d = A(f, "components");
|
|
1139
|
+
$(d, { recursive: !0 });
|
|
1132
1140
|
for (const w of Object.keys(((h = t == null ? void 0 : t.resources) == null ? void 0 : h.components) ?? {})) {
|
|
1133
|
-
const k = (
|
|
1141
|
+
const k = (O = (b = (E = t.resources) == null ? void 0 : E.components) == null ? void 0 : b[w]) == null ? void 0 : O.component;
|
|
1134
1142
|
k && await de(k, d, {
|
|
1135
1143
|
getFilename: (N) => `${N.name || "unnamed"}.${N.id}.yml`,
|
|
1136
1144
|
exportAssets: o
|
|
@@ -1146,21 +1154,21 @@ async function ze(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1146
1154
|
let s, n = !1;
|
|
1147
1155
|
try {
|
|
1148
1156
|
Z(t).isDirectory() ? s = t : /\.(tgz|gz|tar)$/.test(t) && (n = !0, s = Ke(), await Rt({ file: t, C: s }));
|
|
1149
|
-
const i = me("**/.blocklet/pages/pages.config.yml", { cwd: s, absolute: !0 }).at(0), c = i &&
|
|
1157
|
+
const i = me("**/.blocklet/pages/pages.config.yml", { cwd: s, absolute: !0 }).at(0), c = i && A(L(i), "../../pages"), p = i && A(L(i), "../../components"), u = i && A(L(i), "../../chunks");
|
|
1150
1158
|
if (!i)
|
|
1151
1159
|
return null;
|
|
1152
1160
|
const m = K.parse(H(i).toString()), g = (h, E, b) => {
|
|
1153
|
-
let
|
|
1154
|
-
return (!V(
|
|
1161
|
+
let O = A(h, `${E}${b ? `.${b}` : ""}.yml`);
|
|
1162
|
+
return (!V(O) || !Z(O).isFile()) && (O = A(h, E, `index${b ? `.${b}` : ""}.yml`), !V(O) || !Z(O)) ? null : K.parse(H(O).toString());
|
|
1155
1163
|
}, y = (h, E) => {
|
|
1156
1164
|
try {
|
|
1157
1165
|
const b = me(`*.${E}.yml`, { cwd: h, absolute: !0 })[0];
|
|
1158
1166
|
return b ? K.parse(H(b).toString()) : null;
|
|
1159
1167
|
} catch (b) {
|
|
1160
|
-
|
|
1168
|
+
I.error("parse component error", b);
|
|
1161
1169
|
}
|
|
1162
1170
|
return null;
|
|
1163
|
-
},
|
|
1171
|
+
}, T = R(
|
|
1164
1172
|
m.pages.map(({ slug: h }) => {
|
|
1165
1173
|
var f;
|
|
1166
1174
|
const E = R(
|
|
@@ -1174,7 +1182,7 @@ async function ze(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1174
1182
|
), b = (f = E[0]) == null ? void 0 : f.page;
|
|
1175
1183
|
if (!b)
|
|
1176
1184
|
return null;
|
|
1177
|
-
const
|
|
1185
|
+
const O = b.sections.map((d) => {
|
|
1178
1186
|
const w = d.id || De();
|
|
1179
1187
|
return {
|
|
1180
1188
|
id: w,
|
|
@@ -1202,36 +1210,36 @@ async function ze(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1202
1210
|
isPublic: b.isPublic ?? !0,
|
|
1203
1211
|
isTemplate: b.isTemplate ?? !1,
|
|
1204
1212
|
slug: h,
|
|
1205
|
-
sections: Object.fromEntries(
|
|
1206
|
-
sectionIds:
|
|
1213
|
+
sections: Object.fromEntries(O.map((d) => [d.id, d])),
|
|
1214
|
+
sectionIds: O.map((d) => d.id),
|
|
1207
1215
|
locales: Object.fromEntries(E.map(({ locale: d, page: w }) => [d, w.meta]))
|
|
1208
1216
|
};
|
|
1209
1217
|
})
|
|
1210
1218
|
), x = p ? R(((r = m.components) == null ? void 0 : r.map(({ id: h }) => y(p, h))) ?? []) : [];
|
|
1211
1219
|
if (o) {
|
|
1212
1220
|
const h = (...E) => {
|
|
1213
|
-
|
|
1221
|
+
I.info(`[${n ? J(t) : J(A(t, "../../../../"))}] importAssets:`, ...E);
|
|
1214
1222
|
};
|
|
1215
1223
|
try {
|
|
1216
1224
|
h("wait image-bin api ready"), await Ut({
|
|
1217
1225
|
resources: [`${ht(Kt)}/api/sdk/uploads`],
|
|
1218
|
-
validateStatus: (
|
|
1226
|
+
validateStatus: (O) => O >= 200 && O <= 500
|
|
1219
1227
|
}), h("image-bin api is ready");
|
|
1220
1228
|
const E = {}, b = {};
|
|
1221
1229
|
h("start to upload assets"), await Promise.allSettled([
|
|
1222
1230
|
Re(x, E, {
|
|
1223
|
-
getFilePath: (
|
|
1224
|
-
onFinish: (
|
|
1225
|
-
h(`upload ${
|
|
1231
|
+
getFilePath: (O) => p && A(p, O),
|
|
1232
|
+
onFinish: (O) => {
|
|
1233
|
+
h(`upload ${O.length} component assets`);
|
|
1226
1234
|
}
|
|
1227
1235
|
}),
|
|
1228
|
-
Re(
|
|
1229
|
-
getFilePath: (
|
|
1230
|
-
const d = ye(
|
|
1231
|
-
return c &&
|
|
1236
|
+
Re(T, b, {
|
|
1237
|
+
getFilePath: (O, f) => {
|
|
1238
|
+
const d = ye(T, f.slice(0, 1));
|
|
1239
|
+
return c && A(c, L(d.slug), O);
|
|
1232
1240
|
},
|
|
1233
|
-
onFinish: (
|
|
1234
|
-
h(`upload ${
|
|
1241
|
+
onFinish: (O) => {
|
|
1242
|
+
h(`upload ${O.length} page assets`);
|
|
1235
1243
|
}
|
|
1236
1244
|
})
|
|
1237
1245
|
]), h("upload assets done"), global.gc && global.gc();
|
|
@@ -1241,30 +1249,30 @@ async function ze(t, { importAssets: o, includeResources: e } = {}) {
|
|
|
1241
1249
|
}
|
|
1242
1250
|
const U = {};
|
|
1243
1251
|
if (e) {
|
|
1244
|
-
const h = i &&
|
|
1252
|
+
const h = i && A(L(i), "../../resources/components"), E = R(
|
|
1245
1253
|
((a = (l = m.resources) == null ? void 0 : l.components) == null ? void 0 : a.map(({ id: b }) => y(h, b))) ?? []
|
|
1246
1254
|
);
|
|
1247
1255
|
E.length > 0 && (U.components = Object.fromEntries(
|
|
1248
|
-
E.map((b,
|
|
1256
|
+
E.map((b, O) => [b.id, { index: O, component: b }])
|
|
1249
1257
|
));
|
|
1250
1258
|
}
|
|
1251
1259
|
const D = {};
|
|
1252
1260
|
if (u && V(u)) {
|
|
1253
1261
|
const h = Et(u);
|
|
1254
1262
|
for (const E of h)
|
|
1255
|
-
D[E] =
|
|
1263
|
+
D[E] = A(u, E);
|
|
1256
1264
|
}
|
|
1257
1265
|
return {
|
|
1258
1266
|
supportedLocales: m.supportedLocales,
|
|
1259
|
-
pageIds:
|
|
1267
|
+
pageIds: T.map((h) => h.id),
|
|
1260
1268
|
components: Object.fromEntries(x.map((h, E) => [h.id, { index: E, data: h }])),
|
|
1261
|
-
pages: Object.fromEntries(
|
|
1269
|
+
pages: Object.fromEntries(T.map((h) => [h.id, h])),
|
|
1262
1270
|
config: m.config || {},
|
|
1263
1271
|
resources: U,
|
|
1264
1272
|
chunks: D
|
|
1265
1273
|
};
|
|
1266
1274
|
} finally {
|
|
1267
|
-
n && s &&
|
|
1275
|
+
n && s && $e(s, { force: !0, recursive: !0 });
|
|
1268
1276
|
}
|
|
1269
1277
|
}
|
|
1270
1278
|
async function Ue(t, o, {
|
|
@@ -1276,7 +1284,7 @@ async function Ue(t, o, {
|
|
|
1276
1284
|
try {
|
|
1277
1285
|
r && ts(r);
|
|
1278
1286
|
} catch (p) {
|
|
1279
|
-
|
|
1287
|
+
I.error("clear preload page cache error", { error: p });
|
|
1280
1288
|
}
|
|
1281
1289
|
const { pageIds: l, pages: a, supportedLocales: i } = t;
|
|
1282
1290
|
for (const p of e ?? l) {
|
|
@@ -1335,7 +1343,7 @@ const Ye = ae(
|
|
|
1335
1343
|
});
|
|
1336
1344
|
}));
|
|
1337
1345
|
} catch (s) {
|
|
1338
|
-
|
|
1346
|
+
I.error("checkPropertiesFromCode error", { componentId: t.id, name: t.name }, { error: s });
|
|
1339
1347
|
}
|
|
1340
1348
|
}
|
|
1341
1349
|
return t;
|
|
@@ -1423,10 +1431,10 @@ function qe() {
|
|
|
1423
1431
|
})(), re;
|
|
1424
1432
|
}
|
|
1425
1433
|
function bs(t) {
|
|
1426
|
-
const o =
|
|
1434
|
+
const o = Fe(
|
|
1427
1435
|
async () => {
|
|
1428
1436
|
await qe().catch((e) => {
|
|
1429
|
-
|
|
1437
|
+
I.error("load resource states error", { error: e });
|
|
1430
1438
|
}), await (t == null ? void 0 : t({
|
|
1431
1439
|
states: G,
|
|
1432
1440
|
pages: we,
|
|
@@ -1435,6 +1443,7 @@ function bs(t) {
|
|
|
1435
1443
|
}));
|
|
1436
1444
|
},
|
|
1437
1445
|
3e3,
|
|
1446
|
+
// 3s
|
|
1438
1447
|
{ leading: !1, trailing: !0 }
|
|
1439
1448
|
);
|
|
1440
1449
|
return o(), S.events.on(S.Events.componentAdded, o), S.events.on(S.Events.componentRemoved, o), S.events.on(S.Events.componentStarted, o), S.events.on(S.Events.componentStopped, o), S.events.on(S.Events.componentUpdated, o), S.events.on(fe, o), () => {
|
|
@@ -1446,28 +1455,37 @@ var _e;
|
|
|
1446
1455
|
(_e = ee[Qe]) == null || _e.call(ee);
|
|
1447
1456
|
ee[Qe] = bs(async ({ pages: t, components: o }) => {
|
|
1448
1457
|
const { projectIds: e } = oe;
|
|
1449
|
-
await Promise.
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1458
|
+
I.info(`start update resource states projects(${e.length})`, e), await Promise.race([
|
|
1459
|
+
Promise.all(
|
|
1460
|
+
e.map(async (s) => {
|
|
1461
|
+
const n = oe.shared(s);
|
|
1462
|
+
n.syncedStore.resources.pages = t;
|
|
1463
|
+
const r = await F.findByPk(s);
|
|
1464
|
+
if (r != null && r.useAllResources)
|
|
1465
|
+
n.syncedStore.resources.components = o;
|
|
1466
|
+
else {
|
|
1467
|
+
const a = (await ce.findAll({ where: { projectId: s } })).map((c) => c.componentId), i = Object.fromEntries(
|
|
1468
|
+
Object.entries(o || {}).filter(([c]) => a.includes(c))
|
|
1469
|
+
);
|
|
1470
|
+
n.syncedStore.resources.components = i;
|
|
1471
|
+
}
|
|
1472
|
+
I.info(`update [${s}] resource states:`, {
|
|
1473
|
+
pages: Object.keys(n.syncedStore.resources.pages || {}).length,
|
|
1474
|
+
components: Object.keys(n.syncedStore.resources.components || {}).length
|
|
1475
|
+
});
|
|
1476
|
+
})
|
|
1477
|
+
),
|
|
1478
|
+
new Promise((s, n) => {
|
|
1479
|
+
setTimeout(() => {
|
|
1480
|
+
n(new Error("timeout to update resource states"));
|
|
1481
|
+
}, 30 * 1e3);
|
|
1466
1482
|
})
|
|
1467
|
-
)
|
|
1483
|
+
]).catch((s) => {
|
|
1484
|
+
I.error("update resource states failed:", s);
|
|
1485
|
+
});
|
|
1468
1486
|
});
|
|
1469
1487
|
async function co() {
|
|
1470
|
-
|
|
1488
|
+
I.info("trigger reload all project resource"), S.events.emit(fe);
|
|
1471
1489
|
}
|
|
1472
1490
|
async function Xe({
|
|
1473
1491
|
ensureLoaded: t = !0
|
|
@@ -1477,7 +1495,7 @@ async function Xe({
|
|
|
1477
1495
|
export {
|
|
1478
1496
|
Je as C,
|
|
1479
1497
|
je as G,
|
|
1480
|
-
|
|
1498
|
+
F as P,
|
|
1481
1499
|
ke as R,
|
|
1482
1500
|
oe as S,
|
|
1483
1501
|
Xe as a,
|
|
@@ -1491,7 +1509,7 @@ export {
|
|
|
1491
1509
|
so as i,
|
|
1492
1510
|
se as j,
|
|
1493
1511
|
ro as k,
|
|
1494
|
-
|
|
1512
|
+
I as l,
|
|
1495
1513
|
is as m,
|
|
1496
1514
|
De as n,
|
|
1497
1515
|
Q as o,
|
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-4UkWXe7F.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/project-html.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { b as H, l as P } from "./_chunks/site-state-
|
|
1
|
+
import { b as H, l as P } from "./_chunks/site-state-4UkWXe7F.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";
|
|
5
5
|
import { getComponentMountPoint as Q } from "@blocklet/sdk/lib/component";
|
|
6
|
-
import
|
|
6
|
+
import a, { getBlockletJs as z } from "@blocklet/sdk/lib/config";
|
|
7
7
|
import * as I from "cheerio";
|
|
8
8
|
import { Router as V } from "express";
|
|
9
9
|
import { readFileSync as j } from "fs";
|
|
10
10
|
import X from "mustache";
|
|
11
11
|
import { resolve as U } from "path";
|
|
12
12
|
import { withQuery as Y, joinURL as M } from "ufo";
|
|
13
|
-
const Z = ["/assets/"], D = () => [!0, "true"].includes(
|
|
13
|
+
const Z = ["/assets/"], D = () => [!0, "true"].includes(a.env.preferences.allowCrawler);
|
|
14
14
|
function O() {
|
|
15
15
|
D() ? W({
|
|
16
16
|
time: "30 30 */12 * * *",
|
|
@@ -18,19 +18,19 @@ function O() {
|
|
|
18
18
|
}) : N();
|
|
19
19
|
}
|
|
20
20
|
O();
|
|
21
|
-
|
|
21
|
+
a.events.on(a.Events.envUpdate, O);
|
|
22
22
|
function me({
|
|
23
23
|
app: c,
|
|
24
|
-
viteDevServer:
|
|
24
|
+
viteDevServer: h,
|
|
25
25
|
// projectId,
|
|
26
26
|
state: n
|
|
27
27
|
}) {
|
|
28
28
|
let C;
|
|
29
|
-
if (
|
|
29
|
+
if (h) {
|
|
30
30
|
const t = j(U(process.cwd(), "./index.html"), "utf-8");
|
|
31
31
|
c.use(async (b, $, y) => {
|
|
32
32
|
const _ = b.originalUrl;
|
|
33
|
-
C = await
|
|
33
|
+
C = await h.transformIndexHtml(_, t), y();
|
|
34
34
|
});
|
|
35
35
|
} else
|
|
36
36
|
C = j(U(process.env.BLOCKLET_APP_DIR, "dist/index.html"), "utf-8");
|
|
@@ -42,34 +42,37 @@ function me({
|
|
|
42
42
|
})
|
|
43
43
|
), k.get("/:path(*)?", async (t, b, $) => {
|
|
44
44
|
var T, S, L;
|
|
45
|
-
if (Z.some((r) =>
|
|
45
|
+
if (Z.some((r) => {
|
|
46
|
+
var i;
|
|
47
|
+
return (i = t.path) == null ? void 0 : i.startsWith(r);
|
|
48
|
+
})) {
|
|
46
49
|
$();
|
|
47
50
|
return;
|
|
48
51
|
}
|
|
49
52
|
const y = performance.now(), _ = () => Math.round(performance.now() - y), R = "production";
|
|
50
|
-
let e,
|
|
53
|
+
let e, p, f = C;
|
|
51
54
|
if (t.path.startsWith("/pages")) {
|
|
52
|
-
const r = t.params.lang,
|
|
53
|
-
let
|
|
54
|
-
if ((!
|
|
55
|
-
const
|
|
55
|
+
const r = t.params.lang, i = t.cookies.nf_lang, g = /* @__PURE__ */ new Set([...a.env.languages.map((u) => u.code)]);
|
|
56
|
+
let d = (r && g.has(r) ? r : void 0) || (g.has(i) ? i : void 0) || [...g][0];
|
|
57
|
+
if ((!d || !((T = n.supportedLocales) != null && T.find((u) => u.locale === d))) && (d = ((L = (S = n.supportedLocales) == null ? void 0 : S[0]) == null ? void 0 : L.locale) || ""), d) {
|
|
58
|
+
const u = [];
|
|
56
59
|
Object.values(n.pages).forEach((l) => {
|
|
57
60
|
const v = Object.values((l == null ? void 0 : l.sections) ?? {}).filter(
|
|
58
|
-
(
|
|
61
|
+
(s) => {
|
|
59
62
|
var w;
|
|
60
|
-
return
|
|
63
|
+
return s.component === "custom-component" && ((w = s.config) == null ? void 0 : w.componentId);
|
|
61
64
|
}
|
|
62
|
-
).map((
|
|
65
|
+
).map((s) => {
|
|
63
66
|
var w, A;
|
|
64
67
|
return {
|
|
65
|
-
id:
|
|
66
|
-
componentId:
|
|
67
|
-
useCache:
|
|
68
|
-
cacheDuration:
|
|
69
|
-
properties: (A = (w =
|
|
68
|
+
id: s.id,
|
|
69
|
+
componentId: s.config.componentId,
|
|
70
|
+
useCache: s.config.useCache,
|
|
71
|
+
cacheDuration: s.config.cacheDuration,
|
|
72
|
+
properties: (A = (w = s.locales) == null ? void 0 : w[d]) == null ? void 0 : A.properties
|
|
70
73
|
};
|
|
71
74
|
});
|
|
72
|
-
|
|
75
|
+
u.push(...v);
|
|
73
76
|
});
|
|
74
77
|
const B = new Promise((l, v) => {
|
|
75
78
|
setTimeout(() => {
|
|
@@ -83,11 +86,11 @@ function me({
|
|
|
83
86
|
mode: R,
|
|
84
87
|
req: t,
|
|
85
88
|
state: n,
|
|
86
|
-
locale:
|
|
87
|
-
instances:
|
|
89
|
+
locale: d,
|
|
90
|
+
instances: u,
|
|
88
91
|
module: G.UMD_FN
|
|
89
92
|
}).then((l) => {
|
|
90
|
-
l && (
|
|
93
|
+
l && (p = K(l));
|
|
91
94
|
})
|
|
92
95
|
]);
|
|
93
96
|
} catch (l) {
|
|
@@ -96,20 +99,20 @@ function me({
|
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
101
|
try {
|
|
99
|
-
const r = (e == null ? void 0 : e.title) ||
|
|
102
|
+
const r = (e == null ? void 0 : e.title) || a.env.appName, i = (e == null ? void 0 : e.description) || a.env.appDescription, g = Y(M(a.env.appUrl, "/.well-known/service/blocklet/og.png"), {
|
|
100
103
|
title: r,
|
|
101
|
-
description:
|
|
104
|
+
description: i
|
|
102
105
|
});
|
|
103
|
-
|
|
106
|
+
f = X.render(C, {
|
|
104
107
|
ogTitle: r,
|
|
105
|
-
ogDescription:
|
|
108
|
+
ogDescription: i,
|
|
106
109
|
ogImage: F(e == null ? void 0 : e.image) || g,
|
|
107
110
|
pagesPublishedAt: (n == null ? void 0 : n.config.publishedAt) || (/* @__PURE__ */ new Date()).getTime()
|
|
108
111
|
});
|
|
109
112
|
} catch {
|
|
110
113
|
}
|
|
111
|
-
const o = n == null ? void 0 : n.config.fontFamily, x = t.query.mode === "draft" || t.url.includes("preview"),
|
|
112
|
-
|
|
114
|
+
const o = n == null ? void 0 : n.config.fontFamily, x = t.query.mode === "draft" || t.url.includes("preview"), m = I.load(f);
|
|
115
|
+
m("head").find("#injected-head-elements").replaceWith(`
|
|
113
116
|
${e != null && e.backgroundColor ? `<meta name="theme-color" content="${e.backgroundColor}" /><style>html,body,#app {background-color: ${e.backgroundColor} !important;}</style>` : ""}
|
|
114
117
|
${o != null && o.title ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${o.title}&display=swap">` : ""}
|
|
115
118
|
${o != null && o.description && (o == null ? void 0 : o.description) !== (o == null ? void 0 : o.title) ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${o.description}&display=swap">` : ""}
|
|
@@ -133,16 +136,16 @@ function me({
|
|
|
133
136
|
<\/script>` : ""}
|
|
134
137
|
`);
|
|
135
138
|
const E = z();
|
|
136
|
-
if (E &&
|
|
139
|
+
if (E && m('script[src="__blocklet__.js"]').replaceWith(`<script>${E}<\/script>`), p != null && p.html && m("head").find("#injected-html-elements").replaceWith(p.html), t.cachedHtml) {
|
|
137
140
|
const r = I.load(t.cachedHtml);
|
|
138
|
-
|
|
141
|
+
m("body").html(r("body").html() || "");
|
|
139
142
|
}
|
|
140
|
-
|
|
143
|
+
f = m.html(), b.send(f), P.info(`[html] render: ${t.path}, ${_()}ms`), m.root().children().remove(), f = null, e = null, p = null;
|
|
141
144
|
}), c.use(k);
|
|
142
145
|
}
|
|
143
146
|
function F(c) {
|
|
144
|
-
const
|
|
145
|
-
return
|
|
147
|
+
const h = Q("image-bin");
|
|
148
|
+
return h && c && !/^(https?:\/\/|\/)/.test(c) ? a.env.appUrl + M(h, "uploads", c) : c;
|
|
146
149
|
}
|
|
147
150
|
export {
|
|
148
151
|
me as default
|
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-4UkWXe7F.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-4UkWXe7F.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.42",
|
|
4
4
|
"description": "Pages Kit inner components library",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -82,8 +82,8 @@
|
|
|
82
82
|
"@blocklet/studio-ui": "^0.4.250",
|
|
83
83
|
"@blocklet/tracker": "^1.16.39",
|
|
84
84
|
"@blocklet/ui-react": "^2.12.19",
|
|
85
|
-
"@blocklet/uploader": "^0.1.
|
|
86
|
-
"@blocklet/uploader-server": "^0.1.
|
|
85
|
+
"@blocklet/uploader": "^0.1.72",
|
|
86
|
+
"@blocklet/uploader-server": "^0.1.87",
|
|
87
87
|
"@emotion/cache": "^11.13.1",
|
|
88
88
|
"@emotion/css": "^11.13.0",
|
|
89
89
|
"@emotion/react": "^11.13.0",
|
|
@@ -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.42",
|
|
206
|
+
"@blocklet/pages-kit-block-studio": "^0.4.42"
|
|
207
207
|
},
|
|
208
208
|
"devDependencies": {
|
|
209
209
|
"@trivago/prettier-plugin-sort-imports": "^5.2.1",
|