@voltro/cms 0.86.0 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/CHANGELOG.md +5321 -0
  2. package/README.md +138 -0
  3. package/THIRD-PARTY-NOTICES.md +860 -221
  4. package/dist/RichDocumentView.js +81 -36
  5. package/dist/aiCandidates.js +3 -3
  6. package/dist/applicationBuildSnapshotService.js +101 -0
  7. package/dist/assetRenditions.js +102 -0
  8. package/dist/assetRevision.js +46 -0
  9. package/dist/assetUseRights.js +72 -0
  10. package/dist/availability.js +19 -16
  11. package/dist/blueprint.js +75 -75
  12. package/dist/build.d.ts +3063 -0
  13. package/dist/build.js +37 -0
  14. package/dist/buildApplicationAdmission.js +16 -0
  15. package/dist/buildApplicationCatalog.js +136 -0
  16. package/dist/buildApplicationCatalogTable.js +24 -0
  17. package/dist/buildApplicationRest.js +99 -0
  18. package/dist/buildApplicationUpload.js +111 -0
  19. package/dist/buildSnapshot.js +401 -0
  20. package/dist/buildSnapshotApplicationPin.js +32 -0
  21. package/dist/buildSnapshotRest.js +210 -0
  22. package/dist/buildSnapshotService.js +265 -0
  23. package/dist/buildSnapshotTables.js +25 -0
  24. package/dist/bulk.js +71 -70
  25. package/dist/changes.js +279 -62
  26. package/dist/consent.js +5 -5
  27. package/dist/contentLocations.js +53 -0
  28. package/dist/contentProjection.js +83 -0
  29. package/dist/contentRouteIdentity.js +13 -0
  30. package/dist/contentRouteMaterializer.js +97 -0
  31. package/dist/contentRouteTypes.js +39 -0
  32. package/dist/contentSeo.js +189 -0
  33. package/dist/contentTreePath.js +60 -0
  34. package/dist/contentType.js +117 -100
  35. package/dist/contentValues.js +18 -0
  36. package/dist/copies.js +3 -3
  37. package/dist/domainHost.js +7 -0
  38. package/dist/domains.js +81 -87
  39. package/dist/draftTexts.js +37 -37
  40. package/dist/duplicates.js +23 -23
  41. package/dist/environmentAliases.js +138 -0
  42. package/dist/environments.js +107 -69
  43. package/dist/errors.js +54 -14
  44. package/dist/experiments.js +7 -7
  45. package/dist/frontendBindings.js +99 -0
  46. package/dist/frontendMedia.js +18 -0
  47. package/dist/index.d.ts +760 -47
  48. package/dist/index.js +89 -73
  49. package/dist/initializePublicRoutes.js +28 -0
  50. package/dist/liveContentRouteView.js +76 -0
  51. package/dist/nativeOutputDeploymentService.js +205 -0
  52. package/dist/outputActivation.js +234 -0
  53. package/dist/outputActivationOrigin.js +51 -0
  54. package/dist/outputActivationStore.js +411 -0
  55. package/dist/outputActivationTables.js +11 -0
  56. package/dist/outputActivationTarget.js +81 -0
  57. package/dist/outputActivationTargetTable.js +25 -0
  58. package/dist/outputDeployment.js +174 -0
  59. package/dist/outputDeploymentRest.js +168 -0
  60. package/dist/outputDeploymentService.js +241 -0
  61. package/dist/outputRouteGraph.js +177 -0
  62. package/dist/outputSafetyArtifact.js +147 -0
  63. package/dist/outputTargetRest.js +62 -0
  64. package/dist/pathSegmentEncoding.js +4 -0
  65. package/dist/privateCmsTransport.js +76 -0
  66. package/dist/privateNativeRouteReservation.js +10 -0
  67. package/dist/promotion.js +68 -59
  68. package/dist/publicBuild.js +90 -0
  69. package/dist/publicBuildRest.js +98 -0
  70. package/dist/publicBuildService.js +63 -0
  71. package/dist/publicOutputHttp.js +129 -0
  72. package/dist/publicOutputService.js +287 -0
  73. package/dist/publicPresentation.js +17 -0
  74. package/dist/publicRouteDispositionAdmission.js +38 -0
  75. package/dist/publicRouteHistoryStore.js +12 -0
  76. package/dist/publicRouteHistoryView.js +34 -0
  77. package/dist/publicRouteIntegrity.js +5 -0
  78. package/dist/publicRouteMutation.js +6 -0
  79. package/dist/publicRouteNamespace.js +134 -0
  80. package/dist/publicRoutePublication.js +36 -0
  81. package/dist/publicRouteRegistry.js +17 -0
  82. package/dist/publicRouteRegistryBinding.js +194 -0
  83. package/dist/publicRouteRegistryDefinition.js +76 -0
  84. package/dist/publicRouteSitePublication.js +40 -0
  85. package/dist/publicRouteTables.js +13 -0
  86. package/dist/publicRouteUrl.js +18 -0
  87. package/dist/publicationSeo.js +52 -0
  88. package/dist/publicationState.js +296 -0
  89. package/dist/quality.js +8 -8
  90. package/dist/reconfigurePublicRoutes.js +41 -0
  91. package/dist/redirects.js +104 -73
  92. package/dist/referenceGraph.js +15 -14
  93. package/dist/references.js +2 -2
  94. package/dist/release.js +177 -141
  95. package/dist/renderReadAuthority.js +43 -0
  96. package/dist/renderReadGrant.js +137 -0
  97. package/dist/review.js +28 -28
  98. package/dist/richDocument.js +54 -24
  99. package/dist/routeDispositionGraph.js +44 -0
  100. package/dist/routeDispositionRest.js +51 -0
  101. package/dist/routeDispositionService.js +73 -0
  102. package/dist/routeDispositionStore.js +289 -0
  103. package/dist/routeDispositionTables.js +5 -0
  104. package/dist/routeDispositions.js +91 -0
  105. package/dist/routeHistoryStorage.js +320 -0
  106. package/dist/routeHistoryStore.js +12 -0
  107. package/dist/schedule.js +36 -36
  108. package/dist/seo.js +1 -1
  109. package/dist/series.js +11 -11
  110. package/dist/share.js +13 -13
  111. package/dist/siteBindings.js +159 -0
  112. package/dist/siteBuildCandidate.js +104 -0
  113. package/dist/siteDelivery.js +115 -0
  114. package/dist/siteState.js +47 -0
  115. package/dist/snapshotAddressGraph.js +55 -0
  116. package/dist/snapshotAddressRead.js +73 -0
  117. package/dist/snapshotAppConsumer.js +71 -0
  118. package/dist/snapshotAppExecution.js +102 -0
  119. package/dist/snapshotApplication.js +75 -0
  120. package/dist/snapshotApprovedRouteDispositions.js +44 -0
  121. package/dist/snapshotAssetAssembly.js +70 -0
  122. package/dist/snapshotAssetAssemblyRest.js +50 -0
  123. package/dist/snapshotBindingRead.js +61 -0
  124. package/dist/snapshotCodeSeo.js +29 -0
  125. package/dist/snapshotComponent.js +34 -0
  126. package/dist/snapshotComponentSource.js +24 -0
  127. package/dist/snapshotConsumer.js +87 -0
  128. package/dist/snapshotContentIdentity.js +10 -0
  129. package/dist/snapshotDefinitions.js +264 -0
  130. package/dist/snapshotDocumentAssembly.js +193 -0
  131. package/dist/snapshotDocumentAssemblyRest.js +84 -0
  132. package/dist/snapshotDocumentProjection.js +202 -0
  133. package/dist/snapshotDocumentTransfer.js +35 -0
  134. package/dist/snapshotDocumentTransferRest.js +80 -0
  135. package/dist/snapshotDomains.js +56 -0
  136. package/dist/snapshotEnvironment.js +31 -0
  137. package/dist/snapshotFieldPlan.js +85 -0
  138. package/dist/snapshotFrontend.js +103 -0
  139. package/dist/snapshotLink.js +8 -0
  140. package/dist/snapshotMedia.js +111 -0
  141. package/dist/snapshotMediaCapture.js +246 -0
  142. package/dist/snapshotMediaFields.js +225 -0
  143. package/dist/snapshotMediaRead.js +185 -0
  144. package/dist/snapshotMediaReader.js +13 -0
  145. package/dist/snapshotObservation.js +16 -0
  146. package/dist/snapshotObservedRouteHistory.js +34 -0
  147. package/dist/snapshotOutputTransfer.js +78 -0
  148. package/dist/snapshotPageLoader.js +7 -0
  149. package/dist/snapshotPageSeo.js +59 -0
  150. package/dist/snapshotPathLocale.js +15 -0
  151. package/dist/snapshotPresentation.js +86 -0
  152. package/dist/snapshotPresentationPolicy.js +12 -0
  153. package/dist/snapshotProjection.js +119 -0
  154. package/dist/snapshotPublicAccess.js +161 -0
  155. package/dist/snapshotPublicRouteHistory.js +40 -0
  156. package/dist/snapshotReadAdmission.js +38 -0
  157. package/dist/snapshotRedirectOutput.js +151 -0
  158. package/dist/snapshotRedirectTargets.js +24 -0
  159. package/dist/snapshotRedirects.js +132 -0
  160. package/dist/snapshotReference.js +8 -0
  161. package/dist/snapshotReferenceAddress.js +10 -0
  162. package/dist/snapshotReferenceGraph.js +79 -0
  163. package/dist/snapshotReferenceRead.js +65 -0
  164. package/dist/snapshotRelease.js +99 -0
  165. package/dist/snapshotRender.js +361 -0
  166. package/dist/snapshotRenderDependencies.js +178 -0
  167. package/dist/snapshotRenditions.js +88 -0
  168. package/dist/snapshotRichDocument.js +62 -0
  169. package/dist/snapshotRoleTransfer.js +106 -0
  170. package/dist/snapshotRoleTransferRest.js +99 -0
  171. package/dist/snapshotRouteAdmission.js +71 -0
  172. package/dist/snapshotRouteDispatch.js +111 -0
  173. package/dist/snapshotRouteDispositionPlan.js +73 -0
  174. package/dist/snapshotRouteRead.js +43 -0
  175. package/dist/snapshotRoutes.js +79 -0
  176. package/dist/snapshotRouting.js +113 -0
  177. package/dist/snapshotSeo.js +179 -0
  178. package/dist/snapshotSeoControls.js +101 -0
  179. package/dist/snapshotSeoDocumentInventory.js +115 -0
  180. package/dist/snapshotSeoDocuments.js +129 -0
  181. package/dist/snapshotSeoMerge.js +85 -0
  182. package/dist/snapshotSeoMetadata.js +137 -0
  183. package/dist/snapshotSeoOutput.js +173 -0
  184. package/dist/snapshotSeoPathSets.js +105 -0
  185. package/dist/snapshotSeoRead.js +88 -0
  186. package/dist/snapshotSite.js +128 -0
  187. package/dist/snapshotSitemapFiles.js +36 -0
  188. package/dist/snapshotTreeDependencies.js +58 -0
  189. package/dist/snapshotTreeLoader.js +10 -0
  190. package/dist/snapshotTreeRead.js +158 -0
  191. package/dist/staticPathSet.js +177 -0
  192. package/dist/staticPathSetRest.js +129 -0
  193. package/dist/staticPathSetService.js +249 -0
  194. package/dist/staticPathSetStore.js +338 -0
  195. package/dist/tree.js +9 -9
  196. package/dist/validation.js +53 -53
  197. package/dist/web.d.ts +709 -7
  198. package/dist/web.js +50 -33
  199. package/dist/workflow.js +8 -8
  200. package/dist/write.js +250 -225
  201. package/package.json +20 -6
