@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.
- package/lib/cjs/_chunks/site-state-B57sn0Rr.js +57 -0
- package/lib/cjs/components.js +1 -1
- package/lib/cjs/project-html.js +6 -6
- package/lib/cjs/resources.js +1 -1
- package/lib/cjs/site-state.js +1 -1
- package/lib/es/_chunks/site-state-D28bWM8J.js +1490 -0
- package/lib/es/components.js +11 -10
- package/lib/es/project-html.js +93 -91
- package/lib/es/resources.js +5 -6
- package/lib/es/site-state.js +7 -7
- package/package.json +4 -4
- package/lib/cjs/_chunks/components-paCr_hhD.js +0 -48
- package/lib/cjs/_chunks/site-state-HLTcjGnI.js +0 -1
- package/lib/es/_chunks/components-CqR6z_0s.js +0 -454
- package/lib/es/_chunks/site-state-Bvk8uNN5.js +0 -968
package/lib/es/components.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
};
|
package/lib/es/project-html.js
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
1
|
import I from "vite-plugin-node-polyfills/shims/process";
|
|
2
|
-
import {
|
|
3
|
-
import { initCronCrawlBlocklet as
|
|
4
|
-
import { PreloadComponentScriptModule as
|
|
5
|
-
import { injectPreloadComponents as
|
|
6
|
-
import { getComponentMountPoint as
|
|
7
|
-
import
|
|
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
|
|
10
|
-
import { readFileSync as
|
|
11
|
-
import
|
|
12
|
-
import { resolve as
|
|
13
|
-
import { withQuery as
|
|
14
|
-
const F = ["/assets/"],
|
|
15
|
-
function
|
|
16
|
-
|
|
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
|
-
}) :
|
|
19
|
+
}) : J();
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
function
|
|
24
|
-
app:
|
|
25
|
-
viteDevServer:
|
|
21
|
+
R();
|
|
22
|
+
a.events.on(a.Events.envUpdate, R);
|
|
23
|
+
function ue({
|
|
24
|
+
app: i,
|
|
25
|
+
viteDevServer: u,
|
|
26
26
|
// projectId,
|
|
27
|
-
state:
|
|
27
|
+
state: n
|
|
28
28
|
}) {
|
|
29
|
-
let
|
|
30
|
-
if (
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
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
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
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:
|
|
42
|
+
allowCrawler: O
|
|
43
43
|
})
|
|
44
|
-
),
|
|
45
|
-
var
|
|
46
|
-
if (F.some((
|
|
47
|
-
|
|
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
|
|
51
|
-
let
|
|
52
|
-
if (
|
|
53
|
-
const
|
|
54
|
-
let
|
|
55
|
-
if ((!
|
|
56
|
-
const
|
|
57
|
-
Object.values(
|
|
58
|
-
const v = Object.values((
|
|
59
|
-
(
|
|
60
|
-
var
|
|
61
|
-
return
|
|
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((
|
|
64
|
-
var
|
|
63
|
+
).map((s) => {
|
|
64
|
+
var w, A;
|
|
65
65
|
return {
|
|
66
|
-
id:
|
|
67
|
-
componentId:
|
|
68
|
-
useCache:
|
|
69
|
-
cacheDuration:
|
|
70
|
-
properties: (A = (
|
|
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
|
-
|
|
73
|
+
d.push(...v);
|
|
74
74
|
});
|
|
75
|
-
const H = new Promise((
|
|
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:
|
|
85
|
-
req:
|
|
86
|
-
state:
|
|
87
|
-
locale:
|
|
88
|
-
instances:
|
|
89
|
-
module:
|
|
90
|
-
}).then((
|
|
91
|
-
|
|
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 (
|
|
95
|
-
|
|
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
|
|
101
|
-
title:
|
|
102
|
-
description:
|
|
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
|
-
|
|
105
|
-
ogTitle:
|
|
106
|
-
ogDescription:
|
|
107
|
-
ogImage: q(
|
|
108
|
-
pagesPublishedAt: (
|
|
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
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
${e != null && e.
|
|
116
|
-
${
|
|
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(
|
|
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
|
-
${
|
|
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
|
|
137
|
-
if (
|
|
138
|
-
const
|
|
139
|
-
|
|
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
|
-
|
|
142
|
-
}),
|
|
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(
|
|
145
|
-
|
|
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
|
-
|
|
150
|
+
ue as default
|
|
149
151
|
};
|
package/lib/es/resources.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { P as S, i as b, g as M, C as J, R as X, S as
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
146
|
+
x.info(`Exported resources for project ${c}`, {
|
|
148
147
|
pageIds: p,
|
|
149
148
|
componentIds: R
|
|
150
149
|
});
|
package/lib/es/site-state.js
CHANGED
|
@@ -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/
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
206
|
-
"@blocklet/pages-kit
|
|
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;
|