@brightsideoy/kama 0.1.0-alpha.63 → 0.1.0-alpha.65

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/dist/index.js CHANGED
@@ -140,66 +140,66 @@ function T(e) {
140
140
  }
141
141
  return !1;
142
142
  }
143
- var E = (e) => (S(e) || w(e)) && !!e.anchor, D = Symbol("break visit"), O = Symbol("skip children"), k = Symbol("remove node");
144
- function A(e, t) {
145
- let n = ne(t);
146
- y(e) ? j(null, e.contents, n, Object.freeze([e])) === k && (e.contents = null) : j(null, e, n, Object.freeze([]));
147
- }
148
- A.BREAK = D, A.SKIP = O, A.REMOVE = k;
149
- function j(e, t, n, r) {
150
- let i = re(e, t, n, r);
151
- if (T(i) || x(i)) return M(e, r, i), j(e, i, n, r);
143
+ var E = (e) => (S(e) || w(e)) && !!e.anchor, D = Symbol("break visit"), ee = Symbol("skip children"), O = Symbol("remove node");
144
+ function k(e, t) {
145
+ let n = re(t);
146
+ y(e) ? A(null, e.contents, n, Object.freeze([e])) === O && (e.contents = null) : A(null, e, n, Object.freeze([]));
147
+ }
148
+ k.BREAK = D, k.SKIP = ee, k.REMOVE = O;
149
+ function A(e, t, n, r) {
150
+ let i = ie(e, t, n, r);
151
+ if (T(i) || x(i)) return ae(e, r, i), A(e, i, n, r);
152
152
  if (typeof i != "symbol") {
153
153
  if (w(t)) {
154
154
  r = Object.freeze(r.concat(t));
155
155
  for (let e = 0; e < t.items.length; ++e) {
156
- let i = j(e, t.items[e], n, r);
156
+ let i = A(e, t.items[e], n, r);
157
157
  if (typeof i == "number") e = i - 1;
158
158
  else if (i === D) return D;
159
- else i === k && (t.items.splice(e, 1), --e);
159
+ else i === O && (t.items.splice(e, 1), --e);
160
160
  }
161
161
  } else if (x(t)) {
162
162
  r = Object.freeze(r.concat(t));
163
- let e = j("key", t.key, n, r);
163
+ let e = A("key", t.key, n, r);
164
164
  if (e === D) return D;
165
- e === k && (t.key = null);
166
- let i = j("value", t.value, n, r);
165
+ e === O && (t.key = null);
166
+ let i = A("value", t.value, n, r);
167
167
  if (i === D) return D;
168
- i === k && (t.value = null);
168
+ i === O && (t.value = null);
169
169
  }
170
170
  }
171
171
  return i;
172
172
  }
173
- async function ee(e, t) {
174
- let n = ne(t);
175
- y(e) ? await te(null, e.contents, n, Object.freeze([e])) === k && (e.contents = null) : await te(null, e, n, Object.freeze([]));
173
+ async function te(e, t) {
174
+ let n = re(t);
175
+ y(e) ? await ne(null, e.contents, n, Object.freeze([e])) === O && (e.contents = null) : await ne(null, e, n, Object.freeze([]));
176
176
  }
177
- ee.BREAK = D, ee.SKIP = O, ee.REMOVE = k;
178
- async function te(e, t, n, r) {
179
- let i = await re(e, t, n, r);
180
- if (T(i) || x(i)) return M(e, r, i), te(e, i, n, r);
177
+ te.BREAK = D, te.SKIP = ee, te.REMOVE = O;
178
+ async function ne(e, t, n, r) {
179
+ let i = await ie(e, t, n, r);
180
+ if (T(i) || x(i)) return ae(e, r, i), ne(e, i, n, r);
181
181
  if (typeof i != "symbol") {
182
182
  if (w(t)) {
183
183
  r = Object.freeze(r.concat(t));
184
184
  for (let e = 0; e < t.items.length; ++e) {
185
- let i = await te(e, t.items[e], n, r);
185
+ let i = await ne(e, t.items[e], n, r);
186
186
  if (typeof i == "number") e = i - 1;
187
187
  else if (i === D) return D;
188
- else i === k && (t.items.splice(e, 1), --e);
188
+ else i === O && (t.items.splice(e, 1), --e);
189
189
  }
190
190
  } else if (x(t)) {
191
191
  r = Object.freeze(r.concat(t));
192
- let e = await te("key", t.key, n, r);
192
+ let e = await ne("key", t.key, n, r);
193
193
  if (e === D) return D;
194
- e === k && (t.key = null);
195
- let i = await te("value", t.value, n, r);
194
+ e === O && (t.key = null);
195
+ let i = await ne("value", t.value, n, r);
196
196
  if (i === D) return D;
197
- i === k && (t.value = null);
197
+ i === O && (t.value = null);
198
198
  }
199
199
  }
200
200
  return i;
201
201
  }
202
- function ne(e) {
202
+ function re(e) {
203
203
  return typeof e == "object" && (e.Collection || e.Node || e.Value) ? Object.assign({
204
204
  Alias: e.Node,
205
205
  Map: e.Node,
@@ -214,7 +214,7 @@ function ne(e) {
214
214
  Seq: e.Collection
215
215
  }, e) : e;
216
216
  }
217
- function re(e, t, n, r) {
217
+ function ie(e, t, n, r) {
218
218
  if (typeof n == "function") return n(e, t, r);
219
219
  if (b(t)) return n.Map?.(e, t, r);
220
220
  if (C(t)) return n.Seq?.(e, t, r);
@@ -222,7 +222,7 @@ function re(e, t, n, r) {
222
222
  if (S(t)) return n.Scalar?.(e, t, r);
223
223
  if (v(t)) return n.Alias?.(e, t, r);
224
224
  }
225
- function M(e, t, n) {
225
+ function ae(e, t, n) {
226
226
  let r = t[t.length - 1];
227
227
  if (w(r)) r.items[e] = n;
228
228
  else if (x(r)) e === "key" ? r.key = n : r.value = n;
@@ -234,14 +234,14 @@ function M(e, t, n) {
234
234
  }
235
235
  //#endregion
236
236
  //#region node_modules/yaml/browser/dist/doc/directives.js
237
- var ie = {
237
+ var j = {
238
238
  "!": "%21",
239
239
  ",": "%2C",
240
240
  "[": "%5B",
241
241
  "]": "%5D",
242
242
  "{": "%7B",
243
243
  "}": "%7D"
244
- }, ae = (e) => e.replace(/[!,[\]{}]/g, (e) => ie[e]), oe = class e {
244
+ }, oe = (e) => e.replace(/[!,[\]{}]/g, (e) => j[e]), se = class e {
245
245
  constructor(t, n) {
246
246
  this.docStart = null, this.docEnd = !1, this.yaml = Object.assign({}, e.defaultYaml, t), this.tags = Object.assign({}, e.defaultTags, n);
247
247
  }
@@ -304,14 +304,14 @@ var ie = {
304
304
  return n === "!" ? e : (t(`Could not resolve tag: ${e}`), null);
305
305
  }
306
306
  tagString(e) {
307
- for (let [t, n] of Object.entries(this.tags)) if (e.startsWith(n)) return t + ae(e.substring(n.length));
307
+ for (let [t, n] of Object.entries(this.tags)) if (e.startsWith(n)) return t + oe(e.substring(n.length));
308
308
  return e[0] === "!" ? e : `!<${e}>`;
309
309
  }
310
310
  toString(e) {
311
311
  let t = this.yaml.explicit ? [`%YAML ${this.yaml.version || "1.2"}`] : [], n = Object.entries(this.tags), r;
312
312
  if (e && n.length > 0 && T(e.contents)) {
313
313
  let t = {};
314
- A(e.contents, (e, n) => {
314
+ k(e.contents, (e, n) => {
315
315
  T(n) && n.tag && (t[n.tag] = !0);
316
316
  }), r = Object.keys(t);
317
317
  } else r = [];
@@ -319,37 +319,37 @@ var ie = {
319
319
  return t.join("\n");
320
320
  }
321
321
  };
322
- oe.defaultYaml = {
322
+ se.defaultYaml = {
323
323
  explicit: !1,
324
324
  version: "1.2"
325
- }, oe.defaultTags = { "!!": "tag:yaml.org,2002:" };
325
+ }, se.defaultTags = { "!!": "tag:yaml.org,2002:" };
326
326
  //#endregion
327
327
  //#region node_modules/yaml/browser/dist/doc/anchors.js
328
- function se(e) {
328
+ function ce(e) {
329
329
  if (/[\x00-\x19\s,[\]{}]/.test(e)) {
330
330
  let t = `Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;
331
331
  throw Error(t);
332
332
  }
333
333
  return !0;
334
334
  }
335
- function ce(e) {
335
+ function le(e) {
336
336
  let t = /* @__PURE__ */ new Set();
337
- return A(e, { Value(e, n) {
337
+ return k(e, { Value(e, n) {
338
338
  n.anchor && t.add(n.anchor);
339
339
  } }), t;
340
340
  }
341
- function N(e, t) {
341
+ function ue(e, t) {
342
342
  for (let n = 1;; ++n) {
343
343
  let r = `${e}${n}`;
344
344
  if (!t.has(r)) return r;
345
345
  }
346
346
  }
347
- function le(e, t) {
347
+ function M(e, t) {
348
348
  let n = [], r = /* @__PURE__ */ new Map(), i = null;
349
349
  return {
350
350
  onAnchor: (r) => {
351
- n.push(r), i ??= ce(e);
352
- let a = N(t, i);
351
+ n.push(r), i ??= le(e);
352
+ let a = ue(t, i);
353
353
  return i.add(a), a;
354
354
  },
355
355
  setAnchors: () => {
@@ -367,22 +367,22 @@ function le(e, t) {
367
367
  }
368
368
  //#endregion
369
369
  //#region node_modules/yaml/browser/dist/doc/applyReviver.js
370
- function P(e, t, n, r) {
370
+ function N(e, t, n, r) {
371
371
  if (r && typeof r == "object") {
372
372
  if (Array.isArray(r)) for (let t = 0, n = r.length; t < n; ++t) {
373
- let n = r[t], i = P(e, r, String(t), n);
373
+ let n = r[t], i = N(e, r, String(t), n);
374
374
  i === void 0 ? delete r[t] : i !== n && (r[t] = i);
375
375
  }
376
376
  else if (r instanceof Map) for (let t of Array.from(r.keys())) {
377
- let n = r.get(t), i = P(e, r, t, n);
377
+ let n = r.get(t), i = N(e, r, t, n);
378
378
  i === void 0 ? r.delete(t) : i !== n && r.set(t, i);
379
379
  }
380
380
  else if (r instanceof Set) for (let t of Array.from(r)) {
381
- let n = P(e, r, t, t);
381
+ let n = N(e, r, t, t);
382
382
  n === void 0 ? r.delete(t) : n !== t && (r.delete(t), r.add(n));
383
383
  }
384
384
  else for (let [t, n] of Object.entries(r)) {
385
- let i = P(e, r, t, n);
385
+ let i = N(e, r, t, n);
386
386
  i === void 0 ? delete r[t] : i !== n && (r[t] = i);
387
387
  }
388
388
  }
@@ -390,8 +390,8 @@ function P(e, t, n, r) {
390
390
  }
391
391
  //#endregion
392
392
  //#region node_modules/yaml/browser/dist/nodes/toJS.js
393
- function F(e, t, n) {
394
- if (Array.isArray(e)) return e.map((e, t) => F(e, String(t), n));
393
+ function P(e, t, n) {
394
+ if (Array.isArray(e)) return e.map((e, t) => P(e, String(t), n));
395
395
  if (e && typeof e.toJSON == "function") {
396
396
  if (!n || !E(e)) return e.toJSON(t, n);
397
397
  let r = {
@@ -409,7 +409,7 @@ function F(e, t, n) {
409
409
  }
410
410
  //#endregion
411
411
  //#region node_modules/yaml/browser/dist/nodes/Node.js
412
- var ue = class {
412
+ var F = class {
413
413
  constructor(e) {
414
414
  Object.defineProperty(this, _, { value: e });
415
415
  }
@@ -426,11 +426,11 @@ var ue = class {
426
426
  mapAsMap: t === !0,
427
427
  mapKeyWarned: !1,
428
428
  maxAliasCount: typeof n == "number" ? n : 100
429
- }, o = F(this, "", a);
429
+ }, o = P(this, "", a);
430
430
  if (typeof r == "function") for (let { count: e, res: t } of a.anchors.values()) r(t, e);
431
- return typeof i == "function" ? P(i, { "": o }, "", o) : o;
431
+ return typeof i == "function" ? N(i, { "": o }, "", o) : o;
432
432
  }
433
- }, de = class extends ue {
433
+ }, de = class extends F {
434
434
  constructor(e) {
435
435
  super(d), this.source = e, Object.defineProperty(this, "tag", { set() {
436
436
  throw Error("Alias nodes cannot have tags");
@@ -439,7 +439,7 @@ var ue = class {
439
439
  resolve(e, t) {
440
440
  if (t?.maxAliasCount === 0) throw ReferenceError("Alias resolution is disabled");
441
441
  let n;
442
- t?.aliasResolveCache ? n = t.aliasResolveCache : (n = [], A(e, { Node: (e, t) => {
442
+ t?.aliasResolveCache ? n = t.aliasResolveCache : (n = [], k(e, { Node: (e, t) => {
443
443
  (v(t) || E(t)) && n.push(t);
444
444
  } }), t && (t.aliasResolveCache = n));
445
445
  let r;
@@ -458,14 +458,14 @@ var ue = class {
458
458
  }
459
459
  let o = n.get(a);
460
460
  /* istanbul ignore if */
461
- if (o ||= (F(a, null, t), n.get(a)), o?.res === void 0) throw ReferenceError("This should not happen: Alias anchor was not resolved?");
461
+ if (o ||= (P(a, null, t), n.get(a)), o?.res === void 0) throw ReferenceError("This should not happen: Alias anchor was not resolved?");
462
462
  if (i >= 0 && (o.count += 1, o.aliasCount === 0 && (o.aliasCount = fe(r, a, n)), o.count * o.aliasCount > i)) throw ReferenceError("Excessive alias count indicates a resource exhaustion attack");
463
463
  return o.res;
464
464
  }
465
465
  toString(e, t, n) {
466
466
  let r = `*${this.source}`;
467
467
  if (e) {
468
- if (se(this.source), e.options.verifyAliasOrder && !e.anchors.has(this.source)) {
468
+ if (ce(this.source), e.options.verifyAliasOrder && !e.anchors.has(this.source)) {
469
469
  let e = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
470
470
  throw Error(e);
471
471
  }
@@ -495,12 +495,12 @@ function fe(e, t, n) {
495
495
  }
496
496
  //#endregion
497
497
  //#region node_modules/yaml/browser/dist/nodes/Scalar.js
498
- var pe = (e) => !e || typeof e != "function" && typeof e != "object", I = class extends ue {
498
+ var pe = (e) => !e || typeof e != "function" && typeof e != "object", I = class extends F {
499
499
  constructor(e) {
500
500
  super(h), this.value = e;
501
501
  }
502
502
  toJSON(e, t) {
503
- return t?.keep ? this.value : F(this.value, e, t);
503
+ return t?.keep ? this.value : P(this.value, e, t);
504
504
  }
505
505
  toString() {
506
506
  return String(this.value);
@@ -567,7 +567,7 @@ function _e(e, t, n) {
567
567
  sourceObjects: /* @__PURE__ */ new Map()
568
568
  });
569
569
  }
570
- var ve = (e) => e == null || typeof e == "object" && !!e[Symbol.iterator]().next().done, ye = class extends ue {
570
+ var ve = (e) => e == null || typeof e == "object" && !!e[Symbol.iterator]().next().done, ye = class extends F {
571
571
  constructor(e, t) {
572
572
  super(e), Object.defineProperty(this, "schema", {
573
573
  value: t,
@@ -911,7 +911,7 @@ function Re(e, t) {
911
911
  function ze(e, t, { anchors: n, doc: r }) {
912
912
  if (!r.directives) return "";
913
913
  let i = [], a = (S(e) || w(e)) && e.anchor;
914
- a && se(a) && (n.add(a), i.push(`&${a}`));
914
+ a && ce(a) && (n.add(a), i.push(`&${a}`));
915
915
  let o = e.tag ?? (t.default ? null : t.tag);
916
916
  return o && i.push(r.directives.tagString(o)), i.join(" ");
917
917
  }
@@ -1016,11 +1016,11 @@ function Je(e, t, { key: n, value: r }) {
1016
1016
  if (T(n) && n.addToJSMap) n.addToJSMap(e, t, r);
1017
1017
  else if (We(e, n)) Ge(e, t, r);
1018
1018
  else {
1019
- let i = F(n, "", e);
1020
- if (t instanceof Map) t.set(i, F(r, i, e));
1019
+ let i = P(n, "", e);
1020
+ if (t instanceof Map) t.set(i, P(r, i, e));
1021
1021
  else if (t instanceof Set) t.add(i);
1022
1022
  else {
1023
- let a = Ye(n, i, e), o = F(r, a, e);
1023
+ let a = Ye(n, i, e), o = P(r, a, e);
1024
1024
  a in t ? Object.defineProperty(t, a, {
1025
1025
  value: o,
1026
1026
  writable: !0,
@@ -1252,7 +1252,7 @@ var B = class extends ye {
1252
1252
  let n = [];
1253
1253
  t?.onCreate && t.onCreate(n);
1254
1254
  let r = 0;
1255
- for (let e of this.items) n.push(F(e, String(r++), t));
1255
+ for (let e of this.items) n.push(P(e, String(r++), t));
1256
1256
  return n;
1257
1257
  }
1258
1258
  toString(e, t, n) {
@@ -1550,7 +1550,7 @@ var Tt = {
1550
1550
  t?.onCreate && t.onCreate(n);
1551
1551
  for (let e of this.items) {
1552
1552
  let r, i;
1553
- if (x(e) ? (r = F(e.key, "", t), i = F(e.value, r, t)) : r = F(e, "", t), n.has(r)) throw Error("Ordered maps must not include duplicate keys");
1553
+ if (x(e) ? (r = P(e.key, "", t), i = P(e.value, r, t)) : r = P(e, "", t), n.has(r)) throw Error("Ordered maps must not include duplicate keys");
1554
1554
  n.set(r, i);
1555
1555
  }
1556
1556
  return n;
@@ -1926,7 +1926,7 @@ var nn = class e {
1926
1926
  }, n);
1927
1927
  this.options = i;
1928
1928
  let { version: a } = i;
1929
- n?._directives ? (this.directives = n._directives.atDocument(), this.directives.yaml.explicit && (a = this.directives.yaml.version)) : this.directives = new oe({ version: a }), this.setSchema(a, n), this.contents = e === void 0 ? null : this.createNode(e, r, n);
1929
+ n?._directives ? (this.directives = n._directives.atDocument(), this.directives.yaml.explicit && (a = this.directives.yaml.version)) : this.directives = new se({ version: a }), this.setSchema(a, n), this.contents = e === void 0 ? null : this.createNode(e, r, n);
1930
1930
  }
1931
1931
  clone() {
1932
1932
  let t = Object.create(e.prototype, { [_]: { value: f } });
@@ -1940,8 +1940,8 @@ var nn = class e {
1940
1940
  }
1941
1941
  createAlias(e, t) {
1942
1942
  if (!e.anchor) {
1943
- let n = ce(this);
1944
- e.anchor = !t || n.has(t) ? N(t || "a", n) : t;
1943
+ let n = le(this);
1944
+ e.anchor = !t || n.has(t) ? ue(t || "a", n) : t;
1945
1945
  }
1946
1946
  return new de(e.anchor);
1947
1947
  }
@@ -1952,7 +1952,7 @@ var nn = class e {
1952
1952
  let e = t.filter((e) => typeof e == "number" || e instanceof String || e instanceof Number).map(String);
1953
1953
  e.length > 0 && (t = t.concat(e)), r = t;
1954
1954
  } else n === void 0 && t && (n = t, t = void 0);
1955
- let { aliasDuplicateObjects: i, anchorPrefix: a, flow: o, keepUndefined: s, onTagObj: c, tag: l } = n ?? {}, { onAnchor: u, setAnchors: d, sourceObjects: f } = le(this, a || "a"), p = {
1955
+ let { aliasDuplicateObjects: i, anchorPrefix: a, flow: o, keepUndefined: s, onTagObj: c, tag: l } = n ?? {}, { onAnchor: u, setAnchors: d, sourceObjects: f } = M(this, a || "a"), p = {
1956
1956
  aliasDuplicateObjects: i ?? !0,
1957
1957
  keepUndefined: s ?? !1,
1958
1958
  onAnchor: u,
@@ -1995,14 +1995,14 @@ var nn = class e {
1995
1995
  let n;
1996
1996
  switch (e) {
1997
1997
  case "1.1":
1998
- this.directives ? this.directives.yaml.version = "1.1" : this.directives = new oe({ version: "1.1" }), n = {
1998
+ this.directives ? this.directives.yaml.version = "1.1" : this.directives = new se({ version: "1.1" }), n = {
1999
1999
  resolveKnownTags: !1,
2000
2000
  schema: "yaml-1.1"
2001
2001
  };
2002
2002
  break;
2003
2003
  case "1.2":
2004
2004
  case "next":
2005
- this.directives ? this.directives.yaml.version = e : this.directives = new oe({ version: e }), n = {
2005
+ this.directives ? this.directives.yaml.version = e : this.directives = new se({ version: e }), n = {
2006
2006
  resolveKnownTags: !0,
2007
2007
  schema: "core"
2008
2008
  };
@@ -2027,9 +2027,9 @@ var nn = class e {
2027
2027
  mapAsMap: n === !0,
2028
2028
  mapKeyWarned: !1,
2029
2029
  maxAliasCount: typeof r == "number" ? r : 100
2030
- }, s = F(this.contents, t ?? "", o);
2030
+ }, s = P(this.contents, t ?? "", o);
2031
2031
  if (typeof i == "function") for (let { count: e, res: t } of o.anchors.values()) i(t, e);
2032
- return typeof a == "function" ? P(a, { "": s }, "", s) : s;
2032
+ return typeof a == "function" ? N(a, { "": s }, "", s) : s;
2033
2033
  }
2034
2034
  toJSON(e, t) {
2035
2035
  return this.toJS({
@@ -2853,7 +2853,7 @@ var Wn = class {
2853
2853
  this.doc = null, this.atDirectives = !1, this.prelude = [], this.errors = [], this.warnings = [], this.onError = (e, t, n, r) => {
2854
2854
  let i = Hn(e);
2855
2855
  r ? this.warnings.push(new sn(i, t, n)) : this.errors.push(new on(i, t, n));
2856
- }, this.directives = new oe({ version: e.version || "1.2" }), this.options = e;
2856
+ }, this.directives = new se({ version: e.version || "1.2" }), this.options = e;
2857
2857
  }
2858
2858
  decorate(e, t) {
2859
2859
  let { comment: n, afterEmptyLine: r } = Un(this.prelude);
@@ -4394,8 +4394,8 @@ var kr = /* @__PURE__ */ a({
4394
4394
  parseAllDocuments: () => Tr,
4395
4395
  parseDocument: () => Er,
4396
4396
  stringify: () => Or,
4397
- visit: () => A,
4398
- visitAsync: () => ee
4397
+ visit: () => k,
4398
+ visitAsync: () => te
4399
4399
  }), Ar = {
4400
4400
  rawNodes: {
4401
4401
  address: {
@@ -7394,7 +7394,7 @@ function ui(e) {
7394
7394
  D[e] = J(D[e] || {}, t);
7395
7395
  });
7396
7396
  });
7397
- let O = p ? {
7397
+ let ee = p ? {
7398
7398
  ...p,
7399
7399
  fields: D
7400
7400
  } : null;
@@ -7408,7 +7408,7 @@ function ui(e) {
7408
7408
  nodeTemplate: u || null,
7409
7409
  treeTemplate: d || null,
7410
7410
  channelTemplate: E,
7411
- userTemplate: O
7411
+ userTemplate: ee
7412
7412
  };
7413
7413
  }
7414
7414
  //#endregion
@@ -7743,7 +7743,7 @@ X.get("/", async (e) => {
7743
7743
  `).all(...T), a = Array.isArray(i) ? i : a?.results || [];
7744
7744
  for (let e of a) D[e.nodeId] || (D[e.nodeId] = []), D[e.nodeId].includes(e.label) || D[e.nodeId].push(e.label);
7745
7745
  }
7746
- let O = await Promise.all(w.map(async (e) => {
7746
+ let ee = await Promise.all(w.map(async (e) => {
7747
7747
  let n = (e.status === "draft" || !e.status) && !!e.publishedAt, r = {
7748
7748
  id: e.id,
7749
7749
  title: e.title,
@@ -7771,9 +7771,9 @@ X.get("/", async (e) => {
7771
7771
  return r;
7772
7772
  }));
7773
7773
  return e.json({
7774
- items: O,
7774
+ items: ee,
7775
7775
  total: v,
7776
- hasMore: p + O.length < v,
7776
+ hasMore: p + ee.length < v,
7777
7777
  offset: p,
7778
7778
  limit: f
7779
7779
  });
@@ -8886,50 +8886,42 @@ Z.get("/", async (e) => {
8886
8886
  //#endregion
8887
8887
  //#region server/routes/public/node.ts
8888
8888
  var Ii = new e();
8889
- function Li(e, t) {
8890
- let n = /* @__PURE__ */ new Date();
8889
+ function Li() {
8890
+ return {
8891
+ fullPath: /* @__PURE__ */ new Map(),
8892
+ treeEdges: /* @__PURE__ */ new Map(),
8893
+ nodeSlugs: /* @__PURE__ */ new Map(),
8894
+ assetUrls: /* @__PURE__ */ new Map()
8895
+ };
8896
+ }
8897
+ function Ri(...e) {
8898
+ return e.map((e) => String(e ?? "")).join(":");
8899
+ }
8900
+ function zi(e, t) {
8901
+ let n = Date.now();
8891
8902
  if (e && String(e).trim() !== "") {
8892
- let t = new Date(e);
8893
- if (!isNaN(t.getTime()) && n < t) return !1;
8903
+ let t = Date.parse(e);
8904
+ if (!isNaN(t) && n < t) return !1;
8894
8905
  }
8895
8906
  if (t && String(t).trim() !== "") {
8896
- let e = new Date(t);
8897
- if (!isNaN(e.getTime()) && n > e) return !1;
8907
+ let e = Date.parse(t);
8908
+ if (!isNaN(e) && n > e) return !1;
8898
8909
  }
8899
8910
  return !0;
8900
8911
  }
8901
- async function Ri(e, t) {
8902
- if (!t || typeof t != "object") return t;
8903
- let n = { ...t };
8904
- for (let [t, r] of Object.entries(n)) if (typeof r == "string" && r.startsWith("ast_")) try {
8905
- let i = await e.prepare("SELECT * FROM assets WHERE id = ? AND deletedAt IS NULL").get(r);
8906
- if (i) {
8907
- let e = null;
8908
- if (i.cropCoordinatesJson) try {
8909
- e = typeof i.cropCoordinatesJson == "string" ? JSON.parse(i.cropCoordinatesJson) : i.cropCoordinatesJson;
8910
- } catch {}
8911
- n[t] = {
8912
- id: i.id,
8913
- url: i.cdnUrl || `/media/uploads/${i.filename}`,
8914
- originalUrl: i.cdnUrl || `/media/uploads/${i.filename}`,
8915
- parentAssetId: i.parentAssetId || null,
8916
- cropCoordinates: e,
8917
- filename: i.filename,
8918
- mimeType: i.mimeType
8919
- };
8920
- }
8921
- } catch {}
8922
- else typeof r == "object" && r && !Array.isArray(r) && !r.url && (n[t] = await Ri(e, r));
8923
- return n;
8924
- }
8925
- async function zi(e, t, n) {
8912
+ async function Bi(e, t, n) {
8926
8913
  let r = t.filter((e) => e.componentId === "content-feed" || e.componentId === "article-list");
8927
- for (let t of r) {
8914
+ await Promise.all(r.map(async (t) => {
8928
8915
  let r = t.data || {}, i = r.nodeType || "article", a = Number(r.limit) || 12, o = r.sortBy || "updatedAt", s = "FROM content_nodes WHERE contentType = ? AND isHidden = 0 AND (status = 'published' OR status IS NULL)", c = [i];
8929
8916
  n && n !== "all" && (s += " AND id IN (SELECT nodeId FROM node_channels WHERE channelId = ?)", c.push(Number(n) || n));
8930
8917
  let l = "ORDER BY updatedAt DESC";
8931
8918
  o === "published_desc" || o === "createdAt" ? l = "ORDER BY createdAt DESC" : o === "title_asc" && (l = "ORDER BY LOWER(title) ASC");
8932
- let u = `SELECT id, title, slug, language, dataJson, createdAt, updatedAt ${s} ${l} LIMIT ?`;
8919
+ let u = `
8920
+ SELECT id, title, slug, language, dataJson, createdAt, updatedAt
8921
+ ${s}
8922
+ ${l}
8923
+ LIMIT ?
8924
+ `;
8933
8925
  c.push(a);
8934
8926
  try {
8935
8927
  let n = await e.prepare(u).all(...c), r = Array.isArray(n) ? n : n?.results || [];
@@ -8938,7 +8930,7 @@ async function zi(e, t, n) {
8938
8930
  if (e.dataJson) try {
8939
8931
  t = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
8940
8932
  } catch {}
8941
- return Li(t.startShowingAt, t.stopShowingAt) ? {
8933
+ return zi(t.startShowingAt, t.stopShowingAt) ? {
8942
8934
  id: e.id,
8943
8935
  title: e.title,
8944
8936
  slug: e.slug,
@@ -8953,61 +8945,88 @@ async function zi(e, t, n) {
8953
8945
  } catch (e) {
8954
8946
  console.error("[CMS Hydration] Failed to hydrate content feed block", e), t.data.initialItems = [];
8955
8947
  }
8956
- }
8948
+ }));
8957
8949
  }
8958
- async function Bi(e, t, n, r, i = !1) {
8950
+ async function Vi(e, t, n, r, i = !1, a) {
8959
8951
  if (!t) return { blocks: [] };
8960
- let a = await e.prepare("\n WITH RECURSIVE ancestor_path(id, contentId, title, slug, parentId, level) AS (\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? OR c.id = ?\n UNION ALL\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n )\n SELECT * FROM ancestor_path ORDER BY level ASC\n ").all(t, t), o = Array.isArray(a) ? a : a?.results || [];
8961
- if (!o || o.length === 0) return { blocks: [] };
8962
- for (let t of o) {
8963
- let a = +!!i, o = await e.prepare("\n SELECT * FROM content_blocks \n WHERE contentId = ? AND isDraft = ?\n ORDER BY sortOrder ASC\n ").all(t.contentId, a), s = Array.isArray(o) ? o : o?.results || [];
8964
- if (s.length === 0 && !i && (o = await e.prepare("\n SELECT * FROM content_blocks \n WHERE contentId = ?\n ORDER BY sortOrder ASC\n ").all(t.contentId), s = Array.isArray(o) ? o : o?.results || []), s.filter((e) => e.region === n).length > 0) {
8965
- let a = /* @__PURE__ */ new Set([n]), o = !0;
8966
- for (; o;) {
8967
- o = !1;
8968
- for (let e of s) if (a.has(e.region)) {
8969
- let t = {};
8970
- try {
8971
- t = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
8972
- } catch {}
8973
- let n = String(e.id), r = String(t.blockId || t._instanceId || t.id || e.blockId);
8974
- for (let e of s) {
8975
- if (!e.region) continue;
8976
- let t = e.region;
8977
- a.has(t) || (t.startsWith(`${n}-`) || t.startsWith(`${n}_`) || r && r !== "undefined" && r !== "null" && (t.startsWith(`${r}-`) || t.startsWith(`${r}_`) || t.startsWith(r))) && (a.add(t), o = !0);
8978
- }
8979
- }
8980
- }
8981
- let c = {};
8982
- for (let t of s) {
8983
- if (!a.has(t.region)) continue;
8984
- let o = {};
8952
+ let o = await e.prepare("\n WITH RECURSIVE ancestor_path(id, contentId, title, slug, parentId, level) AS (\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? OR c.id = ?\n\n UNION ALL\n\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n )\n SELECT *\n FROM ancestor_path\n ORDER BY level ASC\n ").all(t, t), s = Array.isArray(o) ? o : o?.results || [];
8953
+ if (!s || s.length === 0) return { blocks: [] };
8954
+ let c = s.map((e) => e.contentId).filter((e) => e != null);
8955
+ if (c.length === 0) return { blocks: [] };
8956
+ let l = c.map(() => "?").join(","), u = +!!i, d = await e.prepare(`
8957
+ SELECT *
8958
+ FROM content_blocks
8959
+ WHERE contentId IN (${l})
8960
+ AND isDraft = ?
8961
+ ORDER BY contentId ASC, sortOrder ASC
8962
+ `).all(...c, u), f = Array.isArray(d) ? d : d?.results || [], p = [];
8963
+ if (!i) {
8964
+ let t = await e.prepare(`
8965
+ SELECT *
8966
+ FROM content_blocks
8967
+ WHERE contentId IN (${l})
8968
+ ORDER BY contentId ASC, sortOrder ASC
8969
+ `).all(...c);
8970
+ p = Array.isArray(t) ? t : t?.results || [];
8971
+ }
8972
+ let m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
8973
+ for (let e of f) {
8974
+ let t = String(e.contentId);
8975
+ m.has(t) || m.set(t, []), m.get(t).push(e);
8976
+ }
8977
+ for (let e of p) {
8978
+ let t = String(e.contentId);
8979
+ h.has(t) || h.set(t, []), h.get(t).push(e);
8980
+ }
8981
+ for (let t of s) {
8982
+ let a = m.get(String(t.contentId)) || [];
8983
+ if (a.length === 0 && !i && (a = h.get(String(t.contentId)) || []), a.filter((e) => e.region === n).length === 0) continue;
8984
+ let o = /* @__PURE__ */ new Set([n]), s = !0;
8985
+ for (; s;) {
8986
+ s = !1;
8987
+ for (let e of a) {
8988
+ if (!o.has(e.region)) continue;
8989
+ let t = {};
8985
8990
  try {
8986
- o = (typeof t.dataJson == "string" ? JSON.parse(t.dataJson) : t.dataJson) || {};
8991
+ t = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
8987
8992
  } catch {}
8988
- let s = o.hidden === !0 || o.hidden === 1 || o.hidden === "1" || o.hidden === "true", l = Li(o.startShowingAt, o.stopShowingAt);
8989
- if (!i && (s || !l)) continue;
8990
- let u = t.elementType || t.componentId || "text-block", d = r.blocks?.[u]?.fields || r.elements?.[u]?.fields || r.components?.[u]?.fields || {}, f = String(o.blockId || o._instanceId || o.id || t.blockId || t.id), p = Vi(o, d);
8991
- p = await si(e, p), p = await Ri(e, p), p = Hi(p), p.blockId = f;
8992
- let m = t.region || n;
8993
- c[m] || (c[m] = []), c[m].push({
8994
- instanceId: t.id,
8995
- blockId: f,
8996
- componentId: u,
8997
- data: p
8998
- });
8993
+ let n = String(e.id), r = String(t.blockId || t._instanceId || t.id || e.blockId);
8994
+ for (let e of a) {
8995
+ if (!e.region) continue;
8996
+ let t = e.region;
8997
+ o.has(t) || (t.startsWith(`${n}-`) || t.startsWith(`${n}_`) || r && r !== "undefined" && r !== "null" && (t.startsWith(`${r}-`) || t.startsWith(`${r}_`) || t.startsWith(r))) && (o.add(t), s = !0);
8998
+ }
8999
8999
  }
9000
- if (c[n] && c[n].length > 0) return {
9001
- blocks: c[n],
9002
- subRegions: c,
9003
- inheritedFromId: String(t.contentId),
9004
- inheritedFromTitle: t.title || t.slug
9005
- };
9006
9000
  }
9001
+ let c = await Promise.all(a.filter((e) => o.has(e.region)).map(async (t) => {
9002
+ let a = {};
9003
+ try {
9004
+ a = (typeof t.dataJson == "string" ? JSON.parse(t.dataJson) : t.dataJson) || {};
9005
+ } catch {}
9006
+ let o = a.hidden === !0 || a.hidden === 1 || a.hidden === "1" || a.hidden === "true", s = zi(a.startShowingAt, a.stopShowingAt);
9007
+ if (!i && (o || !s)) return null;
9008
+ let c = t.elementType || t.componentId || "text-block", l = r.blocks?.[c]?.fields || r.elements?.[c]?.fields || r.components?.[c]?.fields || {}, u = String(a.blockId || a._instanceId || a.id || t.blockId || t.id), d = Hi(a, l);
9009
+ return d = await si(e, d), d = Ui(d), d.blockId = u, {
9010
+ region: t.region || n,
9011
+ block: {
9012
+ instanceId: t.id,
9013
+ blockId: u,
9014
+ componentId: c,
9015
+ data: d
9016
+ }
9017
+ };
9018
+ })), l = {};
9019
+ for (let e of c) e && (l[e.region] || (l[e.region] = []), l[e.region].push(e.block));
9020
+ if (l[n] && l[n].length > 0) return {
9021
+ blocks: l[n],
9022
+ subRegions: l,
9023
+ inheritedFromId: String(t.contentId),
9024
+ inheritedFromTitle: t.title || t.slug
9025
+ };
9007
9026
  }
9008
9027
  return { blocks: [] };
9009
9028
  }
9010
- function Vi(e, t = {}) {
9029
+ function Hi(e, t = {}) {
9011
9030
  let n = {};
9012
9031
  for (let [r, i] of Object.entries(e)) {
9013
9032
  if (r.endsWith("_meta") || r === "disabledRegions" || r === "hidden" || r === "is_hidden" || r === "isHidden" || r === "status" || r === "startShowingAt" || r === "stopShowingAt" || r === "slug" || r === "title" || r === "id" || r.startsWith("_")) continue;
@@ -9016,14 +9035,14 @@ function Vi(e, t = {}) {
9016
9035
  }
9017
9036
  return n;
9018
9037
  }
9019
- function Hi(e) {
9020
- if (Array.isArray(e)) return e.map(Hi);
9038
+ function Ui(e) {
9039
+ if (Array.isArray(e)) return e.map(Ui);
9021
9040
  if (!e || typeof e != "object") return e;
9022
9041
  if (typeof e.id == "string" && e.id.startsWith("ast_") && typeof e.url == "string") {
9023
9042
  let t = e.metadataOverrides || {}, n = e.variants && typeof e.variants == "object" ? e.variants : {}, r = Object.entries(n).find(([, t]) => t?.id === e.id)?.[0], i = r ? {
9024
9043
  ...t,
9025
9044
  ...t.crops?.[r] || {}
9026
- } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, Hi({
9045
+ } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, Ui({
9027
9046
  ...n,
9028
9047
  title: n?.title ?? e.title ?? "",
9029
9048
  alt: n?.alt ?? e.alt ?? "",
@@ -9037,70 +9056,107 @@ function Hi(e) {
9037
9056
  ...Object.keys(a).length > 0 ? { variants: a } : {}
9038
9057
  };
9039
9058
  }
9040
- return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, Hi(t)]));
9059
+ return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, Ui(t)]));
9041
9060
  }
9042
- async function Ui(e, t) {
9061
+ async function Wi(e, t, n) {
9043
9062
  if (typeof t == "string") {
9044
9063
  if (!t.includes("#node:") && !t.includes("data-node-id") && !t.includes("#asset:") && !t.includes("data-asset-id")) return t;
9045
- let n = /* @__PURE__ */ new Set();
9046
- for (let e of t.matchAll(/(?:#node:|data-node-id=["'])([^"'\s>]+)/gi)) n.add(e[1]);
9047
- let r = /* @__PURE__ */ new Set();
9048
- for (let e of t.matchAll(/(?:#asset:|data-asset-id=["'])([^"'\s>]+)/gi)) r.add(e[1]);
9049
- if (n.size === 0 && r.size === 0) return t;
9050
- let i = Array.from(n).map(() => "?").join(","), a = n.size > 0 ? await e.prepare(`SELECT id, slug FROM content_nodes WHERE id IN (${i})`).all(...n) : [], o = /* @__PURE__ */ new Map();
9051
- for (let e of a || []) o.set(String(e.id), String(e.slug || "").replace(/^\/+|\/+$/g, ""));
9052
- let s = Array.from(r).map(() => "?").join(","), c = r.size > 0 ? await e.prepare("SELECT id, cdnUrl, storageKeyPrivate FROM assets WHERE id IN (" + s + ")").all(...r) : [], l = /* @__PURE__ */ new Map();
9053
- for (let e of c || []) l.set(String(e.id), e.cdnUrl || (e.storageKeyPrivate ? `/media/${e.storageKeyPrivate}` : ""));
9054
- let u = /* @__PURE__ */ new Map(), d = /<a\b([^>]*?)>/gi;
9055
- for (let n of t.matchAll(d)) {
9056
- let t = n[1], r = t.match(/data-node-id=["']([^"']+)["']/i), i = t.match(/data-tree-id=["']([^"']+)["']/i);
9057
- if (!r || !i) continue;
9058
- let a = await e.prepare("SELECT id as treeNodeId FROM tree_nodes WHERE contentId = ? AND treeId = ? LIMIT 1").get(r[1], i[1]);
9059
- a?.treeNodeId && u.set(`${r[1]}:${i[1]}`, await Ki(e, String(a.treeNodeId), i[1]));
9060
- }
9061
- return t.replace(d, (e, t) => {
9062
- let n = t.match(/data-node-id=["']([^"']+)["']/i), r = t.match(/data-asset-id=["']([^"']+)["']/i), i = t.match(/href=["']([^"']+)["']/i);
9063
- if (i?.[1].startsWith("mailto:")) return `<a${t.replace(/\s+target=["'][^"']*["']/i, "")}>`;
9064
- let a = i?.[1].match(/^#node:(.+)$/i), s = i?.[1].match(/^#asset:(.+)$/i), c = r?.[1] || s?.[1], d = n?.[1] || a?.[1];
9065
- if (!d && !c) return e;
9066
- if (c && !d) {
9067
- let n = l.get(c);
9068
- return n && i ? `<a${t.replace(/href=["'][^"']*["']/i, `href="${n}"`).replace(/data-asset-id=["'][^"']*["']/i, `data-asset-id="${c}"`)}>` : e;
9064
+ let r = (e, t) => {
9065
+ let n = e.match(RegExp(`\\b${t}\\s*=\\s*(["'])(.*?)\\1`, "i"));
9066
+ return n ? n[2] : void 0;
9067
+ }, i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set();
9068
+ for (let e of t.matchAll(/(?:#node:|data-node-id\s*=\s*["'])([^"'\s>]+)/gi)) i.add(e[1]);
9069
+ for (let e of t.matchAll(/(?:#asset:|data-asset-id\s*=\s*["'])([^"'\s>]+)/gi)) a.add(e[1]);
9070
+ if (i.size === 0 && a.size === 0) return t;
9071
+ let o = Array.from(i).map(() => "?").join(","), s = i.size > 0 ? await e.prepare(`
9072
+ SELECT id, slug
9073
+ FROM content_nodes
9074
+ WHERE id IN (${o})
9075
+ `).all(...i) : [], c = Array.isArray(s) ? s : s?.results || [], l = /* @__PURE__ */ new Map();
9076
+ for (let e of c) l.set(String(e.id), String(e.slug || "").replace(/^\/+|\/+$/g, ""));
9077
+ let u = Array.from(a).map(() => "?").join(","), d = a.size > 0 ? await e.prepare(`
9078
+ SELECT id, cdnUrl, storageKeyPrivate
9079
+ FROM assets
9080
+ WHERE id IN (${u})
9081
+ `).all(...a) : [], f = Array.isArray(d) ? d : d?.results || [], p = /* @__PURE__ */ new Map();
9082
+ for (let e of f) p.set(String(e.id), e.cdnUrl || (e.storageKeyPrivate ? `/media/${e.storageKeyPrivate}` : ""));
9083
+ let m = /* @__PURE__ */ new Map(), h = /<a\s+([^>]+)>/gi;
9084
+ return await Promise.all(Array.from(t.matchAll(h)).map(async (t) => {
9085
+ let i = t[1], a = r(i, "data-node-id"), o = r(i, "data-tree-id");
9086
+ if (!a || !o) return;
9087
+ let s = await Ki(e, a, o, n);
9088
+ if (s?.treeNodeId) {
9089
+ let t = await Xi(e, String(s.treeNodeId), o, n);
9090
+ m.set(`${a}:${o}`, t);
9069
9091
  }
9070
- let f = t.match(/data-tree-id=["']([^"']+)["']/i), p = d, m = f ? u.get(`${p}:${f[1]}`) : void 0, h = o.get(p), g = m || (h === void 0 ? "#" : `/${h}`);
9071
- return i ? `<a${t.replace(/href=["'][^"']*["']/i, `href="${g || "/"}"`)}>` : e;
9092
+ })), t.replace(h, (e, t) => {
9093
+ let n = r(t, "data-node-id"), i = r(t, "data-asset-id"), a = r(t, "href") || "";
9094
+ if (a.startsWith("mailto:")) return `<a ${t.replace(/\s+target\s*=\s*["'][^"']*["']/i, "")}>`;
9095
+ let o = a.match(/^#node:(.+)$/i), s = a.match(/^#asset:(.+)$/i), c = i || s?.[1], u = n || o?.[1];
9096
+ if (!u && !c) return e;
9097
+ if (c && !u) {
9098
+ let n = p.get(c);
9099
+ if (n) {
9100
+ let e = t;
9101
+ return /href\s*=\s*["'][^"']*["']/i.test(e) ? e = e.replace(/href\s*=\s*["'][^"']*["']/i, `href="${n}"`) : e += ` href="${n}"`, i || (e += ` data-asset-id="${c}"`), `<a ${e}>`;
9102
+ }
9103
+ return e;
9104
+ }
9105
+ let d = r(t, "data-tree-id"), f = d ? m.get(`${u}:${d}`) : void 0, h = l.get(u), g = f || (h === void 0 ? "#" : `/${h}`), _ = t;
9106
+ return /href\s*=\s*["'][^"']*["']/i.test(_) ? _ = _.replace(/href\s*=\s*["'][^"']*["']/i, `href="${g || "/"}"`) : _ += ` href="${g || "/"}"`, `<a ${_}>`;
9072
9107
  });
9073
9108
  }
9074
- if (Array.isArray(t)) return Promise.all(t.map((t) => Ui(e, t)));
9109
+ if (Array.isArray(t)) return Promise.all(t.map((t) => Wi(e, t, n)));
9075
9110
  if (t && typeof t == "object") {
9076
9111
  if (typeof t.href == "string" && (t.href.startsWith("#node:") || t.href.startsWith("#asset:"))) return {
9077
9112
  ...t,
9078
- href: await Wi(e, t)
9113
+ href: await Gi(e, t, n)
9079
9114
  };
9080
- let n = await Promise.all(Object.entries(t).map(async ([t, n]) => [t, await Ui(e, n)]));
9081
- return Object.fromEntries(n);
9115
+ let r = await Promise.all(Object.entries(t).map(async ([t, r]) => [t, await Wi(e, r, n)]));
9116
+ return Object.fromEntries(r);
9082
9117
  }
9083
9118
  return t;
9084
9119
  }
9085
- async function Wi(e, t) {
9086
- let n = t.href.match(/^#node:(.+)$/), r = t.href.match(/^#asset:(.+)$/);
9087
- if (r) {
9088
- let t = await e.prepare("SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?").get(r[1]);
9089
- return t?.cdnUrl || (t?.storageKeyPrivate ? `/media/${t.storageKeyPrivate}` : "#");
9090
- }
9091
- if (!n) return t.href;
9092
- let i = n[1];
9120
+ async function Gi(e, t, n) {
9121
+ let r = t.href.match(/^#node:(.+)$/), i = t.href.match(/^#asset:(.+)$/);
9122
+ if (i) return Ji(e, i[1], n);
9123
+ if (!r) return t.href;
9124
+ let a = r[1];
9093
9125
  if (t.treeId) {
9094
- let n = await e.prepare("SELECT id as treeNodeId FROM tree_nodes WHERE contentId = ? AND treeId = ? LIMIT 1").get(i, t.treeId);
9095
- if (n?.treeNodeId) {
9096
- let r = await Ki(e, String(n.treeNodeId), String(t.treeId));
9097
- if (r) return r;
9098
- }
9099
- }
9100
- let a = await e.prepare("SELECT slug FROM content_nodes WHERE id = ?").get(i);
9101
- return a?.slug ? `/${String(a.slug).replace(/^\/+|\/+$/g, "")}` : "#";
9102
- }
9103
- function Gi(e) {
9126
+ let r = await Ki(e, a, String(t.treeId), n);
9127
+ if (r?.treeNodeId) {
9128
+ let i = await Xi(e, String(r.treeNodeId), String(t.treeId), n);
9129
+ if (i) return i;
9130
+ }
9131
+ }
9132
+ let o = await qi(e, a, n);
9133
+ return o === void 0 ? "#" : `/${o}`;
9134
+ }
9135
+ async function Ki(e, t, n, r) {
9136
+ let i = Ri(t, n), a = r.treeEdges.get(i);
9137
+ if (a) return a;
9138
+ let o = e.prepare("\n SELECT id as treeNodeId\n FROM tree_nodes\n WHERE contentId = ?\n AND treeId = ?\n LIMIT 1\n ").get(t, n);
9139
+ return r.treeEdges.set(i, Promise.resolve(o)), o;
9140
+ }
9141
+ async function qi(e, t, n) {
9142
+ let r = String(t), i = n.nodeSlugs.get(r);
9143
+ if (i) return i;
9144
+ let a = (async () => {
9145
+ let n = await e.prepare("SELECT slug FROM content_nodes WHERE id = ?").get(t);
9146
+ return n?.slug ? String(n.slug).replace(/^\/+|\/+$/g, "") : void 0;
9147
+ })();
9148
+ return n.nodeSlugs.set(r, a), a;
9149
+ }
9150
+ async function Ji(e, t, n) {
9151
+ let r = String(t), i = n.assetUrls.get(r);
9152
+ if (i) return i;
9153
+ let a = (async () => {
9154
+ let n = await e.prepare("SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?").get(t);
9155
+ return n?.cdnUrl || (n?.storageKeyPrivate ? `/media/${n.storageKeyPrivate}` : "#");
9156
+ })();
9157
+ return n.assetUrls.set(r, a), a;
9158
+ }
9159
+ function Yi(e) {
9104
9160
  let t = e.socialImage;
9105
9161
  if (!t || typeof t != "object") return null;
9106
9162
  let n = (e, t) => {
@@ -9131,19 +9187,27 @@ function Gi(e) {
9131
9187
  ])
9132
9188
  };
9133
9189
  }
9134
- async function Ki(e, t, n) {
9190
+ async function Xi(e, t, n, r) {
9135
9191
  if (!t) return "";
9136
- let r = await e.prepare("\n WITH RECURSIVE ancestor_path(id, parentId, slug, level) AS (\n SELECT t.id, t.parentId, c.slug, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? AND t.treeId = ?\n UNION ALL\n SELECT t.id, t.parentId, c.slug, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n WHERE t.treeId = ?\n )\n SELECT slug FROM ancestor_path ORDER BY level DESC\n ").all(t, n, n), i = Array.isArray(r) ? r : r?.results || [], a = [];
9137
- for (let e of i) {
9138
- let t = (e.slug || "").replace(/^\/+|\/+$/g, "");
9139
- t === "home" || t === "homee" ? i.length === 1 && (a.length = 0) : t && a.push(t);
9192
+ let i = Ri(t, n);
9193
+ if (r) {
9194
+ let e = r.fullPath.get(i);
9195
+ if (e) return e;
9140
9196
  }
9141
- return "/" + a.join("/");
9197
+ let a = (async () => {
9198
+ let r = await e.prepare("\n WITH RECURSIVE ancestor_path(id, parentId, slug, level) AS (\n SELECT t.id, t.parentId, c.slug, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? AND t.treeId = ?\n\n UNION ALL\n\n SELECT t.id, t.parentId, c.slug, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n WHERE t.treeId = ?\n )\n SELECT slug\n FROM ancestor_path\n ORDER BY level DESC\n ").all(t, n, n), i = Array.isArray(r) ? r : r?.results || [], a = [];
9199
+ for (let e of i) {
9200
+ let t = (e.slug || "").replace(/^\/+|\/+$/g, "");
9201
+ t === "home" || t === "homee" ? i.length === 1 && (a.length = 0) : t && a.push(t);
9202
+ }
9203
+ return "/" + a.join("/");
9204
+ })();
9205
+ return r && r.fullPath.set(i, a), a;
9142
9206
  }
9143
- async function qi(e, t, n, r, i) {
9207
+ async function Zi(e, t, n, r, i) {
9144
9208
  let a = {}, o = null;
9145
9209
  if (t) {
9146
- let n = await e.prepare("\n WITH RECURSIVE ancestor_path(id, contentId, title, slug, parentId, level) AS (\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? OR c.id = ?\n UNION ALL\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n )\n SELECT c.dataJson, c.draftDataJson \n FROM ancestor_path ap\n INNER JOIN content_nodes c ON ap.contentId = c.id\n ORDER BY ap.level ASC\n ").all(t, t), i = Array.isArray(n) ? n : n?.results || [], s = /* @__PURE__ */ new Set([
9210
+ let n = await e.prepare("\n WITH RECURSIVE ancestor_path(id, contentId, title, slug, parentId, level) AS (\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, 0\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.id = ? OR c.id = ?\n\n UNION ALL\n\n SELECT t.id, t.contentId, c.title, c.slug, t.parentId, ap.level + 1\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n INNER JOIN ancestor_path ap ON t.id = ap.parentId\n )\n SELECT c.dataJson, c.draftDataJson\n FROM ancestor_path ap\n INNER JOIN content_nodes c ON ap.contentId = c.id\n ORDER BY ap.level ASC\n ").all(t, t), i = Array.isArray(n) ? n : n?.results || [], s = /* @__PURE__ */ new Set([
9147
9211
  "subpageLayoutId",
9148
9212
  "layoutId",
9149
9213
  "slug",
@@ -9168,7 +9232,7 @@ async function qi(e, t, n, r, i) {
9168
9232
  }
9169
9233
  if (!o) {
9170
9234
  let t = await e.prepare("SELECT dataJson FROM trees WHERE id = ?").get(n);
9171
- if (t && t.dataJson) try {
9235
+ if (t?.dataJson) try {
9172
9236
  let e = typeof t.dataJson == "string" ? JSON.parse(t.dataJson) : t.dataJson;
9173
9237
  e.subpageLayoutId && e.subpageLayoutId !== "inherit" && (o = e.subpageLayoutId);
9174
9238
  } catch {}
@@ -9178,114 +9242,142 @@ async function qi(e, t, n, r, i) {
9178
9242
  inheritedFields: a
9179
9243
  };
9180
9244
  }
9245
+ function Qi(e) {
9246
+ let t = Number(e?.env?.CMS_NODE_CACHE_TTL);
9247
+ return Number.isFinite(t) && t >= 60 ? Math.floor(t) : 300;
9248
+ }
9249
+ async function $i(e, t, n, r) {
9250
+ try {
9251
+ await e.set(t, n, r);
9252
+ } catch (e) {
9253
+ console.warn("[CMS Cache] Failed to write node response to cache:", e);
9254
+ }
9255
+ }
9181
9256
  Ii.get("/*", async (e) => {
9182
9257
  try {
9183
- let t = e.get("db"), n = new URL(e.req.url).pathname.match(/\/node\/(.+)$/), r = (n ? n[1] : "home").replace(/^\/+|\/+$/g, ""), i = e.req.query("channelId") || e.req.query("channel") || "1", a = e.req.query("lang") || "en", o = e.req.query("preview") === "true", s = isNaN(Number(i)) ? await t.prepare("SELECT * FROM channels WHERE key = ?").get(i) : await t.prepare("SELECT * FROM channels WHERE id = ?").get(Number(i));
9184
- if (!s) return e.json({ error: `Channel '${i}' not found` }, 404);
9185
- let c = s.status === "disabled" || s.status === "inactive" || s.isEnabled === 0 || s.isEnabled === !1;
9186
- if (!o && c) return e.json({ error: `Channel '${s.key || i}' is currently inactive` }, 404);
9187
- let l = s.id, u = s.key || i, d = q(e), f = `node:${l || u}:${a}:${r}`;
9188
- if (!o) {
9189
- let t = await d.get(f);
9258
+ let t = e.get("db"), n = Li(), r = new URL(e.req.url).pathname.match(/\/node\/(.+)$/), i = (r ? r[1] : "home").replace(/^\/+|\/+$/g, ""), a = e.req.query("channelId") || e.req.query("channel") || "1", o = e.req.query("lang") || "en", s = e.req.query("preview") === "true", c = isNaN(Number(a)) ? await t.prepare("SELECT * FROM channels WHERE key = ?").get(a) : await t.prepare("SELECT * FROM channels WHERE id = ?").get(Number(a));
9259
+ if (!c) return e.json({ error: `Channel '${a}' not found` }, 404);
9260
+ let l = c.status === "disabled" || c.status === "inactive" || c.isEnabled === 0 || c.isEnabled === !1;
9261
+ if (!s && l) return e.json({ error: `Channel '${c.key || a}' is currently inactive` }, 404);
9262
+ let u = c.id, d = c.key || a, f = q(e), p = `node:${u || d}:${o}:${i}`;
9263
+ if (!s) {
9264
+ let t = await f.get(p);
9190
9265
  if (t) return e.header("X-Cache", "HIT"), e.json(t);
9191
9266
  }
9192
- let p = ui(e.env?.BUNDLED_DEFINITIONS), m = !isNaN(Number(r)) && r.length > 0, h = null, g = null, _ = e.req.query("treeId");
9193
- if (m) h = l === null ? await t.prepare("SELECT * FROM content_nodes WHERE id = ?").get(Number(r)) : await t.prepare("\n SELECT cn.* \n FROM content_nodes cn\n INNER JOIN node_channels nc ON cn.id = nc.nodeId\n WHERE cn.id = ? AND nc.channelId = ?\n ").get(Number(r), l);
9267
+ let m = ui(e.env?.BUNDLED_DEFINITIONS), h = !isNaN(Number(i)) && i.length > 0, g = null, _ = null, v = e.req.query("treeId");
9268
+ if (h) g = u === null ? await t.prepare("SELECT * FROM content_nodes WHERE id = ?").get(Number(i)) : await t.prepare("\n SELECT cn.*\n FROM content_nodes cn\n INNER JOIN node_channels nc\n ON cn.id = nc.nodeId\n WHERE cn.id = ?\n AND nc.channelId = ?\n ").get(Number(i), u);
9194
9269
  else {
9195
- let e = r.split("/"), n = e[e.length - 1], i = "/" + r.replace(/^\/+|\/+$/g, ""), a = `
9196
- SELECT cn.*, tn.id as treeNodeId, tn.parentId, tn.treeId
9270
+ let e = i.split("/"), r = e[e.length - 1], a = "/" + i.replace(/^\/+|\/+$/g, ""), o = `
9271
+ SELECT
9272
+ cn.*,
9273
+ tn.id as treeNodeId,
9274
+ tn.parentId,
9275
+ tn.treeId
9197
9276
  FROM content_nodes cn
9198
- INNER JOIN tree_nodes tn ON cn.id = tn.contentId
9199
- ${l === null ? "" : "INNER JOIN node_channels nc ON cn.id = nc.nodeId"}
9200
- WHERE cn.slug = ? ${l === null ? "" : "AND nc.channelId = ?"}
9201
- `, o = l === null ? [n] : [n, l], s = await t.prepare(a).all(...o), c = Array.isArray(s) ? s : s?.results || [];
9202
- if (c.length > 0) for (let e of c) {
9203
- let n = (await Ki(t, e.treeNodeId, e.treeId)).replace(/^\/+|\/+$/g, ""), r = i.replace(/^\/+|\/+$/g, "");
9204
- if (n === r || r === "home" && (n === "" || n === "home")) {
9205
- h = e, g = e;
9206
- break;
9277
+ INNER JOIN tree_nodes tn
9278
+ ON cn.id = tn.contentId
9279
+ ${u === null ? "" : "INNER JOIN node_channels nc ON cn.id = nc.nodeId"}
9280
+ WHERE cn.slug = ?
9281
+ ${u === null ? "" : "AND nc.channelId = ?"}
9282
+ `, s = u === null ? [r] : [r, u], c = await t.prepare(o).all(...s), l = Array.isArray(c) ? c : c?.results || [];
9283
+ if (l.length > 0) {
9284
+ let e = await Promise.all(l.map(async (e) => ({
9285
+ candidate: e,
9286
+ calculatedPath: await Xi(t, String(e.treeNodeId), String(e.treeId), n)
9287
+ }))), r = a.replace(/^\/+|\/+$/g, "");
9288
+ for (let { candidate: t, calculatedPath: n } of e) {
9289
+ let e = n.replace(/^\/+|\/+$/g, "");
9290
+ if (e === r || r === "home" && (e === "" || e === "home")) {
9291
+ g = t, _ = t;
9292
+ break;
9293
+ }
9207
9294
  }
9208
9295
  }
9209
- !h && e.length === 1 && (h = l === null ? await t.prepare("SELECT * FROM content_nodes WHERE slug = ?").get(n) : await t.prepare("\n SELECT cn.* FROM content_nodes cn\n INNER JOIN node_channels nc ON cn.id = nc.nodeId\n WHERE cn.slug = ? AND nc.channelId = ?\n ").get(n, l));
9210
- }
9211
- if (!h) return e.json({ error: `Node '${r}' not found for Channel '${i}'` }, 404);
9212
- if (!g) {
9213
- let e = _ ? [h.id, _] : [h.id];
9214
- g = await t.prepare(`
9215
- SELECT id as treeNodeId, treeId, parentId
9216
- FROM tree_nodes
9217
- WHERE contentId = ? ${_ ? "AND treeId = ?" : ""}
9218
- LIMIT 1
9219
- `).get(...e);
9220
- }
9221
- let v = g?.treeId || _ || "main-nav", y = g?.parentId || null, b = g?.treeNodeId ? await Ki(t, g.treeNodeId, v) : `/${(h.slug || "").replace(/^\/+|\/+$/g, "")}`, x = {
9222
- id: h.id,
9223
- title: h.title,
9224
- slug: h.slug,
9225
- language: h.language || a || "en",
9226
- path: b === "" ? "/" : b,
9227
- nodeType: h.contentType,
9228
- createdAt: h.createdAt,
9229
- updatedAt: h.updatedAt
9230
- }, S = h.contentType || "node", C = p.nodes?.[S] || Object.values(p.nodes || {})[0] || {}, w = { ...C.fields || {} };
9231
- C.tabs && Object.values(C.tabs).forEach((e) => {
9232
- Object.assign(w, e.fields || {});
9296
+ !g && e.length === 1 && (g = u === null ? await t.prepare("SELECT * FROM content_nodes WHERE slug = ?").get(r) : await t.prepare("\n SELECT cn.*\n FROM content_nodes cn\n INNER JOIN node_channels nc\n ON cn.id = nc.nodeId\n WHERE cn.slug = ?\n AND nc.channelId = ?\n ").get(r, u));
9297
+ }
9298
+ if (!g) return e.json({ error: `Node '${i}' not found for Channel '${a}'` }, 404);
9299
+ if (!_) {
9300
+ let e = v ? [g.id, v] : [g.id];
9301
+ _ = await t.prepare(`
9302
+ SELECT
9303
+ id as treeNodeId,
9304
+ treeId,
9305
+ parentId
9306
+ FROM tree_nodes
9307
+ WHERE contentId = ?
9308
+ ${v ? "AND treeId = ?" : ""}
9309
+ LIMIT 1
9310
+ `).get(...e);
9311
+ }
9312
+ let y = _?.treeId || v || "main-nav", b = _?.parentId || null, x = _?.treeNodeId ? await Xi(t, String(_.treeNodeId), String(y), n) : `/${(g.slug || "").replace(/^\/+|\/+$/g, "")}`, S = {
9313
+ id: g.id,
9314
+ title: g.title,
9315
+ slug: g.slug,
9316
+ language: g.language || o || "en",
9317
+ path: x === "" ? "/" : x,
9318
+ nodeType: g.contentType,
9319
+ createdAt: g.createdAt,
9320
+ updatedAt: g.updatedAt
9321
+ }, C = g.contentType || "node", w = m.nodes?.[C] || Object.values(m.nodes || {})[0] || {}, T = { ...w.fields || {} };
9322
+ w.tabs && Object.values(w.tabs).forEach((e) => {
9323
+ Object.assign(T, e.fields || {});
9233
9324
  });
9234
- let T = {}, E = null, D = null, O = !1, k = {}, A = o && h.draftDataJson ? h.draftDataJson : h.dataJson || h.draftDataJson;
9325
+ let E = {}, D = null, ee = null, O = !1, k = {}, A = s && g.draftDataJson ? g.draftDataJson : g.dataJson || g.draftDataJson;
9235
9326
  if (A) try {
9236
9327
  k = typeof A == "string" ? JSON.parse(A) : A;
9237
9328
  } catch {}
9238
- k.disabledRegions && (T = k.disabledRegions), O = k.hidden === !0 || k.hidden === 1 || k.hidden === "1" || k.hidden === "true", E = k.startShowingAt || null, D = k.stopShowingAt || null;
9239
- let j = k.layoutId, ee = j && j !== "inherit", { resolvedLayoutId: te, inheritedFields: ne } = await qi(t, y, v, o, w), re = ee ? j : te || C.defaultLayout || null;
9240
- for (let [e, t] of Object.entries(ne)) (k[e] === void 0 || k[e] === null || k[e] === "" || k[e] === "inherit") && t !== void 0 && (k[e] = t);
9241
- let M = await si(t, Vi(k, w));
9242
- M = await Ri(t, M), M = Hi(M), M = await Ui(t, M);
9243
- let ie = Gi(M);
9244
- delete M.socialImage, delete M.fbImage, delete M.xImage, delete M.whatsappImage, ie && (M.socialImages = ie), x.slug = h.slug, x.title = h.title, Object.assign(x, M), x.layoutId = re;
9245
- let ae = !!h.isHidden || O, oe = !Li(E, D);
9246
- if (!o && (ae || oe)) return e.json({ error: "Node is hidden or outside its scheduled publishing window" }, 404);
9247
- let se = [];
9248
- if (g?.treeNodeId) {
9249
- let e = await t.prepare("\n SELECT t.id as treeNodeId, t.contentId as id, c.title, c.slug, c.language, c.contentType as nodeType, c.isHidden, c.dataJson, c.draftDataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.parentId = ? AND t.treeId = ?\n ORDER BY t.sortOrder ASC\n ").all(g.treeNodeId, v), n = Array.isArray(e) ? e : e?.results || [], r = x.path === "/" ? "" : x.path;
9250
- se = n.map((e) => {
9251
- let t = {}, n = o && e.draftDataJson ? e.draftDataJson : e.dataJson;
9329
+ k.disabledRegions && (E = k.disabledRegions), O = k.hidden === !0 || k.hidden === 1 || k.hidden === "1" || k.hidden === "true", D = k.startShowingAt || null, ee = k.stopShowingAt || null;
9330
+ let te = k.layoutId, ne = te && te !== "inherit", { resolvedLayoutId: re, inheritedFields: ie } = await Zi(t, b, y, s, T), ae = ne ? te : re || w.defaultLayout || null;
9331
+ for (let [e, t] of Object.entries(ie)) (k[e] === void 0 || k[e] === null || k[e] === "" || k[e] === "inherit") && t !== void 0 && (k[e] = t);
9332
+ let j = await si(t, Hi(k, T));
9333
+ j = Ui(j), j = await Wi(t, j, n);
9334
+ let oe = Yi(j);
9335
+ delete j.socialImage, delete j.fbImage, delete j.xImage, delete j.whatsappImage, oe && (j.socialImages = oe), S.slug = g.slug, S.title = g.title, Object.assign(S, j), S.layoutId = ae;
9336
+ let se = !!g.isHidden || O, ce = !zi(D, ee);
9337
+ if (!s && (se || ce)) return e.json({ error: "Node is hidden or outside its scheduled publishing window" }, 404);
9338
+ let le = [];
9339
+ if (_?.treeNodeId) {
9340
+ let e = await t.prepare("\n SELECT\n t.id as treeNodeId,\n t.contentId as id,\n c.title,\n c.slug,\n c.language,\n c.contentType as nodeType,\n c.isHidden,\n c.dataJson,\n c.draftDataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c\n ON t.contentId = c.id\n WHERE t.parentId = ?\n AND t.treeId = ?\n ORDER BY t.sortOrder ASC\n ").all(_.treeNodeId, y), n = Array.isArray(e) ? e : e?.results || [], r = S.path === "/" ? "" : S.path;
9341
+ le = n.map((e) => {
9342
+ let t = {}, n = s && e.draftDataJson ? e.draftDataJson : e.dataJson;
9252
9343
  try {
9253
9344
  t = (typeof n == "string" ? JSON.parse(n) : n) || {};
9254
9345
  } catch {}
9255
- let i = !!e.isHidden || t.hidden === !0 || t.hidden === 1 || t.hidden === "1", a = Li(t.startShowingAt, t.stopShowingAt), s = (e.slug || "").replace(/^\/+|\/+$/g, "");
9256
- return !o && (i || !a) ? null : {
9346
+ let i = !!e.isHidden || t.hidden === !0 || t.hidden === 1 || t.hidden === "1", a = zi(t.startShowingAt, t.stopShowingAt), o = (e.slug || "").replace(/^\/+|\/+$/g, "");
9347
+ return !s && (i || !a) ? null : {
9257
9348
  treeNodeId: e.treeNodeId,
9258
9349
  id: e.id,
9259
9350
  title: e.title,
9260
- slug: s,
9351
+ slug: o,
9261
9352
  language: e.language || "en",
9262
- path: `${r}/${s}`.replace(/\/+/g, "/"),
9353
+ path: `${r}/${o}`.replace(/\/+/g, "/"),
9263
9354
  nodeType: e.nodeType
9264
9355
  };
9265
9356
  }).filter(Boolean);
9266
9357
  }
9267
- x.children = se;
9268
- let ce = +!!o, N = await t.prepare("\n SELECT * FROM content_blocks \n WHERE contentId = ? AND isDraft = ? \n ORDER BY sortOrder ASC\n ").all(h.id, ce), le = Array.isArray(N) ? N : N?.results || [];
9269
- le.length === 0 && !o && (N = await t.prepare("\n SELECT * FROM content_blocks \n WHERE contentId = ?\n ORDER BY sortOrder ASC\n ").all(h.id), le = Array.isArray(N) ? N : N?.results || []);
9270
- let P = {}, F = {};
9271
- for (let e of le) {
9272
- let n = e.region || "main";
9273
- P[n] || (P[n] = [], F[n] = { isInherited: !1 });
9274
- let r = {};
9358
+ S.children = le;
9359
+ let ue = +!!s, M = await t.prepare("\n SELECT *\n FROM content_blocks\n WHERE contentId = ?\n AND isDraft = ?\n ORDER BY sortOrder ASC\n ").all(g.id, ue), N = Array.isArray(M) ? M : M?.results || [];
9360
+ N.length === 0 && !s && (M = await t.prepare("\n SELECT *\n FROM content_blocks\n WHERE contentId = ?\n ORDER BY sortOrder ASC\n ").all(g.id), N = Array.isArray(M) ? M : M?.results || []);
9361
+ let P = {}, F = {}, de = await Promise.all(N.map(async (e) => {
9362
+ let r = e.region || "main", i = {};
9275
9363
  try {
9276
- r = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
9364
+ i = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
9277
9365
  } catch {}
9278
- let i = r.hidden === !0 || r.hidden === 1 || r.hidden === "1" || r.hidden === "true", a = Li(r.startShowingAt, r.stopShowingAt);
9279
- if (!o && (i || !a)) continue;
9280
- let s = e.elementType || e.componentId || "text-block", c = p.blocks?.[s]?.fields || p.elements?.[s]?.fields || p.components?.[s]?.fields || {}, l = String(r.blockId || r._instanceId || r.id || e.blockId || e.id), u = Vi(r, c);
9281
- u = await si(t, u), u = Hi(u), u = await Ui(t, u), u.blockId = l, P[n].push({
9282
- instanceId: e.id,
9283
- blockId: l,
9284
- componentId: s,
9285
- data: u
9286
- });
9287
- }
9288
- let ue = {
9366
+ let a = i.hidden === !0 || i.hidden === 1 || i.hidden === "1" || i.hidden === "true", o = zi(i.startShowingAt, i.stopShowingAt);
9367
+ if (!s && (a || !o)) return null;
9368
+ let c = e.elementType || e.componentId || "text-block", l = m.blocks?.[c]?.fields || m.elements?.[c]?.fields || m.components?.[c]?.fields || {}, u = String(i.blockId || i._instanceId || i.id || e.blockId || e.id), d = Hi(i, l);
9369
+ return d = await si(t, d), d = Ui(d), d = await Wi(t, d, n), d.blockId = u, {
9370
+ region: r,
9371
+ block: {
9372
+ instanceId: e.id,
9373
+ blockId: u,
9374
+ componentId: c,
9375
+ data: d
9376
+ }
9377
+ };
9378
+ }));
9379
+ for (let e of de) e && (P[e.region] || (P[e.region] = [], F[e.region] = { isInherited: !1 }), P[e.region].push(e.block));
9380
+ let fe = {
9289
9381
  header: {
9290
9382
  label: "Header",
9291
9383
  inherit: "parent"
@@ -9294,44 +9386,46 @@ Ii.get("/*", async (e) => {
9294
9386
  label: "Footer",
9295
9387
  inherit: "parent"
9296
9388
  },
9297
- ...(re ? p.nodeLayouts?.[re] || p.layouts?.[re] : null)?.regions || { main: { label: "Content" } }
9389
+ ...(ae ? m.nodeLayouts?.[ae] || m.layouts?.[ae] : null)?.regions || { main: { label: "Content" } }
9298
9390
  };
9299
- for (let [e, n] of Object.entries(ue)) {
9300
- let r = P[e] && P[e].length > 0, i = !!T[e];
9301
- if (P[e] || (P[e] = [], F[e] = { isInherited: !1 }), (n?.inherit === "parent" || n?.inherit === !0 || n?.inherit === "true" || e === "header" || e === "footer") && !r && !i && y) {
9302
- let n = await Bi(t, y, e, p, o);
9303
- if (n.blocks.length > 0 && (P[e] = n.blocks, F[e] = {
9391
+ for (let [e, r] of Object.entries(fe)) {
9392
+ let i = P[e] && P[e].length > 0, a = !!E[e];
9393
+ if (P[e] || (P[e] = [], F[e] = { isInherited: !1 }), (r?.inherit === "parent" || r?.inherit === !0 || r?.inherit === "true" || e === "header" || e === "footer") && !i && !a && b) {
9394
+ let r = await Vi(t, b, e, m, s, n);
9395
+ if (r.blocks.length > 0 && (P[e] = r.blocks, F[e] = {
9304
9396
  isInherited: !0,
9305
- inheritedFromId: n.inheritedFromId,
9306
- inheritedFromTitle: n.inheritedFromTitle
9307
- }, n.subRegions)) for (let [t, r] of Object.entries(n.subRegions)) t !== e && (P[t] = r, F[t] = {
9397
+ inheritedFromId: r.inheritedFromId,
9398
+ inheritedFromTitle: r.inheritedFromTitle
9399
+ }, r.subRegions)) for (let [t, n] of Object.entries(r.subRegions)) t !== e && (P[t] = n, F[t] = {
9308
9400
  isInherited: !0,
9309
- inheritedFromId: n.inheritedFromId,
9310
- inheritedFromTitle: n.inheritedFromTitle
9401
+ inheritedFromId: r.inheritedFromId,
9402
+ inheritedFromTitle: r.inheritedFromTitle
9311
9403
  });
9312
9404
  }
9313
9405
  }
9314
- for (let e of Object.keys(P)) await zi(t, P[e], l);
9315
- let de = {
9316
- channelId: l || u,
9317
- treeId: v,
9318
- language: x.language,
9319
- node: x,
9406
+ await Promise.all(Object.keys(P).map((e) => Bi(t, P[e], u)));
9407
+ let pe = {
9408
+ channelId: u || d,
9409
+ treeId: y,
9410
+ language: S.language,
9411
+ node: S,
9320
9412
  content: P,
9321
9413
  regionMeta: F
9322
9414
  };
9323
- return o || (await d.set(f, de, 300), e.header("X-Cache", "MISS")), e.json(de);
9415
+ return s || (e.header("X-Cache", "MISS"), await $i(f, p, pe, Qi(e))), e.json(pe);
9324
9416
  } catch (t) {
9325
- return console.error("[CMS Public API] Error fetching node by path:", t), e.json({
9417
+ console.error("[CMS Public API] Error fetching node by path:", t);
9418
+ let n = e.env?.ENVIRONMENT === "development";
9419
+ return e.json({
9326
9420
  error: "Failed to fetch JSON payload",
9327
- details: t.message
9421
+ ...n ? { details: t.message } : {}
9328
9422
  }, 500);
9329
9423
  }
9330
9424
  });
9331
9425
  //#endregion
9332
9426
  //#region server/routes/public/tree.ts
9333
- var Ji = new e();
9334
- function Yi(e, t) {
9427
+ var ea = new e();
9428
+ function ta(e, t) {
9335
9429
  let n = /* @__PURE__ */ new Date();
9336
9430
  if (e && String(e).trim() !== "") {
9337
9431
  let t = new Date(e);
@@ -9343,7 +9437,14 @@ function Yi(e, t) {
9343
9437
  }
9344
9438
  return !0;
9345
9439
  }
9346
- Ji.get("/:treeParam", async (e) => {
9440
+ async function na(e, t, n, r) {
9441
+ try {
9442
+ await e.set(t, n, r);
9443
+ } catch (e) {
9444
+ console.warn("[CMS Cache] Failed to write tree response to cache:", e);
9445
+ }
9446
+ }
9447
+ ea.get("/:treeParam", async (e) => {
9347
9448
  try {
9348
9449
  let t = e.get("db"), n = e.req.param("treeParam"), r = e.req.query("channelId") || e.req.query("channel") || "default", i = e.req.query("preview") === "true";
9349
9450
  if (r && r !== "default" && r !== "all") {
@@ -9369,20 +9470,35 @@ Ji.get("/:treeParam", async (e) => {
9369
9470
  }
9370
9471
  let d = [];
9371
9472
  if (l !== null) {
9372
- let e = await t.prepare("\n SELECT \n t.id as treeNodeId,\n t.treeId,\n t.contentId as id,\n t.parentId,\n t.sortOrder,\n c.title,\n c.slug,\n c.language,\n c.contentType as nodeType,\n c.isHidden,\n c.status,\n c.dataJson,\n c.draftDataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.treeId = ? AND (c.deletedAt IS NULL OR c.deletedAt = '')\n ORDER BY t.sortOrder ASC\n ").all(l);
9473
+ let e = await t.prepare("\n SELECT \n t.id as treeNodeId,\n t.treeId,\n t.contentId as id,\n t.parentId,\n t.sortOrder,\n c.title,\n c.slug,\n c.language,\n c.contentType as nodeType,\n c.isHidden,\n c.status,\n c.dataJson,\n c.draftDataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE t.treeId = ? AND (c.deletedAt IS NULL OR c.deletedAt = '')\n ORDER BY t.sortOrder ASC\n ").all(l);
9373
9474
  d = Array.isArray(e) ? e : e?.results || [];
9374
9475
  }
9375
9476
  if ((!d || d.length === 0) && !c) return e.json({ error: `Tree '${n}' not found` }, 404);
9376
- function f(e = null, t = "") {
9377
- return (d || []).filter((t) => {
9378
- let n = !t.parentId || t.parentId === "null" || t.parentId === "" ? null : t.parentId;
9379
- return String(n) === String(!e || e === "null" || e === "" ? null : e);
9380
- }).map((e) => {
9381
- let n = {}, r = i && e.draftDataJson ? e.draftDataJson : e.dataJson;
9382
- if (r) try {
9383
- n = typeof r == "string" ? JSON.parse(r) : r, delete n._isTreeDraft, delete n._draftParentId, delete n.isNew, delete n.hidden, delete n.is_hidden, delete n.isHidden, delete n.status;
9384
- } catch {}
9385
- let a = !i && (e.status === "draft" || e.status === "new"), o = !!e.isHidden || a || n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", s = Yi(n.startShowingAt, n.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, ""), l = c === "home" || c === "homee" ? "/" : `${t}/${c}`.replace(/\/+/g, "/"), u = {
9477
+ let f = /* @__PURE__ */ new Map();
9478
+ for (let e of d) {
9479
+ let t = !e.parentId || e.parentId === "null" || e.parentId === "" ? null : e.parentId, n = t === null ? "__ROOT__" : String(t), r = f.get(n);
9480
+ r ? r.push(e) : f.set(n, [e]);
9481
+ }
9482
+ let p = /* @__PURE__ */ new Map();
9483
+ for (let e of d) {
9484
+ let t = String(e.treeNodeId), n = i && e.draftDataJson ? e.draftDataJson : e.dataJson;
9485
+ if (!n) {
9486
+ p.set(t, {});
9487
+ continue;
9488
+ }
9489
+ try {
9490
+ let e = typeof n == "string" ? JSON.parse(n) : n;
9491
+ p.set(t, e && typeof e == "object" ? e : {});
9492
+ } catch {
9493
+ p.set(t, {});
9494
+ }
9495
+ }
9496
+ function m(e = null, t = "") {
9497
+ let n = e == null || e === "" || e === "null" ? "__ROOT__" : String(e);
9498
+ return (f.get(n) || []).map((e) => {
9499
+ let n = p.get(String(e.treeNodeId)) || {}, r = {};
9500
+ for (let [e, t] of Object.entries(n)) e !== "_isTreeDraft" && e !== "_draftParentId" && e !== "isNew" && e !== "hidden" && e !== "is_hidden" && e !== "isHidden" && e !== "status" && (r[e] = t);
9501
+ let a = !i && (e.status === "draft" || e.status === "new"), o = !!e.isHidden || a || n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", s = ta(n.startShowingAt, n.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, ""), l = c === "home" || c === "homee" ? "/" : `${t}/${c}`.replace(/\/+/g, "/"), u = {
9386
9502
  id: e.id,
9387
9503
  treeNodeId: e.treeNodeId,
9388
9504
  parentId: e.parentId || null,
@@ -9392,22 +9508,22 @@ Ji.get("/:treeParam", async (e) => {
9392
9508
  path: l,
9393
9509
  nodeType: e.nodeType,
9394
9510
  hidden: o || !s ? 1 : 0,
9395
- summary: n.summary || ""
9511
+ summary: r.summary || ""
9396
9512
  };
9397
- e.nodeType === "external-link" && (n.url && (u.url = n.url), n.target && (u.target = n.target));
9513
+ e.nodeType === "external-link" && (r.url && (u.url = r.url), r.target && (u.target = r.target));
9398
9514
  let d = l === "/" ? "" : l;
9399
- return u.children = f(e.treeNodeId, d), u;
9515
+ return u.children = m(e.treeNodeId, d), u;
9400
9516
  }).filter((e) => i || !e.hidden);
9401
9517
  }
9402
- let p = {
9518
+ let h = {
9403
9519
  treeId: c?.id || l,
9404
9520
  key: c?.key || n,
9405
9521
  channelId: r,
9406
9522
  label: c?.label || n,
9407
9523
  ...u,
9408
- items: f(null)
9524
+ items: m(null)
9409
9525
  };
9410
- return i || (await a.set(o, p, 300), e.header("X-Cache", "MISS")), e.json(p);
9526
+ return i || (e.header("X-Cache", "MISS"), await na(a, o, h, 300)), e.json(h);
9411
9527
  } catch (t) {
9412
9528
  return console.error("[CMS Public Tree API] Error:", t), e.json({
9413
9529
  error: "Failed to fetch public tree",
@@ -9417,8 +9533,8 @@ Ji.get("/:treeParam", async (e) => {
9417
9533
  });
9418
9534
  //#endregion
9419
9535
  //#region server/routes/public/assets.ts
9420
- var Xi = new e();
9421
- function Zi(e, t) {
9536
+ var ra = new e();
9537
+ function ia(e, t) {
9422
9538
  if (t === "webp") return "image/webp";
9423
9539
  if (t === "avif") return "image/avif";
9424
9540
  if (t === "jpeg" || t === "jpg") return "image/jpeg";
@@ -9426,7 +9542,7 @@ function Zi(e, t) {
9426
9542
  let n = e.toLowerCase();
9427
9543
  return n.endsWith(".jpg") || n.endsWith(".jpeg") ? "image/jpeg" : n.endsWith(".png") ? "image/png" : n.endsWith(".webp") ? "image/webp" : n.endsWith(".gif") ? "image/gif" : n.endsWith(".svg") ? "image/svg+xml" : n.endsWith(".pdf") ? "application/pdf" : n.endsWith(".mp4") ? "video/mp4" : n.endsWith(".webm") ? "video/webm" : "application/octet-stream";
9428
9544
  }
9429
- Xi.get("/*", async (e) => {
9545
+ ra.get("/*", async (e) => {
9430
9546
  let t = e.req.path.replace(/^\/media\//, "").replace(/^\//, "");
9431
9547
  if (!t) return e.text("Asset key missing", 400);
9432
9548
  let n = e.env?.MEDIA_BUCKET, { w: r, h: i, q: a, f: o } = e.req.query(), s = !!(r || i || a || o), c = e.req.header("Via")?.includes("image-resizing") || e.req.header("User-Agent")?.includes("Cloudflare-ImgRen");
@@ -9472,7 +9588,7 @@ Xi.get("/*", async (e) => {
9472
9588
  if (!s) {
9473
9589
  let n = u(g);
9474
9590
  return e.body(n, 200, {
9475
- "Content-Type": Zi(t),
9591
+ "Content-Type": ia(t),
9476
9592
  "Cache-Control": "public, max-age=86400"
9477
9593
  });
9478
9594
  }
@@ -9480,7 +9596,7 @@ Xi.get("/*", async (e) => {
9480
9596
  if (l(b)) {
9481
9597
  let n = u(b);
9482
9598
  return e.body(n, 200, {
9483
- "Content-Type": Zi(t, v),
9599
+ "Content-Type": ia(t, v),
9484
9600
  "Cache-Control": "public, max-age=31536000, immutable",
9485
9601
  "X-Local-Cache": "HIT"
9486
9602
  });
@@ -9493,14 +9609,14 @@ Xi.get("/*", async (e) => {
9493
9609
  typeof n == "number" && (a.width = n), typeof c == "number" && (a.height = c), (a.width || a.height) && (a.fit = "cover", i = i.resize(a)), v === "webp" ? i = i.webp({ quality: typeof _ == "number" ? _ : 80 }) : v === "avif" ? i = i.avif({ quality: typeof _ == "number" ? _ : 70 }) : v === "jpeg" || v === "jpg" ? i = i.jpeg({ quality: typeof _ == "number" ? _ : 80 }) : v === "png" && (i = i.png({ quality: typeof _ == "number" ? _ : 80 }));
9494
9610
  let o = await i.toBuffer();
9495
9611
  return d(m(b), { recursive: !0 }), f(b, o), e.body(o, 200, {
9496
- "Content-Type": Zi(t, v),
9612
+ "Content-Type": ia(t, v),
9497
9613
  "Cache-Control": "public, max-age=31536000, immutable",
9498
9614
  "X-Local-Cache": "MISS"
9499
9615
  });
9500
9616
  } catch {
9501
9617
  let n = u(g);
9502
9618
  return e.body(n, 200, {
9503
- "Content-Type": Zi(t),
9619
+ "Content-Type": ia(t),
9504
9620
  "Cache-Control": "public, max-age=86400"
9505
9621
  });
9506
9622
  }
@@ -9511,8 +9627,8 @@ Xi.get("/*", async (e) => {
9511
9627
  });
9512
9628
  //#endregion
9513
9629
  //#region server/routes/public/paths.ts
9514
- var Qi = new e();
9515
- function $i(e, t) {
9630
+ var aa = new e();
9631
+ function oa(e, t) {
9516
9632
  let n = /* @__PURE__ */ new Date();
9517
9633
  if (e && String(e).trim() !== "") {
9518
9634
  let t = new Date(e);
@@ -9524,37 +9640,48 @@ function $i(e, t) {
9524
9640
  }
9525
9641
  return !0;
9526
9642
  }
9527
- Qi.get("/", async (e) => {
9643
+ aa.get("/", async (e) => {
9528
9644
  try {
9529
- let t = await e.get("db").prepare("\n SELECT \n t.id as treeNodeId,\n t.parentId,\n c.slug,\n c.contentType as nodeType,\n c.status,\n c.dataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE (c.deletedAt IS NULL OR c.deletedAt = '')\n ").all(), n = Array.isArray(t) ? t : t?.results || [], r = [];
9530
- function i(e = null, t = "") {
9531
- let a = n.filter((t) => {
9532
- let n = !t.parentId || t.parentId === "null" || t.parentId === "" ? null : t.parentId;
9533
- return String(n) === String(!e || e === "null" || e === "" ? null : e);
9534
- });
9535
- for (let e of a) {
9536
- let n = {};
9537
- if (e.dataJson) try {
9538
- n = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
9539
- } catch {}
9540
- let a = e.status === "published" || e.status === "active", o = $i(n.startShowingAt, n.stopShowingAt);
9541
- if (!a || !o) continue;
9542
- let s = (e.slug || "").replace(/^\/+|\/+$/g, ""), c = s === "home" || s === "homee" ? "/" : `${t}/${s}`.replace(/\/+/g, "/");
9543
- e.nodeType !== "external-link" && r.push(c);
9544
- let l = c === "/" ? "" : c;
9545
- i(e.treeNodeId, l);
9645
+ let t = await e.get("db").prepare("\n SELECT\n t.id as treeNodeId,\n t.parentId,\n c.slug,\n c.contentType as nodeType,\n c.status,\n c.dataJson\n FROM tree_nodes t\n INNER JOIN content_nodes c ON t.contentId = c.id\n WHERE (c.deletedAt IS NULL OR c.deletedAt = '')\n ORDER BY t.sortOrder ASC\n ").all(), n = Array.isArray(t) ? t : t?.results || [], r = [], i = /* @__PURE__ */ new Map();
9646
+ for (let e of n) {
9647
+ let t = !e.parentId || e.parentId === "null" || e.parentId === "" ? null : e.parentId, n = t === null ? "__ROOT__" : String(t), r = i.get(n);
9648
+ r ? r.push(e) : i.set(n, [e]);
9649
+ }
9650
+ let a = /* @__PURE__ */ new Map();
9651
+ for (let e of n) {
9652
+ let t = String(e.treeNodeId);
9653
+ if (!e.dataJson) {
9654
+ a.set(t, {});
9655
+ continue;
9656
+ }
9657
+ try {
9658
+ let n = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
9659
+ a.set(t, n && typeof n == "object" ? n : {});
9660
+ } catch {
9661
+ a.set(t, {});
9662
+ }
9663
+ }
9664
+ function o(e = null, t = "") {
9665
+ let n = e == null || e === "" || e === "null" ? "__ROOT__" : String(e), s = i.get(n) || [];
9666
+ for (let e of s) {
9667
+ let n = a.get(String(e.treeNodeId)) || {}, i = e.status === "published" || e.status === "active", s = oa(n.startShowingAt, n.stopShowingAt);
9668
+ if (!i || !s) continue;
9669
+ let c = (e.slug || "").replace(/^\/+|\/+$/g, ""), l = c === "home" || c === "homee" ? "/" : `${t}/${c}`.replace(/\/+/g, "/");
9670
+ e.nodeType !== "external-link" && r.push(l);
9671
+ let u = l === "/" ? "" : l;
9672
+ o(e.treeNodeId, u);
9546
9673
  }
9547
9674
  }
9548
- i(null);
9549
- let a = [...new Set(r)];
9550
- return e.json(a);
9675
+ o(null);
9676
+ let s = [...new Set(r)];
9677
+ return e.json(s);
9551
9678
  } catch (t) {
9552
9679
  return console.error("[CMS Paths API] Error:", t), e.json({ error: "Failed to fetch paths" }, 500);
9553
9680
  }
9554
9681
  });
9555
9682
  //#endregion
9556
9683
  //#region server/index.ts
9557
- var $ = new e(), ea = !1;
9684
+ var $ = new e(), sa = !1;
9558
9685
  $.use("*", o()), $.use("/media/*", o({
9559
9686
  origin: "*",
9560
9687
  allowMethods: [
@@ -9575,13 +9702,13 @@ $.use("*", o()), $.use("/media/*", o({
9575
9702
  let n = new URL(e.req.url), r = (e.req.header("host") || n.hostname).split(":")[0];
9576
9703
  e.set("currentDomain", r);
9577
9704
  let i = u(e);
9578
- if (e.set("db", i), !ea) try {
9579
- await Pr(i), ea = !0;
9705
+ if (e.set("db", i), !sa) try {
9706
+ await Pr(i), sa = !0;
9580
9707
  } catch (e) {
9581
9708
  console.error("❌ [CMS Server] Failed to initialize system tables on cold start:", e);
9582
9709
  }
9583
9710
  await t();
9584
- }), $.route("/media", Xi), $.use("/media/*", Lr()), $.route("/api/cms/nodes", X), $.route("/api/cms/nodes.json", X), $.route("/api/cms/formcsv", X), $.route("/api/cms/formcsv.json", X), $.route("/api/cms/stats", Mi), $.route("/api/cms/stats.json", Mi), $.route("/api/cms", xi), $.route("/api/cms/channels", Ti), $.route("/api/cms/channels.json", Ti), $.route("/api/cms/schemas", Ei), $.route("/api/cms/schemas.json", Ei), $.route("/api/cms", ki), $.route("/api/admin/assets", Z), $.route("/api/v1/node", Ii), $.route("/api/v1/page", Ii), $.route("/api/v1/tree", Ji), $.route("/api/v1/all-paths", Qi), $.get("*", async (e) => {
9711
+ }), $.route("/media", ra), $.use("/media/*", Lr()), $.route("/api/cms/nodes", X), $.route("/api/cms/nodes.json", X), $.route("/api/cms/formcsv", X), $.route("/api/cms/formcsv.json", X), $.route("/api/cms/stats", Mi), $.route("/api/cms/stats.json", Mi), $.route("/api/cms", xi), $.route("/api/cms/channels", Ti), $.route("/api/cms/channels.json", Ti), $.route("/api/cms/schemas", Ei), $.route("/api/cms/schemas.json", Ei), $.route("/api/cms", ki), $.route("/api/admin/assets", Z), $.route("/api/v1/node", Ii), $.route("/api/v1/page", Ii), $.route("/api/v1/tree", ea), $.route("/api/v1/all-paths", aa), $.get("*", async (e) => {
9585
9712
  if (e.env?.ASSETS) {
9586
9713
  let t = await e.env.ASSETS.fetch(e.req.raw);
9587
9714
  if (t.status === 404) {