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