@blocklet/pages-kit-inner-components 0.4.155 → 0.4.157
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-Cio9RMaq.js → site-state-Bd3-qe58.js} +5 -5
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +1 -1
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/chunks/{site-state-BjimJvYN.js → site-state-Ct-Mnf1U.js} +418 -408
- package/lib/es/components.js +1 -1
- package/lib/es/project-html.js +1 -1
- package/lib/es/resources.js +1 -1
- package/lib/es/site-state.js +1 -1
- package/package.json +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";var Ot=Object.defineProperty;var At=(e,s,t)=>s in e?Ot(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t;var x=(e,s,t)=>At(e,typeof s!="symbol"?s+"":s,t);const Tt=require("@blocklet/pages-kit/builtin/utils"),
|
|
1
|
+
"use strict";var Ot=Object.defineProperty;var At=(e,s,t)=>s in e?Ot(e,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[s]=t;var x=(e,s,t)=>At(e,typeof s!="symbol"?s+"":s,t);const Tt=require("@blocklet/pages-kit/builtin/utils"),ye=require("@blocklet/pages-kit/types"),ie=require("@blocklet/pages-kit/utils/property"),Q=require("@blocklet/quickjs"),Pt=require("@blocklet/sdk/lib/config"),Fe=require("lru-cache"),st=require("node-fetch"),M=require("ufo"),ee=require("crypto"),jt=require("@blocklet/logger"),_t=require("@blocklet/pages-kit/utils/builtin"),nt=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),qe=require("@blocklet/sdk/lib/component"),Ct=require("autoprefixer"),Dt=require("esbuild"),b=require("fs"),vt=require("postcss"),xt=require("tailwindcss"),kt=require("typescript"),W=require("@syncedstore/core"),Nt=require("yjs"),S=require("path"),Rt=require("@blocklet/pages-kit/utils/data-source"),be=require("@blocklet/pages-kit/utils/route"),Lt=require("lodash"),Mt=require("@reactivedata/reactive"),ke=require("glob"),Ut=require("lib0/decoding"),Ft=require("lib0/encoding"),qt=require("lodash/cloneDeep"),$t=require("lodash/debounce"),Bt=require("lodash/get"),Gt=require("lodash/isEmpty"),Ht=require("lodash/pick"),Vt=require("lodash/set"),Jt=require("lodash/union"),zt=require("nanoid"),Kt=require("p-limit"),Yt=require("stream/promises"),Wt=require("tar"),Qt=require("wait-on"),ne=require("y-protocols/awareness"),Ce=require("y-protocols/sync"),Xt=require("yaml"),Zt=require("lodash/isNil"),C=require("sequelize");require("sqlite3");require("@blocklet/pages-kit/types/state");const N=e=>e&&e.__esModule?e:{default:e};function pe(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 n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return s.default=e,Object.freeze(s)}const O=N(Pt),es=N(st),ts=N(jt),ss=N(Ct),ns=pe(Dt),os=N(vt),as=N(xt),L=N(kt),B=pe(Nt),rs=N(S),De=pe(Ut),k=pe(Ft),is=N(qt),ot=N($t),$e=N(Bt),cs=N(Gt),ls=N(Ht),Ye=N(Vt),ps=N(Jt),ds=N(Kt),us=N(Qt),X=pe(Xt),fs=N(Zt);O.default.env.mode;O.default.env.OPENAI_API_KEY||process.env.OPENAI_API_KEY;O.default.env.OPENAI_BASE_URL||process.env.OPENAI_BASE_URL;O.default.env.TRANSLATE_ADDITIONAL_PROMPT||process.env.TRANSLATE_ADDITIONAL_PROMPT;O.default.env.PAGE_CONTENT_ADDITIONAL_PROMPT||process.env.PAGE_CONTENT_ADDITIONAL_PROMPT;const ms="image-bin";O.default.env.INIT_TEMPLATE_PATH;const gs=process.env.DATABASE_URL||rs.default.join(O.default.env.dataDir,"db/pages-kit.db"),We=O.default,hs=()=>O.default.env.tenantMode==="multiple",ys=()=>{var e;return(fs.default(We.env.preferences.multiTenantAllProjectAccessPassports)?[]:(e=We.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:e.split(","))||[]},I=ts.default("pages-kit"),Ss=C.DataTypes.sqlite.DATE.parse;C.DataTypes.sqlite.DATE.parse=(e,s)=>typeof e=="number"?new Date(e):Ss(e,s);const de=new C.Sequelize({dialect:"sqlite",storage:gs,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});de.query("pragma journal_mode = WAL;");de.query("pragma synchronous = normal;");de.query("pragma journal_size_limit = 67108864;");class Te extends C.Model{}Te.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:de,tableName:"ProjectComponents",timestamps:!1});class J extends C.Model{static async getProjectByIdOrSlug(s){return J.findOne({where:{[C.Op.or]:[{id:s},{slug:s}]}})}}J.init({id:{type:C.DataTypes.UUID,defaultValue:C.DataTypes.UUIDV4,primaryKey:!0},name:{type:C.DataTypes.STRING,allowNull:!1},description:C.DataTypes.TEXT,createdAt:C.DataTypes.DATE,updatedAt:C.DataTypes.DATE,createdBy:{type:C.DataTypes.STRING,allowNull:!1},updatedBy:{type:C.DataTypes.STRING,allowNull:!1},slug:C.DataTypes.STRING,icon:C.DataTypes.STRING,pinnedAt:C.DataTypes.DATE,useAllResources:C.DataTypes.BOOLEAN,npmSecret:C.DataTypes.STRING,relatedBlocklets:{type:C.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(e){this.setDataValue("relatedBlocklets",JSON.stringify(e||{}))}}},{sequelize:de,paranoid:!0});J.hasMany(Te,{foreignKey:"projectId",as:"components"});const ws=async(e,{componentId:s})=>{const t=`@tailwind components;
|
|
2
2
|
@tailwind utilities;
|
|
3
3
|
`,n=`.CustomComponent_${s}`;return(await os.default([as.default({content:[{raw:e,extension:"tsx"}]}),ss.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),a=>{a.walkRules(p=>{p.selectors=p.selectors.map(c=>c.replace(/\.(.+)/g,`${n}.$1,${n} .$1`))})}]).process(t)).css},bs=async(e,{componentId:s})=>{const t=await ws(e,{componentId:s});return`export const __PagesKit_CSS__ = ${JSON.stringify(t)};
|
|
4
4
|
|
|
5
5
|
${e}
|
|
6
|
-
`},Qe=Q.memoize(async(e,s)=>{let t=L.default.transpileModule(e,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.ESNext},transformers:{before:[nt.createBuiltinModuleTransformer(L.default)]}}).outputText;if(s.tailwind&&(t=await bs(t,{componentId:s.componentId})),s.module===
|
|
6
|
+
`},Qe=Q.memoize(async(e,s)=>{let t=L.default.transpileModule(e,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.ESNext},transformers:{before:[nt.createBuiltinModuleTransformer(L.default)]}}).outputText;if(s.tailwind&&(t=await bs(t,{componentId:s.componentId})),s.module===ye.PreloadComponentScriptModule.ESM)return t;const n=L.default.transpileModule(t,{compilerOptions:{jsx:L.default.JsxEmit.React,target:L.default.ScriptTarget.ES2016,module:L.default.ModuleKind.CommonJS,moduleResolution:L.default.ModuleResolutionKind.Node16}}).outputText;return s.module===ye.PreloadComponentScriptModule.CJS?n:Is(s.moduleName,n)},{keyGenerator:(e,s)=>{const t=ee.createHash("md5").update(e).digest("hex"),n={...s,componentId:s.componentId,module:s.module,...s.module!==ye.PreloadComponentScriptModule.ESM?{moduleName:s.moduleName}:{},tailwind:s.tailwind};return JSON.stringify(["transpileModule",t,n])},lruOptions:{max:100,ttl:1e3*60*60}}),Es=async(e,s)=>{var p,c;const n=(c=(p=(await ns.build({entryPoints:["index.tsx"],external:Object.keys(_t.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(d){let l=null;d.onResolve({filter:/.*/},u=>u.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:u.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),d.onLoad({filter:/.*/,namespace:"vfs"},async u=>{var y;if(u.path==="index.tsx")return{contents:`export { ${s} } from './component'`,loader:"tsx"};if(u.path==="component.tsx")return{contents:e,loader:"tsx"};if(nt.isRelativeModule(u.path)){const h=u.path.split("/").pop();if(l||(l=await Pe({ensureLoaded:!1})),(y=l==null?void 0:l.chunks)!=null&&y[h])try{const r=b.readFileSync(l.chunks[h],"utf-8");return I.info("get chunk from local file system",h),{contents:r,loader:"tsx"}}catch{}}return null})}}]})).outputFiles)==null?void 0:p[0])==null?void 0:c.contents;if(!n)throw new Error("Failed to build server code");const o=Buffer.from(n).toString();return L.default.transpileModule(o,{compilerOptions:{module:L.default.ModuleKind.ESNext,target:L.default.ScriptTarget.ES2020}}).outputText},at=Q.memoize(async(e,s)=>{const t=await Es(e,s);return new RegExp(`export\\s+\\{\\s+${s}\\s+\\}`,"m").test(t)?t:void 0},{keyGenerator:(e,s)=>{const t=ee.createHash("md5").update(e).digest("hex");return JSON.stringify(["extractExportValueSchema",t,s])},lruOptions:{max:100,ttl:1e3*60*60}}),Is=(e,s)=>`// GENERATED FILE. DO NOT EDIT.
|
|
7
7
|
var ${e} = function () {
|
|
8
8
|
|
|
9
9
|
const exports = {};
|
|
@@ -29,7 +29,7 @@ var ${e} = function () {
|
|
|
29
29
|
|
|
30
30
|
return exports;
|
|
31
31
|
};
|
|
32
|
-
`,
|
|
32
|
+
`,ae=new Fe.LRUCache({max:100}),rt=60*60,Ne=60;function it(e){I.info("clear preload components cache",{cacheKey:e}),ae.delete(e)}function ct(e){for(const s of ae.keys())s.includes(e)&&(I.info("clear preload components cache",{cacheKey:s}),it(s))}function lt({mode:e,instanceId:s,componentId:t,locale:n}){return["getPreloadComponents",e,s,t,n].join("-")}async function Os({mode:e,req:s,state:t,locale:n,instances:o,module:a}){const{supportedLocales:p,config:{defaultLocale:c}}=t;if(!c)return null;const d=(await Promise.all(o.map(async r=>{try{const i=lt({mode:e,instanceId:r.id,componentId:r.componentId,locale:n});if(e!=="draft"&&r.useCache&&ae.has(i))return I.info(`get preload component from cache: ${i}`),ae.get(i);const f=ce({state:t,componentId:r.componentId});if(!f)return null;const E=await pt({req:s,state:t,componentId:f.id,locale:n,defaultLocale:c,properties:r.properties});if(!E)return null;const v={instanceId:r.id,preload:E};if(e!=="draft"&&r.useCache){let T=rt;r.cacheDuration&&(T=r.cacheDuration),I.info(`set preload component to cache(${T}s): ${i}`),ae.set(i,v,{ttl:T*1e3})}return v}catch(i){return I.error("get preload component error",{instanceId:r.id,componentId:r.componentId},{error:i}),null}}))).filter(r=>!!r),l=Object.values(d.reduce((r,i)=>({...r,...i.preload.components}),{}));async function u(){const r=await Promise.all(l.map(async i=>{const f=ie.componentUMDName({componentId:i.component.id}),E=a===ye.PreloadComponentScriptModule.ESM?{module:a,script:await Qe(i.script,{componentId:i.component.id,module:a,tailwind:e!=="draft"})}:{module:a,script:await Qe(i.script,{componentId:i.component.id,module:a,moduleName:f,tailwind:e!=="draft"}),moduleName:f};return[i.component.id,{component:i.component,script:E}]}));return Object.fromEntries(r)}const y=await u();return{config:{defaultLocale:c,supportedLocales:p},components:y,instances:d.map(r=>({id:r.instanceId,componentId:r.preload.component.id,locales:{[r.preload.locale]:{props:r.preload.props}}}))}}async function pt({req:e,state:s,componentId:t,locale:n,defaultLocale:o,properties:a}){const{supportedLocales:p}=s,c=ce({state:s,componentId:t});if(!c)return null;const d=p.some(u=>u.locale===n)?n:o;if(!d)return null;const l=await dt({req:e,state:s,componentId:t,locale:d,defaultLocale:o,properties:a});return l?{component:c,...l}:null}const As=20;async function dt({req:e,depth:s=0,state:t,componentId:n,locale:o,defaultLocale:a,properties:p}){if(s>As)throw new RangeError("max component depth exceeded");const c=Ts({state:t,componentId:n,properties:p,locale:o});if(!c)return null;const{props:d}=c,l={locale:o||a,components:{[c.component.id]:{component:c.component,script:c.script}},props:{...d}};try{const u=await js({...c,req:e});u!=null&&u.props&&Object.assign(l.props,u.props)}catch(u){I.error("preload data at server side error",{componentId:n,name:c.component.name},{error:u})}return await Promise.all(Object.entries(d).map(async([u,y])=>{if((y==null?void 0:y.type)===ie.RenderNestedComponent){const h=await dt({req:e,depth:s+1,state:t,componentId:y.componentId,locale:o,defaultLocale:a,properties:y.properties});h&&(Object.assign(l.components,h.components),Object.assign(l.props,{[u]:{type:ie.RenderNestedComponent,componentId:y.componentId,props:h.props}}))}})),l}function Ts({state:e,componentId:s,locale:t,properties:n}){const o=ce({state:e,componentId:s});if(!o)return null;const a=ie.mergeComponent({componentId:s,getComponent:p=>ce({state:e,componentId:p}),locale:t,defaultLocale:e.config.defaultLocale,properties:n});return a?{component:o,script:a.script,props:{locale:t,...a.props}}:null}function ce({state:e,componentId:s}){var t,n,o;return((t=e.components[s])==null?void 0:t.data)??((o=(n=e.resources.components)==null?void 0:n[s])==null?void 0:o.component)}function Ps({state:e,name:s}){var n,o;const t=s.toLowerCase();return((n=Object.values(e.components).find(a=>{var p;return((p=a.data.name)==null?void 0:p.toLowerCase())===t}))==null?void 0:n.data)??((o=e.resources.components&&Object.values(e.resources.components).find(a=>{var p;return((p=a.component.name)==null?void 0:p.toLowerCase())===t}))==null?void 0:o.component)}async function js({component:e,script:s,props:t,req:n}){if(!(s!=null&&s.includes("getServerSideProps")))return null;const o=await at(s,"getServerSideProps");if(!o)return null;const a=new Promise(c=>{setTimeout(()=>{c({})},Ne*1e3)});return await Promise.race([a,Q.Sandbox.callFunction({code:`${o}
|
|
33
33
|
|
|
34
34
|
export async function getServerSidePropsWrapper(props) {
|
|
35
35
|
const { location, fetch, props: componentProps } = props;
|
|
@@ -48,10 +48,10 @@ export async function getServerSidePropsWrapper(props) {
|
|
|
48
48
|
}
|
|
49
49
|
}`,filename:`${e.name||e.id}.js`,moduleLoader:c=>{if(c==="@blocklet/pages-kit/builtin/utils")return`const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
|
|
50
50
|
export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
51
|
-
`;if(c==="@blocklet/pages-kit/builtin/dayjs")return Q.BuiltinModules.dayjs},global:{console:{log:(...c)=>{I.info(...c)},warn:(...c)=>{I.warn(...c)},error:(...c)=>{I.error(...c)}},getComponentMountPoint:Tt.getComponentMountPoint,joinURL:M.joinURL,withQuery:M.withQuery,getQuery:M.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:M.joinURL(M.withHttps(n.hostname),n.originalUrl)},fetch:(c,{...
|
|
51
|
+
`;if(c==="@blocklet/pages-kit/builtin/dayjs")return Q.BuiltinModules.dayjs},global:{console:{log:(...c)=>{I.info(...c)},warn:(...c)=>{I.warn(...c)},error:(...c)=>{I.error(...c)}},getComponentMountPoint:Tt.getComponentMountPoint,joinURL:M.joinURL,withQuery:M.withQuery,getQuery:M.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:M.joinURL(M.withHttps(n.hostname),n.originalUrl)},fetch:(c,{...d}={})=>{const l=typeof c=="string"&&c.startsWith("/")?M.joinURL(O.default.env.appUrl,c):c;if(typeof l=="string"&&M.parseURL(l).host===M.parseURL(O.default.env.appUrl).host){const u=n.get("cookie");if(u){const y=new st.Headers(d.headers);y.set("cookie",u),d.headers=y}}return es.default(l,{...d,timeout:Ne*1e3}).then(u=>({ok:u.ok,status:u.status,statusText:u.statusText,headers:Object.fromEntries(u.headers.entries()),json:()=>u.json()}))},props:t}]})])}const ut=Q.memoize(async(e,s,t)=>{if(!(e!=null&&e.includes(s)))return null;const n=await at(e,s);if(n)try{return await Q.Sandbox.callFunction({code:`
|
|
52
52
|
${n}
|
|
53
53
|
|
|
54
54
|
export function get${s}SchemaWrapper() {
|
|
55
55
|
return ${s};
|
|
56
56
|
}
|
|
57
|
-
`,filename:`${t}.js`,functionName:`get${s}SchemaWrapper`})}catch(o){return I.error(`获取 ${s} 失败`,{componentId:t,error:o}),null}return null},{keyGenerator:(e,s,t)=>{const n=Ae.createHash("md5").update(e).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",n,s,t])},lruOptions:{max:100,ttl:1e3*60*60}}),_s="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",Re="page",Le="trigger-reload-project-resource",Be=_s,Cs="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM";function be(e){e.observeDeep(s=>{s.some(t=>t.changes.keys.has("updatedAt")||t.changes.keys.has("publishedAt"))||e.set("updatedAt",new Date().toISOString())})}function ft(){return b.mkdtempSync(S.join(O.default.env.dataDir,"tmp-"))}function Ee(e,s,t=[]){return Array.isArray(e)?e.flatMap((n,o)=>Ee(n,s,[...t,o])):typeof e=="object"?e===null?[]:Object.entries(e).flatMap(([n,o])=>Ee(o,s,[...t,n])):s(e)?[t]:[]}function U(e){return e.filter(s=>s!=null)}function Ds(e){e.pages&&Object.keys(e.pages).forEach(t=>{const n=W.getYjsValue(e.pages[t]);n&&n instanceof B.Map&&be(n)});const s=W.getYjsValue(e.pages);s&&s instanceof B.Map&&s.observe(t=>{t.changes.keys.forEach((n,o)=>{if(n.action==="add"){const a=W.getYjsValue(e.pages[o]);a&&a instanceof B.Map&&be(a)}})})}function vs(e){e.routes&&Object.keys(e.routes).forEach(t=>{var o;const n=W.getYjsValue((o=e.routes)==null?void 0:o[t]);n&&n instanceof B.Map&&be(n)});const s=W.getYjsValue(e.routes);s&&s instanceof B.Map&&s.observe(t=>{t.changes.keys.forEach((n,o)=>{var a;if(n.action==="add"){const p=W.getYjsValue((a=e.routes)==null?void 0:a[o]);p&&p instanceof B.Map&&be(p)}})})}function xs(e,s){var t;for(const n of s||Object.keys(e.routes||{})){let o=n,a=[];if(n.includes("-")){const[p,...c]=n.split("-");o=p,a=c||[]}if(((t=e.routes)==null?void 0:t[o])!==void 0){e.routes[o].publishedAt=new Date().toISOString();const p=e.routes[o];if(!p||!p.params||p.params.length===0)continue;if(n.includes("-")&&a.length>0){const c=we.getRouteMetaDataByOptionIds(a,p);c&&(c.publishedAt=new Date().toISOString())}if(!s){const c=we.generateParamCombinations({basePath:p.path,params:p.params,routeId:p.id,paramsOptions:p.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const u of c)u.routeMetaData??(u.routeMetaData={}),u.routeMetaData.publishedAt=new Date().toISOString()}}}}function ve({page:e,route:s,state:t,routeId:n,routePathInfo:o}){var p,c,u,l,d,y,h,r,i;I.info(`Executing datasource data assembly, routeId: ${n}, routePathInfo: ${JSON.stringify(o)}`);const a={...Lt.cloneDeep(e),id:n,slug:(o==null?void 0:o.path)??s.path,createdAt:s.createdAt,updatedAt:((p=o==null?void 0:o.routeMetaData)==null?void 0:p.updatedAt)??s.updatedAt,publishedAt:((c=o==null?void 0:o.routeMetaData)==null?void 0:c.publishedAt)??s.publishedAt,isPublic:(((u=o==null?void 0:o.routeMetaData)==null?void 0:u.isPublic)??s.isPublic)&&s.isPublic};for(const f of t.supportedLocales){if(s.dataSource){let E=s.id;o&&(E=o.paramOptionIds.join("-"));const v=((y=(d=(l=s.dataSource.pathDataMappings)==null?void 0:l[E])==null?void 0:d.dataCache)==null?void 0:y[f.locale])??((i=(r=(h=s.dataSource.pathDataMappings)==null?void 0:h[E])==null?void 0:r.dataCache)==null?void 0:i[t.config.defaultLocale||"en"]);if(!v)continue;Rt.setPageDataSource(a,t,f.locale,v)}o&&o.routeMetaData&&(o.routeMetaData.publishedAt=new Date().toISOString())}return a}const{uploadToMediaKit:ks}=require("@blocklet/uploader-server"),ye=zt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ge=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,ae=/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,Ns=1e4,Rs=3e4,me=0,xe=1,Ls=0,Ms=1,Me=O.default,ne=S.join(process.env.BLOCKLET_DATA_DIR,"site-state"),Us=["production","draft"],Fs=["production"];function Ie(e){return(e==null?void 0:e.replace(/\//g,"|"))||""}function qs(){var t;const e=Me.env.languages.map(n=>({locale:n.code,name:n.name})),s=(t=e[0])==null?void 0:t.locale;return{pageIds:[],pages:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{},components:{},supportedLocales:e,config:{defaultLocale:s},resources:{}}}const H=class H extends B.Doc{constructor(t){super();x(this,"states",{});x(this,"syncedStore");x(this,"conns",new Map);x(this,"awareness");x(this,"awarenessChangeHandler",({added:t,updated:n,removed:o},a)=>{const p=t.concat(n,o);if(a!==null){const l=this.conns.get(a);l&&(t.forEach(d=>{l.add(d)}),o.forEach(d=>{l.delete(d)}))}const c=k.createEncoder();k.writeVarUint(c,xe),k.writeVarUint8Array(c,se.encodeAwarenessUpdate(this.awareness,p));const u=k.toUint8Array(c);this.conns.forEach((l,d)=>this.send(d,u))});x(this,"updateHandler",t=>{const n=k.createEncoder();k.writeVarUint(n,me),Ce.writeUpdate(n,t);const o=k.toUint8Array(n);this.conns.forEach((a,p)=>this.send(p,o))});x(this,"ensureDataStructure",()=>{var p;const{supportedLocales:t,pages:n,pageIds:o,config:a}=this.syncedStore;{const c=new Set(Object.keys(n));let u=0;for(;u<o.length;){const l=o[u];c.has(l)?(c.delete(l),u++):o.splice(u,1)}}t.splice(0,t.length),t.push(...Me.env.languages.map(c=>({locale:c.code,name:c.name}))),a.defaultLocale=(p=t[0])==null?void 0:p.locale;{let c=0;const u=new Set;for(;c<t.length;){const{locale:l}=t[c];u.has(l)?t.splice(c,1):(c++,u.add(l))}}});x(this,"send",(t,n)=>{t.readyState!==Ls&&t.readyState!==Ms&&this.closeConn(t);try{t.send(n,o=>{o&&this.closeConn(t)})}catch{this.closeConn(t)}});x(this,"closeConn",t=>{if(t.removeAllListeners(),this.conns.has(t)){const n=this.conns.get(t);this.conns.delete(t),n&&se.removeAwarenessStates(this.awareness,Array.from(n),null)}t.close()});x(this,"autoSave",ot.default(()=>{b.mkdirSync(S.dirname(this.draftYjsFilePath),{recursive:!0}),b.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Ns));x(this,"save",({flush:t=!1}={})=>{this.autoSave(),t&&this.autoSave.flush()});x(this,"publish",async({mode:t,routes:n})=>{const o=await this.getState("draft"),a=await this.getState("production");await Ue(o,a,{routes:n,mergeMode:"replace",deleteRoutes:!0,publishMode:t}),a.config.publishedAt=new Date().getTime(),xs(this.syncedStore,n),await this.setState(t,a)});x(this,"mergeState",async(t,n)=>{var c,u,l;const o=JSON.parse(JSON.stringify(n));(c=t.config).fontFamily??(c.fontFamily={});const a=(u=o.config)==null?void 0:u.fontFamily,p=(l=t.config)==null?void 0:l.fontFamily;t.config.fontFamily.title=(a==null?void 0:a.title)||(p==null?void 0:p.title),t.config.fontFamily.description=(a==null?void 0:a.description)||(p==null?void 0:p.description),await new Promise((d,y)=>{this.transact(async()=>{try{const h=await Ue(t,n);d(h)}catch(h){y(h)}})})});x(this,"addConnection",t=>{if(this.conns.has(t))return;t.binaryType="arraybuffer",this.conns.set(t,new Set),t.on("message",a=>this.messageListener(t,new Uint8Array(a)));let n=!0;const o=setInterval(()=>{if(!n)this.conns.has(t)&&this.closeConn(t),clearInterval(o);else if(this.conns.has(t)){n=!1;try{t.ping()}catch{this.closeConn(t),clearInterval(o)}}},Rs);t.on("close",()=>{this.closeConn(t),clearInterval(o)}),t.on("pong",()=>{n=!0});{const a=k.createEncoder();k.writeVarUint(a,me),Ce.writeSyncStep1(a,this),this.send(t,k.toUint8Array(a));const p=this.awareness.getStates();if(p.size>0){const c=k.createEncoder();k.writeVarUint(c,xe),k.writeVarUint8Array(c,se.encodeAwarenessUpdate(this.awareness,Array.from(p.keys()))),this.send(t,k.toUint8Array(c))}}});x(this,"messageListener",(t,n)=>{try{const o=k.createEncoder(),a=De.createDecoder(n),p=De.readVarUint(a);switch(p){case me:k.writeVarUint(o,me),Ce.readSyncMessage(a,o,this,null),k.length(o)>1&&(this.ensureDataStructure(),this.send(t,k.toUint8Array(o)));break;case xe:{se.applyAwarenessUpdate(this.awareness,De.readVarUint8Array(a),t);break}default:I.warn(`Unsupported messageType ${p}`)}}catch(o){I.error(o)}this.save()});this.options=t,b.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,b.readFileSync(this.draftYjsFilePath)),this.syncedStore=Mt.reactive(W.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new se.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(t){if(!t)throw new Error("Should provide project context");try{const n=S.join(ne,t),o=S.join(ne,`@del-${t}`);b.renameSync(n,o)}catch(n){I.error("Failed to safe delete project state dir:",n)}}static get projectIds(){return ke.globSync("*/",{cwd:ne,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(t=>H.shared(t))}static shared(t){if(!t)throw new Error("Should provide project context");let n=this.sharedInstances.get(t);return n||(n=new H({path:S.join(ne,t)}),this.sharedInstances.set(t,n),n)}destroy(){this.conns.forEach((t,n)=>this.closeConn(n)),this.awareness.destroy(),super.destroy()}initObserver(){Ds(this.syncedStore),vs(this.syncedStore)}get draftYjsFilePath(){return S.join(this.options.path,"draft.yjs")}async getState(t){var n,o,a,p;if(t==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[t]&&(this.states[t]=await Ve(this.getPublishDir(t),{includeResources:!0})??qs(),!((o=(n=this.states[t])==null?void 0:n.config)!=null&&o.defaultLocale))){(a=this.states[t]).config??(a.config={});const c=Me.env.languages.map(u=>({locale:u.code,name:u.name}));this.states[t].config.defaultLocale=(p=c[0])==null?void 0:p.locale}return{...this.states[t],resources:await Pe().then(async c=>{var r,i,f,E;const{pages:u,components:l}=ls.default(c,"pages","components");let d=l;const y=S.basename(this.options.path),h=await J.findByPk(y);if(h!=null&&h.useAllResources)d=l;else{const T=(await Te.findAll({where:{projectId:y}})).map(F=>F.componentId);d=Object.fromEntries(Object.entries(l||{}).filter(([F])=>T.includes(F)))}return Object.keys(((i=(r=this.states[t])==null?void 0:r.resources)==null?void 0:i.components)||{}).length>0&&(d={...d,...(E=(f=this.states[t])==null?void 0:f.resources)==null?void 0:E.components}),{pages:u,components:d}}).catch(()=>({}))}}async setState(t,n){const o=await yt(n,{exportAssets:!1,includeResources:!0}),a=this.getPublishDir(t);b.mkdirSync(S.dirname(a),{recursive:!0}),b.rmSync(a,{force:!0,recursive:!0}),b.renameSync(o,a),this.states[t]=n}getPublishDir(t){return S.join(this.options.path,t)}static async pageUrlMap(t){var a,p;const{projectIds:n}=this,o={};for(const c of n){const u=await J.findByPk(c);if(!u)continue;const l=await H.shared(c).getState(t),d=u.slug||c,y=ps.default(O.default.env.languages.map(r=>r.code),l.supportedLocales.map(r=>r.locale)),h=(r,i)=>{d&&(o[M.joinURL("/",d,r)]={...i,shouldRedirect:!0,mainPage:!0}),o[M.joinURL("/",c,r)]={...i,shouldRedirect:!0,mainPage:!0};for(const f of y){const E={...i,locale:f};o[M.joinURL("/",f,c,r)]=E,d&&(o[M.joinURL("/",f,d,r)]=E)}};if(t==="draft")for(const r of l.routeIds||[]){const i=(a=l==null?void 0:l.routes)==null?void 0:a[r];if(!i)continue;if(i.params&&i.params.length>0){const v=we.generateParamCombinations({basePath:i.path,params:i.params,routeId:i.id,paramsOptions:i.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const T of v){const R=T.path,F={projectId:c,projectSlug:d,pageSlug:R,pageId:i.displayTemplateId||"",routeId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic&&((p=T==null?void 0:T.routeMetaData)==null?void 0:p.isPublic)};h(R,F)}}const f=i.path,E={projectId:c,projectSlug:d,pageSlug:f,pageId:i.displayTemplateId||"",routeId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic};h(f,E)}for(const r of l.pageIds){const i=l.pages[r];if(!i||t==="production"&&!i.isPublic)continue;const f=i.slug,E=u.slug||c,v={projectId:c,projectSlug:E,pageSlug:f,pageId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic,templateConfig:i.templateConfig};h(f,v)}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const t=[];for(const[n,o]of this.sharedInstances.entries()){const a=o.getDocumentSize();t.push({projectId:n,sizeInBytes:a,sizeInMB:`${(a/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return t}};x(H,"INSTANCE_TTL",30*60*1e3),x(H,"sharedInstances",new Fe.LRUCache({max:100,ttl:H.INSTANCE_TTL,dispose:t=>{t.destroy()}}));let ce=H;async function $s(e,s,t){if(!e||!b.existsSync(e)||!b.lstatSync(e).isFile())return null;let n=t[e];return n||(n=(async()=>{var o;try{const a=(o=await ks({filePath:e,fileName:s}))==null?void 0:o.data;return a==null?void 0:a.filename}catch(a){return I.error(`Failed to upload asset ${e}:`,a),null}})(),t[e]=n),n}const mt=async(e,s)=>{const t=S.basename(e),n=await qe.call({name:Be,path:M.joinURL("/uploads",t),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const o=b.createWriteStream(s);await Yt.pipeline(n.data,o)}else throw new Error(`download asset failed ${n.status}`)},gt=async(e,s)=>{await Promise.all(e.map(async t=>{try{await mt(t,S.join(s,S.basename(t)))}catch(n){I.error(`Failed to export assets: ${t}, ${n}`)}}))};function ht(e){return Ge.test(e)?[e]:ae.test(e)?(Xe.lastIndex=0,Array.from(e.matchAll(Xe)).map(t=>t[1]).filter(t=>!!t)):[]}async function ge(e,s,t){const{getFilename:n,exportAssets:o}=t,a=S.join(s,n(e));if(b.mkdirSync(S.dirname(a),{recursive:!0}),b.writeFileSync(a,X.stringify(e)),o){const c=Ee(e,u=>typeof u=="string"&&(Ge.test(u)||ae.test(u))).map(u=>{const l=$e.default(e,u);return ht(l)}).flat().filter(Boolean);await gt(c,S.dirname(a))}}const Ze=new Fe.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function et(e,s,t){var c;const n=Ee(e,u=>typeof u=="string"&&(Ge.test(u)||ae.test(u))),o=us.default(2),a=n.map(u=>o(async()=>{try{const l=$e.default(e,u),d=ht(l);for(const y of d){const h=S.basename(y),r=t.getFilePath(y,u),i=r?`${r}:${h}`:h,f=Ze.get(i);if(f){ae.test(l)||Ye.default(e,u,f);return}const E=await $s(r,h,s);E&&(ae.test(l)||Ye.default(e,u,E),Ze.set(i,E))}}catch(l){I.error(`Failed to process upload for path ${u.join(".")}:`,l.message||l.reason)}})),p=await Promise.allSettled(a);(c=t.onFinish)==null||c.call(t,p)}async function yt(e,{exportAssets:s,pageIds:t="all",componentIds:n="all",rawConfig:o,includeResources:a=!1,routeIds:p="all"}={}){var ee,w,m,A,j,z,_,q,K,de,te,fe;const c=t==="all"?e.pageIds:t,u=re.getComponentDependencies({state:e,pageIds:c,componentIds:n==="all"?Object.keys(e.components):n}),l=p==="all"?e.routeIds:p,d=(g,P)=>{var D;return{id:g.id,name:g.name,isTemplateSection:g.isTemplateSection??!1,templateDescription:g.templateDescription,llmConfig:g.llmConfig,component:g.component,config:g.config,visibility:g.visibility,properties:((D=g.locales)==null?void 0:D[P])??{}}},y=(g,P)=>{var D;return{id:g.id,createdAt:g.createdAt,updatedAt:g.updatedAt,publishedAt:g.publishedAt,isPublic:g.isPublic??!0,templateConfig:g.templateConfig,meta:((D=g.locales)==null?void 0:D[P])??{},sections:U(g.sectionIds.map(V=>{const G=g.sections[V];return G&&d(G,P)}))}},h=g=>({id:g.id,createdAt:g.createdAt,updatedAt:g.updatedAt,publishedAt:g.publishedAt,path:g.path,handler:g.handler,isPublic:g.isPublic??!0,params:g.params??[],enabledGenerate:g.enabledGenerate??!1,displayTemplateId:g.displayTemplateId,dataSource:g.dataSource}),r=U(l.map(g=>{const P=e.routes[g];return P&&h(P)})),i=U(e.supportedLocales.map(g=>g.locale).flatMap(g=>c.map(P=>{const D=e.pages[P];return D&&{locale:g,slug:D.slug,page:y(D,g)}}))),f=ft(),E=S.join(f,"pages");b.mkdirSync(E,{recursive:!0});const v=S.join(f,"components");b.mkdirSync(v,{recursive:!0});const T=S.join(f,"routes");b.mkdirSync(T,{recursive:!0});for(const{locale:g,slug:P,page:D}of i)await ge(D,E,{getFilename:()=>`${Ie(P)||"index"}.${g}.yml`,exportAssets:s});for(const g of r)await ge(g,T,{getFilename:()=>`${Ie(g.path)||"index"}.yml`,exportAssets:s});for(const g of u){const P=(ee=e.components[g])==null?void 0:ee.data;P&&await ge(P,v,{getFilename:D=>`${D.name||"unnamed"}.${D.id}.yml`,exportAssets:s})}const R=S.join(f,".blocklet/pages/pages.config.yml");b.mkdirSync(S.dirname(R),{recursive:!0});const F={pages:U(c.map(g=>{const P=e.pages[g];return P&&{id:g,slug:P.slug}})),routes:U(l.map(g=>{const P=e.routes[g];return P&&{id:g,path:P.path}})),components:U(u.map(g=>{var D;const P=(D=e.components[g])==null?void 0:D.data;return P&&{id:g,name:P.name}})),...a?{resources:{components:U(Object.keys(((w=e.resources)==null?void 0:w.components)||{}).filter(g=>u.includes(g)).map(g=>{var P,D,V,G;return{id:g,name:(G=(V=(D=(P=e.resources)==null?void 0:P.components)==null?void 0:D[g])==null?void 0:V.component)==null?void 0:G.name}}))}}:{},supportedLocales:e.supportedLocales,config:e.config};b.writeFileSync(R,X.stringify(F));const ue=S.join(f,"config.source.json");if(o&&b.writeFileSync(ue,JSON.stringify(o)),a){const g=S.join(f,"resources"),P=S.join(g,"components");b.mkdirSync(P,{recursive:!0});for(const G of Object.keys(((m=e==null?void 0:e.resources)==null?void 0:m.components)??{}).filter($=>u.includes($))){const $=(z=(j=(A=e.resources)==null?void 0:A.components)==null?void 0:j[G])==null?void 0:z.component;$&&await ge($,P,{getFilename:Y=>`${Y.name||"unnamed"}.${Y.id}.yml`,exportAssets:s})}const D=S.join(f,"chunks");b.mkdirSync(D,{recursive:!0});const{chunks:V}=await Pe();for(const G of Object.keys(((_=e==null?void 0:e.resources)==null?void 0:_.components)??{}).filter($=>u.includes($))){const $=(de=(K=(q=e.resources)==null?void 0:q.components)==null?void 0:K[G])==null?void 0:de.component;if($&&((te=$.renderer)==null?void 0:te.type)==="react-component"){const Y=((fe=$.renderer)==null?void 0:fe.chunks)??[];if((Y==null?void 0:Y.length)>0)for(const je of Y){const Ke=S.join(D,je),_e=V==null?void 0:V[je];try{_e&&b.existsSync(_e)&&!b.existsSync(Ke)&&b.copyFileSync(_e,Ke)}catch(It){I.error(`copy chunk ${je} error`,It.message)}}}}}return f}async function Ve(e,{importAssets:s,includeResources:t}={}){var a,p,c,u;if(!b.existsSync(e))return null;let n,o=!1;try{b.lstatSync(e).isDirectory()?n=e:/\.(tgz|gz|tar)$/.test(e)&&(o=!0,n=ft(),await Wt.x({file:e,C:n}));const l=ke.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),d=l&&S.join(S.dirname(l),"../../pages"),y=l&&S.join(S.dirname(l),"../../components"),h=l&&S.join(S.dirname(l),"../../chunks"),r=l&&S.join(S.dirname(l),"../../routes");if(!l)return null;const i=X.parse(b.readFileSync(l).toString()),f=(w,m,A)=>{let j=S.join(w,`${m}${A?`.${A}`:""}.yml`);return(!b.existsSync(j)||!b.lstatSync(j).isFile())&&(j=S.join(w,m,`index${A?`.${A}`:""}.yml`),!b.existsSync(j)||!b.lstatSync(j))?null:X.parse(b.readFileSync(j).toString())},E=(w,m)=>{try{const A=ke.globSync(`*.${m}.yml`,{cwd:w,absolute:!0})[0];return A?X.parse(b.readFileSync(A).toString()):null}catch(A){I.error("parse component error",A)}return null},v=(w,m)=>{let A=S.join(w,`${m}.yml`);return(!b.existsSync(A)||!b.lstatSync(A).isFile())&&(A=S.join(w,m,"index.yml"),!b.existsSync(A)||!b.lstatSync(A))?null:X.parse(b.readFileSync(A).toString())},T=U(i.pages.map(({slug:w})=>{var z;const m=U(i.supportedLocales.map(({locale:_})=>{const q=d?f(d,Ie(w),_):void 0;if(q)return{locale:_,page:q};const K=d?f(d,w,_):void 0;return K&&{locale:_,page:K}})),A=(z=m[0])==null?void 0:z.page;if(!A)return null;const j=A.sections.map(_=>{const q=_.id||ye();return{id:q,component:_.component,config:_.config,name:_.name,isTemplateSection:_.isTemplateSection??!1,templateDescription:_.templateDescription,llmConfig:_.llmConfig,visibility:_.visibility,locales:Object.fromEntries(U(m.map(({locale:K,page:de})=>{const te=de.sections.find(fe=>fe.id===q);return te&&[K,te.properties]})))}});return{id:A.id||ye(),createdAt:A.createdAt,updatedAt:A.updatedAt,publishedAt:A.publishedAt,isPublic:A.isPublic??!0,templateConfig:A.templateConfig,slug:w,sections:Object.fromEntries(j.map(_=>[_.id,_])),sectionIds:j.map(_=>_.id),locales:Object.fromEntries(m.map(({locale:_,page:q})=>[_,q.meta]))}})),R=U(((a=i==null?void 0:i.routes)==null?void 0:a.map(({path:w})=>{const m=r?v(r,Ie(w)):void 0;return{...m,id:(m==null?void 0:m.id)||ye(),createdAt:(m==null?void 0:m.createdAt)??new Date().toISOString(),updatedAt:(m==null?void 0:m.updatedAt)??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:(m==null?void 0:m.path)??`/${m==null?void 0:m.id}`,params:m==null?void 0:m.params,handler:(m==null?void 0:m.handler)??"Pages Kit",isPublic:(m==null?void 0:m.isPublic)??!0,enabledGenerate:(m==null?void 0:m.enabledGenerate)??!1,displayTemplateId:(m==null?void 0:m.displayTemplateId)??void 0,dataSource:(m==null?void 0:m.dataSource)??{}}}))??[]),F=y?U(((p=i.components)==null?void 0:p.map(({id:w})=>E(y,w)))??[]):[];if(s){const w=(...m)=>{I.info(`[${o?S.basename(e):S.basename(S.join(e,"../../../../"))}] importAssets:`,...m)};try{w("wait image-bin api ready"),await ds.default({resources:[`${qe.getComponentWebEndpoint(ms)}/api/sdk/uploads`],validateStatus:j=>j>=200&&j<=500}),w("image-bin api is ready");const m={},A={};w("start to upload assets"),await Promise.allSettled([et(F,m,{getFilePath:j=>y&&S.join(y,j),onFinish:j=>{w(`upload ${j.length} component assets`)}}),et(T,A,{getFilePath:(j,z)=>{const _=$e.default(T,z.slice(0,1));return d&&S.join(d,S.dirname(_.slug),j)},onFinish:j=>{w(`upload ${j.length} page assets`)}})]),w("upload assets done"),global.gc&&global.gc()}catch(m){w("Error during asset import:",m)}}const ue={};if(t){const w=l&&S.join(S.dirname(l),"../../resources/components"),m=U(((u=(c=i.resources)==null?void 0:c.components)==null?void 0:u.map(({id:A})=>E(w,A)))??[]);m.length>0&&(ue.components=Object.fromEntries(m.map((A,j)=>[A.id,{index:j,component:A}])))}const ee={};if(h&&b.existsSync(h)){const w=b.readdirSync(h);for(const m of w)ee[m]=S.join(h,m)}return{supportedLocales:i.supportedLocales,pageIds:T.map(w=>w.id),components:Object.fromEntries(F.map((w,m)=>[w.id,{index:m,data:w}])),pages:Object.fromEntries(T.map(w=>[w.id,w])),config:i.config||{},resources:ue,chunks:ee,routeIds:R.map(w=>w.id),routes:Object.fromEntries(R.map(w=>[w.id,w])),dataSourceIds:[],dataSources:{}}}finally{o&&n&&b.rmSync(n,{force:!0,recursive:!0})}}async function Ue(e,s,{routes:t,mergeMode:n="byUpdateTime",deleteRoutes:o=!1,publishMode:a=void 0}={}){try{a&&ct(a)}catch(h){I.error("clear preload page cache error",{error:h})}const{pages:p,pageIds:c,routeIds:u,routes:l,supportedLocales:d}=e;if(a==="production"){let h=t??[],r=null;for(const i of u??[]){const f=l==null?void 0:l[i];if(f!=null&&f.params&&(f==null?void 0:f.params.length)>0&&(f!=null&&f.paramsOptions)&&(f==null?void 0:f.paramsOptions.length)>0){const E=we.generateParamCombinations({basePath:f.path,params:f.params,routeId:f.id,paramsOptions:f.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]}),v=Object.fromEntries(E.map(T=>[`${i}-${T.paramOptionIds.join("-")}`,T]));r={...r||{},...v},t||(h=[...h,...E.map(T=>`${i}-${T.paramOptionIds.join("-")}`)])}else t||h.push(i)}I.info("routeIds to be published: ",h);for(const i of h){let f=i;if(f.includes("-")){const[T]=f.split("-");f=T}const E=l==null?void 0:l[f];if(!E){const T=s.pageIds.indexOf(f);T!==-1&&o&&(s.pageIds.splice(T,1),delete s.pages[f]);for(const R of s.pageIds)R.includes(`${f}-`)&&(s.pageIds.splice(s.pageIds.indexOf(R),1),delete s.pages[R]);I.info("delete main route page",f);continue}if(i.includes("-")&&!(r!=null&&r[i])){const T=s.pageIds.indexOf(i);T!==-1&&o&&(s.pageIds.splice(T,1),delete s.pages[i]),I.info("delete page",i);continue}if(!E.displayTemplateId){I.info("no display template",i);continue}const v=p[E.displayTemplateId];if(!v){I.info("no template page",i);continue}if(s.pageIds.includes(i)){if(I.info("has need update page",i),n==="replace")s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("replace page",i);else if(n==="byUpdateTime"){const T=s.pages[E.id];(!T||E.updatedAt&&E.updatedAt>T.updatedAt)&&(s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("replace page by update time",i))}}else s.pageIds.push(i),s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("add page",i)}if(o&&!t)for(const i of s.pageIds)h!=null&&h.includes(i)||(delete s.pages[i],I.info("delete page",i)),s.pageIds=[...s.pageIds].filter(f=>h==null?void 0:h.includes(f))}else{for(const h of c){const r=p[h];if(r)if(s.pageIds.includes(r.id)){if(n==="replace")s.pages[r.id]=r;else if(n==="byUpdateTime"){const i=s.pages[r.id];(!i||r.updatedAt&&r.updatedAt>i.updatedAt)&&(s.pages[r.id]=r)}}else s.pageIds.push(r.id),s.pages[r.id]=r}for(const h of u){const r=l[h];if(r)if(s.pageIds.includes(r.id)){if(n==="replace")s.routes[r.id]=r;else if(n==="byUpdateTime"){const i=s.routes[r.id];(!i||r.updatedAt&&r.updatedAt>i.updatedAt)&&(s.routes[r.id]=r)}}else s.routeIds.push(r.id),s.routes[r.id]=r}}if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(...is.default(d)),o)for(const h of Object.keys(s.components))delete s.components[h];let y=JSON.parse(JSON.stringify(e.components));y=Object.fromEntries(await Promise.all(Object.entries(y).map(async([h,r])=>{const i=await St(r==null?void 0:r.data);return[h,{...r,data:i}]}))),Object.assign(s.components,y),Object.assign(s.config,JSON.parse(JSON.stringify(e.config))),s.resources.components=JSON.parse(JSON.stringify(e.resources.components||{}))}const St=Q.memoize(async e=>{var s;if(!cs.default(e==null?void 0:e.properties))return e;if(((s=e==null?void 0:e.renderer)==null?void 0:s.type)==="react-component"){const{script:t}=(e==null?void 0:e.renderer)||{};if(t&&t.includes("PROPERTIES_SCHEMA"))try{const n=await dt(t,"PROPERTIES_SCHEMA",e.id);n&&n.length>0&&e&&(e.properties={},n.forEach((o,a)=>{e!=null&&e.properties&&(e.properties[o.id]={index:a,data:o})}))}catch(n){I.error("checkPropertiesFromCode error",{componentId:e.id,name:e.name},{error:n})}}return e},{keyGenerator:e=>{var p;const s=(e==null?void 0:e.id)||"",t=(e==null?void 0:e.name)||"",n=((p=e==null?void 0:e.renderer)==null?void 0:p.type)||"",o=(e==null?void 0:e.properties)||{},a=Ae.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",s,t,n,a])},lruOptions:{max:100,ttl:1e3*60*60}});let Oe,Z,He,Je,ze;function wt(){return Oe=(async()=>{const e=qe.getResources({types:[{did:Be,type:Re},{did:Cs,type:Re}]});Z=(await Promise.all(e.map(async t=>{const n=t.path?await Ve(t.path,{importAssets:!1}):void 0;return n?{blockletId:t.did,state:n,blockletTitle:t.title}:void 0}))).filter(t=>!!t),He=Z.reduce((t,n)=>Object.assign(t,Object.fromEntries(Object.values(n.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:n.blockletId}]:[]))),{});const s=Z.reduce((t,n)=>Object.assign(t,Object.fromEntries(Object.values(n.state.components).map(o=>[o.data.id,{blockletId:n.blockletId,component:o.data}]))),{});Je=Object.fromEntries(await Promise.all(Object.entries(s).map(async([t,n])=>{const o=await St(n.component);return[t,{...n,component:o}]}))),ze=Z.reduce((t,n)=>Object.assign(t,n.state.chunks),{})})(),Oe}function bt(e){const s=ot.default(async()=>{await wt().catch(t=>{I.error("load resource states error",{error:t})}),await(e==null?void 0:e({states:Z,pages:He,components:Je,chunks:ze}))},3e3,{leading:!1,trailing:!0});return s(),O.default.events.on(O.default.Events.componentAdded,s),O.default.events.on(O.default.Events.componentRemoved,s),O.default.events.on(O.default.Events.componentStarted,s),O.default.events.on(O.default.Events.componentStopped,s),O.default.events.on(O.default.Events.componentUpdated,s),O.default.events.on(Le,s),()=>{O.default.events.off(O.default.Events.componentAdded,s),O.default.events.off(O.default.Events.componentRemoved,s),O.default.events.off(O.default.Events.componentStarted,s),O.default.events.off(O.default.Events.componentStopped,s),O.default.events.off(O.default.Events.componentUpdated,s),O.default.events.off(Le,s)}}const Et=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),Se=globalThis;var tt;(tt=Se[Et])==null||tt.call(Se);Se[Et]=bt(async({pages:e,components:s})=>{const{projectIds:t}=ce;I.info(`start update resource states projects(${t.length})`,t),await Promise.race([new Promise(n=>{setTimeout(()=>{n({})},30*1e3)}),Promise.all(t.map(async n=>{const o=ce.shared(n);o.syncedStore.resources.pages=e;const a=await J.findByPk(n);if(a!=null&&a.useAllResources)o.syncedStore.resources.components=s;else{const c=(await Te.findAll({where:{projectId:n}})).map(l=>l.componentId),u=Object.fromEntries(Object.entries(s||{}).filter(([l])=>c.includes(l)));o.syncedStore.resources.components=u}I.info(`update [${n}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(n=>{I.error("update resource states failed:",n)})});async function Bs(){I.info("trigger reload all project resource"),O.default.events.emit(Le)}async function Pe({ensureLoaded:e=!0}={}){return e&&(Oe??(Oe=wt()),await Oe),{states:Z,pages:He,components:Je,chunks:ze}}exports.COMPONENT_DID=Be;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=rt;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=Ne;exports.PUBLISH_MODES=Fs;exports.Project=J;exports.RESOURCE_TYPE=Re;exports.SITE_STATE_PATH=ne;exports.STATE_MODES=Us;exports.SiteState=ce;exports.clearPreloadComponentsCache=it;exports.clearPreloadComponentsCacheByMode=ct;exports.downloadAsset=mt;exports.downloadAssets=gt;exports.fromPackage=Ve;exports.getComponentFromState=ie;exports.getComponentFromStateByName=Ps;exports.getExportSchemaValueFromCode=dt;exports.getMultiTenantAllProjectAccessPassports=ys;exports.getPreloadComponent=pt;exports.getPreloadComponents=Os;exports.getPreloadComponentsCacheKey=lt;exports.getResourceStates=Pe;exports.initPackResourceStates=bt;exports.isMultiTenant=hs;exports.logger=I;exports.mergeState=Ue;exports.nextId=ye;exports.toPackage=yt;exports.triggerReloadAllProjectResource=Bs;
|
|
57
|
+
`,filename:`${t}.js`,functionName:`get${s}SchemaWrapper`})}catch(o){return I.error(`获取 ${s} 失败`,{componentId:t,error:o}),null}return null},{keyGenerator:(e,s,t)=>{const n=ee.createHash("md5").update(e).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",n,s,t])},lruOptions:{max:100,ttl:1e3*60*60}}),_s="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",Re="page",Le="trigger-reload-project-resource",Be=_s,Cs="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM";function Ee(e){e.observeDeep(s=>{s.some(t=>t.changes.keys.has("updatedAt")||t.changes.keys.has("publishedAt"))||e.set("updatedAt",new Date().toISOString())})}function ft(){return b.mkdtempSync(S.join(O.default.env.dataDir,"tmp-"))}function Ie(e,s,t=[]){return Array.isArray(e)?e.flatMap((n,o)=>Ie(n,s,[...t,o])):typeof e=="object"?e===null?[]:Object.entries(e).flatMap(([n,o])=>Ie(o,s,[...t,n])):s(e)?[t]:[]}function U(e){return e.filter(s=>s!=null)}function Ds(e){e.pages&&Object.keys(e.pages).forEach(t=>{const n=W.getYjsValue(e.pages[t]);n&&n instanceof B.Map&&Ee(n)});const s=W.getYjsValue(e.pages);s&&s instanceof B.Map&&s.observe(t=>{t.changes.keys.forEach((n,o)=>{if(n.action==="add"){const a=W.getYjsValue(e.pages[o]);a&&a instanceof B.Map&&Ee(a)}})})}function vs(e){e.routes&&Object.keys(e.routes).forEach(t=>{var o;const n=W.getYjsValue((o=e.routes)==null?void 0:o[t]);n&&n instanceof B.Map&&Ee(n)});const s=W.getYjsValue(e.routes);s&&s instanceof B.Map&&s.observe(t=>{t.changes.keys.forEach((n,o)=>{var a;if(n.action==="add"){const p=W.getYjsValue((a=e.routes)==null?void 0:a[o]);p&&p instanceof B.Map&&Ee(p)}})})}function xs(e,s){var t;for(const n of s||Object.keys(e.routes||{})){let o=n,a=[];if(n.includes("-")){const[p,...c]=n.split("-");o=p,a=c||[]}if(((t=e.routes)==null?void 0:t[o])!==void 0){e.routes[o].publishedAt=new Date().toISOString();const p=e.routes[o];if(!p||!p.params||p.params.length===0)continue;if(n.includes("-")&&a.length>0){const c=be.getRouteMetaDataByOptionIds(a,p);c&&(c.publishedAt=new Date().toISOString())}if(!s){const c=be.generateParamCombinations({basePath:p.path,params:p.params,routeId:p.id,paramsOptions:p.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const d of c)d.routeMetaData??(d.routeMetaData={}),d.routeMetaData.publishedAt=new Date().toISOString()}}}}function ve({page:e,route:s,state:t,routeId:n,routePathInfo:o}){var p,c,d,l,u,y,h,r,i;I.info(`Executing datasource data assembly, routeId: ${n}, routePathInfo: ${JSON.stringify(o)}`);const a={...Lt.cloneDeep(e),id:n,slug:(o==null?void 0:o.path)??s.path,createdAt:s.createdAt,updatedAt:((p=o==null?void 0:o.routeMetaData)==null?void 0:p.updatedAt)??s.updatedAt,publishedAt:((c=o==null?void 0:o.routeMetaData)==null?void 0:c.publishedAt)??s.publishedAt,isPublic:(((d=o==null?void 0:o.routeMetaData)==null?void 0:d.isPublic)??s.isPublic)&&s.isPublic};for(const f of t.supportedLocales){if(s.dataSource){let E=s.id;o&&(E=o.paramOptionIds.join("-"));const v=((y=(u=(l=s.dataSource.pathDataMappings)==null?void 0:l[E])==null?void 0:u.dataCache)==null?void 0:y[f.locale])??((i=(r=(h=s.dataSource.pathDataMappings)==null?void 0:h[E])==null?void 0:r.dataCache)==null?void 0:i[t.config.defaultLocale||"en"]);if(!v)continue;Rt.setPageDataSource(a,t,f.locale,v)}o&&o.routeMetaData&&(o.routeMetaData.publishedAt=new Date().toISOString())}return a}const{uploadToMediaKit:ks}=require("@blocklet/uploader-server"),Se=zt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ge=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,re=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,Xe=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Ns=1e4,Rs=3e4,ge=0,xe=1,Ls=0,Ms=1,Me=O.default,oe=S.join(process.env.BLOCKLET_DATA_DIR,"site-state"),Us=["production","draft"],Fs=["production"];function Oe(e){return(e==null?void 0:e.replace(/\//g,"|"))||""}function qs(){var t;const e=Me.env.languages.map(n=>({locale:n.code,name:n.name})),s=(t=e[0])==null?void 0:t.locale;return{pageIds:[],pages:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{},components:{},supportedLocales:e,config:{defaultLocale:s},resources:{}}}const V=class V extends B.Doc{constructor(t){super();x(this,"states",{});x(this,"syncedStore");x(this,"conns",new Map);x(this,"awareness");x(this,"awarenessChangeHandler",({added:t,updated:n,removed:o},a)=>{const p=t.concat(n,o);if(a!==null){const l=this.conns.get(a);l&&(t.forEach(u=>{l.add(u)}),o.forEach(u=>{l.delete(u)}))}const c=k.createEncoder();k.writeVarUint(c,xe),k.writeVarUint8Array(c,ne.encodeAwarenessUpdate(this.awareness,p));const d=k.toUint8Array(c);this.conns.forEach((l,u)=>this.send(u,d))});x(this,"updateHandler",t=>{const n=k.createEncoder();k.writeVarUint(n,ge),Ce.writeUpdate(n,t);const o=k.toUint8Array(n);this.conns.forEach((a,p)=>this.send(p,o))});x(this,"ensureDataStructure",()=>{var p;const{supportedLocales:t,pages:n,pageIds:o,config:a}=this.syncedStore;{const c=new Set(Object.keys(n));let d=0;for(;d<o.length;){const l=o[d];c.has(l)?(c.delete(l),d++):o.splice(d,1)}}t.splice(0,t.length),t.push(...Me.env.languages.map(c=>({locale:c.code,name:c.name}))),a.defaultLocale=(p=t[0])==null?void 0:p.locale;{let c=0;const d=new Set;for(;c<t.length;){const{locale:l}=t[c];d.has(l)?t.splice(c,1):(c++,d.add(l))}}});x(this,"send",(t,n)=>{t.readyState!==Ls&&t.readyState!==Ms&&this.closeConn(t);try{t.send(n,o=>{o&&this.closeConn(t)})}catch{this.closeConn(t)}});x(this,"closeConn",t=>{if(t.removeAllListeners(),this.conns.has(t)){const n=this.conns.get(t);this.conns.delete(t),n&&ne.removeAwarenessStates(this.awareness,Array.from(n),null)}t.close()});x(this,"autoSave",ot.default(()=>{b.mkdirSync(S.dirname(this.draftYjsFilePath),{recursive:!0}),b.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Ns));x(this,"save",({flush:t=!1}={})=>{this.autoSave(),t&&this.autoSave.flush()});x(this,"publish",async({mode:t,routes:n})=>{const o=await this.getState("draft"),a=await this.getState("production");await Ue(o,a,{routes:n,mergeMode:"replace",deleteRoutes:!0,publishMode:t}),a.config.publishedAt=new Date().getTime(),xs(this.syncedStore,n),await this.setState(t,a)});x(this,"mergeState",async(t,n)=>{var c,d,l;const o=JSON.parse(JSON.stringify(n));(c=t.config).fontFamily??(c.fontFamily={});const a=(d=o.config)==null?void 0:d.fontFamily,p=(l=t.config)==null?void 0:l.fontFamily;t.config.fontFamily.title=(a==null?void 0:a.title)||(p==null?void 0:p.title),t.config.fontFamily.description=(a==null?void 0:a.description)||(p==null?void 0:p.description),await new Promise((u,y)=>{this.transact(async()=>{try{const h=await Ue(t,n);u(h)}catch(h){y(h)}})})});x(this,"addConnection",t=>{if(this.conns.has(t))return;t.binaryType="arraybuffer",this.conns.set(t,new Set),t.on("message",a=>this.messageListener(t,new Uint8Array(a)));let n=!0;const o=setInterval(()=>{if(!n)this.conns.has(t)&&this.closeConn(t),clearInterval(o);else if(this.conns.has(t)){n=!1;try{t.ping()}catch{this.closeConn(t),clearInterval(o)}}},Rs);t.on("close",()=>{this.closeConn(t),clearInterval(o)}),t.on("pong",()=>{n=!0});{const a=k.createEncoder();k.writeVarUint(a,ge),Ce.writeSyncStep1(a,this),this.send(t,k.toUint8Array(a));const p=this.awareness.getStates();if(p.size>0){const c=k.createEncoder();k.writeVarUint(c,xe),k.writeVarUint8Array(c,ne.encodeAwarenessUpdate(this.awareness,Array.from(p.keys()))),this.send(t,k.toUint8Array(c))}}});x(this,"messageListener",(t,n)=>{try{const o=k.createEncoder(),a=De.createDecoder(n),p=De.readVarUint(a);switch(p){case ge:k.writeVarUint(o,ge),Ce.readSyncMessage(a,o,this,null),k.length(o)>1&&(this.ensureDataStructure(),this.send(t,k.toUint8Array(o)));break;case xe:{ne.applyAwarenessUpdate(this.awareness,De.readVarUint8Array(a),t);break}default:I.warn(`Unsupported messageType ${p}`)}}catch(o){I.error(o)}this.save()});this.options=t,b.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,b.readFileSync(this.draftYjsFilePath)),this.syncedStore=Mt.reactive(W.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new ne.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(t){if(!t)throw new Error("Should provide project context");try{const n=S.join(oe,t),o=S.join(oe,`@del-${t}`);b.renameSync(n,o)}catch(n){I.error("Failed to safe delete project state dir:",n)}}static get projectIds(){return ke.globSync("*/",{cwd:oe,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(t=>V.shared(t))}static shared(t){if(!t)throw new Error("Should provide project context");let n=this.sharedInstances.get(t);return n||(n=new V({path:S.join(oe,t)}),this.sharedInstances.set(t,n),n)}destroy(){this.conns.forEach((t,n)=>this.closeConn(n)),this.awareness.destroy(),super.destroy()}initObserver(){Ds(this.syncedStore),vs(this.syncedStore)}get draftYjsFilePath(){return S.join(this.options.path,"draft.yjs")}async getState(t){var n,o,a,p;if(t==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[t]&&(this.states[t]=await He(this.getPublishDir(t),{includeResources:!0})??qs(),!((o=(n=this.states[t])==null?void 0:n.config)!=null&&o.defaultLocale))){(a=this.states[t]).config??(a.config={});const c=Me.env.languages.map(d=>({locale:d.code,name:d.name}));this.states[t].config.defaultLocale=(p=c[0])==null?void 0:p.locale}return{...this.states[t],resources:await Pe().then(async c=>{var r,i,f,E;const{pages:d,components:l}=ls.default(c,"pages","components");let u=l;const y=S.basename(this.options.path),h=await J.findByPk(y);if(h!=null&&h.useAllResources)u=l;else{const T=(await Te.findAll({where:{projectId:y}})).map(F=>F.componentId);u=Object.fromEntries(Object.entries(l||{}).filter(([F])=>T.includes(F)))}return Object.keys(((i=(r=this.states[t])==null?void 0:r.resources)==null?void 0:i.components)||{}).length>0&&(u={...u,...(E=(f=this.states[t])==null?void 0:f.resources)==null?void 0:E.components}),{pages:d,components:u}}).catch(()=>({}))}}async setState(t,n){const o=await yt(n,{exportAssets:!1,includeResources:!0}),a=this.getPublishDir(t);b.mkdirSync(S.dirname(a),{recursive:!0}),b.rmSync(a,{force:!0,recursive:!0}),b.renameSync(o,a),this.states[t]=n}getPublishDir(t){return S.join(this.options.path,t)}static async pageUrlMap(t){var a,p;const{projectIds:n}=this,o={};for(const c of n){const d=await J.findByPk(c);if(!d)continue;const l=await V.shared(c).getState(t),u=d.slug||c,y=ps.default(O.default.env.languages.map(r=>r.code),l.supportedLocales.map(r=>r.locale)),h=(r,i)=>{u&&(o[M.joinURL("/",u,r)]={...i,shouldRedirect:!0,mainPage:!0}),o[M.joinURL("/",c,r)]={...i,shouldRedirect:!0,mainPage:!0};for(const f of y){const E={...i,locale:f};o[M.joinURL("/",f,c,r)]=E,u&&(o[M.joinURL("/",f,u,r)]=E)}};if(t==="draft")for(const r of l.routeIds||[]){const i=(a=l==null?void 0:l.routes)==null?void 0:a[r];if(!i)continue;if(i.params&&i.params.length>0){const v=be.generateParamCombinations({basePath:i.path,params:i.params,routeId:i.id,paramsOptions:i.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const T of v){const R=T.path,F={projectId:c,projectSlug:u,pageSlug:R,pageId:i.displayTemplateId||"",routeId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic&&((p=T==null?void 0:T.routeMetaData)==null?void 0:p.isPublic)};h(R,F)}}const f=i.path,E={projectId:c,projectSlug:u,pageSlug:f,pageId:i.displayTemplateId||"",routeId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic};h(f,E)}for(const r of l.pageIds){const i=l.pages[r];if(!i||t==="production"&&!i.isPublic)continue;const f=i.slug,E=d.slug||c,v={projectId:c,projectSlug:E,pageSlug:f,pageId:r,defaultLocale:y==null?void 0:y[0],locales:y,publishedAt:l.config.publishedAt,isPublic:i.isPublic,templateConfig:i.templateConfig};h(f,v)}}return o}getDocumentSize(){return B.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const t=[];for(const[n,o]of this.sharedInstances.entries()){const a=o.getDocumentSize();t.push({projectId:n,sizeInBytes:a,sizeInMB:`${(a/(1024*1024)).toFixed(2)} MB`,activeConnections:o.conns.size})}return t}};x(V,"INSTANCE_TTL",30*60*1e3),x(V,"sharedInstances",new Fe.LRUCache({max:100,ttl:V.INSTANCE_TTL,dispose:t=>{t.destroy()}}));let le=V;async function $s(e,s,t){if(!e||!b.existsSync(e)||!b.lstatSync(e).isFile())return null;let n=t[e];return n||(n=(async()=>{var o;try{const a=(o=await ks({filePath:e,fileName:s}))==null?void 0:o.data;return a==null?void 0:a.filename}catch(a){return I.error(`Failed to upload asset ${e}:`,a),null}})(),t[e]=n),n}const mt=async(e,s)=>{const t=S.basename(e),n=await qe.call({name:Be,path:M.joinURL("/uploads",t),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const o=b.createWriteStream(s);await Yt.pipeline(n.data,o)}else throw new Error(`download asset failed ${n.status}`)},gt=async(e,s)=>{await Promise.all(e.map(async t=>{try{await mt(t,S.join(s,S.basename(t)))}catch(n){I.error(`Failed to export assets: ${t}, ${n}`)}}))};function ht(e){return Ge.test(e)?[e]:re.test(e)?(Xe.lastIndex=0,Array.from(e.matchAll(Xe)).map(t=>t[1]).filter(t=>!!t)):[]}async function he(e,s,t){const{getFilename:n,exportAssets:o}=t,a=S.join(s,n(e));if(b.mkdirSync(S.dirname(a),{recursive:!0}),b.writeFileSync(a,X.stringify(e)),o){const c=Ie(e,d=>typeof d=="string"&&(Ge.test(d)||re.test(d))).map(d=>{const l=$e.default(e,d);return ht(l)}).flat().filter(Boolean);await gt(c,S.dirname(a))}}const Ze=new Fe.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function et(e,s,t){var c;const n=Ie(e,d=>typeof d=="string"&&(Ge.test(d)||re.test(d))),o=ds.default(2),a=n.map(d=>o(async()=>{try{const l=$e.default(e,d),u=ht(l);for(const y of u){const h=S.basename(y),r=t.getFilePath(y,d),i=r?`${r}:${h}`:h,f=Ze.get(i);if(f){re.test(l)||Ye.default(e,d,f);return}const E=await $s(r,h,s);E&&(re.test(l)||Ye.default(e,d,E),Ze.set(i,E))}}catch(l){I.error(`Failed to process upload for path ${d.join(".")}:`,l.message||l.reason)}})),p=await Promise.allSettled(a);(c=t.onFinish)==null||c.call(t,p)}async function yt(e,{exportAssets:s,pageIds:t="all",componentIds:n="all",rawConfig:o,includeResources:a=!1,routeIds:p="all"}={}){var te,w,m,A,j,z,_,q,K,fe,se,me;const c=t==="all"?e.pageIds:t,d=ie.getComponentDependencies({state:e,pageIds:c,componentIds:n==="all"?Object.keys(e.components):n}),l=p==="all"?e.routeIds:p,u=(g,P)=>{var D;return{id:g.id,name:g.name,isTemplateSection:g.isTemplateSection??!1,templateDescription:g.templateDescription,llmConfig:g.llmConfig,component:g.component,config:g.config,visibility:g.visibility,properties:((D=g.locales)==null?void 0:D[P])??{}}},y=(g,P)=>{var D;return{id:g.id,createdAt:g.createdAt,updatedAt:g.updatedAt,publishedAt:g.publishedAt,isPublic:g.isPublic??!0,templateConfig:g.templateConfig,meta:((D=g.locales)==null?void 0:D[P])??{},sections:U(g.sectionIds.map(H=>{const G=g.sections[H];return G&&u(G,P)}))}},h=g=>({id:g.id,createdAt:g.createdAt,updatedAt:g.updatedAt,publishedAt:g.publishedAt,path:g.path,handler:g.handler,isPublic:g.isPublic??!0,params:g.params??[],enabledGenerate:g.enabledGenerate??!1,displayTemplateId:g.displayTemplateId,dataSource:g.dataSource}),r=U(l.map(g=>{const P=e.routes[g];return P&&h(P)})),i=U(e.supportedLocales.map(g=>g.locale).flatMap(g=>c.map(P=>{const D=e.pages[P];return D&&{locale:g,slug:D.slug,page:y(D,g)}}))),f=ft(),E=S.join(f,"pages");b.mkdirSync(E,{recursive:!0});const v=S.join(f,"components");b.mkdirSync(v,{recursive:!0});const T=S.join(f,"routes");b.mkdirSync(T,{recursive:!0});for(const{locale:g,slug:P,page:D}of i)await he(D,E,{getFilename:()=>`${Oe(P)||"index"}.${g}.yml`,exportAssets:s});for(const g of r)await he(g,T,{getFilename:()=>`${Oe(g.path)||"index"}.yml`,exportAssets:s});for(const g of d){const P=(te=e.components[g])==null?void 0:te.data;P&&await he(P,v,{getFilename:D=>`${D.name||"unnamed"}.${D.id}.yml`,exportAssets:s})}const R=S.join(f,".blocklet/pages/pages.config.yml");b.mkdirSync(S.dirname(R),{recursive:!0});const F={pages:U(c.map(g=>{const P=e.pages[g];return P&&{id:g,slug:P.slug}})),routes:U(l.map(g=>{const P=e.routes[g];return P&&{id:g,path:P.path}})),components:U(d.map(g=>{var D;const P=(D=e.components[g])==null?void 0:D.data;return P&&{id:g,name:P.name}})),...a?{resources:{components:U(Object.keys(((w=e.resources)==null?void 0:w.components)||{}).filter(g=>d.includes(g)).map(g=>{var P,D,H,G;return{id:g,name:(G=(H=(D=(P=e.resources)==null?void 0:P.components)==null?void 0:D[g])==null?void 0:H.component)==null?void 0:G.name}}))}}:{},supportedLocales:e.supportedLocales,config:e.config};b.writeFileSync(R,X.stringify(F));const ue=S.join(f,"config.source.json");if(o&&b.writeFileSync(ue,JSON.stringify(o)),a){const g=S.join(f,"resources"),P=S.join(g,"components");b.mkdirSync(P,{recursive:!0});for(const G of Object.keys(((m=e==null?void 0:e.resources)==null?void 0:m.components)??{}).filter($=>d.includes($))){const $=(z=(j=(A=e.resources)==null?void 0:A.components)==null?void 0:j[G])==null?void 0:z.component;$&&await he($,P,{getFilename:Y=>`${Y.name||"unnamed"}.${Y.id}.yml`,exportAssets:s})}const D=S.join(f,"chunks");b.mkdirSync(D,{recursive:!0});const{chunks:H}=await Pe();for(const G of Object.keys(((_=e==null?void 0:e.resources)==null?void 0:_.components)??{}).filter($=>d.includes($))){const $=(fe=(K=(q=e.resources)==null?void 0:q.components)==null?void 0:K[G])==null?void 0:fe.component;if($&&((se=$.renderer)==null?void 0:se.type)==="react-component"){const Y=((me=$.renderer)==null?void 0:me.chunks)??[];if((Y==null?void 0:Y.length)>0)for(const je of Y){const Ke=S.join(D,je),_e=H==null?void 0:H[je];try{_e&&b.existsSync(_e)&&!b.existsSync(Ke)&&b.copyFileSync(_e,Ke)}catch(It){I.error(`copy chunk ${je} error`,It.message)}}}}}return f}async function He(e,{importAssets:s,includeResources:t}={}){var a,p,c,d;if(!b.existsSync(e))return null;let n,o=!1;try{b.lstatSync(e).isDirectory()?n=e:/\.(tgz|gz|tar)$/.test(e)&&(o=!0,n=ft(),await Wt.x({file:e,C:n}));const l=ke.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),u=l&&S.join(S.dirname(l),"../../pages"),y=l&&S.join(S.dirname(l),"../../components"),h=l&&S.join(S.dirname(l),"../../chunks"),r=l&&S.join(S.dirname(l),"../../routes");if(!l)return null;const i=X.parse(b.readFileSync(l).toString()),f=(w,m,A)=>{let j=S.join(w,`${m}${A?`.${A}`:""}.yml`);return(!b.existsSync(j)||!b.lstatSync(j).isFile())&&(j=S.join(w,m,`index${A?`.${A}`:""}.yml`),!b.existsSync(j)||!b.lstatSync(j))?null:X.parse(b.readFileSync(j).toString())},E=(w,m)=>{try{const A=ke.globSync(`*.${m}.yml`,{cwd:w,absolute:!0})[0];return A?X.parse(b.readFileSync(A).toString()):null}catch(A){I.error("parse component error",A)}return null},v=(w,m)=>{let A=S.join(w,`${m}.yml`);return(!b.existsSync(A)||!b.lstatSync(A).isFile())&&(A=S.join(w,m,"index.yml"),!b.existsSync(A)||!b.lstatSync(A))?null:X.parse(b.readFileSync(A).toString())},T=U(i.pages.map(({slug:w})=>{var z;const m=U(i.supportedLocales.map(({locale:_})=>{const q=u?f(u,Oe(w),_):void 0;if(q)return{locale:_,page:q};const K=u?f(u,w,_):void 0;return K&&{locale:_,page:K}})),A=(z=m[0])==null?void 0:z.page;if(!A)return null;const j=A.sections.map(_=>{const q=_.id||Se();return{id:q,component:_.component,config:_.config,name:_.name,isTemplateSection:_.isTemplateSection??!1,templateDescription:_.templateDescription,llmConfig:_.llmConfig,visibility:_.visibility,locales:Object.fromEntries(U(m.map(({locale:K,page:fe})=>{const se=fe.sections.find(me=>me.id===q);return se&&[K,se.properties]})))}});return{id:A.id||Se(),createdAt:A.createdAt,updatedAt:A.updatedAt,publishedAt:A.publishedAt,isPublic:A.isPublic??!0,templateConfig:A.templateConfig,slug:w,sections:Object.fromEntries(j.map(_=>[_.id,_])),sectionIds:j.map(_=>_.id),locales:Object.fromEntries(m.map(({locale:_,page:q})=>[_,q.meta]))}})),R=U(((a=i==null?void 0:i.routes)==null?void 0:a.map(({path:w})=>{const m=r?v(r,Oe(w)):void 0;return{...m,id:(m==null?void 0:m.id)||Se(),createdAt:(m==null?void 0:m.createdAt)??new Date().toISOString(),updatedAt:(m==null?void 0:m.updatedAt)??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:(m==null?void 0:m.path)??`/${m==null?void 0:m.id}`,params:m==null?void 0:m.params,handler:(m==null?void 0:m.handler)??"Pages Kit",isPublic:(m==null?void 0:m.isPublic)??!0,enabledGenerate:(m==null?void 0:m.enabledGenerate)??!1,displayTemplateId:(m==null?void 0:m.displayTemplateId)??void 0,dataSource:(m==null?void 0:m.dataSource)??{}}}))??[]),F=y?U(((p=i.components)==null?void 0:p.map(({id:w})=>E(y,w)))??[]):[];if(s){const w=(...m)=>{I.info(`[${o?S.basename(e):S.basename(S.join(e,"../../../../"))}] importAssets:`,...m)};try{w("wait image-bin api ready"),await us.default({resources:[`${qe.getComponentWebEndpoint(ms)}/api/sdk/uploads`],validateStatus:j=>j>=200&&j<=500}),w("image-bin api is ready");const m={},A={};w("start to upload assets"),await Promise.allSettled([et(F,m,{getFilePath:j=>y&&S.join(y,j),onFinish:j=>{w(`upload ${j.length} component assets`)}}),et(T,A,{getFilePath:(j,z)=>{const _=$e.default(T,z.slice(0,1));return u&&S.join(u,S.dirname(_.slug),j)},onFinish:j=>{w(`upload ${j.length} page assets`)}})]),w("upload assets done"),global.gc&&global.gc()}catch(m){w("Error during asset import:",m)}}const ue={};if(t){const w=l&&S.join(S.dirname(l),"../../resources/components"),m=U(((d=(c=i.resources)==null?void 0:c.components)==null?void 0:d.map(({id:A})=>E(w,A)))??[]);m.length>0&&(ue.components=Object.fromEntries(m.map((A,j)=>[A.id,{index:j,component:A}])))}const te={};if(h&&b.existsSync(h)){const w=b.readdirSync(h);for(const m of w)te[m]=S.join(h,m)}return{supportedLocales:i.supportedLocales,pageIds:T.map(w=>w.id),components:Object.fromEntries(F.map((w,m)=>[w.id,{index:m,data:w}])),pages:Object.fromEntries(T.map(w=>[w.id,w])),config:i.config||{},resources:ue,chunks:te,routeIds:R.map(w=>w.id),routes:Object.fromEntries(R.map(w=>[w.id,w])),dataSourceIds:[],dataSources:{}}}finally{o&&n&&b.rmSync(n,{force:!0,recursive:!0})}}async function Ue(e,s,{routes:t,mergeMode:n="byUpdateTime",deleteRoutes:o=!1,publishMode:a=void 0}={}){try{a&&ct(a)}catch(h){I.error("clear preload page cache error",{error:h})}const{pages:p,pageIds:c,routeIds:d,routes:l,supportedLocales:u}=e;if(a==="production"){let h=t??[],r=null;for(const i of d??[]){const f=l==null?void 0:l[i];if(f!=null&&f.params&&(f==null?void 0:f.params.length)>0&&(f!=null&&f.paramsOptions)&&(f==null?void 0:f.paramsOptions.length)>0){const E=be.generateParamCombinations({basePath:f.path,params:f.params,routeId:f.id,paramsOptions:f.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]}),v=Object.fromEntries(E.map(T=>[`${i}-${T.paramOptionIds.join("-")}`,T]));r={...r||{},...v},t||(h=[...h,...E.map(T=>`${i}-${T.paramOptionIds.join("-")}`)])}else t||h.push(i)}I.info("routeIds to be published: ",h);for(const i of h){let f=i;if(f.includes("-")){const[T]=f.split("-");f=T}const E=l==null?void 0:l[f];if(!E){const T=s.pageIds.indexOf(f);T!==-1&&o&&(s.pageIds.splice(T,1),delete s.pages[f]);for(const R of s.pageIds)R.includes(`${f}-`)&&(s.pageIds.splice(s.pageIds.indexOf(R),1),delete s.pages[R]);I.info("delete main route page",f);continue}if(i.includes("-")&&!(r!=null&&r[i])){const T=s.pageIds.indexOf(i);T!==-1&&o&&(s.pageIds.splice(T,1),delete s.pages[i]),I.info("delete page",i);continue}if(!E.displayTemplateId){I.info("no display template",i);continue}const v=p[E.displayTemplateId];if(!v){I.info("no template page",i);continue}if(s.pageIds.includes(i)){if(I.info("has need update page",i),n==="replace")s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("replace page",i);else if(n==="byUpdateTime"){const T=s.pages[E.id];(!T||E.updatedAt&&E.updatedAt>T.updatedAt)&&(s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("replace page by update time",i))}}else s.pageIds.push(i),s.pages[i]=ve({page:v,route:E,state:e,routeId:i,routePathInfo:r==null?void 0:r[i]}),I.info("add page",i)}if(o&&!t)for(const i of s.pageIds)h!=null&&h.includes(i)||(delete s.pages[i],I.info("delete page",i)),s.pageIds=[...s.pageIds].filter(f=>h==null?void 0:h.includes(f))}else{for(const h of c){const r=p[h];if(r)if(s.pageIds.includes(r.id)){if(n==="replace")s.pages[r.id]=r;else if(n==="byUpdateTime"){const i=s.pages[r.id];(!i||r.updatedAt&&r.updatedAt>i.updatedAt)&&(s.pages[r.id]=r)}}else s.pageIds.push(r.id),s.pages[r.id]=r}for(const h of d){const r=l[h];if(r)if(s.pageIds.includes(r.id)){if(n==="replace")s.routes[r.id]=r;else if(n==="byUpdateTime"){const i=s.routes[r.id];(!i||r.updatedAt&&r.updatedAt>i.updatedAt)&&(s.routes[r.id]=r)}}else s.routeIds.push(r.id),s.routes[r.id]=r}}if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(...is.default(u)),o)for(const h of Object.keys(s.components))delete s.components[h];let y=JSON.parse(JSON.stringify(e.components));y=Object.fromEntries(await Promise.all(Object.entries(y).map(async([h,r])=>{const i=await St(r==null?void 0:r.data);return[h,{...r,data:i}]}))),Object.assign(s.components,y),Object.assign(s.config,JSON.parse(JSON.stringify(e.config))),s.resources.components=JSON.parse(JSON.stringify(e.resources.components||{}))}const St=Q.memoize(async e=>{var s;if(!cs.default(e==null?void 0:e.properties))return e;if(((s=e==null?void 0:e.renderer)==null?void 0:s.type)==="react-component"){const{script:t}=(e==null?void 0:e.renderer)||{};if(t&&t.includes("PROPERTIES_SCHEMA"))try{const n=await ut(t,"PROPERTIES_SCHEMA",e.id);n&&n.length>0&&e&&(e.properties={},n.forEach((o,a)=>{e!=null&&e.properties&&(e.properties[o.id]={index:a,data:o})}))}catch(n){I.error("checkPropertiesFromCode error",{componentId:e.id,name:e.name},{error:n})}}return e},{keyGenerator:e=>{var l,u,y,h;const s=(e==null?void 0:e.id)||"",t=(e==null?void 0:e.name)||"",n=((l=e==null?void 0:e.renderer)==null?void 0:l.type)||"",o=(e==null?void 0:e.properties)||{},a=(e==null?void 0:e.updatedAt)||"",p=ee.createHash("md5").update(JSON.stringify(o)).digest("hex");let c="",d="";return((u=e==null?void 0:e.renderer)==null?void 0:u.type)==="react-component"&&(c=ee.createHash("md5").update(((y=e==null?void 0:e.renderer)==null?void 0:y.script)||"").digest("hex"),d=ee.createHash("md5").update(((h=e==null?void 0:e.renderer)==null?void 0:h.editComponent)||"").digest("hex")),JSON.stringify(["checkPropertiesFromCode",s,t,n,p,a,c,d])},lruOptions:{max:100,ttl:1e3*60*60}});let Ae,Z,Ve,Je,ze;function wt(){return Ae=(async()=>{const e=qe.getResources({types:[{did:Be,type:Re},{did:Cs,type:Re}]});Z=(await Promise.all(e.map(async t=>{const n=t.path?await He(t.path,{importAssets:!1}):void 0;return n?{blockletId:t.did,state:n,blockletTitle:t.title}:void 0}))).filter(t=>!!t),Ve=Z.reduce((t,n)=>Object.assign(t,Object.fromEntries(Object.values(n.state.pages).map(o=>o?[o==null?void 0:o.id,{page:o,blockletId:n.blockletId}]:[]))),{});const s=Z.reduce((t,n)=>Object.assign(t,Object.fromEntries(Object.values(n.state.components).map(o=>[o.data.id,{blockletId:n.blockletId,component:o.data}]))),{});Je=Object.fromEntries(await Promise.all(Object.entries(s).map(async([t,n])=>{const o=await St(n.component);return[t,{...n,component:o}]}))),ze=Z.reduce((t,n)=>Object.assign(t,n.state.chunks),{})})(),Ae}function bt(e){const s=ot.default(async()=>{await wt().catch(t=>{I.error("load resource states error",{error:t})}),await(e==null?void 0:e({states:Z,pages:Ve,components:Je,chunks:ze}))},3e3,{leading:!1,trailing:!0});return s(),O.default.events.on(O.default.Events.componentAdded,s),O.default.events.on(O.default.Events.componentRemoved,s),O.default.events.on(O.default.Events.componentStarted,s),O.default.events.on(O.default.Events.componentStopped,s),O.default.events.on(O.default.Events.componentUpdated,s),O.default.events.on(Le,s),()=>{O.default.events.off(O.default.Events.componentAdded,s),O.default.events.off(O.default.Events.componentRemoved,s),O.default.events.off(O.default.Events.componentStarted,s),O.default.events.off(O.default.Events.componentStopped,s),O.default.events.off(O.default.Events.componentUpdated,s),O.default.events.off(Le,s)}}const Et=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),we=globalThis;var tt;(tt=we[Et])==null||tt.call(we);we[Et]=bt(async({pages:e,components:s})=>{const{projectIds:t}=le;I.info(`start update resource states projects(${t.length})`,t),await Promise.race([new Promise(n=>{setTimeout(()=>{n({})},30*1e3)}),Promise.all(t.map(async n=>{const o=le.shared(n);o.syncedStore.resources.pages=e;const a=await J.findByPk(n);if(a!=null&&a.useAllResources)o.syncedStore.resources.components=s;else{const c=(await Te.findAll({where:{projectId:n}})).map(l=>l.componentId),d=Object.fromEntries(Object.entries(s||{}).filter(([l])=>c.includes(l)));o.syncedStore.resources.components=d}I.info(`update [${n}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))]).catch(n=>{I.error("update resource states failed:",n)})});async function Bs(){I.info("trigger reload all project resource"),O.default.events.emit(Le)}async function Pe({ensureLoaded:e=!0}={}){return e&&(Ae??(Ae=wt()),await Ae),{states:Z,pages:Ve,components:Je,chunks:ze}}exports.COMPONENT_DID=Be;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=rt;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=Ne;exports.PUBLISH_MODES=Fs;exports.Project=J;exports.RESOURCE_TYPE=Re;exports.SITE_STATE_PATH=oe;exports.STATE_MODES=Us;exports.SiteState=le;exports.clearPreloadComponentsCache=it;exports.clearPreloadComponentsCacheByMode=ct;exports.downloadAsset=mt;exports.downloadAssets=gt;exports.fromPackage=He;exports.getComponentFromState=ce;exports.getComponentFromStateByName=Ps;exports.getExportSchemaValueFromCode=ut;exports.getMultiTenantAllProjectAccessPassports=ys;exports.getPreloadComponent=pt;exports.getPreloadComponents=Os;exports.getPreloadComponentsCacheKey=lt;exports.getResourceStates=Pe;exports.initPackResourceStates=bt;exports.isMultiTenant=hs;exports.logger=I;exports.mergeState=Ue;exports.nextId=Se;exports.toPackage=yt;exports.triggerReloadAllProjectResource=Bs;
|
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-Bd3-qe58.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 z=require("@arcblock/did-auth-storage-nedb"),D=require("@blocklet/sdk/lib/config"),G=require("@blocklet/sdk/lib/service/auth"),K=require("@blocklet/sdk/lib/wallet"),Q=require("@blocklet/sdk/lib/wallet-authenticator"),V=require("@blocklet/sdk/lib/wallet-handler"),P=require("path"),S=require("./chunks/site-state-
|
|
1
|
+
"use strict";const z=require("@arcblock/did-auth-storage-nedb"),D=require("@blocklet/sdk/lib/config"),G=require("@blocklet/sdk/lib/service/auth"),K=require("@blocklet/sdk/lib/wallet"),Q=require("@blocklet/sdk/lib/wallet-authenticator"),V=require("@blocklet/sdk/lib/wallet-handler"),P=require("path"),S=require("./chunks/site-state-Bd3-qe58.js"),A=require("@blocklet/crawler/middlewares"),X=require("@blocklet/pages-kit/types"),Y=require("@blocklet/pages-kit/utils/common"),Z=require("@blocklet/pages-kit/utils/preload"),F=require("@blocklet/sdk/lib/component"),ee=require("cheerio/slim"),te=require("express"),E=require("fs"),oe=require("lodash/get"),ne=require("mustache"),I=require("ufo"),u=o=>o&&o.__esModule?o:{default:o};function le(o){if(o&&o.__esModule)return o;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(t,e,a.get?a:{enumerable:!0,get:()=>o[e]})}}return t.default=o,Object.freeze(t)}const re=u(z),i=u(D),ce=u(G),se=u(K),ae=u(Q),ie=u(V),ue=u(P),L=le(ee),de=u(oe),pe=u(ne),fe=(o={})=>{const t={data:new Map,timers:new Map,set:(e,a,_=o.ttl||36e5)=>{o.max&&t.data.size>=o.max&&t.delete(t.data.keys().next().value),t.timers.has(e)&&clearTimeout(t.timers.get(e)),t.timers.set(e,setTimeout(()=>t.delete(e),_)),t.data.set(e,a)},get:e=>t.data.get(e),has:e=>t.data.has(e),delete:e=>(t.timers.has(e)&&clearTimeout(t.timers.get(e)),t.timers.delete(e),t.data.delete(e)),clear:()=>{t.data.clear();for(const e of t.timers.values())clearTimeout(e);t.timers.clear()}};return t},O=fe({max:1,ttl:1e3*30});se.default();const he=new ae.default;new ie.default({authenticator:he,tokenStorage:new re.default({dbPath:ue.default.join(i.default.env.dataDir,"auth.db")})});const me=new ce.default,ge=async()=>{try{const o=O.get("blockletInfo");if(o)return o;const{blocklet:t}=await me.getBlocklet();return O.set("blockletInfo",t),t}catch{return null}},we=["/assets/"],U=()=>[!0,"true"].includes(i.default.env.preferences.allowCrawler);function B(){U()?A.initCronCrawlBlocklet({time:"0 0 */12 * * *",options:{}}):A.cancelCronCrawlBlocklet()}B();i.default.events.on(i.default.Events.envUpdate,B);function _e({app:o,viteDevServer:t,state:e}){let a;if(t){const n=E.readFileSync(P.resolve(process.cwd(),"./index.html"),"utf-8");o.use(async(b,v,T)=>{const q=b.originalUrl;a=await t.transformIndexHtml(q,n),T()})}else a=E.readFileSync(P.resolve(process.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const _=te.Router();_.use((n,b,v)=>{if(n.headers["x-unique-record"]==="dial_http"){S.logger.info("[html] dial http request, return 200 status code"),b.status(200).send("ok");return}v()},A.initSEOMiddleware({autoReturnHtml:!0,allowCrawler:U})),_.get("/:path(*)?",async(n,b,v)=>{var M,$,W;if(we.some(c=>{var p;return(p=n.path)==null?void 0:p.startsWith(c)})){v();return}const T=performance.now(),q=()=>Math.round(performance.now()-T),H="production";let r,h,C=a;if(n.path.startsWith("/pages")){const c=n.params.lang,p=n.cookies.nf_lang,k=new Set([...i.default.env.languages.map(w=>w.code)]);let g=(c&&k.has(c)?c:void 0)||(k.has(p)?p:void 0)||[...k][0];if((!g||!((M=e.supportedLocales)!=null&&M.find(w=>w.locale===g)))&&(g=((W=($=e.supportedLocales)==null?void 0:$[0])==null?void 0:W.locale)||""),g){const w=[];Object.values(e.pages).forEach(s=>{const J=Object.values((s==null?void 0:s.sections)??{}).filter(f=>{var y;return f.component==="custom-component"&&((y=f.config)==null?void 0:y.componentId)}).map(f=>{var y,x;return{id:f.id,componentId:f.config.componentId,useCache:f.config.useCache,cacheDuration:f.config.cacheDuration,properties:(x=(y=f.locales)==null?void 0:y[g])==null?void 0:x.properties}});w.push(...J)});const N=new Promise(s=>{setTimeout(()=>{s({})},90*1e3)});try{await Promise.race([N,S.getPreloadComponents({mode:H,req:n,state:e,locale:g,instances:w,module:X.PreloadComponentScriptModule.UMD_FN}).then(s=>{s&&(h=Z.injectPreloadComponents(s))})])}catch(s){S.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements",s)}}}try{const c=(r==null?void 0:r.title)||i.default.env.appName,p=(r==null?void 0:r.description)||i.default.env.appDescription,k=I.withQuery(I.joinURL(i.default.env.appUrl,"/.well-known/service/blocklet/og.png"),{title:c,description:p});C=pe.default.render(a,{ogTitle:c,ogDescription:p,ogImage:be(r==null?void 0:r.image)||k,pagesPublishedAt:(e==null?void 0:e.config.publishedAt)||new Date().getTime()})}catch{}const l=e==null?void 0:e.config.fontFamily,R=n.query.mode==="draft"||n.url.includes("preview"),m=L.load(C);let d=r==null?void 0:r.backgroundColor;if(d&&Y.isMuiColorKey(d)){const c=await ge();d=de.default(c,`settings.theme.light.palette.${d}`,d)}m("head").find("#injected-head-elements").replaceWith(`
|
|
2
2
|
${d?`<meta name="theme-color" content="${d}" /><style>html,body,#app {background-color: ${d};}</style>`:""}
|
|
3
3
|
${l!=null&&l.title?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${l.title}&display=swap">`:""}
|
|
4
4
|
${l!=null&&l.description&&(l==null?void 0:l.description)!==(l==null?void 0:l.title)?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${l.description}&display=swap">`:""}
|
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-Bd3-qe58.js"),M=require("async_hooks"),U=require("express"),F=require("fs"),J=require("joi"),X=require("lodash/groupBy"),W=require("lodash/sortBy"),b=require("path"),$=require("@blocklet/sdk/lib/middlewares/auth"),G=require("@blocklet/sdk/lib/component"),y=t=>t&&t.__esModule?t:{default:t},l=y(F),I=y(J),D=y(X),K=y(W),k=y(b),v=y($);new M.AsyncLocalStorage;const Y=async(t,e,o)=>{var n,s,r,i;try{const{projectId:u}=t.params;if(!u)return o();const f=await c.Project.findByPk(u);if(!f)return e==null?void 0:e.status(404).json({error:"Project not found"});const _=(n=t.user)==null?void 0:n.did,h=((s=t.user)==null?void 0:s.role)||"UNKNOWN_ROLE";if(!_)return e==null?void 0:e.status(401).json({error:"Authentication required"});if(c.isMultiTenant()){const w=f.createdBy===_,a=(i=(r=c.getMultiTenantAllProjectAccessPassports())==null?void 0:r.includes)==null?void 0:i.call(r,h);if(!w&&!a)return e==null?void 0:e.status(403).json({error:"No permission to access this project in multi-tenant mode"})}else if(!["owner","admin","pagesEditor"].includes(h))return e==null?void 0:e.status(403).json({error:"No permission to access this project in single-tenant mode"});t.project=f,t.projectId=u,o()}catch(u){c.logger.error("Project middleware error:",u),e==null||e.status(500).json({error:"Internal server error"})}};function N(t,e){return new Promise((o,n)=>{const s=l.default.createReadStream(t),r=l.default.createWriteStream(e);s.on("error",n),r.on("error",n),r.on("finish",o),s.pipe(r)})}async function T(t,e){await l.default.promises.mkdir(e,{recursive:!0});const o=await l.default.promises.readdir(t,{withFileTypes:!0});for(const n of o){const s=k.default.join(t,n.name),r=k.default.join(e,n.name);n.isDirectory()?await T(s,r):await N(s,r)}}async function z(t,e){(await l.default.promises.stat(t)).isDirectory()?await T(t,e):await N(t,e)}const O=(t,e,o)=>c.isMultiTenant()?v.default()(t,e,o):v.default({roles:["owner","admin","pagesEditor"]})(t,e,o),H=(t,e)=>{const o=G.getResourceExportDir({projectId:t,releaseId:e});return b.join(o,c.COMPONENT_DID,c.RESOURCE_TYPE)},S=U.Router(),B="@page",q="@component",P=":",E="ALL",L="@project",C=({pageId:t,projectId:e})=>[B,e,t].join(P),Q=t=>{const[e,o,n]=t.split(P);if(e===B)return{pageId:n,projectId:o}},A=({componentId:t,projectId:e})=>[q,e,t].join(P),V=t=>{const[e,o,n]=t.split(P);if(e===q)return{componentId:n,projectId:o}},Z=t=>[L,t].join(P),tt=t=>{const[e,o]=t.split(P);if(e===L)return o},et=t=>{try{return JSON.parse(t)}catch{}return{}};async function x(t){const e=await c.SiteState.shared(t).getState("production"),o=await c.Project.findByPk(t),n=e.pageIds.map(r=>{const i=e.pages[r];if(i)return{id:C({pageId:r,projectId:t}),name:i.slug}}).filter(Boolean),s=K.default(Object.values(e.components),r=>r.index).map(({data:r})=>({id:A({componentId:r.id,projectId:t}),name:r.name||r.id}));return{id:Z(t),name:(o==null?void 0:o.name)||"Unnamed Project",children:[{id:C({pageId:E,projectId:t}),name:"Pages",children:n},{id:A({componentId:E,projectId:t}),name:"Components",children:s}]}}S.get("/resources",O,async(t,e)=>{const{projectId:o}=et(t.query.resourcesParams);if(o){t.params={...t.params,projectId:o},await Y(t,e,()=>{});const r=await x(o);e.json({resources:[r]});return}const n=await c.Project.findAll({where:{}}),s=await Promise.all(n.map(r=>x(r.id)));e.json({resources:s})});const ot=I.default.object({projectId:I.default.string().required().min(1),releaseId:I.default.string().allow(""),resources:I.default.array().items(I.default.string()).required(),locale:I.default.string().allow("")});S.post("/resources",O,async(t,e)=>{const{resources:o,projectId:n,releaseId:s}=await ot.validateAsync(t.body),r="production",i=[],u=[];for(const a of o){if(tt(a))continue;const{pageId:m,projectId:j}=Q(a)||{};if(m)m===E||m&&j&&i.push({pageId:m,projectId:j});else{const{componentId:p,projectId:d}=V(a)||{};p===E||p&&d&&u.push({componentId:p,projectId:d})}}const f=D.default(i,"projectId"),_=D.default(u,"projectId"),h=new Set([...Object.keys(f),...Object.keys(_)]),w=H(n,s);l.default.rmSync(w,{recursive:!0,force:!0}),l.default.mkdirSync(w,{recursive:!0});for(const a of h){const m=await c.SiteState.shared(a).getState(r),j=f[a],p=_[a],d=j==null?void 0:j.map(g=>g.pageId),R=p==null?void 0:p.map(g=>g.componentId);if(d!=null&&d.length||R!=null&&R.length){const g=await c.toPackage(m,{exportAssets:!0,pageIds:d,componentIds:R});await z(g,w),l.default.rmSync(g,{recursive:!0,force:!0})}c.logger.info(`Exported resources for project ${a}`,{pageIds:d,componentIds:R})}e.json({})});S.get("/all-resources",O,async(t,e)=>{const{states:o}=await c.getResourceStates(),n=o==null?void 0:o.map(s=>{const r={blockletId:s.blockletId,blockletTitle:s.blockletTitle,components:{}};if(s.state.components&&(r.components=s.state.components),Object.keys(r.components).length!==0)return r}).filter(Boolean);e.json(n)});module.exports=S;
|
package/lib/cjs/site-state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/site-state-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/site-state-Bd3-qe58.js");require("@blocklet/pages-kit/utils/property");require("@blocklet/pages-kit/utils/route");require("@blocklet/quickjs");require("@blocklet/sdk/lib/component");require("@blocklet/sdk/lib/config");require("@reactivedata/reactive");require("@syncedstore/core");require("crypto");require("fs");require("glob");require("lib0/decoding");require("lib0/encoding");require("lodash/cloneDeep");require("lodash/debounce");require("lodash/get");require("lodash/isEmpty");require("lodash/pick");require("lodash/set");require("lodash/union");require("lru-cache");require("nanoid");require("p-limit");require("path");require("stream/promises");require("tar");require("ufo");require("wait-on");require("y-protocols/awareness");require("y-protocols/sync");require("yaml");require("yjs");const t=require("@blocklet/pages-kit/types/state");exports.PUBLISH_MODES=e.PUBLISH_MODES;exports.SITE_STATE_PATH=e.SITE_STATE_PATH;exports.STATE_MODES=e.STATE_MODES;exports.default=e.SiteState;exports.downloadAsset=e.downloadAsset;exports.downloadAssets=e.downloadAssets;exports.fromPackage=e.fromPackage;exports.getResourceStates=e.getResourceStates;exports.initPackResourceStates=e.initPackResourceStates;exports.mergeState=e.mergeState;exports.nextId=e.nextId;exports.toPackage=e.toPackage;exports.triggerReloadAllProjectResource=e.triggerReloadAllProjectResource;Object.keys(t).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>t[r]})});
|