@blocklet/pages-kit-inner-components 0.4.22 → 0.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,16 +6,17 @@ import "@blocklet/sdk/lib/config";
6
6
  import "lru-cache";
7
7
  import "node-fetch";
8
8
  import "ufo";
9
- import { C as S, G as _, b as E, c as d, f as i, h as l, g as N, e as O, a as P, d as c } from "./_chunks/components-CqR6z_0s.js";
9
+ import "crypto";
10
+ import { c as _, G as E, d as i, e as d, j as l, k as N, m as O, h as P, b as c, f as g } from "./_chunks/site-state-D28bWM8J.js";
10
11
  export {
11
- S as CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS,
12
- _ as GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS,
13
- E as clearPreloadComponentsCache,
12
+ _ as CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS,
13
+ E as GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS,
14
+ i as clearPreloadComponentsCache,
14
15
  d as clearPreloadComponentsCacheByMode,
15
- i as getComponentFromState,
16
- l as getComponentFromStateByName,
17
- N as getExportSchemaValueFromCode,
18
- O as getPreloadComponent,
19
- P as getPreloadComponents,
20
- c as getPreloadComponentsCacheKey
16
+ l as getComponentFromState,
17
+ N as getComponentFromStateByName,
18
+ O as getExportSchemaValueFromCode,
19
+ P as getPreloadComponent,
20
+ c as getPreloadComponents,
21
+ g as getPreloadComponentsCacheKey
21
22
  };
@@ -1,78 +1,78 @@
1
1
  import I from "vite-plugin-node-polyfills/shims/process";
2
- import { a as W, l as y } from "./_chunks/components-CqR6z_0s.js";
3
- import { initCronCrawlBlocklet as B, cancelCronCrawlBlocklet as N, initSEOMiddleware as J } from "@blocklet/crawler/middlewares";
4
- import { PreloadComponentScriptModule as G } from "@blocklet/pages-kit/types";
5
- import { injectPreloadComponents as K } from "@blocklet/pages-kit/utils/preload";
6
- import { getComponentMountPoint as Q } from "@blocklet/sdk/lib/component";
7
- import c, { getBlockletJs as z } from "@blocklet/sdk/lib/config";
2
+ import { b as W, l as P } from "./_chunks/site-state-D28bWM8J.js";
3
+ import { initCronCrawlBlocklet as N, cancelCronCrawlBlocklet as J, initSEOMiddleware as G } from "@blocklet/crawler/middlewares";
4
+ import { PreloadComponentScriptModule as K } from "@blocklet/pages-kit/types";
5
+ import { injectPreloadComponents as Q } from "@blocklet/pages-kit/utils/preload";
6
+ import { getComponentMountPoint as z } from "@blocklet/sdk/lib/component";
7
+ import a, { getBlockletJs as V } from "@blocklet/sdk/lib/config";
8
8
  import * as j from "cheerio";
