@blocklet/pages-kit-inner-components 0.6.84 → 0.6.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/chunks/site-state-2LMcqIzO.js +1 -0
- package/lib/cjs/locales.js +2 -2
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/chunks/site-state-B0mj1K8f.js +1635 -0
- package/lib/es/locales.js +2 -0
- package/lib/es/resources.js +1 -1
- package/lib/es/site-state.js +1 -1
- package/package.json +3 -3
- package/lib/cjs/chunks/site-state-CtiXHtSX.js +0 -1
- package/lib/es/chunks/site-state-D4wvb7PN.js +0 -1572
package/lib/es/locales.js
CHANGED
|
@@ -424,6 +424,7 @@ const t = e({
|
|
|
424
424
|
notConfig: "Not config",
|
|
425
425
|
slugAlreadyExists: "Slug already exists",
|
|
426
426
|
slugRequired: "Slug cannot be empty",
|
|
427
|
+
slugInvalid: "Slug format is invalid",
|
|
427
428
|
invalidJson: "Invalid JSON format"
|
|
428
429
|
},
|
|
429
430
|
fabric: {
|
|
@@ -1022,6 +1023,7 @@ const t = e({
|
|
|
1022
1023
|
notConfig: "未设置",
|
|
1023
1024
|
slugAlreadyExists: "路径已存在",
|
|
1024
1025
|
slugRequired: "路径不能为空",
|
|
1026
|
+
slugInvalid: "路径格式不合法",
|
|
1025
1027
|
invalidJson: "JSON格式无效"
|
|
1026
1028
|
},
|
|
1027
1029
|
fabric: {
|
package/lib/es/resources.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as A, a as M, l as b } from "./chunks/components-DLwSTd_N.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-
|
|
2
|
+
import { P as w, C as J, R as X, S as x, t as W, g as G } from "./chunks/site-state-B0mj1K8f.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
1
|
import "./chunks/components-DLwSTd_N.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-
|
|
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-B0mj1K8f.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.85",
|
|
4
4
|
"description": "Pages Kit inner components library",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -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.85",
|
|
205
|
+
"@blocklet/pages-kit-block-studio": "^0.6.85"
|
|
206
206
|
},
|
|
207
207
|
"devDependencies": {
|
|
208
208
|
"@trivago/prettier-plugin-sort-imports": "^5.2.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const f=require("./components-DLLpFRy5.js"),F=require("@syncedstore/core"),Je=require("yjs"),We=require("@blocklet/pages-kit/utils/data-source"),Q=require("@blocklet/pages-kit/utils/route"),Qe=require("lodash/cloneDeep"),Xe=require("@blocklet/sdk/lib/config"),I=require("fs"),g=require("path"),Te=require("@blocklet/pages-kit/utils/common"),Ze=require("@blocklet/pages-kit/utils/page-model"),et=require("@blocklet/pages-kit/utils/property"),Ie=require("@blocklet/sdk/lib/component"),tt=require("@reactivedata/reactive"),X=require("glob"),st=require("lib0/decoding"),at=require("lib0/encoding"),nt=require("lodash/debounce"),ot=require("lodash/get"),rt=require("lodash/isEmpty"),it=require("lodash/set"),ct=require("lodash/union"),be=require("lru-cache"),lt=require("p-limit"),C=require("sequelize"),pt=require("stream/promises"),ut=require("tar"),x=require("ufo"),dt=require("wait-on"),z=require("y-protocols/awareness"),le=require("y-protocols/sync"),ft=require("yaml"),De=require("./html-xfTPTsl5.js");require("sqlite3");require("@blocklet/pages-kit/types/state");const N=t=>t&&t.__esModule?t:{default:t};function ae(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 U=ae(Je),Le=N(Qe),w=N(Xe),pe=ae(st),k=ae(at),_e=N(nt),Ee=N(ot),we=N(rt),ve=N(it),gt=N(ct),mt=N(lt),ht=N(dt),B=ae(ft),yt=C.DataTypes.sqlite.DATE.parse;C.DataTypes.sqlite.DATE.parse=(t,e)=>typeof t=="number"?new Date(t):yt(t,e);const M=new C.Sequelize({dialect:"sqlite",storage:f.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});M.query("pragma journal_mode = WAL;");M.query("pragma synchronous = normal;");M.query("pragma journal_size_limit = 33554432;");M.query("pragma cache_size = -2000;");M.query("pragma mmap_size = 33554432;");process.on("SIGINT",async()=>{await M.close(),process.exit(0)});process.on("SIGTERM",async()=>{await M.close(),process.exit(0)});async function St(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 fe=null;fe&&clearInterval(fe);fe=setInterval(async()=>{f.logger.info("Start cleanupSqliteMemory"),await St(M,f.databaseUrl),f.logger.info("End cleanupSqliteMemory")},60*1e3*10);class Ae extends C.Model{}Ae.init({id:{type:C.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:C.DataTypes.UUIDV4},projectId:{type:C.DataTypes.UUID,allowNull:!1},componentId:{type:C.DataTypes.STRING,allowNull:!1}},{sequelize:M,tableName:"ProjectComponents",timestamps:!1});class L extends C.Model{static async getProjectByIdOrSlug(e){return L.findOne({where:{[C.Op.or]:[{id:e},{slug:e}]}})}}L.init({id:{type:C.DataTypes.UUID,defaultValue:C.DataTypes.UUIDV4,primaryKey:!0},name:{type:C.DataTypes.STRING,allowNull:!1},description:C.DataTypes.TEXT,createdAt:C.DataTypes.DATE,updatedAt:C.DataTypes.DATE,createdBy:{type:C.DataTypes.STRING,allowNull:!1},updatedBy:{type:C.DataTypes.STRING,allowNull:!1},slug:C.DataTypes.STRING,icon:C.DataTypes.STRING,pinnedAt:C.DataTypes.DATE,useAllResources:C.DataTypes.BOOLEAN,npmSecret:C.DataTypes.STRING,relatedBlocklets:{type:C.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){const t=this.getDataValue("relatedBlocklets");if(typeof t=="object")return t??{};try{return t?JSON.parse(t):{}}catch(e){return f.logger.error("Failed to parse relatedBlocklets",{error:e,rawValue:t}),{}}},set(t){try{this.setDataValue("relatedBlocklets",t?JSON.stringify(t):"{}")}catch(e){f.logger.error("Failed to set relatedBlocklets",{error:e,value:t}),this.setDataValue("relatedBlocklets","{}")}}},productionState:{type:C.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 f.logger.error("Failed to parse productionState",{error:e,rawValue:t}),{}}},set(t){try{this.setDataValue("productionState",t?JSON.stringify(t):"{}")}catch(e){f.logger.error("Failed to set productionState",{error:e,value:t}),this.setDataValue("productionState","{}")}}}},{sequelize:M,paranoid:!0});L.hasMany(Ae,{foreignKey:"projectId",as:"components"});const It="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ge="page",me="trigger-reload-project-resource",Pe=It,bt="z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM";function Z(t){t.observeDeep(e=>{e.some(s=>s.changes.keys.has("updatedAt")||s.changes.keys.has("publishedAt"))||t.set("updatedAt",new Date().toISOString())})}function Ue(){return I.mkdtempSync(g.join(w.default.env.dataDir,"tmp-"))}function ee(t,e,s=[]){return Array.isArray(t)?t.flatMap((a,n)=>ee(a,e,[...s,n])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([a,n])=>ee(n,e,[...s,a])):e(t)?[s]:[]}function R(t){return t.filter(e=>e!=null)}function Et(t){t.pages&&Object.keys(t.pages).forEach(s=>{const a=F.getYjsValue(t.pages[s]);a&&a instanceof U.Map&&Z(a)});const e=F.getYjsValue(t.pages);e&&e instanceof U.Map&&e.observe(s=>{s.changes.keys.forEach((a,n)=>{if(a.action==="add"){const o=F.getYjsValue(t.pages[n]);o&&o instanceof U.Map&&Z(o)}})})}function wt(t){t.routes&&Object.keys(t.routes).forEach(s=>{const a=F.getYjsValue(t.routes?.[s]);a&&a instanceof U.Map&&Z(a)});const e=F.getYjsValue(t.routes);e&&e instanceof U.Map&&e.observe(s=>{s.changes.keys.forEach((a,n)=>{if(a.action==="add"){const o=F.getYjsValue(t.routes?.[n]);o&&o instanceof U.Map&&Z(o)}})})}function At(t,e){for(const s of e||Object.keys(t.routes||{})){let a=s,n=[];if(s.includes("-")){const[o,...i]=s.split("-");a=o,n=i||[]}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 i=Q.getRouteMetaDataByOptionIds(n,o);i&&(i.publishedAt=new Date().toISOString())}if(!e){const i=Q.generateParamCombinations({basePath:o.path,params:o.params,routeId:o.id,paramsOptions:o.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const l of i)l.routeMetaData??={},l.routeMetaData.publishedAt=new Date().toISOString()}}}}function ue({page:t,route:e,state:s,routeId:a,routePathInfo:n}){f.logger.info(`Executing datasource data assembly, routeId: ${a}, routePathInfo: ${JSON.stringify(n)}`);const o={...Le.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 i of s.supportedLocales){if(e.dataSource){let l=e.id;n&&(l=n.paramOptionIds.join("-"));const p=e.dataSource.pathDataMappings?.[l]?.dataCache?.[i.locale]??e.dataSource.pathDataMappings?.[l]?.dataCache?.[s.config.defaultLocale||"en"];if(!p)continue;We.setPageDataSource(o,s,i.locale,p)}n&&n.routeMetaData&&(n.routeMetaData.publishedAt=new Date().toISOString())}return o}["true","1","yes","y"].includes(process.env.USE_FS_CACHE_HTML??"");const Pt=60*60*1e3,Y=new be.LRUCache({max:100,ttl:Pt,ttlResolution:10*1e3,allowStale:!0});function jt(t,e=[]){let s=0;const a=Array.from(Y.keys()),n=t.map(o=>x.withoutTrailingSlash(o));for(const o of a)for(const i of n){if(De.matchCacheKey(o,{currentPath:i})){Y.delete(o),s++,f.logger.info(`[Cache CLEAR] key: ${o}`);break}for(const l of e)if(De.matchCacheKey(o,{currentPath:`/${l}${i}`})){Y.delete(o),s++,f.logger.info(`[Cache CLEAR] key: ${o}`);break}}return f.logger.info(`[Cache CLEAR] cleared ${s} entries for paths:`,n),s}function Ot(){const t=Y.size;return Y.clear(),f.logger.info(`[Cache CLEAR ALL] cleared ${t} entries`),t}w.default.events.on(w.default.Events.envUpdate,Ot);const{uploadToMediaKit:Ct}=require("@blocklet/uploader-server"),je=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,H=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,ke=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,Tt=1e4,Dt=3e4,J=0,de=1,vt=0,kt=1,he=w.default,q=g.join(process.env.BLOCKLET_DATA_DIR,"site-state"),Rt=["production","draft"],Lt=["production"];function te(t){return t?.replace(/\//g,"|")||""}function Me(){const t=he.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 O extends U.Doc{constructor(e){super(),this.options=e,I.existsSync(this.draftYjsFilePath)&&U.applyUpdate(this,I.readFileSync(this.draftYjsFilePath)),this.syncedStore=tt.reactive(F.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:100,ttl:1e3*60*60*24});static periodicCheckTimer;static safeDeleteProjectStateDir(e){if(!e)throw new Error("Should provide project context");try{const s=g.join(q,e),a=g.join(q,`@del-${e}`);I.renameSync(s,a)}catch(s){f.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 X.globSync("*/",{cwd:q,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*","undefined"]})}static get allShared(){return this.projectIds.map(e=>O.shared(e))}static shared(e){if(!e)throw new Error("Should provide project context");let s=O.sharedInstances[e];return s||(s=new O({path:g.join(q,e)}),O.sharedInstances[e]=s,s)}static async getProductionState(e){const s=await L.findByPk(e,{attributes:["productionState"]});if(we.default(s?.productionState)){const a=g.join(q,e,"production"),n=await Oe(a,{includeResources:!0})??Me();if(!n?.config?.defaultLocale){n.config??={};const o=he.env.languages?.map(i=>({locale:i.code,name:i.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=g.basename(this.options.path);delete O.sharedInstances[e],super.destroy()}initObserver(){Et(this.syncedStore),wt(this.syncedStore)}get draftYjsFilePath(){return g.join(this.options.path,"draft.yjs")}static async getStateByProjectId(e,s){if(s==="draft"){const a=O.shared(e);return JSON.parse(JSON.stringify(a.syncedStore))}return O.getProductionState(e)}async getState(e){if(e==="draft")return JSON.parse(JSON.stringify(this.syncedStore));const s=g.basename(this.options.path);return O.getProductionState(s)}async setState(e,s){const a=await qe(s,{exportAssets:!1,includeResources:!0}),n=this.getPublishDir(e);if(I.mkdirSync(g.dirname(n),{recursive:!0}),I.rmSync(n,{force:!0,recursive:!0}),I.renameSync(a,n),e==="production"){const o=g.basename(this.options.path);O.pageUrlMapCache.delete(o),await L.update({productionState:{...s}},{where:{id:o}})}}getPublishDir(e){return g.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 p=this.conns.get(n);p&&(e.forEach(S=>{p.add(S)}),a.forEach(S=>{p.delete(S)}))}const i=k.createEncoder();k.writeVarUint(i,de),k.writeVarUint8Array(i,z.encodeAwarenessUpdate(this.awareness,o));const l=k.toUint8Array(i);this.conns.forEach((p,S)=>this.send(S,l))};updateHandler=e=>{const s=k.createEncoder();k.writeVarUint(s,J),le.writeUpdate(s,e);const a=k.toUint8Array(s);this.conns.forEach((n,o)=>this.send(o,a))};ensureDataStructure=()=>{const{supportedLocales:e,pages:s,pageIds:a,config:n,routes:o,routeIds:i}=this.syncedStore;{const l=new Set(Object.keys(s));let p=0;for(;p<a.length;){const S=a[p];l.has(S)?(l.delete(S),p++):a.splice(p,1)}}{const l=new Set(Object.keys(o));let p=0;for(;p<i.length;){const S=i[p];l.has(S)?(l.delete(S),p++):i.splice(p,1)}}e.splice(0,e.length),e.push(...he.env.languages.map(l=>({locale:l.code,name:l.name}))),n.defaultLocale=e[0]?.locale;{let l=0;const p=new Set;for(;l<e.length;){const{locale:S}=e[l];p.has(S)?e.splice(l,1):(l++,p.add(S))}}};send=(e,s)=>{e.readyState!==vt&&e.readyState!==kt&&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=g.basename(this.options.path);this.releaseTimer=setTimeout(()=>{f.logger.info(`[SiteState] releasing instance due to no active connections: ${e}`),this.conns.size===0&&(this.releaseTimer=void 0,this.destroy())},O.RELEASE_DELAY),f.logger.info(`[SiteState] scheduled release for project ${e} in ${O.RELEASE_DELAY/1e3}s`)}cancelRelease(){if(this.releaseTimer){clearTimeout(this.releaseTimer),this.releaseTimer=void 0;const e=g.basename(this.options.path);f.logger.info(`[SiteState] cancelled scheduled release for project ${e}`)}}autoSave=_e.default(()=>{I.mkdirSync(g.dirname(this.draftYjsFilePath),{recursive:!0}),I.writeFileSync(this.draftYjsFilePath,U.encodeStateAsUpdate(this))},Tt);save=({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()};publish=async({mode:e,routes:s})=>{const a=await this.getState("draft"),n=await this.getState("production");await Se(a,n,{routes:s,mergeMode:"replace",deleteRoutes:!0,publishMode:e}),n.config.publishedAt=new Date().getTime(),At(this.syncedStore,s),await this.setState(e,n),await this.clearPageCacheForRoutes(s,n)};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((i,l)=>{this.transact(async()=>{try{const p=await Se(e,s);i(p)}catch(p){l(p)}})})};clearPageCacheForRoutes=async(e,s)=>{const a=g.basename(this.options.path),o=(await L.findByPk(a))?.slug||a;let i=e;(!i||i.length===0)&&(i=s.pageIds??[]),f.logger.info(`[SiteState] clearing page cache for project ${a}, routes:`,i||[]);const l=s.supportedLocales.map(A=>A.locale),p=[],S=i.filter(A=>s.pageIds?.includes(A));for(const A of S){const E=s.pages[A].slug;o&&o!==a&&(o==="/"?p.push(E):p.push(`/${o}${E}`)),p.push(`/${a}${E}`)}if(p.length>0)try{const A=jt(p,l);f.logger.info(`[SiteState] cleared ${A} page cache entries for project ${a}, routes:`,i)}catch{}};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)}}},Dt);e.on("close",()=>{this.closeConn(e),clearInterval(a)}),e.on("pong",()=>{s=!0});{const n=k.createEncoder();k.writeVarUint(n,J),le.writeSyncStep1(n,this),this.send(e,k.toUint8Array(n));const o=this.awareness.getStates();if(o.size>0){const i=k.createEncoder();k.writeVarUint(i,de),k.writeVarUint8Array(i,z.encodeAwarenessUpdate(this.awareness,Array.from(o.keys()))),this.send(e,k.toUint8Array(i))}}};messageListener=(e,s)=>{try{const a=k.createEncoder(),n=pe.createDecoder(s),o=pe.readVarUint(n);switch(o){case J:k.writeVarUint(a,J),le.readSyncMessage(n,a,this,null),k.length(a)>1&&(this.ensureDataStructure(),this.send(e,k.toUint8Array(a)));break;case de:{z.applyAwarenessUpdate(this.awareness,pe.readVarUint8Array(n),e);break}default:f.logger.warn(`Unsupported messageType ${o}`)}}catch(a){f.logger.error(a)}this.save()};static async pageUrlMap(e,s){let a=[];s?a=[s]:a=await this.getProjectIds();let n={};if(e==="production"&&a?.length){const o=new Map(a?.map(i=>[i,!0])||[]);for(const i of a){const l=O.pageUrlMapCache.get(i);l&&(n={...n,...l},o.delete(i))}a=Array.from(o.keys())}if(a?.length){const o=await L.findAll({where:{id:{[C.Op.in]:a}}});await Promise.all(o?.map(async i=>{const l=i.id,p=i.slug||l,S={},A=e==="production"&&i?.productionState?i.productionState:await O.getStateByProjectId(i.id,e),v=gt.default(w.default.env.languages?.map(u=>u.code)||[],A.supportedLocales?.map(u=>u.locale)||[]),E=(u,c)=>{p&&(S[x.joinURL("/",p,u)]={...c,shouldRedirect:!0,mainPage:!0}),S[x.joinURL("/",l,u)]={...c,shouldRedirect:!0,mainPage:!0};for(const h of v){const T={...c,locale:h};S[x.joinURL("/",h,l,u)]=T,p&&(S[x.joinURL("/",h,p,u)]=T)}};if(e==="draft")for(const u of A.routeIds||[]){const c=A?.routes?.[u];if(!c)continue;if(c.params&&c.params.length>0){const m=Q.generateParamCombinations({basePath:c.path,params:c.params,routeId:c.id,paramsOptions:c.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]});for(const d of m){const y=d.path,P={projectId:l,projectSlug:p,pageSlug:y,pageId:c.displayTemplateId||"",routeId:u,defaultLocale:v?.[0],locales:v,publishedAt:A.config.publishedAt,isPublic:c.isPublic&&d?.routeMetaData?.isPublic};E(y,P)}}const h=c.path,T={projectId:l,projectSlug:p,pageSlug:h,pageId:c.displayTemplateId||"",routeId:u,defaultLocale:v?.[0],locales:v,publishedAt:A.config.publishedAt,isPublic:c.isPublic};E(h,T)}for(const u of A.pageIds||[]){const c=A.pages[u];if(!c||e==="production"&&!c.isPublic)continue;const h=c.slug,T=i.slug||l,m={projectId:l,projectSlug:T,pageSlug:h,pageId:u,defaultLocale:v?.[0],locales:v,publishedAt:A.config.publishedAt,isPublic:c.isPublic,templateConfig:c.templateConfig};E(h,m)}e==="production"&&O.pageUrlMapCache.set(l,S),n={...n,...S}}))}return n}getDocumentSize(){return U.encodeStateAsUpdate(this).byteLength}static getInstancesSizeInfo(){const e=[];for(const[s,a]of Object.entries(O.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),f.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,f.logger.info("[SiteState] periodic check stopped"))}static performPeriodicCheck(){const e=Object.keys(O.sharedInstances).length,s=[],a=[];for(const[n,o]of Object.entries(O.sharedInstances))o.conns.size===0?s.push({projectId:n,instance:o}):a.push({projectId:n,connections:o.conns.size});if(f.logger.info(`[SiteState] periodic check summary: total instances: ${e}, with connections: ${a.length}, without connections: ${s.length}`),s.length>0){f.logger.info(`[SiteState] releasing ${s.length} instances without connections:`,s.map(o=>o.projectId));let n=0;for(const{projectId:o,instance:i}of s)try{f.logger.info(`[SiteState] releasing instance due to periodic check: ${o}`),i.destroy(),n++}catch(l){f.logger.error(`[SiteState] failed to release instance ${o} during periodic check:`,l)}f.logger.info(`[SiteState] periodic check completed: ${n}/${s.length} instances released successfully`)}else e>0?f.logger.debug("[SiteState] periodic check: all instances have active connections"):f.logger.debug("[SiteState] periodic check: no instances exist")}}async function _t(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 Ct({filePath:t,fileName:e}))?.data?.filename}catch(n){return f.logger.error(`Failed to upload asset ${t}:`,n),null}})(),s[t]=a),a}const Ne=async(t,e)=>{const s=g.basename(t),a=await Ie.call({name:Pe,path:x.joinURL("/uploads",s),responseType:"stream",method:"GET"});if(a.status>=200&&a.status<400){const n=I.createWriteStream(e);await pt.pipeline(a.data,n)}else throw new Error(`download asset failed ${a.status}`)},$e=async(t,e)=>{await Promise.all(t.map(async s=>{try{await Ne(s,g.join(e,g.basename(s)))}catch(a){f.logger.error(`Failed to export assets: ${s}, ${a}`)}}))};function Fe(t){return je.test(t)?[t]:H.test(t)?(ke.lastIndex=0,Array.from(t.matchAll(ke)).map(s=>s[1]).filter(s=>!!s)):[]}async function W(t,e,s){const{getFilename:a,exportAssets:n}=s,o=g.join(e,a(t));if(I.mkdirSync(g.dirname(o),{recursive:!0}),I.writeFileSync(o,B.stringify(t)),n){const l=ee(t,p=>typeof p=="string"&&(je.test(p)||H.test(p))).map(p=>{const S=Ee.default(t,p);return Fe(S)}).flat().filter(Boolean);await $e(l,g.dirname(o))}}const ye=new be.LRUCache({max:100,ttl:1*60*1e3});async function Re(t,e,s){const a=ee(t,l=>typeof l=="string"&&(je.test(l)||H.test(l))),n=mt.default(2),o=a.map(l=>n(async()=>{try{const p=Ee.default(t,l),S=Fe(p);for(const A of S){const v=g.basename(A),E=s.getFilePath(A,l),u=E?`${E}:${v}`:v,c=ye.get(u);if(c){H.test(p)||ve.default(t,l,c);return}const h=await _t(E,v,e);h&&(H.test(p)||ve.default(t,l,h),ye.set(u,h))}}catch(p){f.logger.error(`Failed to process upload for path ${l.join(".")}:`,p.message||p.reason)}})),i=await Promise.allSettled(o);s.onFinish?.(i)}async function qe(t,{exportAssets:e,pageIds:s="all",componentIds:a="all",rawConfig:n,includeResources:o=!1,routeIds:i="all"}={}){const l=s==="all"?t.pageIds:s,p=et.getComponentDependencies({state:t,pageIds:l,componentIds:a==="all"?Object.keys(t.components):a});Object.entries(t.components).forEach(([r,b])=>{b.data?.renderer?.type==="component-template"&&p.push(r)});const S=i==="all"?t.routeIds:i,A=r=>({id:r.id,name:r.name,isTemplateSection:r.isTemplateSection??!1,templateDescription:r.templateDescription,component:r.component,config:r.config,visibility:r.visibility,sections:r?.sectionIds?R(r?.sectionIds?.map(b=>{const D=r.sections?.[b];return D&&A(D)})):void 0}),v=(r,b)=>({id:r.id,createdAt:r.createdAt,updatedAt:r.updatedAt,publishedAt:r.publishedAt,isPublic:r.isPublic??!0,templateConfig:r.templateConfig,meta:r.locales?.[b]??{},sections:R(r.sectionIds.map(D=>{const $=r.sections[D];return $&&A($)})),dataSource:Object.fromEntries(Object.entries(r.dataSource||{}).map(([D,$])=>[D,$?.[b]??{}]))}),E=r=>({id:r.id,createdAt:r.createdAt,updatedAt:r.updatedAt,publishedAt:r.publishedAt,path:r.path,handler:r.handler,isPublic:r.isPublic??!0,params:r.params??[],enabledGenerate:r.enabledGenerate??!1,displayTemplateId:r.displayTemplateId,dataSource:r.dataSource}),u=R(S.map(r=>{const b=t.routes[r];return b&&E(b)})),c=R(t.supportedLocales.map(r=>r.locale).flatMap(r=>l.map(b=>{const D=t.pages[b];return D&&{locale:r,slug:D.slug,page:v(D,r)}}))),h=Ue(),T=g.join(h,"pages");I.mkdirSync(T,{recursive:!0});const m=g.join(h,"components");I.mkdirSync(m,{recursive:!0});const d=g.join(h,"routes");I.mkdirSync(d,{recursive:!0});for(const{locale:r,slug:b,page:D}of c)await W(D,T,{getFilename:()=>`${te(b)||"index"}.${r}.yml`,exportAssets:e});for(const r of u)await W(r,d,{getFilename:()=>`${te(r.path)||"index"}.yml`,exportAssets:e});for(const r of p){const b=t.components[r]?.data;b&&await W(b,m,{getFilename:D=>`${D.name||"unnamed"}.${D.id}.yml`,exportAssets:e})}const y=g.join(h,".blocklet/pages/pages.config.yml");I.mkdirSync(g.dirname(y),{recursive:!0});const P={pages:R(l.map(r=>{const b=t.pages[r];return b&&{id:r,slug:b.slug}})),routes:R(S.map(r=>{const b=t.routes[r];return b&&{id:r,path:b.path}})),components:R(p.map(r=>{const b=t.components[r]?.data;return b&&{id:r,name:b.name}})),...o?{resources:{components:R(Object.keys(t.resources?.components||{}).filter(r=>p.includes(r)).map(r=>({id:r,name:t.resources?.components?.[r]?.component?.name})))}}:{},supportedLocales:t.supportedLocales,config:t.config};I.writeFileSync(y,B.stringify(P));const j=g.join(h,"config.source.json");if(n&&I.writeFileSync(j,JSON.stringify(n)),o){const r=g.join(h,"resources"),b=g.join(r,"components");I.mkdirSync(b,{recursive:!0});for(const V of Object.keys(t?.resources?.components??{}).filter(_=>p.includes(_))){const _=t.resources?.components?.[V]?.component;_&&await W(_,b,{getFilename:G=>`${G.name||"unnamed"}.${G.id}.yml`,exportAssets:e})}const D=g.join(h,"chunks");I.mkdirSync(D,{recursive:!0});const $=Ut();for(const V of Object.keys(t?.resources?.components??{}).filter(_=>p.includes(_))){const _=t.resources?.components?.[V]?.component;if(_&&_.renderer?.type==="react-component"){const G=_.renderer?.chunks??[];if(G?.length>0)for(const ie of G){const Ce=g.join(D,ie),ce=$?.[ie];try{ce&&I.existsSync(ce)&&!I.existsSync(Ce)&&I.copyFileSync(ce,Ce)}catch(Ke){f.logger.error(`copy chunk ${ie} error`,Ke.message)}}}}}return h}async function Oe(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=Ue(),await ut.x({file:t,C:a}));const o=X.globSync("**/.blocklet/pages/pages.config.yml",{cwd:a,absolute:!0}).at(0),i=o&&g.join(g.dirname(o),"../../pages"),l=o&&g.join(g.dirname(o),"../../components"),p=o&&g.join(g.dirname(o),"../../routes");if(!o)return null;const S=B.parse(I.readFileSync(o).toString()),A=(m,d,y)=>{let P=g.join(m,`${d}${y?`.${y}`:""}.yml`);return(!I.existsSync(P)||!I.lstatSync(P).isFile())&&(P=g.join(m,d,`index${y?`.${y}`:""}.yml`),!I.existsSync(P)||!I.lstatSync(P))?null:B.parse(I.readFileSync(P).toString())},v=(m,d)=>{try{const y=X.globSync(`*.${d}.yml`,{cwd:m,absolute:!0})[0];return y?B.parse(I.readFileSync(y).toString()):null}catch(y){f.logger.error("parse component error",y)}return null},E=(m,d)=>{let y=g.join(m,`${d}.yml`);return(!I.existsSync(y)||!I.lstatSync(y).isFile())&&(y=g.join(m,d,"index.yml"),!I.existsSync(y)||!I.lstatSync(y))?null:B.parse(I.readFileSync(y).toString())},u=R(S.pages.map(({slug:m})=>{const d=R(S.supportedLocales.map(({locale:j})=>{const r=i?A(i,te(m),j):void 0;if(r)return{locale:j,page:r};const b=i?A(i,m,j):void 0;return b&&{locale:j,page:b}})),y=d[0]?.page;if(!y)return null;const P=y.sections.map(Ze.unzipSection);return{id:y.id||Te.nextId(),createdAt:y.createdAt,updatedAt:y.updatedAt,publishedAt:y.publishedAt,isPublic:y.isPublic??!0,templateConfig:y.templateConfig,slug:m,sections:Object.fromEntries(P.map(j=>[j.id,j])),sectionIds:P.map(j=>j.id),locales:Object.fromEntries(d.map(({locale:j,page:r})=>[j,r.meta])),dataSource:y.dataSource?Object.fromEntries([...new Set(d.flatMap(({page:j})=>Object.keys(j.dataSource??{})))].map(j=>[j,Object.fromEntries(d.map(({locale:r,page:b})=>{const D=b.dataSource?.[j];return[r,D||{}]}))])):Object.fromEntries([...new Set(d.flatMap(({page:j})=>j.sections.map(r=>r.id)))].map(j=>[j,Object.fromEntries(d.map(({locale:r,page:b})=>{const D=b.dataSource?.[j];if(D)return[r,D];const $=b.sections.find(V=>V.id===j);return[r,$?.properties||{}]}))]))}})),c=R(S?.routes?.map(({path:m})=>{const d=p?E(p,te(m)):void 0;return{...d,id:d?.id||Te.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??{}}})??[]),h=l?R(S.components?.map(({id:m})=>v(l,m))??[]):[];if(e){const m=(...d)=>{f.logger.info(`[${n?g.basename(t):g.basename(g.join(t,"../../../../"))}] importAssets:`,...d)};try{m("wait image-bin api ready"),await ht.default({resources:[`${Ie.getComponentWebEndpoint(f.IMAGE_BIN_NAME)}/api/sdk/uploads`],validateStatus:P=>P>=200&&P<=500}),m("image-bin api is ready");const d={},y={};m("start to upload assets"),await Promise.allSettled([Re(h,d,{getFilePath:P=>l&&g.join(l,P),onFinish:P=>{m(`upload ${P.length} component assets`)}}),Re(u,y,{getFilePath:(P,j)=>{const r=Ee.default(u,j.slice(0,1));return i&&g.join(i,g.dirname(r.slug),P)},onFinish:P=>{m(`upload ${P.length} page assets`)}})]),m("upload assets done"),ye.clear(),global.gc&&global.gc()}catch(d){m("Error during asset import:",d)}}const T={};if(s){const m=o&&g.join(g.dirname(o),"../../resources/components"),d=R(S.resources?.components?.map(({id:y})=>v(m,y))??[]);d.length>0&&(T.components=Object.fromEntries(d.map((y,P)=>[y.id,{index:P,component:y}])))}return{supportedLocales:S.supportedLocales,pageIds:u.map(m=>m.id),components:Object.fromEntries(h.map((m,d)=>[m.id,{index:d,data:m}])),pages:Object.fromEntries(u.map(m=>[m.id,m])),config:S.config||{},resources:T,routeIds:c.map(m=>m.id),routes:Object.fromEntries(c.map(m=>[m.id,m])),dataSourceIds:[],dataSources:{}}}finally{n&&a&&I.rmSync(a,{force:!0,recursive:!0})}}async function Se(t,e,{routes:s,mergeMode:a="byUpdateTime",deleteRoutes:n=!1,publishMode:o=void 0}={}){try{o&&f.clearPreloadComponentsCacheByMode(o)}catch(E){f.logger.error("clear preload page cache error",{error:E})}const{pages:i,pageIds:l,routeIds:p,routes:S,supportedLocales:A}=t;if(o==="production"){let E=s??[],u=null;for(const c of p??[]){const h=S?.[c];if(h?.params&&h?.params.length>0&&h?.paramsOptions&&h?.paramsOptions.length>0){const T=Q.generateParamCombinations({basePath:h.path,params:h.params,routeId:h.id,paramsOptions:h.paramsOptions,currentIndex:0,currentParams:[],currentOptionIds:[],result:[]}),m=Object.fromEntries(T.map(d=>[`${c}-${d.paramOptionIds.join("-")}`,d]));u={...u||{},...m},s||(E=[...E,...T.map(d=>`${c}-${d.paramOptionIds.join("-")}`)])}else s||E.push(c)}f.logger.info("routeIds to be published: ",E);for(const c of E){let h=c;if(h.includes("-")){const[d]=h.split("-");h=d}const T=S?.[h];if(!T){const d=e.pageIds.indexOf(h);d!==-1&&n&&(e.pageIds.splice(d,1),delete e.pages[h]);for(const y of e.pageIds)y.includes(`${h}-`)&&(e.pageIds.splice(e.pageIds.indexOf(y),1),delete e.pages[y]);f.logger.info("delete main route page",h);continue}if(c.includes("-")&&!u?.[c]){const d=e.pageIds.indexOf(c);d!==-1&&n&&(e.pageIds.splice(d,1),delete e.pages[c]),f.logger.info("delete page",c);continue}if(!T.displayTemplateId){f.logger.info("no display template",c);continue}const m=i[T.displayTemplateId];if(!m){f.logger.info("no template page",c);continue}if(e.pageIds.includes(c)){if(f.logger.info("has need update page",c),a==="replace")e.pages[c]=ue({page:m,route:T,state:t,routeId:c,routePathInfo:u?.[c]}),f.logger.info("replace page",c);else if(a==="byUpdateTime"){const d=e.pages[T.id];(!d||T.updatedAt&&T.updatedAt>d.updatedAt)&&(e.pages[c]=ue({page:m,route:T,state:t,routeId:c,routePathInfo:u?.[c]}),f.logger.info("replace page by update time",c))}}else e.pageIds.push(c),e.pages[c]=ue({page:m,route:T,state:t,routeId:c,routePathInfo:u?.[c]}),f.logger.info("add page",c)}if(n&&!s)for(const c of e.pageIds)E?.includes(c)||(delete e.pages[c],f.logger.info("delete page",c)),e.pageIds=[...e.pageIds].filter(h=>E?.includes(h))}else{for(const E of l){const u=i[E];if(u)if(e.pageIds.includes(u.id)){if(a==="replace")e.pages[u.id]=u;else if(a==="byUpdateTime"){const c=e.pages[u.id];(!c||u.updatedAt&&u.updatedAt>c.updatedAt)&&(e.pages[u.id]=u)}}else e.pageIds.push(u.id),e.pages[u.id]=u}for(const E of p){const u=S[E];if(u)if(e.routeIds.includes(u.id)){if(a==="replace")e.routes[u.id]=u;else if(a==="byUpdateTime"){const c=e.routes[u.id];(!c||u.updatedAt&&u.updatedAt>c.updatedAt)&&(e.routes[u.id]=u)}}else e.routeIds.push(u.id),e.routes[u.id]=u}}if(e.supportedLocales.splice(0,e.supportedLocales.length),e.supportedLocales.push(...Le.default(A)),n)for(const E of Object.keys(e.components))delete e.components[E];let v=JSON.parse(JSON.stringify(t.components));v=Object.fromEntries(await Promise.all(Object.entries(v).map(async([E,u])=>{const c=await xe(u?.data);return[E,{...u,data:c}]}))),Object.assign(e.components,v),Object.assign(e.config,JSON.parse(JSON.stringify(t.config))),we.default(t.resources.components)||(e.resources.components=JSON.parse(JSON.stringify(t.resources.components||{})))}const xe=f.memoizeWithFs(async t=>{if(!we.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 f.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){f.logger.error("getPropertiesFromCode error",{componentId:t.id,name:t.name},{error:a})}}return t},{subdir:"getPropertiesFromCode"});let se,K,ne,oe;const Be=()=>Ie.getResources({types:[{did:Pe,type:ge},{did:bt,type:ge}]}),Ut=()=>{const t=Be(),e={};return t.forEach(s=>{const a=X.globSync("**/.blocklet/pages/pages.config.yml",{cwd:s.path,absolute:!0}).at(0),n=a&&g.join(g.dirname(a),"../../chunks");if(n&&I.existsSync(n)){const o=I.readdirSync(n);for(const i of o)e[i]=g.join(n,i)}}),e};function Ve(){return se=(async()=>{const t=Be();K=(await Promise.all(t.map(async s=>{const a=s.path?await Oe(s.path,{importAssets:!1}):void 0;return a?{blockletId:s.did,state:a,blockletTitle:s.title}:void 0}))).filter(s=>!!s),ne=K.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=K.reduce((s,a)=>Object.assign(s,Object.fromEntries(Object.values(a.state.components).map(n=>[n.data.id,{blockletId:a.blockletId,component:n.data}]))),{});oe=Object.fromEntries(await Promise.all(Object.entries(e).map(async([s,a])=>{const n=await xe(a.component);return[s,{...a,component:n}]})))})(),se}function Ge(t){const e=_e.default(async()=>{await Ve().catch(s=>{f.logger.error("load resource states error",{error:s})}),await t?.({states:K,pages:ne,components:oe})},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(me,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(me,e)}}const ze=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),Ye=Symbol.for("GLOBAL_ENV_UPDATE_LISTENER_KEY"),re=globalThis;re[ze]?.();re[ze]=Ge(async({pages:t,components:e})=>{const s=await O.getProjectIds();f.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=>{He({projectId:a,pages:t,components:e})}))]).catch(a=>{f.logger.error("update resource states failed:",a)})});re[Ye]?.();re[Ye]=()=>{const t=()=>{O.pageUrlMapCache.clear(),f.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)}};O.startPeriodicCheck();process.on("beforeExit",()=>{O.stopPeriodicCheck()});process.on("SIGINT",()=>{O.stopPeriodicCheck(),process.exit(0)});process.on("SIGTERM",()=>{O.stopPeriodicCheck(),process.exit(0)});async function He({projectId:t,pages:e,components:s}){const a=O.sharedInstances[t];if(!a){f.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 i=(await Ae.findAll({where:{projectId:t}})).map(p=>p.componentId),l=Object.fromEntries(Object.entries(s||{}).filter(([p])=>i.includes(p)));a.syncedStore.resources.components=l}f.logger.info(`update [${t}] resource states:`,{pages:Object.keys(a.syncedStore.resources.pages||{}).length,components:Object.keys(a.syncedStore.resources.components||{}).length})}async function Mt(t){return He({projectId:t,pages:ne,components:oe})}async function Nt(){f.logger.info("trigger reload all project resource"),w.default.events.emit(me)}async function $t({ensureLoaded:t=!0}={}){return t&&(se??=Ve(),await se),{states:K,pages:ne,components:oe}}exports.COMPONENT_DID=Pe;exports.PUBLISH_MODES=Lt;exports.Project=L;exports.RESOURCE_TYPE=ge;exports.SITE_STATE_PATH=q;exports.STATE_MODES=Rt;exports.SiteState=O;exports.downloadAsset=Ne;exports.downloadAssets=$e;exports.fromPackage=Oe;exports.getDefaultState=Me;exports.getResourceStates=$t;exports.initPackResourceStates=Ge;exports.mergeState=Se;exports.toPackage=qe;exports.triggerReloadAllProjectResource=Nt;exports.updateResourceStatesByProjectId=Mt;
|