@blocklet/pages-kit-inner-components 0.6.103 → 0.6.104
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/components-BmFOXvb0.js +57 -0
- package/lib/cjs/chunks/site-state-BQySNTiP.js +1 -0
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +1 -1
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/chunks/components-DLjI_Xlm.js +615 -0
- package/lib/es/chunks/site-state-DS7eIMFg.js +1684 -0
- package/lib/es/components.js +14 -13
- package/lib/es/project-html.js +1 -1
- package/lib/es/resources.js +2 -2
- 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/es/chunks/components-BIhMGXjB.js +0 -610
- package/lib/es/chunks/site-state-CN4Kulgk.js +0 -1671
package/lib/es/components.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as
|
|
1
|
+
import { C as _, G as c, e as E, f as d, c as P, k as N, n as O, b as g, j as I, g as T, h, s as y } from "./chunks/components-DLjI_Xlm.js";
|
|
2
2
|
import "@blocklet/pages-kit/builtin/utils";
|
|
3
3
|
import "@blocklet/pages-kit/types";
|
|
4
4
|
import "@blocklet/pages-kit/utils/builtin";
|
|
@@ -8,18 +8,19 @@ import "@blocklet/sdk/lib/config";
|
|
|
8
8
|
import "lodash/isEmpty";
|
|
9
9
|
import "lru-cache";
|
|
10
10
|
import "node-fetch";
|
|
11
|
+
import "p-limit";
|
|
11
12
|
import "ufo";
|
|
12
13
|
export {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
_ as CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS,
|
|
15
|
+
c as GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS,
|
|
16
|
+
E as clearPreloadComponentsCache,
|
|
17
|
+
d as clearPreloadComponentsCacheByInstanceId,
|
|
18
|
+
P as clearPreloadComponentsCacheByMode,
|
|
19
|
+
N as getComponentFromState,
|
|
20
|
+
O as getComponentFromStateByName,
|
|
21
|
+
g as getExportSchemaValueFromCode,
|
|
22
|
+
I as getPreloadComponent,
|
|
23
|
+
T as getPreloadComponents,
|
|
24
|
+
h as getPreloadComponentsCacheKey,
|
|
25
|
+
y as skipTranspileComponent
|
|
25
26
|
};
|
package/lib/es/project-html.js
CHANGED
|
@@ -5,7 +5,7 @@ import { WalletAuthenticator as B } from "@blocklet/sdk/lib/wallet-authenticator
|
|
|
5
5
|
import { WalletHandlers as D } from "@blocklet/sdk/lib/wallet-handler";
|
|
6
6
|
import { BlockletService as K } from "@blocklet/sdk/service/auth";
|
|
7
7
|
import U, { resolve as C } from "path";
|
|
8
|
-
import { l as v, g as W } from "./chunks/components-
|
|
8
|
+
import { l as v, g as W } from "./chunks/components-DLjI_Xlm.js";
|
|
9
9
|
import { e as H, i as N } from "./chunks/html-DOgzvdOd.js";
|
|
10
10
|
import { createSnapshotMiddleware as O } from "@arcblock/crawler-middleware";
|
|
11
11
|
import { PreloadComponentScriptModule as R } from "@blocklet/pages-kit/types";
|
package/lib/es/resources.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as A, a as M, l as b } from "./chunks/components-
|
|
2
|
-
import { P as w, C as J, R as X, S as x, t as W, g as G } from "./chunks/site-state-
|
|
1
|
+
import { i as A, a as M, l as b } from "./chunks/components-DLjI_Xlm.js";
|
|
2
|
+
import { P as w, C as J, R as X, S as x, t as W, g as G } from "./chunks/site-state-DS7eIMFg.js";
|
|
3
3
|
import { Router as K } from "express";
|
|
4
4
|
import a from "fs";
|
|
5
5
|
import m from "joi";
|
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.104",
|
|
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": "^1.16.54-beta-
|
|
80
|
+
"@blocklet/js-sdk": "^1.16.54-beta-20251027-105624-dfa978f8",
|
|
81
81
|
"@blocklet/logger": "1.16.54-beta-20251021-070951-25e3083c",
|
|
82
82
|
"@blocklet/quickjs": "^0.5.26",
|
|
83
|
-
"@blocklet/sdk": "^1.16.54-beta-
|
|
83
|
+
"@blocklet/sdk": "^1.16.54-beta-20251027-105624-dfa978f8",
|
|
84
84
|
"@blocklet/studio-ui": "^0.5.26",
|
|
85
|
-
"@blocklet/tracker": "^1.16.54-beta-
|
|
85
|
+
"@blocklet/tracker": "^1.16.54-beta-20251027-105624-dfa978f8",
|
|
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.104",
|
|
205
|
+
"@blocklet/pages-kit-block-studio": "^0.6.104"
|
|
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;
|