9
- import { Router as V } from "express";
10
- import { readFileSync as M } from "fs";
11
- import X from "mustache";
12
- import { resolve as U } from "path";
13
- import { withQuery as Y, joinURL as Z } from "ufo";
14
- const F = ["/assets/"], D = () => [!0, "true"].includes(c.env.preferences.allowCrawler);
15
- function O() {
16
- D() ? B({
9
+ import { Router as X } from "express";
10
+ import { readFileSync as U } from "fs";
11
+ import Y from "mustache";
12
+ import { resolve as M } from "path";
13
+ import { withQuery as Z, joinURL as D } from "ufo";
14
+ const F = ["/assets/"], O = () => [!0, "true"].includes(a.env.preferences.allowCrawler);
15
+ function R() {
16
+ O() ? N({
17
17
  time: "30 30 */12 * * *",
18
18
  options: {}
19
- }) : N();
19
+ }) : J();
20
20
  }
21
- O();
22
- c.events.on(c.Events.envUpdate, O);
23
- function he({
24
- app: p,
25
- viteDevServer: E,
21
+ R();
22
+ a.events.on(a.Events.envUpdate, R);
23
+ function ue({
24
+ app: i,
25
+ viteDevServer: u,
26
26
  // projectId,
27
- state: t
27
+ state: n
28
28
  }) {
29
- let g;
30
- if (E) {
31
- const o = M(U(I.cwd(), "./index.html"), "utf-8");
32
- p.use(async (k, T, _) => {
33
- const P = k.originalUrl;
34
- g = await E.transformIndexHtml(P, o), _();
29
+ let C;
30
+ if (u) {
31
+ const t = U(M(I.cwd(), "./index.html"), "utf-8");
32
+ i.use(async (b, $, y) => {
33
+ const _ = b.originalUrl;
34
+ C = await u.transformIndexHtml(_, t), y();
35
35
  });
36
36
  } else
37
- g = M(U(I.env.BLOCKLET_APP_DIR, "dist/index.html"), "utf-8");
38
- const C = V();
39
- C.use(
40
- J({
37
+ C = U(M(I.env.BLOCKLET_APP_DIR, "dist/index.html"), "utf-8");
38
+ const k = X();
39
+ k.use(
40
+ G({
41
41
  autoReturnHtml: !1,
42
- allowCrawler: D
42
+ allowCrawler: O
43
43
  })
44
- ), C.get("/:path(*)?", async (o, k, T) => {
45
- var S, b, L;
46
- if (F.some((n) => o.path.startsWith(n))) {
47
- T();
44
+ ), k.get("/:path(*)?", async (t, b, $) => {
45
+ var T, S, L;
46
+ if (F.some((r) => t.path.startsWith(r))) {
47
+ $();
48
48
  return;
49
49
  }
50
- const _ = performance.now(), P = () => Math.round(performance.now() - _), R = "production";
51
- let r, m, w = g;
52
- if (o.path.startsWith("/pages")) {
53
- const n = o.params.lang, h = o.cookies.nf_lang, u = /* @__PURE__ */ new Set([...c.env.languages.map((a) => a.code)]);
54
- let s = (n && u.has(n) ? n : void 0) || (u.has(h) ? h : void 0) || [...u][0];
55
- if ((!s || !((S = t.supportedLocales) != null && S.find((a) => a.locale === s))) && (s = ((L = (b = t.supportedLocales) == null ? void 0 : b[0]) == null ? void 0 : L.locale) || ""), s) {
56
- const a = [];
57
- Object.values(t.pages).forEach((i) => {
58
- const v = Object.values((i == null ? void 0 : i.sections) ?? {}).filter(
59
- (l) => {
60
- var f;
61
- return l.component === "custom-component" && ((f = l.config) == null ? void 0 : f.componentId);
50
+ const y = performance.now(), _ = () => Math.round(performance.now() - y), x = "production";
51
+ let e, p, h = C;
52
+ if (t.path.startsWith("/pages")) {
53
+ const r = t.params.lang, f = t.cookies.nf_lang, g = /* @__PURE__ */ new Set([...a.env.languages.map((d) => d.code)]);
54
+ let m = (r && g.has(r) ? r : void 0) || (g.has(f) ? f : void 0) || [...g][0];
55
+ if ((!m || !((T = n.supportedLocales) != null && T.find((d) => d.locale === m))) && (m = ((L = (S = n.supportedLocales) == null ? void 0 : S[0]) == null ? void 0 : L.locale) || ""), m) {
56
+ const d = [];
57
+ Object.values(n.pages).forEach((l) => {
58
+ const v = Object.values((l == null ? void 0 : l.sections) ?? {}).filter(
59
+ (s) => {
60
+ var w;
61
+ return s.component === "custom-component" && ((w = s.config) == null ? void 0 : w.componentId);
62
62
  }
63
- ).map((l) => {
64
- var f, A;
63
+ ).map((s) => {
64
+ var w, A;
65
65
  return {
66
- id: l.id,
67
- componentId: l.config.componentId,
68
- useCache: l.config.useCache,
69
- cacheDuration: l.config.cacheDuration,
70
- properties: (A = (f = l.locales) == null ? void 0 : f[s]) == null ? void 0 : A.properties
66
+ id: s.id,
67
+ componentId: s.config.componentId,
68
+ useCache: s.config.useCache,
69
+ cacheDuration: s.config.cacheDuration,
70
+ properties: (A = (w = s.locales) == null ? void 0 : w[m]) == null ? void 0 : A.properties
71
71
  };
72
72
  });
73
- a.push(...v);
73
+ d.push(...v);
74
74
  });
75
- const H = new Promise((i, v) => {
75
+ const H = new Promise((l, v) => {
76
76
  setTimeout(() => {
77
77
  v(new Error("getPreloadComponents timeout in promise race, skip it"));
78
78
  }, 90 * 1e3);
@@ -81,42 +81,43 @@ function he({
81
81
  await Promise.race([
82
82
  H,
83
83
  W({
84
- mode: R,
85
- req: o,
86
- state: t,
87
- locale: s,
88
- instances: a,
89
- module: G.UMD_FN
90
- }).then((i) => {
91
- i && (m = K(i));
84
+ mode: x,
85
+ req: t,
86
+ state: n,
87
+ locale: m,
88
+ instances: d,
89
+ module: K.UMD_FN
90
+ }).then((l) => {
91
+ l && (p = Q(l));
92
92
  })
93
93
  ]);
94
- } catch (i) {
95
- y.warn("getPreloadComponents timeout in promise race, skip inject html elements"), y.warn(i);
94
+ } catch (l) {
95
+ P.warn("getPreloadComponents timeout in promise race, skip inject html elements"), P.warn(l);
96
96
  }
97
97
  }
98
98
  }
99
99
  try {
100
- const n = (r == null ? void 0 : r.title) || c.env.appName, h = (r == null ? void 0 : r.description) || c.env.appDescription, u = Y(Z(c.env.appUrl, "/.well-known/service/blocklet/og.png"), {
101
- title: n,
102
- description: h
100
+ const r = (e == null ? void 0 : e.title) || a.env.appName, f = (e == null ? void 0 : e.description) || a.env.appDescription, g = Z(D(a.env.appUrl, "/.well-known/service/blocklet/og.png"), {
101
+ title: r,
102
+ description: f
103
103
  });
104
- w = X.render(g, {
105
- ogTitle: n,
106
- ogDescription: h,
107
- ogImage: q(r == null ? void 0 : r.image) || u,
108
- pagesPublishedAt: (t == null ? void 0 : t.config.publishedAt) || (/* @__PURE__ */ new Date()).getTime()
104
+ h = Y.render(C, {
105
+ ogTitle: r,
106
+ ogDescription: f,
107
+ ogImage: q(e == null ? void 0 : e.image) || g,
108
+ pagesPublishedAt: (n == null ? void 0 : n.config.publishedAt) || (/* @__PURE__ */ new Date()).getTime()
109
109
  });
110
110
  } catch {
111
111
  }
112
- const e = t == null ? void 0 : t.config.fontFamily, x = o.query.mode === "draft" || o.url.includes("preview"), d = j.load(w);
113
- d("head").find("#injected-head-elements").replaceWith(`
114
-
115
- ${e != null && e.title ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${e.title}&display=swap">` : ""}
116
- ${e != null && e.description && (e == null ? void 0 : e.description) !== (e == null ? void 0 : e.title) ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${e.description}&display=swap">` : ""}
112
+ const o = n == null ? void 0 : n.config.fontFamily, B = t.query.mode === "draft" || t.url.includes("preview");
113
+ let c = j.load(h);
114
+ c("head").find("#injected-head-elements").replaceWith(`
115
+ ${e != null && e.backgroundColor ? `<meta name="theme-color" content="${e.backgroundColor}" /><style>html,body,#app {background-color: ${e.backgroundColor} !important;}</style>` : ""}
116
+ ${o != null && o.title ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${o.title}&display=swap">` : ""}
117
+ ${o != null && o.description && (o == null ? void 0 : o.description) !== (o == null ? void 0 : o.title) ? `<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=${o.description}&display=swap">` : ""}
117
118
  <script>
118
119
 
119
- window.__PAGE_STATE__ = ${JSON.stringify(t)}
120
+ window.__PAGE_STATE__ = ${JSON.stringify(n)}
120
121
 
121
122
  document.querySelectorAll('link[rel="preload"][as="style"]').forEach(function (link) {
122
123
  const l = document.createElement('link');
@@ -126,24 +127,25 @@ function he({
126
127
  });
127
128
  <\/script>
128
129
 
129
- ${x ? `<script src="https://cdn.tailwindcss.com"><\/script>
130
+ ${B ? `<script src="https://cdn.tailwindcss.com"><\/script>
130
131
  <script>
131
132
  window.tailwind.config = {
132
133
  darkMode: "class",
133
134
  };
134
135
  <\/script>` : ""}
135
136
  `);
136
- const $ = z();
137
- if ($ && d('script[src="__blocklet__.js"]').replaceWith(`<script>${$}<\/script>`), m != null && m.html && d("head").find("#injected-html-elements").replaceWith(m.html), o.cachedHtml) {
138
- const n = j.load(o.cachedHtml);
139
- d("body").html(n("body").html() || "");
137
+ const E = V();
138
+ if (E && c('script[src="__blocklet__.js"]').replaceWith(`<script>${E}<\/script>`), p != null && p.html && c("head").find("#injected-html-elements").replaceWith(p.html), t.cachedHtml) {
139
+ const r = j.load(t.cachedHtml);
140
+ c("body").html(r("body").html() || "");
140
141
  }
141
- w = d.html(), k.send(w), y.info(`[html] render: ${o.path}, ${P()}ms`);
142
- }), p.use(C);
142
+ h = c.html(), b.send(h), P.info(`[html] render: ${t.path}, ${_()}ms`), c.root().children().remove(), c = null, c = null, h = null, e = null, p = null;
143
+ }), i.use(k);
143
144
  }
144
- function q(p) {
145
- return Q("image-bin"), p;
145
+ function q(i) {
146
+ const u = z("image-bin");
147
+ return u && i && !/^(https?:\/\/|\/)/.test(i) ? a.env.appUrl + D(u, "uploads", i) : i;
146
148
  }
147
149
  export {
148
- he as default
150
+ ue as default
149
151
  };
@@ -1,5 +1,4 @@
1
- import { P as S, i as b, g as M, C as J, R as X, S as x, t as W, a as G } from "./_chunks/site-state-Bvk8uNN5.js";
2
- import { l as N } from "./_chunks/components-CqR6z_0s.js";
1
+ import { P as S, i as b, g as M, l as x, C as J, R as X, S as N, t as W, a as G } from "./_chunks/site-state-D28bWM8J.js";
3
2
  import { AsyncLocalStorage as K } from "async_hooks";
4
3
  import { Router as Y } from "express";
5
4
  import d from "fs";
@@ -29,7 +28,7 @@ const Q = async (e, t, o) => {
29
28
  return t == null ? void 0 : t.status(403).json({ error: "No permission to access this project in single-tenant mode" });
30
29
  e.project = m, e.projectId = a, o();
31
30
  } catch (a) {
32
- N.error("Project middleware error:", a), t == null || t.status(500).json({ error: "Internal server error" });
31
+ x.error("Project middleware error:", a), t == null || t.status(500).json({ error: "Internal server error" });
33
32
  }
34
33
  };
35
34
  function T(e, t) {
@@ -69,7 +68,7 @@ const h = (e, t, o) => b() ? D()(e, t, o) : D({ roles: ["owner", "admin", "pages
69
68
  return {};
70
69
  };
71
70
  async function A(e) {
72
- const t = await x.shared(e).getState("production"), o = await S.findByPk(e), n = t.pageIds.map((r) => {
71
+ const t = await N.shared(e).getState("production"), o = await S.findByPk(e), n = t.pageIds.map((r) => {
73
72
  const i = t.pages[r];
74
73
  if (i)
75
74
  return { id: k({ pageId: r, projectId: e }), name: i.slug };
@@ -135,7 +134,7 @@ O.post("/resources", h, async (e, t) => {
135
134
  const m = _(i, "projectId"), y = _(a, "projectId"), w = /* @__PURE__ */ new Set([...Object.keys(m), ...Object.keys(y)]), P = Z(n, s);
136
135
  d.rmSync(P, { recursive: !0, force: !0 }), d.mkdirSync(P, { recursive: !0 });
137
136
  for (const c of w) {
138
- const l = await x.shared(c).getState(r), f = m[c], u = y[c], p = f == null ? void 0 : f.map((j) => j.pageId), R = u == null ? void 0 : u.map((j) => j.componentId);
137
+ const l = await N.shared(c).getState(r), f = m[c], u = y[c], p = f == null ? void 0 : f.map((j) => j.pageId), R = u == null ? void 0 : u.map((j) => j.componentId);
139
138
  if (p != null && p.length || R != null && R.length) {
140
139
  const j = await W(l, {
141
140
  exportAssets: !0,
@@ -144,7 +143,7 @@ O.post("/resources", h, async (e, t) => {
144
143
  });
145
144
  await V(j, P), d.rmSync(j, { recursive: !0, force: !0 });
146
145
  }
147
- N.info(`Exported resources for project ${c}`, {
146
+ x.info(`Exported resources for project ${c}`, {
148
147
  pageIds: p,
149
148
  componentIds: R
150
149
  });
@@ -1,12 +1,12 @@
1
1
  import "vite-plugin-node-polyfills/shims/process";
2
2
  import "vite-plugin-node-polyfills/shims/global";
3
- import "./_chunks/components-CqR6z_0s.js";
4
- import { d as H, b as M, c as O, S as b, f as h, a as j, e as B, m as L, n as U, t as q, h as v } from "./_chunks/site-state-Bvk8uNN5.js";
3
+ import { q as H, o as M, p as O, S as j, r as q, a as v, u as B, s as L, n as U, t as b, v as h } from "./_chunks/site-state-D28bWM8J.js";
5
4
  import "@blocklet/quickjs";
6
5
  import "@blocklet/sdk/lib/component";
7
6
  import "@blocklet/sdk/lib/config";
8
7
  import "@reactivedata/reactive";
9
8
  import "@syncedstore/core";
9
+ import "crypto";
10
10
  import "fs";
11
11
  import "glob";
12
12
  import "lib0/decoding";
@@ -28,12 +28,12 @@ export {
28
28
  H as PUBLISH_MODES,
29
29
  M as SITE_STATE_PATH,
30
30
  O as STATE_MODES,
31
- b as default,
32
- h as fromPackage,
33
- j as getResourceStates,
31
+ j as default,
32
+ q as fromPackage,
33
+ v as getResourceStates,
34
34
  B as initPackResourceStates,
35
35
  L as mergeState,
36
36
  U as nextId,
37
- q as toPackage,
38
- v as triggerReloadAllProjectResource
37
+ b as toPackage,
38
+ h as triggerReloadAllProjectResource
39
39
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blocklet/pages-kit-inner-components",
3
- "version": "0.4.22",
3
+ "version": "0.4.24",
4
4
  "description": "Pages Kit inner components library",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -73,7 +73,7 @@
73
73
  "@blocklet/ai-kit": "^0.1.71",
74
74
  "@blocklet/ai-runtime": "^0.4.249",
75
75
  "@blocklet/code-editor": "^0.4.249",
76
- "@blocklet/crawler": "^2.1.191",
76
+ "@blocklet/crawler": "^2.1.193",
77
77
  "@blocklet/embed": "^0.2.3",
78
78
  "@blocklet/js-sdk": "^1.16.39",
79
79
  "@blocklet/logger": "1.16.36",
@@ -202,8 +202,8 @@
202
202
  "yaml": "^2.5.0",
203
203
  "yjs": "^13.6.18",
204
204
  "zustand": "^4.5.5",
205
- "@blocklet/pages-kit": "^0.4.22",
206
- "@blocklet/pages-kit-block-studio": "^0.4.22"
205
+ "@blocklet/pages-kit-block-studio": "^0.4.24",
206
+ "@blocklet/pages-kit": "^0.4.24"
207
207
  },
208
208
  "devDependencies": {
209
209
  "@trivago/prettier-plugin-sort-imports": "^5.2.1",
@@ -1,48 +0,0 @@
1
- "use strict";const q=require("@blocklet/pages-kit/builtin/utils"),b=require("@blocklet/pages-kit/types"),O=require("@blocklet/pages-kit/utils/property"),S=require("@blocklet/quickjs"),F=require("@blocklet/sdk/lib/config"),B=require("lru-cache"),R=require("node-fetch"),h=require("ufo"),J=require("@blocklet/logger"),K=require("vite-plugin-node-polyfills/shims/buffer"),Q=require("@blocklet/pages-kit/utils/builtin"),M=require("@blocklet/pages-kit/utils/typescript/builtin-module-transformer"),A=require("@blocklet/sdk/lib/component"),G=require("autoprefixer"),V=require("esbuild"),W=require("postcss"),H=require("tailwindcss"),z=require("typescript"),C=e=>e&&e.__esModule?e:{default:e};function X(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const I=C(F),Y=C(R),Z=C(J),ee=C(K),te=C(G),oe=X(V),ne=C(W),re=C(H),m=C(z),g=Z.default("pages-kit"),se=async(e,{componentId:t})=>{const o=`@tailwind components;
2
- @tailwind utilities;
3
- `,n=`.CustomComponent_${t}`;return(await ne.default([re.default({content:[{raw:e,extension:"tsx"}]}),te.default({overrideBrowserslist:["> 1%","last 2 versions"],stats:{}}),i=>{i.walkRules(r=>{r.selectors=r.selectors.map(c=>c.replace(/\.(.+)/g,`${n}.$1,${n} .$1`))})}]).process(o)).css},ce=async(e,{componentId:t})=>{const o=await se(e,{componentId:t});return`export const __PagesKit_CSS__ = ${JSON.stringify(o)};
4
-
5
- ${e}
6
- `},N=S.memoize(async(e,t)=>{let o=m.default.transpileModule(e,{compilerOptions:{jsx:m.default.JsxEmit.React,target:m.default.ScriptTarget.ES2016,module:m.default.ModuleKind.ESNext},transformers:{before:[M.createBuiltinModuleTransformer(m.default)]}}).outputText;if(t.tailwind&&(o=await ce(o,{componentId:t.componentId})),t.module===b.PreloadComponentScriptModule.ESM)return o;const n=m.default.transpileModule(o,{compilerOptions:{jsx:m.default.JsxEmit.React,target:m.default.ScriptTarget.ES2016,module:m.default.ModuleKind.CommonJS,moduleResolution:m.default.ModuleResolutionKind.Node16}}).outputText;return t.module===b.PreloadComponentScriptModule.CJS?n:ie(t.moduleName,n)},{keyGenerator:(e,t)=>JSON.stringify(["transpileModule",e,t])}),ae=async(e,t)=>{var r,c;const n=(c=(r=(await oe.build({entryPoints:["index.tsx"],external:Object.keys(Q.BuiltinModules),format:"esm",target:"esnext",bundle:!0,write:!1,plugins:[{name:"vfs",setup(d){d.onResolve({filter:/.*/},s=>s.path==="index.tsx"?{path:"index.tsx",namespace:"vfs"}:s.path==="./component"?{path:"component.tsx",namespace:"vfs"}:M.isRelativeModule(s.path)?{path:s.path,namespace:"vfs"}:null),d.onLoad({filter:/.*/,namespace:"vfs"},async s=>{if(s.path==="index.tsx")return{contents:`export { ${t} } from './component'`,loader:"tsx"};if(s.path==="component.tsx")return{contents:e,loader:"tsx"};if(M.isRelativeModule(s.path)){const l=s.path.split("/").pop(),f=h.joinURL("chunks",l),{data:x}=await A.call({name:"pages-kit",method:"GET",path:f});return{contents:x,loader:"js"}}return null})}}]})).outputFiles)==null?void 0:r[0])==null?void 0:c.contents;if(!n)throw new Error("Failed to build server code");const a=ee.default.from(n).toString();return m.default.transpileModule(a,{compilerOptions:{module:m.default.ModuleKind.ESNext,target:m.default.ScriptTarget.ES2020}}).outputText},k=S.memoize(async(e,t)=>{const o=await ae(e,t);return new RegExp(`export\\s+\\{\\s+${t}\\s+\\}`,"m").test(o)?o:void 0},{keyGenerator:(e,t)=>JSON.stringify(["extractExportValueSchema",e,t])}),ie=(e,t)=>{const o=/\bawait\b/.test(t);return`// GENERATED FILE. DO NOT EDIT.
7
- var ${e} = ${o?"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
- `},_=new B.LRUCache({max:100}),U=60*60,j=60;function $(e){g.info("clear preload components cache",{cacheKey:e}),_.delete(e)}function pe(e){for(const t of _.keys())t.includes(e)&&(g.info("clear preload components cache",{cacheKey:t}),$(t))}function v({mode:e,instanceId:t,componentId:o,locale:n}){return["getPreloadComponents",e,t,o,n].join("-")}async function le({mode:e,req:t,state:o,locale:n,instances:a,module:i}){const{supportedLocales:r,config:{defaultLocale:c}}=o;if(!c)return null;const d=(await Promise.all(a.map(async p=>{try{const u=v({mode:e,instanceId:p.id,componentId:p.componentId,locale:n});if(e!=="draft"&&p.useCache&&_.has(u))return g.info(`get preload component from cache: ${u}`),_.get(u);const y=w({state:o,componentId:p.componentId});if(!y)return null;const E=await L({req:t,state:o,componentId:y.id,locale:n,defaultLocale:c,properties:p.properties});if(!E)return null;const T={instanceId:p.id,preload:E};if(e!=="draft"&&p.useCache){let P=U;p.cacheDuration&&(P=p.cacheDuration),g.info(`set preload component to cache(${P}s): ${u}`),_.set(u,T,{ttl:P*1e3})}return T}catch(u){return g.error("get preload component error",{instanceId:p.id,componentId:p.componentId},{error:u}),null}}))).filter(p=>!!p),s=Object.values(d.reduce((p,u)=>({...p,...u.preload.components}),{}));async function l(){const p=await Promise.all(s.map(async u=>{const y=O.componentUMDName({componentId:u.component.id}),E=i===b.PreloadComponentScriptModule.ESM?{module:i,script:await N(u.script,{componentId:u.component.id,module:i,tailwind:e!=="draft"})}:{module:i,script:await N(u.script,{componentId:u.component.id,module:i,moduleName:y,tailwind:e!=="draft"}),moduleName:y};return[u.component.id,{component:u.component,script:E}]}));return Object.fromEntries(p)}const f=await l();return{config:{defaultLocale:c,supportedLocales:r},components:f,instances:d.map(p=>({id:p.instanceId,componentId:p.preload.component.id,locales:{[p.preload.locale]:{props:p.preload.props}}}))}}async function L({req:e,state:t,componentId:o,locale:n,defaultLocale:a,properties:i}){const{supportedLocales:r}=t,c=w({state:t,componentId:o});if(!c)return null;const d=r.some(l=>l.locale===n)?n:a;if(!d)return null;const s=await D({req:e,state:t,componentId:o,locale:d,defaultLocale:a,properties:i});return s?{component:c,...s}:null}const ue=20;async function D({req:e,depth:t=0,state:o,componentId:n,locale:a,defaultLocale:i,properties:r}){if(t>ue)throw new RangeError("max component depth exceeded");const c=de({state:o,componentId:n,properties:r,locale:a});if(!c)return null;const{props:d}=c,s={locale:a||i,components:{[c.component.id]:{component:c.component,script:c.script}},props:{...d}};try{const l=await fe({...c,req:e});l!=null&&l.props&&Object.assign(s.props,l.props)}catch(l){g.error("preload data at server side error",{componentId:n,name:c.component.name},{error:l})}return await Promise.all(Object.entries(d).map(async([l,f])=>{if((f==null?void 0:f.type)===O.RenderNestedComponent){const x=await D({req:e,depth:t+1,state:o,componentId:f.componentId,locale:a,defaultLocale:i,properties:f.properties});x&&(Object.assign(s.components,x.components),Object.assign(s.props,{[l]:{type:O.RenderNestedComponent,componentId:f.componentId,props:x.props}}))}})),s}function de({state:e,componentId:t,locale:o,properties:n}){const a=w({state:e,componentId:t});if(!a)return null;const i=O.mergeComponent({componentId:t,getComponent:r=>w({state:e,componentId:r}),locale:o,defaultLocale:e.config.defaultLocale,properties:n});return i?{component:a,script:i.script,props:{locale:o,...i.properties}}:null}function w({state:e,componentId:t}){var o,n,a;return((o=e.components[t])==null?void 0:o.data)??((a=(n=e.resources.components)==null?void 0:n[t])==null?void 0:a.component)}function me({state:e,name:t}){var n,a;const o=t.toLowerCase();return((n=Object.values(e.components).find(i=>{var r;return((r=i.data.name)==null?void 0:r.toLowerCase())===o}))==null?void 0:n.data)??((a=e.resources.components&&Object.values(e.resources.components).find(i=>{var r;return((r=i.component.name)==null?void 0:r.toLowerCase())===o}))==null?void 0:a.component)}async function fe({component:e,script:t,props:o,req:n}){const a=await k(t,"getServerSideProps");if(!a)return null;const i=new Promise((r,c)=>{setTimeout(()=>c(new Error("getServerSideProps timeout in promise race")),j*1e3)});return Promise.race([i,S.Sandbox.callFunction({code:`${a}
33
-
34
- export async function getServerSidePropsWrapper({ location, fetch, props}) {
35
- globalThis.location = location
36
- globalThis.fetch = fetch
37
-
38
- return getServerSideProps(props);
39
- }
40
- `,filename:`${e.name||e.id}.js`,moduleLoader:r=>{if(r==="@blocklet/pages-kit/builtin/utils")return`const { joinURL, withQuery, getQuery, getComponentMountPoint } = globalThis
41
- export { joinURL, withQuery, getQuery, getComponentMountPoint }
42
- `;if(r==="@blocklet/pages-kit/builtin/dayjs")return S.BuiltinModules.dayjs},global:{console:{log:(...r)=>{g.info(...r)},warn:(...r)=>{g.warn(...r)},error:(...r)=>{g.error(...r)}},getComponentMountPoint:q.getComponentMountPoint,joinURL:h.joinURL,withQuery:h.withQuery,getQuery:h.getQuery},functionName:"getServerSidePropsWrapper",args:[{location:{href:h.joinURL(h.withHttps(n.hostname),n.originalUrl)},fetch:(r,{...c}={})=>{const d=typeof r=="string"&&r.startsWith("/")?h.joinURL(I.default.env.appUrl,r):r;if(typeof d=="string"&&h.parseURL(d).host===h.parseURL(I.default.env.appUrl).host){const s=n.get("cookie");if(s){const l=new R.Headers(c.headers);l.set("cookie",s),c.headers=l}}return Y.default(d,{...c,timeout:j*1e3}).then(s=>({ok:s.ok,status:s.status,statusText:s.statusText,headers:Object.fromEntries(s.headers.entries()),json:()=>s.json()}))},props:o}]})])}const ge=S.memoize(async(e,t,o)=>{const n=await k(e,t);return n?await S.Sandbox.callFunction({code:`
43
- ${n}
44
-
45
- export function get${t}SchemaWrapper() {
46
- return ${t};
47
- }
48
- `,filename:`${o}.js`,functionName:`get${t}SchemaWrapper`}):null},{keyGenerator:(e,t,o)=>JSON.stringify(["getExportSchemaValueFromCode",e,t,o])});exports.CUSTOM_COMPONENT_CACHE_DURATION_IN_SECONDS=U;exports.GET_SERVER_SIDE_PROPS_TIMEOUT_IN_SECONDS=j;exports.clearPreloadComponentsCache=$;exports.clearPreloadComponentsCacheByMode=pe;exports.getComponentFromState=w;exports.getComponentFromStateByName=me;exports.getExportSchemaValueFromCode=ge;exports.getPreloadComponent=L;exports.getPreloadComponents=le;exports.getPreloadComponentsCacheKey=v;exports.logger=g;
@@ -1 +0,0 @@
1
- "use strict";const Ne=require("vite-plugin-node-polyfills/shims/process"),Fe=require("vite-plugin-node-polyfills/shims/global"),O=require("./components-paCr_hhD.js"),qe=require("@blocklet/quickjs"),de=require("@blocklet/sdk/lib/component"),Me=require("@blocklet/sdk/lib/config"),xe=require("@reactivedata/reactive"),H=require("@syncedstore/core"),y=require("fs"),oe=require("glob"),Be=require("lib0/decoding"),Ve=require("lib0/encoding"),_=require("lodash"),ve=require("lru-cache"),$e=require("nanoid"),Ge=require("p-limit"),f=require("path"),Je=require("stream/promises"),Ye=require("tar"),B=require("ufo"),ze=require("wait-on"),x=require("y-protocols/awareness"),se=require("y-protocols/sync"),He=require("yaml"),Ke=require("yjs"),We=require("lodash/isNil"),T=require("sequelize");require("sqlite3");const F=t=>t&&t.__esModule?t:{default:t};function ee(t){if(t&&t.__esModule)return t;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const n=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(s,e,n.get?n:{enumerable:!0,get:()=>t[e]})}}return s.default=t,Object.freeze(s)}const X=F(Ne),we=F(Fe),S=F(Me),ne=ee(Be),j=ee(Ve),Xe=F(Ge),Qe=F(f),Ze=F(ze),$=ee(He),M=ee(Ke),et=F(We);S.default.env.mode;const tt="image-bin";S.default.env.INIT_TEMPLATE_PATH;const st=X.default.env.DATABASE_URL||Qe.default.join(S.default.env.dataDir,"db/pages-kit.db"),Ee=S.default,nt=()=>S.default.env.tenantMode==="multiple",at=()=>{var t;return(et.default(Ee.env.preferences.multiTenantAllProjectAccessPassports)?[]:(t=Ee.env.preferences.multiTenantAllProjectAccessPassports)==null?void 0:t.split(","))||[]},rt=T.DataTypes.sqlite.DATE.parse;T.DataTypes.sqlite.DATE.parse=(t,s)=>typeof t=="number"?new Date(t):rt(t,s);const z=new T.Sequelize({dialect:"sqlite",storage:st,benchmark:X.default.env.ENABLE_SEQUELIZE_BENCHMARK==="true",retry:{match:[/SQLITE_BUSY/],name:"query",max:10},logging:X.default.env.ENABLE_SEQUELIZE_LOGGING==="true"?console.log:!1});z.query("pragma journal_mode = WAL;");z.query("pragma synchronous = normal;");z.query("pragma journal_size_limit = 67108864;");class te extends T.Model{}te.init({id:{type:T.DataTypes.UUID,allowNull:!1,primaryKey:!0,defaultValue:T.DataTypes.UUIDV4},projectId:{type:T.DataTypes.UUID,allowNull:!1},componentId:{type:T.DataTypes.STRING,allowNull:!1}},{sequelize:z,tableName:"ProjectComponents",timestamps:!1});class C extends T.Model{static async getProjectByIdOrSlug(s){return C.findOne({where:{[T.Op.or]:[{id:s},{slug:s}]}})}}C.init({id:{type:T.DataTypes.UUID,defaultValue:T.DataTypes.UUIDV4,primaryKey:!0},name:{type:T.DataTypes.STRING,allowNull:!1},description:T.DataTypes.TEXT,createdAt:T.DataTypes.DATE,updatedAt:T.DataTypes.DATE,createdBy:{type:T.DataTypes.STRING,allowNull:!1},updatedBy:{type:T.DataTypes.STRING,allowNull:!1},slug:T.DataTypes.STRING,icon:T.DataTypes.STRING,pinnedAt:T.DataTypes.DATE,useAllResources:T.DataTypes.BOOLEAN,relatedBlocklets:{type:T.DataTypes.JSON,allowNull:!1,defaultValue:{},get(){return this.getDataValue("relatedBlocklets")||{}},set(t){this.setDataValue("relatedBlocklets",JSON.stringify(t||{}))}}},{sequelize:z,paranoid:!0});C.hasMany(te,{foreignKey:"projectId",as:"components"});const ot="z8iZiDFg3vkkrPwsiba1TLXy3H9XHzFERsP8o",ie="page",ce="trigger-reload-project-resource",fe=ot,it="z2qa7rr3eUyVnWp2PCxEVARuUfLFh6cE5V2xV",{uploadToMediaKit:ct}=require("@blocklet/uploader-server"),le=$e.customAlphabet("abcdefghijklmnopqrstuvwxyz0123456789",16),ge=/^\w+(\w|-|\.)+\w+\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm)$/,G=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/i,be=/mediakit:\/\/([a-f0-9]{32}\.(jpe?g|png|gif|svg|bmp|webp|mp4|m4v|webm))/gi,lt=1e4,pt=3e4,K=0,ae=1,ut=0,dt=1,pe=S.default,V=f.join(X.default.env.BLOCKLET_DATA_DIR,"site-state"),ft=["production","draft"],gt=["production"];function Ie(t){return(t==null?void 0:t.replace(/\//g,"|"))||""}function mt(){var e;const t=pe.env.languages.map(n=>({locale:n.code,name:n.name})),s=(e=t[0])==null?void 0:e.locale;return{pageIds:[],pages:{},components:{},supportedLocales:t,config:{defaultLocale:s},resources:{}}}const U=class U extends M.Doc{constructor(s){super(),this.options=s,this.states={},this.conns=new Map,this.awarenessChangeHandler=({added:e,updated:n,removed:a},o)=>{const l=e.concat(n,a);if(o!==null){const c=this.conns.get(o);c&&(e.forEach(g=>{c.add(g)}),a.forEach(g=>{c.delete(g)}))}const i=j.createEncoder();j.writeVarUint(i,ae),j.writeVarUint8Array(i,x.encodeAwarenessUpdate(this.awareness,l));const r=j.toUint8Array(i);this.conns.forEach((c,g)=>this.send(g,r))},this.updateHandler=e=>{const n=j.createEncoder();j.writeVarUint(n,K),se.writeUpdate(n,e);const a=j.toUint8Array(n);this.conns.forEach((o,l)=>this.send(l,a))},this.ensureDataStructure=()=>{var l;const{supportedLocales:e,pages:n,pageIds:a,config:o}=this.syncedStore;{const i=new Set(Object.keys(n));let r=0;for(;r<a.length;){const c=a[r];i.has(c)?(i.delete(c),r++):a.splice(r,1)}}e.splice(0,e.length),e.push(...pe.env.languages.map(i=>({locale:i.code,name:i.name}))),o.defaultLocale=(l=e[0])==null?void 0:l.locale;{let i=0;const r=new Set;for(;i<e.length;){const{locale:c}=e[i];r.has(c)?e.splice(i,1):(i++,r.add(c))}}},this.send=(e,n)=>{e.readyState!==ut&&e.readyState!==dt&&this.closeConn(e);try{e.send(n,a=>{a&&this.closeConn(e)})}catch{this.closeConn(e)}},this.closeConn=e=>{if(e.removeAllListeners(),this.conns.has(e)){const n=this.conns.get(e);this.conns.delete(e),n&&x.removeAwarenessStates(this.awareness,Array.from(n),null)}e.close()},this.autoSave=_.debounce(()=>{y.mkdirSync(f.dirname(this.draftYjsFilePath),{recursive:!0}),y.writeFileSync(this.draftYjsFilePath,M.encodeStateAsUpdate(this))},lt),this.save=({flush:e=!1}={})=>{this.autoSave(),e&&this.autoSave.flush()},this.publish=async({mode:e,pages:n})=>{const a=await this.getState("draft"),o=await this.getState("production");await ue(a,o,{pages:n,pageMergeMode:"replace",deletePages:!0,publishMode:e}),o.config.publishedAt=new Date().getTime();for(const l of n||Object.keys(this.syncedStore.pages))this.syncedStore.pages[l]&&(this.syncedStore.pages[l].publishedAt=new Date().toISOString());await this.setState(e,o)},this.mergeState=async(e,n)=>{var i,r,c;const a=JSON.parse(JSON.stringify(n));(i=e.config).fontFamily??(i.fontFamily={});const o=(r=a.config)==null?void 0:r.fontFamily,l=(c=e.config)==null?void 0:c.fontFamily;e.config.fontFamily.title=(o==null?void 0:o.title)||(l==null?void 0:l.title),e.config.fontFamily.description=(o==null?void 0:o.description)||(l==null?void 0:l.description),await new Promise((g,p)=>{this.transact(async()=>{try{const h=await ue(e,n);g(h)}catch(h){p(h)}})})},this.addConnection=e=>{if(this.conns.has(e))return;e.binaryType="arraybuffer",this.conns.set(e,new Set),e.on("message",o=>this.messageListener(e,new Uint8Array(o)));let n=!0;const a=setInterval(()=>{if(!n)this.conns.has(e)&&this.closeConn(e),clearInterval(a);else if(this.conns.has(e)){n=!1;try{e.ping()}catch{this.closeConn(e),clearInterval(a)}}},pt);e.on("close",()=>{this.closeConn(e),clearInterval(a)}),e.on("pong",()=>{n=!0});{const o=j.createEncoder();j.writeVarUint(o,K),se.writeSyncStep1(o,this),this.send(e,j.toUint8Array(o));const l=this.awareness.getStates();if(l.size>0){const i=j.createEncoder();j.writeVarUint(i,ae),j.writeVarUint8Array(i,x.encodeAwarenessUpdate(this.awareness,Array.from(l.keys()))),this.send(e,j.toUint8Array(i))}}},this.messageListener=(e,n)=>{try{const a=j.createEncoder(),o=ne.createDecoder(n),l=ne.readVarUint(o);switch(l){case K:j.writeVarUint(a,K),se.readSyncMessage(o,a,this,null),j.length(a)>1&&(this.ensureDataStructure(),this.send(e,j.toUint8Array(a)));break;case ae:{x.applyAwarenessUpdate(this.awareness,ne.readVarUint8Array(o),e);break}default:O.logger.warn(`Unsupported messageType ${l}`)}}catch(a){O.logger.error(a)}this.save()},y.existsSync(this.draftYjsFilePath)&&M.applyUpdate(this,y.readFileSync(this.draftYjsFilePath)),this.syncedStore=xe.reactive(H.syncedStore({pages:{},pageIds:[],components:{},supportedLocales:[],config:{},resources:{}},this)),this.initObserver(),this.on("update",this.updateHandler),this.awareness=new x.Awareness(this),this.awareness.on("update",this.awarenessChangeHandler),this.ensureDataStructure()}static safeDeleteProjectStateDir(s){if(!s)throw new Error("Should provide project context");try{const e=f.join(V,s),n=f.join(V,`@del-${s}`);y.renameSync(e,n)}catch(e){O.logger.error("Failed to safe delete project state dir:",e)}}static get projectIds(){return oe.globSync("*/",{cwd:V,ignore:["@del-*","@tmp-*",".*","staging","production","@backup-*"]})}static get allShared(){return this.projectIds.map(s=>U.shared(s))}static shared(s){if(!s)throw new Error("Should provide project context");let e=this.sharedInstances.get(s);return e||(e=new U({path:f.join(V,s)}),this.sharedInstances.set(s,e),e)}destroy(){this.conns.forEach((s,e)=>this.closeConn(e)),this.awareness.destroy(),super.destroy()}initObserver(){const s=n=>{n.observeDeep(a=>{a.some(o=>o.changes.keys.has("updatedAt")||o.changes.keys.has("publishedAt"))||n.set("updatedAt",new Date().toISOString())})};this.syncedStore.pages&&Object.keys(this.syncedStore.pages).forEach(n=>{const a=H.getYjsValue(this.syncedStore.pages[n]);a&&a instanceof M.Map&&s(a)});const e=H.getYjsValue(this.syncedStore.pages);e&&e instanceof M.Map&&e.observe(n=>{n.changes.keys.forEach((a,o)=>{if(a.action==="add"){const l=H.getYjsValue(this.syncedStore.pages[o]);l&&l instanceof M.Map&&s(l)}})})}get draftYjsFilePath(){return f.join(this.options.path,"draft.yjs")}async getState(s){var e,n,a,o;if(s==="draft")return JSON.parse(JSON.stringify(this.syncedStore));if(!this.states[s]&&(this.states[s]=await me(this.getPublishDir(s),{includeResources:!0})??mt(),!((n=(e=this.states[s])==null?void 0:e.config)!=null&&n.defaultLocale))){(a=this.states[s]).config??(a.config={});const l=pe.env.languages.map(i=>({locale:i.code,name:i.name}));this.states[s].config.defaultLocale=(o=l[0])==null?void 0:o.locale}return{...this.states[s],resources:await Ue().then(async l=>{var g,p,h,v;const{pages:i,components:r}=_.pick(l,"pages","components");let c=r;if((p=(g=this.states[s])==null?void 0:g.resources)!=null&&p.components)c={...(v=(h=this.states[s])==null?void 0:h.resources)==null?void 0:v.components};else{const I=f.basename(this.options.path),D=await C.findByPk(I);if(D!=null&&D.useAllResources)c=r;else{const N=(await te.findAll({where:{projectId:I}})).map(m=>m.componentId);c=Object.fromEntries(Object.entries(r||{}).filter(([m])=>N.includes(m)))}}return{pages:i,components:c}}).catch(()=>({}))}}async setState(s,e){const n=await Pe(e,{exportAssets:!1,includeResources:!0}),a=this.getPublishDir(s);y.mkdirSync(f.dirname(a),{recursive:!0}),y.rmSync(a,{force:!0,recursive:!0}),y.renameSync(n,a),this.states[s]=e}getPublishDir(s){return f.join(this.options.path,s)}static async pageUrlMap(s){const{projectIds:e}=this,n={};for(const a of e){const o=await C.findByPk(a);if(!o)continue;const l=await U.shared(a).getState(s),i=_.union(S.default.env.languages.map(r=>r.code),l.supportedLocales.map(r=>r.locale));for(const r of l.pageIds){const c=l.pages[r];if(!c||s==="production"&&!c.isPublic)continue;const g=c.slug,p=o.slug||a,h={projectId:a,projectSlug:p,pageSlug:g,pageId:r,defaultLocale:i==null?void 0:i[0],locales:i,publishedAt:l.config.publishedAt,isPublic:c.isPublic,isTemplate:c.isTemplate};p&&(n[B.joinURL("/",p,g)]={...h,shouldRedirect:!0,mainPage:!0}),n[B.joinURL("/",a,g)]={...h,shouldRedirect:!0,mainPage:!0};for(const v of i){const I={...h,locale:v};n[B.joinURL("/",v,a,g)]=I,p&&(n[B.joinURL("/",v,p,g)]=I)}}}return n}};U.INSTANCE_TTL=30*60*1e3,U.sharedInstances=new ve.LRUCache({max:100,ttl:U.INSTANCE_TTL,dispose:s=>{s.destroy()}});let Y=U;function Oe(){return y.mkdtempSync(f.join(S.default.env.dataDir,"tmp-"))}function Q(t,s,e=[]){return Array.isArray(t)?t.flatMap((n,a)=>Q(n,s,[...e,a])):typeof t=="object"?t===null?[]:Object.entries(t).flatMap(([n,a])=>Q(a,s,[...e,n])):s(t)?[e]:[]}function L(t){return t.filter(s=>s!=null)}async function yt(t,s,e){if(!t||!y.existsSync(t)||!y.lstatSync(t).isFile())return null;let n=e[t];return n||(n=(async()=>(await ct({filePath:t,fileName:s})).data.filename)(),e[t]=n),n}const ht=async(t,s)=>{const e=f.basename(t),n=await de.call({name:fe,path:B.joinURL("/uploads",e),responseType:"stream",method:"GET"});if(n.status>=200&&n.status<400){const a=y.createWriteStream(s);await Je.pipeline(n.data,a)}else throw new Error(`download asset failed ${n.status}`)},St=async(t,s)=>{await Promise.all(t.map(async e=>{try{await ht(e,f.join(s,f.basename(e)))}catch(n){O.logger.error(`Failed to export assets: ${e}, ${n}`)}}))};function De(t){return ge.test(t)?[t]:G.test(t)?(be.lastIndex=0,Array.from(t.matchAll(be)).map(e=>e[1]).filter(e=>!!e)):[]}async function re(t,s,e){const{getFilename:n,exportAssets:a}=e,o=f.join(s,n(t));if(y.mkdirSync(f.dirname(o),{recursive:!0}),y.writeFileSync(o,$.stringify(t)),a){const i=Q(t,r=>typeof r=="string"&&(ge.test(r)||G.test(r))).map(r=>{const c=_.get(t,r);return De(c)}).flat().filter(Boolean);await St(i,f.dirname(o))}}const Ae=new ve.LRUCache({max:1e3,ttl:30*24*60*60*1e3});async function Te(t,s,e){var i;const n=Q(t,r=>typeof r=="string"&&(ge.test(r)||G.test(r))),a=Xe.default(2),o=n.map(r=>a(async()=>{try{const c=_.get(t,r),g=De(c);for(const p of g){const h=f.basename(p),v=e.getFilePath(p,r),I=v?`${v}:${h}`:h,D=Ae.get(I);if(D){G.test(c)||_.set(t,r,D);return}const R=await yt(v,h,s);R&&(G.test(c)||_.set(t,r,R),Ae.set(I,R))}}catch(c){O.logger.error(`Failed to process upload for path ${r.join(".")}:`,c.message||c.reason)}})),l=await Promise.allSettled(o);(i=e.onFinish)==null||i.call(e,l)}async function Pe(t,{exportAssets:s,pageIds:e="all",componentIds:n="all",rawConfig:a,includeResources:o=!1}={}){var N,q,m,b,E,A;const l=e==="all"?t.pageIds:e,i=wt({state:t,pageIds:l,componentIds:n==="all"?Object.keys(t.components):n}),r=(d,u)=>{var w;return{id:d.id,name:d.name,isTemplateSection:d.isTemplateSection??!1,component:d.component,config:d.config,visibility:d.visibility,properties:((w=d.locales)==null?void 0:w[u])??{}}},c=(d,u)=>{var w;return{id:d.id,createdAt:d.createdAt,updatedAt:d.updatedAt,publishedAt:d.publishedAt,isPublic:d.isPublic??!0,isTemplate:d.isTemplate??!1,meta:((w=d.locales)==null?void 0:w[u])??{},sections:L(d.sectionIds.map(P=>{const k=d.sections[P];return k&&r(k,u)}))}},g=L(t.supportedLocales.map(d=>d.locale).flatMap(d=>l.map(u=>{const w=t.pages[u];return w&&{locale:d,slug:w.slug,page:c(w,d)}}))),p=Oe(),h=f.join(p,"pages");y.mkdirSync(h,{recursive:!0});const v=f.join(p,"components");y.mkdirSync(v,{recursive:!0});for(const{locale:d,slug:u,page:w}of g)await re(w,h,{getFilename:()=>`${Ie(u)||"index"}.${d}.yml`,exportAssets:s});for(const d of i){const u=(N=t.components[d])==null?void 0:N.data;u&&await re(u,v,{getFilename:w=>`${w.name||"unnamed"}.${w.id}.yml`,exportAssets:s})}const I=f.join(p,".blocklet/pages/pages.config.yml");y.mkdirSync(f.dirname(I),{recursive:!0});const D={pages:L(l.map(d=>{const u=t.pages[d];return u&&{id:d,slug:u.slug}})),components:L(i.map(d=>{var w;const u=(w=t.components[d])==null?void 0:w.data;return u&&{id:d,name:u.name}})),...o?{resources:{components:L(Object.keys(((q=t.resources)==null?void 0:q.components)||{}).map(d=>{var u,w,P,k;return{id:d,name:(k=(P=(w=(u=t.resources)==null?void 0:u.components)==null?void 0:w[d])==null?void 0:P.component)==null?void 0:k.name}}))}}:{},supportedLocales:t.supportedLocales,config:t.config};y.writeFileSync(I,$.stringify(D));const R=f.join(p,"config.source.json");if(a&&y.writeFileSync(R,JSON.stringify(a)),o){const d=f.join(p,"resources"),u=f.join(d,"components");y.mkdirSync(u,{recursive:!0});for(const w of Object.keys(((m=t==null?void 0:t.resources)==null?void 0:m.components)??{})){const P=(A=(E=(b=t.resources)==null?void 0:b.components)==null?void 0:E[w])==null?void 0:A.component;P&&await re(P,u,{getFilename:k=>`${k.name||"unnamed"}.${k.id}.yml`,exportAssets:s})}}return p}async function me(t,{importAssets:s,includeResources:e}={}){var o,l,i;if(!y.existsSync(t))return null;let n,a=!1;try{y.lstatSync(t).isDirectory()?n=t:/\.(tgz|gz|tar)$/.test(t)&&(a=!0,n=Oe(),await Ye.x({file:t,C:n}));const r=oe.globSync("**/.blocklet/pages/pages.config.yml",{cwd:n,absolute:!0}).at(0),c=r&&f.join(f.dirname(r),"../../pages"),g=r&&f.join(f.dirname(r),"../../components"),p=r&&f.join(f.dirname(r),"../../chunks");if(!r)return null;const h=$.parse(y.readFileSync(r).toString()),v=(m,b,E)=>{let A=f.join(m,`${b}${E?`.${E}`:""}.yml`);return(!y.existsSync(A)||!y.lstatSync(A).isFile())&&(A=f.join(m,b,`index${E?`.${E}`:""}.yml`),!y.existsSync(A)||!y.lstatSync(A))?null:$.parse(y.readFileSync(A).toString())},I=(m,b)=>{try{const E=oe.globSync(`*.${b}.yml`,{cwd:m,absolute:!0})[0];return E?$.parse(y.readFileSync(E).toString()):null}catch(E){O.logger.error("parse component error",E)}return null},D=L(h.pages.map(({slug:m})=>{var d;const b=L(h.supportedLocales.map(({locale:u})=>{const w=c?v(c,Ie(m),u):void 0;if(w)return{locale:u,page:w};const P=c?v(c,m,u):void 0;return P&&{locale:u,page:P}})),E=(d=b[0])==null?void 0:d.page;if(!E)return null;const A=E.sections.map(u=>{const w=u.id||le();return{id:w,component:u.component,config:u.config,name:u.name,isTemplateSection:u.isTemplateSection??!1,visibility:u.visibility,locales:Object.fromEntries(L(b.map(({locale:P,page:k})=>{const Se=k.sections.find(Ce=>Ce.id===w);return Se&&[P,Se.properties]})))}});return{id:E.id||le(),createdAt:E.createdAt,updatedAt:E.updatedAt,publishedAt:E.publishedAt,isPublic:E.isPublic??!0,isTemplate:E.isTemplate??!1,slug:m,sections:Object.fromEntries(A.map(u=>[u.id,u])),sectionIds:A.map(u=>u.id),locales:Object.fromEntries(b.map(({locale:u,page:w})=>[u,w.meta]))}})),R=g?L(((o=h.components)==null?void 0:o.map(({id:m})=>I(g,m)))??[]):[];if(s){const m=(...b)=>{O.logger.info(`[${a?f.basename(t):f.basename(f.join(t,"../../../../"))}] importAssets:`,...b)};try{m("wait image-bin api ready"),await Ze.default({resources:[`${de.getComponentWebEndpoint(tt)}/api/sdk/uploads`],validateStatus:A=>A>=200&&A<=500}),m("image-bin api is ready");const b={},E={};m("start to upload assets"),await Promise.allSettled([Te(R,b,{getFilePath:A=>g&&f.join(g,A),onFinish:A=>{m(`upload ${A.length} component assets`)}}),Te(D,E,{getFilePath:(A,d)=>{const u=_.get(D,d.slice(0,1));return c&&f.join(c,f.dirname(u.slug),A)},onFinish:A=>{m(`upload ${A.length} page assets`)}})]),m("upload assets done"),we.default.gc&&we.default.gc()}catch(b){m("Error during asset import:",b)}}const N={};if(e){const m=r&&f.join(f.dirname(r),"../../resources/components"),b=L(((i=(l=h.resources)==null?void 0:l.components)==null?void 0:i.map(({id:E})=>I(m,E)))??[]);b.length>0&&(N.components=Object.fromEntries(b.map((E,A)=>[E.id,{index:A,component:E}])))}const q={};if(p&&y.existsSync(p)){const m=y.readdirSync(p);for(const b of m)q[b]=y.readFileSync(f.join(p,b),"utf-8")}return{supportedLocales:h.supportedLocales,pageIds:D.map(m=>m.id),components:Object.fromEntries(R.map((m,b)=>[m.id,{index:b,data:m}])),pages:Object.fromEntries(D.map(m=>[m.id,m])),config:h.config||{},resources:N,chunks:q}}finally{a&&n&&y.rmSync(n,{force:!0,recursive:!0})}}async function ue(t,s,{pages:e,pageMergeMode:n="byUpdateTime",deletePages:a=!1,publishMode:o=void 0}={}){try{o&&O.clearPreloadComponentsCacheByMode(o)}catch(g){O.logger.error("clear preload page cache error",{error:g})}const{pageIds:l,pages:i,supportedLocales:r}=t;for(const g of e??l){const p=i[g];if(!p){const h=s.pageIds.indexOf(g);h!==-1&&a&&(s.pageIds.splice(h,1),delete s.pages[g]);continue}if(s.pageIds.includes(p.id)){if(n==="replace")s.pages[p.id]=p;else if(n==="byUpdateTime"){const h=s.pages[p.id];(!h||p.updatedAt&&p.updatedAt>h.updatedAt)&&(s.pages[p.id]=p)}}else s.pageIds.push(p.id),s.pages[p.id]=p}if(a&&!e)for(const g of s.pageIds)t.pageIds.includes(g)||delete s.pages[g],s.pageIds=[...s.pageIds].filter(p=>t.pageIds.includes(p));if(s.supportedLocales.splice(0,s.supportedLocales.length),s.supportedLocales.push(..._.cloneDeep(r)),a)for(const g of Object.keys(s.components))delete s.components[g];let c=JSON.parse(JSON.stringify(t.components));c=Object.fromEntries(await Promise.all(Object.entries(c).map(async([g,p])=>{const h=await _e(p==null?void 0:p.data);return[g,{...p,data:h}]}))),Object.assign(s.components,c),Object.assign(s.config,JSON.parse(JSON.stringify(t.config))),s.resources.components=JSON.parse(JSON.stringify(t.resources.components||{}))}const _e=qe.memoize(async t=>{var s;if(!_.isEmpty(t==null?void 0:t.properties))return t;if(((s=t==null?void 0:t.renderer)==null?void 0:s.type)==="react-component"){const{script:e}=(t==null?void 0:t.renderer)||{};if(e)try{const n=await O.getExportSchemaValueFromCode(e,"PROPERTIES_SCHEMA",t.id);n&&n.length>0&&t&&(t.properties={},n.forEach((a,o)=>{t!=null&&t.properties&&(t.properties[a.id]={index:o,data:a})}))}catch(n){O.logger.error("checkPropertiesFromCode error",{componentId:t.id,name:t.name},{error:n})}}return t},{keyGenerator:t=>JSON.stringify(["checkPropertiesFromCode",t])});function wt({state:t,pageIds:s=[],componentIds:e=[]}){var l;const n=(i,r=new Set)=>(Array.isArray(i)&&i.forEach(c=>n(c,r)),i&&typeof i=="object"&&(typeof i.componentId=="string"&&r.add(i.componentId),Object.values(i).forEach(c=>n(c,r))),r),a=new Set(e);for(const i of s){const r=t.pages[i];n(r,a)}const o=[...a];for(;o.length;){const i=o.shift();a.has(i)||a.add(i);const r=(l=t.components[i])==null?void 0:l.data;if(r)for(const c of n(r))a.has(c)||o.push(c)}return[...a]}let Z,J,ye,he;function ke(){return Z=(async()=>{const t=de.getResources({types:[{did:fe,type:ie},{did:it,type:ie}]});J=(await Promise.all(t.map(async e=>{const n=e.path?await me(e.path,{importAssets:!1}):void 0;return n?{blockletId:e.did,state:n,blockletTitle:e.title}:void 0}))).filter(e=>!!e),ye=J.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.pages).map(a=>a?[a==null?void 0:a.id,{page:a,blockletId:n.blockletId}]:[]))),{});const s=J.reduce((e,n)=>Object.assign(e,Object.fromEntries(Object.values(n.state.components).map(a=>[a.data.id,{blockletId:n.blockletId,component:a.data}]))),{});he=Object.fromEntries(await Promise.all(Object.entries(s).map(async([e,n])=>{const a=await _e(n.component);return[e,{...n,component:a}]})))})(),Z}function Le(t){const s=_.debounce(async()=>{await ke().catch(e=>{O.logger.error("load resource states error",{error:e})}),await(t==null?void 0:t({states:J,pages:ye,components:he}))},3e3,{leading:!1,trailing:!0});return s(),S.default.events.on(S.default.Events.componentAdded,s),S.default.events.on(S.default.Events.componentRemoved,s),S.default.events.on(S.default.Events.componentStarted,s),S.default.events.on(S.default.Events.componentStopped,s),S.default.events.on(S.default.Events.componentUpdated,s),S.default.events.on(ce,s),()=>{S.default.events.off(S.default.Events.componentAdded,s),S.default.events.off(S.default.Events.componentRemoved,s),S.default.events.off(S.default.Events.componentStarted,s),S.default.events.off(S.default.Events.componentStopped,s),S.default.events.off(S.default.Events.componentUpdated,s),S.default.events.off(ce,s)}}const Re=Symbol.for("GLOBAL_RESOURCE_STATES_LISTENER_KEY"),W=globalThis;var je;(je=W[Re])==null||je.call(W);W[Re]=Le(async({pages:t,components:s})=>{const{projectIds:e}=Y;await Promise.all(e.map(async n=>{const a=Y.shared(n);a.syncedStore.resources.pages=t;const o=await C.findByPk(n);if(o!=null&&o.useAllResources)a.syncedStore.resources.components=s;else{const i=(await te.findAll({where:{projectId:n}})).map(c=>c.componentId),r=Object.fromEntries(Object.entries(s||{}).filter(([c])=>i.includes(c)));a.syncedStore.resources.components=r}O.logger.info(`update [${n}] resource states:`,{pages:Object.keys(a.syncedStore.resources.pages||{}).length,components:Object.keys(a.syncedStore.resources.components||{}).length})}))});async function Et(){O.logger.info("trigger reload all project resource"),S.default.events.emit(ce)}async function Ue(){return Z??(Z=ke()),await Z,{states:J,pages:ye,components:he}}exports.COMPONENT_DID=fe;exports.PUBLISH_MODES=gt;exports.Project=C;exports.RESOURCE_TYPE=ie;exports.SITE_STATE_PATH=V;exports.STATE_MODES=ft;exports.SiteState=Y;exports.fromPackage=me;exports.getMultiTenantAllProjectAccessPassports=at;exports.getResourceStates=Ue;exports.initPackResourceStates=Le;exports.isMultiTenant=nt;exports.mergeState=ue;exports.nextId=le;exports.toPackage=Pe;exports.triggerReloadAllProjectResource=Et;