package/dist/write.js CHANGED
@@ -1,46 +1,58 @@
1
- import { templateViolations as e } from "./templates.js";
2
- import { asTyped as t } from "./effectForm.js";
3
- import { dropFromSearch as n, indexForSearch as r } from "./search.js";
4
- import { ContentIdConflict as i, ContentNotFound as a, ContentValidationFailed as o, ReferenceUnavailable as s, ReviewRequired as c, RevisionMismatch as l } from "./errors.js";
5
- import { applyDerivations as u, publishViolations as d, validateContent as f } from "./validation.js";
6
- import { CMS_REVISIONS_TABLE as p, contentTypeToEntities as m } from "./contentType.js";
7
- import { recordPaths as h } from "./redirects.js";
8
- import { clearReferences as g, hasReferenceFields as _, writeReferences as v, writeRevisionReferences as y } from "./references.js";
9
- import { assertApproved as b } from "./review.js";
10
- import { qualityViolations as x } from "./quality.js";
11
- import { assertReferencesAvailable as S, writeAvailability as C } from "./availability.js";
12
- import { changedFields as w } from "./history.js";
13
- import { changedApartFromShared as T, liveDraftTexts as ee, openNewBlockTexts as te, readDraftTexts as ne, rebaseDraftTexts as re, richBlockOfKey as E, setDraftText as D, typeDraftText as ie, withSharedBlocks as ae } from "./draftTexts.js";
14
- import { startStewardship as O } from "./stewardship.js";
15
- import { recordChange as k } from "./changes.js";
16
- import { and as A, eq as j, generateId as M, neq as N } from "@voltro/database";
17
- import { revalidatePath as P, revalidateTag as oe } from "@voltro/runtime";
1
+ import { PublicRouteRegistryUnavailable as e } from "./publicRouteRegistry.js";
2
+ import { ChangeFeedUnavailable as t, ContentIdConflict as n, ContentNotFound as r, ContentValidationFailed as i, ReferenceUnavailable as a, ReviewRequired as o, RevisionMismatch as s } from "./errors.js";
3
+ import { seoPublishViolations as c } from "./publicationSeo.js";
4
+ import { templateViolations as l } from "./templates.js";
5
+ import { asTyped as u } from "./effectForm.js";
6
+ import { dropFromSearch as d, indexForSearch as f } from "./search.js";
7
+ import { applyDerivations as p, publishViolations as m, validateContent as h } from "./validation.js";
8
+ import { CMS_REVISIONS_TABLE as g, contentTypeToEntities as _ } from "./contentType.js";
9
+ import { lockPublicationStream as v, recordChange as y } from "./changes.js";
10
+ import { recordPublicationPaths as b } from "./redirects.js";
11
+ import { clearReferences as x, hasReferenceFields as S, writeReferences as C, writeRevisionReferences as w } from "./references.js";
12
+ import { pickDeclared as ee } from "./contentValues.js";
13
+ import { withPublicRouteMutation as T } from "./publicRouteMutation.js";
14
+ import { publicationRouteScope as E, reconcilePublishedContentRoutes as D } from "./publicRoutePublication.js";
15
+ import { assertApproved as O } from "./review.js";
16
+ import { qualityViolations as k } from "./quality.js";
17
+ import { assertReferencesAvailable as A, writeAvailability as te } from "./availability.js";
18
+ import { changedFields as ne } from "./history.js";
19
+ import { changedApartFromShared as re, liveDraftTexts as ie, openNewBlockTexts as ae, readDraftTexts as oe, rebaseDraftTexts as se, richBlockOfKey as j, setDraftText as M, typeDraftText as ce, withSharedBlocks as le } from "./draftTexts.js";
20
+ import { startStewardship as ue } from "./stewardship.js";
21
+ import { and as N, eq as P, generateId as F, neq as de } from "@voltro/database";
22
+ import { revalidatePath as fe, revalidateTag as pe } from "@voltro/runtime";
18
23
  //#region src/write.ts
