@blocklet/pages-kit-inner-components 0.4.23 → 0.4.24
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-B57sn0Rr.js +57 -0
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +6 -6
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/_chunks/site-state-D28bWM8J.js +1490 -0
- package/lib/es/components.js +11 -10
- package/lib/es/project-html.js +93 -91
- package/lib/es/resources.js +5 -6
- package/lib/es/site-state.js +7 -7
- package/package.json +3 -3
- package/lib/cjs/_chunks/components-paCr_hhD.js +0 -48
- package/lib/cjs/_chunks/site-state-HLTcjGnI.js +0 -1
- package/lib/es/_chunks/components-CqR6z_0s.js +0 -454
- package/lib/es/_chunks/site-state-Bvk8uNN5.js +0 -968
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";const st=require("vite-plugin-node-polyfills/shims/process"),nt=require("vite-plugin-node-polyfills/shims/global"),ot=require("@blocklet/pages-kit/builtin/utils"),te=require("@blocklet/pages-kit/types"),ne=require("@blocklet/pages-kit/utils/property"),$=require("@blocklet/quickjs"),rt=require("@blocklet/sdk/lib/config"),Te=require("lru-cache"),Me=require("node-fetch"),v=require("ufo"),ie=require("crypto"),at=require("@blocklet/logger"),it=require("vite-plugin-node-polyfills/shims/buffer"),ct=require("@blocklet/pages-kit/utils/builtin"),me=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),ce=require("@blocklet/sdk/lib/component"),lt=require("autoprefixer"),ut=require("esbuild"),E=require("fs"),pt=require("postcss"),dt=require("tailwindcss"),ft=require("typescript"),mt=require("@reactivedata/reactive"),Z=require("@syncedstore/core"),ge=require("glob"),gt=require("lib0/decoding"),ht=require("lib0/encoding"),R=require("lodash"),yt=require("nanoid"),St=require("p-limit"),m=require("path"),wt=require("stream/promises"),Et=require("tar"),bt=require("wait-on"),G=require("y-protocols/awareness"),ue=require("y-protocols/sync"),Tt=require("yaml"),Ot=require("yjs"),Ct=require("lodash/isNil"),j=require("sequelize");require("sqlite3");const x=e=>e&&e.__esModule?e:{default:e};function Q(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 oe=x(st),xe=x(nt),w=x(rt),jt=x(Me),It=x(at),Pt=x(it),At=x(lt),_t=Q(ut),vt=x(pt),xt=x(dt),D=x(ft),pe=Q(gt),A=Q(ht),Dt=x(St),kt=x(m),Rt=x(bt),J=Q(Tt),B=Q(Ot),Nt=x(Ct);w.default.env.mode;const Lt="image-bin";w.default.env.INIT_TEMPLATE_PATH;const Ut=oe.default.env.DATABASE_URL||kt.default.join(w.default.env.dataDir,"db/pages-kit.db"),De=w.default,Mt=()=>w.default.env.tenantMode==="multiple",Ft=()=>{var e;return(Nt.default(De.env.preferences.multiTenantAllProjectAccessPassports)?[]:(e=De.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:e.split(","))||[]},I=It.default("pages-kit"),qt=j.DataTypes.sqlite.DATE.parse;j.DataTypes.sqlite.DATE.parse=(e,s)=>typeof e=="number"?new Date(e):qt(e,s);const X=new j.Sequelize({dialect:"sqlite",storage:Ut,benchmark:oe.default.env.ENABLE_SEQUELIZE_BENCHMARK==="true",retry:{match:[/SQLITE_BUSY/],name:"query",max:10},logging:oe.default.env.ENABLE_SEQUELIZE_LOGGING==="true"?console.log:!1});X.query("pragma journal_mode = WAL;");X.query("pragma synchronous = normal;");X.query("pragma journal_size_limit = 67108864;");class le extends j.Model{}le.init({id:{type:j.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:j.DataTypes.UUIDV4},projectId:{type:j.DataTypes.UUID,allowNull:!1},componentId:{type:j.DataTypes.STRING,allowNull:!1}},{sequelize:X,tableName:"ProjectComponents",timestamps:!1});class q extends j.Model{static async getProjectByIdOrSlug(s){return q.findOne({where:{[j.Op.or]:[{id:s},{slug:s}]}})}}q.init({id:{type:j.DataTypes.UUID,defaultValue:j.DataTypes.UUIDV4,primaryKey:!0},name:{type:j.DataTypes.STRING,allowNull:!1},description:j.DataTypes.TEXT,createdAt:j.DataTypes.DATE,updatedAt:j.DataTypes.DATE,createdBy:{type:j.DataTypes.STRING,allowNull:!1},updatedBy:{type:j.DataTypes.STRING,allowNull:!1},slug:j.DataTypes.STRING,icon:j.DataTypes.STRING,pinnedAt:j.DataTypes.DATE,useAllResources:j.DataTypes.BOOLEAN,relatedBlocklets:{type:j.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(e){this.setDataValue("relatedBlocklets",JSON.stringify(e||{}))}}},{sequelize:X,paranoid:!0});q.hasMany(le,{foreignKey:"projectId",as:"components"});const $t=async(e,{componentId:s})=>{const t=`@tailwind components;
|
|
2
|
+
@tailwind utilities;
|
|
3
|
+
`,n=`.CustomComponent_${s}`;return(await vt.default([xt.default({content:[{raw:e,extension:"tsx"}]}),At.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),a=>{a.walkRules(l=>{l.selectors=l.selectors.map(r=>r.replace(/\.(.+)/g,`${n}.$1,${n} .$1`))})}]).process(t)).css},Bt=async(e,{componentId:s})=>{const t=await $t(e,{componentId:s});return`export const __PagesKit_CSS__ = ${JSON.stringify(t)};
|
|
4
|
+
|
|
5
|
+
${e}
|
|
6
|
+
`},ke=$.memoize(async(e,s)=>{let t=D.default.transpileModule(e,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.ESNext},transformers:{before:[me.createBuiltinModuleTransformer(D.default)]}}).outputText;if(s.tailwind&&(t=await Bt(t,{componentId:s.componentId})),s.module===te.PreloadComponentScriptModule.ESM)return t;const n=D.default.transpileModule(t,{compilerOptions:{jsx:D.default.JsxEmit.React,target:D.default.ScriptTarget.ES2016,module:D.default.ModuleKind.CommonJS,moduleResolution:D.default.ModuleResolutionKind.Node16}}).outputText;return s.module===te.PreloadComponentScriptModule.CJS?n:Gt(s.moduleName,n)},{keyGenerator:(e,s)=>{const t=ie.createHash("md5").update(e).digest("hex"),n={...s,componentId:s.componentId,module:s.module,...s.module!==te.PreloadComponentScriptModule.ESM?{moduleName:s.moduleName}:{},tailwind:s.tailwind};return JSON.stringify(["transpileModule",t,n])},lruOptions:{max:100,ttl:1e3*60*60}}),Vt=async(e,s)=>{var l,r;const n=(r=(l=(await _t.build({entryPoints:["index.tsx"],external:Object.keys(ct.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(i){let c=null;i.onResolve({filter:/.*/},u=>u.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:u.path==="./component"?{path:"component.tsx",namespace:"vfs"}:me.isRelativeModule(u.path)?{path:u.path,namespace:"vfs"}:null),i.onLoad({filter:/.*/,namespace:"vfs"},async u=>{var p;if(u.path==="index.tsx")return{contents:`export { ${s} } from './component'`,loader:"tsx"};if(u.path==="component.tsx")return{contents:e,loader:"tsx"};if(me.isRelativeModule(u.path)){c||(c=await _e({ensureLoaded:!1}));const g=u.path.split("/").pop();if((p=c==null?void 0:c.chunks)!=null&&p[g])return{contents:E.readFileSync(c.chunks[g],"utf-8"),loader:"js"};const h=v.joinURL("chunks",g),{data:S}=await ce.call({name:"pages-kit",method:"GET",path:h});return{contents:S,loader:"js"}}return null})}}]})).outputFiles)==null?void 0:l[0])==null?void 0:r.contents;if(!n)throw new Error("Failed to build server code");const o=Pt.default.from(n).toString();return D.default.transpileModule(o,{compilerOptions:{module:D.default.ModuleKind.ESNext,target:D.default.ScriptTarget.ES2020}}).outputText},Fe=$.memoize(async(e,s)=>{const t=await Vt(e,s);return new RegExp(`export\\s+\\{\\s+${s}\\s+\\}`,"m").test(t)?t:void 0},{keyGenerator:(e,s)=>{const t=ie.createHash("md5").update(e).digest("hex");return JSON.stringify(["extractExportValueSchema",t,s])},lruOptions:{max:100,ttl:1e3*60*60}}),Gt=(e,s)=>{const t=/\bawait\b/.test(s);return`// GENERATED FILE. DO NOT EDIT.
|
|
7
|
+
var ${e} = ${t?"async":""} function () {
|
|
8
|
+
|
|
9
|
+
const exports = {};
|
|
10
|
+
let moduleExports = null;
|
|
11
|
+
|
|
12
|
+
// add commonjs module compatibility layer
|
|
13
|
+
const module = { exports: moduleExports };
|
|
14
|
+
|
|
15
|
+
// execute component code
|
|
16
|
+
${s}
|
|
17
|
+
|
|
18
|
+
// handle possible module.exports
|
|
19
|
+
if (module.exports && module.exports !== moduleExports) {
|
|
20
|
+
// if module.exports is used, use it first
|
|
21
|
+
return typeof module.exports === 'object' ? module.exports : { default: module.exports };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ensure a default export
|
|
25
|
+
if (!('default' in exports) && Object.keys(exports).length === 0) {
|
|
26
|
+
// module has no exports, return null to indicate invalid
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return exports;
|
|
31
|
+
};
|
|
32
|
+
`},K=new Te.LRUCache({max:100}),qe=60*60,he=60;function $e(e){I.info("clear preload components cache",{cacheKey:e}),K.delete(e)}function Be(e){for(const s of K.keys())s.includes(e)&&(I.info("clear preload components cache",{cacheKey:s}),$e(s))}function Ve({mode:e,instanceId:s,componentId:t,locale:n}){return["getPreloadComponents",e,s,t,n].join("-")}async function Ht({mode:e,req:s,state:t,locale:n,instances:o,module:a}){const{supportedLocales:l,config:{defaultLocale:r}}=t;if(!r)return null;const i=(await Promise.all(o.map(async h=>{try{const S=Ve({mode:e,instanceId:h.id,componentId:h.componentId,locale:n});if(e!=="draft"&&h.useCache&&K.has(S))return I.info(`get preload component from cache: ${S}`),K.get(S);const P=Y({state:t,componentId:h.componentId});if(!P)return null;const _=await Ge({req:s,state:t,componentId:P.id,locale:n,defaultLocale:r,properties:h.properties});if(!_)return null;const N={instanceId:h.id,preload:_};if(e!=="draft"&&h.useCache){let L=qe;h.cacheDuration&&(L=h.cacheDuration),I.info(`set preload component to cache(${L}s): ${S}`),K.set(S,N,{ttl:L*1e3})}return N}catch(S){return I.error("get preload component error",{instanceId:h.id,componentId:h.componentId},{error:S}),null}}))).filter(h=>!!h),c=Object.values(i.reduce((h,S)=>({...h,...S.preload.components}),{}));async function u(){const h=await Promise.all(c.map(async S=>{const P=ne.componentUMDName({componentId:S.component.id}),_=a===te.PreloadComponentScriptModule.ESM?{module:a,script:await ke(S.script,{componentId:S.component.id,module:a,tailwind:e!=="draft"})}:{module:a,script:await ke(S.script,{componentId:S.component.id,module:a,moduleName:P,tailwind:e!=="draft"}),moduleName:P};return[S.component.id,{component:S.component,script:_}]}));return Object.fromEntries(h)}const p=await u();return{config:{defaultLocale:r,supportedLocales:l},components:p,instances:i.map(h=>({id:h.instanceId,componentId:h.preload.component.id,locales:{[h.preload.locale]:{props:h.preload.props}}}))}}async function Ge({req:e,state:s,componentId:t,locale:n,defaultLocale:o,properties:a}){const{supportedLocales:l}=s,r=Y({state:s,componentId:t});if(!r)return null;const i=l.some(u=>u.locale===n)?n:o;if(!i)return null;const c=await He({req:e,state:s,componentId:t,locale:i,defaultLocale:o,properties:a});return c?{component:r,...c}:null}const Jt=20;async function He({req:e,depth:s=0,state:t,componentId:n,locale:o,defaultLocale:a,properties:l}){if(s>Jt)throw new RangeError("max component depth exceeded");const r=Kt({state:t,componentId:n,properties:l,locale:o});if(!r)return null;const{props:i}=r,c={locale:o||a,components:{[r.component.id]:{component:r.component,script:r.script}},props:{...i}};try{const u=await Yt({...r,req:e});u!=null&&u.props&&Object.assign(c.props,u.props)}catch(u){I.error("preload data at server side error",{componentId:n,name:r.component.name},{error:u})}return await Promise.all(Object.entries(i).map(async([u,p])=>{if((p==null?void 0:p.type)===ne.RenderNestedComponent){const g=await He({req:e,depth:s+1,state:t,componentId:p.componentId,locale:o,defaultLocale:a,properties:p.properties});g&&(Object.assign(c.components,g.components),Object.assign(c.props,{[u]:{type:ne.RenderNestedComponent,componentId:p.componentId,props:g.props}}))}})),c}function Kt({state:e,componentId:s,locale:t,properties:n}){const o=Y({state:e,componentId:s});if(!o)return null;const a=ne.mergeComponent({componentId:s,getComponent:l=>Y({state:e,componentId:l}),locale:t,defaultLocale:e.config.defaultLocale,properties:n});return a?{component:o,script:a.script,props:{locale:t,...a.properties}}:null}function Y({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 zt({state:e,name:s}){var n,o;const t=s.toLowerCase();return((n=Object.values(e.components).find(a=>{var l;return((l=a.data.name)==null?void 0:l.toLowerCase())===t}))==null?void 0:n.data)??((o=e.resources.components&&Object.values(e.resources.components).find(a=>{var l;return((l=a.component.name)==null?void 0:l.toLowerCase())===t}))==null?void 0:o.component)}async function Yt({component:e,script:s,props:t,req:n}){const o=await Fe(s,"getServerSideProps");if(!o)return null;let a=new AbortController;const l=new Promise((r,i)=>{setTimeout(()=>{i(new Error("getServerSideProps timeout in promise race")),a&&(a.abort(),a=null)},he*1e3)});try{return await Promise.race([l,$.Sandbox.callFunction({code:`${o}
|
|
33
|
+
|
|
34
|
+
export async function getServerSidePropsWrapper(props) {
|
|
35
|
+
const { location, fetch } = props;
|
|
36
|
+
// 使用局部变量而不是全局变量
|
|
37
|
+
const originalLocation = typeof window !== 'undefined' ? window.location : undefined;
|
|
38
|
+
const originalFetch = globalThis.fetch;
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
globalThis.location = location;
|
|
42
|
+
globalThis.fetch = fetch;
|
|
43
|
+
return await getServerSideProps(props);
|
|
44
|
+
} finally {
|
|
45
|
+
// 清理全局状态
|
|
46
|
+
if (originalLocation) globalThis.location = originalLocation;
|
|
47
|
+
if (originalFetch) globalThis.fetch = originalFetch;
|
|
48
|
+
}
|
|
49
|
+
}`,filename:`${e.name||e.id}.js`,moduleLoader:r=>{if(r==="@blocklet/pages-kit/builtin/utils")return`const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
|
|
50
|
+
export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
51
|
+
`;if(r==="@blocklet/pages-kit/builtin/dayjs")return $.BuiltinModules.dayjs},global:{console:{log:(...r)=>{I.info(...r)},warn:(...r)=>{I.warn(...r)},error:(...r)=>{I.error(...r)}},getComponentMountPoint:ot.getComponentMountPoint,joinURL:v.joinURL,withQuery:v.withQuery,getQuery:v.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:v.joinURL(v.withHttps(n.hostname),n.originalUrl)},fetch:(r,{...i}={})=>{const c=typeof r=="string"&&r.startsWith("/")?v.joinURL(w.default.env.appUrl,r):r;if(typeof c=="string"&&v.parseURL(c).host===v.parseURL(w.default.env.appUrl).host){const u=n.get("cookie");if(u){const p=new Me.Headers(i.headers);p.set("cookie",u),i.headers=p}}return jt.default(c,{...i,timeout:he*1e3}).then(u=>({ok:u.ok,status:u.status,statusText:u.statusText,headers:Object.fromEntries(u.headers.entries()),json:()=>u.json()}))},props:t}]})])}finally{a=null}}const Je=$.memoize(async(e,s,t)=>{const n=await Fe(e,s);if(n)try{return await $.Sandbox.callFunction({code:`
|
|
52
|
+
${n}
|
|
53
|
+
|
|
54
|
+
export function get${s}SchemaWrapper() {
|
|
55
|
+
return ${s};
|
|
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=ie.createHash("md5").update(e).digest("hex");return JSON.stringify(["getExportSchemaValueFromCode",n,s,t])},lruOptions:{max:100,ttl:1e3*60*60}}),Wt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ye="page",Se="trigger-reload-project-resource",Oe=Wt,Qt="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:Xt}=require("@blocklet/uploader-server"),we=yt.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),Ce=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,z=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,Re=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Zt=1e4,es=3e4,ee=0,de=1,ts=0,ss=1,Ee=w.default,H=m.join(oe.default.env.BLOCKLET_DATA_DIR,"site-state"),ns=["production","draft"],os=["production"];function Ke(e){return(e==null?void 0:e.replace(/\//g,"|"))||""}function rs(){var t;const e=Ee.env.languages.map(n=>({locale:n.code,name:n.name})),s=(t=e[0])==null?void 0:t.locale;return{pageIds:[],pages:{},components:{},supportedLocales:e,config:{defaultLocale:s},resources:{}}}const F=class F extends B.Doc{constructor(s){super(),this.options=s,this.states={},this.conns=new Map,this.awarenessChangeHandler=({added:t,updated:n,removed:o},a)=>{const l=t.concat(n,o);if(a!==null){const c=this.conns.get(a);c&&(t.forEach(u=>{c.add(u)}),o.forEach(u=>{c.delete(u)}))}const r=A.createEncoder();A.writeVarUint(r,de),A.writeVarUint8Array(r,G.encodeAwarenessUpdate(this.awareness,l));const i=A.toUint8Array(r);this.conns.forEach((c,u)=>this.send(u,i))},this.updateHandler=t=>{const n=A.createEncoder();A.writeVarUint(n,ee),ue.writeUpdate(n,t);const o=A.toUint8Array(n);this.conns.forEach((a,l)=>this.send(l,o))},this.ensureDataStructure=()=>{var l;const{supportedLocales:t,pages:n,pageIds:o,config:a}=this.syncedStore;{const r=new Set(Object.keys(n));let i=0;for(;i<o.length;){const c=o[i];r.has(c)?(r.delete(c),i++):o.splice(i,1)}}t.splice(0,t.length),t.push(...Ee.env.languages.map(r=>({locale:r.code,name:r.name}))),a.defaultLocale=(l=t[0])==null?void 0:l.locale;{let r=0;const i=new Set;for(;r<t.length;){const{locale:c}=t[r];i.has(c)?t.splice(r,1):(r++,i.add(c))}}},this.send=(t,n)=>{t.readyState!==ts&&t.readyState!==ss&&this.closeConn(t);try{t.send(n,o=>{o&&this.closeConn(t)})}catch{this.closeConn(t)}},this.closeConn=t=>{if(t.removeAllListeners(),this.conns.has(t)){const n=this.conns.get(t);this.conns.delete(t),n&&G.removeAwarenessStates(this.awareness,Array.from(n),null)}t.close()},this.autoSave=R.debounce(()=>{E.mkdirSync(m.dirname(this.draftYjsFilePath),{recursive:!0}),E.writeFileSync(this.draftYjsFilePath,B.encodeStateAsUpdate(this))},Zt),this.save=({flush:t=!1}={})=>{this.autoSave(),t&&this.autoSave.flush()},this.publish=async({mode:t,pages:n})=>{const o=await this.getState("draft"),a=await this.getState("production");await be(o,a,{pages:n,pageMergeMode:"replace",deletePages:!0,publishMode:t}),a.config.publishedAt=new Date().getTime();for(const l of n||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(t,a)},this.mergeState=async(t,n)=>{var r,i,c;const o=JSON.parse(JSON.stringify(n));(r=t.config).fontFamily??(r.fontFamily={});const a=(i=o.config)==null?void 0:i.fontFamily,l=(c=t.config)==null?void 0:c.fontFamily;t.config.fontFamily.title=(a==null?void 0:a.title)||(l==null?void 0:l.title),t.config.fontFamily.description=(a==null?void 0:a.description)||(l==null?void 0:l.description),await new Promise((u,p)=>{this.transact(async()=>{try{const g=await be(t,n);u(g)}catch(g){p(g)}})})},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)}}},es);t.on("close",()=>{this.closeConn(t),clearInterval(o)}),t.on("pong",()=>{n=!0});{const a=A.createEncoder();A.writeVarUint(a,ee),ue.writeSyncStep1(a,this),this.send(t,A.toUint8Array(a));const l=this.awareness.getStates();if(l.size>0){const r=A.createEncoder();A.writeVarUint(r,de),A.writeVarUint8Array(r,G.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(t,A.toUint8Array(r))}}},this.messageListener=(t,n)=>{try{const o=A.createEncoder(),a=pe.createDecoder(n),l=pe.readVarUint(a);switch(l){case ee:A.writeVarUint(o,ee),ue.readSyncMessage(a,o,this,null),A.length(o)>1&&(this.ensureDataStructure(),this.send(t,A.toUint8Array(o)));break;case de:{G.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(a),t);break}default:I.warn(`Unsupported messageType ${l}`)}}catch(o){I.error(o)}this.save()},E.existsSync(this.draftYjsFilePath)&&B.applyUpdate(this,E.readFileSync(this.draftYjsFilePath)),this.syncedStore=mt.reactive(Z.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(s){if(!s)throw new Error("Should provide project context");try{const t=m.join(H,s),n=m.join(H,`@del-${s}`);E.renameSync(t,n)}catch(t){I.error("Failed to safe delete project state dir:",t)}}static get projectIds(){return ge.globSync("*/",{cwd:H,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(s=>F.shared(s))}static shared(s){if(!s)throw new Error("Should provide project context");let t=this.sharedInstances.get(s);return t||(t=new F({path:m.join(H,s)}),this.sharedInstances.set(s,t),t)}destroy(){this.conns.forEach((s,t)=>this.closeConn(t)),this.awareness.destroy(),super.destroy()}initObserver(){const s=n=>{n.observeDeep(o=>{o.some(a=>a.changes.keys.has("updatedAt")||a.changes.keys.has("publishedAt"))||n.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(n=>{const o=Z.getYjsValue(this.syncedStore.pages[n]);o&&o instanceof B.Map&&s(o)});const t=Z.getYjsValue(this.syncedStore.pages);t&&t instanceof B.Map&&t.observe(n=>{n.changes.keys.forEach((o,a)=>{if(o.action==="add"){const l=Z.getYjsValue(this.syncedStore.pages[a]);l&&l instanceof B.Map&&s(l)}})})}get draftYjsFilePath(){return m.join(this.options.path,"draft.yjs")}async getState(s){var t,n,o,a;if(s==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[s]&&(this.states[s]=await je(this.getPublishDir(s),{includeResources:!0})??rs(),!((n=(t=this.states[s])==null?void 0:t.config)!=null&&n.defaultLocale))){(o=this.states[s]).config??(o.config={});const l=Ee.env.languages.map(r=>({locale:r.code,name:r.name}));this.states[s].config.defaultLocale=(a=l[0])==null?void 0:a.locale}return{...this.states[s],resources:await _e().then(async l=>{var u,p,g,h;const{pages:r,components:i}=R.pick(l,"pages","components");let c=i;if((p=(u=this.states[s])==null?void 0:u.resources)!=null&&p.components)c={...(h=(g=this.states[s])==null?void 0:g.resources)==null?void 0:h.components};else{const S=m.basename(this.options.path),P=await q.findByPk(S);if(P!=null&&P.useAllResources)c=i;else{const N=(await le.findAll({where:{projectId:S}})).map(y=>y.componentId);c=Object.fromEntries(Object.entries(i||{}).filter(([y])=>N.includes(y)))}}return{pages:r,components:c}}).catch(()=>({}))}}async setState(s,t){const n=await We(t,{exportAssets:!1,includeResources:!0}),o=this.getPublishDir(s);E.mkdirSync(m.dirname(o),{recursive:!0}),E.rmSync(o,{force:!0,recursive:!0}),E.renameSync(n,o),this.states[s]=t}getPublishDir(s){return m.join(this.options.path,s)}static async pageUrlMap(s){const{projectIds:t}=this,n={};for(const o of t){const a=await q.findByPk(o);if(!a)continue;const l=await F.shared(o).getState(s),r=R.union(w.default.env.languages.map(i=>i.code),l.supportedLocales.map(i=>i.locale));for(const i of l.pageIds){const c=l.pages[i];if(!c||s==="production"&&!c.isPublic)continue;const u=c.slug,p=a.slug||o,g={projectId:o,projectSlug:p,pageSlug:u,pageId:i,defaultLocale:r==null?void 0:r[0],locales:r,publishedAt:l.config.publishedAt,isPublic:c.isPublic,isTemplate:c.isTemplate};p&&(n[v.joinURL("/",p,u)]={...g,shouldRedirect:!0,mainPage:!0}),n[v.joinURL("/",o,u)]={...g,shouldRedirect:!0,mainPage:!0};for(const h of r){const S={...g,locale:h};n[v.joinURL("/",h,o,u)]=S,p&&(n[v.joinURL("/",h,p,u)]=S)}}}return n}};F.INSTANCE_TTL=30*60*1e3,F.sharedInstances=new Te.LRUCache({max:100,ttl:F.INSTANCE_TTL,dispose:s=>{s.destroy()}});let W=F;function ze(){return E.mkdtempSync(m.join(w.default.env.dataDir,"tmp-"))}function re(e,s,t=[]){return Array.isArray(e)?e.flatMap((n,o)=>re(n,s,[...t,o])):typeof e=="object"?e===null?[]:Object.entries(e).flatMap(([n,o])=>re(o,s,[...t,n])):s(e)?[t]:[]}function M(e){return e.filter(s=>s!=null)}async function as(e,s,t){if(!e||!E.existsSync(e)||!E.lstatSync(e).isFile())return null;let n=t[e];return n||(n=(async()=>(await Xt({filePath:e,fileName:s})).data.filename)(),t[e]=n),n}const is=async(e,s)=>{const t=m.basename(e),n=await ce.call({name:Oe,path:v.joinURL("/uploads",t),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const o=E.createWriteStream(s);await wt.pipeline(n.data,o)}else throw new Error(`download asset failed ${n.status}`)},cs=async(e,s)=>{await Promise.all(e.map(async t=>{try{await is(t,m.join(s,m.basename(t)))}catch(n){I.error(`Failed to export assets: ${t}, ${n}`)}}))};function Ye(e){return Ce.test(e)?[e]:z.test(e)?(Re.lastIndex=0,Array.from(e.matchAll(Re)).map(t=>t[1]).filter(t=>!!t)):[]}async function fe(e,s,t){const{getFilename:n,exportAssets:o}=t,a=m.join(s,n(e));if(E.mkdirSync(m.dirname(a),{recursive:!0}),E.writeFileSync(a,J.stringify(e)),o){const r=re(e,i=>typeof i=="string"&&(Ce.test(i)||z.test(i))).map(i=>{const c=R.get(e,i);return Ye(c)}).flat().filter(Boolean);await cs(r,m.dirname(a))}}const Ne=new Te.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Le(e,s,t){var r;const n=re(e,i=>typeof i=="string"&&(Ce.test(i)||z.test(i))),o=Dt.default(2),a=n.map(i=>o(async()=>{try{const c=R.get(e,i),u=Ye(c);for(const p of u){const g=m.basename(p),h=t.getFilePath(p,i),S=h?`${h}:${g}`:g,P=Ne.get(S);if(P){z.test(c)||R.set(e,i,P);return}const _=await as(h,g,s);_&&(z.test(c)||R.set(e,i,_),Ne.set(S,_))}}catch(c){I.error(`Failed to process upload for path ${i.join(".")}:`,c.message||c.reason)}})),l=await Promise.allSettled(a);(r=t.onFinish)==null||r.call(t,l)}async function We(e,{exportAssets:s,pageIds:t="all",componentIds:n="all",rawConfig:o,includeResources:a=!1}={}){var N,L,y,O,T,C;const l=t==="all"?e.pageIds:t,r=ls({state:e,pageIds:l,componentIds:n==="all"?Object.keys(e.components):n}),i=(f,d)=>{var b;return{id:f.id,name:f.name,isTemplateSection:f.isTemplateSection??!1,component:f.component,config:f.config,visibility:f.visibility,properties:((b=f.locales)==null?void 0:b[d])??{}}},c=(f,d)=>{var b;return{id:f.id,createdAt:f.createdAt,updatedAt:f.updatedAt,publishedAt:f.publishedAt,isPublic:f.isPublic??!0,isTemplate:f.isTemplate??!1,meta:((b=f.locales)==null?void 0:b[d])??{},sections:M(f.sectionIds.map(k=>{const U=f.sections[k];return U&&i(U,d)}))}},u=M(e.supportedLocales.map(f=>f.locale).flatMap(f=>l.map(d=>{const b=e.pages[d];return b&&{locale:f,slug:b.slug,page:c(b,f)}}))),p=ze(),g=m.join(p,"pages");E.mkdirSync(g,{recursive:!0});const h=m.join(p,"components");E.mkdirSync(h,{recursive:!0});for(const{locale:f,slug:d,page:b}of u)await fe(b,g,{getFilename:()=>`${Ke(d)||"index"}.${f}.yml`,exportAssets:s});for(const f of r){const d=(N=e.components[f])==null?void 0:N.data;d&&await fe(d,h,{getFilename:b=>`${b.name||"unnamed"}.${b.id}.yml`,exportAssets:s})}const S=m.join(p,".blocklet/pages/pages.config.yml");E.mkdirSync(m.dirname(S),{recursive:!0});const P={pages:M(l.map(f=>{const d=e.pages[f];return d&&{id:f,slug:d.slug}})),components:M(r.map(f=>{var b;const d=(b=e.components[f])==null?void 0:b.data;return d&&{id:f,name:d.name}})),...a?{resources:{components:M(Object.keys(((L=e.resources)==null?void 0:L.components)||{}).map(f=>{var d,b,k,U;return{id:f,name:(U=(k=(b=(d=e.resources)==null?void 0:d.components)==null?void 0:b[f])==null?void 0:k.component)==null?void 0:U.name}}))}}:{},supportedLocales:e.supportedLocales,config:e.config};E.writeFileSync(S,J.stringify(P));const _=m.join(p,"config.source.json");if(o&&E.writeFileSync(_,JSON.stringify(o)),a){const f=m.join(p,"resources"),d=m.join(f,"components");E.mkdirSync(d,{recursive:!0});for(const b of Object.keys(((y=e==null?void 0:e.resources)==null?void 0:y.components)??{})){const k=(C=(T=(O=e.resources)==null?void 0:O.components)==null?void 0:T[b])==null?void 0:C.component;k&&await fe(k,d,{getFilename:U=>`${U.name||"unnamed"}.${U.id}.yml`,exportAssets:s})}}return p}async function je(e,{importAssets:s,includeResources:t}={}){var a,l,r;if(!E.existsSync(e))return null;let n,o=!1;try{E.lstatSync(e).isDirectory()?n=e:/\.(tgz|gz|tar)$/.test(e)&&(o=!0,n=ze(),await Et.x({file:e,C:n}));const i=ge.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),c=i&&m.join(m.dirname(i),"../../pages"),u=i&&m.join(m.dirname(i),"../../components"),p=i&&m.join(m.dirname(i),"../../chunks");if(!i)return null;const g=J.parse(E.readFileSync(i).toString()),h=(y,O,T)=>{let C=m.join(y,`${O}${T?`.${T}`:""}.yml`);return(!E.existsSync(C)||!E.lstatSync(C).isFile())&&(C=m.join(y,O,`index${T?`.${T}`:""}.yml`),!E.existsSync(C)||!E.lstatSync(C))?null:J.parse(E.readFileSync(C).toString())},S=(y,O)=>{try{const T=ge.globSync(`*.${O}.yml`,{cwd:y,absolute:!0})[0];return T?J.parse(E.readFileSync(T).toString()):null}catch(T){I.error("parse component error",T)}return null},P=M(g.pages.map(({slug:y})=>{var f;const O=M(g.supportedLocales.map(({locale:d})=>{const b=c?h(c,Ke(y),d):void 0;if(b)return{locale:d,page:b};const k=c?h(c,y,d):void 0;return k&&{locale:d,page:k}})),T=(f=O[0])==null?void 0:f.page;if(!T)return null;const C=T.sections.map(d=>{const b=d.id||we();return{id:b,component:d.component,config:d.config,name:d.name,isTemplateSection:d.isTemplateSection??!1,visibility:d.visibility,locales:Object.fromEntries(M(O.map(({locale:k,page:U})=>{const ve=U.sections.find(tt=>tt.id===b);return ve&&[k,ve.properties]})))}});return{id:T.id||we(),createdAt:T.createdAt,updatedAt:T.updatedAt,publishedAt:T.publishedAt,isPublic:T.isPublic??!0,isTemplate:T.isTemplate??!1,slug:y,sections:Object.fromEntries(C.map(d=>[d.id,d])),sectionIds:C.map(d=>d.id),locales:Object.fromEntries(O.map(({locale:d,page:b})=>[d,b.meta]))}})),_=u?M(((a=g.components)==null?void 0:a.map(({id:y})=>S(u,y)))??[]):[];if(s){const y=(...O)=>{I.info(`[${o?m.basename(e):m.basename(m.join(e,"../../../../"))}] importAssets:`,...O)};try{y("wait image-bin api ready"),await Rt.default({resources:[`${ce.getComponentWebEndpoint(Lt)}/api/sdk/uploads`],validateStatus:C=>C>=200&&C<=500}),y("image-bin api is ready");const O={},T={};y("start to upload assets"),await Promise.allSettled([Le(_,O,{getFilePath:C=>u&&m.join(u,C),onFinish:C=>{y(`upload ${C.length} component assets`)}}),Le(P,T,{getFilePath:(C,f)=>{const d=R.get(P,f.slice(0,1));return c&&m.join(c,m.dirname(d.slug),C)},onFinish:C=>{y(`upload ${C.length} page assets`)}})]),y("upload assets done"),xe.default.gc&&xe.default.gc()}catch(O){y("Error during asset import:",O)}}const N={};if(t){const y=i&&m.join(m.dirname(i),"../../resources/components"),O=M(((r=(l=g.resources)==null?void 0:l.components)==null?void 0:r.map(({id:T})=>S(y,T)))??[]);O.length>0&&(N.components=Object.fromEntries(O.map((T,C)=>[T.id,{index:C,component:T}])))}const L={};if(p&&E.existsSync(p)){const y=E.readdirSync(p);for(const O of y)L[O]=m.join(p,O)}return{supportedLocales:g.supportedLocales,pageIds:P.map(y=>y.id),components:Object.fromEntries(_.map((y,O)=>[y.id,{index:O,data:y}])),pages:Object.fromEntries(P.map(y=>[y.id,y])),config:g.config||{},resources:N,chunks:L}}finally{o&&n&&E.rmSync(n,{force:!0,recursive:!0})}}async function be(e,s,{pages:t,pageMergeMode:n="byUpdateTime",deletePages:o=!1,publishMode:a=void 0}={}){try{a&&Be(a)}catch(u){I.error("clear preload page cache error",{error:u})}const{pageIds:l,pages:r,supportedLocales:i}=e;for(const u of t??l){const p=r[u];if(!p){const g=s.pageIds.indexOf(u);g!==-1&&o&&(s.pageIds.splice(g,1),delete s.pages[u]);continue}if(s.pageIds.includes(p.id)){if(n==="replace")s.pages[p.id]=p;else if(n==="byUpdateTime"){const g=s.pages[p.id];(!g||p.updatedAt&&p.updatedAt>g.updatedAt)&&(s.pages[p.id]=p)}}else s.pageIds.push(p.id),s.pages[p.id]=p}if(o&&!t)for(const u of s.pageIds)e.pageIds.includes(u)||delete s.pages[u],s.pageIds=[...s.pageIds].filter(p=>e.pageIds.includes(p));if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(...R.cloneDeep(i)),o)for(const u of Object.keys(s.components))delete s.components[u];let c=JSON.parse(JSON.stringify(e.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([u,p])=>{const g=await Qe(p==null?void 0:p.data);return[u,{...p,data:g}]}))),Object.assign(s.components,c),Object.assign(s.config,JSON.parse(JSON.stringify(e.config))),s.resources.components=JSON.parse(JSON.stringify(e.resources.components||{}))}const Qe=$.memoize(async e=>{var s;if(!R.isEmpty(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)try{const n=await Je(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;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=ie.createHash("md5").update(JSON.stringify(o)).digest("hex");return JSON.stringify(["checkPropertiesFromCode",s,t,n,a])},lruOptions:{max:100,ttl:1e3*60*60}});function ls({state:e,pageIds:s=[],componentIds:t=[]}){var l;const n=(r,i=new Set)=>(Array.isArray(r)&&r.forEach(c=>n(c,i)),r&&typeof r=="object"&&(typeof r.componentId=="string"&&i.add(r.componentId),Object.values(r).forEach(c=>n(c,i))),i),o=new Set(t);for(const r of s){const i=e.pages[r];n(i,o)}const a=[...o];for(;a.length;){const r=a.shift();o.has(r)||o.add(r);const i=(l=e.components[r])==null?void 0:l.data;if(i)for(const c of n(i))o.has(c)||a.push(c)}return[...o]}let ae,V,Ie,Pe,Ae;function Xe(){return ae=(async()=>{const e=ce.getResources({types:[{did:Oe,type:ye},{did:Qt,type:ye}]});V=(await Promise.all(e.map(async t=>{const n=t.path?await je(t.path,{importAssets:!1}):void 0;return n?{blockletId:t.did,state:n,blockletTitle:t.title}:void 0}))).filter(t=>!!t),Ie=V.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=V.reduce((t,n)=>Object.assign(t,Object.fromEntries(Object.values(n.state.components).map(o=>[o.data.id,{blockletId:n.blockletId,component:o.data}]))),{});Pe=Object.fromEntries(await Promise.all(Object.entries(s).map(async([t,n])=>{const o=await Qe(n.component);return[t,{...n,component:o}]}))),Ae=V.reduce((t,n)=>Object.assign(t,n.state.chunks),{})})(),ae}function Ze(e){const s=R.debounce(async()=>{await Xe().catch(t=>{I.error("load resource states error",{error:t})}),await(e==null?void 0:e({states:V,pages:Ie,components:Pe,chunks:Ae}))},3e3,{leading:!1,trailing:!0});return s(),w.default.events.on(w.default.Events.componentAdded,s),w.default.events.on(w.default.Events.componentRemoved,s),w.default.events.on(w.default.Events.componentStarted,s),w.default.events.on(w.default.Events.componentStopped,s),w.default.events.on(w.default.Events.componentUpdated,s),w.default.events.on(Se,s),()=>{w.default.events.off(w.default.Events.componentAdded,s),w.default.events.off(w.default.Events.componentRemoved,s),w.default.events.off(w.default.Events.componentStarted,s),w.default.events.off(w.default.Events.componentStopped,s),w.default.events.off(w.default.Events.componentUpdated,s),w.default.events.off(Se,s)}}const et=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),se=globalThis;var Ue;(Ue=se[et])==null||Ue.call(se);se[et]=Ze(async({pages:e,components:s})=>{const{projectIds:t}=W;await Promise.all(t.map(async n=>{const o=W.shared(n);o.syncedStore.resources.pages=e;const a=await q.findByPk(n);if(a!=null&&a.useAllResources)o.syncedStore.resources.components=s;else{const r=(await le.findAll({where:{projectId:n}})).map(c=>c.componentId),i=Object.fromEntries(Object.entries(s||{}).filter(([c])=>r.includes(c)));o.syncedStore.resources.components=i}I.info(`update [${n}] resource states:`,{pages:Object.keys(o.syncedStore.resources.pages||{}).length,components:Object.keys(o.syncedStore.resources.components||{}).length})}))});async function us(){I.info("trigger reload all project resource"),w.default.events.emit(Se)}async function _e({ensureLoaded:e=!0}={}){return e&&(ae??(ae=Xe()),await ae),{states:V,pages:Ie,components:Pe,chunks:Ae}}exports.COMPONENT_DID=Oe;exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=qe;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=he;exports.PUBLISH_MODES=os;exports.Project=q;exports.RESOURCE_TYPE=ye;exports.SITE_STATE_PATH=H;exports.STATE_MODES=ns;exports.SiteState=W;exports.clearPreloadComponentsCache=$e;exports.clearPreloadComponentsCacheByMode=Be;exports.fromPackage=je;exports.getComponentFromState=Y;exports.getComponentFromStateByName=zt;exports.getExportSchemaValueFromCode=Je;exports.getMultiTenantAllProjectAccessPassports=Ft;exports.getPreloadComponent=Ge;exports.getPreloadComponents=Ht;exports.getPreloadComponentsCacheKey=Ve;exports.getResourceStates=_e;exports.initPackResourceStates=Ze;exports.isMultiTenant=Mt;exports.logger=I;exports.mergeState=be;exports.nextId=we;exports.toPackage=We;exports.triggerReloadAllProjectResource=us;
|
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");const e=require("./_chunks/
|
|
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-B57sn0Rr.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,7 +1,7 @@
|
|
|
1
|
-
"use strict";const J=require("vite-plugin-node-polyfills/shims/process"),
|
|
2
|
-
|
|
3
|
-
${
|
|
4
|
-
${
|
|
1
|
+
"use strict";const J=require("vite-plugin-node-polyfills/shims/process"),k=require("./_chunks/site-state-B57sn0Rr.js"),S=require("@blocklet/crawler/middlewares"),G=require("@blocklet/pages-kit/types"),z=require("@blocklet/pages-kit/utils/preload"),K=require("@blocklet/sdk/lib/component"),R=require("@blocklet/sdk/lib/config"),Q=require("cheerio"),V=require("express"),I=require("fs"),X=require("mustache"),U=require("path"),j=require("ufo"),T=e=>e&&e.__esModule?e:{default:e};function Y(e){if(e&&e.__esModule)return e;const c=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(c,t,p.get?p:{enumerable:!0,get:()=>e[t]})}}return c.default=e,Object.freeze(c)}const q=T(J),d=T(R),D=Y(Q),Z=T(X),F=["/assets/"],x=()=>[!0,"true"].includes(d.default.env.preferences.allowCrawler);function B(){x()?S.initCronCrawlBlocklet({time:"30 30 */12 * * *",options:{}}):S.cancelCronCrawlBlocklet()}B();d.default.events.on(d.default.Events.envUpdate,B);function ee({app:e,viteDevServer:c,state:t}){let p;if(c){const l=I.readFileSync(U.resolve(q.default.cwd(),"./index.html"),"utf-8");e.use(async(b,$,y)=>{const v=b.originalUrl;p=await c.transformIndexHtml(v,l),y()})}else p=I.readFileSync(U.resolve(q.default.env.BLOCKLET_APP_DIR,"dist/index.html"),"utf-8");const C=V.Router();C.use(S.initSEOMiddleware({autoReturnHtml:!1,allowCrawler:x})),C.get("/:path(*)?",async(l,b,$)=>{var L,M,O;if(F.some(r=>l.path.startsWith(r))){$();return}const y=performance.now(),v=()=>Math.round(performance.now()-y),H="production";let o,u,h=p;if(l.path.startsWith("/pages")){const r=l.params.lang,g=l.cookies.nf_lang,w=new Set([...d.default.env.languages.map(f=>f.code)]);let m=(r&&w.has(r)?r:void 0)||(w.has(g)?g:void 0)||[...w][0];if((!m||!((L=t.supportedLocales)!=null&&L.find(f=>f.locale===m)))&&(m=((O=(M=t.supportedLocales)==null?void 0:M[0])==null?void 0:O.locale)||""),m){const f=[];Object.values(t.pages).forEach(s=>{const P=Object.values((s==null?void 0:s.sections)??{}).filter(a=>{var _;return a.component==="custom-component"&&((_=a.config)==null?void 0:_.componentId)}).map(a=>{var _,A;return{id:a.id,componentId:a.config.componentId,useCache:a.config.useCache,cacheDuration:a.config.cacheDuration,properties:(A=(_=a.locales)==null?void 0:_[m])==null?void 0:A.properties}});f.push(...P)});const W=new Promise((s,P)=>{setTimeout(()=>{P(new Error("getPreloadComponents timeout in promise race, skip it"))},90*1e3)});try{await Promise.race([W,k.getPreloadComponents({mode:H,req:l,state:t,locale:m,instances:f,module:G.PreloadComponentScriptModule.UMD_FN}).then(s=>{s&&(u=z.injectPreloadComponents(s))})])}catch(s){k.logger.warn("getPreloadComponents timeout in promise race, skip inject html elements"),k.logger.warn(s)}}}try{const r=(o==null?void 0:o.title)||d.default.env.appName,g=(o==null?void 0:o.description)||d.default.env.appDescription,w=j.withQuery(j.joinURL(d.default.env.appUrl,"/.well-known/service/blocklet/og.png"),{title:r,description:g});h=Z.default.render(p,{ogTitle:r,ogDescription:g,ogImage:te(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,N=l.query.mode==="draft"||l.url.includes("preview");let i=D.load(h);i("head").find("#injected-head-elements").replaceWith(`
|
|
2
|
+
${o!=null&&o.backgroundColor?`<meta name="theme-color" content="${o.backgroundColor}" /><style>html,body,#app {background-color: ${o.backgroundColor} !important;}</style>`:""}
|
|
3
|
+
${n!=null&&n.title?`<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${n.title}&display=swap">`:""}
|
|
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">`:""}
|
|
5
5
|
<script>
|
|
6
6
|
|
|
7
7
|
window.__PAGE_STATE__ = ${JSON.stringify(t)}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
});
|
|
15
15
|
<\/script>
|
|
16
16
|
|
|
17
|
-
${
|
|
17
|
+
${N?`<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 E=
|
|
23
|
+
`);const E=R.getBlockletJs();if(E&&i('script[src="__blocklet__.js"]').replaceWith(`<script>${E}<\/script>`),u!=null&&u.html&&i("head").find("#injected-html-elements").replaceWith(u.html),l.cachedHtml){const r=D.load(l.cachedHtml);i("body").html(r("body").html()||"")}h=i.html(),b.send(h),k.logger.info(`[html] render: ${l.path}, ${v()}ms`),i.root().children().remove(),i=null,i=null,h=null,o=null,u=null}),e.use(C)}function te(e){const c=K.getComponentMountPoint("image-bin");return c&&e&&!/^(https?:\/\/|\/)/.test(e)?d.default.env.appUrl+j.joinURL(c,"uploads",e):e}module.exports=ee;
|
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-B57sn0Rr.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"}});require("vite-plugin-node-polyfills/shims/process");require("vite-plugin-node-polyfills/shims/global");
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("vite-plugin-node-polyfills/shims/process");require("vite-plugin-node-polyfills/shims/global");const e=require("./_chunks/site-state-B57sn0Rr.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;
|