@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
@@ -189,7 +189,7 @@ function w(e) {
189
189
  function T(e) {
190
190
  return Object.fromEntries(Object.entries(e).sort(([e], [t]) => e.localeCompare(t)));
191
191
  }
192
- var ee = m(), E = class {
192
+ var E = m(), D = class {
193
193
  static collectMetadata(e, t) {
194
194
  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 } : {});
195
195
  if (l(e, [
@@ -257,7 +257,7 @@ var ee = m(), E = class {
257
257
  return t ? void 0 : e;
258
258
  }
259
259
  static getMetadataFromInternalRegistry(e) {
260
- return ee.get(e);
260
+ return E.get(e);
261
261
  }
262
262
  static getMetadataFromRegistry(e) {
263
263
  let t = this.getMetadataFromInternalRegistry(e), n = e.meta();
@@ -266,45 +266,45 @@ var ee = m(), E = class {
266
266
  return Object.assign(Object.assign(Object.assign({ _internal: Object.assign(Object.assign({}, o ? { refId: o } : {}), r) }, i), c ? { description: c } : {}), l);
267
267
  }
268
268
  static setMetadataInRegistry(e, t) {
269
- ee.add(e, t);
269
+ E.add(e, t);
270
270
  }
271
271
  };
272
- function D(e, t) {
272
+ function O(e, t) {
273
273
  let n = e[t];
274
274
  typeof n == "function" && (e[t] = function(...e) {
275
- let t = n.apply(this, e), r = E.getMetadataFromRegistry(this);
276
- return r && E.setMetadataInRegistry(t, r), t;
275
+ let t = n.apply(this, e), r = D.getMetadataFromRegistry(this);
276
+ return r && D.setMetadataInRegistry(t, r), t;
277
277
  });
278
278
  }
279
- function te(e) {
279
+ function ee(e) {
280
280
  e.ZodType.prototype.openapi === void 0 && (e.ZodType.prototype.openapi = function(...e) {
281
- 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);
281
+ 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);
282
282
  function h(e) {
283
- E.setMetadataInRegistry(e, Object.assign(Object.assign({}, Object.keys(f).length > 0 ? { _internal: f } : void 0), p));
283
+ D.setMetadataInRegistry(e, Object.assign(Object.assign({}, Object.keys(f).length > 0 ? { _internal: f } : void 0), p));
284
284
  }
285
285
  if (h(m), l(m, "ZodLazy") && h(this), l(m, "ZodObject")) {
286
- let e = E.getMetadataFromRegistry(m), t = m.extend;
286
+ let e = D.getMetadataFromRegistry(m), t = m.extend;
287
287
  m.extend = function(...n) {
288
288
  let r = t.apply(m, n), i = e ?? {}, { _internal: a } = i, o = s(i, ["_internal"]);
289
- return E.setMetadataInRegistry(r, { _internal: { extendedFrom: a?.refId ? {
289
+ return D.setMetadataInRegistry(r, { _internal: { extendedFrom: a?.refId ? {
290
290
  refId: a.refId,
291
291
  schema: m
292
292
  } : a?.extendedFrom } }), r.openapi(o);
293
- }, D(m, "catchall");
293
+ }, O(m, "catchall");
294
294
  }
295
- D(m, "optional"), D(m, "nullable"), D(m, "default"), D(m, "transform"), D(m, "refine"), D(m, "length"), D(m, "min"), D(m, "max");
295
+ O(m, "optional"), O(m, "nullable"), O(m, "default"), O(m, "transform"), O(m, "refine"), O(m, "length"), O(m, "min"), O(m, "max");
296
296
  let g = m.meta;
297
297
  return m.meta = function(...e) {
298
298
  let t = g.apply(this, e);
299
299
  if (e[0]) {
300
- let n = E.getMetadataFromInternalRegistry(this);
301
- n && E.setMetadataInRegistry(t, Object.assign(Object.assign({}, n), e[0]));
300
+ let n = D.getMetadataFromInternalRegistry(this);
301
+ n && D.setMetadataInRegistry(t, Object.assign(Object.assign({}, n), e[0]));
302
302
  }
303
303
  return t;
304
304
  }, m;
305
305
  });
306
306
  }
307
- function O(e, t, n) {
307
+ function k(e, t, n) {
308
308
  return typeof e == "string" ? {
309
309
  refId: e,
310
310
  metadata: t,
@@ -315,10 +315,10 @@ function O(e, t, n) {
315
315
  options: t
316
316
  };
317
317
  }
318
- function k(e) {
319
- return b(E.getOpenApiMetadata(e) ?? {}, _);
318
+ function A(e) {
319
+ return b(D.getOpenApiMetadata(e) ?? {}, _);
320
320
  }
321
- var A = class {
321
+ var j = class {
322
322
  constructor(e) {
323
323
  this.parents = e, this._definitions = [];
324
324
  }
@@ -333,7 +333,7 @@ var A = class {
333
333
  }), n;
334
334
  }
335
335
  registerParameter(e, t) {
336
- 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 }) }));
336
+ 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 }) }));
337
337
  return this._definitions.push({
338
338
  type: "parameter",
339
339
  schema: i
@@ -365,15 +365,15 @@ var A = class {
365
365
  schemaWithRefId(e, t) {
366
366
  return t.openapi(e);
367
367
  }
368
- }, ne = class {
368
+ }, te = class {
369
369
  constructor(e) {
370
370
  this.message = e;
371
371
  }
372
- }, j = class extends ne {
372
+ }, ne = class extends te {
373
373
  constructor(e, t) {
374
374
  super(e), this.data = t;
375
375
  }
376
- }, re = class extends ne {
376
+ }, re = class extends te {
377
377
  constructor(e) {
378
378
  super(`Missing parameter data, please specify \`${e.missingField}\` and other OpenAPI parameter props using the \`param\` field of \`schema.openapi\``), this.data = e;
379
379
  }
@@ -385,7 +385,7 @@ function ie(e, t) {
385
385
  throw e instanceof re ? new re(Object.assign(Object.assign({}, e.data), t)) : e;
386
386
  }
387
387
  }
388
- var ae = class extends ne {
388
+ var ae = class extends te {
389
389
  constructor(e) {
390
390
  super("Unknown zod object type, please specify `type` and other OpenAPI props using `schema.openapi`."), this.data = e;
391
391
  }
@@ -413,10 +413,10 @@ var ae = class extends ne {
413
413
  } : (console.error("No discriminator found for discriminated union", e), { oneOf: o });
414
414
  }
415
415
  mapDiscriminator(e, t, n) {
416
- if (e.some((e) => E.getRefId(e) === void 0)) return;
416
+ if (e.some((e) => D.getRefId(e) === void 0)) return;
417
417
  let r = {};
418
418
  for (let i of e) {
419
- let e = E.getRefId(i), a = this.getDiscriminatorValues(i, t);
419
+ let e = D.getRefId(i), a = this.getDiscriminatorValues(i, t);
420
420
  for (let t of a) r[t] = n(e);
421
421
  }
422
422
  return {
@@ -446,7 +446,7 @@ function le(e) {
446
446
  var ue = class {
447
447
  transform(e, t, n) {
448
448
  let { type: r, values: i } = le(e._zod.def.entries);
449
- if (r === "mixed") throw new ne("Enum has mixed string and number values, please specify the OpenAPI type manually");
449
+ if (r === "mixed") throw new te("Enum has mixed string and number values, please specify the OpenAPI type manually");
450
450
  return Object.assign(Object.assign({}, n(r === "numeric" ? "integer" : "string")), { enum: t ? [...i, null] : i });
451
451
  }
452
452
  }, de = class {
@@ -473,7 +473,7 @@ var ue = class {
473
473
  }
474
474
  }, me = class {
475
475
  transform(e, t, n, r) {
476
- let i = E.getInternalMetadata(e)?.extendedFrom, a = this.requiredKeysOf(e), o = v(e.def.shape, r);
476
+ let i = D.getInternalMetadata(e)?.extendedFrom, a = this.requiredKeysOf(e), o = v(e.def.shape, r);
477
477
  if (!i) return Object.assign(Object.assign(Object.assign(Object.assign({}, n("object")), {
478
478
  properties: o,
479
479
  default: t
@@ -549,7 +549,7 @@ var ve = class {
549
549
  this.options = e;
550
550
  }
551
551
  transform(e, t, n) {
552
- let r = E.getInternalMetadata(e)?.unionPreferredType ?? this.options?.unionPreferredType ?? "anyOf", i = this.flattenUnionTypes(e).map((e) => n(this.unwrapNullable(e)));
552
+ let r = D.getInternalMetadata(e)?.unionPreferredType ?? this.options?.unionPreferredType ?? "anyOf", i = this.flattenUnionTypes(e).map((e) => n(this.unwrapNullable(e)));
553
553
  return { [r]: t(i) };
554
554
  }
555
555
  flattenUnionTypes(e) {
@@ -624,7 +624,7 @@ var ve = class {
624
624
  if (l(e, "ZodIntersection")) return this.intersectionTransformer.transform(e, t, (e) => this.versionSpecifics.mapNullableOfArray(e, t), n);
625
625
  if (l(e, "ZodRecord")) return this.recordTransformer.transform(e, (e) => this.versionSpecifics.mapNullableType(e, t), n);
626
626
  if (l(e, "ZodDate")) return this.dateTransformer.transform((e) => this.versionSpecifics.mapNullableType(e, t));
627
- let i = E.getRefId(e);
627
+ let i = D.getRefId(e);
628
628
  throw new ae({
629
629
  currentSchema: e.def,
630
630
  schemaName: i
@@ -692,13 +692,13 @@ var ve = class {
692
692
  }
693
693
  }
694
694
  generateParameterDefinition(e) {
695
- let t = E.getRefId(e), n = this.generateParameter(e);
695
+ let t = D.getRefId(e), n = this.generateParameter(e);
696
696
  return t && (this.paramRefs[t] = n), n;
697
697
  }
698
698
  getParameterRef(e, t) {
699
- let n = E.getOpenApiMetadata(e), r = E.getInternalMetadata(e), i = n?.param, a = r?.refId ? this.paramRefs[r.refId] : void 0;
699
+ let n = D.getOpenApiMetadata(e), r = D.getInternalMetadata(e), i = n?.param, a = r?.refId ? this.paramRefs[r.refId] : void 0;
700
700
  if (!(!r?.refId || !a)) {
701
- if (i && a.in !== i.in || t?.in && a.in !== t.in) throw new j(`Conflicting location for parameter ${a.name}`, {
701
+ if (i && a.in !== i.in || t?.in && a.in !== t.in) throw new ne(`Conflicting location for parameter ${a.name}`, {
702
702
  key: "in",
703
703
  values: x([
704
704
  a.in,
@@ -706,7 +706,7 @@ var ve = class {
706
706
  i?.in
707
707
  ])
708
708
  });
709
- if (i && a.name !== i.name || t?.name && a.name !== t?.name) throw new j("Conflicting names for parameter", {
709
+ if (i && a.name !== i.name || t?.name && a.name !== t?.name) throw new ne("Conflicting names for parameter", {
710
710
  key: "name",
711
711
  values: x([
712
712
  a.name,
@@ -718,22 +718,22 @@ var ve = class {
718
718
  }
719
719
  }
720
720
  generateInlineParameters(e, t) {
721
- let n = E.getOpenApiMetadata(e)?.param, r = this.getParameterRef(e, { in: t });
721
+ let n = D.getOpenApiMetadata(e)?.param, r = this.getParameterRef(e, { in: t });
722
722
  if (r) return [r];
723
723
  if (l(e, "ZodObject")) {
724
724
  let n = e.def.shape;
725
725
  return Object.entries(n).map(([e, n]) => {
726
- let r = E.getOpenApiMetadata(n), i = this.getParameterRef(n, {
726
+ let r = D.getOpenApiMetadata(n), i = this.getParameterRef(n, {
727
727
  in: t,
728
728
  name: e
729
729
  });
730
730
  if (i) return i;
731
731
  let a = r?.param;
732
- if (a?.name && a.name !== e) throw new j("Conflicting names for parameter", {
732
+ if (a?.name && a.name !== e) throw new ne("Conflicting names for parameter", {
733
733
  key: "name",
734
734
  values: [e, a.name]
735
735
  });
736
- if (a?.in && a.in !== t) throw new j(`Conflicting location for parameter ${a.name ?? e}`, {
736
+ if (a?.in && a.in !== t) throw new ne(`Conflicting location for parameter ${a.name ?? e}`, {
737
737
  key: "in",
738
738
  values: [t, a.in]
739
739
  });
@@ -743,21 +743,21 @@ var ve = class {
743
743
  });
744
744
  });
745
745
  }
746
- if (n?.in && n.in !== t) throw new j(`Conflicting location for parameter ${n.name}`, {
746
+ if (n?.in && n.in !== t) throw new ne(`Conflicting location for parameter ${n.name}`, {
747
747
  key: "in",
748
748
  values: [t, n.in]
749
749
  });
750
750
  return [this.generateParameter(e, { in: t })];
751
751
  }
752
752
  generateSimpleParameter(e, t) {
753
- let n = E.getParamMetadata(e)?.param, r = Object.assign(Object.assign({}, n), t), i = !f(e) && !d(e), a = this.generateSchemaWithRef(e);
753
+ let n = D.getParamMetadata(e)?.param, r = Object.assign(Object.assign({}, n), t), i = !f(e) && !d(e), a = this.generateSchemaWithRef(e);
754
754
  return Object.assign({
755
755
  schema: a,
756
756
  required: i
757
- }, Object.keys(r).length > 0 ? E.buildParameterMetadata(r) : {});
757
+ }, Object.keys(r).length > 0 ? D.buildParameterMetadata(r) : {});
758
758
  }
759
759
  generateParameter(e, t) {
760
- let n = E.getOpenApiMetadata(e)?.param, r = t?.name ?? n?.name, i = t?.in ?? n?.in;
760
+ let n = D.getOpenApiMetadata(e)?.param, r = t?.name ?? n?.name, i = t?.in ?? n?.in;
761
761
  if (!r) throw new re({ missingField: "name" });
762
762
  if (!i) throw new re({
763
763
  missingField: "in",
@@ -770,7 +770,7 @@ var ve = class {
770
770
  });
771
771
  }
772
772
  generateSchemaWithMetadata(e) {
773
- let t = E.unwrapChained(e), n = E.getOpenApiMetadata(e), r = E.getDefaultValue(e), i = E.getRefId(e);
773
+ let t = D.unwrapChained(e), n = D.getOpenApiMetadata(e), r = D.getDefaultValue(e), i = D.getRefId(e);
774
774
  if (i && typeof this.schemaRefs[i] == "object") return this.schemaRefs[i];
775
775
  if (i && this.schemaRefs[i] === "pending") {
776
776
  let t = { $ref: this.generateSchemaRef(i) };
@@ -778,12 +778,12 @@ var ve = class {
778
778
  }
779
779
  i && !this.schemaRefs[i] && (this.schemaRefs[i] = "pending");
780
780
  let a = n?.type ? { type: n.type } : this.toOpenAPISchema(t, d(e), r);
781
- return n ? E.applySchemaMetadata(a, n) : b(a, _);
781
+ return n ? D.applySchemaMetadata(a, n) : b(a, _);
782
782
  }
783
783
  constructReferencedOpenAPISchema(e) {
784
- let t = E.getOpenApiMetadata(e), n = E.unwrapChained(e), r = E.getDefaultValue(e), i = d(e);
784
+ let t = D.getOpenApiMetadata(e), n = D.unwrapChained(e), r = D.getDefaultValue(e), i = d(e);
785
785
  if (t?.type) return this.versionSpecifics.mapNullableType(t.type, i);
786
- let a = E.getRefId(e);
786
+ let a = D.getRefId(e);
787
787
  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));
788
788
  if (a && this.schemaRefs[a] === "pending") {
789
789
  let e = { $ref: this.generateSchemaRef(a) };
@@ -792,17 +792,17 @@ var ve = class {
792
792
  return a && !this.schemaRefs[a] && (this.schemaRefs[a] = "pending"), this.toOpenAPISchema(n, i, r);
793
793
  }
794
794
  generateSimpleSchema(e) {
795
- let t = E.getOpenApiMetadata(e), n = E.getRefId(e);
795
+ let t = D.getOpenApiMetadata(e), n = D.getRefId(e);
796
796
  if (!n || !this.schemaRefs[n]) return this.generateSchemaWithMetadata(e);
797
797
  let r = this.schemaRefs[n], i = { $ref: this.generateSchemaRef(n) };
798
798
  if (this.schemaRefs[n] === "pending") return this.versionSpecifics.mapNullableOfRef(i, d(e));
799
- let a = b(E.buildSchemaMetadata(t ?? {}), (e, t) => e === void 0 || S(e, r[t]));
799
+ let a = b(D.buildSchemaMetadata(t ?? {}), (e, t) => e === void 0 || S(e, r[t]));
800
800
  if (a.type) return { allOf: [i, a] };
801
- let o = b(this.constructReferencedOpenAPISchema(e), (e, t) => e === void 0 || S(e, r[t])), s = E.applySchemaMetadata(o, a);
801
+ let o = b(this.constructReferencedOpenAPISchema(e), (e, t) => e === void 0 || S(e, r[t])), s = D.applySchemaMetadata(o, a);
802
802
  return Object.keys(s).length > 0 ? { allOf: [i, s] } : i;
803
803
  }
804
804
  generateSchemaWithRef(e) {
805
- let t = E.getRefId(e);
805
+ let t = D.getRefId(e);
806
806
  return t && !this.schemaRefs[t] ? (this.schemaRefs[t] = this.generateSimpleSchema(e), { $ref: this.generateSchemaRef(t) }) : this.generateSimpleSchema(e);
807
807
  }
808
808
  generateSchemaRef(e) {
@@ -16403,7 +16403,7 @@ var $y = class t extends e {
16403
16403
  defaultHook;
16404
16404
  #e;
16405
16405
  constructor(e) {
16406
- super(e), this.openAPIRegistry = new A(), this.defaultHook = e?.defaultHook;
16406
+ super(e), this.openAPIRegistry = new j(), this.defaultHook = e?.defaultHook;
16407
16407
  }
16408
16408
  #t() {
16409
16409
  if (this.defaultHook) return this.defaultHook;
@@ -16518,8 +16518,8 @@ var $y = class t extends e {
16518
16518
  path: Me(r, n._basePath.replaceAll(/:([^\/]+)/g, "{$1}"), e.webhook.path)
16519
16519
  });
16520
16520
  return;
16521
- case "schema": return this.openAPIRegistry.register(k(e.schema)._internal?.refId, e.schema);
16522
- case "parameter": return this.openAPIRegistry.registerParameter(k(e.schema)._internal?.refId, e.schema);
16521
+ case "schema": return this.openAPIRegistry.register(A(e.schema)._internal?.refId, e.schema);
16522
+ case "parameter": return this.openAPIRegistry.registerParameter(A(e.schema)._internal?.refId, e.schema);
16523
16523
  default: throw Error(`Unknown registry type: ${e}`);
16524
16524
  }
16525
16525
  }), this) : this;
@@ -16543,7 +16543,7 @@ var $y = class t extends e {
16543
16543
  };
16544
16544
  return Object.defineProperty(t, "getRoutingPath", { enumerable: !1 });
16545
16545
  };
16546
- te(Xy);
16546
+ ee(Xy);
16547
16547
  function tb(e, t) {
16548
16548
  let n = {};
16549
16549
  return Object.keys(e.paths).forEach((r) => {
@@ -16928,6 +16928,17 @@ var Tb = /* @__PURE__ */ o({
16928
16928
  liveSync: !0,
16929
16929
  rules: {}
16930
16930
  },
16931
+ notInMenu: {
16932
+ type: "boolean",
16933
+ label: "Not in Menu",
16934
+ default: !1,
16935
+ public: !0,
16936
+ inTree: !0,
16937
+ variant: "danger",
16938
+ dbType: "integer",
16939
+ position: "sidebar",
16940
+ rules: {}
16941
+ },
16931
16942
  startShowingAt: {
16932
16943
  type: "datetime",
16933
16944
  label: "Start Showing At",
@@ -17000,6 +17011,17 @@ var Tb = /* @__PURE__ */ o({
17000
17011
  liveSync: !0,
17001
17012
  rules: {}
17002
17013
  },
17014
+ notInMenu: {
17015
+ type: "boolean",
17016
+ label: "Not in Menu",
17017
+ default: !1,
17018
+ public: !0,
17019
+ inTree: !0,
17020
+ variant: "danger",
17021
+ dbType: "integer",
17022
+ position: "sidebar",
17023
+ rules: {}
17024
+ },
17003
17025
  startShowingAt: {
17004
17026
  type: "datetime",
17005
17027
  label: "Start Showing At",
@@ -17061,6 +17083,21 @@ var Tb = /* @__PURE__ */ o({
17061
17083
  required: !0,
17062
17084
  rules: { required: !0 }
17063
17085
  },
17086
+ disableTitleInContent: {
17087
+ label: "Disable Title in Content",
17088
+ type: "boolean",
17089
+ dbType: "boolean",
17090
+ public: !0,
17091
+ rules: {}
17092
+ },
17093
+ menuTitle: {
17094
+ label: "Menu Title",
17095
+ type: "text",
17096
+ inTree: !0,
17097
+ public: !0,
17098
+ default: "",
17099
+ rules: {}
17100
+ },
17064
17101
  slug: {
17065
17102
  linkedTo: "title",
17066
17103
  rules: {}
@@ -17329,6 +17366,17 @@ var Tb = /* @__PURE__ */ o({
17329
17366
  liveSync: !0,
17330
17367
  rules: {}
17331
17368
  },
17369
+ notInMenu: {
17370
+ type: "boolean",
17371
+ label: "Not in Menu",
17372
+ default: !1,
17373
+ public: !0,
17374
+ inTree: !0,
17375
+ variant: "danger",
17376
+ dbType: "integer",
17377
+ position: "sidebar",
17378
+ rules: {}
17379
+ },
17332
17380
  startShowingAt: {
17333
17381
  type: "datetime",
17334
17382
  label: "Start Showing At",
@@ -17381,6 +17429,21 @@ var Tb = /* @__PURE__ */ o({
17381
17429
  required: !0,
17382
17430
  rules: { required: !0 }
17383
17431
  },
17432
+ disableTitleInContent: {
17433
+ label: "Disable Title in Content",
17434
+ type: "boolean",
17435
+ dbType: "boolean",
17436
+ public: !0,
17437
+ rules: {}
17438
+ },
17439
+ menuTitle: {
17440
+ label: "Menu Title",
17441
+ type: "text",
17442
+ inTree: !0,
17443
+ public: !0,
17444
+ default: "",
17445
+ rules: {}
17446
+ },
17384
17447
  slug: {
17385
17448
  linkedTo: "title",
17386
17449
  rules: {}
@@ -17634,6 +17697,17 @@ var Tb = /* @__PURE__ */ o({
17634
17697
  liveSync: !0,
17635
17698
  rules: {}
17636
17699
  },
17700
+ notInMenu: {
17701
+ type: "boolean",
17702
+ label: "Not in Menu",
17703
+ default: !1,
17704
+ public: !0,
17705
+ inTree: !0,
17706
+ variant: "danger",
17707
+ dbType: "integer",
17708
+ position: "sidebar",
17709
+ rules: {}
17710
+ },
17637
17711
  startShowingAt: {
17638
17712
  type: "datetime",
17639
17713
  label: "Start Showing At",
@@ -17705,6 +17779,21 @@ var Tb = /* @__PURE__ */ o({
17705
17779
  showAsEditorTitle: !0,
17706
17780
  rules: { required: !0 }
17707
17781
  },
17782
+ disableTitleInContent: {
17783
+ label: "Disable Title in Content",
17784
+ type: "boolean",
17785
+ dbType: "boolean",
17786
+ public: !0,
17787
+ rules: {}
17788
+ },
17789
+ menuTitle: {
17790
+ label: "Menu Title",
17791
+ type: "text",
17792
+ inTree: !0,
17793
+ public: !0,
17794
+ default: "",
17795
+ rules: {}
17796
+ },
17708
17797
  slug: {
17709
17798
  linkedTo: "title",
17710
17799
  rules: {}
@@ -17834,6 +17923,17 @@ var Tb = /* @__PURE__ */ o({
17834
17923
  liveSync: !0,
17835
17924
  rules: {}
17836
17925
  },
17926
+ notInMenu: {
17927
+ type: "boolean",
17928
+ label: "Not in Menu",
17929
+ default: !1,
17930
+ public: !0,
17931
+ inTree: !0,
17932
+ variant: "danger",
17933
+ dbType: "integer",
17934
+ position: "sidebar",
17935
+ rules: {}
17936
+ },
17837
17937
  startShowingAt: {
17838
17938
  type: "datetime",
17839
17939
  label: "Start Showing At",
@@ -17887,6 +17987,21 @@ var Tb = /* @__PURE__ */ o({
17887
17987
  showAsEditorTitle: !0,
17888
17988
  rules: { required: !0 }
17889
17989
  },
17990
+ disableTitleInContent: {
17991
+ label: "Disable Title in Content",
17992
+ type: "boolean",
17993
+ dbType: "boolean",
17994
+ public: !0,
17995
+ rules: {}
17996
+ },
17997
+ menuTitle: {
17998
+ label: "Menu Title",
17999
+ type: "text",
18000
+ inTree: !0,
18001
+ public: !0,
18002
+ default: "",
18003
+ rules: {}
18004
+ },
17890
18005
  slug: {
17891
18006
  linkedTo: "title",
17892
18007
  rules: {}
@@ -18002,6 +18117,17 @@ var Tb = /* @__PURE__ */ o({
18002
18117
  liveSync: !0,
18003
18118
  rules: {}
18004
18119
  },
18120
+ notInMenu: {
18121
+ type: "boolean",
18122
+ label: "Not in Menu",
18123
+ default: !1,
18124
+ public: !0,
18125
+ inTree: !0,
18126
+ variant: "danger",
18127
+ dbType: "integer",
18128
+ position: "sidebar",
18129
+ rules: {}
18130
+ },
18005
18131
  startShowingAt: {
18006
18132
  type: "datetime",
18007
18133
  label: "Start Showing At",
@@ -18058,6 +18184,21 @@ var Tb = /* @__PURE__ */ o({
18058
18184
  label: "Link Text",
18059
18185
  rules: {}
18060
18186
  },
18187
+ disableTitleInContent: {
18188
+ label: "Disable Title in Content",
18189
+ type: "boolean",
18190
+ dbType: "boolean",
18191
+ public: !0,
18192
+ rules: {}
18193
+ },
18194
+ menuTitle: {
18195
+ label: "Menu Title",
18196
+ type: "text",
18197
+ inTree: !0,
18198
+ public: !0,
18199
+ default: "",
18200
+ rules: {}
18201
+ },
18061
18202
  slug: {
18062
18203
  label: "Slug",
18063
18204
  linkedTo: "menuTitle, title",
@@ -18097,6 +18238,17 @@ var Tb = /* @__PURE__ */ o({
18097
18238
  liveSync: !0,
18098
18239
  rules: {}
18099
18240
  },
18241
+ notInMenu: {
18242
+ type: "boolean",
18243
+ label: "Not in Menu",
18244
+ default: !1,
18245
+ public: !0,
18246
+ inTree: !0,
18247
+ variant: "danger",
18248
+ dbType: "integer",
18249
+ position: "sidebar",
18250
+ rules: {}
18251
+ },
18100
18252
  startShowingAt: {
18101
18253
  type: "datetime",
18102
18254
  label: "Start Showing At",
@@ -18150,6 +18302,21 @@ var Tb = /* @__PURE__ */ o({
18150
18302
  label: "Link Text",
18151
18303
  rules: {}
18152
18304
  },
18305
+ disableTitleInContent: {
18306
+ label: "Disable Title in Content",
18307
+ type: "boolean",
18308
+ dbType: "boolean",
18309
+ public: !0,
18310
+ rules: {}
18311
+ },
18312
+ menuTitle: {
18313
+ label: "Menu Title",
18314
+ type: "text",
18315
+ inTree: !0,
18316
+ public: !0,
18317
+ default: "",
18318
+ rules: {}
18319
+ },
18153
18320
  slug: {
18154
18321
  label: "Slug",
18155
18322
  linkedTo: "menuTitle, title",
@@ -18184,6 +18351,17 @@ var Tb = /* @__PURE__ */ o({
18184
18351
  liveSync: !0,
18185
18352
  rules: {}
18186
18353
  },
18354
+ notInMenu: {
18355
+ type: "boolean",
18356
+ label: "Not in Menu",
18357
+ default: !1,
18358
+ public: !0,
18359
+ inTree: !0,
18360
+ variant: "danger",
18361
+ dbType: "integer",
18362
+ position: "sidebar",
18363
+ rules: {}
18364
+ },
18187
18365
  startShowingAt: {
18188
18366
  type: "datetime",
18189
18367
  label: "Start Showing At",
@@ -18247,15 +18425,33 @@ var Tb = /* @__PURE__ */ o({
18247
18425
  type: "text",
18248
18426
  dbType: "text",
18249
18427
  public: !0,
18428
+ inTree: !0,
18250
18429
  rules: { required: !0 },
18251
18430
  required: !0
18252
18431
  },
18432
+ disableTitleInContent: {
18433
+ label: "Disable Title in Content",
18434
+ type: "boolean",
18435
+ dbType: "boolean",
18436
+ public: !0,
18437
+ rules: {}
18438
+ },
18439
+ menuTitle: {
18440
+ label: "Menu Title",
18441
+ type: "text",
18442
+ inTree: !0,
18443
+ public: !0,
18444
+ default: "",
18445
+ rules: {},
18446
+ dbType: "text"
18447
+ },
18253
18448
  slug: {
18254
18449
  label: "URL Slug",
18255
18450
  type: "slug",
18256
- linkedTo: "title",
18451
+ linkedTo: "menuTitle,title",
18257
18452
  dbType: "text",
18258
18453
  public: !0,
18454
+ inTree: !0,
18259
18455
  index: !0,
18260
18456
  rules: {
18261
18457
  required: !0,
@@ -18264,13 +18460,6 @@ var Tb = /* @__PURE__ */ o({
18264
18460
  customMessage: "Slug can only contain lowercase letters, numbers, hyphens, and underscores."
18265
18461
  },
18266
18462
  required: !0
18267
- },
18268
- menuTitle: {
18269
- label: "Menu Title",
18270
- type: "text",
18271
- dbType: "text",
18272
- public: !0,
18273
- rules: {}
18274
18463
  }
18275
18464
  }
18276
18465
  },
@@ -18516,6 +18705,17 @@ var Tb = /* @__PURE__ */ o({
18516
18705
  liveSync: !0,
18517
18706
  rules: {}
18518
18707
  },
18708
+ notInMenu: {
18709
+ type: "boolean",
18710
+ label: "Not in Menu",
18711
+ default: !1,
18712
+ public: !0,
18713
+ inTree: !0,
18714
+ variant: "danger",
18715
+ dbType: "integer",
18716
+ position: "sidebar",
18717
+ rules: {}
18718
+ },
18519
18719
  startShowingAt: {
18520
18720
  type: "datetime",
18521
18721
  label: "Start Showing At",
@@ -18567,15 +18767,33 @@ var Tb = /* @__PURE__ */ o({
18567
18767
  type: "text",
18568
18768
  dbType: "text",
18569
18769
  public: !0,
18770
+ inTree: !0,
18570
18771
  rules: { required: !0 },
18571
18772
  required: !0
18572
18773
  },
18774
+ disableTitleInContent: {
18775
+ label: "Disable Title in Content",
18776
+ type: "boolean",
18777
+ dbType: "boolean",
18778
+ public: !0,
18779
+ rules: {}
18780
+ },
18781
+ menuTitle: {
18782
+ label: "Menu Title",
18783
+ type: "text",
18784
+ inTree: !0,
18785
+ public: !0,
18786
+ default: "",
18787
+ rules: {},
18788
+ dbType: "text"
18789
+ },
18573
18790
  slug: {
18574
18791
  label: "URL Slug",
18575
18792
  type: "slug",
18576
- linkedTo: "title",
18793
+ linkedTo: "menuTitle,title",
18577
18794
  dbType: "text",
18578
18795
  public: !0,
18796
+ inTree: !0,
18579
18797
  index: !0,
18580
18798
  rules: {
18581
18799
  required: !0,
@@ -18585,13 +18803,6 @@ var Tb = /* @__PURE__ */ o({
18585
18803
  },
18586
18804
  required: !0
18587
18805
  },
18588
- menuTitle: {
18589
- label: "Menu Title",
18590
- type: "text",
18591
- dbType: "text",
18592
- public: !0,
18593
- rules: {}
18594
- },
18595
18806
  css: {
18596
18807
  label: "CSS",
18597
18808
  type: "textarea",
@@ -18813,6 +19024,17 @@ var Tb = /* @__PURE__ */ o({
18813
19024
  liveSync: !0,
18814
19025
  rules: {}
18815
19026
  },
19027
+ notInMenu: {
19028
+ type: "boolean",
19029
+ label: "Not in Menu",
19030
+ default: !1,
19031
+ public: !0,
19032
+ inTree: !0,
19033
+ variant: "danger",
19034
+ dbType: "integer",
19035
+ position: "sidebar",
19036
+ rules: {}
19037
+ },
18816
19038
  startShowingAt: {
18817
19039
  type: "datetime",
18818
19040
  label: "Start Showing At",
@@ -18875,15 +19097,33 @@ var Tb = /* @__PURE__ */ o({
18875
19097
  type: "text",
18876
19098
  dbType: "text",
18877
19099
  public: !0,
19100
+ inTree: !0,
18878
19101
  rules: { required: !0 },
18879
19102
  required: !0
18880
19103
  },
19104
+ disableTitleInContent: {
19105
+ label: "Disable Title in Content",
19106
+ type: "boolean",
19107
+ dbType: "boolean",
19108
+ public: !0,
19109
+ rules: {}
19110
+ },
19111
+ menuTitle: {
19112
+ label: "Menu Title",
19113
+ type: "text",
19114
+ inTree: !0,
19115
+ public: !0,
19116
+ default: "",
19117
+ rules: {},
19118
+ dbType: "text"
19119
+ },
18881
19120
  slug: {
18882
19121
  label: "URL Slug",
18883
19122
  type: "slug",
18884
- linkedTo: "title",
19123
+ linkedTo: "menuTitle,title",
18885
19124
  dbType: "text",
18886
19125
  public: !0,
19126
+ inTree: !0,
18887
19127
  index: !0,
18888
19128
  rules: {
18889
19129
  required: !0,
@@ -18926,13 +19166,6 @@ var Tb = /* @__PURE__ */ o({
18926
19166
  value: "inherit"
18927
19167
  }],
18928
19168
  rules: {}
18929
- },
18930
- menuTitle: {
18931
- label: "Menu Title",
18932
- type: "text",
18933
- dbType: "text",
18934
- public: !0,
18935
- rules: {}
18936
19169
  }
18937
19170
  }
18938
19171
  },
@@ -19152,6 +19385,17 @@ var Tb = /* @__PURE__ */ o({
19152
19385
  liveSync: !0,
19153
19386
  rules: {}
19154
19387
  },
19388
+ notInMenu: {
19389
+ type: "boolean",
19390
+ label: "Not in Menu",
19391
+ default: !1,
19392
+ public: !0,
19393
+ inTree: !0,
19394
+ variant: "danger",
19395
+ dbType: "integer",
19396
+ position: "sidebar",
19397
+ rules: {}
19398
+ },
19155
19399
  startShowingAt: {
19156
19400
  type: "datetime",
19157
19401
  label: "Start Showing At",
@@ -19203,15 +19447,33 @@ var Tb = /* @__PURE__ */ o({
19203
19447
  type: "text",
19204
19448
  dbType: "text",
19205
19449
  public: !0,
19450
+ inTree: !0,
19206
19451
  rules: { required: !0 },
19207
19452
  required: !0
19208
19453
  },
19454
+ disableTitleInContent: {
19455
+ label: "Disable Title in Content",
19456
+ type: "boolean",
19457
+ dbType: "boolean",
19458
+ public: !0,
19459
+ rules: {}
19460
+ },
19461
+ menuTitle: {
19462
+ label: "Menu Title",
19463
+ type: "text",
19464
+ inTree: !0,
19465
+ public: !0,
19466
+ default: "",
19467
+ rules: {},
19468
+ dbType: "text"
19469
+ },
19209
19470
  slug: {
19210
19471
  label: "URL Slug",
19211
19472
  type: "slug",
19212
- linkedTo: "title",
19473
+ linkedTo: "menuTitle,title",
19213
19474
  dbType: "text",
19214
19475
  public: !0,
19476
+ inTree: !0,
19215
19477
  index: !0,
19216
19478
  rules: {
19217
19479
  required: !0,
@@ -19255,13 +19517,6 @@ var Tb = /* @__PURE__ */ o({
19255
19517
  }],
19256
19518
  rules: {}
19257
19519
  },
19258
- menuTitle: {
19259
- label: "Menu Title",
19260
- type: "text",
19261
- dbType: "text",
19262
- public: !0,
19263
- rules: {}
19264
- },
19265
19520
  schemaType: {
19266
19521
  type: "select",
19267
19522
  label: "Schema.org Entity Type",
@@ -19465,6 +19720,17 @@ var Tb = /* @__PURE__ */ o({
19465
19720
  liveSync: !0,
19466
19721
  rules: {}
19467
19722
  },
19723
+ notInMenu: {
19724
+ type: "boolean",
19725
+ label: "Not in Menu",
19726
+ default: !1,
19727
+ public: !0,
19728
+ inTree: !0,
19729
+ variant: "danger",
19730
+ dbType: "integer",
19731
+ position: "sidebar",
19732
+ rules: {}
19733
+ },
19468
19734
  startShowingAt: {
19469
19735
  type: "datetime",
19470
19736
  label: "Start Showing At",
@@ -19541,6 +19807,17 @@ var Tb = /* @__PURE__ */ o({
19541
19807
  liveSync: !0,
19542
19808
  rules: {}
19543
19809
  },
19810
+ notInMenu: {
19811
+ type: "boolean",
19812
+ label: "Not in Menu",
19813
+ default: !1,
19814
+ public: !0,
19815
+ inTree: !0,
19816
+ variant: "danger",
19817
+ dbType: "integer",
19818
+ position: "sidebar",
19819
+ rules: {}
19820
+ },
19544
19821
  startShowingAt: {
19545
19822
  type: "datetime",
19546
19823
  label: "Start Showing At",
@@ -19608,6 +19885,17 @@ var Tb = /* @__PURE__ */ o({
19608
19885
  liveSync: !0,
19609
19886
  rules: {}
19610
19887
  },
19888
+ notInMenu: {
19889
+ type: "boolean",
19890
+ label: "Not in Menu",
19891
+ default: !1,
19892
+ public: !0,
19893
+ inTree: !0,
19894
+ variant: "danger",
19895
+ dbType: "integer",
19896
+ position: "sidebar",
19897
+ rules: {}
19898
+ },
19611
19899
  startShowingAt: {
19612
19900
  type: "datetime",
19613
19901
  label: "Start Showing At",
@@ -19687,6 +19975,21 @@ var Tb = /* @__PURE__ */ o({
19687
19975
  public: !0,
19688
19976
  rules: { required: !0 }
19689
19977
  },
19978
+ disableTitleInContent: {
19979
+ label: "Disable Title in Content",
19980
+ type: "boolean",
19981
+ dbType: "boolean",
19982
+ public: !0,
19983
+ rules: {}
19984
+ },
19985
+ menuTitle: {
19986
+ label: "Menu Title",
19987
+ type: "text",
19988
+ inTree: !0,
19989
+ public: !0,
19990
+ default: "",
19991
+ rules: {}
19992
+ },
19690
19993
  slug: {
19691
19994
  linkedTo: "title",
19692
19995
  rules: {}
@@ -19777,6 +20080,17 @@ var Tb = /* @__PURE__ */ o({
19777
20080
  liveSync: !0,
19778
20081
  rules: {}
19779
20082
  },
20083
+ notInMenu: {
20084
+ type: "boolean",
20085
+ label: "Not in Menu",
20086
+ default: !1,
20087
+ public: !0,
20088
+ inTree: !0,
20089
+ variant: "danger",
20090
+ dbType: "integer",
20091
+ position: "sidebar",
20092
+ rules: {}
20093
+ },
19780
20094
  startShowingAt: {
19781
20095
  type: "datetime",
19782
20096
  label: "Start Showing At",
@@ -19829,6 +20143,21 @@ var Tb = /* @__PURE__ */ o({
19829
20143
  public: !0,
19830
20144
  rules: { required: !0 }
19831
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
+ },
19832
20161
  slug: {
19833
20162
  linkedTo: "title",
19834
20163
  rules: {}
@@ -19905,6 +20234,17 @@ var Tb = /* @__PURE__ */ o({
19905
20234
  liveSync: !0,
19906
20235
  rules: {}
19907
20236
  },
20237
+ notInMenu: {
20238
+ type: "boolean",
20239
+ label: "Not in Menu",
20240
+ default: !1,
20241
+ public: !0,
20242
+ inTree: !0,
20243
+ variant: "danger",
20244
+ dbType: "integer",
20245
+ position: "sidebar",
20246
+ rules: {}
20247
+ },
19908
20248
  startShowingAt: {
19909
20249
  type: "datetime",
19910
20250
  label: "Start Showing At",
@@ -19985,6 +20325,17 @@ var Tb = /* @__PURE__ */ o({
19985
20325
  liveSync: !0,
19986
20326
  rules: {}
19987
20327
  },
20328
+ notInMenu: {
20329
+ type: "boolean",
20330
+ label: "Not in Menu",
20331
+ default: !1,
20332
+ public: !0,
20333
+ inTree: !0,
20334
+ variant: "danger",
20335
+ dbType: "integer",
20336
+ position: "sidebar",
20337
+ rules: {}
20338
+ },
19988
20339
  startShowingAt: {
19989
20340
  type: "datetime",
19990
20341
  label: "Start Showing At",
@@ -20054,6 +20405,17 @@ var Tb = /* @__PURE__ */ o({
20054
20405
  liveSync: !0,
20055
20406
  rules: {}
20056
20407
  },
20408
+ notInMenu: {
20409
+ type: "boolean",
20410
+ label: "Not in Menu",
20411
+ default: !1,
20412
+ public: !0,
20413
+ inTree: !0,
20414
+ variant: "danger",
20415
+ dbType: "integer",
20416
+ position: "sidebar",
20417
+ rules: {}
20418
+ },
20057
20419
  startShowingAt: {
20058
20420
  type: "datetime",
20059
20421
  label: "Start Showing At",
@@ -20195,6 +20557,17 @@ var Tb = /* @__PURE__ */ o({
20195
20557
  liveSync: !0,
20196
20558
  rules: {}
20197
20559
  },
20560
+ notInMenu: {
20561
+ type: "boolean",
20562
+ label: "Not in Menu",
20563
+ default: !1,
20564
+ public: !0,
20565
+ inTree: !0,
20566
+ variant: "danger",
20567
+ dbType: "integer",
20568
+ position: "sidebar",
20569
+ rules: {}
20570
+ },
20198
20571
  startShowingAt: {
20199
20572
  type: "datetime",
20200
20573
  label: "Start Showing At",
@@ -20321,6 +20694,17 @@ var Tb = /* @__PURE__ */ o({
20321
20694
  liveSync: !0,
20322
20695
  rules: {}
20323
20696
  },
20697
+ notInMenu: {
20698
+ type: "boolean",
20699
+ label: "Not in Menu",
20700
+ default: !1,
20701
+ public: !0,
20702
+ inTree: !0,
20703
+ variant: "danger",
20704
+ dbType: "integer",
20705
+ position: "sidebar",
20706
+ rules: {}
20707
+ },
20324
20708
  startShowingAt: {
20325
20709
  type: "datetime",
20326
20710
  label: "Start Showing At",
@@ -20479,6 +20863,17 @@ var Tb = /* @__PURE__ */ o({
20479
20863
  liveSync: !0,
20480
20864
  rules: {}
20481
20865
  },
20866
+ notInMenu: {
20867
+ type: "boolean",
20868
+ label: "Not in Menu",
20869
+ default: !1,
20870
+ public: !0,
20871
+ inTree: !0,
20872
+ variant: "danger",
20873
+ dbType: "integer",
20874
+ position: "sidebar",
20875
+ rules: {}
20876
+ },
20482
20877
  startShowingAt: {
20483
20878
  type: "datetime",
20484
20879
  label: "Start Showing At",
@@ -20639,6 +21034,36 @@ var Tb = /* @__PURE__ */ o({
20639
21034
  isHierarchical: !1,
20640
21035
  tabs: {}
20641
21036
  },
21037
+ "media-tag": {
21038
+ id: "media-tag",
21039
+ label: "Media Tag",
21040
+ hierarchical: !1,
21041
+ fields: {
21042
+ label: {
21043
+ type: "text",
21044
+ label: "Label",
21045
+ required: !0,
21046
+ rules: { required: !0 }
21047
+ },
21048
+ slug: {
21049
+ linkedTo: "label",
21050
+ rules: {}
21051
+ },
21052
+ iconName: {
21053
+ label: "Icon",
21054
+ type: "icon",
21055
+ dbType: "text",
21056
+ packages: [
21057
+ "heroicons",
21058
+ "lucide",
21059
+ "mdi"
21060
+ ],
21061
+ rules: {}
21062
+ }
21063
+ },
21064
+ isHierarchical: !1,
21065
+ tabs: {}
21066
+ },
20642
21067
  tags: {
20643
21068
  id: "tags",
20644
21069
  label: "Tag",
@@ -20726,6 +21151,16 @@ var Tb = /* @__PURE__ */ o({
20726
21151
  position: "sidebar",
20727
21152
  liveSync: !0
20728
21153
  },
21154
+ notInMenu: {
21155
+ type: "boolean",
21156
+ label: "Not in Menu",
21157
+ default: !1,
21158
+ public: !0,
21159
+ inTree: !0,
21160
+ variant: "danger",
21161
+ dbType: "integer",
21162
+ position: "sidebar"
21163
+ },
20729
21164
  startShowingAt: {
20730
21165
  type: "datetime",
20731
21166
  label: "Start Showing At",
@@ -20769,6 +21204,16 @@ var Tb = /* @__PURE__ */ o({
20769
21204
  position: "sidebar",
20770
21205
  liveSync: !0
20771
21206
  },
21207
+ notInMenu: {
21208
+ type: "boolean",
21209
+ label: "Not in Menu",
21210
+ default: !1,
21211
+ public: !0,
21212
+ inTree: !0,
21213
+ variant: "danger",
21214
+ dbType: "integer",
21215
+ position: "sidebar"
21216
+ },
20772
21217
  startShowingAt: {
20773
21218
  type: "datetime",
20774
21219
  label: "Start Showing At",
@@ -20820,6 +21265,16 @@ var Tb = /* @__PURE__ */ o({
20820
21265
  position: "sidebar",
20821
21266
  liveSync: !0
20822
21267
  },
21268
+ notInMenu: {
21269
+ type: "boolean",
21270
+ label: "Not in Menu",
21271
+ default: !1,
21272
+ public: !0,
21273
+ inTree: !0,
21274
+ variant: "danger",
21275
+ dbType: "integer",
21276
+ position: "sidebar"
21277
+ },
20823
21278
  startShowingAt: {
20824
21279
  type: "datetime",
20825
21280
  label: "Start Showing At",
@@ -20883,6 +21338,16 @@ var Tb = /* @__PURE__ */ o({
20883
21338
  position: "sidebar",
20884
21339
  liveSync: !0
20885
21340
  },
21341
+ notInMenu: {
21342
+ type: "boolean",
21343
+ label: "Not in Menu",
21344
+ default: !1,
21345
+ public: !0,
21346
+ inTree: !0,
21347
+ variant: "danger",
21348
+ dbType: "integer",
21349
+ position: "sidebar"
21350
+ },
20886
21351
  startShowingAt: {
20887
21352
  type: "datetime",
20888
21353
  label: "Start Showing At",
@@ -20926,6 +21391,16 @@ var Tb = /* @__PURE__ */ o({
20926
21391
  position: "sidebar",
20927
21392
  liveSync: !0
20928
21393
  },
21394
+ notInMenu: {
21395
+ type: "boolean",
21396
+ label: "Not in Menu",
21397
+ default: !1,
21398
+ public: !0,
21399
+ inTree: !0,
21400
+ variant: "danger",
21401
+ dbType: "integer",
21402
+ position: "sidebar"
21403
+ },
20929
21404
  startShowingAt: {
20930
21405
  type: "datetime",
20931
21406
  label: "Start Showing At",
@@ -20944,6 +21419,60 @@ var Tb = /* @__PURE__ */ o({
20944
21419
  } },
20945
21420
  category: "Content"
20946
21421
  },
21422
+ "image-gallery": {
21423
+ id: "image-gallery",
21424
+ label: "Image Gallery",
21425
+ group: "Media",
21426
+ fields: {
21427
+ columns: {
21428
+ label: "Column Count",
21429
+ type: "select",
21430
+ default: "2",
21431
+ public: !0,
21432
+ options: [
21433
+ {
21434
+ label: "1 Column (Full Width)",
21435
+ value: "1"
21436
+ },
21437
+ {
21438
+ label: "2 Columns",
21439
+ value: "2"
21440
+ },
21441
+ {
21442
+ label: "3 Columns",
21443
+ value: "3"
21444
+ },
21445
+ {
21446
+ label: "4 Columns",
21447
+ value: "4"
21448
+ },
21449
+ {
21450
+ label: "6 Columns",
21451
+ value: "6"
21452
+ }
21453
+ ],
21454
+ rules: {}
21455
+ },
21456
+ crop: {
21457
+ label: "Crop Ratio",
21458
+ rules: {}
21459
+ },
21460
+ images: {
21461
+ label: "Gallery Images",
21462
+ type: "image",
21463
+ multiple: !0,
21464
+ maxSizeMB: 20,
21465
+ allowedTypes: ["image/*"],
21466
+ public: !0,
21467
+ crops: { standard: {
21468
+ label: "Standard Portrait (4:3)",
21469
+ aspectRatio: 1.8
21470
+ } },
21471
+ rules: {}
21472
+ }
21473
+ },
21474
+ category: "Content"
21475
+ },
20947
21476
  image_card: {
20948
21477
  id: "image_card",
20949
21478
  label: "Image Card",
@@ -21019,6 +21548,16 @@ var Tb = /* @__PURE__ */ o({
21019
21548
  position: "sidebar",
21020
21549
  liveSync: !0
21021
21550
  },
21551
+ notInMenu: {
21552
+ type: "boolean",
21553
+ label: "Not in Menu",
21554
+ default: !1,
21555
+ public: !0,
21556
+ inTree: !0,
21557
+ variant: "danger",
21558
+ dbType: "integer",
21559
+ position: "sidebar"
21560
+ },
21022
21561
  startShowingAt: {
21023
21562
  type: "datetime",
21024
21563
  label: "Start Showing At",
@@ -21140,6 +21679,16 @@ var Tb = /* @__PURE__ */ o({
21140
21679
  position: "sidebar",
21141
21680
  liveSync: !0
21142
21681
  },
21682
+ notInMenu: {
21683
+ type: "boolean",
21684
+ label: "Not in Menu",
21685
+ default: !1,
21686
+ public: !0,
21687
+ inTree: !0,
21688
+ variant: "danger",
21689
+ dbType: "integer",
21690
+ position: "sidebar"
21691
+ },
21143
21692
  startShowingAt: {
21144
21693
  type: "datetime",
21145
21694
  label: "Start Showing At",
@@ -21201,6 +21750,16 @@ var Tb = /* @__PURE__ */ o({
21201
21750
  position: "sidebar",
21202
21751
  liveSync: !0
21203
21752
  },
21753
+ notInMenu: {
21754
+ type: "boolean",
21755
+ label: "Not in Menu",
21756
+ default: !1,
21757
+ public: !0,
21758
+ inTree: !0,
21759
+ variant: "danger",
21760
+ dbType: "integer",
21761
+ position: "sidebar"
21762
+ },
21204
21763
  startShowingAt: {
21205
21764
  type: "datetime",
21206
21765
  label: "Start Showing At",
@@ -21246,6 +21805,16 @@ var Tb = /* @__PURE__ */ o({
21246
21805
  position: "sidebar",
21247
21806
  liveSync: !0
21248
21807
  },
21808
+ notInMenu: {
21809
+ type: "boolean",
21810
+ label: "Not in Menu",
21811
+ default: !1,
21812
+ public: !0,
21813
+ inTree: !0,
21814
+ variant: "danger",
21815
+ dbType: "integer",
21816
+ position: "sidebar"
21817
+ },
21249
21818
  startShowingAt: {
21250
21819
  type: "datetime",
21251
21820
  label: "Start Showing At",
@@ -21264,6 +21833,17 @@ var Tb = /* @__PURE__ */ o({
21264
21833
  },
21265
21834
  category: "Content"
21266
21835
  },
21836
+ youtube: {
21837
+ id: "youtube",
21838
+ label: "YouTube",
21839
+ group: "Media",
21840
+ fields: { youtubeUrl: {
21841
+ label: "Youtube URL",
21842
+ type: "text",
21843
+ rules: {}
21844
+ } },
21845
+ category: "Content"
21846
+ },
21267
21847
  form: {
21268
21848
  id: "form",
21269
21849
  label: "Dynamic Form",
@@ -21294,6 +21874,17 @@ var Tb = /* @__PURE__ */ o({
21294
21874
  liveSync: !0,
21295
21875
  rules: {}
21296
21876
  },
21877
+ notInMenu: {
21878
+ type: "boolean",
21879
+ label: "Not in Menu",
21880
+ default: !1,
21881
+ public: !0,
21882
+ inTree: !0,
21883
+ variant: "danger",
21884
+ dbType: "integer",
21885
+ position: "sidebar",
21886
+ rules: {}
21887
+ },
21297
21888
  startShowingAt: {
21298
21889
  type: "datetime",
21299
21890
  label: "Start Showing At",
@@ -21579,6 +22170,16 @@ var Tb = /* @__PURE__ */ o({
21579
22170
  position: "sidebar",
21580
22171
  liveSync: !0
21581
22172
  },
22173
+ notInMenu: {
22174
+ type: "boolean",
22175
+ label: "Not in Menu",
22176
+ default: !1,
22177
+ public: !0,
22178
+ inTree: !0,
22179
+ variant: "danger",
22180
+ dbType: "integer",
22181
+ position: "sidebar"
22182
+ },
21582
22183
  startShowingAt: {
21583
22184
  type: "datetime",
21584
22185
  label: "Start Showing At",
@@ -21758,14 +22359,29 @@ var Tb = /* @__PURE__ */ o({
21758
22359
  type: "text",
21759
22360
  dbType: "text",
21760
22361
  public: !0,
22362
+ inTree: !0,
21761
22363
  rules: { required: !0 }
21762
22364
  },
22365
+ disableTitleInContent: {
22366
+ label: "Disable Title in Content",
22367
+ type: "boolean",
22368
+ dbType: "boolean",
22369
+ public: !0
22370
+ },
22371
+ menuTitle: {
22372
+ label: "Menu Title",
22373
+ type: "text",
22374
+ inTree: !0,
22375
+ public: !0,
22376
+ default: ""
22377
+ },
21763
22378
  slug: {
21764
22379
  label: "URL Slug",
21765
22380
  type: "slug",
21766
- linkedTo: "title",
22381
+ linkedTo: "menuTitle,title",
21767
22382
  dbType: "text",
21768
22383
  public: !0,
22384
+ inTree: !0,
21769
22385
  index: !0,
21770
22386
  rules: {
21771
22387
  required: !0,
@@ -22094,7 +22710,13 @@ var Tb = /* @__PURE__ */ o({
22094
22710
  treeTemplate: null,
22095
22711
  channelTemplate: null,
22096
22712
  userTemplate: null,
22097
- treeExposedFields: ["summary"]
22713
+ treeExposedFields: [
22714
+ "summary",
22715
+ "notInMenu",
22716
+ "title",
22717
+ "menuTitle",
22718
+ "slug"
22719
+ ]
22098
22720
  }, Db = Eb, Ob = {
22099
22721
  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 ",
22100
22722
  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 ",
@@ -22112,9 +22734,10 @@ var Tb = /* @__PURE__ */ o({
22112
22734
  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 ",
22113
22735
  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 ",
22114
22736
  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 ",
22737
+ 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 ",
22115
22738
  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 ",
22116
22739
  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 "
22117
- }, 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(".");
22740
+ }, 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(".");
22118
22741
  function Ab(e) {
22119
22742
  let t = /* @__PURE__ */ new Set();
22120
22743
  function n(e) {
@@ -22363,15 +22986,15 @@ var Fb = { hasSubscribers: !1 }, Ib = Fb, Lb = Fb, Rb = typeof performance == "o
22363
22986
  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;
22364
22987
  if (this.backgroundFetchSize = w, T !== void 0 && typeof T?.now != "function") throw TypeError("perf option must have a now() method if specified");
22365
22988
  if (this.#s = T ?? Rb, n !== 0 && !Wb(n)) throw TypeError("max option must be a nonnegative integer");
22366
- let ee = n ? Gb(n) : Array;
22367
- if (!ee) throw Error("invalid max value: " + n);
22989
+ let E = n ? Gb(n) : Array;
22990
+ if (!E) throw Error("invalid max value: " + n);
22368
22991
  if (this.#e = n, this.#t = m, this.maxEntrySize = h || this.#t, this.sizeCalculation = g, this.sizeCalculation) {
22369
22992
  if (!this.#t && !this.maxEntrySize) throw TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
22370
22993
  if (typeof this.sizeCalculation != "function") throw TypeError("sizeCalculation set to non-function");
22371
22994
  }
22372
22995
  if (v !== void 0 && typeof v != "function") throw TypeError("memoMethod must be a function if defined");
22373
22996
  if (this.#o = v, _ !== void 0 && typeof _ != "function") throw TypeError("fetchMethod must be a function if specified");
22374
- 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) {
22997
+ 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) {
22375
22998
  if (this.#t !== 0 && !Wb(this.#t)) throw TypeError("maxSize must be a positive integer if specified");
22376
22999
  if (!Wb(this.maxEntrySize)) throw TypeError("maxEntrySize must be a positive integer if specified");
22377
23000
  this.#M();
@@ -23994,7 +24617,15 @@ gx.get("/", async (e) => {
23994
24617
  if (a) {
23995
24618
  let { resolvedLayoutId: e, inheritedFields: r } = await Dx(t, a.parentId, a.treeId);
23996
24619
  (s === "inherit" || !s) && (s = e);
23997
- 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);
24620
+ let i = /* @__PURE__ */ new Set();
24621
+ o.fields && Object.entries(o.fields).forEach(([e, t]) => {
24622
+ t?.inheritsFromParent && i.add(e);
24623
+ }), o.tabs && Object.values(o.tabs).forEach((e) => {
24624
+ e.fields && Object.entries(e.fields).forEach(([e, t]) => {
24625
+ t?.inheritsFromParent && i.add(e);
24626
+ });
24627
+ });
24628
+ 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);
23998
24629
  }
23999
24630
  s && s !== "inherit" && !((e) => {
24000
24631
  if (!o || Object.keys(o).length === 0 || e === o.defaultLayout) return !0;
@@ -24087,22 +24718,22 @@ gx.get("/", async (e) => {
24087
24718
  ...m,
24088
24719
  f,
24089
24720
  p
24090
- ], C = await t.prepare(x).all(...S), w = Array.isArray(C) ? C : C?.results || [], T = w.map((e) => e.id), ee = {}, E = {};
24721
+ ], C = await t.prepare(x).all(...S), w = Array.isArray(C) ? C : C?.results || [], T = w.map((e) => e.id), E = {}, D = {};
24091
24722
  if (T.length > 0) {
24092
24723
  let e = T.map(() => "?").join(","), n = await t.prepare(`
24093
24724
  SELECT nc.nodeId, c.label FROM node_channels nc JOIN channels c ON nc.channelId = c.id WHERE nc.nodeId IN (${e})
24094
24725
  `).all(...T);
24095
24726
  (Array.isArray(n) ? n : n?.results || []).forEach((e) => {
24096
- ee[e.nodeId] || (ee[e.nodeId] = []), ee[e.nodeId].push(e.label);
24727
+ E[e.nodeId] || (E[e.nodeId] = []), E[e.nodeId].push(e.label);
24097
24728
  });
24098
24729
  let r = await t.prepare(`
24099
24730
  SELECT tn.contentId as nodeId, t.label FROM tree_nodes tn JOIN trees t ON tn.treeId = t.id WHERE tn.contentId IN (${e})
24100
24731
  `).all(...T);
24101
24732
  (Array.isArray(r) ? r : r?.results || []).forEach((e) => {
24102
- E[e.nodeId] || (E[e.nodeId] = []), E[e.nodeId].includes(e.label) || E[e.nodeId].push(e.label);
24733
+ D[e.nodeId] || (D[e.nodeId] = []), D[e.nodeId].includes(e.label) || D[e.nodeId].push(e.label);
24103
24734
  });
24104
24735
  }
24105
- let D = await Promise.all(w.map(async (e) => {
24736
+ let O = await Promise.all(w.map(async (e) => {
24106
24737
  let n = e.status === "draft" || !!e.hasUnpublishedChanges, r = {
24107
24738
  id: e.id,
24108
24739
  title: e.title,
@@ -24122,8 +24753,8 @@ gx.get("/", async (e) => {
24122
24753
  updatedById: e.updatedById || null,
24123
24754
  createdAt: e.createdAt,
24124
24755
  updatedAt: e.updatedAt,
24125
- channelNames: ee[e.id] || [],
24126
- treeNames: E[e.id] || [],
24756
+ channelNames: E[e.id] || [],
24757
+ treeNames: D[e.id] || [],
24127
24758
  assetCount: e.assetCount || 0,
24128
24759
  imageCount: e.imageCount || 0,
24129
24760
  videoCount: e.videoCount || 0,
@@ -24137,36 +24768,36 @@ gx.get("/", async (e) => {
24137
24768
  return r;
24138
24769
  }));
24139
24770
  return e.json({
24140
- items: D,
24771
+ items: O,
24141
24772
  total: v,
24142
- hasMore: p + D.length < v,
24773
+ hasMore: p + O.length < v,
24143
24774
  offset: p,
24144
24775
  limit: f
24145
24776
  });
24146
24777
  }), gx.post("/", async (e) => {
24147
- 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;
24148
- if (te) {
24149
- let e = await t.prepare("SELECT dataJson FROM trees WHERE id = ? OR key = ? LIMIT 1").get(Number(te) || -1, String(te));
24778
+ 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;
24779
+ if (ee) {
24780
+ let e = await t.prepare("SELECT dataJson FROM trees WHERE id = ? OR key = ? LIMIT 1").get(Number(ee) || -1, String(ee));
24150
24781
  if (e?.dataJson) try {
24151
24782
  let t = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
24152
- O = t.defaultLanguage?.trim() || t.language?.trim() || null;
24783
+ k = t.defaultLanguage?.trim() || t.language?.trim() || null;
24153
24784
  } catch {}
24154
24785
  }
24155
- if (!O && _ && Array.isArray(_) && _.length > 0) {
24786
+ if (!k && _ && Array.isArray(_) && _.length > 0) {
24156
24787
  let e = typeof _[0] == "object" ? _[0].id : _[0];
24157
24788
  if (e && e !== "all") {
24158
24789
  let n = await t.prepare("SELECT defaultLanguage, dataJson FROM channels WHERE id = ? LIMIT 1").get(Number(e));
24159
24790
  if (n) {
24160
- if (n.defaultLanguage) O = n.defaultLanguage.trim();
24791
+ if (n.defaultLanguage) k = n.defaultLanguage.trim();
24161
24792
  else if (n.dataJson) try {
24162
24793
  let e = typeof n.dataJson == "string" ? JSON.parse(n.dataJson) : n.dataJson;
24163
- O = e.defaultLanguage?.trim() || e.language?.trim() || null;
24794
+ k = e.defaultLanguage?.trim() || e.language?.trim() || null;
24164
24795
  } catch {}
24165
24796
  }
24166
24797
  }
24167
24798
  }
24168
- E && O && E === O && (E = null);
24169
- let k = a, A = /* @__PURE__ */ new Set(), ne = !1, j = "draft", re = 0, ie = s === void 0 ? null : bx(s);
24799
+ D && k && D === k && (D = null);
24800
+ let A = a, j = /* @__PURE__ */ new Set(), te = !1, ne = "draft", re = 0, ie = s === void 0 ? null : bx(s);
24170
24801
  if (ie) {
24171
24802
  let n = [];
24172
24803
  if (v !== void 0 && Array.isArray(v) && v.length > 0) for (let e of v) n.push({
@@ -24197,8 +24828,8 @@ gx.get("/", async (e) => {
24197
24828
  }
24198
24829
  }
24199
24830
  if (a) {
24200
- 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;
24201
- ne = Tx(e, {
24831
+ 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;
24832
+ te = Tx(e, {
24202
24833
  title: n,
24203
24834
  slug: r,
24204
24835
  isHidden: u,
@@ -24208,7 +24839,7 @@ gx.get("/", async (e) => {
24208
24839
  });
24209
24840
  let p = e?.draftDataJson || e?.dataJson || "{}";
24210
24841
  try {
24211
- wx(typeof p == "string" ? JSON.parse(p) : p, A);
24842
+ wx(typeof p == "string" ? JSON.parse(p) : p, j);
24212
24843
  } catch {}
24213
24844
  let _ = {};
24214
24845
  try {
@@ -24227,7 +24858,7 @@ gx.get("/", async (e) => {
24227
24858
  ..._,
24228
24859
  ...v
24229
24860
  }), x = !1;
24230
- 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) {
24861
+ 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) {
24231
24862
  for (let e of Object.keys(b)) if (JSON.stringify(b[e]) !== JSON.stringify(_[e])) {
24232
24863
  x = !0;
24233
24864
  break;
@@ -24249,41 +24880,41 @@ gx.get("/", async (e) => {
24249
24880
  }
24250
24881
  }
24251
24882
  }
24252
- j = e?.status === "published" || e?.publishedAt ? "published" : "draft";
24883
+ ne = e?.status === "published" || e?.publishedAt ? "published" : "draft";
24253
24884
  let S = e?.hasUnpublishedChanges === 1 || e?.hasUnpublishedChanges === !0;
24254
24885
  re = x ? 1 : +!!S;
24255
- 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;
24256
- 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);
24886
+ 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;
24887
+ 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);
24257
24888
  } else {
24258
- ne = !0;
24889
+ te = !0;
24259
24890
  let e = m === void 0 ? null : m, n = h === void 0 ? null : h, r = {
24260
24891
  title: o || "Untitled",
24261
24892
  slug: ie,
24262
24893
  contentType: T,
24263
- language: E,
24894
+ language: D,
24264
24895
  isHidden: w,
24265
24896
  startShowingAt: e,
24266
24897
  stopShowingAt: n,
24267
24898
  ...b
24268
- }, 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);
24269
- k = Number(i.lastInsertRowid);
24899
+ }, 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);
24900
+ A = Number(i.lastInsertRowid);
24270
24901
  }
24271
- if (_ !== void 0 && Array.isArray(_) && k) {
24272
- await t.prepare("DELETE FROM node_channels WHERE nodeId = ?").run(k);
24902
+ if (_ !== void 0 && Array.isArray(_) && A) {
24903
+ await t.prepare("DELETE FROM node_channels WHERE nodeId = ?").run(A);
24273
24904
  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);
24274
24905
  if (e.length > 0) {
24275
- let n = e.map(() => "(?, ?)").join(", "), r = e.flatMap((e) => [k, e]);
24906
+ let n = e.map(() => "(?, ?)").join(", "), r = e.flatMap((e) => [A, e]);
24276
24907
  await t.prepare(`INSERT OR IGNORE INTO node_channels (nodeId, channelId) VALUES ${n}`).run(...r);
24277
24908
  }
24278
24909
  }
24279
- if (v !== void 0 && Array.isArray(v) && v.length > 0 && k) for (let e of v) {
24910
+ if (v !== void 0 && Array.isArray(v) && v.length > 0 && A) for (let e of v) {
24280
24911
  if (!e || !e.treeId) continue;
24281
- 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);
24282
- 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));
24912
+ 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);
24913
+ 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));
24283
24914
  }
24284
24915
  let ae = [], oe = [], se = [];
24285
- if (g !== void 0 && Array.isArray(g) && k) {
24286
- await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 1").run(k);
24916
+ if (g !== void 0 && Array.isArray(g) && A) {
24917
+ await t.prepare("DELETE FROM content_blocks WHERE contentId = ? AND isDraft = 1").run(A);
24287
24918
  let e = [], n = [];
24288
24919
  for (let t = 0; t < g.length; t++) {
24289
24920
  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({
@@ -24302,14 +24933,14 @@ gx.get("/", async (e) => {
24302
24933
  fieldKey: `blocks[${t}].${e.fieldKey}`
24303
24934
  }));
24304
24935
  let d = r.region !== void 0 && r.region !== null && String(r.region).trim() !== "" ? String(r.region) : "content";
24305
- e.push("(?, ?, ?, ?, ?, 1)"), n.push(k, t, i, JSON.stringify(s), d);
24936
+ e.push("(?, ?, ?, ?, ?, 1)"), n.push(A, t, i, JSON.stringify(s), d);
24306
24937
  }
24307
24938
  e.length > 0 && await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24308
24939
  }
24309
- if (k) {
24940
+ if (A) {
24310
24941
  let n = [...x, ...ae], r = [...S, ...oe], i = [...C, ...se];
24311
- await ox(t, k, n), await sx(t, k, r), await cx(t, k, i);
24312
- let a = new Set(n.map((e) => e.assetId)), o = new Set([...A].filter((e) => !a.has(e)));
24942
+ await ox(t, A, n), await sx(t, A, r), await cx(t, A, i);
24943
+ let a = new Set(n.map((e) => e.assetId)), o = new Set([...j].filter((e) => !a.has(e)));
24313
24944
  if (o.size > 0) {
24314
24945
  let { storage: n } = ix(e.env);
24315
24946
  await Ex(t, n, o);
@@ -24317,10 +24948,10 @@ gx.get("/", async (e) => {
24317
24948
  }
24318
24949
  return await $b(e).clear(), e.json({
24319
24950
  success: !0,
24320
- id: k,
24321
- status: j,
24322
- hasUnpublishedChanges: re === 1 || j === "draft",
24323
- isStructuralChange: ne
24951
+ id: A,
24952
+ status: ne,
24953
+ hasUnpublishedChanges: re === 1 || ne === "draft",
24954
+ isStructuralChange: te
24324
24955
  });
24325
24956
  }), gx.post("/publish", async (e) => {
24326
24957
  let t = e.get("db"), n = await e.req.json(), r = n.id || n.nodeId;
@@ -24335,34 +24966,34 @@ gx.get("/", async (e) => {
24335
24966
  try {
24336
24967
  c = typeof o.draftDataJson == "string" ? JSON.parse(o.draftDataJson) : o.draftDataJson || {};
24337
24968
  } catch {}
24338
- 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;
24339
- 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);
24340
- 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 || [];
24341
- if (te.length > 0) {
24969
+ 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;
24970
+ 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);
24971
+ 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 || [];
24972
+ if (ee.length > 0) {
24342
24973
  let e = [], n = [];
24343
- for (let t of te) {
24974
+ for (let t of ee) {
24344
24975
  let r = t.region !== void 0 && t.region !== null && String(t.region).trim() !== "" ? String(t.region) : "content";
24345
24976
  e.push("(?, ?, ?, ?, ?, 0)"), n.push(i, t.sortOrder, t.elementType, t.dataJson, r);
24346
24977
  }
24347
24978
  await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24348
24979
  }
24349
- let O = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(i))?.count || 0) + 1, k = {
24350
- version: O,
24980
+ let k = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(i))?.count || 0) + 1, A = {
24981
+ version: k,
24351
24982
  publishedAt: (/* @__PURE__ */ new Date()).toISOString(),
24352
24983
  node: {
24353
24984
  ...o,
24354
24985
  dataJson: b
24355
24986
  },
24356
- blocks: te
24987
+ blocks: ee
24357
24988
  };
24358
- await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(i, O, JSON.stringify(k), a), await $b(e).clear();
24359
- let A = new mx(e.env);
24360
- return y ? _x(e, t, [i]) : A.purgeNode(e, t, i, !1), e.json({
24989
+ await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(i, k, JSON.stringify(A), a), await $b(e).clear();
24990
+ let j = new mx(e.env);
24991
+ return y ? _x(e, t, [i]) : j.purgeNode(e, t, i, !1), e.json({
24361
24992
  success: !0,
24362
24993
  id: i,
24363
24994
  status: "published",
24364
- version: O,
24365
- publishedAt: k.publishedAt,
24995
+ version: k,
24996
+ publishedAt: A.publishedAt,
24366
24997
  hasUnpublishedChanges: !1,
24367
24998
  isStructuralChange: y
24368
24999
  });
@@ -24385,27 +25016,27 @@ gx.get("/", async (e) => {
24385
25016
  } catch {}
24386
25017
  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 ?? "";
24387
25018
  (u !== "" && d !== "" && u !== d || f !== "" && p !== "" && f !== p || m !== "" && h !== "" && m !== h || g !== _ || v !== y) && (a = !0);
24388
- 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;
24389
- 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);
24390
- 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 || [];
24391
- if (te.length > 0) {
25019
+ 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;
25020
+ 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);
25021
+ 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 || [];
25022
+ if (ee.length > 0) {
24392
25023
  let e = [], n = [];
24393
- for (let t of te) {
25024
+ for (let t of ee) {
24394
25025
  let i = t.region !== void 0 && t.region !== null && String(t.region).trim() !== "" ? String(t.region) : "content";
24395
25026
  e.push("(?, ?, ?, ?, ?, 0)"), n.push(r, t.sortOrder, t.elementType, t.dataJson, i);
24396
25027
  }
24397
25028
  await t.prepare(`INSERT INTO content_blocks (contentId, sortOrder, elementType, dataJson, region, isDraft) VALUES ${e.join(", ")}`).run(...n);
24398
25029
  }
24399
- let O = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(r))?.count || 0) + 1, k = {
24400
- version: O,
25030
+ let k = ((await t.prepare("SELECT COUNT(*) as count FROM node_revisions WHERE nodeId = ?").get(r))?.count || 0) + 1, A = {
25031
+ version: k,
24401
25032
  publishedAt: (/* @__PURE__ */ new Date()).toISOString(),
24402
25033
  node: {
24403
25034
  ...s,
24404
25035
  dataJson: b
24405
25036
  },
24406
- blocks: te
25037
+ blocks: ee
24407
25038
  };
24408
- await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(r, O, JSON.stringify(k), i), o.push(r);
25039
+ await t.prepare("INSERT INTO node_revisions (nodeId, version, snapshotJson, createdById) VALUES (?, ?, ?, ?)").run(r, k, JSON.stringify(A), i), o.push(r);
24409
25040
  }
24410
25041
  await $b(e).clear();
24411
25042
  let s = new mx(e.env);
@@ -24889,23 +25520,23 @@ Mx.get("/", async (e) => {
24889
25520
  try {
24890
25521
  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 || "";
24891
25522
  typeof T == "object" && T && (T = T.value || T.id || ""), T = String(T).trim();
24892
- 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;
25523
+ 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;
24893
25524
  if (await t.prepare("SELECT id FROM channels WHERE key = ? AND id != ? LIMIT 1").get(C, a ?? -1)) return e.json({
24894
25525
  error: `Channel API key "${C}" is already in use.`,
24895
25526
  field: "key"
24896
25527
  }, 409);
24897
- let O = a;
24898
- 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);
25528
+ let k = a;
25529
+ 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);
24899
25530
  else {
24900
- 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;
25531
+ 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;
24901
25532
  if (!n || !n.id) throw Error("Failed to retrieve newly created Channel ID from Cloudflare D1.");
24902
- O = Number(n.id);
25533
+ k = Number(n.id);
24903
25534
  }
24904
- await t.prepare("DELETE FROM channel_trees WHERE channelId = ?").run(O);
24905
- let k = E.filter((e) => e && e.treeId && e.key);
24906
- if (k.length > 0) {
24907
- let e = k.map(() => "(?, ?, ?, ?)").join(", "), n = k.flatMap((e) => [
24908
- O,
25535
+ await t.prepare("DELETE FROM channel_trees WHERE channelId = ?").run(k);
25536
+ let A = D.filter((e) => e && e.treeId && e.key);
25537
+ if (A.length > 0) {
25538
+ let e = A.map(() => "(?, ?, ?, ?)").join(", "), n = A.flatMap((e) => [
25539
+ k,
24909
25540
  Number(e.treeId) || e.treeId,
24910
25541
  String(e.key).trim(),
24911
25542
  JSON.stringify(e.meta || {})
@@ -24915,10 +25546,10 @@ Mx.get("/", async (e) => {
24915
25546
  VALUES ${e}
24916
25547
  `).run(...n);
24917
25548
  }
24918
- let A = $b(e);
24919
- 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({
25549
+ let j = $b(e);
25550
+ 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({
24920
25551
  success: !0,
24921
- id: O
25552
+ id: k
24922
25553
  });
24923
25554
  } catch (t) {
24924
25555
  return console.error("[API Channels] Error saving channel:", t), e.json({
@@ -25273,16 +25904,16 @@ function Qx(e) {
25273
25904
  userTemplate: null,
25274
25905
  treeExposedFields: ["summary"]
25275
25906
  };
25276
- 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 = {
25907
+ 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 = {
25277
25908
  ...p,
25278
25909
  ...f
25279
- }, A = (e, t = "settings", n, r) => {
25910
+ }, j = (e, t = "settings", n, r) => {
25280
25911
  let i = {};
25281
25912
  if (!e) return i;
25282
25913
  let a = (e) => {
25283
- let a = k[e] || k[`${e}-base`] || {};
25914
+ let a = A[e] || A[`${e}-base`] || {};
25284
25915
  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));
25285
- let o = a.fields || a, s = A(o, t, n, r);
25916
+ let o = a.fields || a, s = j(o, t, n, r);
25286
25917
  if (a.tab && n) {
25287
25918
  let t = a.tab.id || e, r = a.tab.label || a.label || t;
25288
25919
  n[t] || (n[t] = {
@@ -25303,14 +25934,14 @@ function Qx(e) {
25303
25934
  a(String(t));
25304
25935
  return;
25305
25936
  }
25306
- let n = i[e] || O[e] || {};
25937
+ let n = i[e] || k[e] || {};
25307
25938
  i[e] = Ux(n, typeof t == "object" && t ? t : { label: String(t) });
25308
25939
  }), i) : (Array.isArray(e) && e.forEach((e) => {
25309
25940
  if (typeof e == "string") {
25310
25941
  if (e.includes("/") || e.endsWith(".yaml") || e.endsWith(".yml")) return;
25311
25942
  if (e.startsWith("fieldSet:")) a(e.replace("fieldSet:", "").trim());
25312
25943
  else {
25313
- let t = i[e] || O[e] || {};
25944
+ let t = i[e] || k[e] || {};
25314
25945
  i[e] = Ux(t, {
25315
25946
  type: "text",
25316
25947
  label: e
@@ -25319,23 +25950,23 @@ function Qx(e) {
25319
25950
  } else typeof e == "object" && e && Object.entries(e).forEach(([e, t]) => {
25320
25951
  if (e === "fieldSet") a(String(t));
25321
25952
  else if (e !== "<<" && e !== "<<:") {
25322
- let n = i[e] || O[e] || {};
25953
+ let n = i[e] || k[e] || {};
25323
25954
  i[e] = Ux(n, typeof t == "object" && t ? t : {});
25324
25955
  }
25325
25956
  });
25326
25957
  }), i);
25327
- }, ne = (e, t) => {
25958
+ }, te = (e, t) => {
25328
25959
  let n = {};
25329
25960
  return !e || typeof e != "object" ? n : Array.isArray(e) ? (e.forEach((e) => {
25330
25961
  if (typeof e == "object" && e.fieldSet) {
25331
- let r = String(e.fieldSet), i = k[r] || k[`${r}-base`] || {};
25962
+ let r = String(e.fieldSet), i = A[r] || A[`${r}-base`] || {};
25332
25963
  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));
25333
25964
  let a = i.tab?.id || r, o = i.tab?.label || i.label || a;
25334
25965
  n[a] || (n[a] = {
25335
25966
  label: o,
25336
25967
  fields: {}
25337
25968
  });
25338
- let s = A(i.fields || i, a, n, t);
25969
+ let s = j(i.fields || i, a, n, t);
25339
25970
  Object.entries(s).forEach(([e, t]) => {
25340
25971
  let r = n[a].fields[e] || {};
25341
25972
  n[a].fields[e] = Ux(r, t);
@@ -25350,21 +25981,21 @@ function Qx(e) {
25350
25981
  label: i,
25351
25982
  fields: {}
25352
25983
  });
25353
- let s = A(o, e, n, t);
25984
+ let s = j(o, e, n, t);
25354
25985
  Object.entries(s).forEach(([t, r]) => {
25355
25986
  if (t === "<<" || t === "<<:" || t === "label") return;
25356
25987
  let i = n[e].fields[t] || {};
25357
25988
  n[e].fields[t] = Ux(i, r);
25358
25989
  });
25359
25990
  }), n);
25360
- }, j = {};
25991
+ }, ne = {};
25361
25992
  Object.entries(C).forEach(([e, t]) => {
25362
25993
  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));
25363
- let n = ne(t.tabs, t), r = A(t.fields || [], "settings", n, t);
25994
+ let n = te(t.tabs, t), r = j(t.fields || [], "settings", n, t);
25364
25995
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25365
- let i = k[e] || k[`${e}-base`] || {};
25996
+ let i = A[e] || A[`${e}-base`] || {};
25366
25997
  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);
25367
- let a = i.fields || i, o = A(a, "settings", n, t);
25998
+ let a = i.fields || i, o = j(a, "settings", n, t);
25368
25999
  if (i.tab) {
25369
26000
  let t = i.tab.id || e, r = i.tab.label || i.label || t;
25370
26001
  n[t] || (n[t] = {
@@ -25375,7 +26006,7 @@ function Qx(e) {
25375
26006
  n[t].fields[e] = Ux(i, r);
25376
26007
  });
25377
26008
  } else Object.entries(o).forEach(([e, t]) => {
25378
- let n = r[e] || O[e] || {};
26009
+ let n = r[e] || k[e] || {};
25379
26010
  r[e] = Ux(n, t);
25380
26011
  });
25381
26012
  }), Object.values(n).forEach((e) => {
@@ -25386,7 +26017,7 @@ function Qx(e) {
25386
26017
  }), Object.keys(n).length === 0 && Object.keys(r).length > 0 && (n.settings = {
25387
26018
  label: t.label || "Settings",
25388
26019
  fields: r
25389
- }), j[e] = {
26020
+ }), ne[e] = {
25390
26021
  ...t,
25391
26022
  id: t.id || e,
25392
26023
  label: t.label || e,
@@ -25402,9 +26033,9 @@ function Qx(e) {
25402
26033
  });
25403
26034
  let re = {};
25404
26035
  Object.entries(w).forEach(([e, t]) => {
25405
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26036
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25406
26037
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25407
- let t = k[e] || {}, i = t.fields || t, a = A(i, "settings", n);
26038
+ let t = A[e] || {}, i = t.fields || t, a = j(i, "settings", n);
25408
26039
  Object.entries(a).forEach(([e, t]) => {
25409
26040
  r[e] = Ux(r[e] || {}, t);
25410
26041
  });
@@ -25422,9 +26053,9 @@ function Qx(e) {
25422
26053
  });
25423
26054
  let ie = {};
25424
26055
  Object.entries(T).forEach(([e, t]) => {
25425
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26056
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25426
26057
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25427
- let t = k[e] || {}, n = t.fields || t, i = A(n);
26058
+ let t = A[e] || {}, n = t.fields || t, i = j(n);
25428
26059
  Object.entries(i).forEach(([e, t]) => {
25429
26060
  r[e] = Ux(r[e] || {}, t);
25430
26061
  });
@@ -25442,10 +26073,10 @@ function Qx(e) {
25442
26073
  };
25443
26074
  });
25444
26075
  let ae = {};
25445
- Object.entries(ee).forEach(([e, t]) => {
25446
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n);
26076
+ Object.entries(E).forEach(([e, t]) => {
26077
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n);
25447
26078
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25448
- let t = k[e] || {}, i = t.fields || t, a = A(i, "settings", n);
26079
+ let t = A[e] || {}, i = t.fields || t, a = j(i, "settings", n);
25449
26080
  Object.entries(a).forEach(([e, t]) => {
25450
26081
  r[e] = Ux(r[e] || {}, t);
25451
26082
  });
@@ -25463,10 +26094,10 @@ function Qx(e) {
25463
26094
  };
25464
26095
  });
25465
26096
  let oe = {};
25466
- Object.entries(E).forEach(([e, t]) => {
25467
- let n = A(t.fields || []);
26097
+ Object.entries(D).forEach(([e, t]) => {
26098
+ let n = j(t.fields || []);
25468
26099
  Array.isArray(t.fieldSets) && t.fieldSets.forEach((e) => {
25469
- let t = k[e] || {}, r = t.fields || t, i = A(r);
26100
+ let t = A[e] || {}, r = t.fields || t, i = j(r);
25470
26101
  Object.entries(i).forEach(([e, t]) => {
25471
26102
  n[e] = Ux(n[e] || {}, t);
25472
26103
  });
@@ -25479,8 +26110,8 @@ function Qx(e) {
25479
26110
  };
25480
26111
  });
25481
26112
  let se = {};
25482
- Object.entries(D).forEach(([e, t]) => {
25483
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n), i = {}, a = t.regions || { content: { label: "Content" } };
26113
+ Object.entries(O).forEach(([e, t]) => {
26114
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n), i = {}, a = t.regions || { content: { label: "Content" } };
25484
26115
  Object.entries(a).forEach(([e, t]) => {
25485
26116
  i[e] = {
25486
26117
  ...t,
@@ -25502,8 +26133,8 @@ function Qx(e) {
25502
26133
  };
25503
26134
  });
25504
26135
  let ce = {};
25505
- Object.entries(te).forEach(([e, t]) => {
25506
- let n = ne(t.tabs), r = A(t.fields || [], "settings", n), i = {}, a = t.regions || { main: { label: "Main Content" } };
26136
+ Object.entries(ee).forEach(([e, t]) => {
26137
+ let n = te(t.tabs), r = j(t.fields || [], "settings", n), i = {}, a = t.regions || { main: { label: "Main Content" } };
25507
26138
  Object.entries(a).forEach(([e, t]) => {
25508
26139
  i[e] = {
25509
26140
  ...t,
@@ -25526,7 +26157,7 @@ function Qx(e) {
25526
26157
  });
25527
26158
  let le = g?.fields || {};
25528
26159
  Array.isArray(g?.fieldSets) && g?.fieldSets.forEach((e) => {
25529
- let t = k[e] || {}, n = t.fields || t, r = A(n);
26160
+ let t = A[e] || {}, n = t.fields || t, r = j(n);
25530
26161
  Object.entries(r).forEach(([e, t]) => {
25531
26162
  le[e] = Ux(le[e] || {}, t);
25532
26163
  });
@@ -25536,7 +26167,7 @@ function Qx(e) {
25536
26167
  fields: le
25537
26168
  } : null, de = _?.fields || {};
25538
26169
  Array.isArray(_?.fieldSets) && _?.fieldSets.forEach((e) => {
25539
- let t = k[e] || {}, n = t.fields || t, r = A(n);
26170
+ let t = A[e] || {}, n = t.fields || t, r = j(n);
25540
26171
  Object.entries(r).forEach(([e, t]) => {
25541
26172
  de[e] = Ux(de[e] || {}, t);
25542
26173
  });
@@ -25545,23 +26176,23 @@ function Qx(e) {
25545
26176
  ..._,
25546
26177
  fields: de
25547
26178
  } : null, pe = /* @__PURE__ */ new Set(["summary"]);
25548
- for (let e of Object.values(k)) {
26179
+ for (let e of Object.values(A)) {
25549
26180
  let t = e.fields || e;
25550
26181
  for (let [e, n] of Object.entries(t || {})) n && typeof n == "object" && n.inTree && pe.add(e);
25551
26182
  }
25552
- for (let e of Object.values(j)) {
26183
+ for (let e of Object.values(ne)) {
25553
26184
  for (let [t, n] of Object.entries(e.fields || {})) n?.inTree && pe.add(t);
25554
26185
  for (let t of Object.values(e.tabs || {})) for (let [e, n] of Object.entries(t.fields || {})) n?.inTree && pe.add(e);
25555
26186
  }
25556
26187
  return {
25557
- nodes: j,
26188
+ nodes: ne,
25558
26189
  trees: re,
25559
26190
  channels: ie,
25560
26191
  taxonomies: ae,
25561
26192
  blocks: oe,
25562
26193
  nodeLayouts: se,
25563
26194
  blockLayouts: ce,
25564
- fieldSets: k,
26195
+ fieldSets: A,
25565
26196
  nodeTemplate: m || null,
25566
26197
  treeTemplate: h || null,
25567
26198
  channelTemplate: ue,
@@ -25731,37 +26362,47 @@ async function sS(e, t, n = []) {
25731
26362
  if (typeof r.bind == "function") return await r.bind(...n).run();
25732
26363
  if (typeof r.run == "function") return await r.run(...n);
25733
26364
  }
25734
- function cS(e, t, n) {
26365
+ function cS(e) {
26366
+ return e.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/[\s-]+/g, "-").replace(/^-+|-+$/g, "");
26367
+ }
26368
+ function lS(e, t, n) {
25735
26369
  let r = e || (t ? `/media/${t}` : "");
25736
26370
  return r && n && r.startsWith(`https://${n}/`) && !r.includes("/media/") && (r = r.replace(`https://${n}/`, `https://${n}/media/`)), r;
25737
26371
  }
25738
26372
  aS.get("/", async (e) => {
25739
26373
  try {
25740
- 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 = {
26374
+ 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 = {
25741
26375
  createdAt: "a.createdAt",
25742
26376
  updatedAt: "a.updatedAt",
25743
26377
  filename: "a.filename",
25744
26378
  mimeType: "a.mimeType",
25745
26379
  sizeBytes: "a.sizeBytes"
25746
- }[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 = '')"];
26380
+ }[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 = '')"];
25747
26381
  if (c) {
25748
26382
  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)]);
25749
- if (e.length === 0) _.push("1 = 0");
26383
+ if (e.length === 0) v.push("1 = 0");
25750
26384
  else {
25751
26385
  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 ");
25752
- _.push(`(${t})`);
26386
+ v.push(`(${t})`);
25753
26387
  }
25754
26388
  }
25755
26389
  if (!c && l && l !== "all") {
25756
26390
  let e = Number(l) || l;
25757
- _.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);
25758
- }
25759
- 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/%")));
25760
- 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 ?`;
25761
- g.push(f, p);
25762
- let y = await oS(t, v, g), b = y.map((e) => e.id), x = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map();
25763
- if (b.length > 0) {
25764
- let e = b.map(() => "?").join(",");
26391
+ 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);
26392
+ }
26393
+ if (d) {
26394
+ let e = d.split(",").map((e) => Number(e)).filter((e) => !isNaN(e));
26395
+ if (e.length > 0) {
26396
+ let t = e.map(() => "?").join(",");
26397
+ v.push(`EXISTS (SELECT 1 FROM asset_terms at WHERE at.assetId = a.id AND at.termId IN (${t}))`), _.push(...e);
26398
+ }
26399
+ }
26400
+ 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/%")));
26401
+ 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 ?`;
26402
+ _.push(p, m);
26403
+ let b = await oS(t, y, _), x = b.map((e) => e.id), S = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map();
26404
+ if (x.length > 0) {
26405
+ let e = x.map(() => "?").join(",");
25765
26406
  (await oS(t, `
25766
26407
  SELECT master.id AS assetId, COUNT(DISTINCT na.nodeId) AS count
25767
26408
  FROM assets master
@@ -25770,13 +26411,13 @@ aS.get("/", async (e) => {
25770
26411
  EXISTS (SELECT 1 FROM assets crop WHERE crop.id = na.assetId AND crop.isSystemVariant = 1 AND crop.parentAssetId = master.id)
25771
26412
  )
25772
26413
  WHERE master.id IN (${e})
25773
- GROUP BY master.id`, b)).forEach((e) => x.set(String(e.assetId), e.count || 0)), (await oS(t, `
26414
+ GROUP BY master.id`, x)).forEach((e) => S.set(String(e.assetId), e.count || 0)), (await oS(t, `
25774
26415
  SELECT parentAssetId, COUNT(id) AS count
25775
26416
  FROM assets
25776
26417
  WHERE isSystemVariant = 1 AND parentAssetId IN (${e})
25777
- GROUP BY parentAssetId`, b)).forEach((e) => S.set(String(e.parentAssetId), e.count || 0));
26418
+ GROUP BY parentAssetId`, x)).forEach((e) => C.set(String(e.parentAssetId), e.count || 0));
25778
26419
  }
25779
- let C = y.map((t) => {
26420
+ let w = b.map((t) => {
25780
26421
  let n = {
25781
26422
  title: "",
25782
26423
  alt: "",
@@ -25788,7 +26429,7 @@ aS.get("/", async (e) => {
25788
26429
  ...JSON.parse(t.dataJson || "{}")
25789
26430
  };
25790
26431
  } catch {}
25791
- let r = cS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
26432
+ let r = lS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
25792
26433
  return {
25793
26434
  id: t.id,
25794
26435
  filename: t.filename || "Untitled Asset",
@@ -25800,13 +26441,13 @@ aS.get("/", async (e) => {
25800
26441
  createdAt: t.createdAt,
25801
26442
  updatedAt: t.updatedAt,
25802
26443
  deletedAt: t.deletedAt || null,
25803
- usageCount: x.get(String(t.id)) || 0,
25804
- variantCount: S.get(String(t.id)) || 0,
26444
+ usageCount: S.get(String(t.id)) || 0,
26445
+ variantCount: C.get(String(t.id)) || 0,
25805
26446
  url: r,
25806
26447
  originalUrl: r
25807
26448
  };
25808
26449
  });
25809
- return e.json(C);
26450
+ return e.json(w);
25810
26451
  } catch (t) {
25811
26452
  return e.json({
25812
26453
  error: "Failed to fetch assets",
@@ -25815,85 +26456,99 @@ aS.get("/", async (e) => {
25815
26456
  }
25816
26457
  }), aS.post("/upload", async (e) => {
25817
26458
  try {
25818
- 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;
26459
+ 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;
25819
26460
  if (!i || !(i instanceof File)) return e.json({ error: "No file uploaded" }, 400);
25820
- let u = r.cropCoordinates, d = null, f = null;
25821
- if (u) {
25822
- if (typeof u == "string") {
25823
- d = u;
26461
+ let d = r.cropCoordinates, f = null, p = null;
26462
+ if (d) {
26463
+ if (typeof d == "string") {
26464
+ f = d;
25824
26465
  try {
25825
- f = JSON.parse(u);
26466
+ p = JSON.parse(d);
25826
26467
  } catch {}
25827
- } else d = JSON.stringify(u), f = u;
25828
- }
25829
- 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}`;
25830
- if (!v) throw Error("Storage provider failed to return a valid storage key");
25831
- 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;
25832
- T && (await oS(t, "SELECT id FROM users WHERE id = ?", [T])).length === 0 && (T = null);
25833
- let ee = new mx(e.env);
25834
- if (s) {
25835
- let r = await oS(t, "SELECT storageKeyPrivate, isSystemVariant, parentAssetId FROM assets WHERE id = ?", [s]);
26468
+ } else f = JSON.stringify(d), p = d;
26469
+ }
26470
+ 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}`;
26471
+ if (!y) throw Error("Storage provider failed to return a valid storage key");
26472
+ 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;
26473
+ E && (await oS(t, "SELECT id FROM users WHERE id = ?", [E])).length === 0 && (E = null);
26474
+ let D = new mx(e.env);
26475
+ if (c) {
26476
+ let r = await oS(t, "SELECT storageKeyPrivate, isSystemVariant, parentAssetId FROM assets WHERE id = ?", [c]);
25836
26477
  if (r.length > 0) {
25837
26478
  let a = r[0];
25838
26479
  if (await sS(t, "UPDATE assets SET filename = ?, mimeType = ?, sizeBytes = ?, storageKeyPrivate = ?, cdnUrl = ?, updatedAt = CURRENT_TIMESTAMP WHERE id = ?", [
25839
26480
  i.name,
25840
- S,
25841
26481
  C,
25842
- v,
25843
- x,
25844
- s
26482
+ w,
26483
+ y,
26484
+ S,
26485
+ c
25845
26486
  ]), a.storageKeyPrivate) try {
25846
26487
  await n.delete(a.storageKeyPrivate);
25847
- } catch (e) {
25848
- console.warn("Failed to cleanup old asset", e);
25849
- }
25850
- ee.purgeAsset(e, t, s);
25851
- let o = `${x}?v=${Date.now()}`;
25852
- return e.json({
25853
- id: s,
25854
- url: o,
25855
- originalUrl: o,
26488
+ } catch {}
26489
+ return D.purgeAsset(e, t, c), e.json({
26490
+ id: c,
26491
+ url: `${S}?v=${Date.now()}`,
26492
+ originalUrl: `${S}?v=${Date.now()}`,
25856
26493
  parentAssetId: a.parentAssetId,
25857
- cropCoordinates: f,
26494
+ cropCoordinates: p,
25858
26495
  filename: i.name,
25859
- mimeType: S,
26496
+ mimeType: C,
25860
26497
  usageCount: 0,
25861
26498
  isSystemVariant: !!a.isSystemVariant,
25862
26499
  replaced: !0
25863
26500
  }, 200);
25864
26501
  }
25865
26502
  }
25866
- let E = `ast_${p}`, D = +!!h;
25867
- await sS(t, "INSERT INTO assets (id, filename, mimeType, sizeBytes, storageKeyPrivate, cdnUrl, createdById, isSystemVariant, parentAssetId, cropCoordinatesJson) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [
25868
- E,
26503
+ let O = `ast_${m}`, ee = +!!g;
26504
+ if (await sS(t, "INSERT INTO assets (id, filename, mimeType, sizeBytes, storageKeyPrivate, cdnUrl, createdById, isSystemVariant, parentAssetId, cropCoordinatesJson) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [
26505
+ O,
25869
26506
  i.name,
25870
- S,
25871
26507
  C,
25872
- v,
25873
- x,
25874
- T,
25875
- D,
25876
- l,
25877
- d
25878
- ]);
25879
- let te = x;
25880
- if (l) {
25881
- let n = await oS(t, "SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?", [l]);
25882
- n.length > 0 && (te = cS(n[0].cdnUrl, n[0].storageKeyPrivate, y)), ee.purgeAsset(e, t, l);
26508
+ w,
26509
+ y,
26510
+ S,
26511
+ E,
26512
+ ee,
26513
+ u,
26514
+ f
26515
+ ]), typeof a == "string" && a.trim()) {
26516
+ let e = a.split("/").filter((e) => e.trim() !== "");
26517
+ for (let n of e) {
26518
+ let e = cS(n), r = null, i = await oS(t, "SELECT id FROM taxonomy_terms WHERE taxonomy = ? AND key = ?", ["media-tag", e]);
26519
+ if (i.length > 0) r = i[0].id;
26520
+ else {
26521
+ await sS(t, "INSERT INTO taxonomy_terms (taxonomy, key, label, sortOrder, dataJson) VALUES (?, ?, ?, ?, ?)", [
26522
+ "media-tag",
26523
+ e,
26524
+ n,
26525
+ 0,
26526
+ "{}"
26527
+ ]);
26528
+ let i = await oS(t, "SELECT id FROM taxonomy_terms WHERE taxonomy = ? AND key = ?", ["media-tag", e]);
26529
+ i.length > 0 && (r = i[0].id);
26530
+ }
26531
+ r && await sS(t, "INSERT OR IGNORE INTO asset_terms (assetId, termId) VALUES (?, ?)", [O, r]);
26532
+ }
26533
+ }
26534
+ let k = S;
26535
+ if (u) {
26536
+ let n = await oS(t, "SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?", [u]);
26537
+ n.length > 0 && (k = lS(n[0].cdnUrl, n[0].storageKeyPrivate, b)), D.purgeAsset(e, t, u);
25883
26538
  }
25884
26539
  return e.json({
25885
- id: E,
25886
- url: x,
25887
- originalUrl: te,
25888
- parentAssetId: l,
25889
- cropCoordinates: f,
26540
+ id: O,
26541
+ url: S,
26542
+ originalUrl: k,
26543
+ parentAssetId: u,
26544
+ cropCoordinates: p,
25890
26545
  filename: i.name,
25891
- mimeType: S,
26546
+ mimeType: C,
25892
26547
  usageCount: 0,
25893
- isSystemVariant: !!D
26548
+ isSystemVariant: !!ee
25894
26549
  }, 201);
25895
26550
  } catch (t) {
25896
- return console.error("❌ [Asset Upload Crash Details]:", t), e.json({
26551
+ return e.json({
25897
26552
  error: "Upload failed",
25898
26553
  details: t.message || String(t)
25899
26554
  }, 500);
@@ -25902,18 +26557,18 @@ aS.get("/", async (e) => {
25902
26557
  try {
25903
26558
  let t = wb(e), n = e.req.param("id"), r = await oS(t, "SELECT * FROM assets WHERE id = ?", [n]);
25904
26559
  if (!r || r.length === 0) return e.json({ error: "Asset not found" }, 404);
25905
- 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 = {
26560
+ 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 = {
25906
26561
  title: "",
25907
26562
  alt: "",
25908
26563
  description: ""
25909
26564
  };
25910
26565
  try {
25911
- s = {
25912
- ...s,
26566
+ c = {
26567
+ ...c,
25913
26568
  ...JSON.parse(i.dataJson || "{}")
25914
26569
  };
25915
26570
  } catch {}
25916
- let c = i.updatedAt ? new Date(i.updatedAt).getTime() : Date.now(), l = `${cS(i.cdnUrl, i.storageKeyPrivate, e.env?.CDN_DOMAIN)}?v=${c}`;
26571
+ let l = i.updatedAt ? new Date(i.updatedAt).getTime() : Date.now(), u = `${lS(i.cdnUrl, i.storageKeyPrivate, e.env?.CDN_DOMAIN)}?v=${l}`;
25917
26572
  return e.json({
25918
26573
  id: i.id,
25919
26574
  filename: i.filename,
@@ -25921,18 +26576,19 @@ aS.get("/", async (e) => {
25921
26576
  sizeBytes: i.sizeBytes,
25922
26577
  createdAt: i.createdAt,
25923
26578
  updatedAt: i.updatedAt,
25924
- title: s.title || "",
25925
- alt: s.alt || "",
25926
- description: s.description || "",
25927
- url: l,
25928
- originalUrl: l,
26579
+ title: c.title || "",
26580
+ alt: c.alt || "",
26581
+ description: c.description || "",
26582
+ tags: s,
26583
+ url: u,
26584
+ originalUrl: u,
25929
26585
  connectedNodes: a,
25930
26586
  variants: o.map((t) => {
25931
26587
  let n = null;
25932
26588
  if (t.cropCoordinatesJson) try {
25933
26589
  n = JSON.parse(t.cropCoordinatesJson);
25934
26590
  } catch {}
25935
- let r = t.updatedAt ? new Date(t.updatedAt).getTime() : c, a = cS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
26591
+ let r = t.updatedAt ? new Date(t.updatedAt).getTime() : l, a = lS(t.cdnUrl, t.storageKeyPrivate, e.env?.CDN_DOMAIN);
25936
26592
  return {
25937
26593
  id: t.id,
25938
26594
  filename: t.filename,
@@ -25942,7 +26598,7 @@ aS.get("/", async (e) => {
25942
26598
  parentAssetId: t.parentAssetId || i.id,
25943
26599
  cropCoordinates: n,
25944
26600
  url: `${a}?v=${r}`,
25945
- originalUrl: l
26601
+ originalUrl: u
25946
26602
  };
25947
26603
  })
25948
26604
  });
@@ -25957,11 +26613,16 @@ aS.get("/", async (e) => {
25957
26613
  try {
25958
26614
  o = JSON.parse(a.dataJson || "{}");
25959
26615
  } catch {}
25960
- 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 = ?", [
26616
+ 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 = ?", [
25961
26617
  r.filename === void 0 ? a.filename : r.filename,
25962
26618
  JSON.stringify(o),
25963
26619
  n
25964
- ]), new mx(e.env).purgeAsset(e, t, n), e.json({ success: !0 });
26620
+ ]), r.tags !== void 0 && Array.isArray(r.tags)) {
26621
+ await sS(t, "DELETE FROM asset_terms WHERE assetId = ?", [n]);
26622
+ let e = r.tags.map((e) => Number(e.replace("trm_", ""))).filter((e) => !isNaN(e));
26623
+ for (let r of e) await sS(t, "INSERT OR IGNORE INTO asset_terms (assetId, termId) VALUES (?, ?)", [n, r]);
26624
+ }
26625
+ return new mx(e.env).purgeAsset(e, t, n), e.json({ success: !0 });
25965
26626
  } catch {
25966
26627
  return e.json({ error: "Failed to update asset" }, 500);
25967
26628
  }
@@ -26017,14 +26678,14 @@ aS.get("/", async (e) => {
26017
26678
  deletedVariantsCount: a.length - 1
26018
26679
  });
26019
26680
  } catch (t) {
26020
- return console.error("❌ [Asset Purge Error]:", t), e.json({
26681
+ return e.json({
26021
26682
  error: "Failed to purge asset",
26022
26683
  details: t.message || String(t)
26023
26684
  }, 500);
26024
26685
  }
26025
26686
  });
26026
- var lS = new $y();
26027
- function uS() {
26687
+ var uS = new $y();
26688
+ function dS() {
26028
26689
  return {
26029
26690
  fullPath: /* @__PURE__ */ new Map(),
26030
26691
  treeEdges: /* @__PURE__ */ new Map(),
@@ -26032,7 +26693,7 @@ function uS() {
26032
26693
  assetUrls: /* @__PURE__ */ new Map()
26033
26694
  };
26034
26695
  }
26035
- function dS(e, t, n = []) {
26696
+ function fS(e, t, n = []) {
26036
26697
  let r = Date.now();
26037
26698
  if (e && String(e).trim() !== "") {
26038
26699
  let t = Date.parse(e);
@@ -26043,7 +26704,7 @@ function dS(e, t, n = []) {
26043
26704
  !isNaN(e) && e > r && n.push(e);
26044
26705
  }
26045
26706
  }
26046
- function fS(e, t) {
26707
+ function pS(e, t) {
26047
26708
  let n = Date.now();
26048
26709
  if (e && String(e).trim() !== "") {
26049
26710
  let t = Date.parse(e);
@@ -26055,7 +26716,7 @@ function fS(e, t) {
26055
26716
  }
26056
26717
  return !0;
26057
26718
  }
26058
- async function pS(e, t, n, r, i, a) {
26719
+ async function mS(e, t, n, r, i, a) {
26059
26720
  let o = t.filter((e) => e.componentId === "content-feed" || e.componentId === "article-list" || e.componentId === "nodeList" || e.componentId === "node-list");
26060
26721
  await Promise.all(o.map(async (t) => {
26061
26722
  let o = t.data || {}, s = o.nodeType || ["article"], c = (Array.isArray(s) ? s : String(s).split(",")).map((e) => String(e).trim()).filter(Boolean), l = {};
@@ -26103,7 +26764,7 @@ async function pS(e, t, n, r, i, a) {
26103
26764
  if (e.dataJson) try {
26104
26765
  t = typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson;
26105
26766
  } catch {}
26106
- i && dS(t.startShowingAt, t.stopShowingAt, i);
26767
+ i && fS(t.startShowingAt, t.stopShowingAt, i);
26107
26768
  let n = {};
26108
26769
  if (a) {
26109
26770
  let r = l[e.contentType || "article"] || [];
@@ -26127,7 +26788,7 @@ async function pS(e, t, n, r, i, a) {
26127
26788
  }
26128
26789
  }));
26129
26790
  }
26130
- async function mS(e, t, n, r, i, a, o = !1, s, c) {
26791
+ async function hS(e, t, n, r, i, a, o = !1, s, c) {
26131
26792
  if (!t) return { blocks: [] };
26132
26793
  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 || [];
26133
26794
  if (!u || u.length === 0) return { blocks: [] };
@@ -26163,11 +26824,11 @@ async function mS(e, t, n, r, i, a, o = !1, s, c) {
26163
26824
  try {
26164
26825
  n = (typeof t.dataJson == "string" ? JSON.parse(t.dataJson) : t.dataJson) || {};
26165
26826
  } catch {}
26166
- c && dS(n.startShowingAt, n.stopShowingAt, c);
26167
- let l = n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", u = fS(n.startShowingAt, n.stopShowingAt);
26827
+ c && fS(n.startShowingAt, n.stopShowingAt, c);
26828
+ let l = n.hidden === !0 || n.hidden === 1 || n.hidden === "1" || n.hidden === "true", u = pS(n.startShowingAt, n.stopShowingAt);
26168
26829
  if (!o && (l || !u)) return null;
26169
- 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);
26170
- return m = await fx(e, m), m = gS(m), m = await _S(e, m, a, s), m.blockId = p, {
26830
+ 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);
26831
+ return m = await fx(e, m), m = _S(m), m = await vS(e, m, a, s), m.blockId = p, {
26171
26832
  region: t.region || r,
26172
26833
  block: {
26173
26834
  instanceId: t.id,
@@ -26187,7 +26848,7 @@ async function mS(e, t, n, r, i, a, o = !1, s, c) {
26187
26848
  }
26188
26849
  return { blocks: [] };
26189
26850
  }
26190
- function hS(e, t = {}) {
26851
+ function gS(e, t = {}) {
26191
26852
  let n = {};
26192
26853
  for (let [r, i] of Object.entries(e)) r.endsWith("_meta") || [
26193
26854
  "disabledRegions",
@@ -26203,14 +26864,14 @@ function hS(e, t = {}) {
26203
26864
  ].includes(r) || r.startsWith("_") || (!t[r] || t[r].public !== !1) && (n[r] = i);
26204
26865
  return n;
26205
26866
  }
26206
- function gS(e) {
26207
- if (Array.isArray(e)) return e.map(gS);
26867
+ function _S(e) {
26868
+ if (Array.isArray(e)) return e.map(_S);
26208
26869
  if (!e || typeof e != "object") return e;
26209
26870
  if (typeof e.id == "string" && e.id.startsWith("ast_") && typeof e.url == "string") {
26210
26871
  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 ? {
26211
26872
  ...t,
26212
26873
  ...t.crops?.[r] || {}
26213
- } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, gS({
26874
+ } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, _S({
26214
26875
  ...n,
26215
26876
  title: n?.title ?? e.title ?? "",
26216
26877
  alt: n?.alt ?? e.alt ?? "",
@@ -26224,9 +26885,9 @@ function gS(e) {
26224
26885
  ...Object.keys(a).length > 0 ? { variants: a } : {}
26225
26886
  };
26226
26887
  }
26227
- return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, gS(t)]));
26888
+ return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, _S(t)]));
26228
26889
  }
26229
- async function _S(e, t, n, r) {
26890
+ async function vS(e, t, n, r) {
26230
26891
  if (typeof t == "string") {
26231
26892
  if (!t.includes("#node:") && !t.includes("data-node-id") && !t.includes("#asset:") && !t.includes("data-asset-id")) return t;
26232
26893
  let r = (e, t) => {
@@ -26267,25 +26928,25 @@ async function _S(e, t, n, r) {
26267
26928
  return /href\s*=\s*["'][^"']*["']/i.test(d) ? d = d.replace(/href\s*=\s*["'][^"']*["']/i, `href="${u}"`) : d += ` href="${u}"`, `<a ${d}>`;
26268
26929
  });
26269
26930
  }
26270
- if (Array.isArray(t)) return Promise.all(t.map((t) => _S(e, t, n, r)));
26931
+ if (Array.isArray(t)) return Promise.all(t.map((t) => vS(e, t, n, r)));
26271
26932
  if (t && typeof t == "object") {
26272
26933
  if (typeof t.href == "string" && (t.href.startsWith("#node:") || t.href.startsWith("#asset:"))) return {
26273
26934
  ...t,
26274
- href: await vS(e, t, n, r)
26935
+ href: await yS(e, t, n, r)
26275
26936
  };
26276
- let i = await Promise.all(Object.entries(t).map(async ([t, i]) => [t, await _S(e, i, n, r)]));
26937
+ let i = await Promise.all(Object.entries(t).map(async ([t, i]) => [t, await vS(e, i, n, r)]));
26277
26938
  return Object.fromEntries(i);
26278
26939
  }
26279
26940
  return t;
26280
26941
  }
26281
- async function vS(e, t, n, r) {
26942
+ async function yS(e, t, n, r) {
26282
26943
  let i = t.href.match(/^#node:(.+)$/), a = t.href.match(/^#asset:(.+)$/);
26283
- if (a) return yS(e, a[1], r);
26944
+ if (a) return bS(e, a[1], r);
26284
26945
  if (!i) return t.href;
26285
26946
  let o = i[1];
26286
26947
  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 || "#";
26287
26948
  }
26288
- async function yS(e, t, n) {
26949
+ async function bS(e, t, n) {
26289
26950
  let r = String(t), i = n.assetUrls.get(r);
26290
26951
  if (i) return i;
26291
26952
  let a = (async () => {
@@ -26294,7 +26955,7 @@ async function yS(e, t, n) {
26294
26955
  })();
26295
26956
  return n.assetUrls.set(r, a), a;
26296
26957
  }
26297
- function bS(e) {
26958
+ function xS(e) {
26298
26959
  let t = e.socialImage;
26299
26960
  if (!t || typeof t != "object") return null;
26300
26961
  let n = (e, t) => {
@@ -26325,7 +26986,7 @@ function bS(e) {
26325
26986
  ])
26326
26987
  };
26327
26988
  }
26328
- async function xS(e, t, n, r, i) {
26989
+ async function SS(e, t, n, r, i) {
26329
26990
  let a = {}, o = null;
26330
26991
  if (t) {
26331
26992
  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([
@@ -26363,20 +27024,20 @@ async function xS(e, t, n, r, i) {
26363
27024
  inheritedFields: a
26364
27025
  };
26365
27026
  }
26366
- function SS(e) {
27027
+ function CS(e) {
26367
27028
  let t = Number(e?.env?.CMS_NODE_CACHE_TTL);
26368
27029
  return Number.isFinite(t) && t >= 60 ? Math.floor(t) : 300;
26369
27030
  }
26370
- async function CS(e, t, n, r) {
27031
+ async function wS(e, t, n, r) {
26371
27032
  try {
26372
27033
  await e.set(t, n, r);
26373
27034
  } catch (e) {
26374
27035
  console.warn("[CMS Cache] Failed to write node response to cache:", e);
26375
27036
  }
26376
27037
  }
26377
- async function wS(e) {
27038
+ async function TS(e) {
26378
27039
  try {
26379
- 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 = "";
27040
+ 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 = "";
26380
27041
  u.includes("/node/") ? d = u.substring(u.indexOf("/node/") + 6) : u.endsWith("/node") && (d = "");
26381
27042
  try {
26382
27043
  d = decodeURIComponent(d);
@@ -26424,12 +27085,12 @@ async function wS(e) {
26424
27085
  e.defaultLanguage ? w = String(e.defaultLanguage).trim() : e.language && (w = String(e.language).trim());
26425
27086
  } catch {}
26426
27087
  }
26427
- 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);
26428
- if (!s && !te) {
26429
- let t = await O.get(D);
27088
+ 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);
27089
+ if (!s && !ee) {
27090
+ let t = await k.get(O);
26430
27091
  if (t) {
26431
27092
  e.header("X-Cache", "HIT");
26432
- let n = k;
27093
+ let n = A;
26433
27094
  if (t.meta && t.meta.nextEventTimestamp) {
26434
27095
  let e = Math.floor((t.meta.nextEventTimestamp - Date.now()) / 1e3);
26435
27096
  e > 0 && e < n ? n = e : e <= 0 && (n = 0);
@@ -26437,28 +27098,28 @@ async function wS(e) {
26437
27098
  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);
26438
27099
  }
26439
27100
  }
26440
- let A = S?.parentId || null;
26441
- if (!S && !A) {
27101
+ let j = S?.parentId || null;
27102
+ if (!S && !j) {
26442
27103
  let e = f.split("/").filter(Boolean);
26443
27104
  if (e.length > 1) {
26444
27105
  e.pop();
26445
27106
  let n = "/" + e.join("/"), r = await t.prepare("SELECT nodeId FROM node_routes WHERE path = ? AND channelId = ? LIMIT 1").get(n, g);
26446
27107
  if (r?.nodeId) {
26447
27108
  let e = await t.prepare("SELECT contentId, treeId FROM tree_nodes WHERE contentId = ? LIMIT 1").get(r.nodeId);
26448
- e && (A = e.contentId, b = e.treeId);
27109
+ e && (j = e.contentId, b = e.treeId);
26449
27110
  }
26450
27111
  }
26451
- if (!A) {
27112
+ if (!j) {
26452
27113
  let e = await t.prepare("SELECT contentId, treeId FROM tree_nodes WHERE parentId IS NULL ORDER BY sortOrder ASC LIMIT 1").get();
26453
- e && (A = e.contentId, b = e.treeId);
27114
+ e && (j = e.contentId, b = e.treeId);
26454
27115
  }
26455
27116
  }
26456
- let ne = v?.path || (f === "" ? "/" : f), j = {
27117
+ let te = v?.path || (f === "" ? "/" : f), ne = {
26457
27118
  id: y.id,
26458
27119
  title: y.title,
26459
27120
  slug: y.slug,
26460
- language: E,
26461
- path: ne,
27121
+ language: D,
27122
+ path: te,
26462
27123
  nodeType: y.contentType,
26463
27124
  createdAt: y.createdAt,
26464
27125
  updatedAt: y.updatedAt
@@ -26470,37 +27131,37 @@ async function wS(e) {
26470
27131
  if (x && x.node && x.node.dataJson && (fe = x.node.dataJson), fe) try {
26471
27132
  de = typeof fe == "string" ? JSON.parse(fe) : fe;
26472
27133
  } catch {}
26473
- 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);
26474
- 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;
27134
+ 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);
27135
+ 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;
26475
27136
  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);
26476
- let ve = await fx(t, hS(de, oe));
26477
- ve = gS(ve), ve = await _S(t, ve, g, n), delete ve.language;
26478
- let ye = bS(ve);
26479
- 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;
26480
- 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";
27137
+ let ve = await fx(t, gS(de, oe));
27138
+ ve = _S(ve), ve = await vS(t, ve, g, n), delete ve.language;
27139
+ let ye = xS(ve);
27140
+ 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;
27141
+ 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";
26481
27142
  if (!s && (be || xe || Se && !Ce)) return e.json({ error: "Node is hidden, offline, or has never been published." }, 404);
26482
27143
  let we = [];
26483
27144
  if (S?.treeNodeId) {
26484
- 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;
27145
+ 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;
26485
27146
  we = n.map((e) => {
26486
27147
  let t = {}, n = s && e.draftDataJson || e.dataJson;
26487
27148
  if (!n) return null;
26488
27149
  try {
26489
27150
  t = (typeof n == "string" ? JSON.parse(n) : n) || {};
26490
27151
  } catch {}
26491
- 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, "");
26492
- return dS(t.startShowingAt, t.stopShowingAt, r), !s && (i || !o) ? null : {
27152
+ 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, "");
27153
+ return fS(t.startShowingAt, t.stopShowingAt, r), !s && (i || !o) ? null : {
26493
27154
  treeNodeId: e.treeNodeId,
26494
27155
  id: e.id,
26495
27156
  title: e.title,
26496
27157
  slug: c,
26497
- language: e.language?.trim() || E || null,
27158
+ language: e.language?.trim() || D || null,
26498
27159
  path: `${a}/${c}`.replace(/\/+/g, "/"),
26499
27160
  nodeType: e.nodeType
26500
27161
  };
26501
27162
  }).filter(Boolean);
26502
27163
  }
26503
- j.children = we;
27164
+ ne.children = we;
26504
27165
  let Te = [];
26505
27166
  if (x && x.blocks && Array.isArray(x.blocks)) Te = x.blocks.map((e) => ({
26506
27167
  ...e,
@@ -26515,11 +27176,11 @@ async function wS(e) {
26515
27176
  try {
26516
27177
  a = (typeof e.dataJson == "string" ? JSON.parse(e.dataJson) : e.dataJson) || {};
26517
27178
  } catch {}
26518
- dS(a.startShowingAt, a.stopShowingAt, r);
26519
- let o = a.hidden === !0 || a.hidden === 1 || a.hidden === "1" || a.hidden === "true", c = fS(a.startShowingAt, a.stopShowingAt);
27179
+ fS(a.startShowingAt, a.stopShowingAt, r);
27180
+ let o = a.hidden === !0 || a.hidden === 1 || a.hidden === "1" || a.hidden === "true", c = pS(a.startShowingAt, a.stopShowingAt);
26520
27181
  if (!s && (o || !c)) return null;
26521
- 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);
26522
- return f = await fx(t, f), f = gS(f), f = await _S(t, f, g, n), f.blockId = d, {
27182
+ 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);
27183
+ return f = await fx(t, f), f = _S(f), f = await vS(t, f, g, n), f.blockId = d, {
26523
27184
  region: i,
26524
27185
  block: {
26525
27186
  instanceId: e.id,
@@ -26543,8 +27204,8 @@ async function wS(e) {
26543
27204
  };
26544
27205
  for (let [e, i] of Object.entries(ke)) {
26545
27206
  let a = Ee[e] && Ee[e].length > 0, o = !!se[e];
26546
- 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) {
26547
- let i = await mS(t, A, b, e, re, g, s, n, r);
27207
+ 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) {
27208
+ let i = await hS(t, j, b, e, re, g, s, n, r);
26548
27209
  if (i.blocks.length > 0 && (Ee[e] = i.blocks, De[e] = {
26549
27210
  isInherited: !0,
26550
27211
  inheritedFromId: i.inheritedFromId,
@@ -26556,7 +27217,7 @@ async function wS(e) {
26556
27217
  });
26557
27218
  }
26558
27219
  }
26559
- await Promise.all(Object.keys(Ee).map((e) => pS(t, Ee[e], g, E, r, re)));
27220
+ await Promise.all(Object.keys(Ee).map((e) => mS(t, Ee[e], g, D, r, re)));
26560
27221
  let Ae = null, je = null;
26561
27222
  if (r.length > 0) {
26562
27223
  je = Math.min(...r);
@@ -26566,19 +27227,19 @@ async function wS(e) {
26566
27227
  let Me = {
26567
27228
  channelId: g || _,
26568
27229
  treeId: b,
26569
- language: E,
27230
+ language: D,
26570
27231
  meta: {
26571
27232
  cacheTtl: Ae,
26572
27233
  nextEventTimestamp: je
26573
27234
  },
26574
- node: j,
27235
+ node: ne,
26575
27236
  content: Ee,
26576
27237
  regionMeta: De
26577
27238
  };
26578
- if (!s && !te) {
27239
+ if (!s && !ee) {
26579
27240
  e.header("X-Cache", "MISS");
26580
- let t = Ae === null ? k : Ae;
26581
- e.header("Cache-Control", `public, max-age=${t}, s-maxage=${t}`), await CS(O, D, Me, t);
27241
+ let t = Ae === null ? A : Ae;
27242
+ e.header("Cache-Control", `public, max-age=${t}, s-maxage=${t}`), await wS(k, O, Me, t);
26582
27243
  } else e.header("Cache-Control", "no-cache, no-store, must-revalidate");
26583
27244
  return e.json(Me, 200);
26584
27245
  } catch (t) {
@@ -26588,17 +27249,17 @@ async function wS(e) {
26588
27249
  }, 500);
26589
27250
  }
26590
27251
  }
26591
- var TS = X({
27252
+ var ES = X({
26592
27253
  channelId: J().optional().openapi({ description: "The ID or key of the channel" }),
26593
27254
  channel: J().optional().openapi({ description: "Legacy alias for channelId" }),
26594
27255
  lang: J().optional().openapi({ description: "Requested language code" }),
26595
27256
  preview: lv(["true", "false"]).optional().openapi({ description: "Request unpublished draft data" }),
26596
27257
  revisionId: J().optional().openapi({ description: "Historical revision version to load" }),
26597
27258
  treeId: J().optional().openapi({ description: "The ID of the tree to resolve paths against" })
26598
- }), ES = X({
27259
+ }), DS = X({
26599
27260
  error: J(),
26600
27261
  details: J().optional()
26601
- }).openapi("ErrorResponse"), DS = X({
27262
+ }).openapi("ErrorResponse"), OS = X({
26602
27263
  channelId: G_([J(), c_()]),
26603
27264
  treeId: J().nullable(),
26604
27265
  language: J().nullable(),
@@ -26613,32 +27274,32 @@ var TS = X({
26613
27274
  inheritedFromId: J().optional(),
26614
27275
  inheritedFromTitle: J().optional()
26615
27276
  }))
26616
- }).openapi("NodeResponse"), OS = eb({
27277
+ }).openapi("NodeResponse"), kS = eb({
26617
27278
  method: "get",
26618
27279
  path: "/{path}",
26619
27280
  summary: "Fetch CMS Node Content",
26620
27281
  tags: ["Public Node API"],
26621
27282
  request: {
26622
27283
  params: X({ path: J().optional() }),
26623
- query: TS
27284
+ query: ES
26624
27285
  },
26625
27286
  responses: {
26626
27287
  200: {
26627
27288
  description: "Fully hydrated CMS Node",
26628
- content: { "application/json": { schema: DS } }
27289
+ content: { "application/json": { schema: OS } }
26629
27290
  },
26630
27291
  404: {
26631
27292
  description: "Not found",
26632
- content: { "application/json": { schema: ES } }
27293
+ content: { "application/json": { schema: DS } }
26633
27294
  },
26634
27295
  500: {
26635
27296
  description: "Server error",
26636
- content: { "application/json": { schema: ES } }
27297
+ content: { "application/json": { schema: DS } }
26637
27298
  }
26638
27299
  }
26639
27300
  });
26640
- lS.openapi(OS, wS), lS.get("*", wS);
26641
- var kS = new $y(), AS = X({
27301
+ uS.openapi(kS, TS), uS.get("*", TS);
27302
+ var AS = new $y(), jS = X({
26642
27303
  nodeType: J().default("article").openapi({ description: "Content types (comma separated)" }),
26643
27304
  channelId: J().optional().openapi({ description: "Channel ID or key" }),
26644
27305
  limit: Ky().min(1).max(50).default(12).openapi({ description: "Number of items (max 50)" }),
@@ -26647,7 +27308,7 @@ var kS = new $y(), AS = X({
26647
27308
  authors: G_([J(), z_(J())]).optional(),
26648
27309
  categories: G_([J(), z_(J())]).optional(),
26649
27310
  tags: G_([J(), z_(J())]).optional()
26650
- }), jS = async (e) => {
27311
+ }), MS = async (e) => {
26651
27312
  try {
26652
27313
  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 = {};
26653
27314
  for (let e of i) {
@@ -26703,12 +27364,12 @@ var kS = new $y(), AS = X({
26703
27364
  } catch (t) {
26704
27365
  return console.error("[CMS API] Error fetching nodes list:", t), e.json({ error: "Failed to fetch nodes list" }, 500);
26705
27366
  }
26706
- }, MS = eb({
27367
+ }, NS = eb({
26707
27368
  method: "get",
26708
27369
  path: "/",
26709
27370
  summary: "Fetch filtered list of nodes",
26710
27371
  tags: ["Public Node API"],
26711
- request: { query: AS },
27372
+ request: { query: jS },
26712
27373
  responses: {
26713
27374
  200: {
26714
27375
  description: "List of nodes",
@@ -26717,9 +27378,9 @@ var kS = new $y(), AS = X({
26717
27378
  500: { description: "Server error" }
26718
27379
  }
26719
27380
  });
26720
- kS.openapi(MS, jS);
26721
- var NS = new $y();
26722
- function PS(e, t) {
27381
+ AS.openapi(NS, MS);
27382
+ var PS = new $y();
27383
+ function FS(e, t) {
26723
27384
  let n = /* @__PURE__ */ new Date();
26724
27385
  if (e && String(e).trim() !== "") {
26725
27386
  let t = new Date(e);
@@ -26731,22 +27392,22 @@ function PS(e, t) {
26731
27392
  }
26732
27393
  return !0;
26733
27394
  }
26734
- async function FS(e, t, n, r) {
27395
+ async function IS(e, t, n, r) {
26735
27396
  try {
26736
27397
  await e.set(t, n, r);
26737
27398
  } catch (e) {
26738
27399
  console.warn("[CMS Cache] Failed to write tree response to cache:", e);
26739
27400
  }
26740
27401
  }
26741
- var IS = X({ treeParam: J().openapi({ description: "The ID or key of the requested tree (e.g., \"main-nav\")" }) }), LS = X({
27402
+ var LS = X({ treeParam: J().openapi({ description: "The ID or key of the requested tree (e.g., \"main-nav\")" }) }), RS = X({
26742
27403
  channelId: J().optional().openapi({ description: "Channel ID to resolve context-aware routing" }),
26743
27404
  channel: J().optional().openapi({ description: "Legacy alias for channelId" }),
26744
27405
  lang: J().optional().openapi({ description: "Requested language code for tree nodes" }),
26745
27406
  preview: lv(["true", "false"]).optional().openapi({ description: "Set to true to retrieve unpublished draft data" })
26746
- }), RS = X({
27407
+ }), zS = X({
26747
27408
  error: J(),
26748
27409
  details: J().optional()
26749
- }).openapi("ErrorResponse"), zS = qv(() => X({
27410
+ }).openapi("ErrorResponse"), BS = qv(() => X({
26750
27411
  id: G_([J(), c_()]),
26751
27412
  treeNodeId: G_([J(), c_()]),
26752
27413
  parentId: G_([J(), c_()]).nullable(),
@@ -26759,40 +27420,40 @@ var IS = X({ treeParam: J().openapi({ description: "The ID or key of the request
26759
27420
  summary: J().optional(),
26760
27421
  url: J().optional(),
26761
27422
  target: J().optional(),
26762
- children: z_(zS).optional()
26763
- }).passthrough()).openapi("TreeItem"), BS = X({
27423
+ children: z_(BS).optional()
27424
+ }).passthrough()).openapi("TreeItem"), VS = X({
26764
27425
  treeId: G_([c_(), J()]),
26765
27426
  key: J(),
26766
27427
  channelId: J(),
26767
27428
  language: J().nullable(),
26768
27429
  label: J(),
26769
- items: z_(zS)
26770
- }).catchall(k_()).openapi("TreeResponse"), VS = eb({
27430
+ items: z_(BS)
27431
+ }).catchall(k_()).openapi("TreeResponse"), HS = eb({
26771
27432
  method: "get",
26772
27433
  path: "/{treeParam}",
26773
27434
  summary: "Fetch CMS Navigation Tree",
26774
27435
  description: "Retrieves a fully hydrated, recursive navigation tree structure. Uses $O(1)$ pre-computed routing table paths.",
26775
27436
  tags: ["Public Tree API"],
26776
27437
  request: {
26777
- params: IS,
26778
- query: LS
27438
+ params: LS,
27439
+ query: RS
26779
27440
  },
26780
27441
  responses: {
26781
27442
  200: {
26782
27443
  description: "Fully hydrated CMS Tree payload",
26783
- content: { "application/json": { schema: BS } }
27444
+ content: { "application/json": { schema: VS } }
26784
27445
  },
26785
27446
  404: {
26786
27447
  description: "Tree or Channel not found / inactive",
26787
- content: { "application/json": { schema: RS } }
27448
+ content: { "application/json": { schema: zS } }
26788
27449
  },
26789
27450
  500: {
26790
27451
  description: "Server error during hydration",
26791
- content: { "application/json": { schema: RS } }
27452
+ content: { "application/json": { schema: zS } }
26792
27453
  }
26793
27454
  }
26794
27455
  });
26795
- NS.openapi(VS, async (e) => {
27456
+ PS.openapi(HS, async (e) => {
26796
27457
  try {
26797
27458
  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;
26798
27459
  if (i && i !== "default" && i !== "all") {
@@ -26855,7 +27516,7 @@ NS.openapi(VS, async (e) => {
26855
27516
  return (S.get(n) || []).map((e) => {
26856
27517
  let n = C.get(String(e.id)) || {}, r = {};
26857
27518
  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);
26858
- 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 = {
27519
+ 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 = {
26859
27520
  id: e.id,
26860
27521
  treeNodeId: e.id,
26861
27522
  parentId: e.parentId || null,
@@ -26881,7 +27542,7 @@ NS.openapi(VS, async (e) => {
26881
27542
  ...b,
26882
27543
  items: w(null)
26883
27544
  };
26884
- return !o && !h && (e.header("X-Cache", "MISS"), await FS(p, m, T, 300)), e.json(T, 200);
27545
+ return !o && !h && (e.header("X-Cache", "MISS"), await IS(p, m, T, 300)), e.json(T, 200);
26885
27546
  } catch (t) {
26886
27547
  return console.error("[CMS Public Tree API] Error:", t), e.json({
26887
27548
  error: "Failed to fetch public tree",
@@ -26889,19 +27550,19 @@ NS.openapi(VS, async (e) => {
26889
27550
  }, 500);
26890
27551
  }
26891
27552
  });
26892
- var HS = new $y();
26893
- function US(e) {
27553
+ var US = new $y();
27554
+ function WS(e) {
26894
27555
  let t = Number(e?.env?.CMS_CHANNEL_CACHE_TTL);
26895
27556
  return Number.isFinite(t) && t >= 60 ? Math.floor(t) : 300;
26896
27557
  }
26897
- async function WS(e, t, n, r) {
27558
+ async function GS(e, t, n, r) {
26898
27559
  try {
26899
27560
  await e.set(t, n, r);
26900
27561
  } catch (e) {
26901
27562
  console.warn("[CMS Cache] Failed to write channel response to cache:", e);
26902
27563
  }
26903
27564
  }
26904
- function GS(e, t) {
27565
+ function KS(e, t) {
26905
27566
  let n = {}, r = (e) => {
26906
27567
  if (!e || typeof e != "string") return;
26907
27568
  let n = t?.fieldSets?.[e] || t?.fieldsets?.[e] || t?.definitions?.[e] || t?.channels?.[e] || t?.[e];
@@ -26912,7 +27573,7 @@ function GS(e, t) {
26912
27573
  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);
26913
27574
  return n;
26914
27575
  }
26915
- function KS(e, t = {}) {
27576
+ function qS(e, t = {}) {
26916
27577
  let n = {}, r = Object.keys(t).length > 0;
26917
27578
  for (let [i, a] of Object.entries(e)) {
26918
27579
  if (i.endsWith("_meta") || [
@@ -26931,14 +27592,14 @@ function KS(e, t = {}) {
26931
27592
  }
26932
27593
  return n;
26933
27594
  }
26934
- function qS(e) {
26935
- if (Array.isArray(e)) return e.map(qS);
27595
+ function JS(e) {
27596
+ if (Array.isArray(e)) return e.map(JS);
26936
27597
  if (!e || typeof e != "object") return e;
26937
27598
  if (typeof e.id == "string" && e.id.startsWith("ast_") && typeof e.url == "string") {
26938
27599
  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 ? {
26939
27600
  ...t,
26940
27601
  ...t.crops?.[r] || {}
26941
- } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, qS({
27602
+ } : t, a = Object.fromEntries(Object.entries(n).filter(([, t]) => t?.id !== e.id).map(([t, n]) => [t, JS({
26942
27603
  ...n,
26943
27604
  title: n?.title ?? e.title ?? "",
26944
27605
  alt: n?.alt ?? e.alt ?? "",
@@ -26952,9 +27613,9 @@ function qS(e) {
26952
27613
  ...Object.keys(a).length > 0 ? { variants: a } : {}
26953
27614
  };
26954
27615
  }
26955
- return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, qS(t)]));
27616
+ return Object.fromEntries(Object.entries(e).map(([e, t]) => [e, JS(t)]));
26956
27617
  }
26957
- async function JS(e, t, n) {
27618
+ async function YS(e, t, n) {
26958
27619
  let r = t.href.match(/^#node:(.+)$/), i = t.href.match(/^#asset:(.+)$/);
26959
27620
  if (i) {
26960
27621
  let t = i[1], n = await e.prepare("SELECT cdnUrl, storageKeyPrivate FROM assets WHERE id = ?").get(t);
@@ -26964,7 +27625,7 @@ async function JS(e, t, n) {
26964
27625
  let a = r[1];
26965
27626
  return (await e.prepare("SELECT path FROM node_routes WHERE nodeId = ? AND channelId = ? AND isCanonical = 1 LIMIT 1").get(Number(a), n))?.path || "#";
26966
27627
  }
26967
- async function YS(e, t, n) {
27628
+ async function XS(e, t, n) {
26968
27629
  if (typeof t == "string") {
26969
27630
  if (!t.includes("#node:") && !t.includes("data-node-id") && !t.includes("#asset:") && !t.includes("data-asset-id")) return t;
26970
27631
  let r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
@@ -26997,52 +27658,52 @@ async function YS(e, t, n) {
26997
27658
  return /href\s*=\s*["'][^"']*["']/i.test(d) ? d = d.replace(/href\s*=\s*["'][^"']*["']/i, `href="${u}"`) : d += ` href="${u}"`, `<a ${d}>`;
26998
27659
  });
26999
27660
  }
27000
- if (Array.isArray(t)) return Promise.all(t.map((t) => YS(e, t, n)));
27661
+ if (Array.isArray(t)) return Promise.all(t.map((t) => XS(e, t, n)));
27001
27662
  if (t && typeof t == "object") {
27002
27663
  if (typeof t.href == "string" && (t.href.startsWith("#node:") || t.href.startsWith("#asset:"))) {
27003
- 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)]));
27664
+ 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)]));
27004
27665
  return {
27005
27666
  ...Object.fromEntries(i),
27006
27667
  href: r
27007
27668
  };
27008
27669
  }
27009
- let r = await Promise.all(Object.entries(t).map(async ([t, r]) => [t, await YS(e, r, n)]));
27670
+ let r = await Promise.all(Object.entries(t).map(async ([t, r]) => [t, await XS(e, r, n)]));
27010
27671
  return Object.fromEntries(r);
27011
27672
  }
27012
27673
  return t;
27013
27674
  }
27014
- 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({
27675
+ 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({
27015
27676
  error: J(),
27016
27677
  details: J().optional()
27017
- }).openapi("ErrorResponse"), $S = X({
27678
+ }).openapi("ErrorResponse"), eC = X({
27018
27679
  id: G_([c_(), J()]),
27019
27680
  key: J()
27020
- }).catchall(k_()).openapi("ChannelResponse"), eC = eb({
27681
+ }).catchall(k_()).openapi("ChannelResponse"), tC = eb({
27021
27682
  method: "get",
27022
27683
  path: "/{channelParam}",
27023
27684
  summary: "Fetch CMS Channel Settings",
27024
27685
  description: "Retrieves the fully hydrated, public-facing settings and payload for a specific CMS channel.",
27025
27686
  tags: ["Public Channel API"],
27026
27687
  request: {
27027
- params: XS,
27028
- query: ZS
27688
+ params: ZS,
27689
+ query: QS
27029
27690
  },
27030
27691
  responses: {
27031
27692
  200: {
27032
27693
  description: "Fully hydrated CMS Channel payload",
27033
- content: { "application/json": { schema: $S } }
27694
+ content: { "application/json": { schema: eC } }
27034
27695
  },
27035
27696
  404: {
27036
27697
  description: "Channel not found or inactive",
27037
- content: { "application/json": { schema: QS } }
27698
+ content: { "application/json": { schema: $S } }
27038
27699
  },
27039
27700
  500: {
27040
27701
  description: "Server error during hydration",
27041
- content: { "application/json": { schema: QS } }
27702
+ content: { "application/json": { schema: $S } }
27042
27703
  }
27043
27704
  }
27044
27705
  });
27045
- HS.openapi(eC, async (e) => {
27706
+ US.openapi(tC, async (e) => {
27046
27707
  try {
27047
27708
  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);
27048
27709
  if (!i && !a) {
@@ -27053,23 +27714,23 @@ HS.openapi(eC, async (e) => {
27053
27714
  if (!c) return e.json({ error: `Channel '${n}' not found` }, 404);
27054
27715
  let l = c.status === "disabled" || c.status === "inactive" || c.isEnabled === 0 || c.isEnabled === !1;
27055
27716
  if (!i && l) return e.json({ error: `Channel '${c.key || n}' is currently inactive` }, 404);
27056
- 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;
27717
+ 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;
27057
27718
  if (g) try {
27058
27719
  h = typeof g == "string" ? JSON.parse(g) : g;
27059
27720
  } catch (e) {
27060
27721
  console.warn("[CMS Public Channel API] Failed to parse channel dataJson:", e);
27061
27722
  }
27062
- let _ = KS({
27723
+ let _ = qS({
27063
27724
  ...h,
27064
27725
  ...c
27065
27726
  }, m);
27066
- _ = await fx(t, _), _ = qS(_), _ = await YS(t, _, u);
27727
+ _ = await fx(t, _), _ = JS(_), _ = await XS(t, _, u);
27067
27728
  let v = {
27068
27729
  id: c.id,
27069
27730
  key: c.key,
27070
27731
  ..._
27071
27732
  };
27072
- return !i && !a && (e.header("X-Cache", "MISS"), await WS(s, o, v, US(e))), e.json(v, 200);
27733
+ return !i && !a && (e.header("X-Cache", "MISS"), await GS(s, o, v, WS(e))), e.json(v, 200);
27073
27734
  } catch (t) {
27074
27735
  return console.error("[CMS Public Channel API] Error:", t), e.json({
27075
27736
  error: "Failed to fetch public channel",
@@ -27077,8 +27738,8 @@ HS.openapi(eC, async (e) => {
27077
27738
  }, 500);
27078
27739
  }
27079
27740
  });
27080
- var tC = new $y();
27081
- function nC(e, t) {
27741
+ var nC = new $y();
27742
+ function rC(e, t) {
27082
27743
  if (t === "webp") return "image/webp";
27083
27744
  if (t === "avif") return "image/avif";
27084
27745
  if (t === "jpeg" || t === "jpg") return "image/jpeg";
@@ -27087,7 +27748,7 @@ function nC(e, t) {
27087
27748
  let n = e.toLowerCase();
27088
27749
  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";
27089
27750
  }
27090
- var rC = [
27751
+ var iC = [
27091
27752
  320,
27092
27753
  640,
27093
27754
  768,
@@ -27097,10 +27758,10 @@ var rC = [
27097
27758
  2560,
27098
27759
  3840
27099
27760
  ];
27100
- function iC(e) {
27101
- if (!(!e || isNaN(e) || e <= 0)) return rC.reduce((t, n) => Math.abs(n - e) < Math.abs(t - e) ? n : t);
27761
+ function aC(e) {
27762
+ if (!(!e || isNaN(e) || e <= 0)) return iC.reduce((t, n) => Math.abs(n - e) < Math.abs(t - e) ? n : t);
27102
27763
  }
27103
- var aC = eb({
27764
+ var oC = eb({
27104
27765
  method: "get",
27105
27766
  path: "/*",
27106
27767
  summary: "Serve & Optimize Media Assets",
@@ -27160,11 +27821,11 @@ var aC = eb({
27160
27821
  }
27161
27822
  }
27162
27823
  });
27163
- tC.openapi(aC, async (e) => {
27824
+ nC.openapi(oC, async (e) => {
27164
27825
  try {
27165
27826
  let t = e.req.path.replace(/^\/media\//, "").replace(/^\//, "");
27166
27827
  if (!t) return e.text("Asset key missing", 400);
27167
- 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 = "";
27828
+ 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 = "";
27168
27829
  if (o) {
27169
27830
  let e = !a || a === "auto";
27170
27831
  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");
@@ -27183,7 +27844,7 @@ tC.openapi(aC, async (e) => {
27183
27844
  if (!h) return e.text(`Asset not found: ${t}`, 404);
27184
27845
  if (!o) {
27185
27846
  let n = e.body(h, 200, {
27186
- "Content-Type": nC(t),
27847
+ "Content-Type": rC(t),
27187
27848
  "Cache-Control": "public, max-age=31536000, immutable"
27188
27849
  });
27189
27850
  return u && f && e.executionCtx?.waitUntil && e.executionCtx.waitUntil(u.put(f, n.clone())), n;
@@ -27197,7 +27858,7 @@ tC.openapi(aC, async (e) => {
27197
27858
  key: t,
27198
27859
  env: e.env,
27199
27860
  req: e.req.raw
27200
- }), v = nC(t, l), y = e.body(_, 200, {
27861
+ }), v = rC(t, l), y = e.body(_, 200, {
27201
27862
  "Content-Type": v,
27202
27863
  "Cache-Control": "public, max-age=31536000, immutable"
27203
27864
  });
@@ -27206,8 +27867,8 @@ tC.openapi(aC, async (e) => {
27206
27867
  return console.error("❌ [Public Assets Error]:", t), e.text("Internal Server Error", 500);
27207
27868
  }
27208
27869
  });
27209
- var oC = new $y();
27210
- function sC(e, t) {
27870
+ var sC = new $y();
27871
+ function cC(e, t) {
27211
27872
  let n = /* @__PURE__ */ new Date();
27212
27873
  if (e && String(e).trim() !== "") {
27213
27874
  let t = new Date(e);
@@ -27219,31 +27880,31 @@ function sC(e, t) {
27219
27880
  }
27220
27881
  return !0;
27221
27882
  }
27222
- var cC = X({
27883
+ var lC = X({
27223
27884
  channelId: J().optional().openapi({ description: "Optional channel ID/key to filter and resolve root paths for" }),
27224
27885
  channel: J().optional().openapi({ description: "Legacy alias for channelId" })
27225
- }), lC = z_(J()).openapi("PathsResponse"), uC = X({
27886
+ }), uC = z_(J()).openapi("PathsResponse"), dC = X({
27226
27887
  error: J(),
27227
27888
  details: J().optional()
27228
- }).openapi("ErrorResponse"), dC = eb({
27889
+ }).openapi("ErrorResponse"), fC = eb({
27229
27890
  method: "get",
27230
27891
  path: "/",
27231
27892
  summary: "Fetch All Public Paths",
27232
27893
  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.",
27233
27894
  tags: ["Public Paths API"],
27234
- request: { query: cC },
27895
+ request: { query: lC },
27235
27896
  responses: {
27236
27897
  200: {
27237
27898
  description: "Array of valid public URL paths",
27238
- content: { "application/json": { schema: lC } }
27899
+ content: { "application/json": { schema: uC } }
27239
27900
  },
27240
27901
  500: {
27241
27902
  description: "Server error fetching paths",
27242
- content: { "application/json": { schema: uC } }
27903
+ content: { "application/json": { schema: dC } }
27243
27904
  }
27244
27905
  }
27245
27906
  });
27246
- oC.openapi(dC, async (e) => {
27907
+ sC.openapi(fC, async (e) => {
27247
27908
  try {
27248
27909
  let t = e.get("db"), n = e.req.valid("query"), r = n.channelId || n.channel, i = "", a = [];
27249
27910
  if (r && r !== "all") {
@@ -27264,19 +27925,19 @@ oC.openapi(dC, async (e) => {
27264
27925
  ${i}
27265
27926
  ORDER BY nr.path ASC
27266
27927
  `).all(...a), s = Array.isArray(o) ? o : o?.results || [], c = [];
27267
- for (let e of s) e.nodeType !== "external-link" && e.path && sC(e.startShowingAt, e.stopShowingAt) && c.push(e.path);
27928
+ for (let e of s) e.nodeType !== "external-link" && e.path && cC(e.startShowingAt, e.stopShowingAt) && c.push(e.path);
27268
27929
  let l = [...new Set(c)];
27269
27930
  return e.json(l, 200);
27270
27931
  } catch (t) {
27271
27932
  return console.error("[CMS Paths API] Error:", t), e.json({ error: "Failed to fetch paths" }, 500);
27272
27933
  }
27273
27934
  });
27274
- var fC = new $y();
27275
- function pC(e) {
27935
+ var pC = new $y();
27936
+ function mC(e) {
27276
27937
  let t = (e || "").trim().toLowerCase(), n = px()?.taxonomies || {};
27277
27938
  return n[t] ? t : n[`${t}s`] ? `${t}s` : t.endsWith("s") && n[t.slice(0, -1)] ? t.slice(0, -1) : t;
27278
27939
  }
27279
- var mC = X({
27940
+ var hC = X({
27280
27941
  id: c_(),
27281
27942
  taxonomy: J(),
27282
27943
  key: J(),
@@ -27286,14 +27947,14 @@ var mC = X({
27286
27947
  data: tv(k_()),
27287
27948
  createdAt: J(),
27288
27949
  updatedAt: J()
27289
- }), hC = X({
27950
+ }), gC = X({
27290
27951
  taxonomy: J(),
27291
- items: z_(mC),
27952
+ items: z_(hC),
27292
27953
  total: c_()
27293
- }).openapi("TaxonomyResponse"), gC = X({
27954
+ }).openapi("TaxonomyResponse"), _C = X({
27294
27955
  error: J(),
27295
27956
  details: J().optional()
27296
- }).openapi("ErrorResponse"), _C = eb({
27957
+ }).openapi("ErrorResponse"), vC = eb({
27297
27958
  method: "get",
27298
27959
  path: "/{taxonomy}",
27299
27960
  summary: "Fetch Public Taxonomy Terms",
@@ -27303,17 +27964,17 @@ var mC = X({
27303
27964
  responses: {
27304
27965
  200: {
27305
27966
  description: "List of taxonomy terms",
27306
- content: { "application/json": { schema: hC } }
27967
+ content: { "application/json": { schema: gC } }
27307
27968
  },
27308
27969
  500: {
27309
27970
  description: "Server error",
27310
- content: { "application/json": { schema: gC } }
27971
+ content: { "application/json": { schema: _C } }
27311
27972
  }
27312
27973
  }
27313
27974
  });
27314
- fC.openapi(_C, async (e) => {
27975
+ pC.openapi(vC, async (e) => {
27315
27976
  try {
27316
- 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";
27977
+ 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";
27317
27978
  if (!o) {
27318
27979
  let t = await n.get(a);
27319
27980
  if (t) return e.header("X-Cache", "HIT"), e.json(t);
@@ -27347,7 +28008,7 @@ fC.openapi(_C, async (e) => {
27347
28008
  return console.error("[Public Taxonomy API] Error fetching terms:", t), e.json({ error: "Failed to fetch taxonomy terms" }, 500);
27348
28009
  }
27349
28010
  });
27350
- var $ = new $y(), vC = !1;
28011
+ var $ = new $y(), yC = !1;
27351
28012
  $.use("*", t()), $.use("/media/*", t({
27352
28013
  origin: "*",
27353
28014
  allowMethods: [
@@ -27368,13 +28029,13 @@ $.use("*", t()), $.use("/media/*", t({
27368
28029
  let n = new URL(e.req.url), r = (e.req.header("host") || n.hostname).split(":")[0];
27369
28030
  e.set("currentDomain", r);
27370
28031
  let i = wb(e);
27371
- if (e.set("db", i), !vC) try {
27372
- await Mb(i, e.env?.BUNDLED_DEFINITIONS, e.env?.KAMA_EXTENSIONS), vC = !0;
28032
+ if (e.set("db", i), !yC) try {
28033
+ await Mb(i, e.env?.BUNDLED_DEFINITIONS, e.env?.KAMA_EXTENSIONS), yC = !0;
27373
28034
  } catch (e) {
27374
28035
  console.error("❌ [CMS Server] Failed to initialize system tables on cold start:", e);
27375
28036
  }
27376
28037
  await t();
27377
- }), $.route("/media", tC), $.use("/media/*", Pb()), $.get("/api/cms/ui-extensions", (e) => {
28038
+ }), $.route("/media", nC), $.use("/media/*", Pb()), $.get("/api/cms/ui-extensions", (e) => {
27378
28039
  let t = (e.env?.KAMA_EXTENSIONS || []).filter((e) => e.ui).map((e) => ({
27379
28040
  id: e.id,
27380
28041
  name: e.name || e.id,
@@ -27414,7 +28075,7 @@ $.use("*", t()), $.use("/media/*", t({
27414
28075
  }
27415
28076
  }
27416
28077
  return t();
27417
- }), $.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", {
28078
+ }), $.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", {
27418
28079
  openapi: "3.0.0",
27419
28080
  info: {
27420
28081
  title: "KAMA Engine Public API",