19
- var F = (e) => `${e.name}_drafts`, I = (e) => `${e.name}_published`, L = (e) => ({
24
+ var I = (e) => `${e.name}_drafts`, L = (e) => `${e.name}_published`, R = (e) => ({
20
25
  site: e.site,
21
26
  environment: e.environment,
22
27
  locale: e.locale
23
- }), R = (e) => [
24
- j("site", e.site),
25
- j("environment", e.environment),
26
- j("locale", e.locale)
27
- ], z = (e, t, n, r) => ({
28
+ }), z = (e) => [
29
+ P("site", e.site),
30
+ P("environment", e.environment),
31
+ P("locale", e.locale)
32
+ ], B = (e, t, n, r) => ({
28
33
  table: e,
29
- predicate: r === void 0 ? j("id", t) : A(j("id", t), ...R(r)),
34
+ predicate: r === void 0 ? P("id", t) : N(P("id", t), ...z(r)),
30
35
  order: [],
31
36
  take: 1,
32
37
  skip: void 0,
33
38
  projection: void 0,
34
39
  ...n === !0 ? { crossTenant: !0 } : {}
35
- }), B = async (e, t, n, r) => (await e.query(z(t, n, !1, r)))[0], V = (e, t) => {
36
- let n = {};
37
- for (let r of Object.keys(e.fields)) r in t && (n[r] = t[r]);
38
- return n;
39
- }, H = async (e, t, n, r, i) => {
40
- let a = t.tree;
41
- if (a === void 0) return;
42
- let s = Object.entries(a.inherit ?? {}).filter(([e, t]) => t.locked === !0 && n[e] !== void 0 && n[e] !== null && n[e] !== "");
43
- if (s.length > 0) throw new o({
40
+ }), V = async (e, t, n, r, i) => (await e.query({
41
+ ...B(t, n, !1, r),
42
+ ...i === void 0 ? {} : { lock: i }
43
+ }))[0], H = async (e, n, r) => {
44
+ let i = n.tenantId;
45
+ if (typeof i != "string" || i === "") throw new t({ reason: "scope" });
46
+ await v(e, {
47
+ tenantId: i,
48
+ site: r.site,
49
+ environment: r.environment
50
+ });
51
+ }, U = async (e, t, n, r, a) => {
52
+ let o = t.tree;
53
+ if (o === void 0) return;
54
+ let s = Object.entries(o.inherit ?? {}).filter(([e, t]) => t.locked === !0 && n[e] !== void 0 && n[e] !== null && n[e] !== "");
55
+ if (s.length > 0) throw new i({
44
56
  contentType: t.name,
45
57
  violations: s.map(([e]) => ({
46
58
  field: e,
@@ -48,8 +60,8 @@ var F = (e) => `${e.name}_drafts`, I = (e) => `${e.name}_published`, L = (e) =>
48
60
  message: `${e} is set for the whole site and cannot be changed on a page`
49
61
  }))
50
62
  });
51
- let c = Object.entries(a.inherit ?? {}).filter(([e, t]) => t.mask !== void 0 && n[t.mask] === !0 && n[e] !== void 0 && n[e] !== null && n[e] !== "");
52
- if (c.length > 0) throw new o({
63
+ let c = Object.entries(o.inherit ?? {}).filter(([e, t]) => t.mask !== void 0 && n[t.mask] === !0 && n[e] !== void 0 && n[e] !== null && n[e] !== "");
64
+ if (c.length > 0) throw new i({
53
65
  contentType: t.name,
54
66
  violations: c.map(([e, t]) => ({
55
67
  field: e,
@@ -57,27 +69,27 @@ var F = (e) => `${e.name}_drafts`, I = (e) => `${e.name}_published`, L = (e) =>
57
69
  message: `${e} is masked (${t.mask}) — clear the mask or the value`
58
70
  }))
59
71
  });
60
- let l = n[a.parent];
72
+ let l = n[o.parent];
61
73
  if (typeof l != "string" || l === "") return;
62
74
  let u = (e, n) => {
63
- throw new o({
75
+ throw new i({
64
76
  contentType: t.name,
65
77
  violations: [{
66
- field: a.parent,
78
+ field: o.parent,
67
79
  rule: e,
68
80
  message: n
69
81
  }]
70
82
  });
71
83
  }, d = async (n) => {
72
84
  let r = await e.query({
73
- table: F(t),
74
- predicate: A(j("documentId", n), j("site", i.site), j("environment", i.environment)),
85
+ table: I(t),
86
+ predicate: N(P("documentId", n), P("site", a.site), P("environment", a.environment)),
75
87
  order: [],
76
88
  take: void 0,
77
89
  skip: void 0,
78
90
  projection: void 0
79
91
  });
80
- return r.find((e) => e.locale === i.locale) ?? r[0];
92
+ return r.find((e) => e.locale === a.locale) ?? r[0];
81
93
  }, f = /* @__PURE__ */ new Set(), p = l;
82
94
  for (; p !== null && !f.has(p);) {
83
95
  p === r && u("cycle", "the parent is this page or one of its descendants"), f.add(p);
@@ -86,36 +98,36 @@ var F = (e) => `${e.name}_drafts`, I = (e) => `${e.name}_published`, L = (e) =>
86
98
  p === l && u("unknown", `no ${t.name} document '${l}'`);
87
99
  return;
88
100
  }
89
- let n = e[a.parent];
101
+ let n = e[o.parent];
90
102
  p = typeof n == "string" && n !== "" ? n : null;
91
103
  }
92
- }, U = () => {
93
- let e = M({
104
+ }, W = () => {
105
+ let e = F({
94
106
  kind: "typeid",
95
107
  prefix: "cdoc"
96
- }, p);
108
+ }, g);
97
109
  if (e === null) throw Error("[voltro cms] the document id scheme did not mint an id.");
98
110
  return e;
99
- }, W = /* @__PURE__ */ new WeakMap(), G = (e) => {
100
- let t = W.get(e);
101
- t === void 0 && (t = m(e).draft.fields.id.idScheme, W.set(e, t));
102
- let n = t === void 0 ? null : M(t, F(e));
111
+ }, G = /* @__PURE__ */ new WeakMap(), K = (e) => {
112
+ let t = G.get(e);
113
+ t === void 0 && (t = _(e).draft.fields.id.idScheme, G.set(e, t));
114
+ let n = t === void 0 ? null : F(t, I(e));
103
115
  if (n === null) throw Error(`[voltro cms] '${e.name}': the drafts table's id scheme does not mint ids up front.`);
104
116
  return n;
105
- }, K = async (e, t, n, r, i, a, o, s = null) => {
106
- let c = await e.insert(p, {
117
+ }, q = async (e, t, n, r, i, a, o, s = null) => {
118
+ let c = await e.insert(g, {
107
119
  contentType: t.name,
108
120
  documentId: n,
109
121
  number: r,
110
- ...L(a),
122
+ ...R(a),
111
123
  values: i,
112
124
  basedOn: s,
113
125
  ...o == null ? {} : { tenantId: o }
114
126
  });
115
- return await y(e, t, c, a), c;
116
- }, q = (e, t, n, r) => e.query({
117
- table: p,
118
- predicate: A(j("contentType", t.name), j("documentId", n), ...R(r)),
127
+ return await w(e, t, c, a), c;
128
+ }, J = (e, t, n, r) => e.query({
129
+ table: g,
130
+ predicate: N(P("contentType", t.name), P("documentId", n), ...z(r)),
119
131
  order: [{
120
132
  column: "number",
121
133
  direction: "desc"
@@ -123,272 +135,285 @@ var F = (e) => `${e.name}_drafts`, I = (e) => `${e.name}_published`, L = (e) =>
123
135
  take: void 0,
124
136
  skip: void 0,
125
137
  projection: void 0
126
- }), se = async (e, t) => {
138
+ }), me = async (e, t) => {
127
139
  if (typeof t != "string" || t === "") return null;
128
140
  let [n] = await e.query({
129
- table: p,
130
- predicate: j("id", t),
141
+ table: g,
142
+ predicate: P("id", t),
131
143
  order: [],
132
144
  take: 1,
133
145
  skip: void 0,
134
146
  projection: void 0
135
147
  });
136
148
  return typeof n?.basedOn == "string" ? n.basedOn : null;
137
- }, J = async (e, t, n, r, i, a, s) => {
149
+ }, Y = async (e, t, n, r, a, o, s) => {
138
150
  let c = [];
139
- for (let [o, l] of Object.entries(t.fields)) {
140
- let t = r[o];
151
+ for (let [i, l] of Object.entries(t.fields)) {
152
+ let t = r[i];
141
153
  l.unique === !0 && typeof t == "string" && t !== "" && (await e.query({
142
154
  table: n,
143
- predicate: A(j(o, t), N("id", i), j("site", s.site), j("environment", s.environment), j("locale", s.locale), ...typeof a == "string" ? [j("tenantId", a)] : []),
155
+ predicate: N(P(i, t), de("id", a), P("site", s.site), P("environment", s.environment), P("locale", s.locale), ...typeof o == "string" ? [P("tenantId", o)] : []),
144
156
  order: [],
145
157
  take: 1,
146
158
  skip: void 0,
147
159
  projection: ["id"]
148
160
  })).length > 0 && c.push({
149
- field: o,
161
+ field: i,
150
162
  rule: "unique",
151
- message: `${o} '${t}' is already used by another entry`
163
+ message: `${i} '${t}' is already used by another entry`
152
164
  });
153
165
  }
154
- if (c.length > 0) throw new o({
166
+ if (c.length > 0) throw new i({
155
167
  contentType: t.name,
156
168
  violations: c
157
169
  });
158
- }, ce = async (e, t, n, r, i) => {
170
+ }, he = async (e, t, n, r, i) => {
159
171
  if (i === void 0 || i.values.size === 0) return !1;
160
172
  let [a] = await e.query({
161
- table: p,
162
- predicate: j("id", n),
173
+ table: g,
174
+ predicate: P("id", n),
163
175
  order: [],
164
176
  take: 1,
165
177
  skip: void 0,
166
178
  projection: void 0
167
179
  });
168
- return a !== void 0 && T(t, a.values ?? {}, r, i.values.keys()).length === 0;
169
- }, Y = async (t, n, s, c, d = {}) => {
170
- let m = d.collaborative === !0 && typeof s.id == "string" ? await B(t, F(n), s.id, c) : void 0;
171
- if (m !== void 0) {
172
- let e = new Set((await ne(t, String(m.id))).map((e) => String(e.id)));
173
- for (let n of d.texts ?? []) e.has(n.id) && await ie(t, n.id, n.update);
180
+ return a !== void 0 && re(t, a.values ?? {}, r, i.values.keys()).length === 0;
181
+ }, X = async (e, t, a, o, c = {}) => {
182
+ let u = c.collaborative === !0 && typeof a.id == "string" ? await V(e, I(t), a.id, o) : void 0;
183
+ if (u !== void 0) {
184
+ let t = new Set((await oe(e, String(u.id))).map((e) => String(e.id)));
185
+ for (let n of c.texts ?? []) t.has(n.id) && await ce(e, n.id, n.update);
174
186
  }
175
- let h = m === void 0 ? void 0 : await ee(t, m), g = m === void 0 ? void 0 : d.expectedRevision === void 0 || d.expectedRevision === m.revisionId ? m : (await t.query({
176
- table: p,
177
- predicate: j("id", d.expectedRevision),
187
+ let d = u === void 0 ? void 0 : await ie(e, u), m = u === void 0 ? void 0 : c.expectedRevision === void 0 || c.expectedRevision === u.revisionId ? u : (await e.query({
188
+ table: g,
189
+ predicate: P("id", c.expectedRevision),
178
190
  order: [],
179
191
  take: 1,
180
192
  skip: void 0,
181
193
  projection: void 0
182
- }))[0]?.values, y = (e) => typeof e == "string" ? e : "", b = (e, t) => typeof s[e] == "string" && g !== void 0 && s[e] !== y(g[e]) && t === y(m?.[e]) && y(m?.[e]) === y(g[e]), x = h === void 0 ? [] : [...h.values].filter(([e, t]) => E(e) === null && (t !== "" || typeof m?.[e] == "string") && !b(e, t)), S = h === void 0 ? {
194
+ }))[0]?.values, _ = (e) => typeof e == "string" ? e : "", v = (e, t) => typeof a[e] == "string" && m !== void 0 && a[e] !== _(m[e]) && t === _(u?.[e]) && _(u?.[e]) === _(m[e]), y = d === void 0 ? [] : [...d.values].filter(([e, t]) => j(e) === null && (t !== "" || typeof u?.[e] == "string") && !v(e, t)), b = d === void 0 ? {
183
195
  values: {},
184
196
  typedBefore: []
185
- } : ae(n, s, h.values, {
186
- current: m,
187
- seen: g
188
- }), C = u(n, {
189
- ...s,
190
- ...Object.fromEntries(x),
191
- ...S.values
197
+ } : le(t, a, d.values, {
198
+ current: u,
199
+ seen: m
200
+ }), x = p(t, {
201
+ ...a,
202
+ ...Object.fromEntries(y),
203
+ ...b.values
192
204
  });
193
- f(n, C);
194
- let T = e(n, C);
195
- if (T.length > 0) throw new o({
196
- contentType: n.name,
197
- violations: [...T]
205
+ h(t, x);
206
+ let w = l(t, x);
207
+ if (w.length > 0) throw new i({
208
+ contentType: t.name,
209
+ violations: [...w]
198
210
  });
199
- let O = F(n), k = V(n, C), A = async (e, i) => {
200
- await H(t, n, k, i, c), await J(t, n, O, k, e, void 0, c);
201
- let a = await K(t, n, i, 1, k, c, void 0, d.basedOn ?? null), o = await t.insert(O, {
202
- ...k,
203
- id: e,
204
- documentId: i,
205
- ...L(c),
211
+ let T = I(t), E = ee(t, x), D = async (n, r) => {
212
+ await U(e, t, E, r, o), await Y(e, t, T, E, n, void 0, o);
213
+ let i = await q(e, t, r, 1, E, o, void 0, c.basedOn ?? null), a = await e.insert(T, {
214
+ ...E,
215
+ id: n,
216
+ documentId: r,
217
+ ...R(o),
206
218
  status: "draft",
207
- revisionId: a.id,
219
+ revisionId: i.id,
208
220
  revision: 1
209
221
  });
210
- return await r(t, n, o, c, "draft"), _(n) && await v(t, n, o, c, "draft"), o;
211
- }, M = C.id, N = C.documentId;
212
- if (M === void 0) {
213
- if (N === void 0) return A(G(n), U());
214
- let e = await t.query({
215
- table: O,
216
- predicate: j("documentId", N),
222
+ return await f(e, t, a, o, "draft"), S(t) && await C(e, t, a, o, "draft"), a;
223
+ }, O = x.id, k = x.documentId;
224
+ if (O === void 0) {
225
+ if (k === void 0) return D(K(t), W());
226
+ let i = await e.query({
227
+ table: T,
228
+ predicate: P("documentId", k),
217
229
  order: [],
218
230
  take: void 0,
219
231
  skip: void 0,
220
232
  projection: void 0
221
233
  });
222
- if (e.length === 0) throw new a({
223
- contentType: n.name,
224
- id: N,
234
+ if (i.length === 0) throw new r({
235
+ contentType: t.name,
236
+ id: k,
225
237
  stage: "draft"
226
238
  });
227
- let r = e.find((e) => e.site === c.site && e.environment === c.environment && e.locale === c.locale);
228
- if (r !== void 0) throw new i({
229
- contentType: n.name,
230
- id: r.id
239
+ let a = i.find((e) => e.site === o.site && e.environment === o.environment && e.locale === o.locale);
240
+ if (a !== void 0) throw new n({
241
+ contentType: t.name,
242
+ id: a.id
231
243
  });
232
- return A(G(n), N);
244
+ return D(K(t), k);
233
245
  }
234
- let P = await B(t, O, M, c);
235
- if (P !== void 0) {
236
- if (d.expectedRevision !== void 0 && P.revisionId !== d.expectedRevision && !await ce(t, n, d.expectedRevision, P, h)) throw new l({
237
- contentType: n.name,
238
- id: M,
239
- expected: d.expectedRevision,
240
- actual: String(P.revisionId)
246
+ let A = await V(e, T, O, o);
247
+ if (A !== void 0) {
248
+ if (c.expectedRevision !== void 0 && A.revisionId !== c.expectedRevision && !await he(e, t, c.expectedRevision, A, d)) throw new s({
249
+ contentType: t.name,
250
+ id: O,
251
+ expected: c.expectedRevision,
252
+ actual: String(A.revisionId)
241
253
  });
242
- if (d.basedOn === void 0 && P.status !== "archived" && w(n.fields, P, k).length === 0) return P;
243
- let e = Number(P.revision) + 1, i = P.documentId;
244
- await H(t, n, k, i, c), await J(t, n, O, k, M, P.tenantId, c);
245
- let a = d.basedOn ?? await se(t, P.revisionId), o = await K(t, n, i, e, k, c, P.tenantId, a), u = await t.update(O, M, {
246
- ...k,
254
+ if (c.basedOn === void 0 && A.status !== "archived" && ne(t.fields, A, E).length === 0) return A;
255
+ let n = Number(A.revision) + 1, r = A.documentId;
256
+ await U(e, t, E, r, o), await Y(e, t, T, E, O, A.tenantId, o);
257
+ let i = c.basedOn ?? await me(e, A.revisionId), l = await q(e, t, r, n, E, o, A.tenantId, i), u = await e.update(T, O, {
258
+ ...E,
247
259
  status: "draft",
248
- revisionId: o.id,
249
- revision: e
260
+ revisionId: l.id,
261
+ revision: n
250
262
  });
251
- if (h !== void 0) {
252
- let e = new Map(S.typedBefore.map((e) => [e.key, e.markup]));
253
- for (let n of h.rows) {
254
- let r = String(n.field), i = e.get(r);
255
- i === void 0 ? E(r) === null && b(r, h.values.get(r) ?? "") && await D(t, String(n.id), String(s[r])) : await D(t, String(n.id), i);
263
+ if (d !== void 0) {
264
+ let n = new Map(b.typedBefore.map((e) => [e.key, e.markup]));
265
+ for (let t of d.rows) {
266
+ let r = String(t.field), i = n.get(r);
267
+ i === void 0 ? j(r) === null && v(r, d.values.get(r) ?? "") && await M(e, String(t.id), String(a[r])) : await M(e, String(t.id), i);
256
268
  }
257
- await re(t, h.rows, String(o.id)), await te(t, n, String(P.id));
269
+ await se(e, d.rows, String(l.id)), await ae(e, t, String(A.id));
258
270
  }
259
- return await r(t, n, u ?? P, c, "draft"), _(n) && await v(t, n, u ?? P, c, "draft"), u ?? P;
271
+ return await f(e, t, u ?? A, o, "draft"), S(t) && await C(e, t, u ?? A, o, "draft"), u ?? A;
260
272
  }
261
- if ((await t.query(z(O, M, !0))).length > 0) throw new i({
262
- contentType: n.name,
263
- id: M
273
+ if ((await e.query(B(T, O, !0))).length > 0) throw new n({
274
+ contentType: t.name,
275
+ id: O
264
276
  });
265
- return A(M, N ?? U());
266
- }, X = async (e, t, n, r, i) => {
267
- let o = await B(e, F(t), n, r);
268
- if (o === void 0) throw new a({
277
+ return D(O, k ?? W());
278
+ }, Z = async (e, t, n, i, a) => {
279
+ let o = await V(e, I(t), n, i);
280
+ if (o === void 0) throw new r({
269
281
  contentType: t.name,
270
282
  id: n,
271
283
  stage: "draft"
272
284
  });
273
285
  let [s] = await e.query({
274
- table: p,
275
- predicate: A(j("id", i), j("contentType", t.name), j("documentId", o.documentId), ...R(r)),
286
+ table: g,
287
+ predicate: N(P("id", a), P("contentType", t.name), P("documentId", o.documentId), ...z(i)),
276
288
  order: [],
277
289
  take: 1,
278
290
  skip: void 0,
279
291
  projection: void 0
280
292
  });
281
- if (s === void 0) throw new a({
293
+ if (s === void 0) throw new r({
282
294
  contentType: t.name,
283
- id: i,
295
+ id: a,
284
296
  stage: "revision"
285
297
  });
286
298
  let c = s.values ?? {}, l = { id: n };
287
299
  for (let e of Object.keys(t.fields)) l[e] = e in c ? c[e] : null;
288
- return Y(e, t, l, r);
289
- }, le = (e) => {
300
+ return X(e, t, l, i);
301
+ }, ge = (e) => {
290
302
  let t = e.revalidate;
291
303
  if (t !== void 0) {
292
- for (let n of t.paths ?? []) P(n).catch((t) => {
304
+ for (let n of t.paths ?? []) fe(n).catch((t) => {
293
305
  console.warn(`[voltro cms] revalidatePath('${n}') for '${e.name}' failed:`, t);
294
306
  });
295
- for (let n of t.tags ?? []) oe(n).catch((t) => {
307
+ for (let n of t.tags ?? []) pe(n).catch((t) => {
296
308
  console.warn(`[voltro cms] revalidateTag('${n}') for '${e.name}' failed:`, t);
297
309
  });
298
310
  }
299
- }, Z = async (e, t, n, r, i = {}) => {
300
- let o = await B(e, F(t), n, r);
301
- if (o === void 0) throw new a({
311
+ }, _e = async (e, t, n, i, a = {}) => {
312
+ let o = await V(e, I(t), n, i);
313
+ if (o === void 0 || (await H(e, o, i), o = await V(e, I(t), n, i, "update"), o === void 0)) throw new r({
302
314
  contentType: t.name,
303
315
  id: n,
304
316
  stage: "draft"
305
317
  });
306
- let s = o.revisionId;
307
- if (i.revisionId !== void 0 && i.revisionId !== s) throw new l({
318
+ let c = o.revisionId;
319
+ if (a.revisionId !== void 0 && a.revisionId !== c) throw new s({
308
320
  contentType: t.name,
309
321
  id: n,
310
- expected: i.revisionId,
311
- actual: s
322
+ expected: a.revisionId,
323
+ actual: c
312
324
  });
313
- return Q(e, t, n, r, s);
314
- }, Q = async (e, t, n, i, s, c = {}) => {
315
- let l = await B(e, F(t), n, i);
316
- if (l === void 0) throw new a({
325
+ return Q(e, t, n, i, c);
326
+ }, Q = async (e, t, n, a, o, s = {}) => {
327
+ let l = await V(e, I(t), n, a);
328
+ if (l === void 0 || (await H(e, l, a), l = await V(e, I(t), n, a, "update"), l === void 0)) throw new r({
317
329
  contentType: t.name,
318
330
  id: n,
319
331
  stage: "draft"
320
332
  });
321
- let [u] = await e.query({
322
- table: p,
323
- predicate: A(j("id", s), j("contentType", t.name), j("documentId", l.documentId), ...R(i)),
324
- order: [],
325
- take: 1,
326
- skip: void 0,
327
- projection: void 0
328
- });
329
- if (u === void 0) throw new a({
330
- contentType: t.name,
331
- id: s,
332
- stage: "revision"
333
- });
334
- let f = d(t, u.values ?? {}), m = await x(e, t, n, i, u.values ?? {});
335
- if (f.length + m.length > 0) throw new o({
336
- contentType: t.name,
337
- violations: [...f, ...m]
338
- });
339
- await b(e, t, n, i, s), await S(e, t, n, u.values ?? {}, i);
340
- let g = I(t), y = {
341
- ...V(t, u.values ?? {}),
342
- documentId: l.documentId,
343
- revisionId: s,
344
- revision: u.number
345
- };
346
- await J(e, t, g, y, n, l.tenantId, i);
347
- let w = await B(e, g, n, i), T;
348
- if (w !== void 0) T = await e.update(g, n, {
349
- ...y,
350
- status: "published"
351
- }) ?? w;
352
- else {
353
- let t = l.tenantId;
354
- T = await e.insert(g, {
355
- ...y,
356
- id: n,
357
- ...L(i),
358
- status: "published",
359
- ...t == null ? {} : { tenantId: t }
333
+ return T(e, E(l, a), (t.locations?.length ?? 0) > 0, async () => {
334
+ let [u] = await e.query({
335
+ table: g,
336
+ lock: "update",
337
+ predicate: N(P("id", o), P("contentType", t.name), P("documentId", l.documentId), ...z(a)),
338
+ order: [],
339
+ take: 1,
340
+ skip: void 0,
341
+ projection: void 0
360
342
  });
361
- }
362
- return l.revisionId === s && (await e.update(F(t), n, { status: "published" }), l.status === "archived" && _(t) && await v(e, t, l, i, "draft")), await v(e, t, T, i), await C(e, t, T, i), await h(e, t, i, T.tenantId), await O(e, t, String(l.documentId), i, T.tenantId), await k(e, t, T, i, "published", c), await r(e, t, T, i, "published"), T;
363
- }, $ = async (e, t, r, i, o = {}) => {
364
- let s = await B(e, I(t), r, i);
365
- if (s === void 0) throw new a({
343
+ if (u === void 0) throw new r({
344
+ contentType: t.name,
345
+ id: o,
346
+ stage: "revision"
347
+ });
348
+ let d = m(t, u.values ?? {}), p = await k(e, t, n, a, u.values ?? {}), h = c(t, u.values ?? {}, a);
349
+ if (d.length + p.length + h.length > 0) throw new i({
350
+ contentType: t.name,
351
+ violations: [
352
+ ...d,
353
+ ...p,
354
+ ...h
355
+ ]
356
+ });
357
+ await O(e, t, n, a, o), await A(e, t, n, u.values ?? {}, a);
358
+ let _ = L(t), v = {
359
+ ...ee(t, u.values ?? {}),
360
+ documentId: l.documentId,
361
+ revisionId: o,
362
+ revision: u.number
363
+ };
364
+ await Y(e, t, _, v, n, l.tenantId, a);
365
+ let x = await V(e, _, n, a, "update"), w;
366
+ if (x !== void 0) w = await e.update(_, n, {
367
+ ...v,
368
+ status: "published"
369
+ }) ?? x;
370
+ else {
371
+ let t = l.tenantId;
372
+ w = await e.insert(_, {
373
+ ...v,
374
+ id: n,
375
+ ...R(a),
376
+ status: "published",
377
+ ...t == null ? {} : { tenantId: t }
378
+ });
379
+ }
380
+ return l.revisionId === o && (await e.update(I(t), n, { status: "published" }), l.status === "archived" && S(t) && await C(e, t, l, a, "draft")), await C(e, t, w, a), await te(e, t, w, a), await b(e, t, a, w.tenantId), await ue(e, t, String(l.documentId), a, w.tenantId), await y(e, t, w, a, "published", s), await f(e, t, w, a, "published"), await D(e, t, w, a), w;
381
+ });
382
+ }, ve = async (e, t, n, i, a = {}) => {
383
+ let o = await V(e, L(t), n, i);
384
+ if (o === void 0 || (await H(e, o, i), o = await V(e, L(t), n, i, "update"), o === void 0)) throw new r({
366
385
  contentType: t.name,
367
- id: r,
386
+ id: n,
368
387
  stage: "published"
369
388
  });
370
- await k(e, t, s, i, "unpublished", o), await e.delete(I(t), r), await g(e, t, r, i), await n(e, t, r, ["published"]);
371
- let c = await B(e, F(t), r, i);
372
- c !== void 0 && (await e.update(F(t), r, { status: "draft" }), c.status === "archived" && _(t) && await v(e, t, c, i, "draft"));
373
- }, ue = async (e, t, r, i) => {
374
- let o = await B(e, F(t), r, i), s = await B(e, I(t), r, i);
375
- if (o === void 0 && s === void 0) throw new a({
389
+ return T(e, E(o, i), (t.locations?.length ?? 0) > 0, async () => {
390
+ await y(e, t, o, i, "unpublished", a), await e.delete(L(t), n), await x(e, t, n, i), await d(e, t, n, ["published"]);
391
+ let r = await V(e, I(t), n, i);
392
+ r !== void 0 && (await e.update(I(t), n, { status: "draft" }), r.status === "archived" && S(t) && await C(e, t, r, i, "draft")), await D(e, t, o, i);
393
+ });
394
+ }, ye = async (e, t, n, i) => {
395
+ let a = await V(e, I(t), n, i), o = await V(e, L(t), n, i);
396
+ if (a === void 0 && o === void 0 || (await H(e, o ?? a, i), a = await V(e, I(t), n, i, "update"), o = await V(e, L(t), n, i, "update"), a === void 0 && o === void 0)) throw new r({
376
397
  contentType: t.name,
377
- id: r,
398
+ id: n,
378
399
  stage: "draft"
379
400
  });
380
- o !== void 0 && await e.update(F(t), r, { status: "archived" }), o !== void 0 && _(t) && await g(e, t, r, i, "draft"), s !== void 0 && (await e.update(I(t), r, { status: "archived" }), await g(e, t, r, i)), await n(e, t, r, ["draft", "published"]);
381
- }, de = [
382
- o,
401
+ return T(e, E(o ?? a, i), (t.locations?.length ?? 0) > 0, async () => {
402
+ o !== void 0 && o.status !== "archived" && await y(e, t, o, i, "unpublished"), a !== void 0 && await e.update(I(t), n, { status: "archived" }), a !== void 0 && S(t) && await x(e, t, n, i, "draft"), o !== void 0 && (await e.update(L(t), n, { status: "archived" }), await x(e, t, n, i)), await d(e, t, n, ["draft", "published"]), o !== void 0 && await D(e, t, o, i);
403
+ });
404
+ }, be = [
383
405
  i,
384
- a,
385
- l
386
- ], fe = [
387
- a,
388
- l,
389
- c,
406
+ n,
407
+ r,
408
+ s
409
+ ], $ = [
410
+ r,
390
411
  s,
391
- o
392
- ], pe = (e, n, r, i, a = {}) => t(() => Y(e, n, r, i, a), ...de), me = (e, n, r, i, s) => t(() => X(e, n, r, i, s), o, a), he = (e, n, r, i, a = {}) => t(() => Z(e, n, r, i, a), ...fe), ge = (e, n, r, i, a, o = {}) => t(() => Q(e, n, r, i, a, o), ...fe), _e = (e, n, r, i) => t(() => $(e, n, r, i), a), ve = (e, n, r, i) => t(() => ue(e, n, r, i), a), ye = (...e) => t(() => q(...e));
412
+ o,
413
+ a,
414
+ i,
415
+ t,
416
+ e
417
+ ], xe = (e, t, n, r, i = {}) => u(() => X(e, t, n, r, i), ...be), Se = (e, t, n, a, o) => u(() => Z(e, t, n, a, o), i, r), Ce = (e, t, n, r, i = {}) => u(() => _e(e, t, n, r, i), ...$), we = (e, t, n, r, i, a = {}) => u(() => Q(e, t, n, r, i, a), ...$), Te = (n, i, a, o) => u(() => ve(n, i, a, o), r, t, e), Ee = (n, i, a, o) => u(() => ye(n, i, a, o), r, t, e), De = (...e) => u(() => J(...e));
393
418
  //#endregion
394
- export { ue as archive, ve as archiveEffect, q as listRevisions, ye as listRevisionsEffect, G as newVariantId, V as pickDeclared, Z as publish, he as publishEffect, Q as publishRevision, ge as publishRevisionEffect, X as restoreRevision, me as restoreRevisionEffect, le as revalidateContent, Y as saveDraft, pe as saveDraftEffect, L as scopeColumns, $ as unpublish, _e as unpublishEffect, K as writeRevision };
419
+ export { ye as archive, Ee as archiveEffect, J as listRevisions, De as listRevisionsEffect, K as newVariantId, _e as publish, Ce as publishEffect, Q as publishRevision, we as publishRevisionEffect, Z as restoreRevision, Se as restoreRevisionEffect, ge as revalidateContent, X as saveDraft, xe as saveDraftEffect, R as scopeColumns, ve as unpublish, Te as unpublishEffect, q as writeRevision };