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