@brightsideoy/kama 1.0.0-alpha.20 → 1.0.0-alpha.21

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.
Files changed (65) hide show
  1. package/content/definitions/blocks/image-gallery.yaml +34 -0
  2. package/content/definitions/blocks/youtube.yaml +8 -0
  3. package/content/definitions/field-sets/access.yaml +10 -0
  4. package/content/definitions/field-sets/page-base.yaml +16 -1
  5. package/content/definitions/taxonomies/media-tag.yaml +15 -0
  6. package/definitions/editor/default.ts +15 -1
  7. package/dist/assets/AssetEditor-B4W7tV1a.js +1 -0
  8. package/dist/assets/AssetEditor-D9sz6bfN.css +1 -0
  9. package/dist/assets/CmsFieldTaxonomy-CVlKL-l2.css +1 -0
  10. package/dist/assets/CmsFieldTaxonomy-C_AwHDwY.js +1 -0
  11. package/dist/assets/{CmsHelp-DyPJLGGi.js → CmsHelp-BQkr9KyU.js} +1 -1
  12. package/dist/assets/{CmsPublisher-DNLwjirk.js → CmsPublisher-XSCPrp5L.js} +1 -1
  13. package/dist/assets/NodeEditor-4TsNvk2f.css +1 -0
  14. package/dist/assets/NodeEditor-DA5GRtRP.js +161 -0
  15. package/dist/assets/{TrashWorkspace-DgIg1v6t.js → TrashWorkspace-CATe46WF.js} +1 -1
  16. package/dist/assets/index-CY0VYSyt.css +1 -0
  17. package/dist/assets/index-DdG9Pozx.js +14 -0
  18. package/dist/assets/{plus-FQRsZBoJ.js → plus-CX_GHzXs.js} +1 -1
  19. package/dist/assets/useNodes-CqFlc72m.js +1 -0
  20. package/dist/{dist-D_Q1y4Kh.js → dist-3Xc2TTZw.js} +1117 -456
  21. package/dist/index.html +4 -4
  22. package/dist/index.js +1117 -456
  23. package/dist/schema-compiler.js +1 -1
  24. package/package.json +5 -5
  25. package/schema.sql +10 -0
  26. package/templates/astro-starter/src/components/global/NavigationMenu.astro +11 -3
  27. package/dist/assets/AssetEditor-D5j7pwcK.css +0 -1
  28. package/dist/assets/AssetEditor-Dt1zCR7_.js +0 -1
  29. package/dist/assets/NodeEditor-CiXQKXK1.js +0 -147
  30. package/dist/assets/NodeEditor-pZI3gu4a.css +0 -1
  31. package/dist/assets/index-DQ6_RmCI.js +0 -14
  32. package/dist/assets/index-DcKiaRjI.css +0 -1
  33. package/dist/assets/useNodes-D2-VxsxR.js +0 -1
  34. package/templates/astro-starter/old_src/components/blocks/BlockRenderer.astro +0 -143
  35. package/templates/astro-starter/old_src/components/blocks/ColumnLayout.astro +0 -67
  36. package/templates/astro-starter/old_src/components/blocks/HeaderImage.astro +0 -126
  37. package/templates/astro-starter/old_src/components/blocks/Hero.astro +0 -218
  38. package/templates/astro-starter/old_src/components/blocks/HtmlBlock.astro +0 -25
  39. package/templates/astro-starter/old_src/components/blocks/ImageBlock.astro +0 -91
  40. package/templates/astro-starter/old_src/components/blocks/NodeList.astro +0 -274
  41. package/templates/astro-starter/old_src/components/blocks/TextBlock.astro +0 -15
  42. package/templates/astro-starter/old_src/components/global/Breadcrumb.astro +0 -108
  43. package/templates/astro-starter/old_src/components/global/Footer.astro +0 -50
  44. package/templates/astro-starter/old_src/components/global/Header.astro +0 -171
  45. package/templates/astro-starter/old_src/components/global/MetaHead.astro +0 -266
  46. package/templates/astro-starter/old_src/components/global/NavigationMenu.astro +0 -413
  47. package/templates/astro-starter/old_src/components/ui/KamaImage.astro +0 -180
  48. package/templates/astro-starter/old_src/layouts/SkeletonLayout.astro +0 -56
  49. package/templates/astro-starter/old_src/layouts/StandardLayout.astro +0 -63
  50. package/templates/astro-starter/old_src/lib/cms.ts +0 -219
  51. package/templates/astro-starter/old_src/lib/media/kama-image-service.ts +0 -67
  52. package/templates/astro-starter/old_src/lib/media/media-proxy.ts +0 -148
  53. package/templates/astro-starter/old_src/lib/media/media-url.ts +0 -112
  54. package/templates/astro-starter/old_src/middleware.ts +0 -536
  55. package/templates/astro-starter/old_src/pages/404.astro +0 -46
  56. package/templates/astro-starter/old_src/pages/[...slug].astro +0 -311
  57. package/templates/astro-starter/old_src/pages/api/load-nodes.ts +0 -68
  58. package/templates/astro-starter/old_src/pages/api/partials/node-cards.astro +0 -101
  59. package/templates/astro-starter/old_src/pages/llms-full.txt.ts +0 -171
  60. package/templates/astro-starter/old_src/pages/llms.txt.ts +0 -113
  61. package/templates/astro-starter/old_src/pages/media/[...path].ts +0 -14
  62. package/templates/astro-starter/old_src/pages/partials/footer.astro +0 -69
  63. package/templates/astro-starter/old_src/pages/partials/nav.astro +0 -141
  64. package/templates/astro-starter/old_src/styles/standard-theme.css +0 -157
  65. package/templates/astro-starter/old_src/utils/tiptap.ts +0 -113
