@blocklet/pages-kit-inner-components 0.6.103 → 0.6.105
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/add-component.js +1 -1
- package/lib/cjs/chunks/components-BmFOXvb0.js +57 -0
- package/lib/cjs/chunks/{draft-data-CkVvOh60.js → draft-data-e1KnFlxv.js} +1 -1
- package/lib/cjs/chunks/{home-DdN3Z-6B.js → home-DHmHyTMb.js} +10 -10
- package/lib/cjs/chunks/{index-B-Wh6PRT.js → index-Cu2Jg8OH.js} +24 -24
- package/lib/cjs/chunks/{publish-button-BtLFUEny.js → publish-button-Do7oJLSH.js} +1 -1
- package/lib/cjs/chunks/site-state-BQySNTiP.js +1 -0
- package/lib/cjs/chunks/state-DU3L5Lve.js +1 -0
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/home.js +1 -1
- package/lib/cjs/project-html.js +1 -1
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/setting.js +3 -3
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/add-component.js +2 -2
- package/lib/es/chunks/components-DLjI_Xlm.js +615 -0
- package/lib/es/chunks/{draft-data-BOoVhbon.js → draft-data-DRdPzuGm.js} +1 -1
- package/lib/es/chunks/{home-DVTVPkSm.js → home-DajDpGXA.js} +123 -123
- package/lib/es/chunks/{index-DENjTU8O.js → index-BpP1FqET.js} +239 -238
- package/lib/es/chunks/{publish-button-BVcMw8Fh.js → publish-button-8kEbdc0k.js} +3 -3
- package/lib/es/chunks/site-state-DS7eIMFg.js +1684 -0
- package/lib/es/chunks/{state-DNdwHwty.js → state-qDCrgEMQ.js} +114 -113
- package/lib/es/components.js +14 -13
- package/lib/es/home.js +3 -3
- package/lib/es/project-html.js +1 -1
- package/lib/es/resources.js +2 -2
- package/lib/es/setting.js +415 -413
- package/lib/es/site-state.js +2 -2
- package/package.json +7 -7
- package/lib/cjs/chunks/components-DsHjikTX.js +0 -57
- package/lib/cjs/chunks/site-state-DlLhHuIr.js +0 -1
- package/lib/cjs/chunks/state-BdtFHk36.js +0 -1
- package/lib/es/chunks/components-BIhMGXjB.js +0 -610
- package/lib/es/chunks/site-state-CN4Kulgk.js +0 -1671
package/lib/es/site-state.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./chunks/components-
|
|
2
|
-
import { c as O, a as b, b as h, S as y, e as L, f as U, h as q, d as v, g as z, i as C, m as F, t as G, j as J, u as K } from "./chunks/site-state-
|
|
1
|
+
import "./chunks/components-DLjI_Xlm.js";
|
|
2
|
+
import { c as O, a as b, b as h, S as y, e as L, f as U, h as q, d as v, g as z, i as C, m as F, t as G, j as J, u as K } from "./chunks/site-state-DS7eIMFg.js";
|
|
3
3
|
import { nextId as Q } from "@blocklet/pages-kit/utils/common";
|
|
4
4
|
import "@blocklet/pages-kit/utils/page-model";
|
|
5
5
|
import "@blocklet/pages-kit/utils/property";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/pages-kit-inner-components",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.105",
|
|
4
4
|
"description": "Pages Kit inner components library",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -73,16 +73,16 @@
|
|
|
73
73
|
"@arcblock/did-connect-storage-nedb": "^1.8.0",
|
|
74
74
|
"@arcblock/react-hooks": "^3.1.52",
|
|
75
75
|
"@arcblock/ux": "^3.1.52",
|
|
76
|
-
"@blocklet/aigne-hub": "^0.4.
|
|
76
|
+
"@blocklet/aigne-hub": "^0.4.57",
|
|
77
77
|
"@blocklet/aigne-sdk": "^0.5.26",
|
|
78
78
|
"@blocklet/code-editor": "^0.5.26",
|
|
79
79
|
"@blocklet/embed": "^0.2.5",
|
|
80
|
-
"@blocklet/js-sdk": "^
|
|
80
|
+
"@blocklet/js-sdk": "^v1.16.54-beta-20251028-092308-569763e6",
|
|
81
81
|
"@blocklet/logger": "1.16.54-beta-20251021-070951-25e3083c",
|
|
82
82
|
"@blocklet/quickjs": "^0.5.26",
|
|
83
|
-
"@blocklet/sdk": "^
|
|
83
|
+
"@blocklet/sdk": "^v1.16.54-beta-20251028-092308-569763e6",
|
|
84
84
|
"@blocklet/studio-ui": "^0.5.26",
|
|
85
|
-
"@blocklet/tracker": "^
|
|
85
|
+
"@blocklet/tracker": "^v1.16.54-beta-20251028-092308-569763e6",
|
|
86
86
|
"@blocklet/ui-react": "^3.1.52",
|
|
87
87
|
"@blocklet/uploader": "^0.2.15",
|
|
88
88
|
"@blocklet/uploader-server": "^0.2.15",
|
|
@@ -201,8 +201,8 @@
|
|
|
201
201
|
"yaml": "^2.5.0",
|
|
202
202
|
"yjs": "^13.6.18",
|
|
203
203
|
"zustand": "^4.5.5",
|
|
204
|
-
"@blocklet/pages-kit": "^0.6.
|
|
205
|
-
"@blocklet/pages-kit-block-studio": "^0.6.
|
|
204
|
+
"@blocklet/pages-kit": "^0.6.105",
|
|
205
|
+
"@blocklet/pages-kit-block-studio": "^0.6.105"
|
|
206
206
|
},
|
|
207
207
|
"devDependencies": {
|
|
208
208
|
"@trivago/prettier-plugin-sort-imports": "^5.2.1",
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";var oe=Object.create;var $=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var ae=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of re(t))!ce.call(e,s)&&s!==o&&$(e,s,{get:()=>t[s],enumerable:!(n=ne(t,s))||n.enumerable});return e};var x=(e,t,o)=>(o=e!=null?oe(se(e)):{},ae(t||!e||!e.__esModule?$(o,"default",{value:e,enumerable:!0}):o,e));const b=require("@blocklet/quickjs"),ie=require("crypto"),C=require("fs"),N=require("path"),le=require("@blocklet/sdk/lib/config"),pe=require("lodash/isNil"),ue=require("@blocklet/pages-kit/builtin/utils"),T=require("@blocklet/pages-kit/types"),j=require("@blocklet/pages-kit/utils/builtin"),A=require("@blocklet/pages-kit/utils/property"),de=require("lodash/isEmpty"),me=require("lru-cache"),q=require("node-fetch"),S=require("ufo"),fe=require("@blocklet/logger"),K=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),ze=require("@blocklet/sdk/lib/component"),_=e=>e&&e.__esModule?e:{default:e},G=_(N),h=_(le),he=_(pe),ge=_(de),Ce=_(q),we=_(fe);h.default.env.mode;h.default.env.TRANSLATE_ADDITIONAL_PROMPT||process.env.TRANSLATE_ADDITIONAL_PROMPT;h.default.env.PAGE_CONTENT_ADDITIONAL_PROMPT||process.env.PAGE_CONTENT_ADDITIONAL_PROMPT;const ye="image-bin";h.default.env.INIT_TEMPLATE_PATH;const Se=process.env.DATABASE_URL||G.default.join(h.default.env.dataDir,"db/pages-kit.db"),U=h.default,Ee=()=>h.default.env.tenantMode==="multiple",xe=()=>(he.default(U.env.preferences.multiTenantAllProjectAccessPassports)?[]:U.env.preferences.multiTenantAllProjectAccessPassports?.split(","))||[],Pe=G.default.join(h.default.env.dataDir,"fs-memoize-cache"),_e=h.default.env.FS_MEMOIZE_CACHE_VERSION||"v1.0.0",g=we.default("pages-kit"),Me=Pe,Te=_e,v=30*24*60*60*1e3,Ie=24*60*60*1e3,J=async(e="")=>{const t=N.join(Me,e);try{if(!(await C.promises.stat(t)).isDirectory())throw new Error(`${t} is not a directory`)}catch{await C.promises.mkdir(t,{recursive:!0})}return t},B=(e,...t)=>e.keyGenerator?e.keyGenerator(...t):JSON.stringify([e.subdir||"",...t]),Oe=(e,t)=>{const o=ie.createHash("md5").update(t).digest("hex");return N.join(e,`${Te}-${o}.json`)},be=async(e="")=>{const t=await J(e),o=Date.now();try{const n=await C.promises.readdir(t);await Promise.all(n.filter(s=>s.endsWith(".json")).map(async s=>{const r=N.join(t,s);try{const u=await C.promises.readFile(r,"utf-8"),l=JSON.parse(u);l.createdAt&&o-l.createdAt>v&&await C.promises.unlink(r)}catch{try{const l=await C.promises.stat(r);o-l.mtimeMs>v&&await C.promises.unlink(r)}catch{}}}))}catch(n){console.error(`Failed to cleanup cache in ${t}:`,n)}},Ae=(()=>{const e=new Set;return setInterval(async()=>{await Promise.all(Array.from(e).map(n=>be(n)))},Ie).unref(),n=>{e.add(n)}})();function R(e,t){return t.subdir&&Ae(t.subdir),b.memoize(async(...n)=>{const s=await J(t.subdir||""),r=B(t,...n),u=Oe(s,r);try{const l=await C.promises.readFile(u,"utf-8"),{value:d,createdAt:p}=JSON.parse(l);if(p&&Date.now()-p>v)throw await C.promises.unlink(u).catch(()=>{}),new Error("Cache expired");return d}catch{const d=await e(...n),p=JSON.stringify({value:d,createdAt:Date.now()});return C.promises.writeFile(u,p,"utf-8").catch(m=>{console.error("Failed to write fs cache:",m)}),d}},{keyGenerator:(...n)=>B(t,...n),lruOptions:t.lruOptions||{max:100,ttl:v}})}const V=async()=>await import("typescript"),ve=async()=>await import("esbuild"),Ne=async()=>(await import("postcss")).default,Re=async()=>(await import("tailwindcss")).default,je=async()=>(await import("autoprefixer")).default,De=!1,Le=async(e,{componentId:t})=>{const o=`@tailwind components;
|
|
2
|
-
@tailwind utilities;
|
|
3
|
-
`,n=`.CustomComponent_${t}`,s=await Ne(),r=await Re(),u=await je();return(await s([r({content:[{raw:e,extension:"tsx"}]}),u({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),d=>{d.walkRules(p=>{p.selectors=p.selectors.map(m=>m.replace(/\.(.+)/g,`${n}.$1,${n} .$1`))})}]).process(o)).css},ke=async(e,{componentId:t})=>{const o=await Le(e,{componentId:t});return`export const __PagesKit_CSS__ = ${JSON.stringify(o)};
|
|
4
|
-
|
|
5
|
-
${e}
|
|
6
|
-
`},H=R(async(e,t)=>{let o=await V();try{let n=o.transpileModule(e,{compilerOptions:{jsx:o.JsxEmit.React,target:o.ScriptTarget.ES2016,module:o.ModuleKind.ESNext},transformers:{before:[K.createBuiltinModuleTransformer(o)]}}).outputText;if(t.tailwind&&(n=await ke(n,{componentId:t.componentId})),t.module===T.PreloadComponentScriptModule.ESM)return n;const s=o.transpileModule(n,{compilerOptions:{jsx:o.JsxEmit.React,target:o.ScriptTarget.ES2016,module:o.ModuleKind.CommonJS,moduleResolution:o.ModuleResolutionKind.Node16}}).outputText;return t.module===T.PreloadComponentScriptModule.CJS?s:Q(t.moduleName,s)}catch(n){throw new Error(n)}finally{o=null}},{subdir:"transpileModule"}),Fe=async(e,t)=>{let{build:o}=await ve(),n=null;try{const r=(await o({entryPoints:["index.tsx"],external:Object.keys(j.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(d){d.onResolve({filter:/.*/},p=>p.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:p.path==="./component"?{path:"component.tsx",namespace:"vfs"}:null),d.onLoad({filter:/.*/,namespace:"vfs"},async p=>{if(p.path==="index.tsx")return{contents:`export { ${t} } from './component'`,loader:"tsx"};if(p.path==="component.tsx")return{contents:e,loader:"tsx"};if(K.isRelativeModule(p.path)){const m=p.path.split("/").pop()}return null})}}]})).outputFiles?.[0]?.contents;if(!r)throw new Error("Failed to build server code");const u=Buffer.from(r).toString();return n=await V(),n.transpileModule(u,{compilerOptions:{module:n.ModuleKind.ESNext,target:n.ScriptTarget.ES2020}}).outputText}catch(s){throw new Error(s)}finally{o=null,n=null}},$e=(e,t)=>new RegExp(`export\\s+\\{[^}]*(?:\\w+\\s+as\\s+${t}\\b|\\b${t}\\b)[^}]*\\}`,"m").test(e)?e:void 0,W=R(async(e,t)=>{const o=await Fe(e,t);return $e(o,t)},{subdir:"extractExportValueSchema"}),Q=(e,t)=>`// GENERATED FILE. DO NOT EDIT.
|
|
7
|
-
var ${e} = 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
|
-
${t}
|
|
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
|
-
`,z=async()=>{const{Sandbox:e}=await import("@blocklet/quickjs");return e};function Ue(e){return e?.type==="react-component"}const P=new me.LRUCache({max:600,ttl:1e3*60*60*24*7}),Z=60*60,D=10;function L(e){g.info("clear preload components cache",{cacheKey:e}),P.delete(e)}function Be(e){for(const t of P.keys())t.includes(e)&&(g.info("clear preload components cache",{cacheKey:t}),L(t))}function He(e){for(const t of P.keys())t.includes(e)&&(g.info("clear preload components cache",{cacheKey:t}),L(t))}function X({mode:e,instanceId:t,componentId:o,locale:n}){return["getPreloadComponents",e,t,o,n].join("-")}async function qe({mode:e,req:t,state:o,locale:n,instances:s,module:r}){const{supportedLocales:u,config:{defaultLocale:l}}=o;if(!l)return null;const d=(await Promise.all(s.map(async c=>{try{const a=X({mode:e,instanceId:c.id,componentId:c.componentId,locale:n});if(e!=="draft"&&c.useCache&&P.has(a))return g.info(`get preload component from cache: ${a}`),P.get(a);const f=I({state:o,componentId:c.componentId});if(!f)return null;const E=await Y({req:t,state:o,componentId:f.id,locale:n,defaultLocale:l,properties:c.properties});if(!E)return null;const M={instanceId:c.id,preload:E};if(e!=="draft"&&c.useCache){let y=Z;c.cacheDuration&&(y=c.cacheDuration),g.info(`set preload component to cache(${y}s): ${a}`),P.set(a,M,{ttl:y*1e3})}return M}catch(a){return g.error("get preload component error",{instanceId:c.id,componentId:c.componentId},{error:a}),null}}))).filter(c=>!!c),p=Object.values(d.reduce((c,a)=>({...c,...a.preload.components}),{}));async function m(){const c=await Promise.all(p.map(async a=>{const f=r===T.PreloadComponentScriptModule.ESM,E=r===T.PreloadComponentScriptModule.UMD_FN,M=r===T.PreloadComponentScriptModule.CJS,y=f?"":A.componentUMDName({componentId:a.component.id}),k=te(a.component);let O={module:r,script:"",moduleName:y};if(k&&a.component.renderer?.type==="react-component"&&f&&a.component.renderer?.script)O.script=a.component.renderer?.script;else if(k&&a.component.renderer?.type==="react-component"&&(M||E)&&a.component.renderer?.cjsScript){const F=a.component.renderer.cjsScript;O.script=M?F:Q(y,F)}else O=f?{module:r,script:await H(a.script,{componentId:a.component.id,module:r,tailwind:e!=="draft"})}:{module:r,script:await H(a.script,{componentId:a.component.id,module:r,moduleName:y,tailwind:e!=="draft"}),moduleName:y};return[a.component.id,{component:a.component,script:O}]}));return Object.fromEntries(c)}const w=await m();return{config:{defaultLocale:l,supportedLocales:u},components:w,instances:d.map(c=>({id:c.instanceId,componentId:c.preload.component.id,locales:{[c.preload.locale]:{props:c.preload.props}}}))}}async function Y({req:e,state:t,componentId:o,locale:n,defaultLocale:s,properties:r}){const{supportedLocales:u}=t,l=I({state:t,componentId:o});if(!l)return null;const d=u.some(m=>m.locale===n)?n:s;if(!d)return null;const p=await ee({req:e,state:t,componentId:o,locale:d,defaultLocale:s,properties:r});return p?{component:l,...p}:null}const Ke=20;async function ee({req:e,depth:t=0,state:o,componentId:n,locale:s,defaultLocale:r,properties:u}){if(t>Ke)throw new RangeError("max component depth exceeded");const l=Ge({state:o,componentId:n,properties:u,locale:s});if(!l)return null;const{props:d,component:p}=l,m={locale:s||r,components:{[l.component.id]:{component:l.component,script:l.script}},props:{...d}};try{const w=Ue(p.renderer)?p.renderer.getServerSideProps:void 0,i=await Ve({...l,req:e,getServerSideProps:w});i?.props&&Object.assign(m.props,i.props)}catch(w){g.error("preload data at server side error",{componentId:n,name:l.component.name},{error:w})}return await Promise.all(Object.entries(d).map(async([w,i])=>{if(i?.type===A.RenderNestedComponent){const c=await ee({req:e,depth:t+1,state:o,componentId:i.componentId,locale:s,defaultLocale:r,properties:i.properties});c&&(Object.assign(m.components,c.components),Object.assign(m.props,{[w]:{type:A.RenderNestedComponent,componentId:i.componentId,props:c.props}}))}})),m}function Ge({state:e,componentId:t,locale:o,properties:n}){const s=I({state:e,componentId:t});if(!s)return null;const r=A.mergeComponent({componentId:t,getComponent:u=>I({state:e,componentId:u}),locale:o,defaultLocale:e.config.defaultLocale,properties:n});return r?{component:s,script:r.script,props:{locale:o,...r.props}}:null}function I({state:e,componentId:t}){return e.components[t]?.data??e.resources.components?.[t]?.component}function Je({state:e,name:t}){const o=t.toLowerCase();return Object.values(e.components).find(n=>n.data.name?.toLowerCase()===o)?.data??(e.resources.components&&Object.values(e.resources.components).find(n=>n.component.name?.toLowerCase()===o))?.component}async function Ve({component:e,script:t,props:o,req:n,getServerSideProps:s}){if(!s&&!t?.includes("getServerSideProps"))return null;const r=s??await W(t,"getServerSideProps");if(!r)return null;const l=(r.match(/export\s*{\s*(\w+)\s+as\s+getServerSideProps\s*}/)||r.match(/export\s*{\s*getServerSideProps\s*}/))?.[1]||"getServerSideProps",d=new Promise(i=>{setTimeout(()=>{i({})},D*1e3)});let p=await z();const m={componentMountPoints:h.default.components};return await Promise.race([d,p.callFunction({code:`${r}
|
|
33
|
-
|
|
34
|
-
export async function getServerSidePropsWrapper(props) {
|
|
35
|
-
const { location, fetch, props: componentProps } = 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 ${l}(componentProps);
|
|
44
|
-
} finally {
|
|
45
|
-
// 清理全局状态
|
|
46
|
-
if (originalLocation) globalThis.location = originalLocation;
|
|
47
|
-
if (originalFetch) globalThis.fetch = originalFetch;
|
|
48
|
-
}
|
|
49
|
-
}`,filename:`${e.name||e.id}.js`,moduleLoader:i=>{if(i==="@blocklet/pages-kit/builtin/utils")return` const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
|
|
50
|
-
export { joinURL, withQuery, getQuery, getComponentMountPoint }
|
|
51
|
-
`;if(i==="@blocklet/pages-kit/builtin/dayjs")return b.BuiltinModules.dayjs;if(i in b.BuiltinModules)return b.BuiltinModules[i];if(i in j.BuiltinModules){const c=j.BuiltinModules[i];return ge.default(c)?void 0:c}},global:{console:{log:(...i)=>{g.info(...i)},warn:(...i)=>{g.warn(...i)},error:(...i)=>{g.error(...i)}},getComponentMountPoint:ue.getComponentMountPoint,joinURL:S.joinURL,withQuery:S.withQuery,getQuery:S.getQuery,window:{blocklet:m},blocklet:m},functionName:"getServerSidePropsWrapper",args:[{location:{href:S.joinURL(S.withHttps(n.hostname),n.originalUrl)},fetch:(i,{...c}={})=>{const a=typeof i=="string"&&i.startsWith("/")?S.joinURL(h.default.env.appUrl,i):i;if(typeof a=="string"&&S.parseURL(a).host===S.parseURL(h.default.env.appUrl).host){const f=n.get("cookie");if(f){const E=new q.Headers(c.headers);E.set("cookie",f),c.headers=E}}return Ce.default(a,{...c,timeout:D*1e3}).then(f=>({ok:f.ok,status:f.status,statusText:f.statusText,headers:Object.fromEntries(f.headers.entries()),json:()=>f.json()}))},props:o}]}).finally(()=>{p=null})])}const We=R(async(e,t,o,n)=>{if(!e?.includes(t)&&!n)return null;const s=n??await W(e,t);if(s)try{let r=await z();return await r.callFunction({cache:!0,code:`
|
|
52
|
-
${s}
|
|
53
|
-
|
|
54
|
-
export function get${t}SchemaWrapper() {
|
|
55
|
-
return ${t};
|
|
56
|
-
}
|
|
57
|
-
`,filename:`${o}.js`,functionName:`get${t}SchemaWrapper`}).finally(()=>{r=null})}catch(r){return g.error(`获取 ${t} 失败`,{componentId:o,error:r}),null}return null},{subdir:"getExportSchemaValueFromCode"}),te=e=>!!(e.renderer?.type==="react-component"&&e.version&&e.version>=2);exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=Z;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=D;exports.IMAGE_BIN_NAME=ye;exports.clearPreloadComponentsCache=L;exports.clearPreloadComponentsCacheByInstanceId=He;exports.clearPreloadComponentsCacheByMode=Be;exports.databaseUrl=Se;exports.getComponentFromState=I;exports.getComponentFromStateByName=Je;exports.getExportSchemaValueFromCode=We;exports.getMultiTenantAllProjectAccessPassports=xe;exports.getPreloadComponent=Y;exports.getPreloadComponents=qe;exports.getPreloadComponentsCacheKey=X;exports.isMultiTenant=Ee;exports.logger=g;exports.memoizeWithFs=R;exports.skipTranspileComponent=te;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const p=require("./components-DsHjikTX.js"),q=require("@syncedstore/core"),Ze=require("yjs"),et=require("@blocklet/pages-kit/utils/data-source"),Q=require("@blocklet/pages-kit/utils/route"),tt=require("lodash/cloneDeep"),st=require("@blocklet/sdk/lib/config"),I=require("fs"),m=require("path"),Re=require("@blocklet/pages-kit/utils/common"),at=require("@blocklet/pages-kit/utils/page-model"),nt=require("@blocklet/pages-kit/utils/property"),Ee=require("@blocklet/sdk/lib/component"),ot=require("@reactivedata/reactive"),Z=require("glob"),rt=require("lib0/decoding"),it=require("lib0/encoding"),ct=require("lodash/debounce"),lt=require("lodash/get"),ut=require("lodash/isEmpty"),pt=require("lodash/set"),dt=require("lodash/union"),be=require("lru-cache"),ft=require("p-limit"),j=require("sequelize"),gt=require("stream/promises"),mt=require("tar"),U=require("ufo"),ht=require("wait-on"),z=require("y-protocols/awareness"),ue=require("y-protocols/sync"),yt=require("yaml"),ve=require("./html-xfTPTsl5.js");require("sqlite3");require("@blocklet/pages-kit/types/state");const $=t=>t&&t.__esModule?t:{default:t};function ne(t){if(t&&t.__esModule)return t;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const a=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,a.get?a:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const M=ne(Ze),we=$(tt),w=$(st),pe=ne(rt),v=ne(it),Me=$(ct),Ae=$(lt),Pe=$(ut),ke=$(pt),St=$(dt),$e=$(ft),It=$(ht),B=ne(yt),Et=j.DataTypes.sqlite.DATE.parse;j.DataTypes.sqlite.DATE.parse=(t,e)=>typeof t=="number"?new Date(t):Et(t,e);const N=new j.Sequelize({dialect:"sqlite",storage:p.databaseUrl,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});N.query("PRAGMA journal_mode = WAL;");N.query("PRAGMA synchronous = normal;");N.query("PRAGMA journal_size_limit = 67108864;");N.query("PRAGMA cache_size = 10000;");process.on("SIGINT",async()=>{await N.close(),process.exit(0)});process.on("SIGTERM",async()=>{await N.close(),process.exit(0)});async function bt(t,e){try{if(t.getDialect()!=="sqlite")return;const[s]=await t.query("SELECT 1");if(!s||s.length===0)return;await t.query("PRAGMA shrink_memory;")}catch(s){if(s.name==="SequelizeConnectionError"||s?.message&&/closed!/.test(s.message))return;console.error("Failed to cleanup SQLite memory",e,s)}}let ge=null;ge&&clearInterval(ge);ge=setInterval(async()=>{p.logger.info("Start cleanupSqliteMemory"),await bt(N,p.databaseUrl),p.logger.info("End cleanupSqliteMemory")},60*1e3*10);const wt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",me="page",he="trigger-reload-project-resource",je=wt,At="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM",Pt="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o";class Oe extends j.Model{}Oe.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:N,tableName:"ProjectComponents",timestamps:!1});const jt="SLUG_INVALID",Y=t=>({error:"slugInvalid",code:jt,field:"slug",message:t}),Ot={error:"slugRequired",code:"SLUG_REQUIRED",field:"slug",message:()=>"Project slug is required"},Tt={error:"slugAlreadyExists",code:"SLUG_EXISTS",field:"slug",message:t=>`Project slug "${t}" already exists`},Ct=[/\.\./,/<[^>]*>/,/%[0-9a-f]{2}/i,/[<>'"%;{}()\\]/,/\x00/,/\n|\r|\t|\v|\f/,/[^a-zA-Z0-9-_@/\\:]/],Le=t=>{if(!t)return"";if(t==="/")return"/";const e=U.withoutTrailingSlash(t);return U.withLeadingSlash(e)||"/"},Dt=t=>t.did===Pt;class L extends j.Model{static async getProjectByIdOrSlug(e,s){return e?L.findOne({where:{[j.Op.or]:[{id:e},{slug:e}],...s?.createdBy?{createdBy:s.createdBy}:{}}}):null}static async validateProjectSlug({slug:e,projectId:s}){if(e==null)return null;if(e==="")return Ot;const a=e==="/"?"/":U.withoutTrailingSlash(U.withLeadingSlash(e)),n=Le(a);if(a!=="/"&&a.endsWith("/"))return Y(r=>`Project slug "${r}" cannot end with /`);if(/\/{2,}/.test(a))return Y(r=>`Project slug "${r}" cannot contain consecutive /`);if(/\s/.test(a))return Y(r=>`Project slug "${r}" cannot contain whitespace`);if(Ct.some(r=>r.test(a)))return Y(r=>`Project slug "${r}" contains invalid characters`);if(w.default.components?.filter(r=>r.mountPoint&&!Dt(r)).some(r=>Le(r.mountPoint)===n))return Y(r=>`Project slug "${r}" conflicts with existing blocklet`);const c=await L.findOne({where:{slug:a}});return c&&c?.id!==s?Tt:null}}L.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,npmSecret:j.DataTypes.STRING,relatedBlocklets:{type:j.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){const t=this.getDataValue("relatedBlocklets");if(typeof t=="object")return t??{};try{return t?JSON.parse(t):{}}catch(e){return p.logger.error("Failed to parse relatedBlocklets",{error:e,rawValue:t}),{}}},set(t){try{this.setDataValue("relatedBlocklets",t?JSON.stringify(t):"{}")}catch(e){p.logger.error("Failed to set relatedBlocklets",{error:e,value:t}),this.setDataValue("relatedBlocklets","{}")}}},productionState:{type:j.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){const t=this.getDataValue("productionState");if(typeof t=="object")return t??{};try{return t?JSON.parse(t):{}}catch(e){return p.logger.error("Failed to parse productionState",{error:e,rawValue:t}),{}}},set(t){try{this.setDataValue("productionState",t?JSON.stringify(t):"{}")}catch(e){p.logger.error("Failed to set productionState",{error:e,value:t}),this.setDataValue("productionState","{}")}}},meta:{type:j.DataTypes.JSON,allowNull:!0}},{sequelize:N,paranoid:!0,indexes:[{name:"projects_slug_unique",unique:!0,fields:["slug"]},{name:"projects_created_by",fields:["createdBy"]},{name:"projects_pinned_updated_meta_not_null",fields:[{name:"pinnedAt",order:"DESC"},{name:"updatedAt",order:"DESC"}],where:{meta:{[j.Op.ne]:null}}}]});L.hasMany(Oe,{foreignKey:"projectId",as:"components"});function ee(t){t.observeDeep(e=>{e.some(s=>s.changes.keys.has("updatedAt")||s.changes.keys.has("publishedAt"))||t.set("updatedAt",new Date().toISOString())})}function Ne(){return I.mkdtempSync(m.join(w.default.env.dataDir,"tmp-"))}function te(t,e,s=[]){return Array.isArray(t)?t.flatMap((a,n)=>te(a,e,[...s,n])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([a,n])=>te(n,e,[...s,a])):e(t)?[s]:[]}function k(t){return t.filter(e=>e!=null)}function Rt(t){t.pages&&Object.keys(t.pages).forEach(s=>{const a=q.getYjsValue(t.pages[s]);a&&a instanceof M.Map&&ee(a)});const e=q.getYjsValue(t.pages);e&&e instanceof M.Map&&e.observe(s=>{s.changes.keys.forEach((a,n)=>{if(a.action==="add"){const o=q.getYjsValue(t.pages[n]);o&&o instanceof M.Map&&ee(o)}})})}function vt(t){t.routes&&Object.keys(t.routes).forEach(s=>{const a=q.getYjsValue(t.routes?.[s]);a&&a instanceof M.Map&&ee(a)});const e=q.getYjsValue(t.routes);e&&e instanceof M.Map&&e.observe(s=>{s.changes.keys.forEach((a,n)=>{if(a.action==="add"){const o=q.getYjsValue(t.routes?.[n]);o&&o instanceof M.Map&&ee(o)}})})}function kt(t,e){for(const s of e||Object.keys(t.routes||{})){let a=s,n=[];if(s.includes("-")){const[o,...c]=s.split("-");a=o,n=c||[]}if(t.routes?.[a]!==void 0){t.routes[a].publishedAt=new Date().toISOString();const o=t.routes[a];if(!o||!o.params||o.params.length===0)continue;if(s.includes("-")&&n.length>0){const c=Q.getRouteMetaDataByOptionIds(n,o);c&&(c.publishedAt=new Date().toISOString())}if(!e){const c=Q.generateParamCombinations({basePath:o.path,params:o.params,routeId:o.id,paramsOptions:o.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const r of c)r.routeMetaData??={},r.routeMetaData.publishedAt=new Date().toISOString()}}}}function de({page:t,route:e,state:s,routeId:a,routePathInfo:n}){p.logger.info(`Executing datasource data assembly, routeId: ${a}, routePathInfo: ${JSON.stringify(n)}`);const o={...we.default(t),id:a,slug:n?.path??e.path,createdAt:e.createdAt,updatedAt:n?.routeMetaData?.updatedAt??e.updatedAt,publishedAt:n?.routeMetaData?.publishedAt??e.publishedAt,isPublic:(n?.routeMetaData?.isPublic??e.isPublic)&&e.isPublic};for(const c of s.supportedLocales){if(e.dataSource){let r=e.id;n&&(r=n.paramOptionIds.join("-"));const l=e.dataSource.pathDataMappings?.[r]?.dataCache?.[c.locale]??e.dataSource.pathDataMappings?.[r]?.dataCache?.[s.config.defaultLocale||"en"];if(!l)continue;et.setPageDataSource(o,s,c.locale,l)}n&&n.routeMetaData&&(n.routeMetaData.publishedAt=new Date().toISOString())}return o}["true","1","yes","y"].includes(process.env.USE_FS_CACHE_HTML??"");const Lt=60*60*1e3,H=new be.LRUCache({max:300,ttl:Lt,ttlResolution:10*1e3,allowStale:!0});function _t(t,e=[]){let s=0;const a=Array.from(H.keys()),n=t.map(o=>U.withoutTrailingSlash(o));for(const o of a)for(const c of n){if(ve.matchCacheKey(o,{currentPath:c})){H.delete(o),s++,p.logger.info(`[Cache CLEAR] key: ${o}`);break}for(const r of e)if(ve.matchCacheKey(o,{currentPath:`/${r}${c}`})){H.delete(o),s++,p.logger.info(`[Cache CLEAR] key: ${o}`);break}}return p.logger.info(`[Cache CLEAR] cleared ${s} entries for paths:`,n),s}function Ut(){const t=H.size;return H.clear(),p.logger.info(`[Cache CLEAR ALL] cleared ${t} entries`),t}w.default.events.on(w.default.Events.envUpdate,Ut);const{uploadToMediaKit:Mt}=require("@blocklet/uploader-server"),Te=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,K=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,_e=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,$t=1e4,Nt=3e4,W=0,fe=1,Ft=0,qt=1,ye=w.default,x=m.join(process.env.BLOCKLET_DATA_DIR,"site-state"),xt=["production","draft"],Bt=["production"];function se(t){return t?.replace(/\//g,"|")||""}function Fe(){const t=ye.env.languages?.map(s=>({locale:s.code,name:s.name}))||[],e=t[0]?.locale||"en";return{pageIds:[],pages:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{},components:{},supportedLocales:t,config:{defaultLocale:e},resources:{}}}class T extends M.Doc{constructor(e){super(),this.options=e,I.existsSync(this.draftYjsFilePath)&&M.applyUpdate(this,I.readFileSync(this.draftYjsFilePath)),this.syncedStore=ot.reactive(q.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{},routeIds:[],routes:{},dataSourceIds:[],dataSources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new z.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static RELEASE_DELAY=5*60*1e3;static PERIODIC_CHECK_INTERVAL=2*60*60*1e3;static sharedInstances={};static pageUrlMapCache=new be.LRUCache({max:300,ttl:1e3*60*60*24});static periodicCheckTimer;static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=m.join(x,e),a=m.join(x,`@del-${e}`);I.renameSync(s,a)}catch(s){p.logger.error("Failed to safe delete project state dir:",s)}}static async getProjectIds(){return(await L.findAll({attributes:["id"],raw:!0}))?.map(e=>e.id)}static get projectIds(){return Z.globSync("*/",{cwd:x,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*","undefined"]})}static get allShared(){return this.projectIds.map(e=>T.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=T.sharedInstances[e];return s||(s=new T({path:m.join(x,e)}),T.sharedInstances[e]=s,s)}static async getProductionState(e){const s=await L.findByPk(e,{attributes:["productionState"]});if(Pe.default(s?.productionState)){const a=m.join(x,e,"production"),n=await Ce(a,{includeResources:!0})??Fe();if(!n?.config?.defaultLocale){n.config??={};const o=ye.env.languages?.map(c=>({locale:c.code,name:c.name}))||[];n.config.defaultLocale=o[0]?.locale}return n}return s?.productionState}destroy(){this.cancelRelease(),this.save({flush:!0}),this.conns.forEach((s,a)=>this.closeConn(a)),this.awareness.destroy();const e=m.basename(this.options.path);delete T.sharedInstances[e],super.destroy()}initObserver(){Rt(this.syncedStore),vt(this.syncedStore)}get draftYjsFilePath(){return m.join(this.options.path,"draft.yjs")}static async getStateByProjectId(e,s){if(s==="draft"){const a=T.shared(e);return JSON.parse(JSON.stringify(a.syncedStore))}return T.getProductionState(e)}async getState(e){if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));const s=m.basename(this.options.path);return T.getProductionState(s)}async setState(e,s){const a=await Ge(s,{exportAssets:!1,includeResources:!0}),n=this.getPublishDir(e);if(I.mkdirSync(m.dirname(n),{recursive:!0}),I.rmSync(n,{force:!0,recursive:!0}),I.renameSync(a,n),e==="production"){const o=m.basename(this.options.path);T.pageUrlMapCache.delete(o);const c=we.default(s);await L.update({productionState:c},{where:{id:o}})}}getPublishDir(e){return m.join(this.options.path,e)}syncedStore;conns=new Map;awareness;releaseTimer;awarenessChangeHandler=({added:e,updated:s,removed:a},n)=>{const o=e.concat(s,a);if(n!==null){const l=this.conns.get(n);l&&(e.forEach(S=>{l.add(S)}),a.forEach(S=>{l.delete(S)}))}const c=v.createEncoder();v.writeVarUint(c,fe),v.writeVarUint8Array(c,z.encodeAwarenessUpdate(this.awareness,o));const r=v.toUint8Array(c);this.conns.forEach((l,S)=>this.send(S,r))};updateHandler=e=>{const s=v.createEncoder();v.writeVarUint(s,W),ue.writeUpdate(s,e);const a=v.toUint8Array(s);this.conns.forEach((n,o)=>this.send(o,a))};ensureDataStructure=()=>{const{supportedLocales:e,pages:s,pageIds:a,config:n,routes:o,routeIds:c}=this.syncedStore;{const r=new Set(Object.keys(s));let l=0;for(;l<a.length;){const S=a[l];r.has(S)?(r.delete(S),l++):a.splice(l,1)}}{const r=new Set(Object.keys(o));let l=0;for(;l<c.length;){const S=c[l];r.has(S)?(r.delete(S),l++):c.splice(l,1)}}e.splice(0,e.length),e.push(...ye.env.languages.map(r=>({locale:r.code,name:r.name}))),n.defaultLocale=e[0]?.locale;{let r=0;const l=new Set;for(;r<e.length;){const{locale:S}=e[r];l.has(S)?e.splice(r,1):(r++,l.add(S))}}};send=(e,s)=>{e.readyState!==Ft&&e.readyState!==qt&&this.closeConn(e);try{e.send(s,a=>{a&&this.closeConn(e)})}catch{this.closeConn(e)}};closeConn=e=>{if(e.removeAllListeners(),this.conns.has(e)){const s=this.conns.get(e);this.conns.delete(e),s&&z.removeAwarenessStates(this.awareness,Array.from(s),null)}e.close(),this.checkAndScheduleRelease()};checkAndScheduleRelease(){this.conns.size===0&&this.scheduleRelease()}scheduleRelease(){this.cancelRelease();const e=m.basename(this.options.path);this.releaseTimer=setTimeout(()=>{p.logger.info(`[SiteState] releasing instance due to no active connections: ${e}`),this.conns.size===0&&(this.releaseTimer=void 0,this.destroy())},T.RELEASE_DELAY),p.logger.info(`[SiteState] scheduled release for project ${e} in ${T.RELEASE_DELAY/1e3}s`)}cancelRelease(){if(this.releaseTimer){clearTimeout(this.releaseTimer),this.releaseTimer=void 0;const e=m.basename(this.options.path);p.logger.info(`[SiteState] cancelled scheduled release for project ${e}`)}}autoSave=Me.default(()=>{I.mkdirSync(m.dirname(this.draftYjsFilePath),{recursive:!0}),I.writeFileSync(this.draftYjsFilePath,M.encodeStateAsUpdate(this))},$t);save=({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()};publish=async({mode:e,routes:s})=>{const a=m.basename(this.options.path);await Xe(a);const n=await this.getState("draft"),o=await this.getState("production");await Ie(n,o,{routes:s,mergeMode:"replace",deleteRoutes:!0,publishMode:e}),o.config.publishedAt=new Date().getTime(),kt(this.syncedStore,s),await this.setState(e,o),await this.clearPageCacheForRoutes(s,o)};mergeState=async(e,s)=>{const a=JSON.parse(JSON.stringify(s));e.config.fontFamily??={};const n=a.config?.fontFamily,o=e.config?.fontFamily;e.config.fontFamily.title=n?.title||o?.title,e.config.fontFamily.description=n?.description||o?.description,await new Promise((c,r)=>{this.transact(async()=>{try{const l=await Ie(e,s);c(l)}catch(l){r(l)}})})};clearPageCacheForRoutes=async(e,s)=>{const a=m.basename(this.options.path),o=(await L.findByPk(a))?.slug||a;let c=e;(!c||c.length===0)&&(c=s.pageIds??[]),p.logger.info(`[SiteState] clearing page cache for project ${a}, routes:`,c||[]);const r=s.supportedLocales.map(C=>C.locale),l=[],S=c.filter(C=>s.pageIds?.includes(C));for(const C of S){const E=s.pages[C].slug;o&&o!==a&&(o==="/"?l.push(E):l.push(`/${o}${E}`)),l.push(`/${a}${E}`)}if(l.length>0)try{const C=_t(l,r);p.logger.info(`[SiteState] cleared ${C} page cache entries for project ${a}, routes:`,c)}catch{}T.pageUrlMapCache.delete(a)};addConnection=e=>{if(this.conns.has(e))return;this.cancelRelease(),e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",n=>this.messageListener(e,new Uint8Array(n)));let s=!0;const a=setInterval(()=>{if(!s)this.conns.has(e)&&this.closeConn(e),clearInterval(a);else if(this.conns.has(e)){s=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(a)}}},Nt);e.on("close",()=>{this.closeConn(e),clearInterval(a)}),e.on("pong",()=>{s=!0});{const n=v.createEncoder();v.writeVarUint(n,W),ue.writeSyncStep1(n,this),this.send(e,v.toUint8Array(n));const o=this.awareness.getStates();if(o.size>0){const c=v.createEncoder();v.writeVarUint(c,fe),v.writeVarUint8Array(c,z.encodeAwarenessUpdate(this.awareness,Array.from(o.keys()))),this.send(e,v.toUint8Array(c))}}};messageListener=(e,s)=>{try{const a=v.createEncoder(),n=pe.createDecoder(s),o=pe.readVarUint(n);switch(o){case W:v.writeVarUint(a,W),ue.readSyncMessage(n,a,this,null),v.length(a)>1&&(this.ensureDataStructure(),this.send(e,v.toUint8Array(a)));break;case fe:{z.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(n),e);break}default:p.logger.warn(`Unsupported messageType ${o}`)}}catch(a){p.logger.error(a)}this.save()};static async pageUrlMap(e,s){p.logger.info(`[SiteState] get pageUrlMap, mode: ${e}, projectId: ${s}`);let a=[];s?a=[s]:a=await this.getProjectIds();let n={};if(e==="production"&&a?.length){const o=new Map(a?.map(c=>[c,!0])||[]);for(const c of a){const r=T.pageUrlMapCache.get(c);r&&(p.logger.info(`[SiteState] get pageUrlMap from cache, projectId: ${c}`),n={...n,...r},o.delete(c))}a=Array.from(o.keys())}if(a?.length){const o=await L.findAll({where:{id:{[j.Op.in]:a}}}),c=$e.default(10);await Promise.all(o?.map(r=>c(async()=>{const l=r.id,S=r.slug||l,C={},R=e==="production"&&r?.productionState?r.productionState:await T.getStateByProjectId(r.id,e),E=St.default(w.default.env.languages?.map(u=>u.code)||[],R.supportedLocales?.map(u=>u.locale)||[]),h=(u,f)=>{S&&(C[U.joinURL("/",S,u)]={...f,shouldRedirect:!0,mainPage:!0}),C[U.joinURL("/",l,u)]={...f,shouldRedirect:!0,mainPage:!0};for(const A of E){const g={...f,locale:A};C[U.joinURL("/",A,l,u)]=g,S&&(C[U.joinURL("/",A,S,u)]=g)}};if(e==="draft")for(const u of R.routeIds||[]){const f=R?.routes?.[u];if(!f)continue;if(f.params&&f.params.length>0){const d=Q.generateParamCombinations({basePath:f.path,params:f.params,routeId:f.id,paramsOptions:f.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const y of d){const O=y.path,P={projectId:l,projectSlug:S,pageSlug:O,pageId:f.displayTemplateId||"",routeId:u,defaultLocale:E?.[0],locales:E,publishedAt:R.config.publishedAt,isPublic:f.isPublic&&y?.routeMetaData?.isPublic};h(O,P)}}const A=f.path,g={projectId:l,projectSlug:S,pageSlug:A,pageId:f.displayTemplateId||"",routeId:u,defaultLocale:E?.[0],locales:E,publishedAt:R.config.publishedAt,isPublic:f.isPublic};h(A,g)}for(const u of R.pageIds||[]){const f=R.pages[u];if(!f||e==="production"&&!f.isPublic)continue;const A=f.slug,g=r.slug||l,d={projectId:l,projectSlug:g,pageSlug:A,pageId:u,defaultLocale:E?.[0],locales:E,publishedAt:R.config.publishedAt,isPublic:f.isPublic,templateConfig:f.templateConfig};h(A,d)}e==="production"&&(T.pageUrlMapCache.set(l,C),p.logger.info(`[SiteState] set pageUrlMap to cache, projectId: ${l}`)),n={...n,...C}})))}return p.logger.info("[SiteState] success get pageUrlMap"),n}getDocumentSize(){return M.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,a]of Object.entries(T.sharedInstances)){const n=a.getDocumentSize();e.push({projectId:s,sizeInBytes:n,sizeInMB:`${(n/(1024*1024)).toFixed(2)} MB`,activeConnections:a.conns.size})}return e}static startPeriodicCheck(){this.periodicCheckTimer||(this.periodicCheckTimer=setInterval(()=>{this.performPeriodicCheck()},this.PERIODIC_CHECK_INTERVAL),p.logger.info(`[SiteState] periodic check started, interval: ${this.PERIODIC_CHECK_INTERVAL/(60*60*1e3)} hours`))}static stopPeriodicCheck(){this.periodicCheckTimer&&(clearInterval(this.periodicCheckTimer),this.periodicCheckTimer=void 0,p.logger.info("[SiteState] periodic check stopped"))}static performPeriodicCheck(){const e=Object.keys(T.sharedInstances).length,s=[],a=[];for(const[n,o]of Object.entries(T.sharedInstances))o.conns.size===0?s.push({projectId:n,instance:o}):a.push({projectId:n,connections:o.conns.size});if(p.logger.info(`[SiteState] periodic check summary: total instances: ${e}, with connections: ${a.length}, without connections: ${s.length}`),s.length>0){p.logger.info(`[SiteState] releasing ${s.length} instances without connections:`,s.map(o=>o.projectId));let n=0;for(const{projectId:o,instance:c}of s)try{p.logger.info(`[SiteState] releasing instance due to periodic check: ${o}`),c.destroy(),n++}catch(r){p.logger.error(`[SiteState] failed to release instance ${o} during periodic check:`,r)}p.logger.info(`[SiteState] periodic check completed: ${n}/${s.length} instances released successfully`)}else e>0?p.logger.debug("[SiteState] periodic check: all instances have active connections"):p.logger.debug("[SiteState] periodic check: no instances exist")}}async function Gt(t,e,s){if(!t||!I.existsSync(t)||!I.lstatSync(t).isFile())return null;let a=s[t];return a||(a=(async()=>{try{return(await Mt({filePath:t,fileName:e}))?.data?.filename}catch(n){return p.logger.error(`Failed to upload asset ${t}:`,n),null}})(),s[t]=a),a}const qe=async(t,e)=>{const s=m.basename(t),a=await Ee.call({name:je,path:U.joinURL("/uploads",s),responseType:"stream",method:"GET"});if(a.status>=200&&a.status<400){const n=I.createWriteStream(e);await gt.pipeline(a.data,n)}else throw new Error(`download asset failed ${a.status}`)},xe=async(t,e)=>{await Promise.all(t.map(async s=>{try{await qe(s,m.join(e,m.basename(s)))}catch(a){p.logger.error(`Failed to export assets: ${s}, ${a}`)}}))};function Be(t){return Te.test(t)?[t]:K.test(t)?(_e.lastIndex=0,Array.from(t.matchAll(_e)).map(s=>s[1]).filter(s=>!!s)):[]}async function X(t,e,s){const{getFilename:a,exportAssets:n}=s,o=m.join(e,a(t));if(I.mkdirSync(m.dirname(o),{recursive:!0}),I.writeFileSync(o,B.stringify(t)),n){const r=te(t,l=>typeof l=="string"&&(Te.test(l)||K.test(l))).map(l=>{const S=Ae.default(t,l);return Be(S)}).flat().filter(Boolean);await xe(r,m.dirname(o))}}const Se=new be.LRUCache({max:100,ttl:1*60*1e3});async function Ue(t,e,s){const a=te(t,r=>typeof r=="string"&&(Te.test(r)||K.test(r))),n=$e.default(2),o=a.map(r=>n(async()=>{try{const l=Ae.default(t,r),S=Be(l);for(const C of S){const R=m.basename(C),E=s.getFilePath(C,r),h=E?`${E}:${R}`:R,u=Se.get(h);if(u){K.test(l)||ke.default(t,r,u);return}const f=await Gt(E,R,e);f&&(K.test(l)||ke.default(t,r,f),Se.set(h,f))}}catch(l){p.logger.error(`Failed to process upload for path ${r.join(".")}:`,l.message||l.reason)}})),c=await Promise.allSettled(o);s.onFinish?.(c)}async function Ge(t,{exportAssets:e,pageIds:s="all",componentIds:a="all",rawConfig:n,includeResources:o=!1,routeIds:c="all"}={}){const r=s==="all"?t.pageIds:s,l=nt.getComponentDependencies({state:t,pageIds:r,componentIds:a==="all"?Object.keys(t.components):a});Object.entries(t.components).forEach(([i,b])=>{b.data?.renderer?.type==="component-template"&&l.push(i)});const S=c==="all"?t.routeIds:c,C=i=>({id:i.id,name:i.name,isTemplateSection:i.isTemplateSection??!1,templateDescription:i.templateDescription,component:i.component,config:i.config,visibility:i.visibility,sections:i?.sectionIds?k(i?.sectionIds?.map(b=>{const D=i.sections?.[b];return D&&C(D)})):void 0}),R=(i,b)=>({id:i.id,createdAt:i.createdAt,updatedAt:i.updatedAt,publishedAt:i.publishedAt,isPublic:i.isPublic??!0,templateConfig:i.templateConfig,meta:i.locales?.[b]??{},sections:k(i.sectionIds.map(D=>{const F=i.sections[D];return F&&C(F)})),dataSource:Object.fromEntries(Object.entries(i.dataSource||{}).map(([D,F])=>[D,F?.[b]??{}]))}),E=i=>({id:i.id,createdAt:i.createdAt,updatedAt:i.updatedAt,publishedAt:i.publishedAt,path:i.path,handler:i.handler,isPublic:i.isPublic??!0,params:i.params??[],enabledGenerate:i.enabledGenerate??!1,displayTemplateId:i.displayTemplateId,dataSource:i.dataSource}),h=k(S.map(i=>{const b=t.routes[i];return b&&E(b)})),u=k(t.supportedLocales.map(i=>i.locale).flatMap(i=>r.map(b=>{const D=t.pages[b];return D&&{locale:i,slug:D.slug,page:R(D,i)}}))),f=Ne(),A=m.join(f,"pages");I.mkdirSync(A,{recursive:!0});const g=m.join(f,"components");I.mkdirSync(g,{recursive:!0});const d=m.join(f,"routes");I.mkdirSync(d,{recursive:!0});for(const{locale:i,slug:b,page:D}of u)await X(D,A,{getFilename:()=>`${se(b)||"index"}.${i}.yml`,exportAssets:e});for(const i of h)await X(i,d,{getFilename:()=>`${se(i.path)||"index"}.yml`,exportAssets:e});for(const i of l){const b=t.components[i]?.data;b&&await X(b,g,{getFilename:D=>`${D.name||"unnamed"}.${D.id}.yml`,exportAssets:e})}const y=m.join(f,".blocklet/pages/pages.config.yml");I.mkdirSync(m.dirname(y),{recursive:!0});const O={pages:k(r.map(i=>{const b=t.pages[i];return b&&{id:i,slug:b.slug}})),routes:k(S.map(i=>{const b=t.routes[i];return b&&{id:i,path:b.path}})),components:k(l.map(i=>{const b=t.components[i]?.data;return b&&{id:i,name:b.name}})),...o?{resources:{components:k(Object.keys(t.resources?.components||{}).filter(i=>l.includes(i)).map(i=>({id:i,name:t.resources?.components?.[i]?.component?.name})))}}:{},supportedLocales:t.supportedLocales,config:t.config};I.writeFileSync(y,B.stringify(O));const P=m.join(f,"config.source.json");if(n&&I.writeFileSync(P,JSON.stringify(n)),o){const i=m.join(f,"resources"),b=m.join(i,"components");I.mkdirSync(b,{recursive:!0});for(const G of Object.keys(t?.resources?.components??{}).filter(_=>l.includes(_))){const _=t.resources?.components?.[G]?.component;_&&await X(_,b,{getFilename:V=>`${V.name||"unnamed"}.${V.id}.yml`,exportAssets:e})}const D=m.join(f,"chunks");I.mkdirSync(D,{recursive:!0});const F=Vt();for(const G of Object.keys(t?.resources?.components??{}).filter(_=>l.includes(_))){const _=t.resources?.components?.[G]?.component;if(_&&_.renderer?.type==="react-component"){const V=_.renderer?.chunks??[];if(V?.length>0)for(const ce of V){const De=m.join(D,ce),le=F?.[ce];try{le&&I.existsSync(le)&&!I.existsSync(De)&&I.copyFileSync(le,De)}catch(Qe){p.logger.error(`copy chunk ${ce} error`,Qe.message)}}}}}return f}async function Ce(t,{importAssets:e,includeResources:s}={}){if(!I.existsSync(t))return null;let a,n=!1;try{I.lstatSync(t).isDirectory()?a=t:/\.(tgz|gz|tar)$/.test(t)&&(n=!0,a=Ne(),await mt.x({file:t,C:a}));const o=Z.globSync("**/.blocklet/pages/pages.config.yml",{cwd:a,absolute:!0}).at(0),c=o&&m.join(m.dirname(o),"../../pages"),r=o&&m.join(m.dirname(o),"../../components"),l=o&&m.join(m.dirname(o),"../../routes");if(!o)return null;const S=B.parse(I.readFileSync(o).toString()),C=(g,d,y)=>{let O=m.join(g,`${d}${y?`.${y}`:""}.yml`);return(!I.existsSync(O)||!I.lstatSync(O).isFile())&&(O=m.join(g,d,`index${y?`.${y}`:""}.yml`),!I.existsSync(O)||!I.lstatSync(O))?null:B.parse(I.readFileSync(O).toString())},R=(g,d)=>{try{const y=Z.globSync(`*.${d}.yml`,{cwd:g,absolute:!0})[0];return y?B.parse(I.readFileSync(y).toString()):null}catch(y){p.logger.error("parse component error",y)}return null},E=(g,d)=>{let y=m.join(g,`${d}.yml`);return(!I.existsSync(y)||!I.lstatSync(y).isFile())&&(y=m.join(g,d,"index.yml"),!I.existsSync(y)||!I.lstatSync(y))?null:B.parse(I.readFileSync(y).toString())},h=k(S.pages.map(({slug:g})=>{const d=k(S.supportedLocales.map(({locale:P})=>{const i=c?C(c,se(g),P):void 0;if(i)return{locale:P,page:i};const b=c?C(c,g,P):void 0;return b&&{locale:P,page:b}})),y=d[0]?.page;if(!y)return null;const O=y.sections.map(at.unzipSection);return{id:y.id||Re.nextId(),createdAt:y.createdAt,updatedAt:y.updatedAt,publishedAt:y.publishedAt,isPublic:y.isPublic??!0,templateConfig:y.templateConfig,slug:g,sections:Object.fromEntries(O.map(P=>[P.id,P])),sectionIds:O.map(P=>P.id),locales:Object.fromEntries(d.map(({locale:P,page:i})=>[P,i.meta])),dataSource:y.dataSource?Object.fromEntries([...new Set(d.flatMap(({page:P})=>Object.keys(P.dataSource??{})))].map(P=>[P,Object.fromEntries(d.map(({locale:i,page:b})=>{const D=b.dataSource?.[P];return[i,D||{}]}))])):Object.fromEntries([...new Set(d.flatMap(({page:P})=>P.sections.map(i=>i.id)))].map(P=>[P,Object.fromEntries(d.map(({locale:i,page:b})=>{const D=b.dataSource?.[P];if(D)return[i,D];const F=b.sections.find(G=>G.id===P);return[i,F?.properties||{}]}))]))}})),u=k(S?.routes?.map(({path:g})=>{const d=l?E(l,se(g)):void 0;return{...d,id:d?.id||Re.nextId(),createdAt:d?.createdAt??new Date().toISOString(),updatedAt:d?.updatedAt??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:d?.path??`/${d?.id}`,params:d?.params,handler:d?.handler??"Pages Kit",isPublic:d?.isPublic??!0,enabledGenerate:d?.enabledGenerate??!1,displayTemplateId:d?.displayTemplateId??void 0,dataSource:d?.dataSource??{}}})??[]),f=r?k(S.components?.map(({id:g})=>R(r,g))??[]):[];if(e){const g=(...d)=>{p.logger.info(`[${n?m.basename(t):m.basename(m.join(t,"../../../../"))}] importAssets:`,...d)};try{g("wait image-bin api ready"),await It.default({resources:[`${Ee.getComponentWebEndpoint(p.IMAGE_BIN_NAME)}/api/sdk/uploads`],validateStatus:O=>O>=200&&O<=500}),g("image-bin api is ready");const d={},y={};g("start to upload assets"),await Promise.allSettled([Ue(f,d,{getFilePath:O=>r&&m.join(r,O),onFinish:O=>{g(`upload ${O.length} component assets`)}}),Ue(h,y,{getFilePath:(O,P)=>{const i=Ae.default(h,P.slice(0,1));return c&&m.join(c,m.dirname(i.slug),O)},onFinish:O=>{g(`upload ${O.length} page assets`)}})]),g("upload assets done"),Se.clear(),global.gc&&global.gc()}catch(d){g("Error during asset import:",d)}}const A={};if(s){const g=o&&m.join(m.dirname(o),"../../resources/components"),d=k(S.resources?.components?.map(({id:y})=>R(g,y))??[]);d.length>0&&(A.components=Object.fromEntries(d.map((y,O)=>[y.id,{index:O,component:y}])))}return{supportedLocales:S.supportedLocales,pageIds:h.map(g=>g.id),components:Object.fromEntries(f.map((g,d)=>[g.id,{index:d,data:g}])),pages:Object.fromEntries(h.map(g=>[g.id,g])),config:S.config||{},resources:A,routeIds:u.map(g=>g.id),routes:Object.fromEntries(u.map(g=>[g.id,g])),dataSourceIds:[],dataSources:{}}}finally{n&&a&&I.rmSync(a,{force:!0,recursive:!0})}}async function Ie(t,e,{routes:s,mergeMode:a="byUpdateTime",deleteRoutes:n=!1,publishMode:o=void 0}={}){try{o&&p.clearPreloadComponentsCacheByMode(o)}catch(E){p.logger.error("clear preload page cache error",{error:E})}const{pages:c,pageIds:r,routeIds:l,routes:S,supportedLocales:C}=t;if(o==="production"){let E=s??[],h=null;for(const u of l??[]){const f=S?.[u];if(f?.params&&f?.params.length>0&&f?.paramsOptions&&f?.paramsOptions.length>0){const A=Q.generateParamCombinations({basePath:f.path,params:f.params,routeId:f.id,paramsOptions:f.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]}),g=Object.fromEntries(A.map(d=>[`${u}-${d.paramOptionIds.join("-")}`,d]));h={...h||{},...g},s||(E=[...E,...A.map(d=>`${u}-${d.paramOptionIds.join("-")}`)])}else s||E.push(u)}p.logger.info("routeIds to be published: ",E);for(const u of E){let f=u;if(f.includes("-")){const[d]=f.split("-");f=d}const A=S?.[f];if(!A){const d=e.pageIds.indexOf(f);d!==-1&&n&&(e.pageIds.splice(d,1),delete e.pages[f]);for(const y of e.pageIds)y.includes(`${f}-`)&&(e.pageIds.splice(e.pageIds.indexOf(y),1),delete e.pages[y]);p.logger.info("delete main route page",f);continue}if(u.includes("-")&&!h?.[u]){const d=e.pageIds.indexOf(u);d!==-1&&n&&(e.pageIds.splice(d,1),delete e.pages[u]),p.logger.info("delete page",u);continue}if(!A.displayTemplateId){p.logger.info("no display template",u);continue}const g=c[A.displayTemplateId];if(!g){p.logger.info("no template page",u);continue}if(e.pageIds.includes(u)){if(p.logger.info("has need update page",u),a==="replace")e.pages[u]=de({page:g,route:A,state:t,routeId:u,routePathInfo:h?.[u]}),p.logger.info("replace page",u);else if(a==="byUpdateTime"){const d=e.pages[A.id];(!d||A.updatedAt&&A.updatedAt>d.updatedAt)&&(e.pages[u]=de({page:g,route:A,state:t,routeId:u,routePathInfo:h?.[u]}),p.logger.info("replace page by update time",u))}}else e.pageIds.push(u),e.pages[u]=de({page:g,route:A,state:t,routeId:u,routePathInfo:h?.[u]}),p.logger.info("add page",u)}if(n&&!s)for(const u of e.pageIds)E?.includes(u)||(delete e.pages[u],p.logger.info("delete page",u)),e.pageIds=[...e.pageIds].filter(f=>E?.includes(f))}else{for(const E of r){const h=c[E];if(h)if(e.pageIds.includes(h.id)){if(a==="replace")e.pages[h.id]=h;else if(a==="byUpdateTime"){const u=e.pages[h.id];(!u||h.updatedAt&&h.updatedAt>u.updatedAt)&&(e.pages[h.id]=h)}}else e.pageIds.push(h.id),e.pages[h.id]=h}for(const E of l){const h=S[E];if(h)if(e.routeIds.includes(h.id)){if(a==="replace")e.routes[h.id]=h;else if(a==="byUpdateTime"){const u=e.routes[h.id];(!u||h.updatedAt&&h.updatedAt>u.updatedAt)&&(e.routes[h.id]=h)}}else e.routeIds.push(h.id),e.routes[h.id]=h}}if(e.supportedLocales.splice(0,e.supportedLocales.length),e.supportedLocales.push(...we.default(C)),n)for(const E of Object.keys(e.components))delete e.components[E];let R=JSON.parse(JSON.stringify(t.components));R=Object.fromEntries(await Promise.all(Object.entries(R).map(async([E,h])=>{const u=await Ve(h?.data);return[E,{...h,data:u}]}))),Object.assign(e.components,R),Object.assign(e.config,JSON.parse(JSON.stringify(t.config))),Pe.default(t.resources.components)||(e.resources.components=JSON.parse(JSON.stringify(t.resources.components||{})))}const Ve=p.memoizeWithFs(async t=>{if(!Pe.default(t?.properties))return t;if(t?.renderer?.type==="react-component"){const{script:e,PROPERTIES_SCHEMA:s}=t?.renderer||{};if(s||e&&e.includes("PROPERTIES_SCHEMA"))try{const a=await p.getExportSchemaValueFromCode(e??"","PROPERTIES_SCHEMA",t.id,s);a&&a.length>0&&t&&(t.properties={},a.forEach((n,o)=>{t?.properties&&(t.properties[n.id]={index:o,data:n})}))}catch(a){p.logger.error("getPropertiesFromCode error",{componentId:t.id,name:t.name},{error:a})}}return t},{subdir:"getPropertiesFromCode"});let ae,J,oe,re;const ze=()=>Ee.getResources({types:[{did:je,type:me},{did:At,type:me}]}),Vt=()=>{const t=ze(),e={};return t.forEach(s=>{const a=Z.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s.path,absolute:!0}).at(0),n=a&&m.join(m.dirname(a),"../../chunks");if(n&&I.existsSync(n)){const o=I.readdirSync(n);for(const c of o)e[c]=m.join(n,c)}}),e};function Ye(){return ae=(async()=>{const t=ze();J=(await Promise.all(t.map(async s=>{const a=s.path?await Ce(s.path,{importAssets:!1}):void 0;return a?{blockletId:s.did,state:a,blockletTitle:s.title}:void 0}))).filter(s=>!!s),oe=J.reduce((s,a)=>Object.assign(s,Object.fromEntries(Object.values(a.state.pages).map(n=>n?[n?.id,{page:n,blockletId:a.blockletId}]:[]))),{});const e=J.reduce((s,a)=>Object.assign(s,Object.fromEntries(Object.values(a.state.components).map(n=>[n.data.id,{blockletId:a.blockletId,component:n.data}]))),{});re=Object.fromEntries(await Promise.all(Object.entries(e).map(async([s,a])=>{const n=await Ve(a.component);return[s,{...a,component:n}]})))})(),ae}function He(t){const e=Me.default(async()=>{await Ye().catch(s=>{p.logger.error("load resource states error",{error:s})}),await t?.({states:J,pages:oe,components:re})},3e3,{leading:!1,trailing:!0});return e(),w.default.events.on(w.default.Events.componentAdded,e),w.default.events.on(w.default.Events.componentRemoved,e),w.default.events.on(w.default.Events.componentStarted,e),w.default.events.on(w.default.Events.componentStopped,e),w.default.events.on(w.default.Events.componentUpdated,e),w.default.events.on(he,e),()=>{w.default.events.off(w.default.Events.componentAdded,e),w.default.events.off(w.default.Events.componentRemoved,e),w.default.events.off(w.default.Events.componentStarted,e),w.default.events.off(w.default.Events.componentStopped,e),w.default.events.off(w.default.Events.componentUpdated,e),w.default.events.off(he,e)}}const Ke=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),Je=Symbol.for("GLOBAL_ENV_UPDATE_LISTENER_KEY"),ie=globalThis;ie[Ke]?.();ie[Ke]=He(async({pages:t,components:e})=>{const s=await T.getProjectIds();p.logger.info(`start update resource states projects(${s.length})`,s),await Promise.race([new Promise(a=>{setTimeout(()=>{a({})},30*1e3)}),Promise.all(s.map(async a=>{We({projectId:a,pages:t,components:e})}))]).catch(a=>{p.logger.error("update resource states failed:",a)})});ie[Je]?.();ie[Je]=()=>{const t=()=>{T.pageUrlMapCache.clear(),p.logger.info("[Cache CLEAR ALL] clear all page url map cache by env update")};return w.default.events.on(w.default.Events.envUpdate,t),()=>{w.default.events.off(w.default.Events.envUpdate,t)}};T.startPeriodicCheck();process.on("beforeExit",()=>{T.stopPeriodicCheck()});process.on("SIGINT",()=>{T.stopPeriodicCheck(),process.exit(0)});process.on("SIGTERM",()=>{T.stopPeriodicCheck(),process.exit(0)});async function We({projectId:t,pages:e,components:s}){const a=T.sharedInstances[t];if(!a){p.logger.info(`projectId: ${t} not found in sharedInstances`);return}if(a.syncedStore.resources.pages=e,(await L.findByPk(t))?.useAllResources)a.syncedStore.resources.components=s;else{const c=(await Oe.findAll({where:{projectId:t}})).map(l=>l.componentId),r=Object.fromEntries(Object.entries(s||{}).filter(([l])=>c.includes(l)));a.syncedStore.resources.components=r}p.logger.info(`update [${t}] resource states:`,{pages:Object.keys(a.syncedStore.resources.pages||{}).length,components:Object.keys(a.syncedStore.resources.components||{}).length})}async function Xe(t){return We({projectId:t,pages:oe,components:re})}async function zt(){p.logger.info("trigger reload all project resource"),w.default.events.emit(he)}async function Yt({ensureLoaded:t=!0}={}){return t&&(ae??=Ye(),await ae),{states:J,pages:oe,components:re}}exports.COMPONENT_DID=je;exports.PUBLISH_MODES=Bt;exports.Project=L;exports.RESOURCE_TYPE=me;exports.SITE_STATE_PATH=x;exports.STATE_MODES=xt;exports.SiteState=T;exports.downloadAsset=qe;exports.downloadAssets=xe;exports.fromPackage=Ce;exports.getDefaultState=Fe;exports.getResourceStates=Yt;exports.initPackResourceStates=He;exports.mergeState=Ie;exports.toPackage=Ge;exports.triggerReloadAllProjectResource=zt;exports.updateResourceStatesByProjectId=Xe;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const me=require("react/jsx-runtime"),D=require("ufo"),ge=require("@blocklet/js-sdk"),Se=require("lodash/isEmpty"),Ie=require("yaml"),Pe=require("@arcblock/ux/lib/Locale/context"),q=require("@blocklet/pages-kit/utils/common"),ye=require("@blocklet/pages-kit/utils/page-model");require("@mui/material");const ee=require("@syncedstore/core"),Ce=require("@syncedstore/react"),we=require("ahooks"),A=require("immer"),he=require("lodash/cloneDeep"),be=require("lodash/debounce"),g=require("react"),te=require("react-router-dom"),ve=require("y-indexeddb"),Oe=require("y-websocket"),xe=require("yjs");require("@blocklet/pages-kit/types");const G=o=>o&&o.__esModule?o:{default:o};function ke(o){if(o&&o.__esModule)return o;const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const S in o)if(S!=="default"){const f=Object.getOwnPropertyDescriptor(o,S);Object.defineProperty(n,S,f.get?f:{enumerable:!0,get:()=>o[S]})}}return n.default=o,Object.freeze(n)}const Ee=G(Se),Te=ke(Ie),je=G(ee),R=G(he),oe=G(be);function ne(){const{pathname:o}=window.location,S=o.match(/\/admin\/(maker|previewer)\/([^/]+)/)?.[2],f=window.__PROJECT_ID__;if(!S&&!f)throw new Error("Unable to get projectId from pathname");return S||f}function Me(o){return`${o}:pages:version`}function Ne(o,n){return n==="yaml"?Ee.default(o)?"":Te.stringify(o,{indent:2}):n==="json"?JSON.parse(JSON.stringify(o||{})):n==="array"?JSON.parse(JSON.stringify(o||[])):o}const K=window.blocklet?.prefix||"/",z=ge.createAxios({timeout:200*1e3}),Le=window.location.protocol==="https:"?"wss":"ws",_e=o=>D.joinURL(`${Le}://${window.location.hostname}`,K,`api/${o}/ws/pages`),Ae="z8ia1mAXo8ZE7ytGF36L5uBf9kD2kenhqFGp9";blocklet?.componentMountPoints.find(o=>o.did===Ae)?.mountPoint||D.joinURL(K,"/image-bin");function Re(o){return o&&!/^(https?:\/\/|\/)/.test(o)?window.location.origin+D.joinURL(K,"uploads",o):o}const De=window.innerWidth<=750;function $e(o,n,S){if(!o||/\.gif/.test(o))return o;const f=(De?n/1.5:n)*(S==="quality"?1.5:1);return Je(o,{imageFilter:"resize",w:f,f:"webp"})}function Je(o,n){return!o||!n?o:D.withQuery(o,n)}async function qe(o){return z.get(`/api/projects/${o}`).then(n=>n.data)}async function Ue(o){return z.post(`/api/projects/${o.id}/update`,o).then(n=>n.data)}const X="@COMPONENT-TEMPLATE-",W=o=>`${X}${o}`,F=o=>o.startsWith(X),Z=o=>F(o)?o.slice(X.length):null;function ce(o,n={}){return n[o.id]=o,o.sectionIds&&o.sections&&o.sectionIds.forEach(S=>{const f=o.sections?.[S];f&&ce(f,n)}),n}function re(o,n){const S=W(o.id),f=n.section,O=ce(f);n.dataSource??={};const w=n.dataSource;return{id:S,createdAt:o.createdAt,updatedAt:o.updatedAt,publishedAt:o.updatedAt,slug:o.id,sections:O,sectionIds:[f.id],isPublic:!0,templateConfig:{isTemplate:!0},locales:{},dataSource:w}}const Be=500,se=g.createContext(null);function Fe({url:o,name:n,children:S,waitingSynced:f}){const[O,w]=g.useState(!1),{locale:L}=Pe.useLocaleContext(),b=Q(),j=`${b}:MakerLocalState`,x=`${b}:${n}`,[v,P]=we.useLocalStorageState(j,{defaultValue:{},listenStorageChange:!0}),$=g.useRef(v);$.current=v;const J=g.useMemo(()=>je.default({dataSourceIds:[],dataSources:{},pages:{},pageIds:[],routes:{},routeIds:[],components:{},supportedLocales:[],config:{},resources:{}}),[]),C=g.useMemo(()=>ee.getYjsDoc(J),[J]);g.useMemo(()=>new ve.IndexeddbPersistence(x,C),[x,C]);const h=g.useMemo(()=>new Oe.WebsocketProvider(o,x,C,{params:{},resyncInterval:5*60*1e3}),[o,x,C]),B=g.useCallback(()=>{h&&(h.wsconnected?(h.disconnect(),setTimeout(()=>h.connect(),100)):h.connect())},[h]),e=g.useMemo(()=>new xe.UndoManager([C.getArray("pageIds"),C.getMap("pages"),C.getArray("supportedLocales"),C.getMap("config"),C.getMap("dataSources"),C.getArray("dataSourceIds"),C.getArray("routeIds"),C.getMap("routes")],{doc:C}),[C]),[t,c]=g.useState(null),[r,d]=g.useState(!1),[i,l]=g.useState(void 0),m=g.useCallback(async()=>{if(b){d(!0);try{const s=await qe(b);c(s)}catch(s){console.error("Failed to fetch project:",s)}finally{d(!1)}}},[b]),u=g.useCallback(async(s,a)=>{if(l(void 0),!!b){a?.optimisticUpdate&&t&&c(I=>({...I,...s}));try{const I=await Ue({...s});c(I)}catch(I){console.error("Failed to update project:",I),a?.optimisticUpdate&&c(t),l(I?.response?.data)}}},[b,t]);g.useEffect(()=>{b&&m()},[b,m]);const p=g.useMemo(()=>({doc:C,state:J,localState:{...v,currentLocale:L},setLocalState:s=>P(typeof s=="function"?a=>s(a??{}):s),undoManager:e,projectState:{project:t,isLoadingProject:r,error:i},updateProject:u,forceSync:B}),[C,J,JSON.stringify(v),P,e,t,r,u,i,L,B]);return g.useEffect(()=>{e.on("stack-item-added",({stackItem:s})=>{const{currentPageId:a,currentLocale:I,pages:y}=$.current;s.meta.set("localState",{currentPageId:a,currentLocale:I,pages:y})}),e.on("stack-item-popped",({stackItem:s})=>{const a=s.meta.get("localState");a&&P(I=>({...I,...a}))})},[e,P]),g.useEffect(()=>{h.awareness.setLocalState(v)},[h,v]),g.useEffect(()=>{h.once("synced",()=>{w(!0)});let s=0,a=null;const I=3,y=5e3,M=15e3,k=()=>{s=0,P(T=>({...T,networkStatus:void 0}))},E=()=>{P(T=>({...T,networkStatus:"offline"}))},N=oe.default(({status:T})=>{if(T==="connected")k(),a&&(clearTimeout(a),a=null);else if(T==="disconnected"){if(s++,!a){const le=Date.now();let Y=0;const pe=Math.ceil(M/y),H=()=>{Y++;const fe=Date.now()-le;if(h.wsconnected){k();return}if(fe>=M||Y>=pe){E();return}a=setTimeout(H,y)};a=setTimeout(H,y)}s>=I&&E()}},Be),_=()=>{h.wsconnected||h.connect(),k()},U=()=>{E()};return h.on("status",N),window.addEventListener("online",_),window.addEventListener("offline",U),h.wsconnected&&k(),()=>{a&&clearTimeout(a),h.off("status",N),window.removeEventListener("online",_),window.removeEventListener("offline",U)}},[h,P]),f&&!O?null:me.jsx(se.Provider,{value:p,children:S})}const ie=()=>{const o=g.useContext(se);if(!o)throw new Error("Context is null");const n=Ce.useSyncedStore(o.state),{setLocalState:S,localState:f}=o,O=te.useNavigate(),w=Q(),L=g.useRef({}),b=g.useCallback(e=>{const t=n.components[e]?.data;return!t||t.renderer?.type!=="component-template"?void 0:(L.current[e]||(L.current[e]={page:re(t,t.renderer)}),L.current[e]?.page)},[n.components]),j=g.useCallback(e=>{const t=n.components[e]?.data;if(!t||t.renderer?.type!=="component-template")return;const c=b(e);if(c)return{componentId:e,component:t,renderer:t.renderer,page:c}},[b,n.components]),x=g.useCallback(e=>{const t=n.pages[e];if(t)return{kind:"page",pageId:e,page:t};if(!F(e))return;const c=Z(e);if(!c)return;const r=j(c);if(r)return{kind:"component-template",pageId:e,page:r.page,componentId:r.componentId,component:r.component,renderer:r.renderer}},[j,n.pages]),v=g.useCallback(e=>{const t=x(e);if(!t)throw new Error(`Page ${e} is not exists`);return t},[x]),P=g.useMemo(()=>({get currentPage(){const{localState:{currentPageId:e,currentComponentId:t}}=o;if(e){const c=x(e);if(c)return c.page}if(t){const c=j(t);if(c)return c.page}},get currentSection(){const{localState:{currentPageId:e,...t}}=o,{currentPage:c}=this;if(!c||!e)return;const r=t.pages?.[e]?.currentSectionId;if(r)return c.sections?.[r]??this.currentPageModel?.getComponentById(r)?.model},get currentSectionProperties(){const{localState:{currentPageId:e,...t}}=o,{currentPage:c}=this;if(!c||!e)return;const r=t.pages?.[e]?.currentSectionId;if(!r)return;const d=c.dataSource?.[r];if(!d)return;const{currentLocale:i}=this.currentLocaleMap;return i?d[i]:void 0},get currentSectionPropertiesWithFallback(){const{localState:{currentPageId:e,...t}}=o,{currentPage:c}=this;if(!c||!e)return;const r=t.pages?.[e]?.currentSectionId;if(!r)return;const d=c.dataSource?.[r];if(!d)return;const{currentLocale:i,defaultLocale:l,fallbackLocale:m}=this.currentLocaleMap;if(i&&d[i])return d[i];if(l&&d[l])return d[l];if(m&&d[m])return d[m]},get currentLocaleMap(){const{localState:{currentLocale:e},state:{supportedLocales:t,config:{defaultLocale:c}}}=o;return{currentLocale:e,defaultLocale:c,fallbackLocale:t?.[0]?.locale??"en"}},get currentRoute(){const{localState:{currentRouteId:e}}=o;return e?n.routes?.[e]:void 0},get currentPageModel(){const e=this.currentPage??null;if(e)return ye.getPageTemplateModel(e,!1)}}),[JSON.stringify(f),n]),$=g.useMemo(()=>{if(f.currentPageId){const e=x(f.currentPageId);if(e?.kind==="component-template")return e}if(f.currentComponentId){const e=j(f.currentComponentId);if(e)return{kind:"component-template",pageId:W(e.componentId),page:e.page,componentId:e.componentId,component:e.component,renderer:e.renderer}}},[f.currentPageId,f.currentComponentId,x,j]),J=g.useCallback(()=>$?.kind==="component-template"?$:void 0,[$]),C=g.useMemo(()=>({setCurrentSectionId:(e,t)=>{const c=F(e),r=c?Z(e):null;e===f.currentPageId&&t===f.pages?.[e]?.currentSectionId&&(!c||r===f.currentComponentId)||(O(c&&r?D.joinURL("/admin/maker",w??"","components",r):D.joinURL("/admin/maker",w??"","pages",e)),S(d=>A.produce(d,i=>{i.currentPageId=e,c?r&&(i.currentComponentId=r):i.currentComponentId=void 0,i.pages??={},i.pages[e]??={},i.pages[e].currentSectionId=t??void 0,t?window.sessionStorage.setItem("iframe_show_id",`"${t}"`):window.sessionStorage.removeItem("iframe_show_id")})))},setCurrentComponentId:e=>{if(!e){S(d=>A.produce(d,i=>{i.currentComponentId=void 0}));return}const c=n.components[e]?.data?.renderer?.type==="component-template",r=c?W(e):void 0;e===f.currentComponentId&&(!c||f.currentPageId===r)||(O(D.joinURL("/admin/maker",w??"","components",e)),S(d=>A.produce(d,i=>{i.currentComponentId=e,c&&r?(i.currentPageId=r,i.pages??={},i.pages[r]??={}):i.currentPageId&&F(i.currentPageId)&&(i.currentPageId=void 0)})))},setCurrentRouteId:({routeId:e,dynamicParams:t})=>{S(c=>A.produce(c,r=>{r.currentRouteId=e,r.currentDynamicParams=t}))},setCustomComponentPreviewerProperties:(()=>{const e={};let t="";const c=oe.default(()=>{S(r=>A.produce(r,d=>{d.customComponentPreviewerProperties??={},d.customComponentPreviewerProperties[t]={...d.customComponentPreviewerProperties[t],...R.default(e[t])},delete e[t]}))},5);return(r,d)=>{const i=e[r]??{};Object.assign(i,d),e[r]=i,t=r,c()}})(),setRouteGenerateProcess:e=>{S(t=>A.produce(t,c=>{e?c.routeGenerateProcess={...c.routeGenerateProcess,...e}:c.routeGenerateProcess={}}))},resetRouteGenerateProcess:()=>{S(e=>A.produce(e,t=>{t.routeGenerateProcess={progress:"complete"}}))}}),[S,O,w,P]),h=g.useCallback((e,t,c,r,d)=>{const i=v(e),{page:l}=i,m=R.default(t),u=c?R.default(c):void 0,p=V(m);return o.doc.transact(()=>{if(d&&d.component==="layout-block"){const s=P.currentPageModel?.getComponentById(d.id);s&&(s.model.sections??={},s.model.sections[p.id]=p,s.model.sectionIds??=[],s.model.sectionIds.push(p.id))}else if(i.kind==="component-template"){const s=i.renderer.section;s.sections??={},s.sections[p.id]=p,s.sectionIds??=[],s.sectionIds.push(p.id)}else l.sections[p.id]=p,l.sectionIds.splice(r??l.sectionIds.length,0,p.id);if(u){l.dataSource??={};const s=(a,I)=>{const y=u[a.id];y&&(l.dataSource[I.id]=R.default(y)),a.component==="layout-block"&&a.sectionIds?.length&&a.sectionIds.forEach((M,k)=>{const E=a.sections?.[M],N=I.sectionIds?.[k],_=N?I.sections?.[N]:void 0;E&&_&&s(E,_)})};s(m,p)}}),C.setCurrentSectionId(e,p.id),p},[v,P,o.doc,C]),B=g.useMemo(()=>({addPage:(e,t)=>{const c=e?.id??q.nextId(),r={...e,id:c,createdAt:e?.createdAt??new Date().toISOString(),updatedAt:e?.updatedAt??new Date().toISOString(),publishedAt:new Date(0).toISOString(),slug:e?.slug??`/${c}`,sections:e?.sections??{},sectionIds:e?.sectionIds??[],isPublic:e?.isPublic??!0,templateConfig:e?.templateConfig??{isTemplate:e?.templateConfig?.isTemplate??!0,displayTemplateId:e?.templateConfig?.displayTemplateId??void 0,dataSourceIds:e?.templateConfig?.dataSourceIds??void 0,dataSourceParameters:e?.templateConfig?.dataSourceParameters??{},enabledGenerate:e?.templateConfig?.enabledGenerate??!1,agentId:e?.templateConfig?.agentId??void 0}};return o.doc.transact(()=>{n.pages[r.id]=r,n.pageIds.splice(t??n.pageIds.length,0,r.id)}),r},addRoute:(e,t)=>{const c=e?.id??q.nextId(),r={...e,id:c,createdAt:e?.createdAt??new Date().toISOString(),updatedAt:e?.updatedAt??new Date().toISOString(),publishedAt:new Date(0).toISOString(),path:e?.path??`/${c}`,handler:e?.handler??"Pages Kit",isPublic:e?.isPublic??!0,params:e?.params??[],enabledGenerate:e?.enabledGenerate??!1,displayTemplateId:e?.displayTemplateId??void 0,dataSource:e?.dataSource??{}};return o.doc.transact(()=>{n.routes??={},n.routeIds??=[],n.routes[r.id]=r,n.routeIds.splice(t??n.routeIds.length,0,r.id)}),r},deleteRoute:e=>{if(!e)return;const t=n.routeIds?.indexOf(e);t!==void 0&&t!==-1&&o.doc.transact(()=>{n.routeIds?.splice(t,1),delete n.routes?.[e]})},deletePage:e=>{const t=n.pageIds.indexOf(e);t!==-1&&o.doc.transact(()=>{n.pageIds.splice(t,1),delete n.pages[e]})},movePage:(e,t)=>{const{pageIds:c}=n,r=c.indexOf(e);r>=0&&c.splice(t,0,...c.splice(r,1))},addSection:(e,t,c,r)=>{const d=v(e),{page:i}=d,l=t?.config,m=typeof l?.componentId=="string"?l.componentId:void 0;if(t.component==="custom-component"&&m){const a=(n.components[m]?.data??n.resources?.components?.[m]?.component)?.renderer;if(a?.type==="component-template")return h(e,a.section,a.dataSource,c,r)}const u={...t,id:t.id??q.nextId(),isTemplateSection:t.isTemplateSection??!0},p=R.default(u.locales);return delete u.locales,o.doc.transact(()=>{if(r&&r.component==="layout-block"){const s=P.currentPageModel?.getComponentById(r.id);s&&(s.model.sections??={},s.model.sections[u.id]=u,s.model.sectionIds??=[],s.model.sectionIds.push(u.id))}else if(d.kind==="component-template"){const s=d.renderer.section;s.sections??={},s.sections[u.id]=u,s.sectionIds??=[],s.sectionIds.push(u.id)}else i.sections[u.id]=u,i.sectionIds.splice(c??i.sectionIds.length,0,u.id);p&&(i.dataSource??={},i.dataSource[u.id]=p)}),u},deleteSection:(e,t)=>{const c=v(e),{page:r}=c;o.doc.transact(()=>{const d=[],i=P.currentPageModel?.getComponentById(t),l=i?.parent;if(i&&(d.push(i.model.id,...i.all().map(m=>m.model.id)),l?.model.component==="layout-block")){const m=l.model.sectionIds?.indexOf(t);m!==void 0&&m!==-1&&(l.model.sectionIds?.splice(m,1),delete l.model.sections?.[t]),l.model.config?.gridSettings&&Object.keys(l.model.config.gridSettings).forEach(u=>{try{delete l.model.config.gridSettings[u]?.[t]}catch{}}),l.model.config?.backgroundSectionId===t&&(l.model.config.backgroundSectionId=void 0)}d.forEach(m=>{const u=r.sectionIds.indexOf(m);u!==-1&&r.sectionIds.splice(u,1),r.sections[m]&&delete r.sections[m],r.dataSource?.[m]&&delete r.dataSource?.[m]})})},lockSection:(e,t)=>{v(e);const c=P.currentPageModel?.getComponentById(t)?.model;c&&(c.locked=!c.locked)},toggleSectionVisibility:(e,t,c)=>{v(e);const r=P.currentPageModel?.getComponentById(t)?.model;r&&(r.visibility=c)},moveSection:(e,t,c,r)=>{const d=v(e),{page:i}=d,l=P.currentPageModel;if(!l)throw new Error(`Page model for ${e} is not available`);const m=p=>{const s=l.getComponentById(p);if(!s)return null;const a=s.model,I=s.parent;if(!I)return{section:a,container:i,containerType:"root",index:i.sectionIds.indexOf(p)};const y=I.model;return{section:a,container:y,containerType:"layout-block",index:y.sectionIds.indexOf(p)}},u=m(t);if(!u)throw new Error(`Section ${t} not found`);o.doc.transact(()=>{if(c.startsWith("layout-")){const a=c.replace("layout-",""),y=l.getComponentById(a)?.model;if(!y||y.component!=="layout-block")throw new Error(`Layout block ${a} not found`);if(a===t||((E,N)=>{const _=l.getComponentById(E),U=l.getComponentById(N);if(!_||!U||_.model.component!=="layout-block")return!1;let T=U.parent;for(;T;){if(T.model.id===E)return!0;T=T.parent}return!1})(t,a))return;const k=JSON.parse(JSON.stringify(u.section));y.sections||(y.sections={}),y.sectionIds||(y.sectionIds=[]),y.sections[t]=k,y.sectionIds.push(t),u.container.sectionIds.splice(u.index,1),u.containerType==="layout-block"&&delete u.container.sections[t];return}const p=m(c);if(!p)throw new Error(`Target section ${c} not found`);let s=p.index;if(r==="bottom"&&(s=p.index+1),u.container===p.container){const{sectionIds:a}=u.container;a.splice(u.index,1),u.index<s&&(s-=1),a.splice(s,0,t)}else{const a=JSON.parse(JSON.stringify(u.section));p.containerType==="root"||(p.container.sections||(p.container.sections={}),p.container.sections[t]=a),p.container.sectionIds.splice(s,0,t),u.container.sectionIds.splice(u.index,1),u.containerType==="layout-block"&&delete u.container.sections[t]}})},copySection:(e,t)=>{v(e);const c=P.currentPageModel?.getComponentById(t);if(!c?.model)throw new Error(`Section ${t} is not exists`);const r=JSON.parse(JSON.stringify(c.model)),d=V(r),i=d.id,l=c?.parent;if(l){if(l.model.sections[i]=d,l.model.sectionIds.push(i),P.currentPage?.dataSource?.[t]&&(P.currentPage.dataSource[i]=JSON.parse(JSON.stringify(P.currentPage.dataSource[t])),d.component==="layout-block")){const m=(u,p)=>{const s=u.sectionIds,a=p.sectionIds;s?.forEach((I,y)=>{const M=a?.[y];if(M){if(M&&P.currentPage?.dataSource){const N=P.currentPage.dataSource[M];N&&(P.currentPage.dataSource[I]=JSON.parse(JSON.stringify(N)))}const k=u.sections?.[I],E=p?.sections?.[M];k?.component==="layout-block"&&k.sectionIds&&E?.sectionIds&&m(k,E)}})};d.sectionIds&&r.sectionIds&&m(d,r)}C.setCurrentSectionId(e,i)}return d},extractSectionToComponentTemplate:(e,t)=>{const c=v(e),{page:r}=c,i=P.currentPageModel?.getComponentById(t)?.model;if(!i){console.warn(`Section ${t} is not exists`);return}const l=JSON.parse(JSON.stringify(i));if(l.component!=="layout-block"||!(l.sectionIds?.length??0)){console.warn(`Section ${t} is not eligible for component template extraction.`);return}const m=(s,a=[])=>(s&&(a.push(s.id),s.sectionIds?.forEach(I=>{const y=s.sections?.[I];m(y,a)})),a),p=m(i).reduce((s,a)=>{const I=r.dataSource?.[a];return I&&(s[a]=JSON.parse(JSON.stringify(I))),s},{});return{section:l,dataSource:Object.keys(p).length?p:void 0}},addComponentTemplate:({name:e,description:t,section:c,dataSource:r})=>{const d=q.nextId(),i=new Date().toISOString(),l=R.default(c),m=r?R.default(r):void 0;return o.doc.transact(()=>{const u=Object.values(n.components).length;n.components[d]={index:u,data:{id:d,name:e.trim()||void 0,description:t?.trim()||void 0,createdAt:i,updatedAt:i,renderer:{type:"component-template",section:l,dataSource:m}}}}),n.components[d]},addDataSource:e=>{const t=e.id??q.nextId(),c={...e??{},id:t,createdAt:new Date().toISOString()};return o.doc.transact(()=>{n.dataSourceIds??=[],n.dataSources??={},n.dataSourceIds.push(t),n.dataSources[t]=c}),n.dataSources[t]},deleteDataSource:e=>{const t=n.dataSourceIds.indexOf(e);t!==-1&&o.doc.transact(()=>{n.dataSourceIds.splice(t,1),delete n.dataSources[e]})}}),[n,o.doc,P]);return{...o,state:n,actions:B,localActions:C,...P,getComponentTemplateContext:J}},Q=()=>{const{projectId:o}=te.useParams();return o??ne()??""},Ge=()=>window.__PROJECT_SLUG__??"";function ae(o){const{resources:n}=o;if(!n.components)return{};const S={};return window?.blocklet?.componentMountPoints?.forEach(f=>{S[f.did]=f}),Object.fromEntries(Object.entries(n.components).map(([f,{blockletId:O,component:w}])=>[f,{data:w,blockletId:O,blockletTitle:S[O]?.title||O}]))}function de(o){const{components:n}=o;return n||{}}function ue(o){return{...ae(o),...de(o)}}const We=()=>ue(ie().state);function V(o){const n=JSON.parse(JSON.stringify(o)),S=q.nextId();if(n.component==="layout-block"){const f={...n.config??{}},O=n.sectionIds?.map(w=>{const L=n.sections?.[w],b=V(n.sections?.[w]),j=b.id;return L?.id===n.config?.backgroundSectionId&&(f.backgroundSectionId=b.id),n.config?.gridSettings&&Object.keys(n.config.gridSettings).forEach(x=>{f.gridSettings[x]={...f.gridSettings[x]??{},[j]:{...n.config?.gridSettings?.[x]?.[w],id:j}},delete n.config?.gridSettings?.[x]?.[w]}),b});n.sections=Object.fromEntries(O?.map(w=>[w.id,w])??[]),n.sectionIds=O?.map(w=>w.id)??[],n.config=f}return{...n,id:S}}exports.StoreProvider=Fe;exports.api=z;exports.autoResizeImage=$e;exports.createComponentTemplatePage=re;exports.getAllComponents=ue;exports.getCustomComponents=de;exports.getImageAbsoluteUrl=Re;exports.getProjectIdFromPathnameOrWindow=ne;exports.getProjectPageVersionKey=Me;exports.getResourceComponents=ae;exports.getWssURL=_e;exports.transformValue=Ne;exports.useAllComponents=We;exports.useProjectId=Q;exports.useProjectSlug=Ge;exports.useStore=ie;
|