@blocklet/pages-kit-inner-components 0.4.58 → 0.4.60
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-C0hyEwRs.js → site-state-CsoZOwUe.js} +7 -7
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +3 -3
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/_chunks/{site-state-B5JbU9OF.js → site-state-BAO_o-xn.js} +10 -10
- package/lib/es/components.js +1 -1
- package/lib/es/project-html.js +40 -40
- package/lib/es/resources.js +1 -1
- package/lib/es/site-state.js +1 -1
- package/package.json +13 -13
|
@@ -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"),V=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),Ne=require("node-fetch"),x=require("ufo"),ie=require("crypto"),rt=require("@blocklet/logger"),at=require("@blocklet/pages-kit/utils/builtin"),Ue=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),be=require("@blocklet/sdk/lib/component"),it=require("autoprefixer"),ct=require("esbuild"),E=require("fs"),lt=require("postcss"),pt=require("tailwindcss"),ut=require("typescript"),dt=require("@reactivedata/reactive"),ee=require("@syncedstore/core"),fe=require("glob"),ft=require("lib0/decoding"),mt=require("lib0/encoding"),L=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"),C=require("sequelize");require("sqlite3");const N=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=N(ot),It=N(Ne),Ot=N(rt),Pt=N(it),Ct=X(ct),jt=N(lt),At=N(pt),D=N(ut),pe=X(ft),_=X(mt),_t=N(ht),vt=N(h),Dt=N(wt),J=X(Et),B=X(bt),xt=N(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,Lt=()=>w.default.env.tenantMode==="multiple",Nt=()=>{var t;return(xt.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"),V=require("@blocklet/quickjs"),ot=require("@blocklet/sdk/lib/config"),Ee=require("lru-cache"),Ne=require("node-fetch"),x=require("ufo"),ie=require("crypto"),rt=require("@blocklet/logger"),at=require("@blocklet/pages-kit/utils/builtin"),Ue=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),be=require("@blocklet/sdk/lib/component"),it=require("autoprefixer"),ct=require("esbuild"),E=require("fs"),lt=require("postcss"),pt=require("tailwindcss"),ut=require("typescript"),dt=require("@reactivedata/reactive"),ee=require("@syncedstore/core"),fe=require("glob"),ft=require("lib0/decoding"),mt=require("lib0/encoding"),L=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"),C=require("sequelize");require("sqlite3");const N=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=N(ot),It=N(Ne),Ot=N(rt),Pt=N(it),Ct=X(ct),jt=N(lt),At=N(pt),D=N(ut),pe=X(ft),_=X(mt),_t=N(ht),vt=N(h),Dt=N(wt),J=X(Et),B=X(bt),xt=N(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,Lt=()=>w.default.env.tenantMode==="multiple",Nt=()=>{var t;return(xt.default(ve.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=ve.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},I=Ot.default("pages-kit"),Ut=C.DataTypes.sqlite.DATE.parse;C.DataTypes.sqlite.DATE.parse=(t,n)=>typeof t=="number"?new Date(t):Ut(t,n);const Z=new C.Sequelize({dialect:"sqlite",storage:Rt,benchmark:process.env.ENABLE_SEQUELIZE_BENCHMARK==="true",retry:{match:[/SQLITE_BUSY/],name:"query",max:10},logging:process.env.ENABLE_SEQUELIZE_LOGGING==="true"?console.log:!1});Z.query("pragma journal_mode = WAL;");Z.query("pragma synchronous = normal;");Z.query("pragma journal_size_limit = 67108864;");class ce extends C.Model{}ce.init({id:{type:C.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:C.DataTypes.UUIDV4},projectId:{type:C.DataTypes.UUID,allowNull:!1},componentId:{type:C.DataTypes.STRING,allowNull:!1}},{sequelize:Z,tableName:"ProjectComponents",timestamps:!1});class $ extends C.Model{static async getProjectByIdOrSlug(n){return $.findOne({where:{[C.Op.or]:[{id:n},{slug:n}]}})}}$.init({id:{type:C.DataTypes.UUID,defaultValue:C.DataTypes.UUIDV4,primaryKey:!0},name:{type:C.DataTypes.STRING,allowNull:!1},description:C.DataTypes.TEXT,createdAt:C.DataTypes.DATE,updatedAt:C.DataTypes.DATE,createdBy:{type:C.DataTypes.STRING,allowNull:!1},updatedBy:{type:C.DataTypes.STRING,allowNull:!1},slug:C.DataTypes.STRING,icon:C.DataTypes.STRING,pinnedAt:C.DataTypes.DATE,useAllResources:C.DataTypes.BOOLEAN,relatedBlocklets:{type:C.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(t){this.setDataValue("relatedBlocklets",JSON.stringify(t||{}))}}},{sequelize:Z,paranoid:!0});$.hasMany(ce,{foreignKey:"projectId",as:"components"});const Mt=async(t,{componentId:n})=>{const e=`@tailwind components;
|
|
2
2
|
@tailwind utilities;
|
|
3
3
|
`,s=`.CustomComponent_${n}`;return(await jt.default([At.default({content:[{raw:t,extension:"tsx"}]}),Pt.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),r=>{r.walkRules(l=>{l.selectors=l.selectors.map(a=>a.replace(/\.(.+)/g,`${s}.$1,${s} .$1`))})}]).process(e)).css},Ft=async(t,{componentId:n})=>{const e=await Mt(t,{componentId:n});return`export const __PagesKit_CSS__ = ${JSON.stringify(e)};
|
|
4
4
|
|
|
5
5
|
${t}
|
|
6
|
-
`},De=V.memoize(async(t,n)=>{let e=D.default.transpileModule(t,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.ESNext},transformers:{before:[Ue.createBuiltinModuleTransformer(D.default)]}}).outputText;if(n.tailwind&&(e=await Ft(e,{componentId:n.componentId})),n.module===se.PreloadComponentScriptModule.ESM)return e;const s=D.default.transpileModule(e,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.CommonJS,moduleResolution:D.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 Ct.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
|
+
`},De=V.memoize(async(t,n)=>{let e=D.default.transpileModule(t,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.ESNext},transformers:{before:[Ue.createBuiltinModuleTransformer(D.default)]}}).outputText;if(n.tailwind&&(e=await Ft(e,{componentId:n.componentId})),n.module===se.PreloadComponentScriptModule.ESM)return e;const s=D.default.transpileModule(e,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.CommonJS,moduleResolution:D.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 Ct.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 I.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 D.default.transpileModule(o,{compilerOptions:{module:D.default.ModuleKind.ESNext,target:D.default.ScriptTarget.ES2020}}).outputText},Me=V.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,10 +29,10 @@ var ${t} = ${e?"async":""} function () {
|
|
|
29
29
|
|
|
30
30
|
return exports;
|
|
31
31
|
};
|
|
32
|
-
`},K=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){
|
|
32
|
+
`},K=new Ee.LRUCache({max:100}),Fe=60*60,me=60;function qe(t){I.info("clear preload components cache",{cacheKey:t}),K.delete(t)}function $e(t){for(const n of K.keys())n.includes(t)&&(I.info("clear preload components cache",{cacheKey:n}),qe(n))}function Be({mode:t,instanceId:n,componentId:e,locale:s}){return["getPreloadComponents",t,n,e,s].join("-")}async function Bt({mode:t,req:n,state:e,locale:s,instances:o,module:r}){const{supportedLocales:l,config:{defaultLocale:a}}=e;if(!a)return null;const i=(await Promise.all(o.map(async g=>{try{const S=Be({mode:t,instanceId:g.id,componentId:g.componentId,locale:s});if(t!=="draft"&&g.useCache&&K.has(S))return I.info(`get preload component from cache: ${S}`),K.get(S);const j=W({state:e,componentId:g.componentId});if(!j)return null;const v=await Ve({req:n,state:e,componentId:j.id,locale:s,defaultLocale:a,properties:g.properties});if(!v)return null;const F={instanceId:g.id,preload:v};if(t!=="draft"&&g.useCache){let R=Fe;g.cacheDuration&&(R=g.cacheDuration),I.info(`set preload component to cache(${R}s): ${S}`),K.set(S,F,{ttl:R*1e3})}return F}catch(S){return I.error("get preload component error",{instanceId:g.id,componentId:g.componentId},{error:S}),null}}))).filter(g=>!!g),c=Object.values(i.reduce((g,S)=>({...g,...S.preload.components}),{}));async function p(){const g=await Promise.all(c.map(async S=>{const j=oe.componentUMDName({componentId:S.component.id}),v=r===se.PreloadComponentScriptModule.ESM?{module:r,script:await De(S.script,{componentId:S.component.id,module:r,tailwind:t!=="draft"})}:{module:r,script:await De(S.script,{componentId:S.component.id,module:r,moduleName:j,tailwind:t!=="draft"}),moduleName:j};return[S.component.id,{component:S.component,script:v}]}));return Object.fromEntries(g)}const u=await p();return{config:{defaultLocale:a,supportedLocales:l},components:u,instances:i.map(g=>({id:g.instanceId,componentId:g.preload.component.id,locales:{[g.preload.locale]:{props:g.preload.props}}}))}}async function Ve({req:t,state:n,componentId:e,locale:s,defaultLocale:o,properties:r}){const{supportedLocales:l}=n,a=W({state:n,componentId:e});if(!a)return null;const i=l.some(p=>p.locale===s)?s:o;if(!i)return null;const c=await 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 zt({...a,req:t});p!=null&&p.props&&Object.assign(c.props,p.props)}catch(p){I.error("preload data at server side error",{componentId:s,name:a.component.name},{error:p})}return await Promise.all(Object.entries(i).map(async([p,u])=>{if((u==null?void 0:u.type)===oe.RenderNestedComponent){const f=await 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 zt({component:t,script:n,props:e,req:s}){if(!(n!=null&&n.includes("getServerSideProps")))return null;const o=await Me(n,"getServerSideProps");if(!o)return null;const r=new Promise(a=>{setTimeout(()=>{I.error("getServerSideProps timeout"),a({})},me*1e3)});return await Promise.race([r,V.Sandbox.callFunction({code:`${o}
|
|
33
33
|
|
|
34
34
|
export async function getServerSidePropsWrapper(props) {
|
|
35
|
-
const { location, fetch } = props;
|
|
35
|
+
const { location, fetch, props: componentProps } = props;
|
|
36
36
|
// 使用局部变量而不是全局变量
|
|
37
37
|
const originalLocation = typeof window !== 'undefined' ? window.location : undefined;
|
|
38
38
|
const originalFetch = globalThis.fetch;
|
|
@@ -40,7 +40,7 @@ export async function getServerSidePropsWrapper(props) {
|
|
|
40
40
|
try {
|
|
41
41
|
globalThis.location = location;
|
|
42
42
|
globalThis.fetch = fetch;
|
|
43
|
-
return await getServerSideProps(
|
|
43
|
+
return await getServerSideProps(componentProps);
|
|
44
44
|
} finally {
|
|
45
45
|
// 清理全局状态
|
|
46
46
|
if (originalLocation) globalThis.location = originalLocation;
|
|
@@ -48,10 +48,10 @@ export async function getServerSidePropsWrapper(props) {
|
|
|
48
48
|
}
|
|
49
49
|
}`,filename:`${t.name||t.id}.js`,moduleLoader:a=>{if(a==="@blocklet/pages-kit/builtin/utils")return`const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
|
|
50
50
|
export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
51
|
-
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return V.BuiltinModules.dayjs},global:{console:{log:(...a)=>{
|
|
51
|
+
`;if(a==="@blocklet/pages-kit/builtin/dayjs")return V.BuiltinModules.dayjs},global:{console:{log:(...a)=>{I.info(...a)},warn:(...a)=>{I.warn(...a)},error:(...a)=>{I.error(...a)}},getComponentMountPoint:nt.getComponentMountPoint,joinURL:x.joinURL,withQuery:x.withQuery,getQuery:x.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:x.joinURL(x.withHttps(s.hostname),s.originalUrl)},fetch:(a,{...i}={})=>{const c=typeof a=="string"&&a.startsWith("/")?x.joinURL(w.default.env.appUrl,a):a;if(typeof c=="string"&&x.parseURL(c).host===x.parseURL(w.default.env.appUrl).host){const p=s.get("cookie");if(p){const u=new Ne.Headers(i.headers);u.set("cookie",p),i.headers=u}}return It.default(c,{...i,timeout:me*1e3}).then(p=>({ok:p.ok,status:p.status,statusText:p.statusText,headers:Object.fromEntries(p.headers.entries()),json:()=>p.json()}))},props:e}]})])}const Ge=V.memoize(async(t,n,e)=>{if(!(t!=null&&t.includes(n)))return null;const s=await Me(t,n);if(s)try{return await V.Sandbox.callFunction({code:`
|
|
52
52
|
${s}
|
|
53
53
|
|
|
54
54
|
export function get${n}SchemaWrapper() {
|
|
55
55
|
return ${n};
|
|
56
56
|
}
|
|
57
|
-
`,filename:`${e}.js`,functionName:`get${n}SchemaWrapper`})}catch(o){return O.error(`获取 ${n} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,n,e)=>{const s=ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",s,n,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Jt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Jt,Kt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ie=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,Y=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,xe=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Wt=1e4,Qt=3e4,te=0,ue=1,Xt=0,Zt=1,Se=w.default,z=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function ze(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function ss(){var e;const t=Se.env.languages.map(s=>({locale:s.code,name:s.name})),n=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},components:{},supportedLocales:t,config:{defaultLocale:n},resources:{}}}const q=class q extends B.Doc{constructor(e){super();A(this,"states",{});A(this,"syncedStore");A(this,"conns",new Map);A(this,"awareness");A(this,"awarenessChangeHandler",({added:e,updated:s,removed:o},r)=>{const l=e.concat(s,o);if(r!==null){const c=this.conns.get(r);c&&(e.forEach(p=>{c.add(p)}),o.forEach(p=>{c.delete(p)}))}const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,l));const i=_.toUint8Array(a);this.conns.forEach((c,p)=>this.send(p,i))});A(this,"updateHandler",e=>{const s=_.createEncoder();_.writeVarUint(s,te),le.writeUpdate(s,e);const o=_.toUint8Array(s);this.conns.forEach((r,l)=>this.send(l,o))});A(this,"ensureDataStructure",()=>{var l;const{supportedLocales:e,pages:s,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(s));let i=0;for(;i<o.length;){const c=o[i];a.has(c)?(a.delete(c),i++):o.splice(i,1)}}e.splice(0,e.length),e.push(...Se.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(l=e[0])==null?void 0:l.locale;{let a=0;const i=new Set;for(;a<e.length;){const{locale:c}=e[a];i.has(c)?e.splice(a,1):(a++,i.add(c))}}});A(this,"send",(e,s)=>{e.readyState!==Xt&&e.readyState!==Zt&&this.closeConn(e);try{e.send(s,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});A(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const s=this.conns.get(e);this.conns.delete(e),s&&G.removeAwarenessStates(this.awareness,Array.from(s),null)}e.close()});A(this,"autoSave",L.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Wt));A(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});A(this,"publish",async({mode:e,pages:s})=>{const o=await this.getState("draft"),r=await this.getState("production");await we(o,r,{pages:s,pageMergeMode:"replace",deletePages:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const l of s||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(e,r)});A(this,"mergeState",async(e,s)=>{var a,i,c;const o=JSON.parse(JSON.stringify(s));(a=e.config).fontFamily??(a.fontFamily={});const r=(i=o.config)==null?void 0:i.fontFamily,l=(c=e.config)==null?void 0:c.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(l==null?void 0:l.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(l==null?void 0:l.description),await new Promise((p,u)=>{this.transact(async()=>{try{const f=await we(e,s);p(f)}catch(f){u(f)}})})});A(this,"addConnection",e=>{if(this.conns.has(e))return;e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",r=>this.messageListener(e,new Uint8Array(r)));let s=!0;const o=setInterval(()=>{if(!s)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){s=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},Qt);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{s=!0});{const r=_.createEncoder();_.writeVarUint(r,te),le.writeSyncStep1(r,this),this.send(e,_.toUint8Array(r));const l=this.awareness.getStates();if(l.size>0){const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(e,_.toUint8Array(a))}}});A(this,"messageListener",(e,s)=>{try{const o=_.createEncoder(),r=pe.createDecoder(s),l=pe.readVarUint(r);switch(l){case te:_.writeVarUint(o,te),le.readSyncMessage(r,o,this,null),_.length(o)>1&&(this.ensureDataStructure(),this.send(e,_.toUint8Array(o)));break;case ue:{G.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(r),e);break}default:O.warn(`Unsupported messageType ${l}`)}}catch(o){O.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,E.readFileSync(this.draftYjsFilePath)),this.syncedStore=dt.reactive(ee.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new G.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=h.join(z,e),o=h.join(z,`@del-${e}`);E.renameSync(s,o)}catch(s){O.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:z,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>q.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=this.sharedInstances.get(e);return s||(s=new q({path:h.join(z,e)}),this.sharedInstances.set(e,s),s)}destroy(){this.conns.forEach((e,s)=>this.closeConn(s)),this.awareness.destroy(),super.destroy()}initObserver(){const e=o=>{o.observeDeep(r=>{r.some(l=>l.changes.keys.has("updatedAt")||l.changes.keys.has("publishedAt"))||o.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(o=>{const r=ee.getYjsValue(this.syncedStore.pages[o]);r&&r instanceof B.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof B.Map&&s.observe(o=>{o.changes.keys.forEach((r,l)=>{if(r.action==="add"){const a=ee.getYjsValue(this.syncedStore.pages[l]);a&&a instanceof B.Map&&e(a)}})})}get draftYjsFilePath(){return h.join(this.options.path,"draft.yjs")}async getState(e){var s,o,r,l;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Oe(this.getPublishDir(e),{includeResources:!0})??ss(),!((o=(s=this.states[e])==null?void 0:s.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Se.env.languages.map(i=>({locale:i.code,name:i.name}));this.states[e].config.defaultLocale=(l=a[0])==null?void 0:l.locale}return{...this.states[e],resources:await Ae().then(async a=>{var u,f,g,S;const{pages:i,components:c}=L.pick(a,"pages","components");let p=c;if((f=(u=this.states[e])==null?void 0:u.resources)!=null&&f.components)p={...(S=(g=this.states[e])==null?void 0:g.resources)==null?void 0:S.components};else{const j=h.basename(this.options.path),v=await $.findByPk(j);if(v!=null&&v.useAllResources)p=c;else{const R=(await ce.findAll({where:{projectId:j}})).map(T=>T.componentId);p=Object.fromEntries(Object.entries(c||{}).filter(([T])=>R.includes(T)))}}return{pages:i,components:p}}).catch(()=>({}))}}async setState(e,s){const o=await Ye(s,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);E.mkdirSync(h.dirname(r),{recursive:!0}),E.rmSync(r,{force:!0,recursive:!0}),E.renameSync(o,r),this.states[e]=s}getPublishDir(e){return h.join(this.options.path,e)}static async pageUrlMap(e){const{projectIds:s}=this,o={};for(const r of s){const l=await $.findByPk(r);if(!l)continue;const a=await q.shared(r).getState(e),i=L.union(w.default.env.languages.map(c=>c.code),a.supportedLocales.map(c=>c.locale));for(const c of a.pageIds){const p=a.pages[c];if(!p||e==="production"&&!p.isPublic)continue;const u=p.slug,f=l.slug||r,g={projectId:r,projectSlug:f,pageSlug:u,pageId:c,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:a.config.publishedAt,isPublic:p.isPublic,isTemplate:p.isTemplate};f&&(o[x.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[x.joinURL("/",S,r,u)]=j,f&&(o[x.joinURL("/",S,f,u)]=j)}}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:s,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};A(q,"INSTANCE_TTL",30*60*1e3),A(q,"sharedInstances",new Ee.LRUCache({max:100,ttl:q.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let Q=q;function Je(){return E.mkdtempSync(h.join(w.default.env.dataDir,"tmp-"))}function re(t,n,e=[]){return Array.isArray(t)?t.flatMap((s,o)=>re(s,n,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([s,o])=>re(o,n,[...e,s])):n(t)?[e]:[]}function M(t){return t.filter(n=>n!=null)}async function ns(t,n,e){if(!t||!E.existsSync(t)||!E.lstatSync(t).isFile())return null;let s=e[t];return s||(s=(async()=>{var o;try{const r=(o=await Yt({filePath:t,fileName:n}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return O.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=s),s}const os=async(t,n)=>{const e=h.basename(t),s=await be.call({name:Te,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(s.status>=200&&s.status<400){const o=E.createWriteStream(n);await yt.pipeline(s.data,o)}else throw new Error(`download asset failed ${s.status}`)},rs=async(t,n)=>{await Promise.all(t.map(async e=>{try{await os(e,h.join(n,h.basename(e)))}catch(s){O.error(`Failed to export assets: ${e}, ${s}`)}}))};function Ke(t){return Ie.test(t)?[t]:Y.test(t)?(xe.lastIndex=0,Array.from(t.matchAll(xe)).map(e=>e[1]).filter(e=>!!e)):[]}async function de(t,n,e){const{getFilename:s,exportAssets:o}=e,r=h.join(n,s(t));if(E.mkdirSync(h.dirname(r),{recursive:!0}),E.writeFileSync(r,J.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))).map(i=>{const c=L.get(t,i);return Ke(c)}).flat().filter(Boolean);await rs(a,h.dirname(r))}}const ke=new Ee.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Re(t,n,e){var a;const s=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=L.get(t,i),p=Ke(c);for(const u of p){const f=h.basename(u),g=e.getFilePath(u,i),S=g?`${g}:${f}`:f,j=ke.get(S);if(j){Y.test(c)||L.set(t,i,j);return}const v=await ns(g,f,n);v&&(Y.test(c)||L.set(t,i,v),ke.set(S,v))}}catch(c){O.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,I,P;const l=e==="all"?t.pageIds:e,a=as({state:t,pageIds:l,componentIds:s==="all"?Object.keys(t.components):s}),i=(m,d)=>{var b;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,component:m.component,config:m.config,visibility:m.visibility,properties:((b=m.locales)==null?void 0:b[d])??{}}},c=(m,d)=>{var b;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,isTemplate:m.isTemplate??!1,meta:((b=m.locales)==null?void 0:b[d])??{},sections:M(m.sectionIds.map(k=>{const U=m.sections[k];return U&&i(U,d)}))}},p=M(t.supportedLocales.map(m=>m.locale).flatMap(m=>l.map(d=>{const b=t.pages[d];return b&&{locale:m,slug:b.slug,page:c(b,m)}}))),u=Je(),f=h.join(u,"pages");E.mkdirSync(f,{recursive:!0});const g=h.join(u,"components");E.mkdirSync(g,{recursive:!0});for(const{locale:m,slug:d,page:b}of p)await de(b,f,{getFilename:()=>`${ze(d)||"index"}.${m}.yml`,exportAssets:n});for(const m of a){const d=(F=t.components[m])==null?void 0:F.data;d&&await de(d,g,{getFilename:b=>`${b.name||"unnamed"}.${b.id}.yml`,exportAssets:n})}const S=h.join(u,".blocklet/pages/pages.config.yml");E.mkdirSync(h.dirname(S),{recursive:!0});const j={pages:M(l.map(m=>{const d=t.pages[m];return d&&{id:m,slug:d.slug}})),components:M(a.map(m=>{var b;const d=(b=t.components[m])==null?void 0:b.data;return d&&{id:m,name:d.name}})),...r?{resources:{components:M(Object.keys(((R=t.resources)==null?void 0:R.components)||{}).map(m=>{var d,b,k,U;return{id:m,name:(U=(k=(b=(d=t.resources)==null?void 0:d.components)==null?void 0:b[m])==null?void 0:k.component)==null?void 0:U.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};E.writeFileSync(S,J.stringify(j));const v=h.join(u,"config.source.json");if(o&&E.writeFileSync(v,JSON.stringify(o)),r){const m=h.join(u,"resources"),d=h.join(m,"components");E.mkdirSync(d,{recursive:!0});for(const b of Object.keys(((y=t==null?void 0:t.resources)==null?void 0:y.components)??{})){const k=(P=(I=(T=t.resources)==null?void 0:T.components)==null?void 0:I[b])==null?void 0:P.component;k&&await de(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:n})}}return u}async function Oe(t,{importAssets:n,includeResources:e}={}){var r,l,a;if(!E.existsSync(t))return null;let s,o=!1;try{E.lstatSync(t).isDirectory()?s=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,s=Je(),await St.x({file:t,C:s}));const i=fe.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s,absolute:!0}).at(0),c=i&&h.join(h.dirname(i),"../../pages"),p=i&&h.join(h.dirname(i),"../../components"),u=i&&h.join(h.dirname(i),"../../chunks");if(!i)return null;const f=J.parse(E.readFileSync(i).toString()),g=(y,T,I)=>{let P=h.join(y,`${T}${I?`.${I}`:""}.yml`);return(!E.existsSync(P)||!E.lstatSync(P).isFile())&&(P=h.join(y,T,`index${I?`.${I}`:""}.yml`),!E.existsSync(P)||!E.lstatSync(P))?null:J.parse(E.readFileSync(P).toString())},S=(y,T)=>{try{const I=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return I?J.parse(E.readFileSync(I).toString()):null}catch(I){O.error("parse component error",I)}return null},j=M(f.pages.map(({slug:y})=>{var m;const T=M(f.supportedLocales.map(({locale:d})=>{const b=c?g(c,ze(y),d):void 0;if(b)return{locale:d,page:b};const k=c?g(c,y,d):void 0;return k&&{locale:d,page:k}})),I=(m=T[0])==null?void 0:m.page;if(!I)return null;const P=I.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:I.id||ye(),createdAt:I.createdAt,updatedAt:I.updatedAt,publishedAt:I.publishedAt,isPublic:I.isPublic??!0,isTemplate:I.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)=>{O.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await Dt.default({resources:[`${be.getComponentWebEndpoint(kt)}/api/sdk/uploads`],validateStatus:P=>P>=200&&P<=500}),y("image-bin api is ready");const T={},I={};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,I,{getFilePath:(P,m)=>{const d=L.get(j,m.slice(0,1));return c&&h.join(c,h.dirname(d.slug),P)},onFinish:P=>{y(`upload ${P.length} page assets`)}})]),y("upload assets done"),global.gc&&global.gc()}catch(T){y("Error during asset import:",T)}}const F={};if(e){const y=i&&h.join(h.dirname(i),"../../resources/components"),T=M(((a=(l=f.resources)==null?void 0:l.components)==null?void 0:a.map(({id:I})=>S(y,I)))??[]);T.length>0&&(F.components=Object.fromEntries(T.map((I,P)=>[I.id,{index:P,component:I}])))}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){O.error("clear preload page cache error",{error:p})}const{pageIds:l,pages:a,supportedLocales:i}=t;for(const p of e??l){const u=a[p];if(!u){const f=n.pageIds.indexOf(p);f!==-1&&o&&(n.pageIds.splice(f,1),delete n.pages[p]);continue}if(n.pageIds.includes(u.id)){if(s==="replace")n.pages[u.id]=u;else if(s==="byUpdateTime"){const f=n.pages[u.id];(!f||u.updatedAt&&u.updatedAt>f.updatedAt)&&(n.pages[u.id]=u)}}else n.pageIds.push(u.id),n.pages[u.id]=u}if(o&&!e)for(const p of n.pageIds)t.pageIds.includes(p)||delete n.pages[p],n.pageIds=[...n.pageIds].filter(u=>t.pageIds.includes(u));if(n.supportedLocales.splice(0,n.supportedLocales.length),n.supportedLocales.push(...L.cloneDeep(i)),o)for(const p of Object.keys(n.components))delete n.components[p];let c=JSON.parse(JSON.stringify(t.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([p,u])=>{const f=await We(u==null?void 0:u.data);return[p,{...u,data:f}]}))),Object.assign(n.components,c),Object.assign(n.config,JSON.parse(JSON.stringify(t.config))),n.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const We=V.memoize(async t=>{var n;if(!L.isEmpty(t==null?void 0:t.properties))return t;if(((n=t==null?void 0:t.renderer)==null?void 0:n.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const s=await Ge(e,"PROPERTIES_SCHEMA",t.id);s&&s.length>0&&t&&(t.properties={},s.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(s){O.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:s})}}return t},{keyGenerator:t=>{var l;const n=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",s=((l=t==null?void 0:t.renderer)==null?void 0:l.type)||"",o=(t==null?void 0:t.properties)||{},r=ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",n,e,s,r])},lruOptions:{max:100,ttl:1e3*60*60}});function as({state:t,pageIds:n=[],componentIds:e=[]}){var l;const s=(a,i=new Set)=>(Array.isArray(a)&&a.forEach(c=>s(c,i)),a&&typeof a=="object"&&(typeof a.componentId=="string"&&i.add(a.componentId),Object.values(a).forEach(c=>s(c,i))),i),o=new Set(e);for(const a of n){const i=t.pages[a];s(i,o)}const r=[...o];for(;r.length;){const a=r.shift();o.has(a)||o.add(a);const i=(l=t.components[a])==null?void 0:l.data;if(i)for(const c of s(i))o.has(c)||r.push(c)}return[...o]}let ae,H,Pe,Ce,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:Kt,type:ge}]});H=(await Promise.all(t.map(async e=>{const s=e.path?await Oe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Pe=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:s.blockletId}]:[]))),{});const n=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.components).map(o=>[o.data.id,{blockletId:s.blockletId,component:o.data}]))),{});Ce=Object.fromEntries(await Promise.all(Object.entries(n).map(async([e,s])=>{const o=await We(s.component);return[e,{...s,component:o}]}))),je=H.reduce((e,s)=>Object.assign(e,s.state.chunks),{})})(),ae}function Xe(t){const n=L.debounce(async()=>{await Qe().catch(e=>{O.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:H,pages:Pe,components:Ce,chunks:je}))},3e3,{leading:!1,trailing:!0});return n(),w.default.events.on(w.default.Events.componentAdded,n),w.default.events.on(w.default.Events.componentRemoved,n),w.default.events.on(w.default.Events.componentStarted,n),w.default.events.on(w.default.Events.componentStopped,n),w.default.events.on(w.default.Events.componentUpdated,n),w.default.events.on(he,n),()=>{w.default.events.off(w.default.Events.componentAdded,n),w.default.events.off(w.default.Events.componentRemoved,n),w.default.events.off(w.default.Events.componentStarted,n),w.default.events.off(w.default.Events.componentStopped,n),w.default.events.off(w.default.Events.componentUpdated,n),w.default.events.off(he,n)}}const Ze=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),ne=globalThis;var Le;(Le=ne[Ze])==null||Le.call(ne);ne[Ze]=Xe(async({pages:t,components:n})=>{const{projectIds:e}=Q;O.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}O.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=>{O.error("update resource states failed:",s)})});async function is(){O.info("trigger reload all project resource"),w.default.events.emit(he)}async function Ae({ensureLoaded:t=!0}={}){return t&&(ae??(ae=Qe()),await ae),{states:H,pages:Pe,components:Ce,chunks:je}}exports.COMPONENT_DID=Te;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=Fe;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=me;exports.PUBLISH_MODES=ts;exports.Project=$;exports.RESOURCE_TYPE=ge;exports.SITE_STATE_PATH=z;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Oe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Gt;exports.getExportSchemaValueFromCode=Ge;exports.getMultiTenantAllProjectAccessPassports=Nt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Lt;exports.logger=O;exports.mergeState=we;exports.nextId=ye;exports.toPackage=Ye;exports.triggerReloadAllProjectResource=is;
|
|
57
|
+
`,filename:`${e}.js`,functionName:`get${n}SchemaWrapper`})}catch(o){return I.error(`获取 ${n} 失败`,{componentId:e,error:o}),null}return null},{keyGenerator:(t,n,e)=>{const s=ie.createHash("md5").update(t).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",s,n,e])},lruOptions:{max:100,ttl:1e3*60*60}}),Jt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",he="trigger-reload-project-resource",Te=Jt,Kt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Yt}=require("@blocklet/uploader-server"),ye=gt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ie=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,Y=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,xe=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Wt=1e4,Qt=3e4,te=0,ue=1,Xt=0,Zt=1,Se=w.default,z=h.join(process.env.BLOCKLET_DATA_DIR,"site-state"),es=["production","draft"],ts=["production"];function ze(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function ss(){var e;const t=Se.env.languages.map(s=>({locale:s.code,name:s.name})),n=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},components:{},supportedLocales:t,config:{defaultLocale:n},resources:{}}}const q=class q extends B.Doc{constructor(e){super();A(this,"states",{});A(this,"syncedStore");A(this,"conns",new Map);A(this,"awareness");A(this,"awarenessChangeHandler",({added:e,updated:s,removed:o},r)=>{const l=e.concat(s,o);if(r!==null){const c=this.conns.get(r);c&&(e.forEach(p=>{c.add(p)}),o.forEach(p=>{c.delete(p)}))}const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,l));const i=_.toUint8Array(a);this.conns.forEach((c,p)=>this.send(p,i))});A(this,"updateHandler",e=>{const s=_.createEncoder();_.writeVarUint(s,te),le.writeUpdate(s,e);const o=_.toUint8Array(s);this.conns.forEach((r,l)=>this.send(l,o))});A(this,"ensureDataStructure",()=>{var l;const{supportedLocales:e,pages:s,pageIds:o,config:r}=this.syncedStore;{const a=new Set(Object.keys(s));let i=0;for(;i<o.length;){const c=o[i];a.has(c)?(a.delete(c),i++):o.splice(i,1)}}e.splice(0,e.length),e.push(...Se.env.languages.map(a=>({locale:a.code,name:a.name}))),r.defaultLocale=(l=e[0])==null?void 0:l.locale;{let a=0;const i=new Set;for(;a<e.length;){const{locale:c}=e[a];i.has(c)?e.splice(a,1):(a++,i.add(c))}}});A(this,"send",(e,s)=>{e.readyState!==Xt&&e.readyState!==Zt&&this.closeConn(e);try{e.send(s,o=>{o&&this.closeConn(e)})}catch{this.closeConn(e)}});A(this,"closeConn",e=>{if(e.removeAllListeners(),this.conns.has(e)){const s=this.conns.get(e);this.conns.delete(e),s&&G.removeAwarenessStates(this.awareness,Array.from(s),null)}e.close()});A(this,"autoSave",L.debounce(()=>{E.mkdirSync(h.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Wt));A(this,"save",({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()});A(this,"publish",async({mode:e,pages:s})=>{const o=await this.getState("draft"),r=await this.getState("production");await we(o,r,{pages:s,pageMergeMode:"replace",deletePages:!0,publishMode:e}),r.config.publishedAt=new Date().getTime();for(const l of s||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(e,r)});A(this,"mergeState",async(e,s)=>{var a,i,c;const o=JSON.parse(JSON.stringify(s));(a=e.config).fontFamily??(a.fontFamily={});const r=(i=o.config)==null?void 0:i.fontFamily,l=(c=e.config)==null?void 0:c.fontFamily;e.config.fontFamily.title=(r==null?void 0:r.title)||(l==null?void 0:l.title),e.config.fontFamily.description=(r==null?void 0:r.description)||(l==null?void 0:l.description),await new Promise((p,u)=>{this.transact(async()=>{try{const f=await we(e,s);p(f)}catch(f){u(f)}})})});A(this,"addConnection",e=>{if(this.conns.has(e))return;e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",r=>this.messageListener(e,new Uint8Array(r)));let s=!0;const o=setInterval(()=>{if(!s)this.conns.has(e)&&this.closeConn(e),clearInterval(o);else if(this.conns.has(e)){s=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(o)}}},Qt);e.on("close",()=>{this.closeConn(e),clearInterval(o)}),e.on("pong",()=>{s=!0});{const r=_.createEncoder();_.writeVarUint(r,te),le.writeSyncStep1(r,this),this.send(e,_.toUint8Array(r));const l=this.awareness.getStates();if(l.size>0){const a=_.createEncoder();_.writeVarUint(a,ue),_.writeVarUint8Array(a,G.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(e,_.toUint8Array(a))}}});A(this,"messageListener",(e,s)=>{try{const o=_.createEncoder(),r=pe.createDecoder(s),l=pe.readVarUint(r);switch(l){case te:_.writeVarUint(o,te),le.readSyncMessage(r,o,this,null),_.length(o)>1&&(this.ensureDataStructure(),this.send(e,_.toUint8Array(o)));break;case ue:{G.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(r),e);break}default:I.warn(`Unsupported messageType ${l}`)}}catch(o){I.error(o)}this.save()});this.options=e,E.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,E.readFileSync(this.draftYjsFilePath)),this.syncedStore=dt.reactive(ee.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new G.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=h.join(z,e),o=h.join(z,`@del-${e}`);E.renameSync(s,o)}catch(s){I.error("Failed to safe delete project state dir:",s)}}static get projectIds(){return fe.globSync("*/",{cwd:z,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(e=>q.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=this.sharedInstances.get(e);return s||(s=new q({path:h.join(z,e)}),this.sharedInstances.set(e,s),s)}destroy(){this.conns.forEach((e,s)=>this.closeConn(s)),this.awareness.destroy(),super.destroy()}initObserver(){const e=o=>{o.observeDeep(r=>{r.some(l=>l.changes.keys.has("updatedAt")||l.changes.keys.has("publishedAt"))||o.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(o=>{const r=ee.getYjsValue(this.syncedStore.pages[o]);r&&r instanceof B.Map&&e(r)});const s=ee.getYjsValue(this.syncedStore.pages);s&&s instanceof B.Map&&s.observe(o=>{o.changes.keys.forEach((r,l)=>{if(r.action==="add"){const a=ee.getYjsValue(this.syncedStore.pages[l]);a&&a instanceof B.Map&&e(a)}})})}get draftYjsFilePath(){return h.join(this.options.path,"draft.yjs")}async getState(e){var s,o,r,l;if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[e]&&(this.states[e]=await Oe(this.getPublishDir(e),{includeResources:!0})??ss(),!((o=(s=this.states[e])==null?void 0:s.config)!=null&&o.defaultLocale))){(r=this.states[e]).config??(r.config={});const a=Se.env.languages.map(i=>({locale:i.code,name:i.name}));this.states[e].config.defaultLocale=(l=a[0])==null?void 0:l.locale}return{...this.states[e],resources:await Ae().then(async a=>{var u,f,g,S;const{pages:i,components:c}=L.pick(a,"pages","components");let p=c;if((f=(u=this.states[e])==null?void 0:u.resources)!=null&&f.components)p={...(S=(g=this.states[e])==null?void 0:g.resources)==null?void 0:S.components};else{const j=h.basename(this.options.path),v=await $.findByPk(j);if(v!=null&&v.useAllResources)p=c;else{const R=(await ce.findAll({where:{projectId:j}})).map(T=>T.componentId);p=Object.fromEntries(Object.entries(c||{}).filter(([T])=>R.includes(T)))}}return{pages:i,components:p}}).catch(()=>({}))}}async setState(e,s){const o=await Ye(s,{exportAssets:!1,includeResources:!0}),r=this.getPublishDir(e);E.mkdirSync(h.dirname(r),{recursive:!0}),E.rmSync(r,{force:!0,recursive:!0}),E.renameSync(o,r),this.states[e]=s}getPublishDir(e){return h.join(this.options.path,e)}static async pageUrlMap(e){const{projectIds:s}=this,o={};for(const r of s){const l=await $.findByPk(r);if(!l)continue;const a=await q.shared(r).getState(e),i=L.union(w.default.env.languages.map(c=>c.code),a.supportedLocales.map(c=>c.locale));for(const c of a.pageIds){const p=a.pages[c];if(!p||e==="production"&&!p.isPublic)continue;const u=p.slug,f=l.slug||r,g={projectId:r,projectSlug:f,pageSlug:u,pageId:c,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:a.config.publishedAt,isPublic:p.isPublic,isTemplate:p.isTemplate};f&&(o[x.joinURL("/",f,u)]={...g,shouldRedirect:!0,mainPage:!0}),o[x.joinURL("/",r,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const S of i){const j={...g,locale:S};o[x.joinURL("/",S,r,u)]=j,f&&(o[x.joinURL("/",S,f,u)]=j)}}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,o]of this.sharedInstances.entries()){const r=o.getDocumentSize();e.push({projectId:s,sizeInBytes:r,sizeInMB:`${(r/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return e}};A(q,"INSTANCE_TTL",30*60*1e3),A(q,"sharedInstances",new Ee.LRUCache({max:100,ttl:q.INSTANCE_TTL,dispose:e=>{e.destroy()}}));let Q=q;function Je(){return E.mkdtempSync(h.join(w.default.env.dataDir,"tmp-"))}function re(t,n,e=[]){return Array.isArray(t)?t.flatMap((s,o)=>re(s,n,[...e,o])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([s,o])=>re(o,n,[...e,s])):n(t)?[e]:[]}function M(t){return t.filter(n=>n!=null)}async function ns(t,n,e){if(!t||!E.existsSync(t)||!E.lstatSync(t).isFile())return null;let s=e[t];return s||(s=(async()=>{var o;try{const r=(o=await Yt({filePath:t,fileName:n}))==null?void 0:o.data;return r==null?void 0:r.filename}catch(r){return I.error(`Failed to upload asset ${t}:`,r),null}})(),e[t]=s),s}const os=async(t,n)=>{const e=h.basename(t),s=await be.call({name:Te,path:x.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(s.status>=200&&s.status<400){const o=E.createWriteStream(n);await yt.pipeline(s.data,o)}else throw new Error(`download asset failed ${s.status}`)},rs=async(t,n)=>{await Promise.all(t.map(async e=>{try{await os(e,h.join(n,h.basename(e)))}catch(s){I.error(`Failed to export assets: ${e}, ${s}`)}}))};function Ke(t){return Ie.test(t)?[t]:Y.test(t)?(xe.lastIndex=0,Array.from(t.matchAll(xe)).map(e=>e[1]).filter(e=>!!e)):[]}async function de(t,n,e){const{getFilename:s,exportAssets:o}=e,r=h.join(n,s(t));if(E.mkdirSync(h.dirname(r),{recursive:!0}),E.writeFileSync(r,J.stringify(t)),o){const a=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))).map(i=>{const c=L.get(t,i);return Ke(c)}).flat().filter(Boolean);await rs(a,h.dirname(r))}}const ke=new Ee.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Re(t,n,e){var a;const s=re(t,i=>typeof i=="string"&&(Ie.test(i)||Y.test(i))),o=_t.default(2),r=s.map(i=>o(async()=>{try{const c=L.get(t,i),p=Ke(c);for(const u of p){const f=h.basename(u),g=e.getFilePath(u,i),S=g?`${g}:${f}`:f,j=ke.get(S);if(j){Y.test(c)||L.set(t,i,j);return}const v=await ns(g,f,n);v&&(Y.test(c)||L.set(t,i,v),ke.set(S,v))}}catch(c){I.error(`Failed to process upload for path ${i.join(".")}:`,c.message||c.reason)}})),l=await Promise.allSettled(r);(a=e.onFinish)==null||a.call(e,l)}async function Ye(t,{exportAssets:n,pageIds:e="all",componentIds:s="all",rawConfig:o,includeResources:r=!1}={}){var F,R,y,T,O,P;const l=e==="all"?t.pageIds:e,a=as({state:t,pageIds:l,componentIds:s==="all"?Object.keys(t.components):s}),i=(m,d)=>{var b;return{id:m.id,name:m.name,isTemplateSection:m.isTemplateSection??!1,templateDescription:m.templateDescription,component:m.component,config:m.config,visibility:m.visibility,properties:((b=m.locales)==null?void 0:b[d])??{}}},c=(m,d)=>{var b;return{id:m.id,createdAt:m.createdAt,updatedAt:m.updatedAt,publishedAt:m.publishedAt,isPublic:m.isPublic??!0,isTemplate:m.isTemplate??!1,meta:((b=m.locales)==null?void 0:b[d])??{},sections:M(m.sectionIds.map(k=>{const U=m.sections[k];return U&&i(U,d)}))}},p=M(t.supportedLocales.map(m=>m.locale).flatMap(m=>l.map(d=>{const b=t.pages[d];return b&&{locale:m,slug:b.slug,page:c(b,m)}}))),u=Je(),f=h.join(u,"pages");E.mkdirSync(f,{recursive:!0});const g=h.join(u,"components");E.mkdirSync(g,{recursive:!0});for(const{locale:m,slug:d,page:b}of p)await de(b,f,{getFilename:()=>`${ze(d)||"index"}.${m}.yml`,exportAssets:n});for(const m of a){const d=(F=t.components[m])==null?void 0:F.data;d&&await de(d,g,{getFilename:b=>`${b.name||"unnamed"}.${b.id}.yml`,exportAssets:n})}const S=h.join(u,".blocklet/pages/pages.config.yml");E.mkdirSync(h.dirname(S),{recursive:!0});const j={pages:M(l.map(m=>{const d=t.pages[m];return d&&{id:m,slug:d.slug}})),components:M(a.map(m=>{var b;const d=(b=t.components[m])==null?void 0:b.data;return d&&{id:m,name:d.name}})),...r?{resources:{components:M(Object.keys(((R=t.resources)==null?void 0:R.components)||{}).map(m=>{var d,b,k,U;return{id:m,name:(U=(k=(b=(d=t.resources)==null?void 0:d.components)==null?void 0:b[m])==null?void 0:k.component)==null?void 0:U.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};E.writeFileSync(S,J.stringify(j));const v=h.join(u,"config.source.json");if(o&&E.writeFileSync(v,JSON.stringify(o)),r){const m=h.join(u,"resources"),d=h.join(m,"components");E.mkdirSync(d,{recursive:!0});for(const b of Object.keys(((y=t==null?void 0:t.resources)==null?void 0:y.components)??{})){const k=(P=(O=(T=t.resources)==null?void 0:T.components)==null?void 0:O[b])==null?void 0:P.component;k&&await de(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:n})}}return u}async function Oe(t,{importAssets:n,includeResources:e}={}){var r,l,a;if(!E.existsSync(t))return null;let s,o=!1;try{E.lstatSync(t).isDirectory()?s=t:/\.(tgz|gz|tar)$/.test(t)&&(o=!0,s=Je(),await St.x({file:t,C:s}));const i=fe.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s,absolute:!0}).at(0),c=i&&h.join(h.dirname(i),"../../pages"),p=i&&h.join(h.dirname(i),"../../components"),u=i&&h.join(h.dirname(i),"../../chunks");if(!i)return null;const f=J.parse(E.readFileSync(i).toString()),g=(y,T,O)=>{let P=h.join(y,`${T}${O?`.${O}`:""}.yml`);return(!E.existsSync(P)||!E.lstatSync(P).isFile())&&(P=h.join(y,T,`index${O?`.${O}`:""}.yml`),!E.existsSync(P)||!E.lstatSync(P))?null:J.parse(E.readFileSync(P).toString())},S=(y,T)=>{try{const O=fe.globSync(`*.${T}.yml`,{cwd:y,absolute:!0})[0];return O?J.parse(E.readFileSync(O).toString()):null}catch(O){I.error("parse component error",O)}return null},j=M(f.pages.map(({slug:y})=>{var m;const T=M(f.supportedLocales.map(({locale:d})=>{const b=c?g(c,ze(y),d):void 0;if(b)return{locale:d,page:b};const k=c?g(c,y,d):void 0;return k&&{locale:d,page:k}})),O=(m=T[0])==null?void 0:m.page;if(!O)return null;const P=O.sections.map(d=>{const b=d.id||ye();return{id:b,component:d.component,config:d.config,name:d.name,isTemplateSection:d.isTemplateSection??!1,templateDescription:d.templateDescription,visibility:d.visibility,locales:Object.fromEntries(M(T.map(({locale:k,page:U})=>{const _e=U.sections.find(et=>et.id===b);return _e&&[k,_e.properties]})))}});return{id:O.id||ye(),createdAt:O.createdAt,updatedAt:O.updatedAt,publishedAt:O.publishedAt,isPublic:O.isPublic??!0,isTemplate:O.isTemplate??!1,slug:y,sections:Object.fromEntries(P.map(d=>[d.id,d])),sectionIds:P.map(d=>d.id),locales:Object.fromEntries(T.map(({locale:d,page:b})=>[d,b.meta]))}})),v=p?M(((r=f.components)==null?void 0:r.map(({id:y})=>S(p,y)))??[]):[];if(n){const y=(...T)=>{I.info(`[${o?h.basename(t):h.basename(h.join(t,"../../../../"))}] importAssets:`,...T)};try{y("wait image-bin api ready"),await Dt.default({resources:[`${be.getComponentWebEndpoint(kt)}/api/sdk/uploads`],validateStatus:P=>P>=200&&P<=500}),y("image-bin api is ready");const T={},O={};y("start to upload assets"),await Promise.allSettled([Re(v,T,{getFilePath:P=>p&&h.join(p,P),onFinish:P=>{y(`upload ${P.length} component assets`)}}),Re(j,O,{getFilePath:(P,m)=>{const d=L.get(j,m.slice(0,1));return c&&h.join(c,h.dirname(d.slug),P)},onFinish:P=>{y(`upload ${P.length} page assets`)}})]),y("upload assets done"),global.gc&&global.gc()}catch(T){y("Error during asset import:",T)}}const F={};if(e){const y=i&&h.join(h.dirname(i),"../../resources/components"),T=M(((a=(l=f.resources)==null?void 0:l.components)==null?void 0:a.map(({id:O})=>S(y,O)))??[]);T.length>0&&(F.components=Object.fromEntries(T.map((O,P)=>[O.id,{index:P,component:O}])))}const R={};if(u&&E.existsSync(u)){const y=E.readdirSync(u);for(const T of y)R[T]=h.join(u,T)}return{supportedLocales:f.supportedLocales,pageIds:j.map(y=>y.id),components:Object.fromEntries(v.map((y,T)=>[y.id,{index:T,data:y}])),pages:Object.fromEntries(j.map(y=>[y.id,y])),config:f.config||{},resources:F,chunks:R}}finally{o&&s&&E.rmSync(s,{force:!0,recursive:!0})}}async function we(t,n,{pages:e,pageMergeMode:s="byUpdateTime",deletePages:o=!1,publishMode:r=void 0}={}){try{r&&$e(r)}catch(p){I.error("clear preload page cache error",{error:p})}const{pageIds:l,pages:a,supportedLocales:i}=t;for(const p of e??l){const u=a[p];if(!u){const f=n.pageIds.indexOf(p);f!==-1&&o&&(n.pageIds.splice(f,1),delete n.pages[p]);continue}if(n.pageIds.includes(u.id)){if(s==="replace")n.pages[u.id]=u;else if(s==="byUpdateTime"){const f=n.pages[u.id];(!f||u.updatedAt&&u.updatedAt>f.updatedAt)&&(n.pages[u.id]=u)}}else n.pageIds.push(u.id),n.pages[u.id]=u}if(o&&!e)for(const p of n.pageIds)t.pageIds.includes(p)||delete n.pages[p],n.pageIds=[...n.pageIds].filter(u=>t.pageIds.includes(u));if(n.supportedLocales.splice(0,n.supportedLocales.length),n.supportedLocales.push(...L.cloneDeep(i)),o)for(const p of Object.keys(n.components))delete n.components[p];let c=JSON.parse(JSON.stringify(t.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([p,u])=>{const f=await We(u==null?void 0:u.data);return[p,{...u,data:f}]}))),Object.assign(n.components,c),Object.assign(n.config,JSON.parse(JSON.stringify(t.config))),n.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const We=V.memoize(async t=>{var n;if(!L.isEmpty(t==null?void 0:t.properties))return t;if(((n=t==null?void 0:t.renderer)==null?void 0:n.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e&&e.includes("PROPERTIES_SCHEMA"))try{const s=await Ge(e,"PROPERTIES_SCHEMA",t.id);s&&s.length>0&&t&&(t.properties={},s.forEach((o,r)=>{t!=null&&t.properties&&(t.properties[o.id]={index:r,data:o})}))}catch(s){I.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:s})}}return t},{keyGenerator:t=>{var l;const n=(t==null?void 0:t.id)||"",e=(t==null?void 0:t.name)||"",s=((l=t==null?void 0:t.renderer)==null?void 0:l.type)||"",o=(t==null?void 0:t.properties)||{},r=ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",n,e,s,r])},lruOptions:{max:100,ttl:1e3*60*60}});function as({state:t,pageIds:n=[],componentIds:e=[]}){var l;const s=(a,i=new Set)=>(Array.isArray(a)&&a.forEach(c=>s(c,i)),a&&typeof a=="object"&&(typeof a.componentId=="string"&&i.add(a.componentId),Object.values(a).forEach(c=>s(c,i))),i),o=new Set(e);for(const a of n){const i=t.pages[a];s(i,o)}const r=[...o];for(;r.length;){const a=r.shift();o.has(a)||o.add(a);const i=(l=t.components[a])==null?void 0:l.data;if(i)for(const c of s(i))o.has(c)||r.push(c)}return[...o]}let ae,H,Pe,Ce,je;function Qe(){return ae=(async()=>{const t=be.getResources({types:[{did:Te,type:ge},{did:Kt,type:ge}]});H=(await Promise.all(t.map(async e=>{const s=e.path?await Oe(e.path,{importAssets:!1}):void 0;return s?{blockletId:e.did,state:s,blockletTitle:e.title}:void 0}))).filter(e=>!!e),Pe=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:s.blockletId}]:[]))),{});const n=H.reduce((e,s)=>Object.assign(e,Object.fromEntries(Object.values(s.state.components).map(o=>[o.data.id,{blockletId:s.blockletId,component:o.data}]))),{});Ce=Object.fromEntries(await Promise.all(Object.entries(n).map(async([e,s])=>{const o=await We(s.component);return[e,{...s,component:o}]}))),je=H.reduce((e,s)=>Object.assign(e,s.state.chunks),{})})(),ae}function Xe(t){const n=L.debounce(async()=>{await Qe().catch(e=>{I.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:H,pages:Pe,components:Ce,chunks:je}))},3e3,{leading:!1,trailing:!0});return n(),w.default.events.on(w.default.Events.componentAdded,n),w.default.events.on(w.default.Events.componentRemoved,n),w.default.events.on(w.default.Events.componentStarted,n),w.default.events.on(w.default.Events.componentStopped,n),w.default.events.on(w.default.Events.componentUpdated,n),w.default.events.on(he,n),()=>{w.default.events.off(w.default.Events.componentAdded,n),w.default.events.off(w.default.Events.componentRemoved,n),w.default.events.off(w.default.Events.componentStarted,n),w.default.events.off(w.default.Events.componentStopped,n),w.default.events.off(w.default.Events.componentUpdated,n),w.default.events.off(he,n)}}const Ze=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),ne=globalThis;var Le;(Le=ne[Ze])==null||Le.call(ne);ne[Ze]=Xe(async({pages:t,components:n})=>{const{projectIds:e}=Q;I.info(`start update resource states projects(${e.length})`,e),await Promise.race([new Promise(s=>{setTimeout(()=>{I.error("update resource states timeout"),s({})},30*1e3)}),Promise.all(e.map(async s=>{const o=Q.shared(s);o.syncedStore.resources.pages=t;const r=await $.findByPk(s);if(r!=null&&r.useAllResources)o.syncedStore.resources.components=n;else{const a=(await ce.findAll({where:{projectId:s}})).map(c=>c.componentId),i=Object.fromEntries(Object.entries(n||{}).filter(([c])=>a.includes(c)));o.syncedStore.resources.components=i}I.info(`update [${s}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(s=>{I.error("update resource states failed:",s)})});async function is(){I.info("trigger reload all project resource"),w.default.events.emit(he)}async function Ae({ensureLoaded:t=!0}={}){return t&&(ae??(ae=Qe()),await ae),{states:H,pages:Pe,components:Ce,chunks:je}}exports.COMPONENT_DID=Te;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=Fe;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=me;exports.PUBLISH_MODES=ts;exports.Project=$;exports.RESOURCE_TYPE=ge;exports.SITE_STATE_PATH=z;exports.STATE_MODES=es;exports.SiteState=Q;exports.clearPreloadComponentsCache=qe;exports.clearPreloadComponentsCacheByMode=$e;exports.fromPackage=Oe;exports.getComponentFromState=W;exports.getComponentFromStateByName=Gt;exports.getExportSchemaValueFromCode=Ge;exports.getMultiTenantAllProjectAccessPassports=Nt;exports.getPreloadComponent=Ve;exports.getPreloadComponents=Bt;exports.getPreloadComponentsCacheKey=Be;exports.getResourceStates=Ae;exports.initPackResourceStates=Xe;exports.isMultiTenant=Lt;exports.logger=I;exports.mergeState=we;exports.nextId=ye;exports.toPackage=Ye;exports.triggerReloadAllProjectResource=is;
|
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-CsoZOwUe.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-CsoZOwUe.js"),P=require("@blocklet/crawler/middlewares"),W=require("@blocklet/pages-kit/types"),J=require("@blocklet/pages-kit/utils/preload"),G=require("@blocklet/sdk/lib/component"),U=require("@blocklet/sdk/lib/config"),z=require("cheerio/slim"),K=require("express"),O=require("fs"),Q=require("mustache"),A=require("path"),S=require("ufo"),D=e=>e&&e.__esModule?e:{default:e};function V(e){if(e&&e.__esModule)return e;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const p=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,p.get?p:{enumerable:!0,get:()=>e[t]})}}return s.default=e,Object.freeze(s)}const d=D(U),I=V(z),X=D(Q),Y=["/assets/"],q=()=>[!0,"true"].includes(d.default.env.preferences.allowCrawler);function R(){q()?P.initCronCrawlBlocklet({time:"30 30 */12 * * *",options:{}}):P.cancelCronCrawlBlocklet()}R();d.default.events.on(d.default.Events.envUpdate,R);function Z({app:e,viteDevServer:s,state:t}){let p;if(s){const r=O.readFileSync(A.resolve(process.cwd(),"./index.html"),"utf-8");e.use(async(b,j,y)=>{const v=b.originalUrl;p=await s.transformIndexHtml(v,r),y()})}else p=O.readFileSync(A.resolve(process.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const C=K.Router();C.use(P.initSEOMiddleware({autoReturnHtml:!1,allowCrawler:q})),C.get("/:path(*)?",async(r,b,j)=>{var $,E,L;if(Y.some(c=>{var i;return(i=r.path)==null?void 0:i.startsWith(c)})){j();return}const y=performance.now(),v=()=>Math.round(performance.now()-y),x="production";let o,u,g=p;if(r.path.startsWith("/pages")){const c=r.params.lang,i=r.cookies.nf_lang,w=new Set([...d.default.env.languages.map(h=>h.code)]);let f=(c&&w.has(c)?c:void 0)||(w.has(i)?i:void 0)||[...w][0];if((!f||!(($=t.supportedLocales)!=null&&$.find(h=>h.locale===f)))&&(f=((L=(E=t.supportedLocales)==null?void 0:E[0])==null?void 0:L.locale)||""),f){const h=[];Object.values(t.pages).forEach(l=>{const N=Object.values((l==null?void 0:l.sections)??{}).filter(a=>{var _;return a.component==="custom-component"&&((_=a.config)==null?void 0:_.componentId)}).map(a=>{var _,M;return{id:a.id,componentId:a.config.componentId,useCache:a.config.useCache,cacheDuration:a.config.cacheDuration,properties:(M=(_=a.locales)==null?void 0:_[f])==null?void 0:M.properties}});h.push(...N)});const H=new Promise(l=>{setTimeout(()=>{k.logger.error("get preload components timeout"),l({})},90*1e3)});try{await Promise.race([H,k.getPreloadComponents({mode:x,req:r,state:t,locale:f,instances:h,module:W.PreloadComponentScriptModule.UMD_FN}).then(l=>{l&&(u=J.injectPreloadComponents(l))})])}catch(l){k.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements"),k.logger.warn(l)}}}try{const c=(o==null?void 0:o.title)||d.default.env.appName,i=(o==null?void 0:o.description)||d.default.env.appDescription,w=S.withQuery(S.joinURL(d.default.env.appUrl,"/.well-known/service/blocklet/og.png"),{title:c,description:i});g=X.default.render(p,{ogTitle:c,ogDescription:i,ogImage:F(o==null?void 0:o.image)||w,pagesPublishedAt:(t==null?void 0:t.config.publishedAt)||new Date().getTime()})}catch{}const n=t==null?void 0:t.config.fontFamily,B=r.query.mode==="draft"||r.url.includes("preview"),m=I.load(g);m("head").find("#injected-head-elements").replaceWith(`
|
|
2
2
|
${o!=null&&o.backgroundColor?`<meta name="theme-color" content="${o.backgroundColor}" /><style>html,body,#app {background-color: ${o.backgroundColor} !important;}</style>`:""}
|
|
3
3
|
${n!=null&&n.title?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${n.title}&display=swap">`:""}
|
|
4
4
|
${n!=null&&n.description&&(n==null?void 0:n.description)!==(n==null?void 0:n.title)?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${n.description}&display=swap">`:""}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
});
|
|
15
15
|
<\/script>
|
|
16
16
|
|
|
17
|
-
${
|
|
17
|
+
${B?`<script src="https://cdn.tailwindcss.com"><\/script>
|
|
18
18
|
<script>
|
|
19
19
|
window.tailwind.config = {
|
|
20
20
|
darkMode: "class",
|
|
21
21
|
};
|
|
22
22
|
<\/script>`:""}
|
|
23
|
-
`);const
|
|
23
|
+
`);const T=U.getBlockletJs();if(T&&m('script[src="__blocklet__.js"]').replaceWith(`<script>${T}<\/script>`),u!=null&&u.html&&m("head").find("#injected-html-elements").replaceWith(u.html),r.cachedHtml){const c=I.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 s=G.getComponentMountPoint("image-bin");return s&&e&&!/^(https?:\/\/|\/)/.test(e)?d.default.env.appUrl+S.joinURL(s,"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-CsoZOwUe.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-CsoZOwUe.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;
|
|
@@ -498,9 +498,9 @@ async function as({
|
|
|
498
498
|
return null;
|
|
499
499
|
const n = await Ve(o, "getServerSideProps");
|
|
500
500
|
if (!n) return null;
|
|
501
|
-
const r = new Promise((a
|
|
501
|
+
const r = new Promise((a) => {
|
|
502
502
|
setTimeout(() => {
|
|
503
|
-
|
|
503
|
+
I.error("getServerSideProps timeout"), a({});
|
|
504
504
|
}, je * 1e3);
|
|
505
505
|
});
|
|
506
506
|
return await Promise.race([
|
|
@@ -509,7 +509,7 @@ async function as({
|
|
|
509
509
|
code: `${n}
|
|
510
510
|
|
|
511
511
|
export async function getServerSidePropsWrapper(props) {
|
|
512
|
-
const { location, fetch } = props;
|
|
512
|
+
const { location, fetch, props: componentProps } = props;
|
|
513
513
|
// 使用局部变量而不是全局变量
|
|
514
514
|
const originalLocation = typeof window !== 'undefined' ? window.location : undefined;
|
|
515
515
|
const originalFetch = globalThis.fetch;
|
|
@@ -517,7 +517,7 @@ export async function getServerSidePropsWrapper(props) {
|
|
|
517
517
|
try {
|
|
518
518
|
globalThis.location = location;
|
|
519
519
|
globalThis.fetch = fetch;
|
|
520
|
-
return await getServerSideProps(
|
|
520
|
+
return await getServerSideProps(componentProps);
|
|
521
521
|
} finally {
|
|
522
522
|
// 清理全局状态
|
|
523
523
|
if (originalLocation) globalThis.location = originalLocation;
|
|
@@ -1472,6 +1472,11 @@ var Me;
|
|
|
1472
1472
|
ee[Qe] = bs(async ({ pages: t, components: o }) => {
|
|
1473
1473
|
const { projectIds: e } = oe;
|
|
1474
1474
|
I.info(`start update resource states projects(${e.length})`, e), await Promise.race([
|
|
1475
|
+
new Promise((s) => {
|
|
1476
|
+
setTimeout(() => {
|
|
1477
|
+
I.error("update resource states timeout"), s({});
|
|
1478
|
+
}, 30 * 1e3);
|
|
1479
|
+
}),
|
|
1475
1480
|
Promise.all(
|
|
1476
1481
|
e.map(async (s) => {
|
|
1477
1482
|
const n = oe.shared(s);
|
|
@@ -1490,12 +1495,7 @@ ee[Qe] = bs(async ({ pages: t, components: o }) => {
|
|
|
1490
1495
|
components: Object.keys(n.syncedStore.resources.components || {}).length
|
|
1491
1496
|
});
|
|
1492
1497
|
})
|
|
1493
|
-
)
|
|
1494
|
-
new Promise((s, n) => {
|
|
1495
|
-
setTimeout(() => {
|
|
1496
|
-
n(new Error("timeout to update resource states"));
|
|
1497
|
-
}, 30 * 1e3);
|
|
1498
|
-
})
|
|
1498
|
+
)
|
|
1499
1499
|
]).catch((s) => {
|
|
1500
1500
|
I.error("update resource states failed:", s);
|
|
1501
1501
|
});
|
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-BAO_o-xn.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,24 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as k, b as H } from "./_chunks/site-state-BAO_o-xn.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
6
|
import a, { getBlockletJs as z } from "@blocklet/sdk/lib/config";
|
|
7
|
-
import * as
|
|
7
|
+
import * as A from "cheerio/slim";
|
|
8
8
|
import { Router as V } from "express";
|
|
9
|
-
import { readFileSync as
|
|
9
|
+
import { readFileSync as I } from "fs";
|
|
10
10
|
import X from "mustache";
|
|
11
|
-
import { resolve as
|
|
12
|
-
import { withQuery as Y, joinURL as
|
|
13
|
-
const Z = ["/assets/"],
|
|
14
|
-
function
|
|
15
|
-
|
|
11
|
+
import { resolve as j } from "path";
|
|
12
|
+
import { withQuery as Y, joinURL as U } from "ufo";
|
|
13
|
+
const Z = ["/assets/"], M = () => [!0, "true"].includes(a.env.preferences.allowCrawler);
|
|
14
|
+
function D() {
|
|
15
|
+
M() ? W({
|
|
16
16
|
time: "30 30 */12 * * *",
|
|
17
17
|
options: {}
|
|
18
18
|
}) : N();
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
a.events.on(a.Events.envUpdate,
|
|
20
|
+
D();
|
|
21
|
+
a.events.on(a.Events.envUpdate, D);
|
|
22
22
|
function me({
|
|
23
23
|
app: c,
|
|
24
24
|
viteDevServer: h,
|
|
@@ -27,21 +27,21 @@ function me({
|
|
|
27
27
|
}) {
|
|
28
28
|
let C;
|
|
29
29
|
if (h) {
|
|
30
|
-
const t = j(
|
|
31
|
-
c.use(async (
|
|
32
|
-
const _ =
|
|
33
|
-
C = await h.transformIndexHtml(_, t),
|
|
30
|
+
const t = I(j(process.cwd(), "./index.html"), "utf-8");
|
|
31
|
+
c.use(async (y, $, v) => {
|
|
32
|
+
const _ = y.originalUrl;
|
|
33
|
+
C = await h.transformIndexHtml(_, t), v();
|
|
34
34
|
});
|
|
35
35
|
} else
|
|
36
|
-
C = j(
|
|
37
|
-
const
|
|
38
|
-
|
|
36
|
+
C = I(j(process.env.BLOCKLET_APP_DIR, "dist/index.html"), "utf-8");
|
|
37
|
+
const b = V();
|
|
38
|
+
b.use(
|
|
39
39
|
J({
|
|
40
40
|
autoReturnHtml: !1,
|
|
41
|
-
allowCrawler:
|
|
41
|
+
allowCrawler: M
|
|
42
42
|
})
|
|
43
|
-
),
|
|
44
|
-
var T,
|
|
43
|
+
), b.get("/:path(*)?", async (t, y, $) => {
|
|
44
|
+
var T, E, S;
|
|
45
45
|
if (Z.some((r) => {
|
|
46
46
|
var i;
|
|
47
47
|
return (i = t.path) == null ? void 0 : i.startsWith(r);
|
|
@@ -49,41 +49,41 @@ function me({
|
|
|
49
49
|
$();
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
|
-
const
|
|
52
|
+
const v = performance.now(), _ = () => Math.round(performance.now() - v), O = "production";
|
|
53
53
|
let e, p, f = C;
|
|
54
54
|
if (t.path.startsWith("/pages")) {
|
|
55
55
|
const r = t.params.lang, i = t.cookies.nf_lang, g = /* @__PURE__ */ new Set([...a.env.languages.map((u) => u.code)]);
|
|
56
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 = ((
|
|
57
|
+
if ((!d || !((T = n.supportedLocales) != null && T.find((u) => u.locale === d))) && (d = ((S = (E = n.supportedLocales) == null ? void 0 : E[0]) == null ? void 0 : S.locale) || ""), d) {
|
|
58
58
|
const u = [];
|
|
59
59
|
Object.values(n.pages).forEach((l) => {
|
|
60
|
-
const
|
|
60
|
+
const B = Object.values((l == null ? void 0 : l.sections) ?? {}).filter(
|
|
61
61
|
(s) => {
|
|
62
62
|
var w;
|
|
63
63
|
return s.component === "custom-component" && ((w = s.config) == null ? void 0 : w.componentId);
|
|
64
64
|
}
|
|
65
65
|
).map((s) => {
|
|
66
|
-
var w,
|
|
66
|
+
var w, L;
|
|
67
67
|
return {
|
|
68
68
|
id: s.id,
|
|
69
69
|
componentId: s.config.componentId,
|
|
70
70
|
useCache: s.config.useCache,
|
|
71
71
|
cacheDuration: s.config.cacheDuration,
|
|
72
|
-
properties: (
|
|
72
|
+
properties: (L = (w = s.locales) == null ? void 0 : w[d]) == null ? void 0 : L.properties
|
|
73
73
|
};
|
|
74
74
|
});
|
|
75
|
-
u.push(...
|
|
75
|
+
u.push(...B);
|
|
76
76
|
});
|
|
77
|
-
const
|
|
77
|
+
const x = new Promise((l) => {
|
|
78
78
|
setTimeout(() => {
|
|
79
|
-
|
|
79
|
+
k.error("get preload components timeout"), l({});
|
|
80
80
|
}, 90 * 1e3);
|
|
81
81
|
});
|
|
82
82
|
try {
|
|
83
83
|
await Promise.race([
|
|
84
|
-
|
|
84
|
+
x,
|
|
85
85
|
H({
|
|
86
|
-
mode:
|
|
86
|
+
mode: O,
|
|
87
87
|
req: t,
|
|
88
88
|
state: n,
|
|
89
89
|
locale: d,
|
|
@@ -94,12 +94,12 @@ function me({
|
|
|
94
94
|
})
|
|
95
95
|
]);
|
|
96
96
|
} catch (l) {
|
|
97
|
-
|
|
97
|
+
k.warn("getPreloadComponents timeout in promise race, skip inject html elements"), k.warn(l);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
try {
|
|
102
|
-
const r = (e == null ? void 0 : e.title) || a.env.appName, i = (e == null ? void 0 : e.description) || a.env.appDescription, g = Y(
|
|
102
|
+
const r = (e == null ? void 0 : e.title) || a.env.appName, i = (e == null ? void 0 : e.description) || a.env.appDescription, g = Y(U(a.env.appUrl, "/.well-known/service/blocklet/og.png"), {
|
|
103
103
|
title: r,
|
|
104
104
|
description: i
|
|
105
105
|
});
|
|
@@ -111,7 +111,7 @@ function me({
|
|
|
111
111
|
});
|
|
112
112
|
} catch {
|
|
113
113
|
}
|
|
114
|
-
const o = n == null ? void 0 : n.config.fontFamily,
|
|
114
|
+
const o = n == null ? void 0 : n.config.fontFamily, R = t.query.mode === "draft" || t.url.includes("preview"), m = A.load(f);
|
|
115
115
|
m("head").find("#injected-head-elements").replaceWith(`
|
|
116
116
|
${e != null && e.backgroundColor ? `<meta name="theme-color" content="${e.backgroundColor}" /><style>html,body,#app {background-color: ${e.backgroundColor} !important;}</style>` : ""}
|
|
117
117
|
${o != null && o.title ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${o.title}&display=swap">` : ""}
|
|
@@ -128,24 +128,24 @@ function me({
|
|
|
128
128
|
});
|
|
129
129
|
<\/script>
|
|
130
130
|
|
|
131
|
-
${
|
|
131
|
+
${R ? `<script src="https://cdn.tailwindcss.com"><\/script>
|
|
132
132
|
<script>
|
|
133
133
|
window.tailwind.config = {
|
|
134
134
|
darkMode: "class",
|
|
135
135
|
};
|
|
136
136
|
<\/script>` : ""}
|
|
137
137
|
`);
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
140
|
-
const r =
|
|
138
|
+
const P = z();
|
|
139
|
+
if (P && m('script[src="__blocklet__.js"]').replaceWith(`<script>${P}<\/script>`), p != null && p.html && m("head").find("#injected-html-elements").replaceWith(p.html), t.cachedHtml) {
|
|
140
|
+
const r = A.load(t.cachedHtml);
|
|
141
141
|
m("body").html(r("body").html() || "");
|
|
142
142
|
}
|
|
143
|
-
f = m.html(),
|
|
144
|
-
}), c.use(
|
|
143
|
+
f = m.html(), y.send(f), k.info(`[html] render: ${t.path}, ${_()}ms`), m.root().children().remove(), f = null, e = null, p = null;
|
|
144
|
+
}), c.use(b);
|
|
145
145
|
}
|
|
146
146
|
function F(c) {
|
|
147
147
|
const h = Q("image-bin");
|
|
148
|
-
return h && c && !/^(https?:\/\/|\/)/.test(c) ? a.env.appUrl +
|
|
148
|
+
return h && c && !/^(https?:\/\/|\/)/.test(c) ? a.env.appUrl + U(h, "uploads", c) : c;
|
|
149
149
|
}
|
|
150
150
|
export {
|
|
151
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-BAO_o-xn.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-BAO_o-xn.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.60",
|
|
4
4
|
"description": "Pages Kit inner components library",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -67,21 +67,21 @@
|
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@arcblock/did-auth": "^1.19.15",
|
|
69
69
|
"@arcblock/did-auth-storage-nedb": "^1.7.1",
|
|
70
|
-
"@arcblock/did-connect": "^2.12.
|
|
71
|
-
"@arcblock/react-hooks": "^2.12.
|
|
72
|
-
"@arcblock/ux": "^2.12.
|
|
73
|
-
"@blocklet/ai-kit": "^0.1.
|
|
74
|
-
"@blocklet/ai-runtime": "^0.4.
|
|
75
|
-
"@blocklet/code-editor": "^0.4.
|
|
76
|
-
"@blocklet/crawler": "^2.1.
|
|
70
|
+
"@arcblock/did-connect": "^2.12.28",
|
|
71
|
+
"@arcblock/react-hooks": "^2.12.28",
|
|
72
|
+
"@arcblock/ux": "^2.12.28",
|
|
73
|
+
"@blocklet/ai-kit": "^0.1.72",
|
|
74
|
+
"@blocklet/ai-runtime": "^0.4.252",
|
|
75
|
+
"@blocklet/code-editor": "^0.4.252",
|
|
76
|
+
"@blocklet/crawler": "^2.1.208",
|
|
77
77
|
"@blocklet/embed": "^0.2.3",
|
|
78
78
|
"@blocklet/js-sdk": "^1.16.40",
|
|
79
79
|
"@blocklet/logger": "1.16.36",
|
|
80
|
-
"@blocklet/quickjs": "^0.4.
|
|
80
|
+
"@blocklet/quickjs": "^0.4.252",
|
|
81
81
|
"@blocklet/sdk": "^1.16.40",
|
|
82
|
-
"@blocklet/studio-ui": "^0.4.
|
|
82
|
+
"@blocklet/studio-ui": "^0.4.252",
|
|
83
83
|
"@blocklet/tracker": "^1.16.40",
|
|
84
|
-
"@blocklet/ui-react": "^2.12.
|
|
84
|
+
"@blocklet/ui-react": "^2.12.28",
|
|
85
85
|
"@blocklet/uploader": "^0.1.78",
|
|
86
86
|
"@blocklet/uploader-server": "^0.1.90",
|
|
87
87
|
"@emotion/cache": "^11.13.1",
|
|
@@ -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
|
|
205
|
+
"@blocklet/pages-kit-block-studio": "^0.4.60",
|
|
206
|
+
"@blocklet/pages-kit": "^0.4.60"
|
|
207
207
|
},
|
|
208
208
|
"devDependencies": {
|
|
209
209
|
"@trivago/prettier-plugin-sort-imports": "^5.2.1",
|