@knkcs/contenthub-ui 0.1.0 → 0.2.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.
package/dist/testing.js CHANGED
@@ -1,37 +1,37 @@
1
- import { A as e, C as t, E as n, M as r, S as i, _ as a, b as o, f as s, g as c, h as l, i as u, j as d, k as f, n as p, o as m, r as h, s as ee, t as te, u as ne, v as re, w as ie, x as ae, y as oe } from "./heads-Brd2Gtjm.js";
2
- import { Code as g, ConnectError as _ } from "@connectrpc/connect";
3
- import { createHostMembers as v } from "@knkcs/anker/host";
1
+ import { A as e, C as t, E as n, M as r, S as i, _ as a, b as o, f as s, g as c, h as l, i as u, j as d, k as f, n as p, o as m, r as h, s as ee, t as te, u as ne, v as re, w as ie, x as ae, y as g } from "./heads-Brd2Gtjm.js";
2
+ import { Code as _, ConnectError as v } from "@connectrpc/connect";
3
+ import { createHostMembers as y } from "@knkcs/anker/host";
4
4
  //#region src/testing/fixtures.ts
5
- var y = "ws_stub", b = "user_stub", x = "user_ben", S = "2026-10-01T09:00:00.000Z";
6
- function C() {
5
+ var b = "ws_stub", x = "user_stub", S = "user_ben", C = "2026-10-01T09:00:00.000Z";
6
+ function w() {
7
7
  return {
8
- userId: b,
9
- workspaceId: y,
10
- members: v([{
11
- userId: b,
8
+ userId: x,
9
+ workspaceId: b,
10
+ members: y([{
11
+ userId: x,
12
12
  displayName: "Ada Editor",
13
13
  email: "ada@example.com"
14
14
  }, {
15
- userId: x,
15
+ userId: S,
16
16
  displayName: "Ben Reviewer",
17
17
  email: "ben@example.com"
18
18
  }])
19
19
  };
20
20
  }
21
- function se() {
21
+ function oe() {
22
22
  return [{
23
23
  id: "br_author",
24
24
  name: "Being revised by the author",
25
- createTime: S,
26
- updateTime: S
25
+ createTime: C,
26
+ updateTime: C
27
27
  }, {
28
28
  id: "br_embargo",
29
29
  name: "Embargoed until publication",
30
- createTime: S,
31
- updateTime: S
30
+ createTime: C,
31
+ updateTime: C
32
32
  }];
33
33
  }
34
- function ce() {
34
+ function se() {
35
35
  return [
36
36
  {
37
37
  slug: "in_progress",
@@ -55,7 +55,7 @@ function ce() {
55
55
  }
56
56
  ];
57
57
  }
58
- function le() {
58
+ function ce() {
59
59
  return {
60
60
  in_progress: ["in_review", "on_hold"],
61
61
  in_review: [
@@ -67,7 +67,7 @@ function le() {
67
67
  on_hold: ["in_progress"]
68
68
  };
69
69
  }
70
- function ue() {
70
+ function le() {
71
71
  return [
72
72
  {
73
73
  id: "cs_bgbl_270",
@@ -77,7 +77,7 @@ function ue() {
77
77
  reference: "BGBl. 2026 I Nr. 270"
78
78
  },
79
79
  state: "open",
80
- createdBy: b,
80
+ createdBy: x,
81
81
  createTime: "2026-09-30T08:00:00.000Z",
82
82
  chains: [{
83
83
  id: "chain_para_1",
@@ -110,7 +110,7 @@ function ue() {
110
110
  }],
111
111
  dependsOnChangeSetIds: [],
112
112
  status: "in_progress",
113
- assigneeIds: [b],
113
+ assigneeIds: [x],
114
114
  plannedReleases: [
115
115
  {
116
116
  id: "rls_p1_2",
@@ -170,19 +170,19 @@ function ue() {
170
170
  reference: "BGBl. 2026 I Nr. 255"
171
171
  },
172
172
  state: "open",
173
- createdBy: x,
173
+ createdBy: S,
174
174
  createTime: "2026-09-25T08:00:00.000Z",
175
175
  chains: [],
176
176
  dependsOnChangeSetIds: [],
177
177
  status: "",
178
- assigneeIds: [x],
178
+ assigneeIds: [S],
179
179
  plannedReleases: []
180
180
  },
181
181
  {
182
182
  id: "cs_correction_3",
183
183
  name: "Correction of § 3",
184
184
  state: "published",
185
- createdBy: b,
185
+ createdBy: x,
186
186
  createTime: "2026-09-01T08:00:00.000Z",
187
187
  closeTime: "2026-09-02T08:00:00.000Z",
188
188
  chains: [],
@@ -193,7 +193,7 @@ function ue() {
193
193
  }
194
194
  ];
195
195
  }
196
- function de() {
196
+ function ue() {
197
197
  return [{
198
198
  id: "rc_print",
199
199
  name: "Druckprobe",
@@ -208,7 +208,7 @@ function de() {
208
208
  independent: !0
209
209
  }];
210
210
  }
211
- function fe() {
211
+ function de() {
212
212
  return [
213
213
  {
214
214
  id: "col_bgb",
@@ -236,7 +236,7 @@ function fe() {
236
236
  }
237
237
  ];
238
238
  }
239
- function w() {
239
+ function fe() {
240
240
  return [
241
241
  {
242
242
  id: "bp_commentary",
@@ -252,7 +252,7 @@ function w() {
252
252
  }
253
253
  ];
254
254
  }
255
- function T() {
255
+ function pe() {
256
256
  return [
257
257
  {
258
258
  id: "bpr_paragraph_2",
@@ -274,7 +274,7 @@ function T() {
274
274
  }
275
275
  ];
276
276
  }
277
- function pe() {
277
+ function me() {
278
278
  let e = (e, t) => ({
279
279
  field_type: "text",
280
280
  config: {
@@ -301,7 +301,7 @@ function pe() {
301
301
  }
302
302
  };
303
303
  }
304
- function me() {
304
+ function T() {
305
305
  let e = "2001-11-01T08:00:00.000Z";
306
306
  return {
307
307
  id: "content_para_3",
@@ -365,7 +365,7 @@ function he() {
365
365
  blueprintId: "bp_paragraph",
366
366
  blueprintReleaseId: "bpr_paragraph_1",
367
367
  collectionIds: ["col_bgb"],
368
- assigneeIds: [b, x],
368
+ assigneeIds: [x, S],
369
369
  main: {
370
370
  revisionId: "rev_p1_main",
371
371
  data: {
@@ -432,7 +432,7 @@ function he() {
432
432
  secondParentId: "",
433
433
  blueprintReleaseId: "bpr_paragraph_1",
434
434
  createTime: "2026-09-30T09:00:00.000Z",
435
- author: b,
435
+ author: x,
436
436
  cause: "save",
437
437
  branchId: "br_para_1_b",
438
438
  changeSetId: "cs_bgbl_270",
@@ -448,7 +448,7 @@ function he() {
448
448
  secondParentId: "",
449
449
  blueprintReleaseId: "bpr_paragraph_1",
450
450
  createTime: "2026-09-30T08:30:00.000Z",
451
- author: x,
451
+ author: S,
452
452
  cause: "save",
453
453
  branchId: "br_para_1_a",
454
454
  changeSetId: "cs_bgbl_270",
@@ -464,7 +464,7 @@ function he() {
464
464
  secondParentId: "",
465
465
  blueprintReleaseId: "bpr_paragraph_1",
466
466
  createTime: e,
467
- author: b,
467
+ author: x,
468
468
  cause: "create",
469
469
  branchId: "br_para_1_main",
470
470
  changeSetId: "cs_correction_3"
@@ -548,7 +548,7 @@ function he() {
548
548
  blueprintId: "bp_paragraph",
549
549
  blueprintReleaseId: "bpr_paragraph_1",
550
550
  collectionIds: ["col_stgb"],
551
- assigneeIds: [x],
551
+ assigneeIds: [S],
552
552
  main: {
553
553
  revisionId: "rev_s211_main",
554
554
  data: {
@@ -585,7 +585,7 @@ function he() {
585
585
  }
586
586
  //#endregion
587
587
  //#region src/testing/stub-blueprint-source.ts
588
- function E(e = w(), t = T()) {
588
+ function ge(e = fe(), t = pe()) {
589
589
  return {
590
590
  async searchBlueprints({ query: t }) {
591
591
  let n = t.trim().toLocaleLowerCase();
@@ -604,33 +604,33 @@ function E(e = w(), t = T()) {
604
604
  }
605
605
  //#endregion
606
606
  //#region src/testing/stub-client.ts
607
- function ge(e, t) {
607
+ function _e(e, t) {
608
608
  let n = /* @__PURE__ */ new Date(`${e}T00:00:00Z`);
609
609
  return n.setUTCDate(n.getUTCDate() + t), n.toISOString().slice(0, 10);
610
610
  }
611
- function D(e, t, n) {
611
+ function E(e, t, n) {
612
612
  let r = e.trim();
613
613
  if (r === "") throw new i(`${t} is required`);
614
614
  if ([...r].length > n) throw new i(`${t} is at most ${n} characters`);
615
615
  if (/[\u0000-\u001f\u007f]/.test(r)) throw new i(`${t} is one line of text`);
616
616
  return r;
617
617
  }
618
- function _e(e) {
618
+ function ve(e) {
619
619
  if (!/^\d{4}-\d{2}-\d{2}$/.test(e.date.trim())) throw new i(`source.date "${e.date}" is not a day as YYYY-MM-DD`);
620
620
  return {
621
621
  date: e.date.trim(),
622
- reference: D(e.reference, "source.reference", 500)
622
+ reference: E(e.reference, "source.reference", 500)
623
623
  };
624
624
  }
625
- function ve(e) {
625
+ function ye(e) {
626
626
  let t = e.trim();
627
627
  if (t === "") throw new i("a Block Reason needs a name");
628
628
  if ([...t].length > 200) throw new i("a Block Reason's name is at most 200 characters");
629
629
  if (/[\u0000-\u001f\u007f]/.test(t)) throw new i("a Block Reason's name is one line of text");
630
630
  return t;
631
631
  }
632
- function ye(e) {
633
- let t = D(e.name, "a Required Check's name", 200);
632
+ function be(e) {
633
+ let t = E(e.name, "a Required Check's name", 200);
634
634
  if (e.scope !== "branch" && e.scope !== "change_set") throw new i("a Required Check's scope is Branch or Change Set");
635
635
  let n = e.blueprintAccessors.map((e) => {
636
636
  let t = e.trim();
@@ -644,12 +644,12 @@ function ye(e) {
644
644
  independent: e.independent
645
645
  };
646
646
  }
647
- var be = "who records a Required Check can be narrowed only in authz.mode guardian: in workspace mode every member records every check (ADR 0017)", xe = "this Change Set holds work you can't see: publishing, discarding or updating all of it needs you to see every Content in it", O = "Restricted Collections need authz.mode guardian: in workspace mode a restriction could not be enforced (ADR 0017)";
648
- function k(e, t) {
649
- return new _(`${e} ${t}: not found`, g.NotFound);
647
+ var xe = "who records a Required Check can be narrowed only in authz.mode guardian: in workspace mode every member records every check (ADR 0017)", Se = "this Change Set holds work you can't see: publishing, discarding or updating all of it needs you to see every Content in it", D = "Restricted Collections need authz.mode guardian: in workspace mode a restriction could not be enforced (ADR 0017)";
648
+ function O(e, t) {
649
+ return new v(`${e} ${t}: not found`, _.NotFound);
650
650
  }
651
- var A = (e) => structuredClone(e);
652
- function j(e, t = {}) {
651
+ var k = (e) => structuredClone(e);
652
+ function A(e, t = {}) {
653
653
  return {
654
654
  code: e,
655
655
  contentId: "",
@@ -669,13 +669,13 @@ function j(e, t = {}) {
669
669
  ...t
670
670
  };
671
671
  }
672
- function M(g = {}) {
673
- let _ = g.now ?? (() => "2026-10-01T09:00:00.000Z"), v = g.userId ?? "user_stub", y = g.statuses ?? ce(), b = g.statusTransitions ?? le(), x = (g.blockReasons ?? se()).map((e) => ({ ...e })), S = (g.changeSets ?? ue()).map(A), C = (g.collections ?? fe()).map((e) => ({ ...e })), w = structuredClone(g.contents ?? he()), me = g.blueprintReleases ?? T(), E = g.resolvedReleases ?? pe(), M = structuredClone(g.requiredChecks ?? de()), P = g.authzMode ?? "guardian", Se = new Set(g.withheld ?? []), F = (e) => {
674
- if (Se.has(e)) throw new r(xe);
675
- }, I = new Map(Object.entries(structuredClone(g.collectionGrants ?? {}))), L = new Map(Object.entries(structuredClone(g.recorders ?? {}))), Ce = (e) => L.get(e) ?? {
672
+ function j(_ = {}) {
673
+ let v = _.now ?? (() => "2026-10-01T09:00:00.000Z"), y = _.userId ?? "user_stub", b = _.statuses ?? se(), x = _.statusTransitions ?? ce(), S = (_.blockReasons ?? oe()).map((e) => ({ ...e })), C = (_.changeSets ?? le()).map(k), w = (_.collections ?? de()).map((e) => ({ ...e })), T = structuredClone(_.contents ?? he()), ge = _.blueprints ?? fe(), j = _.blueprintReleases ?? pe(), N = _.resolvedReleases ?? me(), P = structuredClone(_.requiredChecks ?? ue()), F = _.authzMode ?? "guardian", Ce = new Set(_.withheld ?? []), I = (e) => {
674
+ if (Ce.has(e)) throw new r(Se);
675
+ }, L = new Map(Object.entries(structuredClone(_.collectionGrants ?? {}))), R = new Map(Object.entries(structuredClone(_.recorders ?? {}))), we = (e) => R.get(e) ?? {
676
676
  everyMember: !0,
677
677
  userIds: []
678
- }, we = g.memberIds ?? ["user_stub", "user_ben"], Te = g.admin ?? !0, Ee = structuredClone(g.checkResults ?? []), De = g.publishBlockers ?? {}, Oe = g.pendingMerges ?? {}, ke = structuredClone(g.conflicts ?? {}), R = /* @__PURE__ */ new Map(), Ae = /* @__PURE__ */ new Map(), z = async (e, t, n) => {
678
+ }, Te = _.memberIds ?? ["user_stub", "user_ben"], Ee = _.admin ?? !0, De = structuredClone(_.checkResults ?? []), Oe = _.publishBlockers ?? {}, ke = _.pendingMerges ?? {}, z = structuredClone(_.conflicts ?? {}), B = /* @__PURE__ */ new Map(), Ae = /* @__PURE__ */ new Map(), V = async (e, t, n) => {
679
679
  if (!e) return n();
680
680
  let r = JSON.stringify(t), a = Ae.get(e);
681
681
  if (a) {
@@ -687,16 +687,16 @@ function M(g = {}) {
687
687
  asked: r,
688
688
  answer: structuredClone(o)
689
689
  }), o;
690
- }, B = /* @__PURE__ */ new Map(), je = /* @__PURE__ */ new Map(), V = 1, H = (e) => {
691
- let t = w.find((t) => t.id === e);
692
- if (!t) throw k("Content", e);
690
+ }, je = /* @__PURE__ */ new Map(), Me = /* @__PURE__ */ new Map(), H = 1, U = (e) => {
691
+ let t = T.find((t) => t.id === e);
692
+ if (!t) throw O("Content", e);
693
693
  return t;
694
- }, U = (e) => structuredClone({
694
+ }, W = (e) => structuredClone({
695
695
  collectionIds: [...e.collectionIds].sort(),
696
696
  assigneeIds: e.assigneeIds ?? [],
697
697
  block: e.block,
698
698
  archiveTime: e.archiveTime
699
- }), Me = () => _().slice(0, 10), W = (e) => E[e.blueprintReleaseId]?.dated ?? !1, G = (e) => {
699
+ }), Ne = () => v().slice(0, 10), G = (e) => N[e.blueprintReleaseId]?.dated ?? !1, K = (e) => {
700
700
  let t = [...e.revisions ?? []], n = [...Object.entries(e.branches).map(([e, t]) => ({
701
701
  ...t,
702
702
  changeSetId: e
@@ -712,46 +712,46 @@ function M(g = {}) {
712
712
  secondParentId: "",
713
713
  blueprintReleaseId: e.blueprintReleaseId,
714
714
  createTime: r.revisionCreateTime,
715
- author: v,
715
+ author: y,
716
716
  cause: "create",
717
717
  branchId: r.branchId,
718
718
  changeSetId: r.changeSetId,
719
719
  data: r.data
720
720
  });
721
721
  return t.sort((e, t) => e.createTime < t.createTime ? 1 : e.createTime > t.createTime ? -1 : 0);
722
- }, K = (e, t) => [
722
+ }, q = (e, t) => [
723
723
  e.main,
724
724
  e.inForce,
725
725
  ...Object.values(e.branches)
726
- ].find((e) => e?.revisionId === t)?.data ?? e.revisions?.find((e) => e.id === t)?.data, Ne = (e, t) => {
726
+ ].find((e) => e?.revisionId === t)?.data ?? e.revisions?.find((e) => e.id === t)?.data, Pe = (e, t) => {
727
727
  let n = (e) => e == null || e === "" || Array.isArray(e) && e.length === 0;
728
728
  return (e ?? []).filter((e) => e.config.required === !0 && n(t[e.config.api_accessor])).map((e) => e.config.api_accessor);
729
- }, q = (e) => {
729
+ }, J = (e) => {
730
730
  if (e.archiveTime) throw new a(e.id);
731
- if (e.block && !e.block.allowedUserIds.includes(v)) throw new re(e.id, e.block.blockReasonId);
732
- }, Pe = (e) => w.flatMap((t) => (t.edges ?? []).filter((n) => n.targetContentId === e && n.pinReleaseId === "" && t.inForce?.revisionId === n.sourceRevisionId).map((e) => ({
731
+ if (e.block && !e.block.allowedUserIds.includes(y)) throw new re(e.id, e.block.blockReasonId);
732
+ }, Fe = (e) => T.flatMap((t) => (t.edges ?? []).filter((n) => n.targetContentId === e && n.pinReleaseId === "" && t.inForce?.revisionId === n.sourceRevisionId).map((e) => ({
733
733
  edge: { ...e },
734
734
  releaseId: t.inForce?.releaseId ?? ""
735
- }))), Fe = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id), Ie = (e, t) => x.some((n) => n.name === e && n.id !== t), Le = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id), J = (e) => {
736
- let t = C.find((t) => t.id === e);
737
- if (!t) throw k("Collection", e);
735
+ }))), Ie = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id), Le = (e, t) => S.some((n) => n.name === e && n.id !== t), Re = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id), Y = (e) => {
736
+ let t = w.find((t) => t.id === e);
737
+ if (!t) throw O("Collection", e);
738
738
  return t;
739
- }, Y = (e, t, n) => C.some((r) => r.parentId === e && r.name === t && r.id !== n), X = (e) => {
740
- if (P === "workspace") throw new n(O);
741
- if (!J(e).restricted) throw new i(`Collection ${e} is open: only a Restricted Collection takes grants`);
742
- let t = (I.get(e) ?? []).some((e) => e.userId === v && e.level === "owner");
743
- if (!Te && !t) throw new ee("only its owner or a workspace admin manages its grants");
744
- }, Re = (e) => {
745
- if (P === "workspace") throw new ae("required_check_recorders", be);
746
- if (!Te) throw new ee("permission denied");
739
+ }, ze = (e, t, n) => w.some((r) => r.parentId === e && r.name === t && r.id !== n), Be = (e) => {
740
+ if (F === "workspace") throw new n(D);
741
+ if (!Y(e).restricted) throw new i(`Collection ${e} is open: only a Restricted Collection takes grants`);
742
+ let t = (L.get(e) ?? []).some((e) => e.userId === y && e.level === "owner");
743
+ if (!Ee && !t) throw new ee("only its owner or a workspace admin manages its grants");
744
+ }, Ve = (e) => {
745
+ if (F === "workspace") throw new ae("required_check_recorders", xe);
746
+ if (!Ee) throw new ee("permission denied");
747
747
  if (e === "") throw new i("required_check_id is required");
748
- if (!M.some((t) => t.id === e)) throw k("Required Check", e);
749
- return Ce(e);
750
- }, ze = async ({ changeSetId: e, branchId: t, expectedHeadId: n, data: r, fieldMask: a }) => {
751
- let o = Q(e).chains.find((e) => e.branches.some((e) => e.id === t)), s = o?.branches.find((e) => e.id === t);
752
- if (!o || !s) throw k("Branch", t);
753
- let c = H(o.contentId);
754
- if (q(c), R.has(t)) throw new i("a Pending Merge waits on this Branch: resolve or abort it first");
748
+ if (!P.some((t) => t.id === e)) throw O("Required Check", e);
749
+ return we(e);
750
+ }, He = async ({ changeSetId: e, branchId: t, expectedHeadId: n, data: r, fieldMask: a }) => {
751
+ let o = Z(e).chains.find((e) => e.branches.some((e) => e.id === t)), s = o?.branches.find((e) => e.id === t);
752
+ if (!o || !s) throw O("Branch", t);
753
+ let c = U(o.contentId);
754
+ if (J(c), B.has(t)) throw new i("a Pending Merge waits on this Branch: resolve or abort it first");
755
755
  if (n === "") throw new i("expected_head_id is required");
756
756
  if (s.headRevisionId !== n) throw new f({
757
757
  contentId: c.id,
@@ -759,14 +759,14 @@ function M(g = {}) {
759
759
  expectedHeadId: n,
760
760
  currentHeadId: s.headRevisionId
761
761
  });
762
- let l = K(c, s.headRevisionId) ?? {}, u = JSON.parse(JSON.stringify(r)), d;
762
+ let l = q(c, s.headRevisionId) ?? {}, u = JSON.parse(JSON.stringify(r)), d;
763
763
  if (a) {
764
764
  let e = Object.keys(u).filter((e) => !a.includes(e));
765
765
  if (e.length > 0) throw new i(`data holds ${e.join(", ")}, which the mask doesn't name`);
766
766
  d = structuredClone(l);
767
767
  for (let e of a) e in u ? d[e] = u[e] : delete d[e];
768
768
  } else d = u;
769
- return Be({
769
+ return Ue({
770
770
  changeSetId: e,
771
771
  chain: o,
772
772
  branch: s,
@@ -774,8 +774,8 @@ function M(g = {}) {
774
774
  data: d,
775
775
  cause: "save"
776
776
  });
777
- }, Be = ({ changeSetId: e, chain: t, branch: n, c: r, data: i, cause: a, secondParentId: o = "" }) => {
778
- let s = n.id, c = `rev_stub_${V++}`, l = _();
777
+ }, Ue = ({ changeSetId: e, chain: t, branch: n, c: r, data: i, cause: a, secondParentId: o = "" }) => {
778
+ let s = n.id, c = `rev_stub_${H++}`, l = v();
779
779
  return r.revisions = [{
780
780
  id: c,
781
781
  contentId: r.id,
@@ -783,7 +783,7 @@ function M(g = {}) {
783
783
  secondParentId: o,
784
784
  blueprintReleaseId: r.blueprintReleaseId,
785
785
  createTime: l,
786
- author: v,
786
+ author: y,
787
787
  cause: a,
788
788
  branchId: s,
789
789
  changeSetId: e,
@@ -804,17 +804,17 @@ function M(g = {}) {
804
804
  revisionCreateTime: l,
805
805
  releaseId: ""
806
806
  };
807
- }, Ve = (e, t) => {
808
- let n = Q(e), r = n.chains.find((e) => e.branches.some((e) => e.id === t)), i = r?.branches.find((e) => e.id === t);
809
- if (!r || !i) throw k("Branch", t);
807
+ }, We = (e, t) => {
808
+ let n = Z(e), r = n.chains.find((e) => e.branches.some((e) => e.id === t)), i = r?.branches.find((e) => e.id === t);
809
+ if (!r || !i) throw O("Branch", t);
810
810
  return {
811
811
  cs: n,
812
812
  chain: r,
813
813
  branch: i,
814
- c: H(r.contentId)
814
+ c: U(r.contentId)
815
815
  };
816
- }, He = (e, t) => {
817
- for (let n of S) for (let r of n.chains) {
816
+ }, Ge = (e, t) => {
817
+ for (let n of C) for (let r of n.chains) {
818
818
  let n = r.branches.find((t) => t.id === e);
819
819
  if (!n) continue;
820
820
  let i = {
@@ -827,37 +827,37 @@ function M(g = {}) {
827
827
  fields: structuredClone(t.fields),
828
828
  merged: structuredClone(t.merged)
829
829
  };
830
- R.set(e, i), n.hasPendingMerge = !0, delete ke[e];
830
+ B.set(e, i), n.hasPendingMerge = !0, delete z[e];
831
831
  return;
832
832
  }
833
- throw k("Branch", e);
834
- }, Ue = (e) => {
835
- R.delete(e);
836
- for (let t of S) for (let n of t.chains) {
833
+ throw O("Branch", e);
834
+ }, Ke = (e) => {
835
+ B.delete(e);
836
+ for (let t of C) for (let n of t.chains) {
837
837
  let t = n.branches.find((t) => t.id === e);
838
838
  t && (t.hasPendingMerge = !1);
839
839
  }
840
- }, We = (e, t) => {
840
+ }, qe = (e, t) => {
841
841
  let n = t.validityPeriod;
842
- if (W(e)) {
842
+ if (G(e)) {
843
843
  if (!n || !h.test(n.firstDay)) throw new i("validity_period.first_day is required for Dated Content");
844
844
  if (n.lastDay !== "" && (!h.test(n.lastDay) || n.lastDay < n.firstDay)) throw new i("validity_period.last_day is a day on or after first_day");
845
845
  } else if (n) throw new i("validity_period is refused for undated Content");
846
- let r = Ne(E[e.blueprintReleaseId]?.releaseSpec, t.releaseSpec ?? {}).map((e) => ({
846
+ let r = Pe(N[e.blueprintReleaseId]?.releaseSpec, t.releaseSpec ?? {}).map((e) => ({
847
847
  source: "fieldkit",
848
848
  code: "required",
849
849
  path: `/${e}`
850
850
  }));
851
- if (r.length > 0) throw new oe("the Release Spec values break the Blueprint Release", r);
851
+ if (r.length > 0) throw new g("the Release Spec values break the Blueprint Release", r);
852
852
  if (n && n.lastDay !== "") {
853
853
  let r = (e.timeline ?? []).filter((e) => e.validityPeriod && e.validityPeriod.lastDay !== "" && n.firstDay <= e.validityPeriod.firstDay && e.validityPeriod.lastDay <= n.lastDay && !t.supersedesReleaseIds.includes(e.releaseId)).map((e) => e.releaseId);
854
854
  if (r.length > 0) throw new o(e.id, r);
855
855
  }
856
- }, Ge = (e, t) => {
856
+ }, Je = (e, t) => {
857
857
  let n = e.plannedReleases.filter((e) => e.contentId === t.id && e.proposed), r = e.plannedReleases.filter((e) => !(e.contentId === t.id && e.proposed)), i = [], a = (e, r, a) => {
858
858
  let o = n.find((t) => t.proposedForReleaseId === e.releaseId && t.splitFromReleaseId === a);
859
859
  i.push({
860
- id: o?.id ?? `rls_stub_${V++}`,
860
+ id: o?.id ?? `rls_stub_${H++}`,
861
861
  contentId: t.id,
862
862
  kind: "date_only",
863
863
  branchId: "",
@@ -876,23 +876,23 @@ function M(g = {}) {
876
876
  let t = r.validityPeriod;
877
877
  t && !e.supersedesReleaseIds.includes(r.releaseId) && t.firstDay < n.firstDay && (t.lastDay === "" || t.lastDay >= n.firstDay) && (a(r, {
878
878
  firstDay: t.firstDay,
879
- lastDay: ge(n.firstDay, -1)
879
+ lastDay: _e(n.firstDay, -1)
880
880
  }, ""), n.lastDay !== "" && (t.lastDay === "" || t.lastDay > n.lastDay) && a(r, {
881
- firstDay: ge(n.lastDay, 1),
881
+ firstDay: _e(n.lastDay, 1),
882
882
  lastDay: t.lastDay
883
883
  }, r.releaseId));
884
884
  }
885
885
  }
886
886
  e.plannedReleases = [...r, ...i];
887
- }, Z = (e) => {
888
- let t = S.find((t) => t.id === e);
889
- if (!t) throw k("Change Set", e);
887
+ }, X = (e) => {
888
+ let t = C.find((t) => t.id === e);
889
+ if (!t) throw O("Change Set", e);
890
890
  return t;
891
- }, Q = (e) => {
892
- let t = Z(e);
891
+ }, Z = (e) => {
892
+ let t = X(e);
893
893
  if (t.state !== "open") throw new l(t.state);
894
894
  return t;
895
- }, Ke = (e) => y.find((t) => t.slug === e)?.name ?? e, qe = (e, t, n = /* @__PURE__ */ new Set()) => e === t || !n.has(e) && (n.add(e), (S.find((t) => t.id === e)?.dependsOnChangeSetIds ?? []).some((e) => qe(e, t, n))), Je = (e) => [...e.chains.flatMap((e) => e.branches.map((t) => ({
895
+ }, Ye = (e) => b.find((t) => t.slug === e)?.name ?? e, Xe = (e, t, n = /* @__PURE__ */ new Set()) => e === t || !n.has(e) && (n.add(e), (C.find((t) => t.id === e)?.dependsOnChangeSetIds ?? []).some((e) => Xe(e, t, n))), Ze = (e) => [...e.chains.flatMap((e) => e.branches.map((t) => ({
896
896
  key: t.id,
897
897
  branchless: !1,
898
898
  contentId: e.contentId,
@@ -902,8 +902,8 @@ function M(g = {}) {
902
902
  branchless: !0,
903
903
  contentId: e.contentId,
904
904
  revision: e.revisionId
905
- }))], Ye = (e) => w.find((t) => t.id === e)?.blueprintId, Xe = (e, t) => e.blueprintAccessors.length === 0 || e.blueprintAccessors.includes(Ye(t) ?? ""), Ze = (e) => {
906
- let t = Je(e), n = (t, n) => Ee.filter((n) => n.changeSetId === e.id && n.requiredCheckId === t.id).filter((e) => (t.scope === "change_set" ? "" : Object.keys(e.heads)[0]) === n).reverse().map(({ changeSetId: e, ...t }) => structuredClone(t)), r = (e, t, n) => {
905
+ }))], Qe = (e) => T.find((t) => t.id === e)?.blueprintId, $e = (e, t) => e.blueprintAccessors.length === 0 || e.blueprintAccessors.includes(Qe(t) ?? ""), et = (e) => {
906
+ let t = Ze(e), n = (t, n) => De.filter((n) => n.changeSetId === e.id && n.requiredCheckId === t.id).filter((e) => (t.scope === "change_set" ? "" : Object.keys(e.heads)[0]) === n).reverse().map(({ changeSetId: e, ...t }) => structuredClone(t)), r = (e, t, n) => {
907
907
  let r = n[0], i = r ? !p(r.heads, t.heads) : !1;
908
908
  return {
909
909
  check: structuredClone(e),
@@ -913,8 +913,8 @@ function M(g = {}) {
913
913
  cleared: !!r && !i && r.outcome !== "failed"
914
914
  };
915
915
  }, i = [], a = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id);
916
- for (let e of [...M].sort(a)) {
917
- let a = t.filter((t) => Xe(e, t.contentId));
916
+ for (let e of [...P].sort(a)) {
917
+ let a = t.filter((t) => $e(e, t.contentId));
918
918
  if (e.scope === "change_set") {
919
919
  if (a.length === 0) continue;
920
920
  let o = Object.fromEntries(t.map((e) => [e.key, e.revision]));
@@ -934,41 +934,41 @@ function M(g = {}) {
934
934
  }, n(e, t.key)));
935
935
  }
936
936
  return i;
937
- }, Qe = (e, t) => {
937
+ }, tt = (e, t) => {
938
938
  let n = [], r = te(e);
939
- for (let r of e.chains) for (let e of r.branches) t[e.id] !== e.headRevisionId && n.push(j("moved_head", {
939
+ for (let r of e.chains) for (let e of r.branches) t[e.id] !== e.headRevisionId && n.push(A("moved_head", {
940
940
  contentId: r.contentId,
941
941
  branchId: e.id,
942
942
  expectedHeadId: t[e.id] ?? "",
943
943
  currentHeadId: e.headRevisionId
944
944
  }));
945
- for (let [e, i] of Object.entries(t)) e in r || n.push(j("moved_head", {
945
+ for (let [e, i] of Object.entries(t)) e in r || n.push(A("moved_head", {
946
946
  branchId: e,
947
947
  expectedHeadId: i
948
948
  }));
949
949
  for (let t of e.dependsOnChangeSetIds) {
950
- let e = S.find((e) => e.id === t)?.state;
951
- e === "open" ? n.push(j("unpublished_dependency", { dependencyChangeSetId: t })) : e === "discarded" && n.push(j("discarded_dependency", { dependencyChangeSetId: t }));
950
+ let e = C.find((e) => e.id === t)?.state;
951
+ e === "open" ? n.push(A("unpublished_dependency", { dependencyChangeSetId: t })) : e === "discarded" && n.push(A("discarded_dependency", { dependencyChangeSetId: t }));
952
952
  }
953
- for (let t of Ze(e)) t.cleared || n.push(j("outstanding_check", {
953
+ for (let t of et(e)) t.cleared || n.push(A("outstanding_check", {
954
954
  requiredCheckId: t.check.id,
955
955
  contentId: t.contentId,
956
956
  branchId: t.branchId,
957
957
  releaseId: t.releaseId
958
958
  }));
959
959
  for (let t of e.chains) {
960
- let e = w.find((e) => e.id === t.contentId);
960
+ let e = T.find((e) => e.id === t.contentId);
961
961
  for (let r of t.branches) {
962
- let t = e && K(e, r.headRevisionId);
963
- if (e && t) for (let i of Ne(E[e.blueprintReleaseId]?.fields, t)) n.push(j("missing_required_field", {
962
+ let t = e && q(e, r.headRevisionId);
963
+ if (e && t) for (let i of Pe(N[e.blueprintReleaseId]?.fields, t)) n.push(A("missing_required_field", {
964
964
  contentId: e.id,
965
965
  revisionId: r.headRevisionId,
966
966
  path: `/${i}`
967
967
  }));
968
968
  }
969
969
  }
970
- return [...n, ...structuredClone(De[e.id] ?? [])];
971
- }, $ = (e) => {
970
+ return [...n, ...structuredClone(Oe[e.id] ?? [])];
971
+ }, Q = (e) => {
972
972
  let t = te(e);
973
973
  return e.plannedReleases.filter((e) => !e.withheld).map((n) => ({
974
974
  id: n.id,
@@ -981,37 +981,37 @@ function M(g = {}) {
981
981
  validityPeriod: n.validityPeriod ? { ...n.validityPeriod } : void 0
982
982
  }));
983
983
  };
984
- for (let [e, t] of Object.entries(ke)) t.pending && He(e, t);
984
+ for (let [e, t] of Object.entries(z)) t.pending && Ge(e, t);
985
985
  return {
986
986
  async listBlockReasons() {
987
- return [...x].sort(Fe).map((e) => ({ ...e }));
987
+ return [...S].sort(Ie).map((e) => ({ ...e }));
988
988
  },
989
989
  async createBlockReason({ name: e }) {
990
- let t = ve(e);
991
- if (Ie(t)) throw new ne(t);
990
+ let t = ye(e);
991
+ if (Le(t)) throw new ne(t);
992
992
  let n = {
993
- id: `br_stub_${V++}`,
993
+ id: `br_stub_${H++}`,
994
994
  name: t,
995
- createTime: _(),
996
- updateTime: _()
995
+ createTime: v(),
996
+ updateTime: v()
997
997
  };
998
- return x.push(n), { ...n };
998
+ return S.push(n), { ...n };
999
999
  },
1000
1000
  async renameBlockReason({ id: e, name: t }) {
1001
- let n = ve(t), r = x.find((t) => t.id === e);
1002
- if (!r) throw k("Block Reason", e);
1003
- if (Ie(n, e)) throw new ne(n);
1004
- return r.name = n, r.updateTime = _(), { ...r };
1001
+ let n = ye(t), r = S.find((t) => t.id === e);
1002
+ if (!r) throw O("Block Reason", e);
1003
+ if (Le(n, e)) throw new ne(n);
1004
+ return r.name = n, r.updateTime = v(), { ...r };
1005
1005
  },
1006
1006
  async deleteBlockReason({ id: e }) {
1007
- if (!x.some((t) => t.id === e)) throw k("Block Reason", e);
1008
- x = x.filter((t) => t.id !== e);
1007
+ if (!S.some((t) => t.id === e)) throw O("Block Reason", e);
1008
+ S = S.filter((t) => t.id !== e);
1009
1009
  },
1010
1010
  async listChangeSets(e = {}) {
1011
- let t = S.filter((t) => (!e.state || t.state === e.state) && (!e.assigneeId || t.assigneeIds.includes(e.assigneeId)) && (!e.contentId || t.chains.some((t) => t.contentId === e.contentId))), n = Math.min(e.pageSize || 50, 200), r = e.pageToken ? Number(e.pageToken) : 0;
1011
+ let t = C.filter((t) => (!e.state || t.state === e.state) && (!e.assigneeId || t.assigneeIds.includes(e.assigneeId)) && (!e.contentId || t.chains.some((t) => t.contentId === e.contentId))), n = Math.min(e.pageSize || 50, 200), r = e.pageToken ? Number(e.pageToken) : 0;
1012
1012
  return {
1013
1013
  changeSets: t.slice(r, r + n).map((e) => ({
1014
- ...A(e),
1014
+ ...k(e),
1015
1015
  chains: [],
1016
1016
  dependsOnChangeSetIds: [],
1017
1017
  plannedReleases: []
@@ -1020,115 +1020,115 @@ function M(g = {}) {
1020
1020
  };
1021
1021
  },
1022
1022
  async createChangeSet({ name: e, source: t }) {
1023
- let n = D(e, "name", 200), r = t ? _e(t) : void 0, i = {
1024
- id: `cs_stub_${V++}`,
1023
+ let n = E(e, "name", 200), r = t ? ve(t) : void 0, i = {
1024
+ id: `cs_stub_${H++}`,
1025
1025
  name: n,
1026
1026
  source: r,
1027
1027
  state: "open",
1028
- createdBy: v,
1029
- createTime: _(),
1028
+ createdBy: y,
1029
+ createTime: v(),
1030
1030
  chains: [],
1031
1031
  dependsOnChangeSetIds: [],
1032
1032
  status: "",
1033
1033
  assigneeIds: [],
1034
1034
  plannedReleases: []
1035
1035
  };
1036
- return S.unshift(i), A(i);
1036
+ return C.unshift(i), k(i);
1037
1037
  },
1038
1038
  async getChangeSet(e) {
1039
- return A(Z(e));
1039
+ return k(X(e));
1040
1040
  },
1041
1041
  async updateChangeSet({ id: e, updateMask: t, name: n, source: r }) {
1042
- let a = Q(e);
1042
+ let a = Z(e);
1043
1043
  if (t.length === 0) throw new i("update_mask is required");
1044
- let o = t.includes("name") ? D(n ?? "", "name", 200) : a.name, s = a.source;
1045
- return t.includes("source") && (s = r ? _e(r) : void 0), a.name = o, a.source = s, A(a);
1044
+ let o = t.includes("name") ? E(n ?? "", "name", 200) : a.name, s = a.source;
1045
+ return t.includes("source") && (s = r ? ve(r) : void 0), a.name = o, a.source = s, k(a);
1046
1046
  },
1047
1047
  async setChangeSetStatus({ id: t, expectedStatus: n, status: r }) {
1048
- let a = Q(t);
1048
+ let a = Z(t);
1049
1049
  if (a.status !== n) throw new e(a.status);
1050
- if (a.status === r) return A(a);
1051
- if (!y.some((e) => e.slug === r)) throw new i(`status "${r}" is not in the workspace's catalogue`);
1052
- if (y.some((e) => e.slug === a.status) && !(b[a.status] ?? []).includes(r)) throw new d({
1050
+ if (a.status === r) return k(a);
1051
+ if (!b.some((e) => e.slug === r)) throw new i(`status "${r}" is not in the workspace's catalogue`);
1052
+ if (b.some((e) => e.slug === a.status) && !(x[a.status] ?? []).includes(r)) throw new d({
1053
1053
  fromStatus: a.status,
1054
1054
  toStatus: r,
1055
- reason: `There is no transition from ${Ke(a.status)} to ${Ke(r)}.`,
1055
+ reason: `There is no transition from ${Ye(a.status)} to ${Ye(r)}.`,
1056
1056
  requiresPermission: !1
1057
1057
  });
1058
- return a.status = r, A(a);
1058
+ return a.status = r, k(a);
1059
1059
  },
1060
1060
  async setChangeSetAssignees({ id: e, assigneeIds: t }) {
1061
- let n = Z(e);
1061
+ let n = X(e);
1062
1062
  if (new Set(t).size !== t.length) throw new i("each assignee is given once");
1063
1063
  if (t.length > 50) throw new i("at most 50 assignees");
1064
- return n.assigneeIds = [...t], A(n);
1064
+ return n.assigneeIds = [...t], k(n);
1065
1065
  },
1066
1066
  async addDependency({ id: e, dependsOnId: t }) {
1067
- let n = Q(e), r = Z(t);
1067
+ let n = Z(e), r = X(t);
1068
1068
  if (r.state !== "open") throw new i(`Change Set ${t} is ${r.state}`);
1069
- if (qe(t, e)) throw new i("the dependency would close a cycle");
1070
- return n.dependsOnChangeSetIds.includes(t) || n.dependsOnChangeSetIds.push(t), A(n);
1069
+ if (Xe(t, e)) throw new i("the dependency would close a cycle");
1070
+ return n.dependsOnChangeSetIds.includes(t) || n.dependsOnChangeSetIds.push(t), k(n);
1071
1071
  },
1072
1072
  async removeDependency({ id: e, dependsOnId: t }) {
1073
- let n = Q(e);
1074
- if (!n.dependsOnChangeSetIds.includes(t)) throw k(`dependency of Change Set ${e} on`, t);
1075
- return n.dependsOnChangeSetIds = n.dependsOnChangeSetIds.filter((e) => e !== t), A(n);
1073
+ let n = Z(e);
1074
+ if (!n.dependsOnChangeSetIds.includes(t)) throw O(`dependency of Change Set ${e} on`, t);
1075
+ return n.dependsOnChangeSetIds = n.dependsOnChangeSetIds.filter((e) => e !== t), k(n);
1076
1076
  },
1077
1077
  async validatePublish({ id: e, reviewedHeads: t }) {
1078
- let n = Z(e);
1079
- F(e);
1080
- let r = B.get(e);
1078
+ let n = X(e);
1079
+ I(e);
1080
+ let r = je.get(e);
1081
1081
  if (r && p(r, t)) return {
1082
1082
  blockers: [],
1083
- releases: $(n),
1083
+ releases: Q(n),
1084
1084
  published: !0
1085
1085
  };
1086
1086
  if (n.state !== "open") throw new l(n.state);
1087
1087
  return {
1088
- blockers: Qe(n, t),
1089
- releases: $(n),
1088
+ blockers: tt(n, t),
1089
+ releases: Q(n),
1090
1090
  published: !1
1091
1091
  };
1092
1092
  },
1093
1093
  async publish({ id: e, reviewedHeads: t }) {
1094
- let n = Z(e);
1095
- F(e);
1096
- let r = B.get(e);
1094
+ let n = X(e);
1095
+ I(e);
1096
+ let r = je.get(e);
1097
1097
  if (r && p(r, t)) return {
1098
- changeSet: A(n),
1099
- publishTime: n.closeTime ?? _(),
1100
- releases: $(n)
1098
+ changeSet: k(n),
1099
+ publishTime: n.closeTime ?? v(),
1100
+ releases: Q(n)
1101
1101
  };
1102
1102
  if (n.state !== "open") throw new l(n.state);
1103
- let i = Qe(n, t);
1103
+ let i = tt(n, t);
1104
1104
  if (i.length > 0) throw new ie(i);
1105
- let a = $(n);
1106
- return n.state = "published", n.closeTime = _(), B.set(e, { ...t }), {
1107
- changeSet: A(n),
1105
+ let a = Q(n);
1106
+ return n.state = "published", n.closeTime = v(), je.set(e, { ...t }), {
1107
+ changeSet: k(n),
1108
1108
  publishTime: n.closeTime,
1109
1109
  releases: a
1110
1110
  };
1111
1111
  },
1112
1112
  async updateFromMain({ id: e, chainId: t, idempotencyKey: n }) {
1113
- return z(n, [
1113
+ return V(n, [
1114
1114
  "updateFromMain",
1115
1115
  e,
1116
1116
  t
1117
1117
  ], async () => {
1118
- let n = Q(e);
1119
- t || F(e);
1118
+ let n = Z(e);
1119
+ t || I(e);
1120
1120
  let r = t ? n.chains.filter((e) => e.id === t) : n.chains;
1121
- if (t && r.length === 0) throw k("Chain", t);
1122
- let i = structuredClone(Oe[e] ?? []), a = [];
1121
+ if (t && r.length === 0) throw O("Chain", t);
1122
+ let i = structuredClone(ke[e] ?? []), a = [];
1123
1123
  for (let e of r) for (let t of e.branches) {
1124
1124
  let n = {
1125
1125
  branchId: t.id,
1126
1126
  contentId: e.contentId
1127
- }, r = ke[t.id];
1128
- R.has(t.id) ? a.push(n) : r && (He(t.id, r), i.push(n));
1127
+ }, r = z[t.id];
1128
+ B.has(t.id) ? a.push(n) : r && (Ge(t.id, r), i.push(n));
1129
1129
  }
1130
1130
  return {
1131
- changeSet: A(n),
1131
+ changeSet: k(n),
1132
1132
  mergedBranchIds: [],
1133
1133
  conflicted: i,
1134
1134
  pending: a,
@@ -1137,21 +1137,21 @@ function M(g = {}) {
1137
1137
  });
1138
1138
  },
1139
1139
  async discardChangeSet(e) {
1140
- let t = Q(e);
1141
- return F(e), t.state = "discarded", t.closeTime = _(), t.chains = [], A(t);
1140
+ let t = Z(e);
1141
+ return I(e), t.state = "discarded", t.closeTime = v(), t.chains = [], k(t);
1142
1142
  },
1143
1143
  async listCheckResults(e) {
1144
- return Ze(Z(e));
1144
+ return et(X(e));
1145
1145
  },
1146
1146
  async recordCheckResult({ changeSetId: e, requiredCheckId: t, heads: n, outcome: r, note: a }) {
1147
- let o = Q(e);
1147
+ let o = Z(e);
1148
1148
  if (r === "waived" && a.trim() === "") throw new i("a waived result needs a note saying why");
1149
1149
  if ([...a].length > 2e3) throw new i(`a note is at most ${s} characters`);
1150
- let l = M.find((e) => e.id === t);
1151
- if (!l) throw k("Required Check", t);
1152
- let u = Ce(t);
1153
- if (P === "guardian" && !u.everyMember && !u.userIds.includes(v)) throw new c(`recording results of Required Check ${t} needs its recorder relation`);
1154
- let d = Je(o), p = Object.keys(n);
1150
+ let l = P.find((e) => e.id === t);
1151
+ if (!l) throw O("Required Check", t);
1152
+ let u = we(t);
1153
+ if (F === "guardian" && !u.everyMember && !u.userIds.includes(y)) throw new c(`recording results of Required Check ${t} needs its recorder relation`);
1154
+ let d = Ze(o), p = Object.keys(n);
1155
1155
  if (l.scope === "branch" && p.length !== 1) throw new i("a Branch-scope result names one head");
1156
1156
  if (l.scope === "change_set" && p.length !== d.length) throw new i("a Change Set-scope result names every head of the Change Set");
1157
1157
  for (let e of p) {
@@ -1165,63 +1165,63 @@ function M(g = {}) {
1165
1165
  });
1166
1166
  }
1167
1167
  let m = {
1168
- id: `cr_stub_${V++}`,
1168
+ id: `cr_stub_${H++}`,
1169
1169
  requiredCheckId: t,
1170
1170
  heads: { ...n },
1171
1171
  outcome: r,
1172
1172
  note: a,
1173
- recordedBy: v,
1174
- recordTime: _()
1173
+ recordedBy: y,
1174
+ recordTime: v()
1175
1175
  };
1176
- return Ee.push({
1176
+ return De.push({
1177
1177
  ...m,
1178
1178
  changeSetId: e
1179
1179
  }), structuredClone(m);
1180
1180
  },
1181
1181
  async listRequiredChecks() {
1182
1182
  let e = (e, t) => e.name < t.name ? -1 : e.name > t.name ? 1 : e.id < t.id ? -1 : +(e.id > t.id);
1183
- return structuredClone([...M].sort(e));
1183
+ return structuredClone([...P].sort(e));
1184
1184
  },
1185
1185
  async createRequiredCheck(e) {
1186
- let n = ye(e);
1187
- if (M.some((e) => e.name === n.name)) throw new t(n.name);
1186
+ let n = be(e);
1187
+ if (P.some((e) => e.name === n.name)) throw new t(n.name);
1188
1188
  let r = {
1189
- id: `rc_stub_${V++}`,
1189
+ id: `rc_stub_${H++}`,
1190
1190
  ...n
1191
1191
  };
1192
- return M.push(r), structuredClone(r);
1192
+ return P.push(r), structuredClone(r);
1193
1193
  },
1194
1194
  async updateRequiredCheck({ id: e, ...n }) {
1195
- let r = ye(n), i = M.find((t) => t.id === e);
1196
- if (!i) throw k("Required Check", e);
1197
- if (M.some((t) => t.name === r.name && t.id !== e)) throw new t(r.name);
1195
+ let r = be(n), i = P.find((t) => t.id === e);
1196
+ if (!i) throw O("Required Check", e);
1197
+ if (P.some((t) => t.name === r.name && t.id !== e)) throw new t(r.name);
1198
1198
  return Object.assign(i, r), structuredClone(i);
1199
1199
  },
1200
1200
  async deleteRequiredCheck({ id: e }) {
1201
- if (!M.some((t) => t.id === e)) throw k("Required Check", e);
1202
- M = M.filter((t) => t.id !== e), L.delete(e);
1201
+ if (!P.some((t) => t.id === e)) throw O("Required Check", e);
1202
+ P = P.filter((t) => t.id !== e), R.delete(e);
1203
1203
  },
1204
1204
  async listRequiredCheckRecorders(e) {
1205
- return structuredClone(Re(e));
1205
+ return structuredClone(Ve(e));
1206
1206
  },
1207
1207
  async grantRequiredCheckRecorder({ requiredCheckId: e, recorder: t }) {
1208
- let n = Re(e);
1208
+ let n = Ve(e);
1209
1209
  if ("everyMember" in t) {
1210
- L.set(e, {
1210
+ R.set(e, {
1211
1211
  ...n,
1212
1212
  everyMember: !0
1213
1213
  });
1214
1214
  return;
1215
1215
  }
1216
- if (!we.includes(t.userId)) throw new i(`user ${t.userId} is not a member of the workspace`);
1217
- L.set(e, {
1216
+ if (!Te.includes(t.userId)) throw new i(`user ${t.userId} is not a member of the workspace`);
1217
+ R.set(e, {
1218
1218
  ...n,
1219
1219
  userIds: [.../* @__PURE__ */ new Set([...n.userIds, t.userId])].sort()
1220
1220
  });
1221
1221
  },
1222
1222
  async revokeRequiredCheckRecorder({ requiredCheckId: e, recorder: t }) {
1223
- let n = Re(e);
1224
- L.set(e, "everyMember" in t ? {
1223
+ let n = Ve(e);
1224
+ R.set(e, "everyMember" in t ? {
1225
1225
  ...n,
1226
1226
  everyMember: !1
1227
1227
  } : {
@@ -1229,94 +1229,111 @@ function M(g = {}) {
1229
1229
  userIds: n.userIds.filter((e) => e !== t.userId)
1230
1230
  });
1231
1231
  },
1232
+ async searchBlueprints({ query: e }) {
1233
+ let t = e.trim().toLocaleLowerCase();
1234
+ return {
1235
+ blueprints: ge.filter((e) => e.name.toLocaleLowerCase().includes(t)).filter((e) => j.some((t) => t.blueprintId === e.id)).map((e) => ({ ...e })),
1236
+ nextPageToken: ""
1237
+ };
1238
+ },
1239
+ async listBlueprintReleases(e) {
1240
+ return j.filter((t) => t.blueprintId === e).map((e) => ({
1241
+ id: e.id,
1242
+ blueprintId: e.blueprintId,
1243
+ name: e.name ?? e.id,
1244
+ releaseTime: e.releaseTime ?? "2026-10-01T09:00:00.000Z",
1245
+ refusals: (e.refusals ?? []).map((e) => ({ ...e }))
1246
+ }));
1247
+ },
1232
1248
  async listCollections() {
1233
- return [...C].sort(Le).map((e) => ({ ...e }));
1249
+ return [...w].sort(Re).map((e) => ({ ...e }));
1234
1250
  },
1235
1251
  async createCollection({ name: e, parentId: r = "", restricted: i = !1 }) {
1236
- let a = D(e, "a Collection's name", 200);
1237
- if (r !== "" && J(r), i && P === "workspace") throw new n(O);
1238
- if (Y(r, a)) throw new t(a);
1252
+ let a = E(e, "a Collection's name", 200);
1253
+ if (r !== "" && Y(r), i && F === "workspace") throw new n(D);
1254
+ if (ze(r, a)) throw new t(a);
1239
1255
  let o = {
1240
- id: `col_stub_${V++}`,
1256
+ id: `col_stub_${H++}`,
1241
1257
  name: a,
1242
1258
  parentId: r,
1243
1259
  restricted: i
1244
1260
  };
1245
- return C.push(o), i && I.set(o.id, [{
1246
- userId: v,
1261
+ return w.push(o), i && L.set(o.id, [{
1262
+ userId: y,
1247
1263
  level: "owner"
1248
1264
  }]), { ...o };
1249
1265
  },
1250
1266
  async renameCollection({ id: e, name: n }) {
1251
- let r = D(n, "a Collection's name", 200), i = J(e);
1252
- if (Y(i.parentId, r, e)) throw new t(r);
1267
+ let r = E(n, "a Collection's name", 200), i = Y(e);
1268
+ if (ze(i.parentId, r, e)) throw new t(r);
1253
1269
  return i.name = r, { ...i };
1254
1270
  },
1255
1271
  async moveCollection({ id: e, parentId: n }) {
1256
- let r = J(e);
1257
- for (let t = n; t !== ""; t = J(t).parentId) if (t === e) throw new i(`Collection ${e} can't move under itself or a Collection under it`);
1258
- if (Y(n, r.name, e)) throw new t("");
1272
+ let r = Y(e);
1273
+ for (let t = n; t !== ""; t = Y(t).parentId) if (t === e) throw new i(`Collection ${e} can't move under itself or a Collection under it`);
1274
+ if (ze(n, r.name, e)) throw new t("");
1259
1275
  return r.parentId = n, { ...r };
1260
1276
  },
1261
1277
  async removeCollection({ id: e }) {
1262
- if (J(e), C.some((t) => t.parentId === e)) throw new i(`Collection ${e} has Collections under it: remove or move those first`);
1263
- C.splice(C.findIndex((t) => t.id === e), 1), I.delete(e);
1278
+ if (Y(e), w.some((t) => t.parentId === e)) throw new i(`Collection ${e} has Collections under it: remove or move those first`);
1279
+ w.splice(w.findIndex((t) => t.id === e), 1), L.delete(e);
1264
1280
  let t = [];
1265
- for (let n of w) n.collectionIds.includes(e) && (n.collectionIds = n.collectionIds.filter((t) => t !== e), t.push(n.id));
1281
+ for (let n of T) n.collectionIds.includes(e) && (n.collectionIds = n.collectionIds.filter((t) => t !== e), t.push(n.id));
1266
1282
  return t;
1267
1283
  },
1268
1284
  async setCollectionRestricted({ id: e, restricted: t, acknowledgeDisclosure: r = !1 }) {
1269
- if (t && P === "workspace") throw new n(O);
1270
- let a = J(e);
1285
+ if (t && F === "workspace") throw new n(D);
1286
+ let a = Y(e);
1271
1287
  if (a.restricted === t) return { ...a };
1272
1288
  if (!t && !r) throw new i(`unrestricting Collection ${e} discloses its Content to every viewer: confirm it with acknowledge_disclosure`);
1273
- return a.restricted = t, t ? I.set(e, [{
1274
- userId: v,
1289
+ return a.restricted = t, t ? L.set(e, [{
1290
+ userId: y,
1275
1291
  level: "owner"
1276
- }]) : I.delete(e), { ...a };
1292
+ }]) : L.delete(e), { ...a };
1277
1293
  },
1278
1294
  async listCollectionGrants(e) {
1279
- return X(e), structuredClone(I.get(e) ?? []).sort((e, t) => e.userId < t.userId ? -1 : +(e.userId > t.userId));
1295
+ return Be(e), structuredClone(L.get(e) ?? []).sort((e, t) => e.userId < t.userId ? -1 : +(e.userId > t.userId));
1280
1296
  },
1281
1297
  async grantCollectionAccess({ collectionId: e, userId: t, level: n }) {
1282
- if (X(e), n !== "viewer" && n !== "editor") throw new i("a grant is viewer or editor");
1283
- if (!we.includes(t)) throw new i(`${t} is not a member of the workspace`);
1284
- let r = I.get(e) ?? [];
1285
- r.some((e) => e.level === "owner" && e.userId === t) || I.set(e, [...r.filter((e) => e.userId !== t), {
1298
+ if (Be(e), n !== "viewer" && n !== "editor") throw new i("a grant is viewer or editor");
1299
+ if (!Te.includes(t)) throw new i(`${t} is not a member of the workspace`);
1300
+ let r = L.get(e) ?? [];
1301
+ r.some((e) => e.level === "owner" && e.userId === t) || L.set(e, [...r.filter((e) => e.userId !== t), {
1286
1302
  userId: t,
1287
1303
  level: n
1288
1304
  }]);
1289
1305
  },
1290
1306
  async revokeCollectionAccess({ collectionId: e, userId: t }) {
1291
- X(e), I.set(e, (I.get(e) ?? []).filter((e) => e.userId !== t || e.level === "owner"));
1307
+ Be(e), L.set(e, (L.get(e) ?? []).filter((e) => e.userId !== t || e.level === "owner"));
1292
1308
  },
1293
1309
  async listContents(e = {}) {
1294
1310
  let t = e.view ?? { kind: "main" }, n = (e.search ?? "").trim();
1295
1311
  if (n !== "" && t.kind === "in_force") throw new i("filter.search: Editor Search covers Main and open Branch heads, never Releases");
1296
1312
  if ([...n].length > 200) throw new i("filter.search is at most 200 characters");
1297
- if (e.collectionId && !C.some((t) => t.id === e.collectionId)) throw k("Collection", e.collectionId);
1298
- t.kind === "change_set" && Z(t.changeSetId);
1299
- let r = w.filter((e) => !e.archiveTime).filter((t) => !e.collectionId || t.collectionIds.includes(e.collectionId)).filter((t) => !e.blueprintIds?.length || e.blueprintIds.includes(t.blueprintId)).filter((t) => !e.assigneeId || (t.assigneeIds ?? []).includes(e.assigneeId)).sort((e, t) => e.id < t.id ? -1 : +(e.id > t.id)).flatMap((e) => et(e, t, n)), a = Math.min(e.pageSize || 50, 200), o = e.pageToken ? Number(e.pageToken) : 0;
1313
+ if (e.collectionId && !w.some((t) => t.id === e.collectionId)) throw O("Collection", e.collectionId);
1314
+ t.kind === "change_set" && X(t.changeSetId);
1315
+ let r = T.filter((e) => !e.archiveTime).filter((t) => !e.collectionId || t.collectionIds.includes(e.collectionId)).filter((t) => !e.blueprintIds?.length || e.blueprintIds.includes(t.blueprintId)).filter((t) => !e.assigneeId || (t.assigneeIds ?? []).includes(e.assigneeId)).sort((e, t) => e.id < t.id ? -1 : +(e.id > t.id)).flatMap((e) => $(e, t, n)), a = Math.min(e.pageSize || 50, 200), o = e.pageToken ? Number(e.pageToken) : 0;
1300
1316
  return {
1301
1317
  contents: r.slice(o, o + a),
1302
1318
  nextPageToken: o + a < r.length ? String(o + a) : ""
1303
1319
  };
1304
1320
  },
1305
1321
  async createContent({ changeSetId: e, blueprintReleaseId: t, copyFrom: n }) {
1306
- let r = Q(e), i = {}, a = t;
1322
+ let r = Z(e), i = {}, a = t;
1307
1323
  if (n) {
1308
- let e = "revisionId" in n ? n.revisionId : w.find((e) => e.inForce?.releaseId === n.releaseId)?.inForce?.revisionId, r = w.find((t) => e && K(t, e));
1309
- if (!r || !e) throw k("copy source", JSON.stringify(n));
1310
- i = structuredClone(K(r, e) ?? {}), a = t || r.blueprintReleaseId;
1324
+ let e = "revisionId" in n ? n.revisionId : T.find((e) => e.inForce?.releaseId === n.releaseId)?.inForce?.revisionId, r = T.find((t) => e && q(t, e));
1325
+ if (!r || !e) throw O("copy source", JSON.stringify(n));
1326
+ i = structuredClone(q(r, e) ?? {}), a = t || r.blueprintReleaseId;
1311
1327
  }
1312
- let o = me.find((e) => e.id === a);
1313
- if (!o) throw new oe(`Blueprint Release ${a} can't be loaded`, [{
1328
+ let o = j.find((e) => e.id === a);
1329
+ if (!o) throw new g(`Blueprint Release ${a} can't be loaded`, [{
1314
1330
  source: "contenthub",
1315
1331
  code: "release_not_found",
1316
1332
  path: ""
1317
1333
  }]);
1318
- let s = V++, c = `content_stub_${s}`, l = `br_stub_${s}`, u = `rev_stub_${s}`;
1319
- return w.push({
1334
+ if (o.refusals?.length) throw new g(`Blueprint Release ${a} can't be loaded`, o.refusals.map((e) => ({ ...e })));
1335
+ let s = H++, c = `content_stub_${s}`, l = `br_stub_${s}`, u = `rev_stub_${s}`;
1336
+ return T.push({
1320
1337
  id: c,
1321
1338
  blueprintId: o.blueprintId,
1322
1339
  blueprintReleaseId: a,
@@ -1325,7 +1342,7 @@ function M(g = {}) {
1325
1342
  branchId: l,
1326
1343
  revisionId: u,
1327
1344
  data: i,
1328
- revisionCreateTime: _()
1345
+ revisionCreateTime: v()
1329
1346
  } }
1330
1347
  }), r.chains.push({
1331
1348
  id: `chain_stub_${s}`,
@@ -1345,38 +1362,38 @@ function M(g = {}) {
1345
1362
  data: structuredClone(i),
1346
1363
  changeSetId: e,
1347
1364
  branchId: l,
1348
- revisionCreateTime: _(),
1365
+ revisionCreateTime: v(),
1349
1366
  releaseId: ""
1350
1367
  };
1351
1368
  },
1352
1369
  async saveRevision({ idempotencyKey: e, ...t }) {
1353
- if (!e) return ze(t);
1354
- let n = JSON.stringify(t), r = je.get(e);
1370
+ if (!e) return He(t);
1371
+ let n = JSON.stringify(t), r = Me.get(e);
1355
1372
  if (r) {
1356
1373
  if (r.asked !== n) throw new i(`idempotency key ${e} names another save`);
1357
1374
  return structuredClone(r.content);
1358
1375
  }
1359
- let a = await ze(t);
1360
- return je.set(e, {
1376
+ let a = await He(t);
1377
+ return Me.set(e, {
1361
1378
  asked: n,
1362
1379
  content: structuredClone(a)
1363
1380
  }), a;
1364
1381
  },
1365
1382
  async getContent({ id: e, changeSetId: t }) {
1366
- let n = H(e), [r] = et(n, t ? {
1383
+ let n = U(e), [r] = $(n, t ? {
1367
1384
  kind: "change_set",
1368
1385
  changeSetId: t
1369
1386
  } : { kind: "main" }, "");
1370
- if (!r) throw k("Content", e);
1371
- let i = E[n.blueprintReleaseId];
1387
+ if (!r) throw O("Content", e);
1388
+ let i = N[n.blueprintReleaseId];
1372
1389
  return {
1373
1390
  content: r,
1374
1391
  blueprintRelease: i ? structuredClone(i) : void 0,
1375
- attributes: U(n)
1392
+ attributes: W(n)
1376
1393
  };
1377
1394
  },
1378
1395
  async getTimeline(e) {
1379
- let t = H(e), n = (e) => S.find((t) => t.id === e)?.state === "open";
1396
+ let t = U(e), n = (e) => C.find((t) => t.id === e)?.state === "open";
1380
1397
  return structuredClone({
1381
1398
  entries: t.timeline ?? [],
1382
1399
  plannedReleases: (t.plannedReleases ?? []).filter((e) => n(e.changeSetId))
@@ -1385,13 +1402,13 @@ function M(g = {}) {
1385
1402
  async listRevisions({ target: e, pageSize: t, pageToken: n }) {
1386
1403
  let r;
1387
1404
  if ("contentId" in e) {
1388
- let t = H(e.contentId);
1389
- if (!t.main) throw k("Content", e.contentId);
1390
- r = G(t);
1405
+ let t = U(e.contentId);
1406
+ if (!t.main) throw O("Content", e.contentId);
1407
+ r = K(t);
1391
1408
  } else {
1392
- let t = w.find((t) => G(t).some((t) => t.branchId === e.branchId));
1393
- if (!t) throw k("Branch", e.branchId);
1394
- r = G(t).filter((t) => t.branchId === e.branchId);
1409
+ let t = T.find((t) => K(t).some((t) => t.branchId === e.branchId));
1410
+ if (!t) throw O("Branch", e.branchId);
1411
+ r = K(t).filter((t) => t.branchId === e.branchId);
1395
1412
  }
1396
1413
  let i = Math.min(t || 50, 200), a = n ? Number(n) : 0;
1397
1414
  return {
@@ -1400,17 +1417,17 @@ function M(g = {}) {
1400
1417
  };
1401
1418
  },
1402
1419
  async compare({ revisionId: e, base: t }) {
1403
- let n = w.find((t) => G(t).some((t) => t.id === e));
1404
- if (!n) throw k("Revision", e);
1405
- let r = G(n), a = r.find((t) => t.id === e), o;
1420
+ let n = T.find((t) => K(t).some((t) => t.id === e));
1421
+ if (!n) throw O("Revision", e);
1422
+ let r = K(n), a = r.find((t) => t.id === e), o;
1406
1423
  if (t.kind === "revision") o = t.revisionId;
1407
1424
  else if (t.kind === "main_head") {
1408
1425
  if (!n.main) throw new i("the Content is not published: it has no Main Branch");
1409
1426
  o = n.main.revisionId;
1410
1427
  } else o = r.find((e) => e.branchId === t.branchId)?.parentId ?? "";
1411
1428
  let s = r.find((e) => e.id === o);
1412
- if (!s) throw k("Revision", o);
1413
- let c = K(n, a.id) ?? {}, l = K(n, s.id) ?? {}, u = [];
1429
+ if (!s) throw O("Revision", o);
1430
+ let c = q(n, a.id) ?? {}, l = q(n, s.id) ?? {}, u = [];
1414
1431
  for (let e of [.../* @__PURE__ */ new Set([...Object.keys(c), ...Object.keys(l)])]) e in l ? e in c ? JSON.stringify(c[e]) !== JSON.stringify(l[e]) && u.push({
1415
1432
  path: `/${e}`,
1416
1433
  kind: "changed",
@@ -1433,24 +1450,24 @@ function M(g = {}) {
1433
1450
  };
1434
1451
  },
1435
1452
  async listReferences({ contentId: e, revisionId: t }) {
1436
- return (H(e).edges ?? []).filter((e) => e.sourceRevisionId === t).map((e) => ({ ...e }));
1453
+ return (U(e).edges ?? []).filter((e) => e.sourceRevisionId === t).map((e) => ({ ...e }));
1437
1454
  },
1438
1455
  async listReferrers({ contentId: e, includeOpenChangeSets: t, pageSize: n, pageToken: r }) {
1439
- H(e);
1456
+ U(e);
1440
1457
  let i = (e) => {
1441
1458
  let t = Math.min(n || 100, 1e3), i = r ? Number(r) : 0;
1442
1459
  return {
1443
1460
  referrers: e.slice(i, i + t),
1444
1461
  nextPageToken: i + t < e.length ? String(i + t) : ""
1445
1462
  };
1446
- }, a = w.flatMap((t) => (t.edges ?? []).filter((n) => n.targetContentId === e && t.inForce?.revisionId === n.sourceRevisionId).map((e) => ({
1463
+ }, a = T.flatMap((t) => (t.edges ?? []).filter((n) => n.targetContentId === e && t.inForce?.revisionId === n.sourceRevisionId).map((e) => ({
1447
1464
  edge: { ...e },
1448
1465
  releaseId: t.inForce?.releaseId ?? "",
1449
1466
  changeSetId: "",
1450
1467
  branchId: ""
1451
1468
  })));
1452
1469
  if (!t) return i(a);
1453
- let o = w.flatMap((t) => Object.entries(t.branches).flatMap(([n, r]) => S.find((e) => e.id === n)?.state === "open" ? (t.edges ?? []).filter((t) => t.targetContentId === e && t.sourceRevisionId === r.revisionId).map((e) => ({
1470
+ let o = T.flatMap((t) => Object.entries(t.branches).flatMap(([n, r]) => C.find((e) => e.id === n)?.state === "open" ? (t.edges ?? []).filter((t) => t.targetContentId === e && t.sourceRevisionId === r.revisionId).map((e) => ({
1454
1471
  edge: { ...e },
1455
1472
  releaseId: "",
1456
1473
  changeSetId: n,
@@ -1462,14 +1479,14 @@ function M(g = {}) {
1462
1479
  let t;
1463
1480
  if ("revisionId" in e) t = e.revisionId;
1464
1481
  else {
1465
- for (let n of w) {
1482
+ for (let n of T) {
1466
1483
  let r = Object.values(n.branches).find((t) => t.branchId === e.branchId);
1467
1484
  r && (t = r.revisionId);
1468
1485
  }
1469
- if (!t) throw k("Branch", e.branchId);
1486
+ if (!t) throw O("Branch", e.branchId);
1470
1487
  }
1471
- return w.flatMap((e) => (e.edges ?? []).filter((e) => e.sourceRevisionId === t)).filter((e) => e.pinReleaseId !== "").flatMap((e) => {
1472
- let t = w.find((t) => t.id === e.targetContentId)?.inForce?.releaseId ?? "";
1488
+ return T.flatMap((e) => (e.edges ?? []).filter((e) => e.sourceRevisionId === t)).filter((e) => e.pinReleaseId !== "").flatMap((e) => {
1489
+ let t = T.find((t) => t.id === e.targetContentId)?.inForce?.releaseId ?? "";
1473
1490
  return t === e.pinReleaseId ? [] : [{
1474
1491
  edge: { ...e },
1475
1492
  supersededByReleaseId: t,
@@ -1478,67 +1495,67 @@ function M(g = {}) {
1478
1495
  });
1479
1496
  },
1480
1497
  async setContentCollections({ contentId: e, collectionIds: t }) {
1481
- let n = H(e), r = [...new Set(t)];
1498
+ let n = U(e), r = [...new Set(t)];
1482
1499
  if (r.length > 100) throw new i("at most 100 Collections");
1483
- for (let e of r) if (!C.some((t) => t.id === e)) throw k("Collection", e);
1500
+ for (let e of r) if (!w.some((t) => t.id === e)) throw O("Collection", e);
1484
1501
  return n.collectionIds = r.sort(), [...n.collectionIds];
1485
1502
  },
1486
1503
  async setContentAssignees({ contentId: e, assigneeIds: t }) {
1487
- let n = H(e);
1504
+ let n = U(e);
1488
1505
  if (new Set(t).size !== t.length) throw new i("each assignee is given once");
1489
1506
  if (t.length > 50) throw new i("at most 50 assignees");
1490
- return n.assigneeIds = [...t], U(n);
1507
+ return n.assigneeIds = [...t], W(n);
1491
1508
  },
1492
1509
  async blockContent({ contentId: e, blockReasonId: t, allowedUserIds: n }) {
1493
- let r = H(e);
1494
- if (!x.some((e) => e.id === t)) throw k("Block Reason", t);
1510
+ let r = U(e);
1511
+ if (!S.some((e) => e.id === t)) throw O("Block Reason", t);
1495
1512
  if (new Set(n).size !== n.length) throw new i("each allowed user is given once");
1496
1513
  return r.block = {
1497
1514
  blockReasonId: t,
1498
1515
  allowedUserIds: [...n],
1499
- blockedBy: v,
1500
- blockTime: _()
1501
- }, U(r);
1516
+ blockedBy: y,
1517
+ blockTime: v()
1518
+ }, W(r);
1502
1519
  },
1503
1520
  async unblockContent(e) {
1504
- let t = H(e);
1505
- return t.block = void 0, U(t);
1521
+ let t = U(e);
1522
+ return t.block = void 0, W(t);
1506
1523
  },
1507
1524
  async archiveContent(e) {
1508
- let t = H(e);
1509
- if (t.archiveTime) return U(t);
1525
+ let t = U(e);
1526
+ if (t.archiveTime) return W(t);
1510
1527
  if (!t.main) throw new i(`Content ${e} is not published: discard its Change Set instead of archiving it`);
1511
- if (u(t.timeline ?? [], Me())) throw new i(`Content ${e} has a Release In Force today or later: end its force first`);
1512
- return t.archiveTime = _(), U(t);
1528
+ if (u(t.timeline ?? [], Ne())) throw new i(`Content ${e} has a Release In Force today or later: end its force first`);
1529
+ return t.archiveTime = v(), W(t);
1513
1530
  },
1514
1531
  async unarchiveContent(e) {
1515
- let t = H(e);
1516
- return t.archiveTime = void 0, U(t);
1532
+ let t = U(e);
1533
+ return t.archiveTime = void 0, W(t);
1517
1534
  },
1518
1535
  async startEditing({ contentId: e, changeSetId: t, effectiveOn: n = "", changeSetName: r = "" }) {
1519
- let a = H(e);
1536
+ let a = U(e);
1520
1537
  if (!a.main) throw new i(`Content ${e} is not published`);
1521
- if (q(a), W(a) && !h.test(n)) throw new i("effective_on is required for Dated Content, as YYYY-MM-DD");
1522
- if (!W(a) && n !== "") throw new i("effective_on is refused for undated Content");
1538
+ if (J(a), G(a) && !h.test(n)) throw new i("effective_on is required for Dated Content, as YYYY-MM-DD");
1539
+ if (!G(a) && n !== "") throw new i("effective_on is refused for undated Content");
1523
1540
  let o;
1524
1541
  if (t) {
1525
- if (o = Q(t), o.chains.some((t) => t.contentId === e)) throw new i(`Content ${e} already has a Chain in this Change Set`);
1542
+ if (o = Z(t), o.chains.some((t) => t.contentId === e)) throw new i(`Content ${e} already has a Chain in this Change Set`);
1526
1543
  } else {
1527
1544
  let t = Object.values(a.main.data).filter((e) => typeof e == "string").slice(0, 2).join(" ");
1528
1545
  o = {
1529
- id: `cs_stub_${V++}`,
1530
- name: r.trim() ? D(r, "change_set_name", 200) : t || e,
1546
+ id: `cs_stub_${H++}`,
1547
+ name: r.trim() ? E(r, "change_set_name", 200) : t || e,
1531
1548
  state: "open",
1532
- createdBy: v,
1533
- createTime: _(),
1549
+ createdBy: y,
1550
+ createTime: v(),
1534
1551
  chains: [],
1535
1552
  dependsOnChangeSetIds: [],
1536
1553
  status: "",
1537
1554
  assigneeIds: [],
1538
1555
  plannedReleases: []
1539
- }, S.unshift(o);
1556
+ }, C.unshift(o);
1540
1557
  }
1541
- let s = V++, c = `br_stub_${s}`, l = {
1558
+ let s = H++, c = `br_stub_${s}`, l = {
1542
1559
  ...structuredClone(a.main),
1543
1560
  branchId: c
1544
1561
  };
@@ -1553,20 +1570,20 @@ function M(g = {}) {
1553
1570
  headRevisionId: l.revisionId
1554
1571
  }]
1555
1572
  });
1556
- let [u] = et(a, {
1573
+ let [u] = $(a, {
1557
1574
  kind: "change_set",
1558
1575
  changeSetId: o.id
1559
1576
  }, "");
1560
1577
  return {
1561
- changeSet: A(o),
1578
+ changeSet: k(o),
1562
1579
  content: u
1563
1580
  };
1564
1581
  },
1565
1582
  async previewChain({ changeSetId: e, contentId: t, effectiveOn: n, validityPeriod: r }) {
1566
- Q(e);
1567
- let a = H(t);
1583
+ Z(e);
1584
+ let a = U(t);
1568
1585
  if (!a.main) throw new i(`Content ${t} is not published`);
1569
- if (!W(a)) throw new i("undated Content's Chain takes no date");
1586
+ if (!G(a)) throw new i("undated Content's Chain takes no date");
1570
1587
  if (!h.test(n)) throw new i("effective_on is YYYY-MM-DD");
1571
1588
  let o = a.timeline ?? [], s = o.find((e) => e.validityPeriod && e.validityPeriod.firstDay <= n && (e.validityPeriod.lastDay === "" || n <= e.validityPeriod.lastDay));
1572
1589
  return {
@@ -1578,11 +1595,11 @@ function M(g = {}) {
1578
1595
  };
1579
1596
  },
1580
1597
  async planRepeal({ changeSetId: e, contentId: t, lastDay: n }) {
1581
- Q(e);
1582
- let r = H(t);
1583
- if (q(r), !W(r)) throw new i("a Repeal is for Dated Content");
1598
+ Z(e);
1599
+ let r = U(t);
1600
+ if (J(r), !G(r)) throw new i("a Repeal is for Dated Content");
1584
1601
  if (!h.test(n)) throw new i("last_day is YYYY-MM-DD");
1585
- return $e(r, e, {
1602
+ return nt(r, e, {
1586
1603
  kind: "repeal",
1587
1604
  validityPeriod: {
1588
1605
  firstDay: m(r.timeline ?? [], n)?.validityPeriod?.firstDay ?? n,
@@ -1591,18 +1608,18 @@ function M(g = {}) {
1591
1608
  });
1592
1609
  },
1593
1610
  async planWithdrawal({ changeSetId: e, contentId: t }) {
1594
- Q(e);
1595
- let n = H(t);
1596
- if (q(n), W(n)) throw new i("a Withdrawal is for undated Content");
1597
- return $e(n, e, { kind: "withdrawal" });
1611
+ Z(e);
1612
+ let n = U(t);
1613
+ if (J(n), G(n)) throw new i("a Withdrawal is for undated Content");
1614
+ return nt(n, e, { kind: "withdrawal" });
1598
1615
  },
1599
1616
  async planRelease({ idempotencyKey: e, ...t }) {
1600
- return z(e, ["planRelease", t], async () => {
1601
- let { changeSetId: e, branchId: n, validityPeriod: r, releaseSpec: a, supersedesReleaseIds: o } = t, { cs: s, chain: c, branch: l, c: u } = Ve(e, n);
1602
- if (q(u), l.kind !== "editorial") throw new i("only an editorial Branch's head is released");
1617
+ return V(e, ["planRelease", t], async () => {
1618
+ let { changeSetId: e, branchId: n, validityPeriod: r, releaseSpec: a, supersedesReleaseIds: o } = t, { cs: s, chain: c, branch: l, c: u } = We(e, n);
1619
+ if (J(u), l.kind !== "editorial") throw new i("only an editorial Branch's head is released");
1603
1620
  if (s.plannedReleases.some((e) => e.branchId === n)) throw new i(`Branch ${n} is planned already`);
1604
1621
  let d = {
1605
- id: `rls_stub_${V++}`,
1622
+ id: `rls_stub_${H++}`,
1606
1623
  contentId: c.contentId,
1607
1624
  kind: "revision",
1608
1625
  branchId: n,
@@ -1615,35 +1632,35 @@ function M(g = {}) {
1615
1632
  splitFromReleaseId: "",
1616
1633
  withheld: !1
1617
1634
  };
1618
- return We(u, d), s.plannedReleases.push(d), Ge(s, u), structuredClone(d);
1635
+ return qe(u, d), s.plannedReleases.push(d), Je(s, u), structuredClone(d);
1619
1636
  });
1620
1637
  },
1621
1638
  async updatePlannedRelease({ idempotencyKey: e, ...t }) {
1622
- return z(e, ["updatePlannedRelease", t], async () => {
1623
- let { changeSetId: e, plannedReleaseId: n, validityPeriod: r, releaseSpec: a, supersedesReleaseIds: o } = t, s = Q(e), c = s.plannedReleases.findIndex((e) => e.id === n);
1624
- if (c < 0) throw k("Planned Release", n);
1639
+ return V(e, ["updatePlannedRelease", t], async () => {
1640
+ let { changeSetId: e, plannedReleaseId: n, validityPeriod: r, releaseSpec: a, supersedesReleaseIds: o } = t, s = Z(e), c = s.plannedReleases.findIndex((e) => e.id === n);
1641
+ if (c < 0) throw O("Planned Release", n);
1625
1642
  let l = s.plannedReleases[c];
1626
1643
  if (l.proposed) throw new i("a proposal is derived from the plans and can't be set");
1627
- let u = H(l.contentId);
1628
- q(u);
1644
+ let u = U(l.contentId);
1645
+ J(u);
1629
1646
  let d = {
1630
1647
  ...structuredClone(l),
1631
1648
  ...r ? { validityPeriod: { ...r } } : {},
1632
1649
  ...a ? { releaseSpec: structuredClone(a) } : {},
1633
1650
  ...o ? { supersedesReleaseIds: [...o] } : {}
1634
1651
  };
1635
- return We(u, d), s.plannedReleases[c] = d, Ge(s, u), structuredClone(d);
1652
+ return qe(u, d), s.plannedReleases[c] = d, Je(s, u), structuredClone(d);
1636
1653
  });
1637
1654
  },
1638
1655
  async appendBranch({ idempotencyKey: e, ...t }) {
1639
- return z(e, ["appendBranch", t], async () => {
1640
- let { changeSetId: e, chainId: n, effectiveOn: r } = t, a = Q(e), o = a.chains.find((e) => e.id === n);
1641
- if (!o) throw k("Chain", n);
1642
- let s = H(o.contentId);
1643
- if (o.born || !W(s)) throw new i("only a Chain on published Dated Content takes dates");
1656
+ return V(e, ["appendBranch", t], async () => {
1657
+ let { changeSetId: e, chainId: n, effectiveOn: r } = t, a = Z(e), o = a.chains.find((e) => e.id === n);
1658
+ if (!o) throw O("Chain", n);
1659
+ let s = U(o.contentId);
1660
+ if (o.born || !G(s)) throw new i("only a Chain on published Dated Content takes dates");
1644
1661
  let c = o.branches.filter((e) => e.kind === "editorial").at(-1);
1645
1662
  if (!h.test(r) || c?.effectiveOn && r <= c.effectiveOn) throw new i("effective_on is a day after the Chain's last editorial Branch's");
1646
- let l = o.branches.at(-1), u = `br_stub_${V++}`;
1663
+ let l = o.branches.at(-1), u = `br_stub_${H++}`;
1647
1664
  o.branches.push({
1648
1665
  id: u,
1649
1666
  position: o.branches.length,
@@ -1656,27 +1673,27 @@ function M(g = {}) {
1656
1673
  ...d,
1657
1674
  branchId: u
1658
1675
  }), {
1659
- changeSet: A(a),
1676
+ changeSet: k(a),
1660
1677
  branchId: u
1661
1678
  };
1662
1679
  });
1663
1680
  },
1664
1681
  async dropChain({ idempotencyKey: e, ...t }) {
1665
- return z(e, ["dropChain", t], async () => {
1666
- let { changeSetId: e, chainId: n } = t, r = Q(e), a = r.chains.find((e) => e.id === n);
1667
- if (!a) throw k("Chain", n);
1682
+ return V(e, ["dropChain", t], async () => {
1683
+ let { changeSetId: e, chainId: n } = t, r = Z(e), a = r.chains.find((e) => e.id === n);
1684
+ if (!a) throw O("Chain", n);
1668
1685
  if (a.born) throw new i("the Chain of Content born in the Change Set can't be dropped: discard the Change Set");
1669
- for (let e of a.branches) Ue(e.id);
1670
- return r.chains = r.chains.filter((e) => e.id !== n), r.plannedReleases = r.plannedReleases.filter((e) => e.contentId !== a.contentId), delete H(a.contentId).branches[e], A(r);
1686
+ for (let e of a.branches) Ke(e.id);
1687
+ return r.chains = r.chains.filter((e) => e.id !== n), r.plannedReleases = r.plannedReleases.filter((e) => e.contentId !== a.contentId), delete U(a.contentId).branches[e], k(r);
1671
1688
  });
1672
1689
  },
1673
1690
  async getPendingMerge(e) {
1674
- let t = R.get(e);
1691
+ let t = B.get(e);
1675
1692
  return t ? structuredClone(t) : null;
1676
1693
  },
1677
1694
  async resolveMerge({ idempotencyKey: e, ...t }) {
1678
- return z(e, ["resolveMerge", t], async () => {
1679
- let { changeSetId: e, branchId: n, expectedHeadId: r, resolutions: a } = t, { chain: o, branch: s, c } = Ve(e, n), l = R.get(n);
1695
+ return V(e, ["resolveMerge", t], async () => {
1696
+ let { changeSetId: e, branchId: n, expectedHeadId: r, resolutions: a } = t, { chain: o, branch: s, c } = We(e, n), l = B.get(n);
1680
1697
  if (!l) throw new i(`Branch ${n} has no Pending Merge`);
1681
1698
  if (s.headRevisionId !== r) throw new f({
1682
1699
  contentId: c.id,
@@ -1691,7 +1708,7 @@ function M(g = {}) {
1691
1708
  let t = l.fields.find((t) => t.path === e.path), n = "side" in e ? e.side === "ours" ? t.ours : t.theirs : e.value, r = e.path.replace(/^\//, "");
1692
1709
  n === void 0 ? delete p[r] : p[r] = structuredClone(n);
1693
1710
  }
1694
- let m = Be({
1711
+ let m = Ue({
1695
1712
  changeSetId: e,
1696
1713
  chain: o,
1697
1714
  branch: s,
@@ -1700,17 +1717,17 @@ function M(g = {}) {
1700
1717
  cause: "resolve",
1701
1718
  secondParentId: l.theirsRevisionId
1702
1719
  });
1703
- return Ue(n), m;
1720
+ return Ke(n), m;
1704
1721
  });
1705
1722
  },
1706
1723
  async abortMerge({ idempotencyKey: e, ...t }) {
1707
- return z(e, ["abortMerge", t], async () => {
1708
- if (Ve(t.changeSetId, t.branchId), !R.has(t.branchId)) throw new i(`Branch ${t.branchId} has no Pending Merge`);
1709
- Ue(t.branchId);
1724
+ return V(e, ["abortMerge", t], async () => {
1725
+ if (We(t.changeSetId, t.branchId), !B.has(t.branchId)) throw new i(`Branch ${t.branchId} has no Pending Merge`);
1726
+ Ke(t.branchId);
1710
1727
  });
1711
1728
  },
1712
1729
  async previewInForce({ contentId: e, changeSetId: t, validOn: n }) {
1713
- let r = Q(t), i = H(e), a = n || Me(), o = r.chains.find((t) => t.contentId === e), s = (e) => !e.validityPeriod || e.validityPeriod.firstDay <= a && (e.validityPeriod.lastDay === "" || a <= e.validityPeriod.lastDay), c = r.plannedReleases.find((t) => t.contentId === e && t.kind !== "repeal" && s(t));
1730
+ let r = Z(t), i = U(e), a = n || Ne(), o = r.chains.find((t) => t.contentId === e), s = (e) => !e.validityPeriod || e.validityPeriod.firstDay <= a && (e.validityPeriod.lastDay === "" || a <= e.validityPeriod.lastDay), c = r.plannedReleases.find((t) => t.contentId === e && t.kind !== "repeal" && s(t));
1714
1731
  if (c) {
1715
1732
  let e = c.branchId ? o?.branches.find((e) => e.id === c.branchId)?.headRevisionId ?? "" : c.revisionId;
1716
1733
  return {
@@ -1719,7 +1736,7 @@ function M(g = {}) {
1719
1736
  planned: !0,
1720
1737
  withheld: !1,
1721
1738
  validityPeriod: c.validityPeriod ? { ...c.validityPeriod } : void 0,
1722
- data: structuredClone(K(i, e) ?? {})
1739
+ data: structuredClone(q(i, e) ?? {})
1723
1740
  };
1724
1741
  }
1725
1742
  let l = m(i.timeline ?? [], a);
@@ -1729,13 +1746,13 @@ function M(g = {}) {
1729
1746
  planned: !1,
1730
1747
  withheld: !1,
1731
1748
  validityPeriod: l.validityPeriod ? { ...l.validityPeriod } : void 0,
1732
- data: structuredClone(K(i, l.revisionId) ?? {})
1749
+ data: structuredClone(q(i, l.revisionId) ?? {})
1733
1750
  } : null;
1734
1751
  }
1735
1752
  };
1736
- function $e(e, t, n) {
1753
+ function nt(e, t, n) {
1737
1754
  let r = {
1738
- id: `rls_stub_${V++}`,
1755
+ id: `rls_stub_${H++}`,
1739
1756
  contentId: e.id,
1740
1757
  branchId: "",
1741
1758
  revisionId: e.inForce?.revisionId ?? e.main?.revisionId ?? "",
@@ -1751,10 +1768,10 @@ function M(g = {}) {
1751
1768
  plannedRelease: r
1752
1769
  }], structuredClone({
1753
1770
  plannedRelease: r,
1754
- gapReferrers: Pe(e.id)
1771
+ gapReferrers: Fe(e.id)
1755
1772
  });
1756
1773
  }
1757
- function et(e, t, n) {
1774
+ function $(e, t, n) {
1758
1775
  let r = (t, n) => ({
1759
1776
  id: e.id,
1760
1777
  blueprintId: e.blueprintId,
@@ -1769,33 +1786,33 @@ function M(g = {}) {
1769
1786
  if (t.kind === "in_force") return e.inForce ? [r(e.inForce, { releaseId: e.inForce.releaseId })] : [];
1770
1787
  if (t.kind === "change_set") {
1771
1788
  let i = e.branches[t.changeSetId];
1772
- return !i || n && !N(i.data, n) ? [] : [r(i, {
1789
+ return !i || n && !M(i.data, n) ? [] : [r(i, {
1773
1790
  changeSetId: t.changeSetId,
1774
1791
  branchId: i.branchId
1775
1792
  })];
1776
1793
  }
1777
1794
  if (!n) return e.main ? [r(e.main, {})] : [];
1778
1795
  let i = [];
1779
- e.main && N(e.main.data, n) && i.push(r(e.main, {}));
1780
- for (let [t, a] of Object.entries(e.branches).sort(([, e], [, t]) => e.branchId < t.branchId ? -1 : 1)) S.find((e) => e.id === t)?.state === "open" && N(a.data, n) && i.push(r(a, {
1796
+ e.main && M(e.main.data, n) && i.push(r(e.main, {}));
1797
+ for (let [t, a] of Object.entries(e.branches).sort(([, e], [, t]) => e.branchId < t.branchId ? -1 : 1)) C.find((e) => e.id === t)?.state === "open" && M(a.data, n) && i.push(r(a, {
1781
1798
  changeSetId: t,
1782
1799
  branchId: a.branchId
1783
1800
  }));
1784
1801
  return i;
1785
1802
  }
1786
1803
  }
1787
- function N(e, t) {
1804
+ function M(e, t) {
1788
1805
  let n = (e) => e.toLocaleLowerCase().replace(/\s+/g, " "), r = n(t);
1789
1806
  return Object.values(e).some((e) => typeof e == "string" && n(e).includes(r));
1790
1807
  }
1791
1808
  //#endregion
1792
1809
  //#region src/testing/stub-status-source.ts
1793
- function P(e = ce()) {
1810
+ function N(e = se()) {
1794
1811
  return { async listChangeSetStatuses() {
1795
1812
  return e.map((e) => ({ ...e }));
1796
1813
  } };
1797
1814
  }
1798
1815
  //#endregion
1799
- export { S as STUB_NOW, x as STUB_OTHER_USER_ID, b as STUB_USER_ID, y as STUB_WORKSPACE_ID, E as createStubBlueprintSource, M as createStubContenthubClient, P as createStubStatusSource, se as stubBlockReasons, j as stubBlocker, T as stubBlueprintReleases, w as stubBlueprints, ce as stubChangeSetStatuses, ue as stubChangeSets, fe as stubCollections, he as stubContents, C as stubIdentity, me as stubRepealedContent, de as stubRequiredChecks, pe as stubResolvedReleases, le as stubStatusTransitions };
1816
+ export { C as STUB_NOW, S as STUB_OTHER_USER_ID, x as STUB_USER_ID, b as STUB_WORKSPACE_ID, ge as createStubBlueprintSource, j as createStubContenthubClient, N as createStubStatusSource, oe as stubBlockReasons, A as stubBlocker, pe as stubBlueprintReleases, fe as stubBlueprints, se as stubChangeSetStatuses, le as stubChangeSets, de as stubCollections, he as stubContents, w as stubIdentity, T as stubRepealedContent, ue as stubRequiredChecks, me as stubResolvedReleases, ce as stubStatusTransitions };
1800
1817
 
1801
1818
  //# sourceMappingURL=testing.js.map