package/dist/index.js CHANGED
@@ -191,7 +191,7 @@ function w(e) {
191
191
  function T(e) {
192
192
  return Object.fromEntries(Object.entries(e).sort(([e], [t]) => e.localeCompare(t)));
193
193
  }
194
- var ee = m(), E = class {
194
+ var E = m(), D = class {
195
195
  static collectMetadata(e, t) {
196
196
  let n = this.getMetadataFromRegistry(e), r = Object.assign(Object.assign({}, n?._internal), t?._internal), i = Object.assign(Object.assign({}, n?.param), t?.param), a = Object.assign(Object.assign(Object.assign(Object.assign({}, Object.keys(r).length > 0 ? { _internal: r } : {}), n), t), Object.keys(i).length > 0 ? { param: i } : {});
197
197
  if (l(e, [
@@ -259,7 +259,7 @@ var ee = m(), E = class {
259
259
  return t ? void 0 : e;
260
260
  }
261
261
  static getMetadataFromInternalRegistry(e) {
262
- return ee.get(e);
262
+ return E.get(e);
263
263
  }
264
264
  static getMetadataFromRegistry(e) {
265
265
  let t = this.getMetadataFromInternalRegistry(e), n = e.meta();
@@ -268,45 +268,45 @@ var ee = m(), E = class {
268
268
  return Object.assign(Object.assign(Object.assign({ _internal: Object.assign(Object.assign({}, o ? { refId: o } : {}), r) }, i), c ? { description: c } : {}), l);
269
269
  }
270
270
  static setMetadataInRegistry(e, t) {
271
- ee.add(e, t);
271
+ E.add(e, t);
272
272
  }
273
273
  };
274
- function D(e, t) {
274
+ function O(e, t) {
275
275
  let n = e[t];
276
276
  typeof n == "function" && (e[t] = function(...e) {
277
- let t = n.apply(this, e), r = E.getMetadataFromRegistry(this);
278
- return r && E.setMetadataInRegistry(t, r), t;
277
+ let t = n.apply(this, e), r = D.getMetadataFromRegistry(this);
278
+ return r && D.setMetadataInRegistry(t, r), t;
279
279
  });
280
280
  }
281
- function te(e) {
281
+ function ee(e) {
282
282
  e.ZodType.prototype.openapi === void 0 && (e.ZodType.prototype.openapi = function(...e) {
283
- let { refId: t, metadata: n, options: r } = O(...e), i = n ?? {}, { param: a } = i, o = s(i, ["param"]), c = E.getMetadataFromRegistry(this) ?? {}, { _internal: u } = c, d = s(c, ["_internal"]), f = Object.assign(Object.assign(Object.assign({}, u), r), t ? { refId: t } : void 0), p = Object.assign(Object.assign(Object.assign({}, d), o), d?.param || a ? { param: Object.assign(Object.assign({}, d?.param), a) } : void 0), m = new this.constructor(this._def);
283
+ let { refId: t, metadata: n, options: r } = k(...e), i = n ?? {}, { param: a } = i, o = s(i, ["param"]), c = D.getMetadataFromRegistry(this) ?? {}, { _internal: u } = c, d = s(c, ["_internal"]), f = Object.assign(Object.assign(Object.assign({}, u), r), t ? { refId: t } : void 0), p = Object.assign(Object.assign(Object.assign({}, d), o), d?.param || a ? { param: Object.assign(Object.assign({}, d?.param), a) } : void 0), m = new this.constructor(this._def);
284
284
  function h(e) {
285
- E.setMetadataInRegistry(e, Object.assign(Object.assign({}, Object.keys(f).length > 0 ? { _internal: f } : void 0), p));
285
+ D.setMetadataInRegistry(e, Object.assign(Object.assign({}, Object.keys(f).length > 0 ? { _internal: f } : void 0), p));
286
286
  }
287
287
  if (h(m), l(m, "ZodLazy") && h(this), l(m, "ZodObject")) {
288
- let e = E.getMetadataFromRegistry(m), t = m.extend;
288
+ let e = D.getMetadataFromRegistry(m), t = m.extend;
289
289
  m.extend = function(...n) {
290
290
  let r = t.apply(m, n), i = e ?? {}, { _internal: a } = i, o = s(i, ["_internal"]);
291
- return E.setMetadataInRegistry(r, { _internal: { extendedFrom: a?.refId ? {
291
+ return D.setMetadataInRegistry(r, { _internal: { extendedFrom: a?.refId ? {
292
292
  refId: a.refId,
293
293
  schema: m
294
294
  } : a?.extendedFrom } }), r.openapi(o);
295
- }, D(m, "catchall");
295
+ }, O(m, "catchall");
296
296
  }
297
- D(m, "optional"), D(m, "nullable"), D(m, "default"), D(m, "transform"), D(m, "refine"), D(m, "length"), D(m, "min"), D(m, "max");
297
+ O(m, "optional"), O(m, "nullable"), O(m, "default"), O(m, "transform"), O(m, "refine"), O(m, "length"), O(m, "min"), O(m, "max");
298
298
  let g = m.meta;
299
299
  return m.meta = function(...e) {
300
300
  let t = g.apply(this, e);
301
301
  if (e[0]) {
302
- let n = E.getMetadataFromInternalRegistry(this);
303
- n && E.setMetadataInRegistry(t, Object.assign(Object.assign({}, n), e[0]));
302
+ let n = D.getMetadataFromInternalRegistry(this);
303
+ n && D.setMetadataInRegistry(t, Object.assign(Object.assign({}, n), e[0]));
304
304
  }
305
305
  return t;
306
306
  }, m;
307
307
  });
308
308
  }
309
- function O(e, t, n) {
309
+ function k(e, t, n) {
310
310
  return typeof e == "string" ? {
311
311
  refId: e,
312
312
  metadata: t,
@@ -317,10 +317,10 @@ function O(e, t, n) {
317
317
  options: t
318
318
  };
319
319
  }
320
- function k(e) {
321
- return b(E.getOpenApiMetadata(e) ?? {}, _);
320
+ function A(e) {
321
+ return b(D.getOpenApiMetadata(e) ?? {}, _);
322
322
  }
323
- var A = class {
323
+ var j = class {
324
324
  constructor(e) {
325
325
  this.parents = e, this._definitions = [];
326
326
  }
@@ -335,7 +335,7 @@ var A = class {
335
335
  }), n;
336
336
  }
337
337
  registerParameter(e, t) {
338
- let n = this.schemaWithRefId(e, t), r = E.getOpenApiMetadata(n) ?? {}, i = n.openapi(Object.assign(Object.assign({}, r), { param: Object.assign(Object.assign({}, r?.param), { name: r?.param?.name ?? e }) }));
338
+ let n = this.schemaWithRefId(e, t), r = D.getOpenApiMetadata(n) ?? {}, i = n.openapi(Object.assign(Object.assign({}, r), { param: Object.assign(Object.assign({}, r?.param), { name: r?.param?.name ?? e }) }));
339
339
  return this._definitions.push({
340
340
  type: "parameter",
341
341
  schema: i
@@ -367,15 +367,15 @@ var A = class {
367
367
  schemaWithRefId(e, t) {
368
368
  return t.openapi(e);
369
369
  }
370
- }, ne = class {
370
+ }, te = class {
371
371
  constructor(e) {
372
372
  this.message = e;
373
373
  }
374
- }, j = class extends ne {
374
+ }, ne = class extends te {
375
375
  constructor(e, t) {
376
376
  super(e), this.data = t;
377
377
  }
378
- }, re = class extends ne {
378
+ }, re = class extends te {
379
379
  constructor(e) {
380
380
  super(`Missing parameter data, please specify \`${e.missingField}\` and other OpenAPI parameter props using the \`param\` field of \`schema.openapi\``), this.data = e;
381
381
  }
@@ -387,7 +387,7 @@ function ie(e, t) {
387
387
  throw e instanceof re ? new re(Object.assign(Object.assign({}, e.data), t)) : e;
388
388
  }
389
389
  }
390
- var ae = class extends ne {
390
+ var ae = class extends te {
391
391
  constructor(e) {
392
392
  super("Unknown zod object type, please specify `type` and other OpenAPI props using `schema.openapi`."), this.data = e;
393
393
  }
@@ -415,10 +415,10 @@ var ae = class extends ne {
415
415
  } : (console.error("No discriminator found for discriminated union", e), { oneOf: o });
416
416
  }
417
417
  mapDiscriminator(e, t, n) {
418
- if (e.some((e) => E.getRefId(e) === void 0)) return;
418
+ if (e.some((e) => D.getRefId(e) === void 0)) return;
419
419
  let r = {};
420
420
  for (let i of e) {
421
- let e = E.getRefId(i), a = this.getDiscriminatorValues(i, t);
421
+ let e = D.getRefId(i), a = this.getDiscriminatorValues(i, t);
422
422
  for (let t of a) r[t] = n(e);
423
423
  }
424
424
  return {
@@ -448,7 +448,7 @@ function le(e) {
448
448
  var ue = class {
449
449
  transform(e, t, n) {
450
450
  let { type: r, values: i } = le(e._zod.def.entries);
451
- if (r === "mixed") throw new ne("Enum has mixed string and number values, please specify the OpenAPI type manually");
451
+ if (r === "mixed") throw new te("Enum has mixed string and number values, please specify the OpenAPI type manually");
452
452
  return Object.assign(Object.assign({}, n(r === "numeric" ? "integer" : "string")), { enum: t ? [...i, null] : i });
453
453
  }
454
454
  }, de = class {
@@ -475,7 +475,7 @@ var ue = class {
475
475
  }
476
476
  }, me = class {
477
477
  transform(e, t, n, r) {
478
- let i = E.getInternalMetadata(e)?.extendedFrom, a = this.requiredKeysOf(e), o = v(e.def.shape, r);
478
+ let i = D.getInternalMetadata(e)?.extendedFrom, a = this.requiredKeysOf(e), o = v(e.def.shape, r);
479
479
  if (!i) return Object.assign(Object.assign(Object.assign(Object.assign({}, n("object")), {
480
480
  properties: o,
481
481
  default: t
@@ -551,7 +551,7 @@ var ve = class {
551
551
  this.options = e;
552
552
  }
553
553
  transform(e, t, n) {
554
- let r = E.getInternalMetadata(e)?.unionPreferredType ?? this.options?.unionPreferredType ?? "anyOf", i = this.flattenUnionTypes(e).map((e) => n(this.unwrapNullable(e)));
554
+ let r = D.getInternalMetadata(e)?.unionPreferredType ?? this.options?.unionPreferredType ?? "anyOf", i = this.flattenUnionTypes(e).map((e) => n(this.unwrapNullable(e)));
555
555
  return { [r]: t(i) };
556
556
  }
557
557
  flattenUnionTypes(e) {
@@ -626,7 +626,7 @@ var ve = class {
626
626
  if (l(e, "ZodIntersection")) return this.intersectionTransformer.transform(e, t, (e) => this.versionSpecifics.mapNullableOfArray(e, t), n);
627
627
  if (l(e, "ZodRecord")) return this.recordTransformer.transform(e, (e) => this.versionSpecifics.mapNullableType(e, t), n);
628
628
  if (l(e, "ZodDate")) return this.dateTransformer.transform((e) => this.versionSpecifics.mapNullableType(e, t));
629
- let i = E.getRefId(e);
629
+ let i = D.getRefId(e);
630
630
  throw new ae({
631
631
  currentSchema: e.def,
632
632
  schemaName: i
@@ -694,13 +694,13 @@ var ve = class {
694
694
  }
695
695
  }
696
696
  generateParameterDefinition(e) {
697
- let t = E.getRefId(e), n = this.generateParameter(e);
697
+ let t = D.getRefId(e), n = this.generateParameter(e);
698
698
  return t && (this.paramRefs[t] = n), n;
699
699
  }
700
700
  getParameterRef(e, t) {
701
- let n = E.getOpenApiMetadata(e), r = E.getInternalMetadata(e), i = n?.param, a = r?.refId ? this.paramRefs[r.refId] : void 0;
701
+ let n = D.getOpenApiMetadata(e), r = D.getInternalMetadata(e), i = n?.param, a = r?.refId ? this.paramRefs[r.refId] : void 0;
702
702
  if (!(!r?.refId || !a)) {
703
- if (i && a.in !== i.in || t?.in && a.in !== t.in) throw new j(`Conflicting location for parameter ${a.name}`, {
703
+ if (i && a.in !== i.in || t?.in && a.in !== t.in) throw new ne(`Conflicting location for parameter ${a.name}`, {
704
704
  key: "in",
705
705
  values: x([
706
706
  a.in,
@@ -708,7 +708,7 @@ var ve = class {
708
708
  i?.in
709
709
  ])
710
710
  });
711
- if (i && a.name !== i.name || t?.name && a.name !== t?.name) throw new j("Conflicting names for parameter", {
711
+ if (i && a.name !== i.name || t?.name && a.name !== t?.name) throw new ne("Conflicting names for parameter", {
712
712
  key: "name",
713
713
  values: x([
714
714
  a.name,
@@ -720,22 +720,22 @@ var ve = class {
720
720
  }
721
721
  }
722
722
  generateInlineParameters(e, t) {
723
- let n = E.getOpenApiMetadata(e)?.param, r = this.getParameterRef(e, { in: t });
723
+ let n = D.getOpenApiMetadata(e)?.param, r = this.getParameterRef(e, { in: t });
724
724
  if (r) return [r];
725
725
  if (l(e, "ZodObject")) {
726
726
  let n = e.def.shape;
727
727
  return Object.entries(n).map(([e, n]) => {
728
- let r = E.getOpenApiMetadata(n), i = this.getParameterRef(n, {
728
+ let r = D.getOpenApiMetadata(n), i = this.getParameterRef(n, {
729
729
  in: t,
730
730
  name: e
731
731
  });
732
732
  if (i) return i;
733
733
  let a = r?.param;
734
- if (a?.name && a.name !== e) throw new j("Conflicting names for parameter", {
734
+ if (a?.name && a.name !== e) throw new ne("Conflicting names for parameter", {
735
735
  key: "name",
736
736
  values: [e, a.name]
737
737
  });
738
- if (a?.in && a.in !== t) throw new j(`Conflicting location for parameter ${a.name ?? e}`, {
738
+ if (a?.in && a.in !== t) throw new ne(`Conflicting location for parameter ${a.name ?? e}`, {
739
739
  key: "in",
740
740
  values: [t, a.in]
741
741
  });
@@ -745,21 +745,21 @@ var ve = class {
745
745
  });
746
746
  });
747
747
  }
748
- if (n?.in && n.in !== t) throw new j(`Conflicting location for parameter ${n.name}`, {
748
+ if (n?.in && n.in !== t) throw new ne(`Conflicting location for parameter ${n.name}`, {
749
749
  key: "in",
750
750
  values: [t, n.in]
751
751
  });
752
752
  return [this.generateParameter(e, { in: t })];
753
753
  }
754
754
  generateSimpleParameter(e, t) {
755
- let n = E.getParamMetadata(e)?.param, r = Object.assign(Object.assign({}, n), t), i = !f(e) && !d(e), a = this.generateSchemaWithRef(e);
755
+ let n = D.getParamMetadata(e)?.param, r = Object.assign(Object.assign({}, n), t), i = !f(e) && !d(e), a = this.generateSchemaWithRef(e);
756
756
  return Object.assign({
757
757
  schema: a,
758
758
  required: i
759
- }, Object.keys(r).length > 0 ? E.buildParameterMetadata(r) : {});
759
+ }, Object.keys(r).length > 0 ? D.buildParameterMetadata(r) : {});
760
760
  }
761
761
  generateParameter(e, t) {
762
- let n = E.getOpenApiMetadata(e)?.param, r = t?.name ?? n?.name, i = t?.in ?? n?.in;
762
+ let n = D.getOpenApiMetadata(e)?.param, r = t?.name ?? n?.name, i = t?.in ?? n?.in;
763
763
  if (!r) throw new re({ missingField: "name" });
764
764
  if (!i) throw new re({
765
765
  missingField: "in",
@@ -772,7 +772,7 @@ var ve = class {
772
772
  });
773
773
  }
774
774
  generateSchemaWithMetadata(e) {
775
- let t = E.unwrapChained(e), n = E.getOpenApiMetadata(e), r = E.getDefaultValue(e), i = E.getRefId(e);
775
+ let t = D.unwrapChained(e), n = D.getOpenApiMetadata(e), r = D.getDefaultValue(e), i = D.getRefId(e);
776
776
  if (i && typeof this.schemaRefs[i] == "object") return this.schemaRefs[i];
777
777
  if (i && this.schemaRefs[i] === "pending") {
778
778
  let t = { $ref: this.generateSchemaRef(i) };
@@ -780,12 +780,12 @@ var ve = class {
780
780
  }
781
781
  i && !this.schemaRefs[i] && (this.schemaRefs[i] = "pending");
782
782
  let a = n?.type ? { type: n.type } : this.toOpenAPISchema(t, d(e), r);
783
- return n ? E.applySchemaMetadata(a, n) : b(a, _);
783
+ return n ? D.applySchemaMetadata(a, n) : b(a, _);
784
784
  }
785
785
  constructReferencedOpenAPISchema(e) {
786
- let t = E.getOpenApiMetadata(e), n = E.unwrapChained(e), r = E.getDefaultValue(e), i = d(e);
786
+ let t = D.getOpenApiMetadata(e), n = D.unwrapChained(e), r = D.getDefaultValue(e), i = d(e);
787
787
  if (t?.type) return this.versionSpecifics.mapNullableType(t.type, i);
788
- let a = E.getRefId(e);
788
+ let a = D.getRefId(e);
789
789
  if (a && typeof this.schemaRefs[a] == "object") return Se.mapRecursive(this.schemaRefs[a], (e) => this.versionSpecifics.mapNullableType(e, i), (e) => this.versionSpecifics.mapNullableOfRef(e, i));
790
790
  if (a && this.schemaRefs[a] === "pending") {
791
791
  let e = { $ref: this.generateSchemaRef(a) };
@@ -794,17 +794,17 @@ var ve = class {
794
794
  return a && !this.schemaRefs[a] && (this.schemaRefs[a] = "pending"), this.toOpenAPISchema(n, i, r);
795
795
  }
796
796
  generateSimpleSchema(e) {
797
- let t = E.getOpenApiMetadata(e), n = E.getRefId(e);
797
+ let t = D.getOpenApiMetadata(e), n = D.getRefId(e);
798
798
  if (!n || !this.schemaRefs[n]) return this.generateSchemaWithMetadata(e);
799
799
  let r = this.schemaRefs[n], i = { $ref: this.generateSchemaRef(n) };
800
800
  if (this.schemaRefs[n] === "pending") return this.versionSpecifics.mapNullableOfRef(i, d(e));
801
- let a = b(E.buildSchemaMetadata(t ?? {}), (e, t) => e === void 0 || S(e, r[t]));
801
+ let a = b(D.buildSchemaMetadata(t ?? {}), (e, t) => e === void 0 || S(e, r[t]));
802
802
  if (a.type) return { allOf: [i, a] };
803
- let o = b(this.constructReferencedOpenAPISchema(e), (e, t) => e === void 0 || S(e, r[t])), s = E.applySchemaMetadata(o, a);
803
+ let o = b(this.constructReferencedOpenAPISchema(e), (e, t) => e === void 0 || S(e, r[t])), s = D.applySchemaMetadata(o, a);
804
804
  return Object.keys(s).length > 0 ? { allOf: [i, s] } : i;
805
805
  }
806
806
  generateSchemaWithRef(e) {
807
- let t = E.getRefId(e);
807
+ let t = D.getRefId(e);
808
808
  return t && !this.schemaRefs[t] ? (this.schemaRefs[t] = this.generateSimpleSchema(e), { $ref: this.generateSchemaRef(t) }) : this.generateSimpleSchema(e);
809
809
  }
810
810
  generateSchemaRef(e) {
@@ -16567,7 +16567,7 @@ var $y = class t extends e {
16567
16567
  defaultHook;
16568
16568
  #e;
16569
16569
  constructor(e) {
16570
- super(e), this.openAPIRegistry = new A(), this.defaultHook = e?.defaultHook;
16570
+ super(e), this.openAPIRegistry = new j(), this.defaultHook = e?.defaultHook;
16571
16571
  }
16572
16572
  #t() {
16573
16573
  if (this.defaultHook) return this.defaultHook;
@@ -16682,8 +16682,8 @@ var $y = class t extends e {
16682
16682
  path: Me(r, n._basePath.replaceAll(/:([^\/]+)/g, "{$1}"), e.webhook.path)
16683
16683
  });
16684
16684
  return;
16685
- case "schema": return this.openAPIRegistry.register(k(e.schema)._internal?.refId, e.schema);
16686
- case "parameter": return this.openAPIRegistry.registerParameter(k(e.schema)._internal?.refId, e.schema);
16685
+ case "schema": return this.openAPIRegistry.register(A(e.schema)._internal?.refId, e.schema);
16686
+ case "parameter": return this.openAPIRegistry.registerParameter(A(e.schema)._internal?.refId, e.schema);
16687
16687
  default: throw Error(`Unknown registry type: ${e}`);
16688
16688
  }
16689
16689
  }), this) : this;
@@ -16707,7 +16707,7 @@ var $y = class t extends e {
16707
16707
  };
16708
16708
  return Object.defineProperty(t, "getRoutingPath", { enumerable: !1 });
16709
16709
  };
16710
- te(Xy);
16710
+ ee(Xy);
16711
16711
  function tb(e, t) {
16712
16712
  let n = {};
16713
16713
  return Object.keys(e.paths).forEach((r) => {
@@ -17096,6 +17096,17 @@ var Tb = /* @__PURE__ */ o({
17096
17096
  liveSync: !0,
17097
17097
  rules: {}
17098
17098
  },
17099
+ notInMenu: {
17100
+ type: "boolean",
17101
+ label: "Not in Menu",
17102
+ default: !1,
17103
+ public: !0,
17104
+ inTree: !0,
17105
+ variant: "danger",
17106
+ dbType: "integer",
17107
+ position: "sidebar",
17108
+ rules: {}
17109
+ },
17099
17110
  startShowingAt: {
17100
17111
  type: "datetime",
17101
17112
  label: "Start Showing At",
@@ -17168,6 +17179,17 @@ var Tb = /* @__PURE__ */ o({
17168
17179
  liveSync: !0,
17169
17180
  rules: {}
17170
17181
  },
17182
+ notInMenu: {
17183
+ type: "boolean",
17184
+ label: "Not in Menu",
17185
+ default: !1,
17186
+ public: !0,
17187
+ inTree: !0,
17188
+ variant: "danger",
17189
+ dbType: "integer",
17190
+ position: "sidebar",
17191
+ rules: {}
17192
+ },
17171
17193
  startShowingAt: {
17172
17194
  type: "datetime",
17173
17195
  label: "Start Showing At",
@@ -17229,6 +17251,21 @@ var Tb = /* @__PURE__ */ o({
17229
17251
  required: !0,
17230
17252
  rules: { required: !0 }
17231
17253
  },
17254
+ disableTitleInContent: {
17255
+ label: "Disable Title in Content",
17256
+ type: "boolean",
17257
+ dbType: "boolean",
17258
+ public: !0,
17259
+ rules: {}
17260
+ },
17261
+ menuTitle: {
17262
+ label: "Menu Title",
17263
+ type: "text",
17264
+ inTree: !0,
17265
+ public: !0,
17266
+ default: "",
17267
+ rules: {}
17268
+ },
17232
17269
  slug: {
17233
17270
  linkedTo: "title",
17234
17271
  rules: {}
@@ -17497,6 +17534,17 @@ var Tb = /* @__PURE__ */ o({
17497
17534
  liveSync: !0,
17498
17535
  rules: {}
17499
17536
  },
17537
+ notInMenu: {
17538
+ type: "boolean",
17539
+ label: "Not in Menu",
17540
+ default: !1,
17541
+ public: !0,
17542
+ inTree: !0,
17543
+ variant: "danger",
17544
+ dbType: "integer",
17545
+ position: "sidebar",
17546
+ rules: {}
17547
+ },
17500
17548
  startShowingAt: {
17501
17549
  type: "datetime",
17502
17550
  label: "Start Showing At",
@@ -17549,6 +17597,21 @@ var Tb = /* @__PURE__ */ o({
17549
17597
  required: !0,
17550
17598
  rules: { required: !0 }
17551
17599
  },
17600
+ disableTitleInContent: {
17601
+ label: "Disable Title in Content",
17602
+ type: "boolean",
17603
+ dbType: "boolean",
17604
+ public: !0,
17605
+ rules: {}
17606
+ },
17607
+ menuTitle: {
17608
+ label: "Menu Title",
17609
+ type: "text",
17610
+ inTree: !0,
17611
+ public: !0,
17612
+ default: "",
17613
+ rules: {}
17614
+ },
17552
17615
  slug: {
17553
17616
  linkedTo: "title",
17554
17617
  rules: {}
@@ -17802,6 +17865,17 @@ var Tb = /* @__PURE__ */ o({
17802
17865
  liveSync: !0,
17803
17866
  rules: {}
17804
17867
  },
17868
+ notInMenu: {
17869
+ type: "boolean",
17870
+ label: "Not in Menu",
17871
+ default: !1,
17872
+ public: !0,
17873
+ inTree: !0,
17874
+ variant: "danger",
17875
+ dbType: "integer",
17876
+ position: "sidebar",
17877
+ rules: {}
17878
+ },
17805
17879
  startShowingAt: {
17806
17880
  type: "datetime",
17807
17881
  label: "Start Showing At",
@@ -17873,6 +17947,21 @@ var Tb = /* @__PURE__ */ o({
17873
17947
  showAsEditorTitle: !0,
17874
17948
  rules: { required: !0 }
17875
17949
  },
17950
+ disableTitleInContent: {
17951
+ label: "Disable Title in Content",
17952
+ type: "boolean",
17953
+ dbType: "boolean",
17954
+ public: !0,
17955
+ rules: {}
17956
+ },
17957
+ menuTitle: {
17958
+ label: "Menu Title",
17959
+ type: "text",
17960
+ inTree: !0,
17961
+ public: !0,
17962
+ default: "",
17963
+ rules: {}
17964
+ },
17876
17965
  slug: {
17877
17966
  linkedTo: "title",
17878
17967
  rules: {}
@@ -18002,6 +18091,17 @@ var Tb = /* @__PURE__ */ o({
18002
18091
  liveSync: !0,
18003
18092
  rules: {}
18004
18093
  },
18094
+ notInMenu: {
18095
+ type: "boolean",
18096
+ label: "Not in Menu",
18097
+ default: !1,
18098
+ public: !0,
18099
+ inTree: !0,
18100
+ variant: "danger",
18101
+ dbType: "integer",
18102
+ position: "sidebar",
18103
+ rules: {}
18104
+ },
18005
18105
  startShowingAt: {
18006
18106
  type: "datetime",
18007
18107
  label: "Start Showing At",
@@ -18055,6 +18155,21 @@ var Tb = /* @__PURE__ */ o({
18055
18155
  showAsEditorTitle: !0,
18056
18156
  rules: { required: !0 }
18057
18157
  },
18158
+ disableTitleInContent: {
18159
+ label: "Disable Title in Content",
18160
+ type: "boolean",
18161
+ dbType: "boolean",
18162
+ public: !0,
18163
+ rules: {}
18164
+ },
18165
+ menuTitle: {
18166
+ label: "Menu Title",
18167
+ type: "text",
18168
+ inTree: !0,
18169
+ public: !0,
18170
+ default: "",
18171
+ rules: {}
18172
+ },
18058
18173
  slug: {
18059
18174
  linkedTo: "title",
18060
18175
  rules: {}
@@ -18170,6 +18285,17 @@ var Tb = /* @__PURE__ */ o({
18170
18285
  liveSync: !0,
18171
18286
  rules: {}
18172
18287
  },
18288
+ notInMenu: {
18289
+ type: "boolean",
18290
+ label: "Not in Menu",
18291
+ default: !1,
18292
+ public: !0,
18293
+ inTree: !0,
18294
+ variant: "danger",
18295
+ dbType: "integer",
18296
+ position: "sidebar",
18297
+ rules: {}
18298
+ },
18173
18299
  startShowingAt: {
18174
18300
  type: "datetime",
18175
18301
  label: "Start Showing At",
@@ -18226,6 +18352,21 @@ var Tb = /* @__PURE__ */ o({
18226
18352
  label: "Link Text",
18227
18353
  rules: {}
18228
18354
  },
18355
+ disableTitleInContent: {
18356
+ label: "Disable Title in Content",
18357
+ type: "boolean",
18358
+ dbType: "boolean",
18359
+ public: !0,
18360
+ rules: {}
18361
+ },
18362
+ menuTitle: {
18363
+ label: "Menu Title",
18364
+ type: "text",
18365
+ inTree: !0,
18366
+ public: !0,
18367
+ default: "",
18368
+ rules: {}
18369
+ },
18229
18370
  slug: {
18230
18371
  label: "Slug",
18231
18372
  linkedTo: "menuTitle, title",
@@ -18265,6 +18406,17 @@ var Tb = /* @__PURE__ */ o({
18265
18406
  liveSync: !0,
18266
18407
  rules: {}
18267
18408
  },
18409
+ notInMenu: {
18410
+ type: "boolean",
18411
+ label: "Not in Menu",
18412
+ default: !1,
18413
+ public: !0,
18414
+ inTree: !0,
18415
+ variant: "danger",
18416
+ dbType: "integer",
18417
+ position: "sidebar",
18418
+ rules: {}
18419
+ },
18268
18420
  startShowingAt: {
18269
18421
  type: "datetime",
18270
18422
  label: "Start Showing At",
@@ -18318,6 +18470,21 @@ var Tb = /* @__PURE__ */ o({
18318
18470
  label: "Link Text",
18319
18471
  rules: {}
18320
18472
  },
18473
+ disableTitleInContent: {
18474
+ label: "Disable Title in Content",
18475
+ type: "boolean",
18476
+ dbType: "boolean",
18477
+ public: !0,
18478
+ rules: {}
18479
+ },
18480
+ menuTitle: {
18481
+ label: "Menu Title",
18482
+ type: "text",
18483
+ inTree: !0,
18484
+ public: !0,
18485
+ default: "",
18486
+ rules: {}
18487
+ },
18321
18488
  slug: {
18322
18489
  label: "Slug",
18323
18490
  linkedTo: "menuTitle, title",
@@ -18352,6 +18519,17 @@ var Tb = /* @__PURE__ */ o({
18352
18519
  liveSync: !0,
18353
18520
  rules: {}
18354
18521
  },
18522
+ notInMenu: {
18523
+ type: "boolean",
18524
+ label: "Not in Menu",
18525
+ default: !1,
18526
+ public: !0,
18527
+ inTree: !0,
18528
+ variant: "danger",
18529
+ dbType: "integer",
18530
+ position: "sidebar",
18531
+ rules: {}
18532
+ },
18355
18533
  startShowingAt: {
18356
18534
  type: "datetime",
18357
18535
  label: "Start Showing At",
@@ -18415,15 +18593,33 @@ var Tb = /* @__PURE__ */ o({
18415
18593
  type: "text",
18416
18594
  dbType: "text",
18417
18595
  public: !0,
18596
+ inTree: !0,
18418
18597
  rules: { required: !0 },
18419
18598
  required: !0
18420
18599
  },
18600
+ disableTitleInContent: {
18601
+ label: "Disable Title in Content",
18602
+ type: "boolean",
18603
+ dbType: "boolean",
18604
+ public: !0,
18605
+ rules: {}
18606
+ },
18607
+ menuTitle: {
18608
+ label: "Menu Title",
18609
+ type: "text",
18610
+ inTree: !0,
18611
+ public: !0,
18612
+ default: "",
18613
+ rules: {},
18614
+ dbType: "text"
18615
+ },
18421
18616
  slug: {
18422
18617
  label: "URL Slug",
18423
18618
  type: "slug",
18424
- linkedTo: "title",
18619
+ linkedTo: "menuTitle,title",
18425
18620
  dbType: "text",
18426
18621
  public: !0,
18622
+ inTree: !0,
18427
18623
  index: !0,
18428
18624
  rules: {
18429
18625
  required: !0,
@@ -18432,13 +18628,6 @@ var Tb = /* @__PURE__ */ o({
18432
18628
  customMessage: "Slug can only contain lowercase letters, numbers, hyphens, and underscores."
18433
18629
  },
18434
18630
  required: !0
18435
- },
18436
- menuTitle: {
18437
- label: "Menu Title",
18438
- type: "text",
18439
- dbType: "text",
18440
- public: !0,
18441
- rules: {}
18442
18631
  }
18443
18632
  }
18444
18633
  },
@@ -18684,6 +18873,17 @@ var Tb = /* @__PURE__ */ o({
18684
18873
  liveSync: !0,
18685
18874
  rules: {}
18686
18875
  },
18876
+ notInMenu: {
18877
+ type: "boolean",
18878
+ label: "Not in Menu",
18879
+ default: !1,
18880
+ public: !0,
18881
+ inTree: !0,
18882
+ variant: "danger",
18883
+ dbType: "integer",
18884
+ position: "sidebar",
18885
+ rules: {}
18886
+ },
18687
18887
  startShowingAt: {
18688
18888
  type: "datetime",
18689
18889
  label: "Start Showing At",
@@ -18735,15 +18935,33 @@ var Tb = /* @__PURE__ */ o({
18735
18935
  type: "text",
18736
18936
  dbType: "text",
18737
18937
  public: !0,
18938
+ inTree: !0,
18738
18939
  rules: { required: !0 },
18739
18940
  required: !0
18740
18941
  },
18942
+ disableTitleInContent: {
18943
+ label: "Disable Title in Content",
18944
+ type: "boolean",
18945
+ dbType: "boolean",
18946
+ public: !0,
18947
+ rules: {}
18948
+ },
18949
+ menuTitle: {
18950
+ label: "Menu Title",
18951
+ type: "text",
18952
+ inTree: !0,
18953
+ public: !0,
18954
+ default: "",
18955
+ rules: {},
18956
+ dbType: "text"
18957
+ },
18741
18958
  slug: {
18742
18959
  label: "URL Slug",
18743
18960
  type: "slug",
18744
- linkedTo: "title",
18961
+ linkedTo: "menuTitle,title",
18745
18962
  dbType: "text",
18746
18963
  public: !0,
18964
+ inTree: !0,
18747
18965
  index: !0,
18748
18966
  rules: {
18749
18967
  required: !0,
@@ -18753,13 +18971,6 @@ var Tb = /* @__PURE__ */ o({
18753
18971
  },
18754
18972
  required: !0
18755
18973
  },
18756
- menuTitle: {
18757
- label: "Menu Title",
18758
- type: "text",
18759
- dbType: "text",
18760
- public: !0,
18761
- rules: {}
18762
- },
18763
18974
  css: {
18764
18975
  label: "CSS",
18765
18976
  type: "textarea",
@@ -18981,6 +19192,17 @@ var Tb = /* @__PURE__ */ o({
18981
19192
  liveSync: !0,
18982
19193
  rules: {}
18983
19194
  },
19195
+ notInMenu: {
19196
+ type: "boolean",
19197
+ label: "Not in Menu",
19198
+ default: !1,
19199
+ public: !0,
19200
+ inTree: !0,
19201
+ variant: "danger",
19202
+ dbType: "integer",
19203
+ position: "sidebar",
19204
+ rules: {}
19205
+ },
18984
19206
  startShowingAt: {
18985
19207
  type: "datetime",
18986
19208
  label: "Start Showing At",
@@ -19043,15 +19265,33 @@ var Tb = /* @__PURE__ */ o({
19043
19265
  type: "text",
19044
19266
  dbType: "text",
19045
19267
  public: !0,
19268
+ inTree: !0,
19046
19269
  rules: { required: !0 },
19047
19270
  required: !0
19048
19271
  },
19272
+ disableTitleInContent: {
19273
+ label: "Disable Title in Content",
19274
+ type: "boolean",
19275
+ dbType: "boolean",
19276
+ public: !0,
19277
+ rules: {}
19278
+ },
19279
+ menuTitle: {
19280
+ label: "Menu Title",
19281
+ type: "text",
19282
+ inTree: !0,
19283
+ public: !0,
19284
+ default: "",
19285
+ rules: {},
19286
+ dbType: "text"
19287
+ },
19049
19288
  slug: {
19050
19289
  label: "URL Slug",
19051
19290
  type: "slug",
19052
- linkedTo: "title",
19291
+ linkedTo: "menuTitle,title",
19053
19292
  dbType: "text",
19054
19293
  public: !0,
19294
+ inTree: !0,
19055
19295
  index: !0,
19056
19296
  rules: {
19057
19297
  required: !0,
@@ -19094,13 +19334,6 @@ var Tb = /* @__PURE__ */ o({
19094
19334
  value: "inherit"
19095
19335
  }],
19096
19336
  rules: {}
19097
- },
19098
- menuTitle: {
19099
- label: "Menu Title",
19100
- type: "text",
19101
- dbType: "text",
19102
- public: !0,
19103
- rules: {}
19104
19337
  }
19105
19338
  }
19106
19339
  },
@@ -19320,6 +19553,17 @@ var Tb = /* @__PURE__ */ o({
19320
19553
  liveSync: !0,
19321
19554
  rules: {}
19322
19555
  },
19556
+ notInMenu: {
19557
+ type: "boolean",
19558
+ label: "Not in Menu",
19559
+ default: !1,
19560
+ public: !0,
19561
+ inTree: !0,
19562
+ variant: "danger",
19563
+ dbType: "integer",
19564
+ position: "sidebar",
19565
+ rules: {}
19566
+ },
19323
19567
  startShowingAt: {
19324
19568
  type: "datetime",
19325
19569
  label: "Start Showing At",
@@ -19371,15 +19615,33 @@ var Tb = /* @__PURE__ */ o({
19371
19615
  type: "text",
19372
19616
  dbType: "text",
19373
19617
  public: !0,
19618
+ inTree: !0,
19374
19619
  rules: { required: !0 },
19375
19620
  required: !0
19376
19621
  },
19622
+ disableTitleInContent: {
19623
+ label: "Disable Title in Content",
19624
+ type: "boolean",
19625
+ dbType: "boolean",
19626
+ public: !0,
19627
+ rules: {}
19628
+ },
19629
+ menuTitle: {
19630
+ label: "Menu Title",
19631
+ type: "text",
19632
+ inTree: !0,
19633
+ public: !0,
19634
+ default: "",
19635
+ rules: {},
19636
+ dbType: "text"
19637
+ },
19377
19638
  slug: {
19378
19639
  label: "URL Slug",
19379
19640
  type: "slug",
19380
- linkedTo: "title",
19641
+ linkedTo: "menuTitle,title",
19381
19642
  dbType: "text",
19382
19643
  public: !0,
19644
+ inTree: !0,
19383
19645
  index: !0,
19384
19646
  rules: {
19385
19647
  required: !0,
@@ -19423,13 +19685,6 @@ var Tb = /* @__PURE__ */ o({
19423
19685
  }],
19424
19686
  rules: {}
19425
19687
  },
19426
- menuTitle: {
19427
- label: "Menu Title",
19428
- type: "text",
19429
- dbType: "text",
19430
- public: !0,
19431
- rules: {}
19432
- },
19433
19688
  schemaType: {
19434
19689
  type: "select",
19435
19690
  label: "Schema.org Entity Type",
@@ -19633,6 +19888,17 @@ var Tb = /* @__PURE__ */ o({
19633
19888
  liveSync: !0,
19634
19889
  rules: {}
19635
19890
  },
19891
+ notInMenu: {
19892
+ type: "boolean",
19893
+ label: "Not in Menu",
19894
+ default: !1,
19895
+ public: !0,
19896
+ inTree: !0,
19897
+ variant: "danger",
19898
+ dbType: "integer",
19899
+ position: "sidebar",
19900
+ rules: {}
19901
+ },
19636
19902
  startShowingAt: {
19637
19903
  type: "datetime",
19638
19904
  label: "Start Showing At",
@@ -19709,6 +19975,17 @@ var Tb = /* @__PURE__ */ o({
19709
19975
  liveSync: !0,
19710
19976
  rules: {}
19711
19977
  },
19978
+ notInMenu: {
19979
+ type: "boolean",
19980
+ label: "Not in Menu",
19981
+ default: !1,
19982
+ public: !0,
19983
+ inTree: !0,
19984
+ variant: "danger",
19985
+ dbType: "integer",
19986
+ position: "sidebar",
19987
+ rules: {}
19988
+ },
19712
19989
  startShowingAt: {
19713
19990
  type: "datetime",
19714
19991
  label: "Start Showing At",
@@ -19776,6 +20053,17 @@ var Tb = /* @__PURE__ */ o({
19776
20053
  liveSync: !0,
19777
20054
  rules: {}
19778
20055
  },
20056
+ notInMenu: {
20057
+ type: "boolean",
20058
+ label: "Not in Menu",
20059
+ default: !1,
20060
+ public: !0,
20061
+ inTree: !0,
20062
+ variant: "danger",
20063
+ dbType: "integer",
20064
+ position: "sidebar",
20065
+ rules: {}
20066
+ },
19779
20067
  startShowingAt: {
19780
20068
  type: "datetime",
19781
20069
  label: "Start Showing At",
@@ -19855,6 +20143,21 @@ var Tb = /* @__PURE__ */ o({
19855
20143
  public: !0,
19856
20144
  rules: { required: !0 }
19857
20145
  },
20146
+ disableTitleInContent: {
20147
+ label: "Disable Title in Content",
20148
+ type: "boolean",
20149
+ dbType: "boolean",
20150
+ public: !0,
20151
+ rules: {}
20152
+ },
20153
+ menuTitle: {
20154
+ label: "Menu Title",
20155
+ type: "text",
20156
+ inTree: !0,
20157
+ public: !0,
20158
+ default: "",
20159
+ rules: {}
20160
+ },
19858
20161
  slug: {
19859
20162
  linkedTo: "title",
19860
20163
  rules: {}
@@ -19945,6 +20248,17 @@ var Tb = /* @__PURE__ */ o({
19945
20248
  liveSync: !0,
19946
20249
  rules: {}
19947
20250
  },
20251
+ notInMenu: {
20252
+ type: "boolean",
20253
+ label: "Not in Menu",
20254
+ default: !1,
20255
+ public: !0,
20256
+ inTree: !0,
20257
+ variant: "danger",
20258
+ dbType: "integer",
20259
+ position: "sidebar",
20260
+ rules: {}
20261
+ },
19948
20262
  startShowingAt: {
19949
20263
  type: "datetime",
19950
20264
  label: "Start Showing At",
@@ -19997,6 +20311,21 @@ var Tb = /* @__PURE__ */ o({
19997
20311
  public: !0,
19998
20312
  rules: { required: !0 }
19999
20313
  },
20314
+ disableTitleInContent: {
20315
+ label: "Disable Title in Content",
20316
+ type: "boolean",
20317
+ dbType: "boolean",
20318
+ public: !0,
20319
+ rules: {}
20320
+ },
20321
+ menuTitle: {
20322
+ label: "Menu Title",
20323
+ type: "text",
20324
+ inTree: !0,
20325
+ public: !0,
20326
+ default: "",
20327
+ rules: {}
20328
+ },
20000
20329
  slug: {
20001
20330
  linkedTo: "title",
20002
20331
  rules: {}
@@ -20073,6 +20402,17 @@ var Tb = /* @__PURE__ */ o({
20073
20402
  liveSync: !0,
20074
20403
  rules: {}
20075
20404
  },
20405
+ notInMenu: {
20406
+ type: "boolean",
20407
+ label: "Not in Menu",
20408
+ default: !1,
20409
+ public: !0,
20410
+ inTree: !0,
20411
+ variant: "danger",
20412
+ dbType: "integer",
20413
+ position: "sidebar",
20414
+ rules: {}
20415
+ },
20076
20416
  startShowingAt: {
20077
20417
  type: "datetime",
20078
20418
  label: "Start Showing At",
@@ -20153,6 +20493,17 @@ var Tb = /* @__PURE__ */ o({
20153
20493
  liveSync: !0,
20154
20494
  rules: {}
20155
20495
  },
20496
+ notInMenu: {
20497
+ type: "boolean",
20498
+ label: "Not in Menu",
20499
+ default: !1,
20500
+ public: !0,
20501
+ inTree: !0,
20502
+ variant: "danger",
20503
+ dbType: "integer",
20504
+ position: "sidebar",
20505
+ rules: {}
20506
+ },
20156
20507
  startShowingAt: {
20157
20508
  type: "datetime",
20158
20509
  label: "Start Showing At",
@@ -20222,6 +20573,17 @@ var Tb = /* @__PURE__ */ o({
20222
20573
  liveSync: !0,
20223
20574
  rules: {}
20224
20575
  },
20576
+ notInMenu: {
20577
+ type: "boolean",
20578
+ label: "Not in Menu",
20579
+ default: !1,
20580
+ public: !0,
20581
+ inTree: !0,
20582
+ variant: "danger",
20583
+ dbType: "integer",
20584
+ position: "sidebar",
20585
+ rules: {}
20586
+ },
20225
20587
  startShowingAt: {
20226
20588
  type: "datetime",
20227
20589
  label: "Start Showing At",
@@ -20363,6 +20725,17 @@ var Tb = /* @__PURE__ */ o({
20363
20725
  liveSync: !0,
20364
20726
  rules: {}
20365
20727
  },
20728
+ notInMenu: {
20729
+ type: "boolean",
20730
+ label: "Not in Menu",
20731
+ default: !1,
20732
+ public: !0,
20733
+ inTree: !0,
20734
+ variant: "danger",
20735
+ dbType: "integer",
20736
+ position: "sidebar",
20737
+ rules: {}
20738
+ },
20366
20739
  startShowingAt: {
20367
20740
  type: "datetime",
20368
20741
  label: "Start Showing At",
@@ -20489,6 +20862,17 @@ var Tb = /* @__PURE__ */ o({
20489
20862
  liveSync: !0,
20490
20863
  rules: {}
20491
20864
  },
20865
+ notInMenu: {
20866
+ type: "boolean",
20867
+ label: "Not in Menu",
20868
+ default: !1,
20869
+ public: !0,
20870
+ inTree: !0,
20871
+ variant: "danger",
20872
+ dbType: "integer",
20873
+ position: "sidebar",
20874
+ rules: {}
20875
+ },
20492
20876
  startShowingAt: {
20493
20877
  type: "datetime",
20494
20878
  label: "Start Showing At",
@@ -20647,6 +21031,17 @@ var Tb = /* @__PURE__ */ o({
20647
21031
  liveSync: !0,
20648
21032
  rules: {}
20649
21033
  },
21034
+ notInMenu: {
21035
+ type: "boolean",
21036
+ label: "Not in Menu",
21037
+ default: !1,
21038
+ public: !0,
21039
+ inTree: !0,
21040
+ variant: "danger",
21041
+ dbType: "integer",
21042
+ position: "sidebar",
21043
+ rules: {}
21044
+ },
20650
21045
  startShowingAt: {
20651
21046
  type: "datetime",
20652
21047
  label: "Start Showing At",
@@ -20807,6 +21202,36 @@ var Tb = /* @__PURE__ */ o({
20807
21202
  isHierarchical: !1,
20808
21203
  tabs: {}
20809
21204
  },
21205
+ "media-tag": {
21206
+ id: "media-tag",
21207
+ label: "Media Tag",
21208
+ hierarchical: !1,
21209
+ fields: {
21210
+ label: {
21211
+ type: "text",
21212
+ label: "Label",
21213
+ required: !0,
21214
+ rules: { required: !0 }
21215
+ },
21216
+ slug: {
21217
+ linkedTo: "label",
21218
+ rules: {}
21219
+ },
21220
+ iconName: {
21221
+ label: "Icon",
21222
+ type: "icon",
21223
+ dbType: "text",
21224
+ packages: [
21225
+ "heroicons",
21226
+ "lucide",
21227
+ "mdi"
21228
+ ],
21229
+ rules: {}
21230
+ }
21231
+ },
21232
+ isHierarchical: !1,
21233
+ tabs: {}
21234
+ },
20810
21235
  tags: {
20811
21236
  id: "tags",
20812
21237
  label: "Tag",
@@ -20894,6 +21319,16 @@ var Tb = /* @__PURE__ */ o({
20894
21319
  position: "sidebar",
20895
21320
  liveSync: !0
20896
21321
  },
21322
+ notInMenu: {
21323
+ type: "boolean",
21324
+ label: "Not in Menu",
21325
+ default: !1,
21326
+ public: !0,
21327
+ inTree: !0,
21328
+ variant: "danger",
21329
+ dbType: "integer",
21330
+ position: "sidebar"
21331
+ },
20897
21332
  startShowingAt: {
20898
21333
  type: "datetime",
20899
21334
  label: "Start Showing At",
@@ -20937,6 +21372,16 @@ var Tb = /* @__PURE__ */ o({
20937
21372
  position: "sidebar",
20938
21373
  liveSync: !0
20939
21374
  },
21375
+ notInMenu: {
21376
+ type: "boolean",
21377
+ label: "Not in Menu",
21378
+ default: !1,
21379
+ public: !0,
21380
+ inTree: !0,
21381
+ variant: "danger",
21382
+ dbType: "integer",
21383
+ position: "sidebar"
21384
+ },
20940
21385
  startShowingAt: {
20941
21386
  type: "datetime",
20942
21387
  label: "Start Showing At",
@@ -20988,6 +21433,16 @@ var Tb = /* @__PURE__ */ o({
20988
21433
  position: "sidebar",
20989
21434
  liveSync: !0
20990
21435
  },
21436
+ notInMenu: {
21437
+ type: "boolean",
21438
+ label: "Not in Menu",
21439
+ default: !1,
21440
+ public: !0,
21441
+ inTree: !0,
21442
+ variant: "danger",
21443
+ dbType: "integer",
21444
+ position: "sidebar"
21445
+ },
20991
21446
  startShowingAt: {
20992
21447
  type: "datetime",
20993
21448
  label: "Start Showing At",
@@ -21051,6 +21506,16 @@ var Tb = /* @__PURE__ */ o({
21051
21506
  position: "sidebar",
21052
21507
  liveSync: !0
21053
21508
  },
21509
+ notInMenu: {
21510
+ type: "boolean",
21511
+ label: "Not in Menu",
21512
+ default: !1,
21513
+ public: !0,
21514
+ inTree: !0,
21515
+ variant: "danger",
21516
+ dbType: "integer",
21517
+ position: "sidebar"
21518
+ },
21054
21519
  startShowingAt: {
21055
21520
  type: "datetime",
21056
21521
  label: "Start Showing At",
@@ -21094,6 +21559,16 @@ var Tb = /* @__PURE__ */ o({
21094
21559
  position: "sidebar",
21095
21560
  liveSync: !0
21096
21561
  },
21562
+ notInMenu: {
21563
+ type: "boolean",
21564
+ label: "Not in Menu",
21565
+ default: !1,
21566
+ public: !0,
21567
+ inTree: !0,
21568
+ variant: "danger",
21569
+ dbType: "integer",
21570
+ position: "sidebar"
21571
+ },
21097
21572
  startShowingAt: {
21098
21573
  type: "datetime",
21099
21574
  label: "Start Showing At",
@@ -21112,6 +21587,60 @@ var Tb = /* @__PURE__ */ o({
21112
21587
  } },
21113
21588
  category: "Content"
21114
21589
  },
21590
+ "image-gallery": {
21591
+ id: "image-gallery",
21592
+ label: "Image Gallery",
21593
+ group: "Media",
21594
+ fields: {
21595
+ columns: {
21596
+ label: "Column Count",
21597
+ type: "select",
21598
+ default: "2",
21599
+ public: !0,
21600
+ options: [
21601
+ {
21602
+ label: "1 Column (Full Width)",
21603
+ value: "1"
21604
+ },
21605
+ {
21606
+ label: "2 Columns",
21607
+ value: "2"
21608
+ },
21609
+ {
21610
+ label: "3 Columns",
21611
+ value: "3"
21612
+ },
21613
+ {
21614
+ label: "4 Columns",
21615
+ value: "4"
21616
+ },
21617
+ {
21618
+ label: "6 Columns",
21619
+ value: "6"
21620
+ }
21621
+ ],
21622
+ rules: {}
21623
+ },
21624
+ crop: {
21625
+ label: "Crop Ratio",
21626
+ rules: {}
21627
+ },
21628
+ images: {
21629
+ label: "Gallery Images",
21630
+ type: "image",
21631
+ multiple: !0,
21632
+ maxSizeMB: 20,
21633
+ allowedTypes: ["image/*"],
21634
+ public: !0,
21635
+ crops: { standard: {
21636
+ label: "Standard Portrait (4:3)",
21637
+ aspectRatio: 1.8
21638
+ } },
21639
+ rules: {}
21640
+ }
21641
+ },
21642
+ category: "Content"
21643
+ },
21115
21644
  image_card: {
21116
21645
  id: "image_card",
21117
21646
  label: "Image Card",
@@ -21187,6 +21716,16 @@ var Tb = /* @__PURE__ */ o({
21187
21716
  position: "sidebar",
21188
21717
  liveSync: !0
21189
21718
  },
21719
+ notInMenu: {
21720
+ type: "boolean",
21721
+ label: "Not in Menu",
21722
+ default: !1,
21723
+ public: !0,
21724
+ inTree: !0,
21725
+ variant: "danger",
21726
+ dbType: "integer",
21727
+ position: "sidebar"
21728
+ },
21190
21729
  startShowingAt: {
21191
21730
  type: "datetime",
21192
21731
  label: "Start Showing At",
@@ -21308,6 +21847,16 @@ var Tb = /* @__PURE__ */ o({
21308
21847
  position: "sidebar",
21309
21848
  liveSync: !0
21310
21849
  },
21850
+ notInMenu: {
21851
+ type: "boolean",
21852
+ label: "Not in Menu",
21853
+ default: !1,
21854
+ public: !0,
21855
+ inTree: !0,
21856
+ variant: "danger",
21857
+ dbType: "integer",
21858
+ position: "sidebar"
21859
+ },
21311
21860
  startShowingAt: {
21312
21861
  type: "datetime",
21313
21862
  label: "Start Showing At",
@@ -21369,6 +21918,16 @@ var Tb = /* @__PURE__ */ o({
21369
21918
  position: "sidebar",
21370
21919
  liveSync: !0
21371
21920
  },
21921
+ notInMenu: {
21922
+ type: "boolean",
21923
+ label: "Not in Menu",
21924
+ default: !1,
21925
+ public: !0,
21926
+ inTree: !0,
21927
+ variant: "danger",
21928
+ dbType: "integer",
21929
+ position: "sidebar"
21930
+ },
21372
21931
  startShowingAt: {
21373
21932
  type: "datetime",
21374
21933
  label: "Start Showing At",
@@ -21414,6 +21973,16 @@ var Tb = /* @__PURE__ */ o({
21414
21973
  position: "sidebar",
21415
21974
  liveSync: !0
21416
21975
  },
21976
+ notInMenu: {
21977
+ type: "boolean",
21978
+ label: "Not in Menu",
21979
+ default: !1,
21980
+ public: !0,
21981
+ inTree: !0,
21982
+ variant: "danger",
21983
+ dbType: "integer",
21984
+ position: "sidebar"
21985
+ },
21417
21986
  startShowingAt: {
21418
21987
  type: "datetime",
21419
21988
  label: "Start Showing At",
@@ -21432,6 +22001,17 @@ var Tb = /* @__PURE__ */ o({
21432
22001
  },
21433
22002
  category: "Content"
21434
22003
  },
22004
+ youtube: {
22005
+ id: "youtube",
22006
+ label: "YouTube",
22007
+ group: "Media",
22008
+ fields: { youtubeUrl: {
22009
+ label: "Youtube URL",
22010
+ type: "text",
22011
+ rules: {}
22012
+ } },
22013
+ category: "Content"
22014
+ },
21435
22015
  form: {
21436
22016
  id: "form",
21437
22017
  label: "Dynamic Form",
@@ -21462,6 +22042,17 @@ var Tb = /* @__PURE__ */ o({
21462
22042
  liveSync: !0,
21463
22043
  rules: {}
21464
22044
  },
22045
+ notInMenu: {
22046
+ type: "boolean",
22047
+ label: "Not in Menu",
22048
+ default: !1,
22049
+ public: !0,
22050
+ inTree: !0,
22051
+ variant: "danger",
22052
+ dbType: "integer",
22053
+ position: "sidebar",
22054
+ rules: {}
22055
+ },
21465
22056
  startShowingAt: {
21466
22057
  type: "datetime",
21467
22058
  label: "Start Showing At",
@@ -21747,6 +22338,16 @@ var Tb = /* @__PURE__ */ o({
21747
22338
  position: "sidebar",
21748
22339
  liveSync: !0
21749
22340
  },
22341
+ notInMenu: {
22342
+ type: "boolean",
22343
+ label: "Not in Menu",
22344
+ default: !1,
22345
+ public: !0,
22346
+ inTree: !0,
22347
+ variant: "danger",
22348
+ dbType: "integer",
22349
+ position: "sidebar"
22350
+ },
21750
22351
  startShowingAt: {
21751
22352
  type: "datetime",
21752
22353
  label: "Start Showing At",
@@ -21926,14 +22527,29 @@ var Tb = /* @__PURE__ */ o({
21926
22527
  type: "text",
21927
22528
  dbType: "text",
21928
22529
  public: !0,
22530
+ inTree: !0,
21929
22531
  rules: { required: !0 }
21930
22532
  },
22533
+ disableTitleInContent: {
22534
+ label: "Disable Title in Content",
22535
+ type: "boolean",
22536
+ dbType: "boolean",
22537
+ public: !0
22538
+ },
22539
+ menuTitle: {
22540
+ label: "Menu Title",
22541
+ type: "text",
22542
+ inTree: !0,
22543
+ public: !0,
22544
+ default: ""
22545
+ },
21931
22546
  slug: {
21932
22547
  label: "URL Slug",
21933
22548
  type: "slug",
21934
- linkedTo: "title",
22549
+ linkedTo: "menuTitle,title",
21935
22550
  dbType: "text",
21936
22551
  public: !0,
22552
+ inTree: !0,
21937
22553
  index: !0,
21938
22554
  rules: {
21939
22555
  required: !0,
@@ -22262,7 +22878,13 @@ var Tb = /* @__PURE__ */ o({
22262
22878
  treeTemplate: null,
22263
22879
  channelTemplate: null,
22264
22880
  userTemplate: null,
22265
- treeExposedFields: ["summary"]
22881
+ treeExposedFields: [
22882
+ "summary",
22883
+ "notInMenu",
22884
+ "title",
22885
+ "menuTitle",
22886
+ "slug"
22887
+ ]
22266
22888
  }, Db = Eb, Ob = {
22267
22889
  content_schemas: "\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n type TEXT UNIQUE NOT NULL,\n schemaJson TEXT NOT NULL,\n isSystem INTEGER DEFAULT 1,\n createdAt TEXT DEFAULT CURRENT_TIMESTAMP,\n updatedAt TEXT DEFAULT CURRENT_TIMESTAMP\n ",
22268
22890
  users: "\n id TEXT PRIMARY KEY,\n email UNIQUE NOT NULL,\n name TEXT NOT NULL,\n globalRole TEXT DEFAULT 'editor',\n createdAt TEXT DEFAULT CURRENT_TIMESTAMP,\n updatedAt TEXT DEFAULT CURRENT_TIMESTAMP\n ",
@@ -22280,9 +22902,10 @@ var Tb = /* @__PURE__ */ o({
22280
22902
  node_assets: "\n nodeId INTEGER NOT NULL,\n assetId TEXT NOT NULL,\n fieldKey TEXT NOT NULL,\n sortOrder INTEGER DEFAULT 0,\n PRIMARY KEY (nodeId, assetId, fieldKey),\n FOREIGN KEY (nodeId) REFERENCES content_nodes(id) ON DELETE CASCADE,\n FOREIGN KEY (assetId) REFERENCES assets(id) ON DELETE CASCADE\n ",
22281
22903
  taxonomy_terms: "\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n taxonomy TEXT NOT NULL,\n key TEXT NOT NULL,\n label TEXT NOT NULL,\n parentId INTEGER,\n sortOrder INTEGER DEFAULT 0,\n dataJson TEXT,\n createdAt TEXT DEFAULT CURRENT_TIMESTAMP,\n updatedAt TEXT DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (parentId) REFERENCES taxonomy_terms(id) ON DELETE CASCADE,\n UNIQUE(taxonomy, key)\n ",
22282
22904
  node_terms: "\n nodeId INTEGER NOT NULL,\n termId INTEGER NOT NULL,\n fieldKey TEXT NOT NULL,\n sortOrder INTEGER DEFAULT 0,\n PRIMARY KEY (nodeId, termId, fieldKey),\n FOREIGN KEY (nodeId) REFERENCES content_nodes(id) ON DELETE CASCADE,\n FOREIGN KEY (termId) REFERENCES taxonomy_terms(id) ON DELETE CASCADE\n ",
22905
+ asset_terms: "\n assetId TEXT NOT NULL,\n termId INTEGER NOT NULL,\n PRIMARY KEY (assetId, termId),\n FOREIGN KEY (assetId) REFERENCES assets(id) ON DELETE CASCADE,\n FOREIGN KEY (termId) REFERENCES taxonomy_terms(id) ON DELETE CASCADE\n ",
22283
22906
  node_relations: "\n sourceNodeId INTEGER NOT NULL,\n targetNodeId INTEGER NOT NULL,\n fieldKey TEXT NOT NULL,\n sortOrder INTEGER DEFAULT 0,\n PRIMARY KEY (sourceNodeId, targetNodeId, fieldKey),\n FOREIGN KEY (sourceNodeId) REFERENCES content_nodes(id) ON DELETE CASCADE,\n FOREIGN KEY (targetNodeId) REFERENCES content_nodes(id) ON DELETE CASCADE\n ",
22284
22907
  node_routes: "\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n path TEXT NOT NULL,\n channelId INTEGER NOT NULL,\n nodeId INTEGER,\n treeId INTEGER,\n isCanonical INTEGER DEFAULT 1,\n redirectUrl TEXT,\n createdAt TEXT DEFAULT CURRENT_TIMESTAMP,\n updatedAt TEXT DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (channelId) REFERENCES channels(id) ON DELETE CASCADE,\n FOREIGN KEY (nodeId) REFERENCES content_nodes(id) ON DELETE CASCADE,\n FOREIGN KEY (treeId) REFERENCES trees(id) ON DELETE CASCADE,\n UNIQUE(path, channelId)\n "
22285
- }, kb = /* @__PURE__ */ "CREATE INDEX IF NOT EXISTS idx_tree_nodes_tree_parent ON tree_nodes(treeId, parentId);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_contentId ON tree_nodes(contentId);.CREATE INDEX IF NOT EXISTS idx_content_nodes_slug_status ON content_nodes(slug, status);.CREATE INDEX IF NOT EXISTS idx_content_blocks_node ON content_blocks(contentId, isDraft);.CREATE INDEX IF NOT EXISTS idx_node_assets_nodeId ON node_assets(nodeId);.CREATE INDEX IF NOT EXISTS idx_node_assets_assetId ON node_assets(assetId);.CREATE INDEX IF NOT EXISTS idx_content_schemas_type ON content_schemas(type);.CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(userId);.CREATE INDEX IF NOT EXISTS idx_sessions_expires ON sessions(expiresAt);.CREATE INDEX IF NOT EXISTS idx_channels_visibility ON channels(isHidden);.CREATE INDEX IF NOT EXISTS idx_trees_visibility ON trees(isHidden);.CREATE INDEX IF NOT EXISTS idx_content_nodes_visibility ON content_nodes(isHidden, status);.CREATE INDEX IF NOT EXISTS idx_content_nodes_slug ON content_nodes(slug);.CREATE INDEX IF NOT EXISTS idx_content_nodes_type ON content_nodes(contentType);.CREATE INDEX IF NOT EXISTS idx_content_nodes_deleted_updated ON content_nodes(deletedAt, updatedAt DESC);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_hierarchy ON tree_nodes(treeId, parentId, sortOrder);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_content ON tree_nodes(contentId, treeId);.CREATE INDEX IF NOT EXISTS idx_content_blocks_content ON content_blocks(contentId, isDraft, region, sortOrder);.CREATE INDEX IF NOT EXISTS idx_node_channels_channel ON node_channels(channelId, nodeId);.CREATE INDEX IF NOT EXISTS idx_node_channels_node ON node_channels(nodeId, channelId);.CREATE INDEX IF NOT EXISTS idx_node_assets_node_asset ON node_assets(nodeId, assetId);.CREATE INDEX IF NOT EXISTS idx_node_assets_asset_node ON node_assets(assetId, nodeId);.CREATE UNIQUE INDEX IF NOT EXISTS idx_node_revisions_version ON node_revisions(nodeId, version);.CREATE INDEX IF NOT EXISTS idx_assets_system_created ON assets(isSystemVariant, createdAt DESC);.CREATE INDEX IF NOT EXISTS idx_assets_system_mime ON assets(isSystemVariant, mimeType);.CREATE INDEX IF NOT EXISTS idx_assets_deleted ON assets(deletedAt);.CREATE INDEX IF NOT EXISTS idx_assets_parent ON assets(parentAssetId);.CREATE INDEX IF NOT EXISTS idx_taxonomy_terms_tax ON taxonomy_terms(taxonomy);.CREATE INDEX IF NOT EXISTS idx_node_terms_node ON node_terms(nodeId);.CREATE INDEX IF NOT EXISTS idx_node_terms_term ON node_terms(termId);.CREATE INDEX IF NOT EXISTS idx_node_terms_node_term ON node_terms(nodeId, termId);.CREATE INDEX IF NOT EXISTS idx_node_terms_term_node ON node_terms(termId, nodeId);.CREATE INDEX IF NOT EXISTS idx_node_relations_source ON node_relations(sourceNodeId);.CREATE INDEX IF NOT EXISTS idx_node_relations_target ON node_relations(targetNodeId);.CREATE INDEX IF NOT EXISTS idx_node_routes_lookup ON node_routes(path, channelId);.CREATE INDEX IF NOT EXISTS idx_node_routes_node ON node_routes(nodeId);.CREATE INDEX IF NOT EXISTS idx_content_nodes_public_feed ON content_nodes(contentType, isHidden, status, startShowingAt, stopShowingAt, updatedAt DESC);".split(".");
22908
+ }, kb = /* @__PURE__ */ "CREATE INDEX IF NOT EXISTS idx_tree_nodes_tree_parent ON tree_nodes(treeId, parentId);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_contentId ON tree_nodes(contentId);.CREATE INDEX IF NOT EXISTS idx_content_nodes_slug_status ON content_nodes(slug, status);.CREATE INDEX IF NOT EXISTS idx_content_blocks_node ON content_blocks(contentId, isDraft);.CREATE INDEX IF NOT EXISTS idx_node_assets_nodeId ON node_assets(nodeId);.CREATE INDEX IF NOT EXISTS idx_node_assets_assetId ON node_assets(assetId);.CREATE INDEX IF NOT EXISTS idx_content_schemas_type ON content_schemas(type);.CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(userId);.CREATE INDEX IF NOT EXISTS idx_sessions_expires ON sessions(expiresAt);.CREATE INDEX IF NOT EXISTS idx_channels_visibility ON channels(isHidden);.CREATE INDEX IF NOT EXISTS idx_trees_visibility ON trees(isHidden);.CREATE INDEX IF NOT EXISTS idx_content_nodes_visibility ON content_nodes(isHidden, status);.CREATE INDEX IF NOT EXISTS idx_content_nodes_slug ON content_nodes(slug);.CREATE INDEX IF NOT EXISTS idx_content_nodes_type ON content_nodes(contentType);.CREATE INDEX IF NOT EXISTS idx_content_nodes_deleted_updated ON content_nodes(deletedAt, updatedAt DESC);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_hierarchy ON tree_nodes(treeId, parentId, sortOrder);.CREATE INDEX IF NOT EXISTS idx_tree_nodes_content ON tree_nodes(contentId, treeId);.CREATE INDEX IF NOT EXISTS idx_content_blocks_content ON content_blocks(contentId, isDraft, region, sortOrder);.CREATE INDEX IF NOT EXISTS idx_node_channels_channel ON node_channels(channelId, nodeId);.CREATE INDEX IF NOT EXISTS idx_node_channels_node ON node_channels(nodeId, channelId);.CREATE INDEX IF NOT EXISTS idx_node_assets_node_asset ON node_assets(nodeId, assetId);.CREATE INDEX IF NOT EXISTS idx_node_assets_asset_node ON node_assets(assetId, nodeId);.CREATE UNIQUE INDEX IF NOT EXISTS idx_node_revisions_version ON node_revisions(nodeId, version);.CREATE INDEX IF NOT EXISTS idx_assets_system_created ON assets(isSystemVariant, createdAt DESC);.CREATE INDEX IF NOT EXISTS idx_assets_system_mime ON assets(isSystemVariant, mimeType);.CREATE INDEX IF NOT EXISTS idx_assets_deleted ON assets(deletedAt);.CREATE INDEX IF NOT EXISTS idx_assets_parent ON assets(parentAssetId);.CREATE INDEX IF NOT EXISTS idx_taxonomy_terms_tax ON taxonomy_terms(taxonomy);.CREATE INDEX IF NOT EXISTS idx_node_terms_node ON node_terms(nodeId);.CREATE INDEX IF NOT EXISTS idx_node_terms_term ON node_terms(termId);.CREATE INDEX IF NOT EXISTS idx_node_terms_node_term ON node_terms(nodeId, termId);.CREATE INDEX IF NOT EXISTS idx_node_terms_term_node ON node_terms(termId, nodeId);.CREATE INDEX IF NOT EXISTS idx_asset_terms_asset ON asset_terms(assetId);.CREATE INDEX IF NOT EXISTS idx_asset_terms_term ON asset_terms(termId);.CREATE INDEX IF NOT EXISTS idx_node_relations_source ON node_relations(sourceNodeId);.CREATE INDEX IF NOT EXISTS idx_node_relations_target ON node_relations(targetNodeId);.CREATE INDEX IF NOT EXISTS idx_node_routes_lookup ON node_routes(path, channelId);.CREATE INDEX IF NOT EXISTS idx_node_routes_node ON node_routes(nodeId);.CREATE INDEX IF NOT EXISTS idx_content_nodes_public_feed ON content_nodes(contentType, isHidden, status, startShowingAt, stopShowingAt, updatedAt DESC);".split(".");
22286
22909
  function Ab(e) {
22287
22910
  let t = /* @__PURE__ */ new Set();
22288
22911
  function n(e) {
@@ -22535,15 +23158,15 @@ var Fb = { hasSubscribers: !1 }, Ib = Fb, Lb = Fb, Rb = typeof performance == "o
22535
23158
  let { max: n = 0, ttl: r, ttlResolution: i = 1, ttlAutopurge: a, updateAgeOnGet: o, updateAgeOnHas: s, allowStale: c, dispose: l, onInsert: u, disposeAfter: d, noDisposeOnSet: f, noUpdateTTL: p, maxSize: m = 0, maxEntrySize: h = 0, sizeCalculation: g, fetchMethod: _, memoMethod: v, noDeleteOnFetchRejection: y, noDeleteOnStaleGet: b, allowStaleOnFetchRejection: x, allowStaleOnFetchAbort: S, ignoreFetchAbort: C, backgroundFetchSize: w = 1, perf: T } = t;
22536
23159
  if (this.backgroundFetchSize = w, T !== void 0 && typeof T?.now != "function") throw TypeError("perf option must have a now() method if specified");
22537
23160
  if (this.#s = T ?? Rb, n !== 0 && !Wb(n)) throw TypeError("max option must be a nonnegative integer");
22538
- let ee = n ? Gb(n) : Array;
22539
- if (!ee) throw Error("invalid max value: " + n);
23161
+ let E = n ? Gb(n) : Array;
23162
+ if (!E) throw Error("invalid max value: " + n);
22540
23163
  if (this.#e = n, this.#t = m, this.maxEntrySize = h || this.#t, this.sizeCalculation = g, this.sizeCalculation) {
22541
23164
  if (!this.#t && !this.maxEntrySize) throw TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
22542
23165
  if (typeof this.sizeCalculation != "function") throw TypeError("sizeCalculation set to non-function");
22543
23166
  }
22544
23167
  if (v !== void 0 && typeof v != "function") throw TypeError("memoMethod must be a function if defined");
22545
23168
  if (this.#o = v, _ !== void 0 && typeof _ != "function") throw TypeError("fetchMethod must be a function if specified");
22546
- if (this.#a = _, this.#w = !!_, this.#u = /* @__PURE__ */ new Map(), this.#d = Array.from({ length: n }).fill(void 0), this.#f = Array.from({ length: n }).fill(void 0), this.#p = new ee(n), this.#m = new ee(n), this.#h = 0, this.#g = 0, this.#_ = qb.create(n), this.#c = 0, this.#l = 0, typeof l == "function" && (this.#n = l), typeof u == "function" && (this.#r = u), typeof d == "function" ? (this.#i = d, this.#v = []) : (this.#i = void 0, this.#v = void 0), this.#C = !!this.#n, this.#E = !!this.#r, this.#T = !!this.#i, this.noDisposeOnSet = !!f, this.noUpdateTTL = !!p, this.noDeleteOnFetchRejection = !!y, this.allowStaleOnFetchRejection = !!x, this.allowStaleOnFetchAbort = !!S, this.ignoreFetchAbort = !!C, this.maxEntrySize !== 0) {
23169
+ if (this.#a = _, this.#w = !!_, this.#u = /* @__PURE__ */ new Map(), this.#d = Array.from({ length: n }).fill(void 0), this.#f = Array.from({ length: n }).fill(void 0), this.#p = new E(n), this.#m = new E(n), this.#h = 0, this.#g = 0, this.#_ = qb.create(n), this.#c = 0, this.#l = 0, typeof l == "function" && (this.#n = l), typeof u == "function" && (this.#r = u), typeof d == "function" ? (this.#i = d, this.#v = []) : (this.#i = void 0, this.#v = void 0), this.#C = !!this.#n, this.#E = !!this.#r, this.#T = !!this.#i, this.noDisposeOnSet = !!f, this.noUpdateTTL = !!p, this.noDeleteOnFetchRejection = !!y, this.allowStaleOnFetchRejection = !!x, this.allowStaleOnFetchAbort = !!S, this.ignoreFetchAbort = !!C, this.maxEntrySize !== 0) {
22547
23170
  if (this.#t !== 0 && !Wb(this.#t)) throw TypeError("maxSize must be a positive integer if specified");
22548
23171
  if (!Wb(this.maxEntrySize)) throw TypeError("maxEntrySize must be a positive integer if specified");
22549
23172
  this.#M();
@@ -24182,7 +24805,15 @@ gx.get("/", async (e) => {
24182
24805
  if (a) {
24183
24806
  let { resolvedLayoutId: e, inheritedFields: r } = await Dx(t, a.parentId, a.treeId);
24184
24807
  (s === "inherit" || !s) && (s = e);
24185
- for (let [e, t] of Object.entries(r)) e !== "layoutId" && e !== "subpageLayoutId" && (n[e] === void 0 || n[e] === null || n[e] === "") && t !== void 0 && (n[e] = t);
24808
+ let i = /* @__PURE__ */ new Set();
24809
+ o.fields && Object.entries(o.fields).forEach(([e, t]) => {
24810
+ t?.inheritsFromParent && i.add(e);
24811
+ }), o.tabs && Object.values(o.tabs).forEach((e) => {
24812
+ e.fields && Object.entries(e.fields).forEach(([e, t]) => {
24813
+ t?.inheritsFromParent && i.add(e);
24814
+ });
24815
+ });
24816
+ for (let [e, t] of Object.entries(r)) e !== "layoutId" && e !== "subpageLayoutId" && i.has(e) && (n[e] === void 0 || n[e] === null || n[e] === "") && t !== void 0 && (n[e] = t);
24186
24817
  }
24187
24818
  s && s !== "inherit" && !((e) => {
24188
24819
  if (!o || Object.keys(o).length === 0 || e === o.defaultLayout) return !0;
@@ -24275,22 +24906,22 @@ gx.get("/", async (e) => {
24275
24906
  ...m,
24276
24907
  f,
24277
24908
  p
24278
- ], C = await t.prepare(x).all(...S), w = Array.isArray(C) ? C : C?.results || [], T = w.map((e) => e.id), ee = {}, E = {};
24909
+ ], C = await t.prepare(x).all(...S), w = Array.isArray(C) ? C : C?.results || [], T = w.map((e) => e.id), E = {}, D = {};
24279
24910
  if (T.length > 0) {
24280
24911
  let e = T.map(() => "?").join(","), n = await t.prepare(`
24281
24912
  SELECT nc.nodeId, c.label FROM node_channels nc JOIN channels c ON nc.channelId = c.id WHERE nc.nodeId IN (${e})
24282
24913
  `).all(...T);
24283
24914
  (Array.isArray(n) ? n : n?.results || []).forEach((e) => {
24284
- ee[e.nodeId] || (ee[e.nodeId] = []), ee[e.nodeId].push(e.label);
24915
+ E[e.nodeId] || (E[e.nodeId] = []), E[e.nodeId].push(e.label);
24285
24916
  });
24286
24917
  let r = await t.prepare(`
24287
24918
  SELECT tn.contentId as nodeId, t.label FROM tree_nodes tn JOIN trees t ON tn.treeId = t.id WHERE tn.contentId IN (${e})
24288
24919
  `).all(...T);
24289
24920
  (Array.isArray(r) ? r : r?.results || []).forEach((e) => {
24290
- E[e.nodeId] || (E[e.nodeId] = []), E[e.nodeId].includes(e.label) || E[e.nodeId].push(e.label);
24921
+ D[e.nodeId] || (D[e.nodeId] = []), D[e.nodeId].includes(e.label) || D[e.nodeId].push(e.label);
24291
24922
  });
24292
24923
  }
24293
- let D = await Promise.all(w.map(async (e) => {
24924
+ let O = await Promise.all(w.map(async (e) => {
24294
24925
  let n = e.status === "draft" || !!e.hasUnpublishedChanges, r = {
24295
24926
  id: e.id,
24296
24927
  title: e.title,
@@ -24310,8 +24941,8 @@ gx.get("/", async (e) => {
24310
24941
  updatedById: e.updatedById || null,
24311
24942
  createdAt: e.createdAt,
24312
24943
  updatedAt: e.updatedAt,
24313
- channelNames: ee[e.id] || [],
24314
- treeNames: E[e.id] || [],
24944
+ channelNames: E[e.id] || [],
24945
+ treeNames: D[e.id] || [],
24315
24946
  assetCount: e.assetCount || 0,
24316
24947
  imageCount: e.imageCount || 0,
24317
24948
  videoCount: e.videoCount || 0,
@@ -24325,36 +24956,36 @@ gx.get("/", async (e) => {
24325
24956
  return r;
24326
24957
  }));
24327
24958
  return e.json({
24328
- items: D,
24959
+ items: O,
24329
24960
  total: v,
24330
- hasMore: p + D.length < v,
24961
+ hasMore: p + O.length < v,
24331
24962
  offset: p,
24332
24963
  limit: f
24333
24964
  });
24334
24965
  }), gx.post("/", async (e) => {
24335
- let t = e.get("db"), n = await e.req.json(), r = n.node || n.activeNode || n, i = r.id || n.id, a = i != null && i !== "" && !isNaN(Number(i)) ? Number(i) : null, { title: o, slug: s, language: c, nodeType: l, contentType: u, isHidden: d, hidden: f, is_hidden: p, startShowingAt: m, stopShowingAt: h, blocks: g, channels: _, trees: v, ...y } = r, { cleanedData: b, assetRefs: x, termRefs: S, nodeRefs: C } = ax(Cx(y)), w = xx(d === void 0 ? f === void 0 ? p : f : d), T = l || u || "page", ee = e.get("user")?.id || null, E = typeof c == "string" && c.trim() !== "" ? c.trim() : null, D = v && Array.isArray(v) && v.length > 0 ? v[0] : null, te = D ? D.treeId || D.id : null, O = null;
24336
- if (te) {
24337
- let e = await t.prepare("SELECT dataJson FROM trees WHERE id = ? OR key = ? LIMIT 1").get(Number(te) || -1, String(te));
24966
+ let t = e.get("db"), n = await e.req.json(), r = n.node || n.activeNode || n, i = r.id || n.id, a = i != null && i !== "" && !isNaN(Number(i)) ? Number(i) : null, { title: o, slug: s, language: c, nodeType: l, contentType: u, isHidden: d, hidden: f, is_hidden: p, startShowingAt: m, stopShowingAt: h, blocks: g, channels: _, trees: v, ...y } = r, { cleanedData: b, assetRefs: x, termRefs: S, nodeRefs: C } = ax(Cx(y)), w = xx(d === void 0 ? f === void 0 ? p : f : d), T = l || u || "page", E = e.get("user")?.id || null, D = typeof c == "string" && c.trim() !== "" ? c.trim() : null, O = v && Array.isArray(v) && v.length > 0 ? v[0] : null, ee = O ? O.treeId || O.id : null, k = null;
24967
+ if (ee) {
24968
+ let e = await t.prepare("SELECT dataJson FROM trees WHERE id = ? OR key = ? LIMIT 1").get(Number(ee) || -1, String(ee));
24338
24969
  if (e?.dataJson) try {
24339
24970
  let t = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
24340
- O = t.defaultLanguage?.trim() || t.language?.trim() || null;
24971
+ k = t.defaultLanguage?.trim() || t.language?.trim() || null;
24341
24972
  } catch {}
24342
24973
  }
24343
- if (!O && _ && Array.isArray(_) && _.length > 0) {
24974
+ if (!k && _ && Array.isArray(_) && _.length > 0) {
24344
24975
  let e = typeof _[0] == "object" ? _[0].id : _[0];
24345
24976
  if (e && e !== "all") {
24346
24977
  let n = await t.prepare("SELECT defaultLanguage, dataJson FROM channels WHERE id = ? LIMIT 1").get(Number(e));
24347
24978
  if (n) {
24348
- if (n.defaultLanguage) O = n.defaultLanguage.trim();
24979
+ if (n.defaultLanguage) k = n.defaultLanguage.trim();
24349
24980
  else if (n.dataJson) try {
24350
24981
  let e = typeof n.dataJson == "string" ? JSON.parse(n.dataJson) : n.dataJson;
24351
- O = e.defaultLanguage?.trim() || e.language?.trim() || null;
24982
+ k = e.defaultLanguage?.trim() || e.language?.trim() || null;
24352
24983
  } catch {}
24353
24984
  }
24354
24985
  }
24355
24986
  }
24356
- E && O && E === O && (E = null);
24357
- let k = a, A = /* @__PURE__ */ new Set(), ne = !1, j = "draft", re = 0, ie = s === void 0 ? null : bx(s);
24987
+ D && k && D === k && (D = null);
24988
+ let A = a, j = /* @__PURE__ */ new Set(), te = !1, ne = "draft", re = 0, ie = s === void 0 ? null : bx(s);
24358
24989
  if (ie) {
24359
24990
  let n = [];
24360
24991
  if (v !== void 0 && Array.isArray(v) && v.length > 0) for (let e of v) n.push({
@@ -24385,8 +25016,8 @@ gx.get("/", async (e) => {
24385
25016
  }
24386
25017
  }
24387
25018
  if (a) {
24388
- let e = await t.prepare("SELECT title, slug, language, contentType, isHidden, startShowingAt, stopShowingAt, draftDataJson, dataJson, publishedAt, status, hasUnpublishedChanges FROM content_nodes WHERE id = ?").get(a), n = o === void 0 ? e?.title || "Untitled" : o, r = ie ?? e?.slug ?? null, i = T || e?.contentType || "page", l = c === void 0 ? e?.language ?? null : E, u = w === void 0 ? xx(e?.isHidden) : w, d = m === void 0 ? e?.startShowingAt ?? null : m, f = h === void 0 ? e?.stopShowingAt ?? null : h;
24389
- ne = Tx(e, {
25019
+ let e = await t.prepare("SELECT title, slug, language, contentType, isHidden, startShowingAt, stopShowingAt, draftDataJson, dataJson, publishedAt, status, hasUnpublishedChanges FROM content_nodes WHERE id = ?").get(a), n = o === void 0 ? e?.title || "Untitled" : o, r = ie ?? e?.slug ?? null, i = T || e?.contentType || "page", l = c === void 0 ? e?.language ?? null : D, u = w === void 0 ? xx(e?.isHidden) : w, d = m === void 0 ? e?.startShowingAt ?? null : m, f = h === void 0 ? e?.stopShowingAt ?? null : h;
25020
+ te = Tx(e, {
24390
25021
  title: n,
24391
25022
  slug: r,
24392
25023
  isHidden: u,
@@ -24396,7 +25027,7 @@ gx.get("/", async (e) => {
24396
25027
  });
24397
25028
  let p = e?.draftDataJson || e?.dataJson || "{}";
24398
25029
  try {
24399
- wx(typeof p == "string" ? JSON.parse(p) : p, A);
25030
+ wx(typeof p == "string" ? JSON.parse(p) : p, j);
24400
25031
  } catch {}
24401
25032
  let _ = {};
24402
25033
  try {
@@ -24415,7 +25046,7 @@ gx.get("/", async (e) => {
24415
25046
  ..._,
24416
25047
  ...v
24417
25048
  }), x = !1;
24418
- if (o !== void 0 && o.trim() !== (e?.title || "Untitled") && (x = !0), s !== void 0 && ie !== e?.slug && (x = !0), c !== void 0 && E !== e?.language && (x = !0), m !== void 0 && d !== e?.startShowingAt && (x = !0), h !== void 0 && f !== e?.stopShowingAt && (x = !0), !x && Object.keys(b).length > 0) {
25049
+ if (o !== void 0 && o.trim() !== (e?.title || "Untitled") && (x = !0), s !== void 0 && ie !== e?.slug && (x = !0), c !== void 0 && D !== e?.language && (x = !0), m !== void 0 && d !== e?.startShowingAt && (x = !0), h !== void 0 && f !== e?.stopShowingAt && (x = !0), !x && Object.keys(b).length > 0) {
24419
25050
  for (let e of Object.keys(b)) if (JSON.stringify(b[e]) !== JSON.stringify(_[e])) {
24420
25051
  x = !0;
24421
25052
  break;
@@ -24437,41 +25068,41 @@ gx.get("/", async (e) => {
24437
25068
  }
24438
25069
  }
24439
25070
  }
24440
- j = e?.status === "published" || e?.publishedAt ? "published" : "draft";
25071
+ ne = e?.status === "published" || e?.publishedAt ? "published" : "draft";
24441
25072
  let S = e?.hasUnpublishedChanges === 1 || e?.hasUnpublishedChanges === !0;
24442
25073
  re = x ? 1 : +!!S;
24443
- let C = e?.publishedAt != null || e?.status === "published", D = C ? e.title : n, te = C ? e.slug : r, O = C ? e.contentType : i, k = C ? e.language : l, ae = C ? e.isHidden : u, oe = C ? e.startShowingAt : d, se = C ? e.stopShowingAt : f;
24444
- await t.prepare("\n UPDATE content_nodes \n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, status = ?, draftDataJson = ?, hasUnpublishedChanges = ?, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(D, te, k, O, ae, oe, se, j, y, re, ee, a);
25074
+ let C = e?.publishedAt != null || e?.status === "published", O = C ? e.title : n, ee = C ? e.slug : r, k = C ? e.contentType : i, A = C ? e.language : l, ae = C ? e.isHidden : u, oe = C ? e.startShowingAt : d, se = C ? e.stopShowingAt : f;
25075
+ await t.prepare("\n UPDATE content_nodes \n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, status = ?, draftDataJson = ?, hasUnpublishedChanges = ?, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(O, ee, A, k, ae, oe, se, ne, y, re, E, a);
24445
25076
  } else {
24446
- ne = !0;
25077
+ te = !0;
24447
25078
  let e = m === void 0 ? null : m, n = h === void 0 ? null : h, r = {
24448
25079
  title: o || "Untitled",
24449
25080
  slug: ie,
24450
25081
  contentType: T,
24451
- language: E,
25082
+ language: D,
24452
25083
  isHidden: w,
24453
25084
  startShowingAt: e,
24454
25085
  stopShowingAt: n,
24455
25086
  ...b
24456
- }, i = await t.prepare("\n INSERT INTO content_nodes (contentType, title, slug, language, isHidden, startShowingAt, stopShowingAt, status, draftDataJson, dataJson, hasUnpublishedChanges, createdById, updatedById)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'draft', ?, NULL, 0, ?, ?)\n ").run(T, o || "Untitled", ie, E, w, e, n, JSON.stringify(r), ee, ee);
24457
- k = Number(i.lastInsertRowid);
25087
+ }, i = await t.prepare("\n INSERT INTO content_nodes (contentType, title, slug, language, isHidden, startShowingAt, stopShowingAt, status, draftDataJson, dataJson, hasUnpublishedChanges, createdById, updatedById)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'draft', ?, NULL, 0, ?, ?)\n ").run(T, o || "Untitled", ie, D, w, e, n, JSON.stringify(r), E, E);
25088
+ A = Number(i.lastInsertRowid);
24458
25089
  }
24459
- if (_ !== void 0 && Array.isArray(_) && k) {
24460
- await t.prepare("DELETE FROM node_channels WHERE nodeId = ?").run(k);
25090
+ if (_ !== void 0 && Array.isArray(_) && A) {
25091
+ await t.prepare("DELETE FROM node_channels WHERE nodeId = ?").run(A);
24461
25092
  let e = [...new Set(_.map((e) => typeof e == "object" && e ? e.id || e.channelId : e))].filter((e) => e && e !== "all").map((e) => Number(e) || e);
24462
25093
  if (e.length > 0) {
24463
- let n = e.map(() => "(?, ?)").join(", "), r = e.flatMap((e) => [k, e]);
25094
+ let n = e.map(() => "(?, ?)").join(", "), r = e.flatMap((e) => [A, e]);
24464
25095
  await t.prepare(`INSERT OR IGNORE INTO node_channels (nodeId, channelId) VALUES ${n}`).run(...r);
24465
25096
  }
24466
25097
  }
24467
- if (v !== void 0 && Array.isArray(v) && v.length > 0 && k) for (let e of v) {
25098
+ if (v !== void 0 && Array.isArray(v) && v.length > 0 && A) for (let e of v) {
24468
25099
  if (!e || !e.treeId) continue;
24469
- let n = Number(e.treeId) || e.treeId, r = Sx(e.parentId ?? e._draftParentId ?? null), i = typeof e.sortOrder == "number" ? e.sortOrder : 0, a = await t.prepare("SELECT contentId, parentId, sortOrder FROM tree_nodes WHERE treeId = ? AND contentId = ?").get(n, k);
24470
- a ? ((a.parentId !== r || a.sortOrder !== i) && (ne = !0), await t.prepare("UPDATE tree_nodes SET parentId = ?, sortOrder = ? WHERE treeId = ? AND contentId = ?").run(r, i, n, k)) : (ne = !0, await t.prepare("INSERT INTO tree_nodes (treeId, contentId, parentId, sortOrder) VALUES (?, ?, ?, ?)").run(n, k, r, i));
25100
+ let n = Number(e.treeId) || e.treeId, r = Sx(e.parentId ?? e._draftParentId ?? null), i = typeof e.sortOrder == "number" ? e.sortOrder : 0, a = await t.prepare("SELECT contentId, parentId, sortOrder FROM tree_nodes WHERE treeId = ? AND contentId = ?").get(n, A);
25101
+ a ? ((a.parentId !== r || a.sortOrder !== i) && (te = !0), await t.prepare("UPDATE tree_nodes SET parentId = ?, sortOrder = ? WHERE treeId = ? AND contentId = ?").run(r, i, n, A)) : (te = !0, await t.prepare("INSERT INTO tree_nodes (treeId, contentId, parentId, sortOrder) VALUES (?, ?, ?, ?)").run(n, A, r, i));
24471
25102
  }
24472
25103
  let ae = [], oe = [], se = [];
24473
- if (g !== void 0 && Array.isArray(g) && k) {
24474
- await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 1").run(k);
25104
+ if (g !== void 0 && Array.isArray(g) && A) {
25105
+ await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 1").run(A);
24475
25106
  let e = [], n = [];
24476
25107
  for (let t = 0; t < g.length; t++) {
24477
25108
  let r = g[t], i = r.componentId || r.elementType || "text-block", a = r.data || {}, o = String(r.blockId || a.blockId || r.instanceId || r.id || `block-${Date.now()}`), { cleanedData: s, assetRefs: c, termRefs: l, nodeRefs: u } = ax({
@@ -24490,14 +25121,14 @@ gx.get("/", async (e) => {
24490
25121
  fieldKey: `blocks[${t}].${e.fieldKey}`
24491
25122
  }));
24492
25123
  let d = r.region !== void 0 && r.region !== null && String(r.region).trim() !== "" ? String(r.region) : "content";
24493
- e.push("(?, ?, ?, ?, ?, 1)"), n.push(k, t, i, JSON.stringify(s), d);
25124
+ e.push("(?, ?, ?, ?, ?, 1)"), n.push(A, t, i, JSON.stringify(s), d);
24494
25125
  }
24495
25126
  e.length > 0 && await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24496
25127
  }
24497
- if (k) {
25128
+ if (A) {
24498
25129
  let n = [...x, ...ae], r = [...S, ...oe], i = [...C, ...se];
24499
- await ox(t, k, n), await sx(t, k, r), await cx(t, k, i);
24500
- let a = new Set(n.map((e) => e.assetId)), o = new Set([...A].filter((e) => !a.has(e)));
25130
+ await ox(t, A, n), await sx(t, A, r), await cx(t, A, i);
25131
+ let a = new Set(n.map((e) => e.assetId)), o = new Set([...j].filter((e) => !a.has(e)));
24501
25132
  if (o.size > 0) {
24502
25133
  let { storage: n } = ix(e.env);
24503
25134
  await Ex(t, n, o);
@@ -24505,10 +25136,10 @@ gx.get("/", async (e) => {
24505
25136
  }
24506
25137
  return await $b(e).clear(), e.json({
24507
25138
  success: !0,
24508
- id: k,
24509
- status: j,
24510
- hasUnpublishedChanges: re === 1 || j === "draft",
24511
- isStructuralChange: ne
25139
+ id: A,
25140
+ status: ne,
25141
+ hasUnpublishedChanges: re === 1 || ne === "draft",
25142
+ isStructuralChange: te
24512
25143
  });
24513
25144
  }), gx.post("/publish", async (e) => {
24514
25145
  let t = e.get("db"), n = await e.req.json(), r = n.id || n.nodeId;
@@ -24523,34 +25154,34 @@ gx.get("/", async (e) => {
24523
25154
  try {
24524
25155
  c = typeof o.draftDataJson == "string" ? JSON.parse(o.draftDataJson) : o.draftDataJson || {};
24525
25156
  } catch {}
24526
- let l = (s.title ?? o.title ?? "").trim(), u = (c.title ?? n.title ?? o.title ?? "").trim(), d = (s.slug ?? o.slug ?? "").trim(), f = (c.slug ?? n.slug ?? o.slug ?? "").trim(), p = (s.menuTitle ?? "").trim(), m = (c.menuTitle ?? "").trim(), h = s.startShowingAt ?? o.startShowingAt ?? "", g = c.startShowingAt ?? n.startShowingAt ?? o.startShowingAt ?? "", _ = s.stopShowingAt ?? o.stopShowingAt ?? "", v = c.stopShowingAt ?? n.stopShowingAt ?? o.stopShowingAt ?? "", y = l !== "" && u !== "" && l !== u || d !== "" && f !== "" && d !== f || p !== "" && m !== "" && p !== m || h !== g || _ !== v, b = o.draftDataJson || o.dataJson || "{}", x = c.title ?? n.title ?? o.title ?? "Untitled", S = c.slug ?? n.slug ?? o.slug ?? null, C = c.language === void 0 ? o.language : c.language, w = c.contentType ?? o.contentType ?? "page", T = c.isHidden === void 0 ? o.isHidden : c.isHidden, ee = c.startShowingAt === void 0 ? n.startShowingAt === void 0 ? o.startShowingAt : n.startShowingAt : c.startShowingAt, E = c.stopShowingAt === void 0 ? n.stopShowingAt === void 0 ? o.stopShowingAt : n.stopShowingAt : c.stopShowingAt;
24527
- await t.prepare("\n UPDATE content_nodes\n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, publishedDataJson = ?, dataJson = ?, publishedAt = CURRENT_TIMESTAMP, status = 'published', hasUnpublishedChanges = 0, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(x, S, C, w, T, ee, E, b, b, a, i), await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 0").run(i);
24528
- let D = await t.prepare("SELECT * FROM content_blocks WHERE contentId = ? AND isDraft = 1 ORDER BY sortOrder ASC").all(i), te = Array.isArray(D) ? D : D?.results || [];
24529
- if (te.length > 0) {
25157
+ let l = (s.title ?? o.title ?? "").trim(), u = (c.title ?? n.title ?? o.title ?? "").trim(), d = (s.slug ?? o.slug ?? "").trim(), f = (c.slug ?? n.slug ?? o.slug ?? "").trim(), p = (s.menuTitle ?? "").trim(), m = (c.menuTitle ?? "").trim(), h = s.startShowingAt ?? o.startShowingAt ?? "", g = c.startShowingAt ?? n.startShowingAt ?? o.startShowingAt ?? "", _ = s.stopShowingAt ?? o.stopShowingAt ?? "", v = c.stopShowingAt ?? n.stopShowingAt ?? o.stopShowingAt ?? "", y = l !== "" && u !== "" && l !== u || d !== "" && f !== "" && d !== f || p !== "" && m !== "" && p !== m || h !== g || _ !== v, b = o.draftDataJson || o.dataJson || "{}", x = c.title ?? n.title ?? o.title ?? "Untitled", S = c.slug ?? n.slug ?? o.slug ?? null, C = c.language === void 0 ? o.language : c.language, w = c.contentType ?? o.contentType ?? "page", T = c.isHidden === void 0 ? o.isHidden : c.isHidden, E = c.startShowingAt === void 0 ? n.startShowingAt === void 0 ? o.startShowingAt : n.startShowingAt : c.startShowingAt, D = c.stopShowingAt === void 0 ? n.stopShowingAt === void 0 ? o.stopShowingAt : n.stopShowingAt : c.stopShowingAt;
25158
+ await t.prepare("\n UPDATE content_nodes\n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, publishedDataJson = ?, dataJson = ?, publishedAt = CURRENT_TIMESTAMP, status = 'published', hasUnpublishedChanges = 0, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(x, S, C, w, T, E, D, b, b, a, i), await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 0").run(i);
25159
+ let O = await t.prepare("SELECT * FROM content_blocks WHERE contentId = ? AND isDraft = 1 ORDER BY sortOrder ASC").all(i), ee = Array.isArray(O) ? O : O?.results || [];
25160
+ if (ee.length > 0) {
24530
25161
  let e = [], n = [];
24531
- for (let t of te) {
25162
+ for (let t of ee) {
24532
25163
  let r = t.region !== void 0 && t.region !== null && String(t.region).trim() !== "" ? String(t.region) : "content";
24533
25164
  e.push("(?, ?, ?, ?, ?, 0)"), n.push(i, t.sortOrder, t.elementType, t.dataJson, r);
24534
25165
  }
24535
25166
  await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24536
25167
  }
24537
- let O = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(i))?.count || 0) + 1, k = {
24538
- version: O,
25168
+ let k = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(i))?.count || 0) + 1, A = {
25169
+ version: k,
24539
25170
  publishedAt: (/* @__PURE__ */ new Date()).toISOString(),
24540
25171
  node: {
24541
25172
  ...o,
24542
25173
  dataJson: b
24543
25174
  },
24544
- blocks: te
25175
+ blocks: ee
24545
25176
  };
24546
- await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(i, O, JSON.stringify(k), a), await $b(e).clear();
24547
- let A = new mx(e.env);
24548
- return y ? _x(e, t, [i]) : A.purgeNode(e, t, i, !1), e.json({
25177
+ await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(i, k, JSON.stringify(A), a), await $b(e).clear();
25178
+ let j = new mx(e.env);
25179
+ return y ? _x(e, t, [i]) : j.purgeNode(e, t, i, !1), e.json({
24549
25180
  success: !0,
24550
25181
  id: i,
24551
25182
  status: "published",
24552
- version: O,
24553
- publishedAt: k.publishedAt,
25183
+ version: k,
25184
+ publishedAt: A.publishedAt,
24554
25185
  hasUnpublishedChanges: !1,
24555
25186
  isStructuralChange: y
24556
25187
  });
@@ -24573,27 +25204,27 @@ gx.get("/", async (e) => {
24573
25204
  } catch {}
24574
25205
  let u = (c.title ?? s.title ?? "").trim(), d = (l.title ?? n.title ?? s.title ?? "").trim(), f = (c.slug ?? s.slug ?? "").trim(), p = (l.slug ?? n.slug ?? s.slug ?? "").trim(), m = (c.menuTitle ?? "").trim(), h = (l.menuTitle ?? "").trim(), g = c.startShowingAt ?? s.startShowingAt ?? "", _ = l.startShowingAt ?? n.startShowingAt ?? s.startShowingAt ?? "", v = c.stopShowingAt ?? s.stopShowingAt ?? "", y = l.stopShowingAt ?? n.stopShowingAt ?? s.stopShowingAt ?? "";
24575
25206
  (u !== "" && d !== "" && u !== d || f !== "" && p !== "" && f !== p || m !== "" && h !== "" && m !== h || g !== _ || v !== y) && (a = !0);
24576
- let b = s.draftDataJson || s.dataJson || "{}", x = l.title ?? n.title ?? s.title ?? "Untitled", S = l.slug ?? n.slug ?? s.slug ?? null, C = l.language === void 0 ? s.language : l.language, w = l.contentType ?? s.contentType ?? "page", T = l.isHidden === void 0 ? s.isHidden : l.isHidden, ee = l.startShowingAt === void 0 ? n.startShowingAt === void 0 ? s.startShowingAt : n.startShowingAt : l.startShowingAt, E = l.stopShowingAt === void 0 ? n.stopShowingAt === void 0 ? s.stopShowingAt : n.stopShowingAt : l.stopShowingAt;
24577
- await t.prepare("\n UPDATE content_nodes\n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, publishedDataJson = ?, dataJson = ?, publishedAt = CURRENT_TIMESTAMP, status = 'published', hasUnpublishedChanges = 0, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(x, S, C, w, T, ee, E, b, b, i, r), await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 0").run(r);
24578
- let D = await t.prepare("SELECT * FROM content_blocks WHERE contentId = ? AND isDraft = 1 ORDER BY sortOrder ASC").all(r), te = Array.isArray(D) ? D : D?.results || [];
24579
- if (te.length > 0) {
25207
+ let b = s.draftDataJson || s.dataJson || "{}", x = l.title ?? n.title ?? s.title ?? "Untitled", S = l.slug ?? n.slug ?? s.slug ?? null, C = l.language === void 0 ? s.language : l.language, w = l.contentType ?? s.contentType ?? "page", T = l.isHidden === void 0 ? s.isHidden : l.isHidden, E = l.startShowingAt === void 0 ? n.startShowingAt === void 0 ? s.startShowingAt : n.startShowingAt : l.startShowingAt, D = l.stopShowingAt === void 0 ? n.stopShowingAt === void 0 ? s.stopShowingAt : n.stopShowingAt : l.stopShowingAt;
25208
+ await t.prepare("\n UPDATE content_nodes\n SET title = ?, slug = ?, language = ?, contentType = ?, isHidden = ?, startShowingAt = ?, stopShowingAt = ?, publishedDataJson = ?, dataJson = ?, publishedAt = CURRENT_TIMESTAMP, status = 'published', hasUnpublishedChanges = 0, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(x, S, C, w, T, E, D, b, b, i, r), await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 0").run(r);
25209
+ let O = await t.prepare("SELECT * FROM content_blocks WHERE contentId = ? AND isDraft = 1 ORDER BY sortOrder ASC").all(r), ee = Array.isArray(O) ? O : O?.results || [];
25210
+ if (ee.length > 0) {
24580
25211
  let e = [], n = [];
24581
- for (let t of te) {
25212
+ for (let t of ee) {
24582
25213
  let i = t.region !== void 0 && t.region !== null && String(t.region).trim() !== "" ? String(t.region) : "content";
24583
25214
  e.push("(?, ?, ?, ?, ?, 0)"), n.push(r, t.sortOrder, t.elementType, t.dataJson, i);
24584
25215
  }
24585
25216
  await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24586
25217
  }
24587
- let O = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(r))?.count || 0) + 1, k = {
24588
- version: O,
25218
+ let k = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(r))?.count || 0) + 1, A = {
25219
+ version: k,
24589
25220
  publishedAt: (/* @__PURE__ */ new Date()).toISOString(),
24590
25221
  node: {
24591
25222
  ...s,
24592
25223
  dataJson: b
24593
25224
  },
24594
- blocks: te
25225
+ blocks: ee
24595
25226
  };
24596
- await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(r, O, JSON.stringify(k), i), o.push(r);
25227
+ await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(r, k, JSON.stringify(A), i), o.push(r);
24597
25228
  }
24598
25229
  await $b(e).clear();
24599
25230
  let s = new mx(e.env);
@@ -25081,23 +25712,23 @@ Mx.get("/", async (e) => {
25081
25712
  try {
25082
25713
  let t = e.get("db"), n = await e.req.json(), r = n.channel || n.data || n, i = r.id, a = i != null && i !== "" && !isNaN(Number(i)) ? Number(i) : null, { key: o, label: s, channelType: c = "website", domain: l = "localhost", baseUrl: u = "http://localhost:4321", defaultLanguage: d, default_language: f, language: p, isHidden: m, hidden: h, trees: g = [], createdById: _ = null, updatedById: v = null, id: y, createdAt: b, updatedAt: x, ...S } = r, C = o?.trim() || "main", w = s?.trim() || "Untitled Channel", T = d || f || p || "";
25083
25714
  typeof T == "object" && T && (T = T.value || T.id || ""), T = String(T).trim();
25084
- let ee = m === !0 || m === "true" || m === 1 || h === !0 || h === "true" || h === 1, E = Array.isArray(g) ? g : [], D = JSON.stringify(S || {}), te = e.get("user")?.id || v || _ || null;
25715
+ let E = m === !0 || m === "true" || m === 1 || h === !0 || h === "true" || h === 1, D = Array.isArray(g) ? g : [], O = JSON.stringify(S || {}), ee = e.get("user")?.id || v || _ || null;
25085
25716
  if (await t.prepare("SELECT id FROM channels WHERE key = ? AND id != ? LIMIT 1").get(C, a ?? -1)) return e.json({
25086
25717
  error: `Channel API key "${C}" is already in use.`,
25087
25718
  field: "key"
25088
25719
  }, 409);
25089
- let O = a;
25090
- if (a) await t.prepare("\n UPDATE channels \n SET key = ?, label = ?, channelType = ?, domain = ?, baseUrl = ?, defaultLanguage = ?, \n isHidden = ?, dataJson = ?, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(C, w, c, l, u, T, +!!ee, D, te, a);
25720
+ let k = a;
25721
+ if (a) await t.prepare("\n UPDATE channels \n SET key = ?, label = ?, channelType = ?, domain = ?, baseUrl = ?, defaultLanguage = ?, \n isHidden = ?, dataJson = ?, updatedById = ?, updatedAt = CURRENT_TIMESTAMP\n WHERE id = ?\n ").run(C, w, c, l, u, T, +!!E, O, ee, a);
25091
25722
  else {
25092
- let e = await t.prepare("\n INSERT INTO channels (key, label, channelType, domain, baseUrl, defaultLanguage, isHidden, dataJson, createdById, updatedById)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING id\n ").get(C, w, c, l, u, T, +!!ee, D, te, te), n = e?.results?.[0] || e;
25723
+ let e = await t.prepare("\n INSERT INTO channels (key, label, channelType, domain, baseUrl, defaultLanguage, isHidden, dataJson, createdById, updatedById)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING id\n ").get(C, w, c, l, u, T, +!!E, O, ee, ee), n = e?.results?.[0] || e;
25093
25724
  if (!n || !n.id) throw Error("Failed to retrieve newly created Channel ID from Cloudflare D1.");
25094
- O = Number(n.id);
25725
+ k = Number(n.id);
25095
25726
  }
25096
- await t.prepare("DELETE FROM channel_trees WHERE channelId = ?").run(O);
25097
- let k = E.filter((e) => e && e.treeId && e.key);
25098
- if (k.length > 0) {
25099
- let e = k.map(() => "(?, ?, ?, ?)").join(", "), n = k.flatMap((e) => [
25100
- O,
25727
+ await t.prepare("DELETE FROM channel_trees WHERE channelId = ?").run(k);
25728
+ let A = D.filter((e) => e && e.treeId && e.key);
25729
+ if (A.length > 0) {
25730
+ let e = A.map(() => "(?, ?, ?, ?)").join(", "), n = A.flatMap((e) => [
25731
+ k,
25101
25732
  Number(e.treeId) || e.treeId,
25102
25733
  String(e.key).trim(),
25103
25734
  JSON.stringify(e.meta || {})
@@ -25107,10 +25738,10 @@ Mx.get("/", async (e) => {
25107
25738
  VALUES ${e}
25108
25739
  `).run(...n);
25109
25740
  }
25110
- let A = $b(e);
25111
- return await A.delete(`channel:${C}`), await A.delete(`channel:${O}`), await A.clear(), await hx(t), new mx(e.env).purgeGlobalCache(e, t), e.json({
25741
+ let j = $b(e);
25742
+ return await j.delete(`channel:${C}`), await j.delete(`channel:${k}`), await j.clear(), await hx(t), new mx(e.env).purgeGlobalCache(e, t), e.json({
25112
25743
  success: !0,
25113
- id: O
25744
+ id: k
25114
25745
  });
25115
25746
  } catch (t) {
25116
25747
  return console.error("[API Channels] Error saving channel:", t), e.json({
@@ -25469,16 +26100,16 @@ function Qx(e) {
25469
26100
  userTemplate: null,
25470
26101
  treeExposedFields: ["summary"]
25471
26102
  };
25472
- let { rawNodes: t = {}, rawTrees: n = {}, rawChannels: r = {}, channels: i = {}, rawTaxonomies: a = {}, taxonomies: o = {}, rawBlocks: s = {}, rawElements: c = {}, rawNodeLayouts: l = {}, rawBlockLayouts: u = {}, rawLayouts: d = {}, rawFieldSets: f = {}, rawTemplates: p = {}, nodeTemplate: m = null, treeTemplate: h = null, channelTemplate: g = null, userTemplate: _ = null, nodes: v = {}, trees: y = {}, blocks: b = {}, nodeLayouts: x = {}, blockLayouts: S = {} } = e, C = Object.keys(t).length > 0 ? t : v, w = Object.keys(n).length > 0 ? n : y, T = Object.keys(r).length > 0 ? r : i, ee = Object.keys(a).length > 0 ? a : o, E = Object.keys(s).length > 0 ? s : Object.keys(c).length > 0 ? c : b, D = Object.keys(l).length > 0 ? l : Object.keys(d).length > 0 ? d : x, te = Object.keys(u).length > 0 ? u : S, O = m?.fields || {}, k = {
26103
+ let { rawNodes: t = {}, rawTrees: n = {}, rawChannels: r = {}, channels: i = {}, rawTaxonomies: a = {}, taxonomies: o = {}, rawBlocks: s = {}, rawElements: c = {}, rawNodeLayouts: l = {}, rawBlockLayouts: u = {}, rawLayouts: d = {}, rawFieldSets: f = {}, rawTemplates: p = {}, nodeTemplate: m = null, treeTemplate: h = null, channelTemplate: g = null, userTemplate: _ = null, nodes: v = {}, trees: y = {}, blocks: b = {}, nodeLayouts: x = {}, blockLayouts: S = {} } = e, C = Object.keys(t).length > 0 ? t : v, w = Object.keys(n).length > 0 ? n : y, T = Object.keys(r).length > 0 ? r : i, E = Object.keys(a).length > 0 ? a : o, D = Object.keys(s).length > 0 ? s : Object.keys(c).length > 0 ? c : b, O = Object.keys(l).length > 0 ? l : Object.keys(d).length > 0 ? d : x, ee = Object.keys(u).length > 0 ? u : S, k = m?.fields || {}, A = {
25473
26104
  ...p,
25474
26105
  ...f
25475
- }, A = (e, t = "settings", n, r) => {
26106
+ }, j = (e, t = "settings", n, r) => {
25476
26107
  let i = {};
25477
26108
  if (!e) return i;
25478
26109
  let a = (e) => {
25479
- let a = k[e] || k[`${e}-base`] || {};
26110
+ let a = A[e] || A[`${e}-base`] || {};
25480
26111
  r && typeof a == "object" && a && (r.inTree === void 0 && a.inTree !== void 0 && (r.inTree = a.inTree), r.inVault === void 0 && a.inVault !== void 0 && (r.inVault = a.inVault), r.hasCanvas === void 0 && a.hasCanvas !== void 0 && (r.hasCanvas = a.hasCanvas));
25481
- let o = a.fields || a, s = A(o, t, n, r);
26112
+ let o = a.fields || a, s = j(o, t, n, r);
25482
26113
  if (a.tab && n) {
25483
26114
  let t = a.tab.id || e, r = a.tab.label || a.label || t;
25484
26115
  n[t] || (n[t] = {
@@ -25499,14 +26130,14 @@ function Qx(e) {
25499
26130
  a(String(t));
25500
26131
  return;
25501
26132
  }
25502
- let n = i[e] || O[e] || {};
26133
+ let n = i[e] || k[e] || {};
25503
26134
  i[e] = Ux(n, typeof t == "object" && t ? t : { label: String(t) });
25504
26135
  }), i) : (Array.isArray(e) && e.forEach((e) => {
25505
26136
  if (typeof e == "string") {
25506
26137
  if (e.includes("/") || e.endsWith(".yaml") || e.endsWith(".yml")) return;
25507
26138
  if (e.startsWith("fieldSet:")) a(e.replace("fieldSet:", "").trim());
25508
26139
  else {
25509
- let t = i[e] || O[e] || {};
26140
+ let t = i[e] || k[e] || {};
25510
26141
  i[e] = Ux(t, {
25511
26142
  type: "text",
25512
26143
  label: e
@@ -25515,23 +26146,23 @@ function Qx(e) {
25515
26146
  } else typeof e == "object" && e && Object.entries(e).forEach(([e, t]) => {
25516
26147
  if (e === "fieldSet") a(String(t));
25517
26148
  else if (e !== "<<" && e !== "<<:") {
25518
- let n = i[e] || O[e] || {};
26149
+ let n = i[e] || k[e] || {};
25519
26150
  i[e] = Ux(n, typeof t == "object" && t ? t : {});
25520
26151
  }
25521
26152
  });
25522
26153
  }), i);
25523
- }, ne = (e, t) => {
26154
+ }, te = (e, t) => {
25524
26155
  let n = {};
25525
26156
  return !e || typeof e != "object" ? n : Array.isArray(e) ? (e.forEach((e) => {
25526
26157
  if (typeof e == "object" && e.fieldSet) {
25527
- let r = String(e.fieldSet), i = k[r] || k[`${r}-base`] || {};
26158
+ let r = String(e.fieldSet), i = A[r] || A[`${r}-base`] || {};
25528
26159
  t && (t.inTree === void 0 && i.inTree !== void 0 && (t.inTree = i.inTree), t.inVault === void 0 && i.inVault !== void 0 && (t.inVault = i.inVault), t.hasCanvas === void 0 && i.hasCanvas !== void 0 && (t.hasCanvas = i.hasCanvas));
25529
26160
  let a = i.tab?.id || r, o = i.tab?.label || i.label || a;
25530
26161
  n[a] || (n[a] = {
25531
26162
  label: o,
25532
26163
  fields: {}
25533
26164
  });
25534
- let s = A(i.fields || i, a, n, t);
26165
+ let s = j(i.fields || i, a, n, t);
25535
26166
  Object.entries(s).forEach(([e, t]) => {
25536
26167
  let r = n[a].fields[e] || {};
25537
26168
  n[a].fields[e] = Ux(r, t);
@@ -25546,21 +26177,21 @@ function Qx(e) {
25546
26177
  label: i,
25547
26178
  fields: {}
25548
26179
  });
25549
- let s = A(o, e, n, t);
26180
+ let s = j(o, e, n, t);
25550
26181
  Object.entries(s).forEach(([t, r]) => {
25551
26182
  if (t === "<<" || t === "<<:" || t === "label") return;
25552
26183
  let i = n[e].fields[t] || {};
25553
26184
  n[e].fields[t] = Ux(i, r);
25554
26185
  });
25555
26186
  }), n);
25556
- }, j = {};
26187
+ }, ne = {};
25557
26188
  Object.entries(C).forEach(([e, t]) => {
25558
26189
  m && (t.inTree === void 0 && m.inTree !== void 0 && (t.inTree = m.inTree), t.inVault === void 0 && m.inVault !== void 0 && (t.inVault = m.inVault), t.hasCanvas === void 0 && m.hasCanvas !== void 0 && (t.hasCanvas = m.hasCanvas));
25559
- let n = ne(t.tabs, t), r = A(t.fields || [], "settings", n, t);
26190
+ let n = te(t.tabs, t), r = j(t.fields || [], "settings", n, t);
25560
26191
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25561
- let i = k[e] || k[`${e}-base`] || {};
26192
+ let i = A[e] || A[`${e}-base`] || {};
25562
26193
  t.inTree === void 0 && i.inTree !== void 0 && (t.inTree = i.inTree), t.inVault === void 0 && i.inVault !== void 0 && (t.inVault = i.inVault), t.hasCanvas === void 0 && i.hasCanvas !== void 0 && (t.hasCanvas = i.hasCanvas);
25563
- let a = i.fields || i, o = A(a, "settings", n, t);
26194
+ let a = i.fields || i, o = j(a, "settings", n, t);
25564
26195
  if (i.tab) {
25565
26196
  let t = i.tab.id || e, r = i.tab.label || i.label || t;
25566
26197
  n[t] || (n[t] = {
@@ -25571,7 +26202,7 @@ function Qx(e) {
25571
26202
  n[t].fields[e] = Ux(i, r);
25572
26203
  });
25573
26204
  } else Object.entries(o).forEach(([e, t]) => {
25574
- let n = r[e] || O[e] || {};
26205
+ let n = r[e] || k[e] || {};
25575
26206
  r[e] = Ux(n, t);
25576
26207
  });
25577
26208
  }), Object.values(n).forEach((e) => {
@@ -25582,7 +26213,7 @@ function Qx(e) {
25582
26213
  }), Object.keys(n).length === 0 && Object.keys(r).length > 0 && (n.settings = {
25583
26214
  label: t.label || "Settings",
25584
26215
  fields: r
25585
- }), j[e] = {
26216
+ }), ne[e] = {
25586
26217
  ...t,
25587
26218
  id: t.id || e,
25588
26219
  label: t.label || e,
@@ -25598,9 +26229,9 @@ function Qx(e) {
25598
26229
  });
25599
26230
  let re = {};
25600
26231
  Object.entries(w).forEach(([e, t]) => {
25601
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26232
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25602
26233
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25603
- let t = k[e] || {}, i = t.fields || t, a = A(i, "settings", n);
26234
+ let t = A[e] || {}, i = t.fields || t, a = j(i, "settings", n);
25604
26235
  Object.entries(a).forEach(([e, t]) => {
25605
26236
  r[e] = Ux(r[e] || {}, t);
25606
26237
  });
@@ -25618,9 +26249,9 @@ function Qx(e) {
25618
26249
  });
25619
26250
  let ie = {};
25620
26251
  Object.entries(T).forEach(([e, t]) => {
25621
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26252
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25622
26253
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25623
- let t = k[e] || {}, n = t.fields || t, i = A(n);
26254
+ let t = A[e] || {}, n = t.fields || t, i = j(n);
25624
26255
  Object.entries(i).forEach(([e, t]) => {
25625
26256
  r[e] = Ux(r[e] || {}, t);
25626
26257
  });
@@ -25638,10 +26269,10 @@ function Qx(e) {
25638
26269
  };
25639
26270
  });
25640
26271
  let ae = {};
25641
- Object.entries(ee).forEach(([e, t]) => {
25642
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26272
+ Object.entries(E).forEach(([e, t]) => {
26273
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25643
26274
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25644
- let t = k[e] || {}, i = t.fields || t, a = A(i, "settings", n);
26275
+ let t = A[e] || {}, i = t.fields || t, a = j(i, "settings", n);
25645
26276
  Object.entries(a).forEach(([e, t]) => {
25646
26277
  r[e] = Ux(r[e] || {}, t);
25647
26278
  });
@@ -25659,10 +26290,10 @@ function Qx(e) {
25659
26290
  };
25660
26291
  });
25661
26292
  let oe = {};
25662
- Object.entries(E).forEach(([e, t]) => {
25663
- let n = A(t.fields || []);
26293
+ Object.entries(D).forEach(([e, t]) => {
26294
+ let n = j(t.fields || []);
25664
26295
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25665
- let t = k[e] || {}, r = t.fields || t, i = A(r);
26296
+ let t = A[e] || {}, r = t.fields || t, i = j(r);
25666
26297
  Object.entries(i).forEach(([e, t]) => {
25667
26298
  n[e] = Ux(n[e] || {}, t);
25668
26299
  });
@@ -25675,8 +26306,8 @@ function Qx(e) {
25675
26306
  };
25676
26307
  });
25677
26308
  let se = {};
25678
- Object.entries(D).forEach(([e, t]) => {
25679
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n), i = {}, a = t.regions || { content: { label: "Content" } };
26309
+ Object.entries(O).forEach(([e, t]) => {
26310
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n), i = {}, a = t.regions || { content: { label: "Content" } };
25680
26311
  Object.entries(a).forEach(([e, t]) => {
25681
26312
  i[e] = {
25682
26313
  ...t,
@@ -25698,8 +26329,8 @@ function Qx(e) {
25698
26329
  };
25699
26330
  });
25700
26331
  let ce = {};
25701
- Object.entries(te).forEach(([e, t]) => {
25702
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n), i = {}, a = t.regions || { main: { label: "Main Content" } };
26332
+ Object.entries(ee).forEach(([e, t]) => {
26333
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n), i = {}, a = t.regions || { main: { label: "Main Content" } };
25703
26334
  Object.entries(a).forEach(([e, t]) => {
25704
26335
  i[e] = {
25705
26336
  ...t,
@@ -25722,7 +26353,7 @@ function Qx(e) {
25722
26353
  });
25723
26354
  let le = g?.fields || {};
25724
26355
  Array.isArray(g?.fieldSets) && g?.fieldSets.forEach((e) => {
25725
- let t = k[e] || {}, n = t.fields || t, r = A(n);
26356
+ let t = A[e] || {}, n = t.fields || t, r = j(n);
25726
26357
  Object.entries(r).forEach(([e, t]) => {
25727
26358
  le[e] = Ux(le[e] || {}, t);
25728
26359
  });
@@ -25732,7 +26363,7 @@ function Qx(e) {
25732
26363
  fields: le
25733
26364
  } : null, de = _?.fields || {};
25734
26365
  Array.isArray(_?.fieldSets) && _?.fieldSets.forEach((e) => {
25735
- let t = k[e] || {}, n = t.fields || t, r = A(n);
26366
+ let t = A[e] || {}, n = t.fields || t, r = j(n);
25736
26367
  Object.entries(r).forEach(([e, t]) => {
25737
26368
  de[e] = Ux(de[e] || {}, t);
25738
26369
  });
@@ -25741,23 +26372,23 @@ function Qx(e) {
25741
26372
  ..._,
25742
26373
  fields: de
25743
26374
  } : null, pe = /* @__PURE__ */ new Set(["summary"]);
25744
- for (let e of Object.values(k)) {
26375
+ for (let e of Object.values(A)) {
25745
26376
  let t = e.fields || e;
25746
26377
  for (let [e, n] of Object.entries(t || {})) n && typeof n == "object" && n.inTree && pe.add(e);
25747
26378
  }
25748
- for (let e of Object.values(j)) {
26379
+ for (let e of Object.values(ne)) {
25749
26380
  for (let [t, n] of Object.entries(e.fields || {})) n?.inTree && pe.add(t);
25750
26381
  for (let t of Object.values(e.tabs || {})) for (let [e, n] of Object.entries(t.fields || {})) n?.inTree && pe.add(e);
25751
26382
  }
25752
26383
  return {
25753
- nodes: j,
26384
+ nodes: ne,
25754
26385
  trees: re,
25755
26386
  channels: ie,
25756
26387
  taxonomies: ae,
25757
26388
  blocks: oe,
25758
26389
  nodeLayouts: se,
25759
26390
  blockLayouts: ce,
25760
- fieldSets: k,
26391
+ fieldSets: A,
25761
26392
  nodeTemplate: m || null,
25762
26393
  treeTemplate: h || null,
25763
26394
  channelTemplate: ue,
@@ -25935,37 +26566,47 @@ async function sS(e, t, n = []) {
25935
26566
  if (typeof r.bind == "function") return await r.bind(...n).run();
25936
26567
  if (typeof r.run == "function") return await r.run(...n);
25937
26568
  }
25938
- function cS(e, t, n) {
26569
+ function cS(e) {
26570
+ return e.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/[\s-]+/g, "-").replace(/^-+|-+$/g, "");
26571
+ }
26572
+ function lS(e, t, n) {
25939
26573
  let r = e || (t ? `/media/${t}` : "");
25940
26574
  return r && n && r.startsWith(`https://${n}/`) && !r.includes("/media/") && (r = r.replace(`https://${n}/`, `https://${n}/media/`)), r;
25941
26575
  }
25942
26576
  aS.get("/", async (e) => {
25943
26577
  try {
25944
- let t = wb(e), { search: n = "", type: r = "all", page: i = "1", limit: a = "24", sort: o = "createdAt", order: s = "DESC", nodeId: c, channelId: l, trashed: u } = e.req.query(), d = Math.max(1, parseInt(i, 10) || 1), f = Math.max(1, Math.min(100, parseInt(a, 10) || 24)), p = (d - 1) * f, m = {
26578
+ let t = wb(e), { search: n = "", type: r = "all", page: i = "1", limit: a = "24", sort: o = "createdAt", order: s = "DESC", nodeId: c, channelId: l, trashed: u, tags: d } = e.req.query(), f = Math.max(1, parseInt(i, 10) || 1), p = Math.max(1, Math.min(100, parseInt(a, 10) || 24)), m = (f - 1) * p, h = {
25945
26579
  createdAt: "a.createdAt",
25946
26580
  updatedAt: "a.updatedAt",
25947
26581
  filename: "a.filename",
25948
26582
  mimeType: "a.mimeType",
25949
26583
  sizeBytes: "a.sizeBytes"
25950
- }[o] || "a.createdAt", h = s.toUpperCase() === "ASC" ? "ASC" : "DESC", g = [], _ = ["(a.isSystemVariant = 0 OR a.isSystemVariant IS NULL)", u === "true" || u === "1" ? "(a.deletedAt IS NOT NULL AND a.deletedAt != '')" : "(a.deletedAt IS NULL OR a.deletedAt = '')"];
26584
+ }[o] || "a.createdAt", g = s.toUpperCase() === "ASC" ? "ASC" : "DESC", _ = [], v = ["(a.isSystemVariant = 0 OR a.isSystemVariant IS NULL)", u === "true" || u === "1" ? "(a.deletedAt IS NOT NULL AND a.deletedAt != '')" : "(a.deletedAt IS NULL OR a.deletedAt = '')"];
25951
26585
  if (c) {
25952
26586
  let e = await oS(t, "SELECT a.id, a.filename, a.isSystemVariant FROM node_assets na JOIN assets a ON na.assetId = a.id WHERE na.nodeId = ?", [Number(c)]);
25953
- if (e.length === 0) _.push("1 = 0");
26587
+ if (e.length === 0) v.push("1 = 0");
25954
26588
  else {
25955
26589
  let t = e.map((e) => e.isSystemVariant ? `(a.id = '${e.id}' OR a.id IN (SELECT parentAssetId FROM assets WHERE id = '${e.id}'))` : `a.id = '${e.id}'`).join(" OR ");
25956
- _.push(`(${t})`);
26590
+ v.push(`(${t})`);
25957
26591
  }
25958
26592
  }
25959
26593
  if (!c && l && l !== "all") {
25960
26594
  let e = Number(l) || l;
25961
- _.push("(EXISTS (SELECT 1 FROM node_assets na_ch INNER JOIN node_channels nc_ch ON na_ch.nodeId = nc_ch.nodeId WHERE na_ch.assetId = a.id AND nc_ch.channelId = ?) OR NOT EXISTS (SELECT 1 FROM node_assets na_unused WHERE na_unused.assetId = a.id))"), g.push(e);
25962
- }
25963
- n && n.trim() !== "" && (_.push("a.filename LIKE ?"), g.push(`%${n.trim()}%`)), r && r !== "all" && (r === "image" ? (_.push("a.mimeType LIKE ?"), g.push("image/%")) : r === "document" ? (_.push("(a.mimeType LIKE ? OR a.mimeType LIKE ? OR a.mimeType LIKE ?)"), g.push("application/pdf%", "application/msword%", "application/vnd%")) : r === "video" && (_.push("(a.mimeType LIKE ? OR a.mimeType LIKE ?)"), g.push("video/%", "audio/%")));
25964
- let v = `SELECT a.id, a.filename, a.mimeType, a.sizeBytes, a.cdnUrl, a.storageKeyPrivate, a.createdAt, a.updatedAt, a.deletedAt, a.dataJson FROM assets a ${` WHERE ${_.join(" AND ")}`} ORDER BY ${m} ${h} LIMIT ? OFFSET ?`;
25965
- g.push(f, p);
25966
- let y = await oS(t, v, g), b = y.map((e) => e.id), x = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map();
25967
- if (b.length > 0) {
25968
- let e = b.map(() => "?").join(",");
26595
+ v.push("(EXISTS (SELECT 1 FROM node_assets na_ch INNER JOIN node_channels nc_ch ON na_ch.nodeId = nc_ch.nodeId WHERE na_ch.assetId = a.id AND nc_ch.channelId = ?) OR NOT EXISTS (SELECT 1 FROM node_assets na_unused WHERE na_unused.assetId = a.id))"), _.push(e);
26596
+ }
26597
+ if (d) {
26598
+ let e = d.split(",").map((e) => Number(e)).filter((e) => !isNaN(e));
26599
+ if (e.length > 0) {
26600
+ let t = e.map(() => "?").join(",");
26601
+ v.push(`EXISTS (SELECT 1 FROM asset_terms at WHERE at.assetId = a.id AND at.termId IN (${t}))`), _.push(...e);
26602
+ }
26603
+ }
26604
+ n && n.trim() !== "" && (v.push("a.filename LIKE ?"), _.push(`%${n.trim()}%`)), r && r !== "all" && (r === "image" ? (v.push("a.mimeType LIKE ?"), _.push("image/%")) : r === "document" ? (v.push("(a.mimeType LIKE ? OR a.mimeType LIKE ? OR a.mimeType LIKE ?)"), _.push("application/pdf%", "application/msword%", "application/vnd%")) : r === "video" && (v.push("(a.mimeType LIKE ? OR a.mimeType LIKE ?)"), _.push("video/%", "audio/%")));
26605
+ let y = `SELECT a.id, a.filename, a.mimeType, a.sizeBytes, a.cdnUrl, a.storageKeyPrivate, a.createdAt, a.updatedAt, a.deletedAt, a.dataJson FROM assets a ${` WHERE ${v.join(" AND ")}`} ORDER BY ${h} ${g} LIMIT ? OFFSET ?`;
26606
+ _.push(p, m);
26607
+ let b = await oS(t, y, _), x = b.map((e) => e.id), S = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map();
26608
+ if (x.length > 0) {
26609
+ let e = x.map(() => "?").join(",");
25969
26610
  (await oS(t, `
25970
26611
  SELECT master.id AS assetId, COUNT(DISTINCT na.nodeId) AS count
25971
26612
  FROM assets master
@@ -25974,13 +26615,13 @@ aS.get("/", async (e) => {
25974
26615
  EXISTS (SELECT 1 FROM assets crop WHERE crop.id = na.assetId AND crop.isSystemVariant = 1 AND crop.parentAssetId = master.id)
25975
26616
  )
25976
26617
  WHERE master.id IN (${e})
25977
- GROUP BY master.id`, b)).forEach((e) => x.set(String(e.assetId), e.count || 0)), (await oS(t, `
26618
+ GROUP BY master.id`, x)).forEach((e) => S.set(String(e.assetId), e.count || 0)), (await oS(t, `
25978
26619
  SELECT parentAssetId, COUNT(id) AS count
25979
26620
  FROM assets
25980
26621
  WHERE isSystemVariant = 1 AND parentAssetId IN (${e})
25981
- GROUP BY parentAssetId`, b)).forEach((e) => S.set(String(e.parentAssetId), e.count || 0));
26622
+ GROUP BY parentAssetId`, x)).forEach((e) => C.set(String(e.parentAssetId), e.count || 0));
25982
26623
  }
25983
- let C = y.map((t) => {
26624
+ let w = b.map((t) => {
25984
26625
  let n = {
25985
26626
  title: "",
25986
26627
  alt: "",
@@ -25992,7 +26633,7 @@ aS.get("/", async (e) => {
25992
26633
  ...JSON.parse(t.dataJson || "{}")
25993
26634
  };
25994
26635
  } catch {}
25995
- let r = cS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
26636
+ let r = lS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
25996
26637
  return {
25997
26638
  id: t.id,
25998
26639
  filename: t.filename || "Untitled Asset",
@@ -26004,13 +26645,13 @@ aS.get("/", async (e) => {
26004
26645
  createdAt: t.createdAt,
26005
26646
  updatedAt: t.updatedAt,
26006
26647
  deletedAt: t.deletedAt || null,
26007
- usageCount: x.get(String(t.id)) || 0,
26008
- variantCount: S.get(String(t.id)) || 0,
26648
+ usageCount: S.get(String(t.id)) || 0,
26649
+ variantCount: C.get(String(t.id)) || 0,
26009
26650
  url: r,
26010
26651
  originalUrl: r
26011
26652
  };
26012
26653
  });
26013
- return e.json(C);
26654
+ return e.json(w);
26014
26655
  } catch (t) {
26015
26656
  return e.json({
26016
26657
  error: "Failed to fetch assets",
@@ -26019,85 +26660,99 @@ aS.get("/", async (e) => {
26019
26660
  }
26020
26661
  }), aS.post("/upload", async (e) => {
26021
26662
  try {
26022
- let t = wb(e), { storage: n } = ix(e.env), r = await e.req.parseBody(), i = r.file, a = r.isVariant === "true" || r.isVariant === "1" || r.temporary === "true", o = r.replaceAssetId, s = typeof o == "string" && o.trim().length > 0 ? o.trim() : null, c = r.parentAssetId || r.parentAsset, l = typeof c == "string" && c.trim().length > 0 ? c.trim() : null;
26663
+ let t = wb(e), { storage: n } = ix(e.env), r = await e.req.parseBody(), i = r.file, a = r.folderPath, o = r.isVariant === "true" || r.isVariant === "1" || r.temporary === "true", s = r.replaceAssetId, c = typeof s == "string" && s.trim().length > 0 ? s.trim() : null, l = r.parentAssetId || r.parentAsset, u = typeof l == "string" && l.trim().length > 0 ? l.trim() : null;
26023
26664
  if (!i || !(i instanceof File)) return e.json({ error: "No file uploaded" }, 400);
26024
- let u = r.cropCoordinates, d = null, f = null;
26025
- if (u) {
26026
- if (typeof u == "string") {
26027
- d = u;
26665
+ let d = r.cropCoordinates, f = null, p = null;
26666
+ if (d) {
26667
+ if (typeof d == "string") {
26668
+ f = d;
26028
26669
  try {
26029
- f = JSON.parse(u);
26670
+ p = JSON.parse(d);
26030
26671
  } catch {}
26031
- } else d = JSON.stringify(u), f = u;
26032
- }
26033
- let p = crypto.randomUUID().replace(/-/g, "").slice(0, 12), m = (/* @__PURE__ */ new Date()).toISOString().slice(0, 7).replace("-", "/"), h = a || i.name.startsWith("crop_"), g = h ? `kama/cache/${m}/${p}` : `kama/uploads/${m}/${p}`, _ = await n.upload(i, g), v = typeof _ == "string" ? _ : _?.key || _?.storageKeyPrivate || _?.storageKey || `${g}/${p}_${i.name}`;
26034
- if (!v) throw Error("Storage provider failed to return a valid storage key");
26035
- let y = e.env.CDN_DOMAIN, b = v.replace(/^\//, ""), x = y ? `https://${y}/media/${b}` : `/media/${b}`, S = i.type || "application/octet-stream", C = i.size || 0, w = e.get("userId"), T = typeof w == "string" && w.trim().length > 0 ? w : null;
26036
- T && (await oS(t, "SELECT id FROM users WHERE id = ?", [T])).length === 0 && (T = null);
26037
- let ee = new mx(e.env);
26038
- if (s) {
26039
- let r = await oS(t, "SELECT storageKeyPrivate, isSystemVariant, parentAssetId FROM assets WHERE id = ?", [s]);
26672
+ } else f = JSON.stringify(d), p = d;
26673
+ }
26674
+ let m = crypto.randomUUID().replace(/-/g, "").slice(0, 12), h = (/* @__PURE__ */ new Date()).toISOString().slice(0, 7).replace("-", "/"), g = o || i.name.startsWith("crop_"), _ = g ? `kama/cache/${h}/${m}` : `kama/uploads/${h}/${m}`, v = await n.upload(i, _), y = typeof v == "string" ? v : v?.key || v?.storageKeyPrivate || v?.storageKey || `${_}/${m}_${i.name}`;
26675
+ if (!y) throw Error("Storage provider failed to return a valid storage key");
26676
+ let b = e.env.CDN_DOMAIN, x = y.replace(/^\//, ""), S = b ? `https://${b}/media/${x}` : `/media/${x}`, C = i.type || "application/octet-stream", w = i.size || 0, T = e.get("userId"), E = typeof T == "string" && T.trim().length > 0 ? T : null;
26677
+ E && (await oS(t, "SELECT id FROM users WHERE id = ?", [E])).length === 0 && (E = null);
26678
+ let D = new mx(e.env);
26679
+ if (c) {
26680
+ let r = await oS(t, "SELECT storageKeyPrivate, isSystemVariant, parentAssetId FROM assets WHERE id = ?", [c]);
26040
26681
  if (r.length > 0) {
26041
26682
  let a = r[0];
26042
26683
  if (await sS(t, "UPDATE assets SET filename = ?, mimeType = ?, sizeBytes = ?, storageKeyPrivate = ?, cdnUrl = ?, updatedAt = CURRENT_TIMESTAMP WHERE id = ?", [
26043
26684
  i.name,
26044
- S,
26045
26685
  C,
26046
- v,
26047
- x,
26048
- s
26686
+ w,
26687
+ y,
26688
+ S,
26689
+ c
26049
26690
  ]), a.storageKeyPrivate) try {
26050
26691
  await n.delete(a.storageKeyPrivate);
26051
- } catch (e) {
26052
- console.warn("Failed to cleanup old asset", e);
26053
- }
26054
- ee.purgeAsset(e, t, s);
26055
- let o = `${x}?v=${Date.now()}`;
26056
- return e.json({
26057
- id: s,
26058
- url: o,
26059
- originalUrl: o,
26692
+ } catch {}
26693
+ return D.purgeAsset(e, t, c), e.json({
26694
+ id: c,
26695
+ url: `${S}?v=${Date.now()}`,
26696
+ originalUrl: `${S}?v=${Date.now()}`,
26060
26697
  parentAssetId: a.parentAssetId,
26061
- cropCoordinates: f,
26698
+ cropCoordinates: p,
26062
26699
  filename: i.name,
26063
- mimeType: S,
26700
+ mimeType: C,
26064
26701
  usageCount: 0,
26065
26702
  isSystemVariant: !!a.isSystemVariant,
26066
26703
  replaced: !0
26067
26704
  }, 200);
26068
26705
  }
26069
26706
  }
26070
- let E = `ast_${p}`, D = +!!h;
26071
- await sS(t, "INSERT INTO assets (id, filename, mimeType, sizeBytes, storageKeyPrivate, cdnUrl, createdById, isSystemVariant, parentAssetId, cropCoordinatesJson) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [
26072
- E,
26707
+ let O = `ast_${m}`, ee = +!!g;
26708
+ if (await sS(t, "INSERT INTO assets (id, filename, mimeType, sizeBytes, storageKeyPrivate, cdnUrl, createdById, isSystemVariant, parentAssetId, cropCoordinatesJson) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [
26709
+ O,
26073
26710
  i.name,
26074
- S,
26075
26711
  C,
26076
- v,
26077
- x,
26078
- T,
26079
- D,
26080
- l,
26081
- d
26082
- ]);
26083
- let te = x;
26084
- if (l) {
26085
- let n = await oS(t, "SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?", [l]);
26086
- n.length > 0 && (te = cS(n[0].cdnUrl, n[0].storageKeyPrivate, y)), ee.purgeAsset(e, t, l);
26712
+ w,
26713
+ y,
26714
+ S,
26715
+ E,
26716
+ ee,
26717
+ u,
26718
+ f
26719
+ ]), typeof a == "string" && a.trim()) {
26720
+ let e = a.split("/").filter((e) => e.trim() !== "");
26721
+ for (let n of e) {
26722
+ let e = cS(n), r = null, i = await oS(t, "SELECT id FROM taxonomy_terms WHERE taxonomy = ? AND key = ?", ["media-tag", e]);
26723
+ if (i.length > 0) r = i[0].id;
26724
+ else {
26725
+ await sS(t, "INSERT INTO taxonomy_terms (taxonomy, key, label, sortOrder, dataJson) VALUES (?, ?, ?, ?, ?)", [
26726
+ "media-tag",
26727
+ e,
26728
+ n,
26729
+ 0,
26730
+ "{}"
26731
+ ]);
26732
+ let i = await oS(t, "SELECT id FROM taxonomy_terms WHERE taxonomy = ? AND key = ?", ["media-tag", e]);
26733
+ i.length > 0 && (r = i[0].id);
26734
+ }
26735
+ r && await sS(t, "INSERT OR IGNORE INTO asset_terms (assetId, termId) VALUES (?, ?)", [O, r]);
26736
+ }
26737
+ }
26738
+ let k = S;
26739
+ if (u) {
26740
+ let n = await oS(t, "SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?", [u]);
26741
+ n.length > 0 && (k = lS(n[0].cdnUrl, n[0].storageKeyPrivate, b)), D.purgeAsset(e, t, u);
26087
26742
  }
26088
26743
  return e.json({
26089
- id: E,
26090
- url: x,
26091
- originalUrl: te,
26092
- parentAssetId: l,
26093
- cropCoordinates: f,
26744
+ id: O,
26745
+ url: S,
26746
+ originalUrl: k,
26747
+ parentAssetId: u,
26748
+ cropCoordinates: p,
26094
26749
  filename: i.name,
26095
- mimeType: S,
26750
+ mimeType: C,
26096
26751
  usageCount: 0,
26097
- isSystemVariant: !!D
26752
+ isSystemVariant: !!ee
26098
26753
  }, 201);
26099
26754
  } catch (t) {
26100
- return console.error("❌ [Asset Upload Crash Details]:", t), e.json({
26755
+ return e.json({
26101
26756
  error: "Upload failed",
26102
26757
  details: t.message || String(t)
26103
26758
  }, 500);
@@ -26106,18 +26761,18 @@ aS.get("/", async (e) => {
26106
26761
  try {
26107
26762
  let t = wb(e), n = e.req.param("id"), r = await oS(t, "SELECT * FROM assets WHERE id = ?", [n]);
26108
26763
  if (!r || r.length === 0) return e.json({ error: "Asset not found" }, 404);
26109
- let i = r[0], a = await oS(t, "\n SELECT DISTINCT cn.id, cn.title, cn.contentType, cn.slug, na.fieldKey, na.assetId \n FROM node_assets na \n INNER JOIN content_nodes cn ON na.nodeId = cn.id \n LEFT JOIN assets crop ON na.assetId = crop.id \n WHERE na.assetId = ? OR (crop.isSystemVariant = 1 AND crop.parentAssetId = ?)\n ", [n, n]), o = await oS(t, "\n SELECT id, filename, mimeType, sizeBytes, cdnUrl, storageKeyPrivate, parentAssetId, cropCoordinatesJson, createdAt, updatedAt \n FROM assets \n WHERE isSystemVariant = 1 AND parentAssetId = ? \n ORDER BY createdAt DESC\n ", [n]), s = {
26764
+ let i = r[0], a = await oS(t, "\n SELECT DISTINCT cn.id, cn.title, cn.contentType, cn.slug, na.fieldKey, na.assetId \n FROM node_assets na \n INNER JOIN content_nodes cn ON na.nodeId = cn.id \n LEFT JOIN assets crop ON na.assetId = crop.id \n WHERE na.assetId = ? OR (crop.isSystemVariant = 1 AND crop.parentAssetId = ?)\n ", [n, n]), o = await oS(t, "\n SELECT id, filename, mimeType, sizeBytes, cdnUrl, storageKeyPrivate, parentAssetId, cropCoordinatesJson, createdAt, updatedAt \n FROM assets \n WHERE isSystemVariant = 1 AND parentAssetId = ? \n ORDER BY createdAt DESC\n ", [n]), s = (await oS(t, "\n SELECT t.id FROM asset_terms at \n JOIN taxonomy_terms t ON at.termId = t.id \n WHERE at.assetId = ?\n ", [n])).map((e) => `trm_${e.id}`), c = {
26110
26765
  title: "",
26111
26766
  alt: "",
26112
26767
  description: ""
26113
26768
  };
26114
26769
  try {
26115
- s = {
26116
- ...s,
26770
+ c = {
26771
+ ...c,
26117
26772
  ...JSON.parse(i.dataJson || "{}")
26118
26773
  };
26119
26774
  } catch {}
26120
- let c = i.updatedAt ? new Date(i.updatedAt).getTime() : Date.now(), l = `${cS(i.cdnUrl, i.storageKeyPrivate, e.env?.CDN_DOMAIN)}?v=${c}`;
26775
+ let l = i.updatedAt ? new Date(i.updatedAt).getTime() : Date.now(), u = `${lS(i.cdnUrl, i.storageKeyPrivate, e.env?.CDN_DOMAIN)}?v=${l}`;
26121
26776
  return e.json({
26122
26777
  id: i.id,
26123
26778
  filename: i.filename,
@@ -26125,18 +26780,19 @@ aS.get("/", async (e) => {
26125
26780
  sizeBytes: i.sizeBytes,
26126
26781
  createdAt: i.createdAt,
26127
26782
  updatedAt: i.updatedAt,
26128
- title: s.title || "",
26129
- alt: s.alt || "",
26130
- description: s.description || "",
26131
- url: l,
26132
- originalUrl: l,
26783
+ title: c.title || "",
26784
+ alt: c.alt || "",
26785
+ description: c.description || "",
26786
+ tags: s,
26787
+ url: u,
26788
+ originalUrl: u,
26133
26789
  connectedNodes: a,
26134
26790
  variants: o.map((t) => {
26135
26791
  let n = null;
26136
26792
  if (t.cropCoordinatesJson) try {
26137
26793
  n = JSON.parse(t.cropCoordinatesJson);
26138
26794
  } catch {}
26139
- let r = t.updatedAt ? new Date(t.updatedAt).getTime() : c, a = cS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
26795
+ let r = t.updatedAt ? new Date(t.updatedAt).getTime() : l, a = lS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
26140
26796
  return {
26141
26797
  id: t.id,
26142
26798
  filename: t.filename,
@@ -26146,7 +26802,7 @@ aS.get("/", async (e) => {
26146
26802
  parentAssetId: t.parentAssetId || i.id,
26147
26803
  cropCoordinates: n,
26148
26804
  url: `${a}?v=${r}`,
26149
- originalUrl: l
26805
+ originalUrl: u
26150
26806
  };
26151
26807
  })
26152
26808
  });
@@ -26161,11 +26817,16 @@ aS.get("/", async (e) => {
26161
26817
  try {
26162
26818
  o = JSON.parse(a.dataJson || "{}");
26163
26819
  } catch {}
26164
- return r.title !== void 0 && (o.title = r.title), r.alt !== void 0 && (o.alt = r.alt), r.description !== void 0 && (o.description = r.description), await sS(t, "UPDATE assets SET filename = ?, dataJson = ?, updatedAt = CURRENT_TIMESTAMP WHERE id = ?", [
26820
+ if (r.title !== void 0 && (o.title = r.title), r.alt !== void 0 && (o.alt = r.alt), r.description !== void 0 && (o.description = r.description), await sS(t, "UPDATE assets SET filename = ?, dataJson = ?, updatedAt = CURRENT_TIMESTAMP WHERE id = ?", [
26165
26821
  r.filename === void 0 ? a.filename : r.filename,
26166
26822
  JSON.stringify(o),
26167
26823
  n
26168
- ]), new mx(e.env).purgeAsset(e, t, n), e.json({ success: !0 });
26824
+ ]), r.tags !== void 0 && Array.isArray(r.tags)) {
26825
+ await sS(t, "DELETE FROM asset_terms WHERE assetId = ?", [n]);
26826
+ let e = r.tags.map((e) => Number(e.replace("trm_", ""))).filter((e) => !isNaN(e));
26827
+ for (let r of e) await sS(t, "INSERT OR IGNORE INTO asset_terms (assetId, termId) VALUES (?, ?)", [n, r]);
26828
+ }
26829
+ return new mx(e.env).purgeAsset(e, t, n), e.json({ success: !0 });
26169
26830
  } catch {
26170
26831
  return e.json({ error: "Failed to update asset" }, 500);
26171
26832
  }
@@ -26221,7 +26882,7 @@ aS.get("/", async (e) => {
26221
26882
  deletedVariantsCount: a.length - 1
26222
26883
  });
26223
26884
  } catch (t) {
26224
- return console.error("❌ [Asset Purge Error]:", t), e.json({
26885
+ return e.json({
26225
26886
  error: "Failed to purge asset",
26226
26887
  details: t.message || String(t)
26227
26888
  }, 500);
@@ -26229,8 +26890,8 @@ aS.get("/", async (e) => {
26229
26890
  });
26230
26891
  //#endregion
26231
26892
  //#region server/routes/public/node.ts
26232
- var lS = new $y();
26233
- function uS() {
26893
+ var uS = new $y();
26894
+ function dS() {
26234
26895
  return {
26235
26896
  fullPath: /* @__PURE__ */ new Map(),
26236
26897
  treeEdges: /* @__PURE__ */ new Map(),
@@ -26238,7 +26899,7 @@ function uS() {
26238
26899
  assetUrls: /* @__PURE__ */ new Map()
26239
26900
  };
26240
26901
  }
26241
- function dS(e, t, n = []) {
26902
+ function fS(e, t, n = []) {
26242
26903
  let r = Date.now();
26243
26904
  if (e && String(e).trim() !== "") {
26244
26905
  let t = Date.parse(e);
@@ -26249,7 +26910,7 @@ function dS(e, t, n = []) {
26249
26910
  !isNaN(e) && e > r && n.push(e);
26250
26911
  }
26251
26912
  }
26252
- function fS(e, t) {
26913
+ function pS(e, t) {
26253
26914
  let n = Date.now();
26254
26915
  if (e && String(e).trim() !== "") {
26255
26916
  let t = Date.parse(e);
@@ -26261,7 +26922,7 @@ function fS(e, t) {
26261
26922
  }
26262
26923
  return !0;
26263
26924
  }
26264
- async function pS(e, t, n, r, i, a) {
26925
+ async function mS(e, t, n, r, i, a) {
26265
26926
  let o = t.filter((e) => e.componentId === "content-feed" || e.componentId === "article-list" || e.componentId === "nodeList" || e.componentId === "node-list");
26266
26927
  await Promise.all(o.map(async (t) => {
26267
26928
  let o = t.data || {}, s = o.nodeType || ["article"], c = (Array.isArray(s) ? s : String(s).split(",")).map((e) => String(e).trim()).filter(Boolean), l = {};
@@ -26309,7 +26970,7 @@ async function pS(e, t, n, r, i, a) {
26309
26970
  if (e.dataJson) try {
26310
26971
  t = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
26311
26972
  } catch {}
26312
- i && dS(t.startShowingAt, t.stopShowingAt, i);
26973
+ i && fS(t.startShowingAt, t.stopShowingAt, i);
26313
26974
  let n = {};
26314
26975
  if (a) {
26315
26976
  let r = l[e.contentType || "article"] || [];
@@ -26333,7 +26994,7 @@ async function pS(e, t, n, r, i, a) {
26333
26994
  }
26334
26995
  }));
26335
26996
  }
26336
- async function mS(e, t, n, r, i, a, o = !1, s, c) {
26997
+ async function hS(e, t, n, r, i, a, o = !1, s, c) {
26337
26998
  if (!t) return { blocks: [] };
26338
26999
  let l = await e.prepare("\n WITH RECURSIVE ancestor_path(contentId, title, slug, parentId, level) AS (\n SELECT t.contentId, c.title, c.slug, t.parentId, 0 FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id WHERE t.contentId = ? AND t.treeId = ?\n UNION ALL\n SELECT t.contentId, c.title, c.slug, t.parentId, ap.level + 1 FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id INNER JOIN ancestor_path ap ON t.contentId = ap.parentId AND t.treeId = ?\n )\n SELECT * FROM ancestor_path ORDER BY level ASC\n ").all(t, n, n), u = Array.isArray(l) ? l : l?.results || [];
26339
27000
  if (!u || u.length === 0) return { blocks: [] };
@@ -26369,11 +27030,11 @@ async function mS(e, t, n, r, i, a, o = !1, s, c) {
26369
27030
  try {
26370
27031
  n = (typeof t.dataJson == "string" ? JSON.parse(t.dataJson) : t.dataJson) || {};
26371
27032
  } catch {}
26372
- c && dS(n.startShowingAt, n.stopShowingAt, c);
26373
- let l = n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", u = fS(n.startShowingAt, n.stopShowingAt);
27033
+ c && fS(n.startShowingAt, n.stopShowingAt, c);
27034
+ let l = n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", u = pS(n.startShowingAt, n.stopShowingAt);
26374
27035
  if (!o && (l || !u)) return null;
26375
- let d = t.elementType || t.componentId || "text-block", f = i.blocks?.[d]?.fields || i.elements?.[d]?.fields || i.components?.[d]?.fields || {}, p = String(n.blockId || n._instanceId || n.id || t.blockId || t.id), m = hS(n, f);
26376
- return m = await fx(e, m), m = gS(m), m = await _S(e, m, a, s), m.blockId = p, {
27036
+ let d = t.elementType || t.componentId || "text-block", f = i.blocks?.[d]?.fields || i.elements?.[d]?.fields || i.components?.[d]?.fields || {}, p = String(n.blockId || n._instanceId || n.id || t.blockId || t.id), m = gS(n, f);
27037
+ return m = await fx(e, m), m = _S(m), m = await vS(e, m, a, s), m.blockId = p, {
26377
27038
  region: t.region || r,
26378
27039
  block: {
26379
27040
  instanceId: t.id,
@@ -26393,7 +27054,7 @@ async function mS(e, t, n, r, i, a, o = !1, s, c) {
26393
27054
  }
26394
27055
  return { blocks: [] };
26395
27056
  }
26396
- function hS(e, t = {}) {
27057
+ function gS(e, t = {}) {
26397
27058
  let n = {};
26398
27059
  for (let [r, i] of Object.entries(e)) r.endsWith("_meta") || [
26399
27060
  "disabledRegions",
@@ -26409,14 +27070,14 @@ function hS(e, t = {}) {
26409
27070
  ].includes(r) || r.startsWith("_") || (!t[r] || t[r].public !== !1) && (n[r] = i);
26410
27071
  return n;
26411
27072
  }
26412
- function gS(e) {
26413
- if (Array.isArray(e)) return e.map(gS);
27073
+ function _S(e) {
27074
+ if (Array.isArray(e)) return e.map(_S);
26414
27075
  if (!e || typeof e != "object") return e;
26415
27076
  if (typeof e.id == "string" && e.id.startsWith("ast_") && typeof e.url == "string") {
26416
27077
  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 ? {
26417
27078
  ...t,
26418
27079
  ...t.crops?.[r] || {}
26419
- } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, gS({
27080
+ } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, _S({
26420
27081
  ...n,
26421
27082
  title: n?.title ?? e.title ?? "",
26422
27083
  alt: n?.alt ?? e.alt ?? "",
@@ -26430,9 +27091,9 @@ function gS(e) {
26430
27091
  ...Object.keys(a).length > 0 ? { variants: a } : {}
26431
27092
  };
26432
27093
  }
26433
- return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, gS(t)]));
27094
+ return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, _S(t)]));
26434
27095
  }
26435
- async function _S(e, t, n, r) {
27096
+ async function vS(e, t, n, r) {
26436
27097
  if (typeof t == "string") {
26437
27098
  if (!t.includes("#node:") && !t.includes("data-node-id") && !t.includes("#asset:") && !t.includes("data-asset-id")) return t;
26438
27099
  let r = (e, t) => {
@@ -26473,25 +27134,25 @@ async function _S(e, t, n, r) {
26473
27134
  return /href\s*=\s*["'][^"']*["']/i.test(d) ? d = d.replace(/href\s*=\s*["'][^"']*["']/i, `href="${u}"`) : d += ` href="${u}"`, `<a ${d}>`;
26474
27135
  });
26475
27136
  }
26476
- if (Array.isArray(t)) return Promise.all(t.map((t) => _S(e, t, n, r)));
27137
+ if (Array.isArray(t)) return Promise.all(t.map((t) => vS(e, t, n, r)));
26477
27138
  if (t && typeof t == "object") {
26478
27139
  if (typeof t.href == "string" && (t.href.startsWith("#node:") || t.href.startsWith("#asset:"))) return {
26479
27140
  ...t,
26480
- href: await vS(e, t, n, r)
27141
+ href: await yS(e, t, n, r)
26481
27142
  };
26482
- let i = await Promise.all(Object.entries(t).map(async ([t, i]) => [t, await _S(e, i, n, r)]));
27143
+ let i = await Promise.all(Object.entries(t).map(async ([t, i]) => [t, await vS(e, i, n, r)]));
26483
27144
  return Object.fromEntries(i);
26484
27145
  }
26485
27146
  return t;
26486
27147
  }
26487
- async function vS(e, t, n, r) {
27148
+ async function yS(e, t, n, r) {
26488
27149
  let i = t.href.match(/^#node:(.+)$/), a = t.href.match(/^#asset:(.+)$/);
26489
- if (a) return yS(e, a[1], r);
27150
+ if (a) return bS(e, a[1], r);
26490
27151
  if (!i) return t.href;
26491
27152
  let o = i[1];
26492
27153
  return (await e.prepare("\n SELECT path \n FROM node_routes \n WHERE nodeId = ? AND isCanonical = 1 \n ORDER BY CASE WHEN channelId = ? THEN 0 ELSE 1 END ASC \n LIMIT 1\n ").get(Number(o), n))?.path || "#";
26493
27154
  }
26494
- async function yS(e, t, n) {
27155
+ async function bS(e, t, n) {
26495
27156
  let r = String(t), i = n.assetUrls.get(r);
26496
27157
  if (i) return i;
26497
27158
  let a = (async () => {
@@ -26500,7 +27161,7 @@ async function yS(e, t, n) {
26500
27161
  })();
26501
27162
  return n.assetUrls.set(r, a), a;
26502
27163
  }
26503
- function bS(e) {
27164
+ function xS(e) {
26504
27165
  let t = e.socialImage;
26505
27166
  if (!t || typeof t != "object") return null;
26506
27167
  let n = (e, t) => {
@@ -26531,7 +27192,7 @@ function bS(e) {
26531
27192
  ])
26532
27193
  };
26533
27194
  }
26534
- async function xS(e, t, n, r, i) {
27195
+ async function SS(e, t, n, r, i) {
26535
27196
  let a = {}, o = null;
26536
27197
  if (t) {
26537
27198
  let i = await e.prepare("\n WITH RECURSIVE ancestor_path(contentId, title, slug, parentId, level) AS (\n SELECT t.contentId, c.title, c.slug, t.parentId, 0 FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id WHERE t.contentId = ? AND t.treeId = ?\n UNION ALL\n SELECT t.contentId, c.title, c.slug, t.parentId, ap.level + 1 FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id INNER JOIN ancestor_path ap ON t.contentId = ap.parentId AND t.treeId = ?\n )\n SELECT c.dataJson, c.draftDataJson FROM ancestor_path ap INNER JOIN content_nodes c ON ap.contentId = c.id ORDER BY ap.level ASC\n ").all(t, n, n), s = Array.isArray(i) ? i : i?.results || [], c = /* @__PURE__ */ new Set([
@@ -26569,20 +27230,20 @@ async function xS(e, t, n, r, i) {
26569
27230
  inheritedFields: a
26570
27231
  };
26571
27232
  }
26572
- function SS(e) {
27233
+ function CS(e) {
26573
27234
  let t = Number(e?.env?.CMS_NODE_CACHE_TTL);
26574
27235
  return Number.isFinite(t) && t >= 60 ? Math.floor(t) : 300;
26575
27236
  }
26576
- async function CS(e, t, n, r) {
27237
+ async function wS(e, t, n, r) {
26577
27238
  try {
26578
27239
  await e.set(t, n, r);
26579
27240
  } catch (e) {
26580
27241
  console.warn("[CMS Cache] Failed to write node response to cache:", e);
26581
27242
  }
26582
27243
  }
26583
- async function wS(e) {
27244
+ async function TS(e) {
26584
27245
  try {
26585
- let t = e.get("db"), n = uS(), r = [], i = new URL(e.req.url), a = i.searchParams.get("channelId") || i.searchParams.get("channel"), o = i.searchParams.get("lang"), s = i.searchParams.get("preview") === "true", c = i.searchParams.get("revisionId"), l = i.searchParams.get("treeId"), u = i.pathname, d = "";
27246
+ let t = e.get("db"), n = dS(), r = [], i = new URL(e.req.url), a = i.searchParams.get("channelId") || i.searchParams.get("channel"), o = i.searchParams.get("lang"), s = i.searchParams.get("preview") === "true", c = i.searchParams.get("revisionId"), l = i.searchParams.get("treeId"), u = i.pathname, d = "";
26586
27247
  u.includes("/node/") ? d = u.substring(u.indexOf("/node/") + 6) : u.endsWith("/node") && (d = "");
26587
27248
  try {
26588
27249
  d = decodeURIComponent(d);
@@ -26630,12 +27291,12 @@ async function wS(e) {
26630
27291
  e.defaultLanguage ? w = String(e.defaultLanguage).trim() : e.language && (w = String(e.language).trim());
26631
27292
  } catch {}
26632
27293
  }
26633
- let T = y.language?.trim() || null, ee = C || w || o?.trim() || null, E = T || ee || null, D = `node:${g || _}:${E || "default"}:${d}`, te = e.req.header("x-bypass-cache") === "true" || !!c, O = $b(e), k = SS(e);
26634
- if (!s && !te) {
26635
- let t = await O.get(D);
27294
+ let T = y.language?.trim() || null, E = C || w || o?.trim() || null, D = T || E || null, O = `node:${g || _}:${D || "default"}:${d}`, ee = e.req.header("x-bypass-cache") === "true" || !!c, k = $b(e), A = CS(e);
27295
+ if (!s && !ee) {
27296
+ let t = await k.get(O);
26636
27297
  if (t) {
26637
27298
  e.header("X-Cache", "HIT");
26638
- let n = k;
27299
+ let n = A;
26639
27300
  if (t.meta && t.meta.nextEventTimestamp) {
26640
27301
  let e = Math.floor((t.meta.nextEventTimestamp - Date.now()) / 1e3);
26641
27302
  e > 0 && e < n ? n = e : e <= 0 && (n = 0);
@@ -26643,28 +27304,28 @@ async function wS(e) {
26643
27304
  return n > 0 ? e.header("Cache-Control", `public, max-age=${n}, s-maxage=${n}`) : e.header("Cache-Control", "no-cache, no-store, must-revalidate"), e.json(t);
26644
27305
  }
26645
27306
  }
26646
- let A = S?.parentId || null;
26647
- if (!S && !A) {
27307
+ let j = S?.parentId || null;
27308
+ if (!S && !j) {
26648
27309
  let e = f.split("/").filter(Boolean);
26649
27310
  if (e.length > 1) {
26650
27311
  e.pop();
26651
27312
  let n = "/" + e.join("/"), r = await t.prepare("SELECT nodeId FROM node_routes WHERE path = ? AND channelId = ? LIMIT 1").get(n, g);
26652
27313
  if (r?.nodeId) {
26653
27314
  let e = await t.prepare("SELECT contentId, treeId FROM tree_nodes WHERE contentId = ? LIMIT 1").get(r.nodeId);
26654
- e && (A = e.contentId, b = e.treeId);
27315
+ e && (j = e.contentId, b = e.treeId);
26655
27316
  }
26656
27317
  }
26657
- if (!A) {
27318
+ if (!j) {
26658
27319
  let e = await t.prepare("SELECT contentId, treeId FROM tree_nodes WHERE parentId IS NULL ORDER BY sortOrder ASC LIMIT 1").get();
26659
- e && (A = e.contentId, b = e.treeId);
27320
+ e && (j = e.contentId, b = e.treeId);
26660
27321
  }
26661
27322
  }
26662
- let ne = v?.path || (f === "" ? "/" : f), j = {
27323
+ let te = v?.path || (f === "" ? "/" : f), ne = {
26663
27324
  id: y.id,
26664
27325
  title: y.title,
26665
27326
  slug: y.slug,
26666
- language: E,
26667
- path: ne,
27327
+ language: D,
27328
+ path: te,
26668
27329
  nodeType: y.contentType,
26669
27330
  createdAt: y.createdAt,
26670
27331
  updatedAt: y.updatedAt
@@ -26676,37 +27337,37 @@ async function wS(e) {
26676
27337
  if (x && x.node && x.node.dataJson && (fe = x.node.dataJson), fe) try {
26677
27338
  de = typeof fe == "string" ? JSON.parse(fe) : fe;
26678
27339
  } catch {}
26679
- de.disabledRegions && (se = de.disabledRegions), ue = de.hidden === !0 || de.hidden === 1 || de.hidden === "1" || de.hidden === "true", ce = de.startShowingAt || null, le = de.stopShowingAt || null, dS(ce, le, r);
26680
- let pe = de.layoutId, me = pe && pe !== "inherit", { resolvedLayoutId: he, inheritedFields: ge } = await xS(t, A, b, s, oe), _e = me ? pe : he || ae.defaultLayout || null;
27340
+ de.disabledRegions && (se = de.disabledRegions), ue = de.hidden === !0 || de.hidden === 1 || de.hidden === "1" || de.hidden === "true", ce = de.startShowingAt || null, le = de.stopShowingAt || null, fS(ce, le, r);
27341
+ let pe = de.layoutId, me = pe && pe !== "inherit", { resolvedLayoutId: he, inheritedFields: ge } = await SS(t, j, b, s, oe), _e = me ? pe : he || ae.defaultLayout || null;
26681
27342
  for (let [e, t] of Object.entries(ge)) (de[e] === void 0 || de[e] === null || de[e] === "" || de[e] === "inherit") && t !== void 0 && (de[e] = t);
26682
- let ve = await fx(t, hS(de, oe));
26683
- ve = gS(ve), ve = await _S(t, ve, g, n), delete ve.language;
26684
- let ye = bS(ve);
26685
- delete ve.socialImage, delete ve.fbImage, delete ve.xImage, delete ve.whatsappImage, ye && (ve.socialImages = ye), Object.assign(j, ve), j.id = y.id, j.slug = y.slug, j.title = y.title, j.path = ne, j.layoutId = _e;
26686
- let be = Number(y.isHidden) === 1 || ue, xe = !fS(ce, le), Se = y.status === "draft" || y.status === "new", Ce = y.dataJson && y.dataJson !== "{}" && y.dataJson !== "null";
27343
+ let ve = await fx(t, gS(de, oe));
27344
+ ve = _S(ve), ve = await vS(t, ve, g, n), delete ve.language;
27345
+ let ye = xS(ve);
27346
+ delete ve.socialImage, delete ve.fbImage, delete ve.xImage, delete ve.whatsappImage, ye && (ve.socialImages = ye), Object.assign(ne, ve), ne.id = y.id, ne.slug = y.slug, ne.title = y.title, ne.path = te, ne.layoutId = _e;
27347
+ let be = Number(y.isHidden) === 1 || ue, xe = !pS(ce, le), Se = y.status === "draft" || y.status === "new", Ce = y.dataJson && y.dataJson !== "{}" && y.dataJson !== "null";
26687
27348
  if (!s && (be || xe || Se && !Ce)) return e.json({ error: "Node is hidden, offline, or has never been published." }, 404);
26688
27349
  let we = [];
26689
27350
  if (S?.treeNodeId) {
26690
- let e = await t.prepare("SELECT t.contentId as treeNodeId, t.contentId as id, c.title, c.slug, c.language, c.contentType as nodeType, c.isHidden, c.dataJson, c.draftDataJson FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id WHERE t.parentId = ? AND t.treeId = ? ORDER BY t.sortOrder ASC").all(S.treeNodeId, b), n = Array.isArray(e) ? e : e?.results || [], i = j.path || "", a = i === "/" ? "" : i;
27351
+ let e = await t.prepare("SELECT t.contentId as treeNodeId, t.contentId as id, c.title, c.slug, c.language, c.contentType as nodeType, c.isHidden, c.dataJson, c.draftDataJson FROM tree_nodes t INNER JOIN content_nodes c ON t.contentId = c.id WHERE t.parentId = ? AND t.treeId = ? ORDER BY t.sortOrder ASC").all(S.treeNodeId, b), n = Array.isArray(e) ? e : e?.results || [], i = ne.path || "", a = i === "/" ? "" : i;
26691
27352
  we = n.map((e) => {
26692
27353
  let t = {}, n = s && e.draftDataJson || e.dataJson;
26693
27354
  if (!n) return null;
26694
27355
  try {
26695
27356
  t = (typeof n == "string" ? JSON.parse(n) : n) || {};
26696
27357
  } catch {}
26697
- let i = Number(e.isHidden) === 1 || t.hidden === !0 || t.hidden === 1 || t.hidden === "1", o = fS(t.startShowingAt, t.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, "");
26698
- return dS(t.startShowingAt, t.stopShowingAt, r), !s && (i || !o) ? null : {
27358
+ let i = Number(e.isHidden) === 1 || t.hidden === !0 || t.hidden === 1 || t.hidden === "1", o = pS(t.startShowingAt, t.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, "");
27359
+ return fS(t.startShowingAt, t.stopShowingAt, r), !s && (i || !o) ? null : {
26699
27360
  treeNodeId: e.treeNodeId,
26700
27361
  id: e.id,
26701
27362
  title: e.title,
26702
27363
  slug: c,
26703
- language: e.language?.trim() || E || null,
27364
+ language: e.language?.trim() || D || null,
26704
27365
  path: `${a}/${c}`.replace(/\/+/g, "/"),
26705
27366
  nodeType: e.nodeType
26706
27367
  };
26707
27368
  }).filter(Boolean);
26708
27369
  }
26709
- j.children = we;
27370
+ ne.children = we;
26710
27371
  let Te = [];
26711
27372
  if (x && x.blocks && Array.isArray(x.blocks)) Te = x.blocks.map((e) => ({
26712
27373
  ...e,
@@ -26721,11 +27382,11 @@ async function wS(e) {
26721
27382
  try {
26722
27383
  a = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
26723
27384
  } catch {}
26724
- dS(a.startShowingAt, a.stopShowingAt, r);
26725
- let o = a.hidden === !0 || a.hidden === 1 || a.hidden === "1" || a.hidden === "true", c = fS(a.startShowingAt, a.stopShowingAt);
27385
+ fS(a.startShowingAt, a.stopShowingAt, r);
27386
+ let o = a.hidden === !0 || a.hidden === 1 || a.hidden === "1" || a.hidden === "true", c = pS(a.startShowingAt, a.stopShowingAt);
26726
27387
  if (!s && (o || !c)) return null;
26727
- let l = e.elementType || e.componentId || "text-block", u = re.blocks?.[l]?.fields || re.elements?.[l]?.fields || re.components?.[l]?.fields || {}, d = String(a.blockId || a._instanceId || a.id || e.blockId || e.id), f = hS(a, u);
26728
- return f = await fx(t, f), f = gS(f), f = await _S(t, f, g, n), f.blockId = d, {
27388
+ let l = e.elementType || e.componentId || "text-block", u = re.blocks?.[l]?.fields || re.elements?.[l]?.fields || re.components?.[l]?.fields || {}, d = String(a.blockId || a._instanceId || a.id || e.blockId || e.id), f = gS(a, u);
27389
+ return f = await fx(t, f), f = _S(f), f = await vS(t, f, g, n), f.blockId = d, {
26729
27390
  region: i,
26730
27391
  block: {
26731
27392
  instanceId: e.id,
@@ -26749,8 +27410,8 @@ async function wS(e) {
26749
27410
  };
26750
27411
  for (let [e, i] of Object.entries(ke)) {
26751
27412
  let a = Ee[e] && Ee[e].length > 0, o = !!se[e];
26752
- if (Ee[e] || (Ee[e] = [], De[e] = { isInherited: !1 }), (i?.inherit === "parent" || i?.inherit === !0 || i?.inherit === "true" || e === "header" || e === "footer") && !a && !o && A) {
26753
- let i = await mS(t, A, b, e, re, g, s, n, r);
27413
+ if (Ee[e] || (Ee[e] = [], De[e] = { isInherited: !1 }), (i?.inherit === "parent" || i?.inherit === !0 || i?.inherit === "true" || e === "header" || e === "footer") && !a && !o && j) {
27414
+ let i = await hS(t, j, b, e, re, g, s, n, r);
26754
27415
  if (i.blocks.length > 0 && (Ee[e] = i.blocks, De[e] = {
26755
27416
  isInherited: !0,
26756
27417
  inheritedFromId: i.inheritedFromId,
@@ -26762,7 +27423,7 @@ async function wS(e) {
26762
27423
  });
26763
27424
  }
26764
27425
  }
26765
- await Promise.all(Object.keys(Ee).map((e) => pS(t, Ee[e], g, E, r, re)));
27426
+ await Promise.all(Object.keys(Ee).map((e) => mS(t, Ee[e], g, D, r, re)));
26766
27427
  let Ae = null, je = null;
26767
27428
  if (r.length > 0) {
26768
27429
  je = Math.min(...r);
@@ -26772,19 +27433,19 @@ async function wS(e) {
26772
27433
  let Me = {
26773
27434
  channelId: g || _,
26774
27435
  treeId: b,
26775
- language: E,
27436
+ language: D,
26776
27437
  meta: {
26777
27438
  cacheTtl: Ae,
26778
27439
  nextEventTimestamp: je
26779
27440
  },
26780
- node: j,
27441
+ node: ne,
26781
27442
  content: Ee,
26782
27443
  regionMeta: De
26783
27444
  };
26784
- if (!s && !te) {
27445
+ if (!s && !ee) {
26785
27446
  e.header("X-Cache", "MISS");
26786
- let t = Ae === null ? k : Ae;
26787
- e.header("Cache-Control", `public, max-age=${t}, s-maxage=${t}`), await CS(O, D, Me, t);
27447
+ let t = Ae === null ? A : Ae;
27448
+ e.header("Cache-Control", `public, max-age=${t}, s-maxage=${t}`), await wS(k, O, Me, t);
26788
27449
  } else e.header("Cache-Control", "no-cache, no-store, must-revalidate");
26789
27450
  return e.json(Me, 200);
26790
27451
  } catch (t) {
@@ -26794,17 +27455,17 @@ async function wS(e) {
26794
27455
  }, 500);
26795
27456
  }
26796
27457
  }
26797
- var TS = X({
27458
+ var ES = X({
26798
27459
  channelId: J().optional().openapi({ description: "The ID or key of the channel" }),
26799
27460
  channel: J().optional().openapi({ description: "Legacy alias for channelId" }),
26800
27461
  lang: J().optional().openapi({ description: "Requested language code" }),
26801
27462
  preview: lv(["true", "false"]).optional().openapi({ description: "Request unpublished draft data" }),
26802
27463
  revisionId: J().optional().openapi({ description: "Historical revision version to load" }),
26803
27464
  treeId: J().optional().openapi({ description: "The ID of the tree to resolve paths against" })
26804
- }), ES = X({
27465
+ }), DS = X({
26805
27466
  error: J(),
26806
27467
  details: J().optional()
26807
- }).openapi("ErrorResponse"), DS = X({
27468
+ }).openapi("ErrorResponse"), OS = X({
26808
27469
  channelId: G_([J(), c_()]),
26809
27470
  treeId: J().nullable(),
26810
27471
  language: J().nullable(),
@@ -26819,34 +27480,34 @@ var TS = X({
26819
27480
  inheritedFromId: J().optional(),
26820
27481
  inheritedFromTitle: J().optional()
26821
27482
  }))
26822
- }).openapi("NodeResponse"), OS = eb({
27483
+ }).openapi("NodeResponse"), kS = eb({
26823
27484
  method: "get",
26824
27485
  path: "/{path}",
26825
27486
  summary: "Fetch CMS Node Content",
26826
27487
  tags: ["Public Node API"],
26827
27488
  request: {
26828
27489
  params: X({ path: J().optional() }),
26829
- query: TS
27490
+ query: ES
26830
27491
  },
26831
27492
  responses: {
26832
27493
  200: {
26833
27494
  description: "Fully hydrated CMS Node",
26834
- content: { "application/json": { schema: DS } }
27495
+ content: { "application/json": { schema: OS } }
26835
27496
  },
26836
27497
  404: {
26837
27498
  description: "Not found",
26838
- content: { "application/json": { schema: ES } }
27499
+ content: { "application/json": { schema: DS } }
26839
27500
  },
26840
27501
  500: {
26841
27502
  description: "Server error",
26842
- content: { "application/json": { schema: ES } }
27503
+ content: { "application/json": { schema: DS } }
26843
27504
  }
26844
27505
  }
26845
27506
  });
26846
- lS.openapi(OS, wS), lS.get("*", wS);
27507
+ uS.openapi(kS, TS), uS.get("*", TS);
26847
27508
  //#endregion
26848
27509
  //#region server/routes/public/nodes.ts
26849
- var kS = new $y(), AS = X({
27510
+ var AS = new $y(), jS = X({
26850
27511
  nodeType: J().default("article").openapi({ description: "Content types (comma separated)" }),
26851
27512
  channelId: J().optional().openapi({ description: "Channel ID or key" }),
26852
27513
  limit: Ky().min(1).max(50).default(12).openapi({ description: "Number of items (max 50)" }),
@@ -26855,7 +27516,7 @@ var kS = new $y(), AS = X({
26855
27516
  authors: G_([J(), z_(J())]).optional(),
26856
27517
  categories: G_([J(), z_(J())]).optional(),
26857
27518
  tags: G_([J(), z_(J())]).optional()
26858
- }), jS = async (e) => {
27519
+ }), MS = async (e) => {
26859
27520
  try {
26860
27521
  let t = e.get("db"), n = e.req.valid("query"), r = n.nodeType || "article", i = String(r).split(",").map((e) => e.trim()).filter(Boolean), a = i.map(() => "?").join(","), o = px(e.env?.BUNDLED_DEFINITIONS), s = {};
26861
27522
  for (let e of i) {
@@ -26911,12 +27572,12 @@ var kS = new $y(), AS = X({
26911
27572
  } catch (t) {
26912
27573
  return console.error("[CMS API] Error fetching nodes list:", t), e.json({ error: "Failed to fetch nodes list" }, 500);
26913
27574
  }
26914
- }, MS = eb({
27575
+ }, NS = eb({
26915
27576
  method: "get",
26916
27577
  path: "/",
26917
27578
  summary: "Fetch filtered list of nodes",
26918
27579
  tags: ["Public Node API"],
26919
- request: { query: AS },
27580
+ request: { query: jS },
26920
27581
  responses: {
26921
27582
  200: {
26922
27583
  description: "List of nodes",
@@ -26925,11 +27586,11 @@ var kS = new $y(), AS = X({
26925
27586
  500: { description: "Server error" }
26926
27587
  }
26927
27588
  });
26928
- kS.openapi(MS, jS);
27589
+ AS.openapi(NS, MS);
26929
27590
  //#endregion
26930
27591
  //#region server/routes/public/tree.ts
26931
- var NS = new $y();
26932
- function PS(e, t) {
27592
+ var PS = new $y();
27593
+ function FS(e, t) {
26933
27594
  let n = /* @__PURE__ */ new Date();
26934
27595
  if (e && String(e).trim() !== "") {
26935
27596
  let t = new Date(e);
@@ -26941,22 +27602,22 @@ function PS(e, t) {
26941
27602
  }
26942
27603
  return !0;
26943
27604
  }
26944
- async function FS(e, t, n, r) {
27605
+ async function IS(e, t, n, r) {
26945
27606
  try {
26946
27607
  await e.set(t, n, r);
26947
27608
  } catch (e) {
26948
27609
  console.warn("[CMS Cache] Failed to write tree response to cache:", e);
26949
27610
  }
26950
27611
  }
26951
- var IS = X({ treeParam: J().openapi({ description: "The ID or key of the requested tree (e.g., \"main-nav\")" }) }), LS = X({
27612
+ var LS = X({ treeParam: J().openapi({ description: "The ID or key of the requested tree (e.g., \"main-nav\")" }) }), RS = X({
26952
27613
  channelId: J().optional().openapi({ description: "Channel ID to resolve context-aware routing" }),
26953
27614
  channel: J().optional().openapi({ description: "Legacy alias for channelId" }),
26954
27615
  lang: J().optional().openapi({ description: "Requested language code for tree nodes" }),
26955
27616
  preview: lv(["true", "false"]).optional().openapi({ description: "Set to true to retrieve unpublished draft data" })
26956
- }), RS = X({
27617
+ }), zS = X({
26957
27618
  error: J(),
26958
27619
  details: J().optional()
26959
- }).openapi("ErrorResponse"), zS = qv(() => X({
27620
+ }).openapi("ErrorResponse"), BS = qv(() => X({
26960
27621
  id: G_([J(), c_()]),
26961
27622
  treeNodeId: G_([J(), c_()]),
26962
27623
  parentId: G_([J(), c_()]).nullable(),
@@ -26969,40 +27630,40 @@ var IS = X({ treeParam: J().openapi({ description: "The ID or key of the request
26969
27630
  summary: J().optional(),
26970
27631
  url: J().optional(),
26971
27632
  target: J().optional(),
26972
- children: z_(zS).optional()
26973
- }).passthrough()).openapi("TreeItem"), BS = X({
27633
+ children: z_(BS).optional()
27634
+ }).passthrough()).openapi("TreeItem"), VS = X({
26974
27635
  treeId: G_([c_(), J()]),
26975
27636
  key: J(),
26976
27637
  channelId: J(),
26977
27638
  language: J().nullable(),
26978
27639
  label: J(),
26979
- items: z_(zS)
26980
- }).catchall(k_()).openapi("TreeResponse"), VS = eb({
27640
+ items: z_(BS)
27641
+ }).catchall(k_()).openapi("TreeResponse"), HS = eb({
26981
27642
  method: "get",
26982
27643
  path: "/{treeParam}",
26983
27644
  summary: "Fetch CMS Navigation Tree",
26984
27645
  description: "Retrieves a fully hydrated, recursive navigation tree structure. Uses $O(1)$ pre-computed routing table paths.",
26985
27646
  tags: ["Public Tree API"],
26986
27647
  request: {
26987
- params: IS,
26988
- query: LS
27648
+ params: LS,
27649
+ query: RS
26989
27650
  },
26990
27651
  responses: {
26991
27652
  200: {
26992
27653
  description: "Fully hydrated CMS Tree payload",
26993
- content: { "application/json": { schema: BS } }
27654
+ content: { "application/json": { schema: VS } }
26994
27655
  },
26995
27656
  404: {
26996
27657
  description: "Tree or Channel not found / inactive",
26997
- content: { "application/json": { schema: RS } }
27658
+ content: { "application/json": { schema: zS } }
26998
27659
  },
26999
27660
  500: {
27000
27661
  description: "Server error during hydration",
27001
- content: { "application/json": { schema: RS } }
27662
+ content: { "application/json": { schema: zS } }
27002
27663
  }
27003
27664
  }
27004
27665
  });
27005
- NS.openapi(VS, async (e) => {
27666
+ PS.openapi(HS, async (e) => {
27006
27667
  try {
27007
27668
  let t = e.get("db"), { treeParam: n } = e.req.valid("param"), r = e.req.valid("query"), i = r.channelId || r.channel || "default", a = r.lang, o = r.preview === "true", s = null, c = -1;
27008
27669
  if (i && i !== "default" && i !== "all") {
@@ -27065,7 +27726,7 @@ NS.openapi(VS, async (e) => {
27065
27726
  return (S.get(n) || []).map((e) => {
27066
27727
  let n = C.get(String(e.id)) || {}, r = {};
27067
27728
  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);
27068
- let i = !o && (e.status === "draft" || e.status === "new"), a = Number(e.isHidden) === 1 || i || n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", s = PS(e.startShowingAt === void 0 ? n.startShowingAt : e.startShowingAt, e.stopShowingAt === void 0 ? n.stopShowingAt : e.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, ""), l = !e.parentId || e.parentId === "null" || e.parentId === "", u = e.materializedPath || (l ? `/${c}` : `${t}/${c}`.replace(/\/+/g, "/")), d = e.language && String(e.language).trim() !== "" ? e.language.trim() : f, p = {
27729
+ let i = !o && (e.status === "draft" || e.status === "new"), a = Number(e.isHidden) === 1 || i || n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", s = FS(e.startShowingAt === void 0 ? n.startShowingAt : e.startShowingAt, e.stopShowingAt === void 0 ? n.stopShowingAt : e.stopShowingAt), c = (e.slug || "").replace(/^\/+|\/+$/g, ""), l = !e.parentId || e.parentId === "null" || e.parentId === "", u = e.materializedPath || (l ? `/${c}` : `${t}/${c}`.replace(/\/+/g, "/")), d = e.language && String(e.language).trim() !== "" ? e.language.trim() : f, p = {
27069
27730
  id: e.id,
27070
27731
  treeNodeId: e.id,
27071
27732
  parentId: e.parentId || null,
@@ -27091,7 +27752,7 @@ NS.openapi(VS, async (e) => {
27091
27752
  ...b,
27092
27753
  items: w(null)
27093
27754
  };
27094
- return !o && !h && (e.header("X-Cache", "MISS"), await FS(p, m, T, 300)), e.json(T, 200);
27755
+ return !o && !h && (e.header("X-Cache", "MISS"), await IS(p, m, T, 300)), e.json(T, 200);
27095
27756
  } catch (t) {
27096
27757
  return console.error("[CMS Public Tree API] Error:", t), e.json({
27097
27758
  error: "Failed to fetch public tree",
@@ -27101,19 +27762,19 @@ NS.openapi(VS, async (e) => {
27101
27762
  });
27102
27763
  //#endregion
27103
27764
  //#region server/routes/public/channel.ts
27104
- var HS = new $y();
27105
- function US(e) {
27765
+ var US = new $y();
27766
+ function WS(e) {
27106
27767
  let t = Number(e?.env?.CMS_CHANNEL_CACHE_TTL);
27107
27768
  return Number.isFinite(t) && t >= 60 ? Math.floor(t) : 300;
27108
27769
  }
27109
- async function WS(e, t, n, r) {
27770
+ async function GS(e, t, n, r) {
27110
27771
  try {
27111
27772
  await e.set(t, n, r);
27112
27773
  } catch (e) {
27113
27774
  console.warn("[CMS Cache] Failed to write channel response to cache:", e);
27114
27775
  }
27115
27776
  }
27116
- function GS(e, t) {
27777
+ function KS(e, t) {
27117
27778
  let n = {}, r = (e) => {
27118
27779
  if (!e || typeof e != "string") return;
27119
27780
  let n = t?.fieldSets?.[e] || t?.fieldsets?.[e] || t?.definitions?.[e] || t?.channels?.[e] || t?.[e];
@@ -27124,7 +27785,7 @@ function GS(e, t) {
27124
27785
  if (e?.fieldSets && Array.isArray(e.fieldSets) && e.fieldSets.forEach((e) => r(e)), e?.fields && i(e.fields), e?.tabs && typeof e.tabs == "object") for (let t of Object.values(e.tabs)) t?.fields && i(t.fields);
27125
27786
  return n;
27126
27787
  }
27127
- function KS(e, t = {}) {
27788
+ function qS(e, t = {}) {
27128
27789
  let n = {}, r = Object.keys(t).length > 0;
27129
27790
  for (let [i, a] of Object.entries(e)) {
27130
27791
  if (i.endsWith("_meta") || [
@@ -27143,14 +27804,14 @@ function KS(e, t = {}) {
27143
27804
  }
27144
27805
  return n;
27145
27806
  }
27146
- function qS(e) {
27147
- if (Array.isArray(e)) return e.map(qS);
27807
+ function JS(e) {
27808
+ if (Array.isArray(e)) return e.map(JS);
27148
27809
  if (!e || typeof e != "object") return e;
27149
27810
  if (typeof e.id == "string" && e.id.startsWith("ast_") && typeof e.url == "string") {
27150
27811
  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 ? {
27151
27812
  ...t,
27152
27813
  ...t.crops?.[r] || {}
27153
- } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, qS({
27814
+ } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, JS({
27154
27815
  ...n,
27155
27816
  title: n?.title ?? e.title ?? "",
27156
27817
  alt: n?.alt ?? e.alt ?? "",
@@ -27164,9 +27825,9 @@ function qS(e) {
27164
27825
  ...Object.keys(a).length > 0 ? { variants: a } : {}
27165
27826
  };
27166
27827
  }
27167
- return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, qS(t)]));
27828
+ return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, JS(t)]));
27168
27829
  }
27169
- async function JS(e, t, n) {
27830
+ async function YS(e, t, n) {
27170
27831
  let r = t.href.match(/^#node:(.+)$/), i = t.href.match(/^#asset:(.+)$/);
27171
27832
  if (i) {
27172
27833
  let t = i[1], n = await e.prepare("SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?").get(t);
@@ -27176,7 +27837,7 @@ async function JS(e, t, n) {
27176
27837
  let a = r[1];
27177
27838
  return (await e.prepare("SELECT path FROM node_routes WHERE nodeId = ? AND channelId = ? AND isCanonical = 1 LIMIT 1").get(Number(a), n))?.path || "#";
27178
27839
  }
27179
- async function YS(e, t, n) {
27840
+ async function XS(e, t, n) {
27180
27841
  if (typeof t == "string") {
27181
27842
  if (!t.includes("#node:") && !t.includes("data-node-id") && !t.includes("#asset:") && !t.includes("data-asset-id")) return t;
27182
27843
  let r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
@@ -27209,52 +27870,52 @@ async function YS(e, t, n) {
27209
27870
  return /href\s*=\s*["'][^"']*["']/i.test(d) ? d = d.replace(/href\s*=\s*["'][^"']*["']/i, `href="${u}"`) : d += ` href="${u}"`, `<a ${d}>`;
27210
27871
  });
27211
27872
  }
27212
- if (Array.isArray(t)) return Promise.all(t.map((t) => YS(e, t, n)));
27873
+ if (Array.isArray(t)) return Promise.all(t.map((t) => XS(e, t, n)));
27213
27874
  if (t && typeof t == "object") {
27214
27875
  if (typeof t.href == "string" && (t.href.startsWith("#node:") || t.href.startsWith("#asset:"))) {
27215
- let r = await JS(e, t, n), i = await Promise.all(Object.entries(t).filter(([e]) => e !== "href").map(async ([t, r]) => [t, await YS(e, r, n)]));
27876
+ let r = await YS(e, t, n), i = await Promise.all(Object.entries(t).filter(([e]) => e !== "href").map(async ([t, r]) => [t, await XS(e, r, n)]));
27216
27877
  return {
27217
27878
  ...Object.fromEntries(i),
27218
27879
  href: r
27219
27880
  };
27220
27881
  }
27221
- let r = await Promise.all(Object.entries(t).map(async ([t, r]) => [t, await YS(e, r, n)]));
27882
+ let r = await Promise.all(Object.entries(t).map(async ([t, r]) => [t, await XS(e, r, n)]));
27222
27883
  return Object.fromEntries(r);
27223
27884
  }
27224
27885
  return t;
27225
27886
  }
27226
- var XS = X({ channelParam: J().openapi({ description: "The ID or key (slug) of the requested channel" }) }), ZS = X({ preview: lv(["true", "false"]).optional().openapi({ description: "Set to true to retrieve unpublished draft data" }) }), QS = X({
27887
+ var ZS = X({ channelParam: J().openapi({ description: "The ID or key (slug) of the requested channel" }) }), QS = X({ preview: lv(["true", "false"]).optional().openapi({ description: "Set to true to retrieve unpublished draft data" }) }), $S = X({
27227
27888
  error: J(),
27228
27889
  details: J().optional()
27229
- }).openapi("ErrorResponse"), $S = X({
27890
+ }).openapi("ErrorResponse"), eC = X({
27230
27891
  id: G_([c_(), J()]),
27231
27892
  key: J()
27232
- }).catchall(k_()).openapi("ChannelResponse"), eC = eb({
27893
+ }).catchall(k_()).openapi("ChannelResponse"), tC = eb({
27233
27894
  method: "get",
27234
27895
  path: "/{channelParam}",
27235
27896
  summary: "Fetch CMS Channel Settings",
27236
27897
  description: "Retrieves the fully hydrated, public-facing settings and payload for a specific CMS channel.",
27237
27898
  tags: ["Public Channel API"],
27238
27899
  request: {
27239
- params: XS,
27240
- query: ZS
27900
+ params: ZS,
27901
+ query: QS
27241
27902
  },
27242
27903
  responses: {
27243
27904
  200: {
27244
27905
  description: "Fully hydrated CMS Channel payload",
27245
- content: { "application/json": { schema: $S } }
27906
+ content: { "application/json": { schema: eC } }
27246
27907
  },
27247
27908
  404: {
27248
27909
  description: "Channel not found or inactive",
27249
- content: { "application/json": { schema: QS } }
27910
+ content: { "application/json": { schema: $S } }
27250
27911
  },
27251
27912
  500: {
27252
27913
  description: "Server error during hydration",
27253
- content: { "application/json": { schema: QS } }
27914
+ content: { "application/json": { schema: $S } }
27254
27915
  }
27255
27916
  }
27256
27917
  });
27257
- HS.openapi(eC, async (e) => {
27918
+ US.openapi(tC, async (e) => {
27258
27919
  try {
27259
27920
  let t = e.get("db"), { channelParam: n } = e.req.valid("param"), { preview: r } = e.req.valid("query"), i = r === "true", a = e.req.header("x-bypass-cache") === "true", o = `channel:${n}:${i ? "preview" : "live"}`, s = $b(e);
27260
27921
  if (!i && !a) {
@@ -27265,23 +27926,23 @@ HS.openapi(eC, async (e) => {
27265
27926
  if (!c) return e.json({ error: `Channel '${n}' not found` }, 404);
27266
27927
  let l = c.status === "disabled" || c.status === "inactive" || c.isEnabled === 0 || c.isEnabled === !1;
27267
27928
  if (!i && l) return e.json({ error: `Channel '${c.key || n}' is currently inactive` }, 404);
27268
- let u = Number(c.id), d = e.env?.BUNDLED_DEFINITIONS, f = px(d), p = c.channelType || c.key || "website", m = GS(f.channels?.[p] || f.channels?.[c.key] || f.channels?.website || f.definitions?.["channel-base"] || {}, f), h = {}, g = i && c.draftDataJson || c.dataJson;
27929
+ let u = Number(c.id), d = e.env?.BUNDLED_DEFINITIONS, f = px(d), p = c.channelType || c.key || "website", m = KS(f.channels?.[p] || f.channels?.[c.key] || f.channels?.website || f.definitions?.["channel-base"] || {}, f), h = {}, g = i && c.draftDataJson || c.dataJson;
27269
27930
  if (g) try {
27270
27931
  h = typeof g == "string" ? JSON.parse(g) : g;
27271
27932
  } catch (e) {
27272
27933
  console.warn("[CMS Public Channel API] Failed to parse channel dataJson:", e);
27273
27934
  }
27274
- let _ = KS({
27935
+ let _ = qS({
27275
27936
  ...h,
27276
27937
  ...c
27277
27938
  }, m);
27278
- _ = await fx(t, _), _ = qS(_), _ = await YS(t, _, u);
27939
+ _ = await fx(t, _), _ = JS(_), _ = await XS(t, _, u);
27279
27940
  let v = {
27280
27941
  id: c.id,
27281
27942
  key: c.key,
27282
27943
  ..._
27283
27944
  };
27284
- return !i && !a && (e.header("X-Cache", "MISS"), await WS(s, o, v, US(e))), e.json(v, 200);
27945
+ return !i && !a && (e.header("X-Cache", "MISS"), await GS(s, o, v, WS(e))), e.json(v, 200);
27285
27946
  } catch (t) {
27286
27947
  return console.error("[CMS Public Channel API] Error:", t), e.json({
27287
27948
  error: "Failed to fetch public channel",
@@ -27291,8 +27952,8 @@ HS.openapi(eC, async (e) => {
27291
27952
  });
27292
27953
  //#endregion
27293
27954
  //#region server/routes/public/assets.ts
27294
- var tC = new $y();
27295
- function nC(e, t) {
27955
+ var nC = new $y();
27956
+ function rC(e, t) {
27296
27957
  if (t === "webp") return "image/webp";
27297
27958
  if (t === "avif") return "image/avif";
27298
27959
  if (t === "jpeg" || t === "jpg") return "image/jpeg";
@@ -27301,7 +27962,7 @@ function nC(e, t) {
27301
27962
  let n = e.toLowerCase();
27302
27963
  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" : "application/octet-stream";
27303
27964
  }
27304
- var rC = [
27965
+ var iC = [
27305
27966
  320,
27306
27967
  640,
27307
27968
  768,
@@ -27311,10 +27972,10 @@ var rC = [
27311
27972
  2560,
27312
27973
  3840
27313
27974
  ];
27314
- function iC(e) {
27315
- if (!(!e || isNaN(e) || e <= 0)) return rC.reduce((t, n) => Math.abs(n - e) < Math.abs(t - e) ? n : t);
27975
+ function aC(e) {
27976
+ if (!(!e || isNaN(e) || e <= 0)) return iC.reduce((t, n) => Math.abs(n - e) < Math.abs(t - e) ? n : t);
27316
27977
  }
27317
- var aC = eb({
27978
+ var oC = eb({
27318
27979
  method: "get",
27319
27980
  path: "/*",
27320
27981
  summary: "Serve & Optimize Media Assets",
@@ -27374,11 +28035,11 @@ var aC = eb({
27374
28035
  }
27375
28036
  }
27376
28037
  });
27377
- tC.openapi(aC, async (e) => {
28038
+ nC.openapi(oC, async (e) => {
27378
28039
  try {
27379
28040
  let t = e.req.path.replace(/^\/media\//, "").replace(/^\//, "");
27380
28041
  if (!t) return e.text("Asset key missing", 400);
27381
- let { w: n, h: r, q: i, f: a } = e.req.valid("query"), o = !!(n || r || i || a), s = iC(n ? parseInt(n, 10) : void 0), c = e.req.header("Accept") || "", l = "";
28042
+ let { w: n, h: r, q: i, f: a } = e.req.valid("query"), o = !!(n || r || i || a), s = aC(n ? parseInt(n, 10) : void 0), c = e.req.header("Accept") || "", l = "";
27382
28043
  if (o) {
27383
28044
  let e = !a || a === "auto";
27384
28045
  a === "avif" || e && c.includes("image/avif") ? l = "avif" : a === "webp" || e && c.includes("image/webp") ? l = "webp" : a === "jpeg" || a === "jpg" ? l = "jpeg" : a === "png" && (l = "png");
@@ -27397,7 +28058,7 @@ tC.openapi(aC, async (e) => {
27397
28058
  if (!h) return e.text(`Asset not found: ${t}`, 404);
27398
28059
  if (!o) {
27399
28060
  let n = e.body(h, 200, {
27400
- "Content-Type": nC(t),
28061
+ "Content-Type": rC(t),
27401
28062
  "Cache-Control": "public, max-age=31536000, immutable"
27402
28063
  });
27403
28064
  return u && f && e.executionCtx?.waitUntil && e.executionCtx.waitUntil(u.put(f, n.clone())), n;
@@ -27411,7 +28072,7 @@ tC.openapi(aC, async (e) => {
27411
28072
  key: t,
27412
28073
  env: e.env,
27413
28074
  req: e.req.raw
27414
- }), v = nC(t, l), y = e.body(_, 200, {
28075
+ }), v = rC(t, l), y = e.body(_, 200, {
27415
28076
  "Content-Type": v,
27416
28077
  "Cache-Control": "public, max-age=31536000, immutable"
27417
28078
  });
@@ -27422,8 +28083,8 @@ tC.openapi(aC, async (e) => {
27422
28083
  });
27423
28084
  //#endregion
27424
28085
  //#region server/routes/public/paths.ts
27425
- var oC = new $y();
27426
- function sC(e, t) {
28086
+ var sC = new $y();
28087
+ function cC(e, t) {
27427
28088
  let n = /* @__PURE__ */ new Date();
27428
28089
  if (e && String(e).trim() !== "") {
27429
28090
  let t = new Date(e);
@@ -27435,31 +28096,31 @@ function sC(e, t) {
27435
28096
  }
27436
28097
  return !0;
27437
28098
  }
27438
- var cC = X({
28099
+ var lC = X({
27439
28100
  channelId: J().optional().openapi({ description: "Optional channel ID/key to filter and resolve root paths for" }),
27440
28101
  channel: J().optional().openapi({ description: "Legacy alias for channelId" })
27441
- }), lC = z_(J()).openapi("PathsResponse"), uC = X({
28102
+ }), uC = z_(J()).openapi("PathsResponse"), dC = X({
27442
28103
  error: J(),
27443
28104
  details: J().optional()
27444
- }).openapi("ErrorResponse"), dC = eb({
28105
+ }).openapi("ErrorResponse"), fC = eb({
27445
28106
  method: "get",
27446
28107
  path: "/",
27447
28108
  summary: "Fetch All Public Paths",
27448
28109
  description: "Retrieves a deduplicated array of all active, published node paths leveraging the $O(1)$ node_routes table. Includes both tree-bound and standalone pages.",
27449
28110
  tags: ["Public Paths API"],
27450
- request: { query: cC },
28111
+ request: { query: lC },
27451
28112
  responses: {
27452
28113
  200: {
27453
28114
  description: "Array of valid public URL paths",
27454
- content: { "application/json": { schema: lC } }
28115
+ content: { "application/json": { schema: uC } }
27455
28116
  },
27456
28117
  500: {
27457
28118
  description: "Server error fetching paths",
27458
- content: { "application/json": { schema: uC } }
28119
+ content: { "application/json": { schema: dC } }
27459
28120
  }
27460
28121
  }
27461
28122
  });
27462
- oC.openapi(dC, async (e) => {
28123
+ sC.openapi(fC, async (e) => {
27463
28124
  try {
27464
28125
  let t = e.get("db"), n = e.req.valid("query"), r = n.channelId || n.channel, i = "", a = [];
27465
28126
  if (r && r !== "all") {
@@ -27480,7 +28141,7 @@ oC.openapi(dC, async (e) => {
27480
28141
  ${i}
27481
28142
  ORDER BY nr.path ASC
27482
28143
  `).all(...a), s = Array.isArray(o) ? o : o?.results || [], c = [];
27483
- for (let e of s) e.nodeType !== "external-link" && e.path && sC(e.startShowingAt, e.stopShowingAt) && c.push(e.path);
28144
+ for (let e of s) e.nodeType !== "external-link" && e.path && cC(e.startShowingAt, e.stopShowingAt) && c.push(e.path);
27484
28145
  let l = [...new Set(c)];
27485
28146
  return e.json(l, 200);
27486
28147
  } catch (t) {
@@ -27489,12 +28150,12 @@ oC.openapi(dC, async (e) => {
27489
28150
  });
27490
28151
  //#endregion
27491
28152
  //#region server/routes/public/taxonomies.ts
27492
- var fC = new $y();
27493
- function pC(e) {
28153
+ var pC = new $y();
28154
+ function mC(e) {
27494
28155
  let t = (e || "").trim().toLowerCase(), n = px()?.taxonomies || {};
27495
28156
  return n[t] ? t : n[`${t}s`] ? `${t}s` : t.endsWith("s") && n[t.slice(0, -1)] ? t.slice(0, -1) : t;
27496
28157
  }
27497
- var mC = X({
28158
+ var hC = X({
27498
28159
  id: c_(),
27499
28160
  taxonomy: J(),
27500
28161
  key: J(),
@@ -27504,14 +28165,14 @@ var mC = X({
27504
28165
  data: tv(k_()),
27505
28166
  createdAt: J(),
27506
28167
  updatedAt: J()
27507
- }), hC = X({
28168
+ }), gC = X({
27508
28169
  taxonomy: J(),
27509
- items: z_(mC),
28170
+ items: z_(hC),
27510
28171
  total: c_()
27511
- }).openapi("TaxonomyResponse"), gC = X({
28172
+ }).openapi("TaxonomyResponse"), _C = X({
27512
28173
  error: J(),
27513
28174
  details: J().optional()
27514
- }).openapi("ErrorResponse"), _C = eb({
28175
+ }).openapi("ErrorResponse"), vC = eb({
27515
28176
  method: "get",
27516
28177
  path: "/{taxonomy}",
27517
28178
  summary: "Fetch Public Taxonomy Terms",
@@ -27521,17 +28182,17 @@ var mC = X({
27521
28182
  responses: {
27522
28183
  200: {
27523
28184
  description: "List of taxonomy terms",
27524
- content: { "application/json": { schema: hC } }
28185
+ content: { "application/json": { schema: gC } }
27525
28186
  },
27526
28187
  500: {
27527
28188
  description: "Server error",
27528
- content: { "application/json": { schema: gC } }
28189
+ content: { "application/json": { schema: _C } }
27529
28190
  }
27530
28191
  }
27531
28192
  });
27532
- fC.openapi(_C, async (e) => {
28193
+ pC.openapi(vC, async (e) => {
27533
28194
  try {
27534
- let t = e.get("db"), n = $b(e), r = e.req.valid("param").taxonomy, i = pC(r), a = `taxonomy:public:${i}`, o = e.req.header("x-bypass-cache") === "true";
28195
+ let t = e.get("db"), n = $b(e), r = e.req.valid("param").taxonomy, i = mC(r), a = `taxonomy:public:${i}`, o = e.req.header("x-bypass-cache") === "true";
27535
28196
  if (!o) {
27536
28197
  let t = await n.get(a);
27537
28198
  if (t) return e.header("X-Cache", "HIT"), e.json(t);
@@ -27567,7 +28228,7 @@ fC.openapi(_C, async (e) => {
27567
28228
  });
27568
28229
  //#endregion
27569
28230
  //#region server/index.ts
27570
- var $ = new $y(), vC = !1;
28231
+ var $ = new $y(), yC = !1;
27571
28232
  $.use("*", t()), $.use("/media/*", t({
27572
28233
  origin: "*",
27573
28234
  allowMethods: [
@@ -27588,13 +28249,13 @@ $.use("*", t()), $.use("/media/*", t({
27588
28249
  let n = new URL(e.req.url), r = (e.req.header("host") || n.hostname).split(":")[0];
27589
28250
  e.set("currentDomain", r);
27590
28251
  let i = wb(e);
27591
- if (e.set("db", i), !vC) try {
27592
- await Mb(i, e.env?.BUNDLED_DEFINITIONS, e.env?.KAMA_EXTENSIONS), vC = !0;
28252
+ if (e.set("db", i), !yC) try {
28253
+ await Mb(i, e.env?.BUNDLED_DEFINITIONS, e.env?.KAMA_EXTENSIONS), yC = !0;
27593
28254
  } catch (e) {
27594
28255
  console.error("❌ [CMS Server] Failed to initialize system tables on cold start:", e);
27595
28256
  }
27596
28257
  await t();
27597
- }), $.route("/media", tC), $.use("/media/*", Pb()), $.get("/api/cms/ui-extensions", (e) => {
28258
+ }), $.route("/media", nC), $.use("/media/*", Pb()), $.get("/api/cms/ui-extensions", (e) => {
27598
28259
  let t = (e.env?.KAMA_EXTENSIONS || []).filter((e) => e.ui).map((e) => ({
27599
28260
  id: e.id,
27600
28261
  name: e.name || e.id,
@@ -27634,7 +28295,7 @@ $.use("*", t()), $.use("/media/*", t({
27634
28295
  }
27635
28296
  }
27636
28297
  return t();
27637
- }), $.route("/api/v1/node", lS), $.route("/api/v1/nodes", kS), $.route("/api/v1/tree", NS), $.route("/api/v1/channel", HS), $.route("/api/v1/all-paths", oC), $.route("/api/v1/taxonomies", fC), $.doc("/api/openapi.json", {
28298
+ }), $.route("/api/v1/node", uS), $.route("/api/v1/nodes", AS), $.route("/api/v1/tree", PS), $.route("/api/v1/channel", US), $.route("/api/v1/all-paths", sC), $.route("/api/v1/taxonomies", pC), $.doc("/api/openapi.json", {
27638
28299
  openapi: "3.0.0",
27639
28300
  info: {
27640
28301
  title: "KAMA Engine Public API",