@dotobokuri/fleet-console 1.10.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cli-bin.mjs +198 -0
  2. package/dist/cli.mjs +198 -0
  3. package/dist/client/assets/{_baseUniq-e_j340KJ.js → _baseUniq-B0PErl2E.js} +1 -1
  4. package/dist/client/assets/{arc-CioNx0k6.js → arc-DZOCtb72.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-Q4EWVU46-B_8HDSCb.js → architectureDiagram-Q4EWVU46-lKeHajPP.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-DXYQGD6D-CpHdrypQ.js → blockDiagram-DXYQGD6D-nxOjG3tp.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-AHTNJAMY-CkitEGpF.js → c4Diagram-AHTNJAMY-B6immmFF.js} +1 -1
  8. package/dist/client/assets/channel-BPvn1RT5.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-DxyXXSCc.js → chunk-4BX2VUAB-hrDXiMYn.js} +1 -1
  10. package/dist/client/assets/{chunk-4TB4RGXK-C2-nU4zS.js → chunk-4TB4RGXK-CjiaitfY.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-Ch5DNHFU.js → chunk-55IACEB6-Dfp3hg95.js} +1 -1
  12. package/dist/client/assets/{chunk-EDXVE4YY-CHE6KKZa.js → chunk-EDXVE4YY-D91XPfwh.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-PFqCeOs6.js → chunk-FMBD7UC4-DTGdaoi9.js} +1 -1
  14. package/dist/client/assets/{chunk-OYMX7WX6-DHE5_rgO.js → chunk-OYMX7WX6-j4aVytt_.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-BNsfe2Ai.js → chunk-QZHKN3VN-CA2z0Wnz.js} +1 -1
  16. package/dist/client/assets/{chunk-YZCP3GAM-Du6aAWOS.js → chunk-YZCP3GAM-B0NhMyF9.js} +1 -1
  17. package/dist/client/assets/classDiagram-6PBFFD2Q-CGvwHQW2.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-HSJHXN6E-CGvwHQW2.js +1 -0
  19. package/dist/client/assets/clone-jCrAo27W.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-BMbRb2Ij.js → cose-bilkent-S5V4N54A-BGHrOYlY.js} +1 -1
  21. package/dist/client/assets/{dagre-KV5264BT-BIYIuU4t.js → dagre-KV5264BT-BFtQQNJz.js} +1 -1
  22. package/dist/client/assets/{diagram-5BDNPKRD-DE58KlL0.js → diagram-5BDNPKRD-Bl5sE460.js} +1 -1
  23. package/dist/client/assets/{diagram-G4DWMVQ6-BBHYXkDj.js → diagram-G4DWMVQ6-Cjz1orfi.js} +1 -1
  24. package/dist/client/assets/{diagram-MMDJMWI5-BGA4ZKw3.js → diagram-MMDJMWI5-B-fFQatb.js} +1 -1
  25. package/dist/client/assets/{diagram-TYMM5635-DusN1Hix.js → diagram-TYMM5635-C1aFMoW4.js} +1 -1
  26. package/dist/client/assets/{erDiagram-SMLLAGMA-84E-AJKo.js → erDiagram-SMLLAGMA-Dnsp-AHy.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-DWJPFMVM-Dpap9NqV.js → flowDiagram-DWJPFMVM-Ik7b9ai0.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-CukRJAaM.js → ganttDiagram-T4ZO3ILL-BC-NrcBq.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DuAwiTii.js → gitGraphDiagram-UUTBAWPF-DWLFCHqJ.js} +1 -1
  30. package/dist/client/assets/{graph-B7irxl7Q.js → graph-CFrgLuks.js} +1 -1
  31. package/dist/client/assets/index-BSr9Yi1L.css +1 -0
  32. package/dist/client/assets/{index-Uidvbtqb.js → index-BmsjlgH0.js} +162 -162
  33. package/dist/client/assets/{infoDiagram-42DDH7IO-Gdh2w_Ry.js → infoDiagram-42DDH7IO-C8LNvGxg.js} +1 -1
  34. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DvbqJman.js → ishikawaDiagram-UXIWVN3A-BVF0c1qh.js} +1 -1
  35. package/dist/client/assets/{journeyDiagram-VCZTEJTY-DIQYAsjN.js → journeyDiagram-VCZTEJTY-DRe82d1J.js} +1 -1
  36. package/dist/client/assets/{kanban-definition-6JOO6SKY-8BBtOuAV.js → kanban-definition-6JOO6SKY-DWQP2qnF.js} +1 -1
  37. package/dist/client/assets/{layout-DDUpLunD.js → layout-CRE4t3i4.js} +1 -1
  38. package/dist/client/assets/{linear-BzLoJVdP.js → linear-CEMkymuU.js} +1 -1
  39. package/dist/client/assets/{mermaid.core-Ddi7z3V3.js → mermaid.core-Bstsk9cs.js} +4 -4
  40. package/dist/client/assets/{min-CEKwugI-.js → min-Dqb8cdig.js} +1 -1
  41. package/dist/client/assets/{mindmap-definition-QFDTVHPH-y-V-6GIi.js → mindmap-definition-QFDTVHPH-C4IgFjul.js} +1 -1
  42. package/dist/client/assets/{pieDiagram-DEJITSTG-DjqTUefi.js → pieDiagram-DEJITSTG-qQsv3h1d.js} +1 -1
  43. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-BZbwyDuC.js → quadrantDiagram-34T5L4WZ-B9Z5d9Su.js} +1 -1
  44. package/dist/client/assets/{requirementDiagram-MS252O5E-M2epVejI.js → requirementDiagram-MS252O5E-B3bvh52E.js} +1 -1
  45. package/dist/client/assets/{sankeyDiagram-XADWPNL6-DQHzVL6h.js → sankeyDiagram-XADWPNL6-CzMbxMn4.js} +1 -1
  46. package/dist/client/assets/{sequenceDiagram-FGHM5R23-Dldq08WJ.js → sequenceDiagram-FGHM5R23-OC2b3ovy.js} +1 -1
  47. package/dist/client/assets/{stateDiagram-FHFEXIEX-B32muPdI.js → stateDiagram-FHFEXIEX-DZ794L2W.js} +1 -1
  48. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-CWkyT6YP.js +1 -0
  49. package/dist/client/assets/{timeline-definition-GMOUNBTQ-nSYYEX6t.js → timeline-definition-GMOUNBTQ-VG_E_aeb.js} +1 -1
  50. package/dist/client/assets/{vennDiagram-DHZGUBPP-DPIMKKCQ.js → vennDiagram-DHZGUBPP-rtfRsKP2.js} +1 -1
  51. package/dist/client/assets/{wardley-RL74JXVD-DArerB6Y.js → wardley-RL74JXVD-BFVZEiVh.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-DRvimWEN.js → wardleyDiagram-NUSXRM2D-CAwmkN7Y.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-5P7HB3ND-D0VCX3ps.js → xychartDiagram-5P7HB3ND-Gk8gTxJJ.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/package.json +1 -1
  56. package/dist/client/assets/channel-CEwT4AXW.js +0 -1
  57. package/dist/client/assets/classDiagram-6PBFFD2Q-BcAsKAPs.js +0 -1
  58. package/dist/client/assets/classDiagram-v2-HSJHXN6E-BcAsKAPs.js +0 -1
  59. package/dist/client/assets/clone-BbRCSYXZ.js +0 -1
  60. package/dist/client/assets/index-CTyjGQHF.css +0 -1
  61. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-Ct3tm_Bq.js +0 -1
package/dist/cli-bin.mjs CHANGED
@@ -42510,6 +42510,176 @@ function resolvedWorkspaceSnapshot(resolveWorkspace, tenantId) {
42510
42510
  tenantLabel: tenantId
42511
42511
  };
42512
42512
  }
42513
+
42514
+ // src/release-notes/parser.ts
42515
+ var RELEASE_NOTE_HEADINGS = ["Added", "Changed", "Fixed", "Removed", "Breaking Changes"];
42516
+ var VERSION_HEADER_PATTERN = /^## \[([^\]]+)\](?: - ([0-9]{4}-[0-9]{2}-[0-9]{2}))?$/;
42517
+ var SECTION_HEADER_PATTERN = /^### (Added|Changed|Fixed|Removed|Breaking Changes)$/;
42518
+ var BULLET_PATTERN = /^- (.+)$/;
42519
+ var PACKAGE_TAG_PATTERN = /^\[([^\]]+)\]/;
42520
+ function parseConsoleReleaseNotes(changelog) {
42521
+ const lines = changelog.split(/\r?\n/);
42522
+ const notes = [];
42523
+ for (let index = 0; index < lines.length; index += 1) {
42524
+ const match = VERSION_HEADER_PATTERN.exec(lines[index] ?? "");
42525
+ if (match === null) continue;
42526
+ const block = [];
42527
+ for (let cursor = index + 1; cursor < lines.length; cursor += 1) {
42528
+ if ((lines[cursor] ?? "").startsWith("## ")) break;
42529
+ block.push(lines[cursor] ?? "");
42530
+ }
42531
+ const sections = collectSections(block);
42532
+ if (sections.length === 0) continue;
42533
+ notes.push({ version: match[1] ?? "", date: match[2] ?? null, sections });
42534
+ }
42535
+ return notes;
42536
+ }
42537
+ function collectSections(lines) {
42538
+ const sections = [];
42539
+ let current = null;
42540
+ for (const line of lines) {
42541
+ const sectionMatch = SECTION_HEADER_PATTERN.exec(line);
42542
+ if (sectionMatch !== null) {
42543
+ current = { heading: sectionMatch[1], items: [] };
42544
+ sections.push(current);
42545
+ continue;
42546
+ }
42547
+ if (current === null) continue;
42548
+ if (line.startsWith("### ")) {
42549
+ current = null;
42550
+ continue;
42551
+ }
42552
+ const bulletMatch = BULLET_PATTERN.exec(line);
42553
+ if (bulletMatch !== null) current.items.push(parseReleaseNoteItem(bulletMatch[1] ?? ""));
42554
+ }
42555
+ return RELEASE_NOTE_HEADINGS.map((heading) => sections.find((section2) => section2.heading === heading)).filter((section2) => Boolean(section2 && section2.items.length > 0));
42556
+ }
42557
+ function parseReleaseNoteItem(rawText) {
42558
+ const packageTags = [];
42559
+ let text = rawText.trim();
42560
+ while (true) {
42561
+ const match = PACKAGE_TAG_PATTERN.exec(text);
42562
+ if (match === null) break;
42563
+ packageTags.push(match[1] ?? "");
42564
+ text = text.slice(match[0].length).trimStart();
42565
+ }
42566
+ return { packageTags, text: text.trim() };
42567
+ }
42568
+
42569
+ // src/release-notes/types.ts
42570
+ var ConsoleReleaseNotesUnavailableError = class extends Error {
42571
+ reason;
42572
+ constructor(reason) {
42573
+ super("Console release notes are unavailable");
42574
+ this.name = "ConsoleReleaseNotesUnavailableError";
42575
+ this.reason = reason;
42576
+ }
42577
+ };
42578
+
42579
+ // src/release-notes/service.ts
42580
+ var RAW_CHANGELOG_URL = "https://raw.githubusercontent.com/sbluemin/fleet-harness/main/CHANGELOG.md";
42581
+ var SOURCE_REF = "main";
42582
+ var FETCH_TIMEOUT_MS = 3e3;
42583
+ var MAX_CHANGELOG_BYTES = 1024 * 1024;
42584
+ var SUCCESS_TTL_MS = 60 * 60 * 1e3;
42585
+ var NEGATIVE_TTL_MS = 30 * 1e3;
42586
+ function createConsoleReleaseNotesService(deps = {}) {
42587
+ const fetchImpl = deps.fetchImpl ?? fetch;
42588
+ const now = deps.now ?? (() => Date.now());
42589
+ const setTimer = deps.setTimeout ?? setTimeout;
42590
+ const clearTimer = deps.clearTimeout ?? clearTimeout;
42591
+ let lastSuccess = null;
42592
+ let lastFailureAt = 0;
42593
+ let inFlight = null;
42594
+ let forceInFlight = null;
42595
+ async function refresh(options = {}) {
42596
+ const currentTime = now();
42597
+ if (options.force) {
42598
+ if (forceInFlight) return forceInFlight;
42599
+ const pending2 = runFetch().finally(() => {
42600
+ if (forceInFlight === pending2) forceInFlight = null;
42601
+ });
42602
+ forceInFlight = pending2;
42603
+ return pending2;
42604
+ }
42605
+ if (lastSuccess && currentTime - lastSuccess.fetchedAt < SUCCESS_TTL_MS) return lastSuccess;
42606
+ if (lastFailureAt > 0 && currentTime - lastFailureAt < NEGATIVE_TTL_MS) {
42607
+ if (lastSuccess) return { ...lastSuccess, stale: true };
42608
+ throw new ConsoleReleaseNotesUnavailableError("negative_cache");
42609
+ }
42610
+ if (inFlight) return inFlight;
42611
+ const pending = runFetch().finally(() => {
42612
+ if (inFlight === pending) inFlight = null;
42613
+ });
42614
+ inFlight = pending;
42615
+ return pending;
42616
+ }
42617
+ function runFetch() {
42618
+ return fetchReleaseNotes().then((result) => {
42619
+ lastSuccess = result;
42620
+ lastFailureAt = 0;
42621
+ return result;
42622
+ }).catch((error51) => {
42623
+ lastFailureAt = now();
42624
+ if (lastSuccess) return { ...lastSuccess, stale: true };
42625
+ if (error51 instanceof ConsoleReleaseNotesUnavailableError) throw error51;
42626
+ throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42627
+ });
42628
+ }
42629
+ async function fetchReleaseNotes() {
42630
+ const controller = new AbortController();
42631
+ const timer = setTimer(() => controller.abort(), FETCH_TIMEOUT_MS);
42632
+ timer.unref?.();
42633
+ try {
42634
+ const response = await fetchImpl(RAW_CHANGELOG_URL, {
42635
+ headers: { Accept: "text/plain; charset=utf-8" },
42636
+ signal: controller.signal
42637
+ });
42638
+ if (!response.ok) throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42639
+ const text = await readTextWithByteLimit(response, controller);
42640
+ return {
42641
+ notes: parseConsoleReleaseNotes(text),
42642
+ sourceRef: SOURCE_REF,
42643
+ fetchedAt: now(),
42644
+ stale: false
42645
+ };
42646
+ } finally {
42647
+ clearTimer(timer);
42648
+ }
42649
+ }
42650
+ return { refresh };
42651
+ }
42652
+ async function readTextWithByteLimit(response, controller) {
42653
+ const body = response.body;
42654
+ if (body === null) return await response.text();
42655
+ const reader = body.getReader();
42656
+ const chunks = [];
42657
+ let totalBytes = 0;
42658
+ try {
42659
+ while (true) {
42660
+ const { done, value } = await reader.read();
42661
+ if (done) break;
42662
+ totalBytes += value.byteLength;
42663
+ if (totalBytes > MAX_CHANGELOG_BYTES) {
42664
+ controller.abort();
42665
+ throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42666
+ }
42667
+ chunks.push(value);
42668
+ }
42669
+ return new TextDecoder().decode(joinChunks2(chunks, totalBytes));
42670
+ } finally {
42671
+ reader.releaseLock();
42672
+ }
42673
+ }
42674
+ function joinChunks2(chunks, totalBytes) {
42675
+ const joined = new Uint8Array(totalBytes);
42676
+ let offset = 0;
42677
+ for (const chunk of chunks) {
42678
+ joined.set(chunk, offset);
42679
+ offset += chunk.byteLength;
42680
+ }
42681
+ return joined;
42682
+ }
42513
42683
  var TENANT_EVENT_LIMIT = 1e3;
42514
42684
  var TENANT_FINALIZED_JOB_LIMIT = 100;
42515
42685
  var TENANT_JOB_LIMIT = 200;
@@ -44438,6 +44608,13 @@ var SERVER_API_CATALOG = [
44438
44608
  category: "Observer",
44439
44609
  gate: "loopback"
44440
44610
  },
44611
+ {
44612
+ method: "GET",
44613
+ path: "/observer/release-notes",
44614
+ summary: "Get the console release notes.",
44615
+ category: "Update",
44616
+ gate: "loopback"
44617
+ },
44441
44618
  {
44442
44619
  method: "GET",
44443
44620
  path: "/observer/tenants",
@@ -44589,6 +44766,7 @@ function createConsoleServer(deps = {}) {
44589
44766
  registerDefaultCarriers(carrierRegistry);
44590
44767
  const lock = createConsoleLock({ hostname: () => host });
44591
44768
  const observability = createConsoleObservabilityStore();
44769
+ const releaseNotes = deps.releaseNotes ?? createConsoleReleaseNotesService();
44592
44770
  const updateCheck = deps.updateCheck ?? createConsoleUpdateCheckService();
44593
44771
  const updateApply = deps.updateApply ?? createConsoleUpdateApplyService();
44594
44772
  const theaters = new TheaterRegistry();
@@ -44783,6 +44961,10 @@ function createConsoleServer(deps = {}) {
44783
44961
  handleObserverApiCatalog(req, res);
44784
44962
  return;
44785
44963
  }
44964
+ if (pathname === "/observer/release-notes") {
44965
+ runAsyncHandler(handleObserverReleaseNotes(req, res), res);
44966
+ return;
44967
+ }
44786
44968
  if (pathname === "/update/apply") {
44787
44969
  runAsyncHandler(handleUpdateApply(req, res), res);
44788
44970
  return;
@@ -45233,6 +45415,22 @@ function createConsoleServer(deps = {}) {
45233
45415
  function handleObserverApiCatalog(_req, res) {
45234
45416
  writeJson(res, 200, { version: version2, routes: buildApiCatalog() });
45235
45417
  }
45418
+ async function handleObserverReleaseNotes(req, res) {
45419
+ if (req.method !== "GET") {
45420
+ writeJson(res, 405, { error: "Method not allowed" });
45421
+ return;
45422
+ }
45423
+ try {
45424
+ const force = readUrl(req).searchParams.get("force") === "true";
45425
+ writeJson(res, 200, await releaseNotes.refresh({ force }));
45426
+ } catch (error51) {
45427
+ if (error51 instanceof ConsoleReleaseNotesUnavailableError) {
45428
+ writeJson(res, 503, { error: "release_notes_unavailable" });
45429
+ return;
45430
+ }
45431
+ throw error51;
45432
+ }
45433
+ }
45236
45434
  async function handleUpdateApply(req, res) {
45237
45435
  if (req.method !== "POST") {
45238
45436
  writeJson(res, 405, { error: "Method not allowed" });
package/dist/cli.mjs CHANGED
@@ -42510,6 +42510,176 @@ function resolvedWorkspaceSnapshot(resolveWorkspace, tenantId) {
42510
42510
  tenantLabel: tenantId
42511
42511
  };
42512
42512
  }
42513
+
42514
+ // src/release-notes/parser.ts
42515
+ var RELEASE_NOTE_HEADINGS = ["Added", "Changed", "Fixed", "Removed", "Breaking Changes"];
42516
+ var VERSION_HEADER_PATTERN = /^## \[([^\]]+)\](?: - ([0-9]{4}-[0-9]{2}-[0-9]{2}))?$/;
42517
+ var SECTION_HEADER_PATTERN = /^### (Added|Changed|Fixed|Removed|Breaking Changes)$/;
42518
+ var BULLET_PATTERN = /^- (.+)$/;
42519
+ var PACKAGE_TAG_PATTERN = /^\[([^\]]+)\]/;
42520
+ function parseConsoleReleaseNotes(changelog) {
42521
+ const lines = changelog.split(/\r?\n/);
42522
+ const notes = [];
42523
+ for (let index = 0; index < lines.length; index += 1) {
42524
+ const match = VERSION_HEADER_PATTERN.exec(lines[index] ?? "");
42525
+ if (match === null) continue;
42526
+ const block = [];
42527
+ for (let cursor = index + 1; cursor < lines.length; cursor += 1) {
42528
+ if ((lines[cursor] ?? "").startsWith("## ")) break;
42529
+ block.push(lines[cursor] ?? "");
42530
+ }
42531
+ const sections = collectSections(block);
42532
+ if (sections.length === 0) continue;
42533
+ notes.push({ version: match[1] ?? "", date: match[2] ?? null, sections });
42534
+ }
42535
+ return notes;
42536
+ }
42537
+ function collectSections(lines) {
42538
+ const sections = [];
42539
+ let current = null;
42540
+ for (const line of lines) {
42541
+ const sectionMatch = SECTION_HEADER_PATTERN.exec(line);
42542
+ if (sectionMatch !== null) {
42543
+ current = { heading: sectionMatch[1], items: [] };
42544
+ sections.push(current);
42545
+ continue;
42546
+ }
42547
+ if (current === null) continue;
42548
+ if (line.startsWith("### ")) {
42549
+ current = null;
42550
+ continue;
42551
+ }
42552
+ const bulletMatch = BULLET_PATTERN.exec(line);
42553
+ if (bulletMatch !== null) current.items.push(parseReleaseNoteItem(bulletMatch[1] ?? ""));
42554
+ }
42555
+ return RELEASE_NOTE_HEADINGS.map((heading) => sections.find((section2) => section2.heading === heading)).filter((section2) => Boolean(section2 && section2.items.length > 0));
42556
+ }
42557
+ function parseReleaseNoteItem(rawText) {
42558
+ const packageTags = [];
42559
+ let text = rawText.trim();
42560
+ while (true) {
42561
+ const match = PACKAGE_TAG_PATTERN.exec(text);
42562
+ if (match === null) break;
42563
+ packageTags.push(match[1] ?? "");
42564
+ text = text.slice(match[0].length).trimStart();
42565
+ }
42566
+ return { packageTags, text: text.trim() };
42567
+ }
42568
+
42569
+ // src/release-notes/types.ts
42570
+ var ConsoleReleaseNotesUnavailableError = class extends Error {
42571
+ reason;
42572
+ constructor(reason) {
42573
+ super("Console release notes are unavailable");
42574
+ this.name = "ConsoleReleaseNotesUnavailableError";
42575
+ this.reason = reason;
42576
+ }
42577
+ };
42578
+
42579
+ // src/release-notes/service.ts
42580
+ var RAW_CHANGELOG_URL = "https://raw.githubusercontent.com/sbluemin/fleet-harness/main/CHANGELOG.md";
42581
+ var SOURCE_REF = "main";
42582
+ var FETCH_TIMEOUT_MS = 3e3;
42583
+ var MAX_CHANGELOG_BYTES = 1024 * 1024;
42584
+ var SUCCESS_TTL_MS = 60 * 60 * 1e3;
42585
+ var NEGATIVE_TTL_MS = 30 * 1e3;
42586
+ function createConsoleReleaseNotesService(deps = {}) {
42587
+ const fetchImpl = deps.fetchImpl ?? fetch;
42588
+ const now = deps.now ?? (() => Date.now());
42589
+ const setTimer = deps.setTimeout ?? setTimeout;
42590
+ const clearTimer = deps.clearTimeout ?? clearTimeout;
42591
+ let lastSuccess = null;
42592
+ let lastFailureAt = 0;
42593
+ let inFlight = null;
42594
+ let forceInFlight = null;
42595
+ async function refresh(options = {}) {
42596
+ const currentTime = now();
42597
+ if (options.force) {
42598
+ if (forceInFlight) return forceInFlight;
42599
+ const pending2 = runFetch().finally(() => {
42600
+ if (forceInFlight === pending2) forceInFlight = null;
42601
+ });
42602
+ forceInFlight = pending2;
42603
+ return pending2;
42604
+ }
42605
+ if (lastSuccess && currentTime - lastSuccess.fetchedAt < SUCCESS_TTL_MS) return lastSuccess;
42606
+ if (lastFailureAt > 0 && currentTime - lastFailureAt < NEGATIVE_TTL_MS) {
42607
+ if (lastSuccess) return { ...lastSuccess, stale: true };
42608
+ throw new ConsoleReleaseNotesUnavailableError("negative_cache");
42609
+ }
42610
+ if (inFlight) return inFlight;
42611
+ const pending = runFetch().finally(() => {
42612
+ if (inFlight === pending) inFlight = null;
42613
+ });
42614
+ inFlight = pending;
42615
+ return pending;
42616
+ }
42617
+ function runFetch() {
42618
+ return fetchReleaseNotes().then((result) => {
42619
+ lastSuccess = result;
42620
+ lastFailureAt = 0;
42621
+ return result;
42622
+ }).catch((error51) => {
42623
+ lastFailureAt = now();
42624
+ if (lastSuccess) return { ...lastSuccess, stale: true };
42625
+ if (error51 instanceof ConsoleReleaseNotesUnavailableError) throw error51;
42626
+ throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42627
+ });
42628
+ }
42629
+ async function fetchReleaseNotes() {
42630
+ const controller = new AbortController();
42631
+ const timer = setTimer(() => controller.abort(), FETCH_TIMEOUT_MS);
42632
+ timer.unref?.();
42633
+ try {
42634
+ const response = await fetchImpl(RAW_CHANGELOG_URL, {
42635
+ headers: { Accept: "text/plain; charset=utf-8" },
42636
+ signal: controller.signal
42637
+ });
42638
+ if (!response.ok) throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42639
+ const text = await readTextWithByteLimit(response, controller);
42640
+ return {
42641
+ notes: parseConsoleReleaseNotes(text),
42642
+ sourceRef: SOURCE_REF,
42643
+ fetchedAt: now(),
42644
+ stale: false
42645
+ };
42646
+ } finally {
42647
+ clearTimer(timer);
42648
+ }
42649
+ }
42650
+ return { refresh };
42651
+ }
42652
+ async function readTextWithByteLimit(response, controller) {
42653
+ const body = response.body;
42654
+ if (body === null) return await response.text();
42655
+ const reader = body.getReader();
42656
+ const chunks = [];
42657
+ let totalBytes = 0;
42658
+ try {
42659
+ while (true) {
42660
+ const { done, value } = await reader.read();
42661
+ if (done) break;
42662
+ totalBytes += value.byteLength;
42663
+ if (totalBytes > MAX_CHANGELOG_BYTES) {
42664
+ controller.abort();
42665
+ throw new ConsoleReleaseNotesUnavailableError("cold_unavailable");
42666
+ }
42667
+ chunks.push(value);
42668
+ }
42669
+ return new TextDecoder().decode(joinChunks2(chunks, totalBytes));
42670
+ } finally {
42671
+ reader.releaseLock();
42672
+ }
42673
+ }
42674
+ function joinChunks2(chunks, totalBytes) {
42675
+ const joined = new Uint8Array(totalBytes);
42676
+ let offset = 0;
42677
+ for (const chunk of chunks) {
42678
+ joined.set(chunk, offset);
42679
+ offset += chunk.byteLength;
42680
+ }
42681
+ return joined;
42682
+ }
42513
42683
  var TENANT_EVENT_LIMIT = 1e3;
42514
42684
  var TENANT_FINALIZED_JOB_LIMIT = 100;
42515
42685
  var TENANT_JOB_LIMIT = 200;
@@ -44438,6 +44608,13 @@ var SERVER_API_CATALOG = [
44438
44608
  category: "Observer",
44439
44609
  gate: "loopback"
44440
44610
  },
44611
+ {
44612
+ method: "GET",
44613
+ path: "/observer/release-notes",
44614
+ summary: "Get the console release notes.",
44615
+ category: "Update",
44616
+ gate: "loopback"
44617
+ },
44441
44618
  {
44442
44619
  method: "GET",
44443
44620
  path: "/observer/tenants",
@@ -44589,6 +44766,7 @@ function createConsoleServer(deps = {}) {
44589
44766
  registerDefaultCarriers(carrierRegistry);
44590
44767
  const lock = createConsoleLock({ hostname: () => host });
44591
44768
  const observability = createConsoleObservabilityStore();
44769
+ const releaseNotes = deps.releaseNotes ?? createConsoleReleaseNotesService();
44592
44770
  const updateCheck = deps.updateCheck ?? createConsoleUpdateCheckService();
44593
44771
  const updateApply = deps.updateApply ?? createConsoleUpdateApplyService();
44594
44772
  const theaters = new TheaterRegistry();
@@ -44783,6 +44961,10 @@ function createConsoleServer(deps = {}) {
44783
44961
  handleObserverApiCatalog(req, res);
44784
44962
  return;
44785
44963
  }
44964
+ if (pathname === "/observer/release-notes") {
44965
+ runAsyncHandler(handleObserverReleaseNotes(req, res), res);
44966
+ return;
44967
+ }
44786
44968
  if (pathname === "/update/apply") {
44787
44969
  runAsyncHandler(handleUpdateApply(req, res), res);
44788
44970
  return;
@@ -45233,6 +45415,22 @@ function createConsoleServer(deps = {}) {
45233
45415
  function handleObserverApiCatalog(_req, res) {
45234
45416
  writeJson(res, 200, { version: version2, routes: buildApiCatalog() });
45235
45417
  }
45418
+ async function handleObserverReleaseNotes(req, res) {
45419
+ if (req.method !== "GET") {
45420
+ writeJson(res, 405, { error: "Method not allowed" });
45421
+ return;
45422
+ }
45423
+ try {
45424
+ const force = readUrl(req).searchParams.get("force") === "true";
45425
+ writeJson(res, 200, await releaseNotes.refresh({ force }));
45426
+ } catch (error51) {
45427
+ if (error51 instanceof ConsoleReleaseNotesUnavailableError) {
45428
+ writeJson(res, 503, { error: "release_notes_unavailable" });
45429
+ return;
45430
+ }
45431
+ throw error51;
45432
+ }
45433
+ }
45236
45434
  async function handleUpdateApply(req, res) {
45237
45435
  if (req.method !== "POST") {
45238
45436
  writeJson(res, 405, { error: "Method not allowed" });
@@ -1 +1 @@
1
- import{aW as L,bs as ln,aG as A,aU as P,aF as W,bt as gn,bu as dn,bv as hn,bw as z,bx as pn,bn as An,by as m,aX as N,b0 as U,b3 as T,bz as _n,a_ as on,bA as wn,bq as On,aH as V,bo as vn,bB as I}from"./mermaid.core-Ddi7z3V3.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||L(n)&&ln(n)==Pn}function yn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var B=P?P.prototype:void 0,H=B?B.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return yn(n,k)+"";if(x(n))return H?H.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function Rn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function In(n,r,e){return r===r?Rn(n,r,e):cn(n,Tn,e)}function Sn(n,r){var e=n==null?0:n.length;return!!e&&In(n,r,0)>-1}function M(n){return W(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fn=/\\(\\)?/g,Gn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Fn,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Gn(Dn(n))}function R(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[R(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var K=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||z(n)||!!(K&&n&&n[K])}function Kr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Un(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Bn(){return[]}var Hn=Object.prototype,Kn=Hn.propertyIsEnumerable,q=Object.getOwnPropertySymbols,qn=q?function(n){return n==null?[]:(n=Object(n),en(q(n),function(r){return Kn.call(n,r)}))}:Bn;function Zn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function Z(n){return Zn(n,M,qn)}var Xn="__lodash_hash_undefined__";function Yn(n){return this.__data__.set(n,Xn),this}function Jn(n){return this.__data__.has(n)}function y(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}y.prototype.add=y.prototype.push=Yn;y.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Wn=1,zn=2;function fn(n,r,e,i,f,t){var s=e&Wn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&zn?new y:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Qn(r,function(O,v){if(!tn(o,v)&&(p===O||f(p,O,e,i,t)))return o.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",X=P?P.prototype:void 0,S=X?X.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(S)return S.call(n)==S.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=Z(n),a=u.length,h=Z(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var O=n[d],v=r[d];if(i)var D=s?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(D===void 0?O===v||f(O,v,e,i,t):D)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var b=n.constructor,E=r.constructor;b!=E&&"constructor"in n&&"constructor"in r&&!(typeof b=="function"&&b instanceof b&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,Y="[object Arguments]",J="[object Array]",c="[object Object]",wr=Object.prototype,Q=wr.hasOwnProperty;function Or(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==Y?c:a,h=h==Y?c:h;var g=a==c,l=h==c,d=a==h;if(d&&U(n)){if(!U(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function F(n,r,e,i,f){return n===r?!0:n==null||r==null||!L(n)&&!L(r)?n!==n&&r!==r:Or(n,r,e,i,F,f)}var vr=1,Pr=2;function yr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?F(h,a,vr|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function br(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=br(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||yr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=R(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&On(s,f)&&(A(n)||z(n)))}function Rr(n,r){return n!=null&&Tr(n,r,cr)}var Ir=1,Sr=2;function Lr(n,r){return $(n)&&sn(r)?un(R(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Rr(e,n):F(r,i,Ir|Sr)}}function xr(n){return function(r){return r?.[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(R(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Lr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&vn(n,r,M)}function Fr(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var G=Fr(Cr);function Gr(n){return typeof n=="function"?n:V}function qr(n,r){var e=A(n)?En:G;return e(n,Gr(r))}function Dr(n,r){var e=[];return G(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Zr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Xr(n,r,e){var i=A(n)?Un:mr,f=arguments.length<3;return i(n,an(r),e,f,G)}var Nr=1/0,Ur=I&&1/C(new I([,-0]))[1]==Nr?function(n){return new I(n)}:bn,Br=200;function Yr(n,r,e){var i=-1,f=Sn,t=n.length,s=!0,u=[],a=u;if(t>=Br){var h=r?null:Ur(n);if(h)return C(h);s=!1,f=tn,a=new y}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{G as a,Kr as b,an as c,yn as d,rn as e,Zn as f,qn as g,En as h,x as i,Z as j,M as k,Yr as l,Zr as m,qr as n,cn as o,Gr as p,Cr as q,Xr as r,Bn as s,Tr as t,j as u,R as v,nn as w,Rr as x,Dn as y};
1
+ import{aW as L,bs as ln,aG as A,aU as P,aF as W,bt as gn,bu as dn,bv as hn,bw as z,bx as pn,bn as An,by as m,aX as N,b0 as U,b3 as T,bz as _n,a_ as on,bA as wn,bq as On,aH as V,bo as vn,bB as I}from"./mermaid.core-Bstsk9cs.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||L(n)&&ln(n)==Pn}function yn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var B=P?P.prototype:void 0,H=B?B.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return yn(n,k)+"";if(x(n))return H?H.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function Rn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function In(n,r,e){return r===r?Rn(n,r,e):cn(n,Tn,e)}function Sn(n,r){var e=n==null?0:n.length;return!!e&&In(n,r,0)>-1}function M(n){return W(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fn=/\\(\\)?/g,Gn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Fn,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Gn(Dn(n))}function R(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[R(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var K=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||z(n)||!!(K&&n&&n[K])}function Kr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Un(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Bn(){return[]}var Hn=Object.prototype,Kn=Hn.propertyIsEnumerable,q=Object.getOwnPropertySymbols,qn=q?function(n){return n==null?[]:(n=Object(n),en(q(n),function(r){return Kn.call(n,r)}))}:Bn;function Zn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function Z(n){return Zn(n,M,qn)}var Xn="__lodash_hash_undefined__";function Yn(n){return this.__data__.set(n,Xn),this}function Jn(n){return this.__data__.has(n)}function y(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}y.prototype.add=y.prototype.push=Yn;y.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Wn=1,zn=2;function fn(n,r,e,i,f,t){var s=e&Wn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&zn?new y:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Qn(r,function(O,v){if(!tn(o,v)&&(p===O||f(p,O,e,i,t)))return o.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",X=P?P.prototype:void 0,S=X?X.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(S)return S.call(n)==S.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=Z(n),a=u.length,h=Z(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var O=n[d],v=r[d];if(i)var D=s?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(D===void 0?O===v||f(O,v,e,i,t):D)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var b=n.constructor,E=r.constructor;b!=E&&"constructor"in n&&"constructor"in r&&!(typeof b=="function"&&b instanceof b&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,Y="[object Arguments]",J="[object Array]",c="[object Object]",wr=Object.prototype,Q=wr.hasOwnProperty;function Or(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==Y?c:a,h=h==Y?c:h;var g=a==c,l=h==c,d=a==h;if(d&&U(n)){if(!U(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function F(n,r,e,i,f){return n===r?!0:n==null||r==null||!L(n)&&!L(r)?n!==n&&r!==r:Or(n,r,e,i,F,f)}var vr=1,Pr=2;function yr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?F(h,a,vr|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function br(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=br(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||yr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=R(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&On(s,f)&&(A(n)||z(n)))}function Rr(n,r){return n!=null&&Tr(n,r,cr)}var Ir=1,Sr=2;function Lr(n,r){return $(n)&&sn(r)?un(R(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Rr(e,n):F(r,i,Ir|Sr)}}function xr(n){return function(r){return r?.[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(R(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Lr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&vn(n,r,M)}function Fr(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var G=Fr(Cr);function Gr(n){return typeof n=="function"?n:V}function qr(n,r){var e=A(n)?En:G;return e(n,Gr(r))}function Dr(n,r){var e=[];return G(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Zr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Xr(n,r,e){var i=A(n)?Un:mr,f=arguments.length<3;return i(n,an(r),e,f,G)}var Nr=1/0,Ur=I&&1/C(new I([,-0]))[1]==Nr?function(n){return new I(n)}:bn,Br=200;function Yr(n,r,e){var i=-1,f=Sn,t=n.length,s=!0,u=[],a=u;if(t>=Br){var h=r?null:Ur(n);if(h)return C(h);s=!1,f=tn,a=new y}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{G as a,Kr as b,an as c,yn as d,rn as e,Zn as f,qn as g,En as h,x as i,Z as j,M as k,Yr as l,Zr as m,qr as n,cn as o,Gr as p,Cr as q,Xr as r,Bn as s,Tr as t,j as u,R as v,nn as w,Rr as x,Dn as y};
@@ -1 +1 @@
1
- import{$ as ln,a0 as an,a1 as G,a2 as q,a3 as z,a4 as un,a5 as y,a6 as tn,a7 as K,a8 as _,a9 as rn,aa as o,ab as on,ac as sn,ad as fn}from"./mermaid.core-Ddi7z3V3.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,B,a){var O=I-l,i=D-h,n=B-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function V(l,h,I,D,v,A,B){var a=l-I,O=h-D,i=(B?A:-A)/K(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,C=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*K(on(0,T*T*R-P*P)),$=(P*g-m*S)/R,j=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=$-C,e=j-t,r=w-C,F=p-t;return x*x+e*e>r*r+F*F&&($=w,j=p),{cx:$,cy:j,x01:-n,y01:-d,x11:$*(v/T-1),y11:j*(v/T-1)}}function hn(){var l=cn,h=yn,I=z(0),D=null,v=gn,A=dn,B=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,C=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(C>tn-y)a.moveTo(s*G(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*G(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=C,S=C,$=B.apply(this,arguments)/2,j=$>y&&(D?+D.apply(this,arguments):K(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(j>y){var F=sn(j/u*q($)),L=sn(j/s*q($));(P-=F*2)>y?(F*=t?1:-1,R+=F,T-=F):(P=0,R=T=(f+c)/2),(S-=L*2)>y?(L*=t?1:-1,m+=L,g-=L):(S=0,m=g=(f+c)/2)}var H=s*G(m),J=s*q(m),M=u*G(T),N=u*q(T);if(w>y){var Q=s*G(g),U=s*q(g),W=u*G(R),X=u*q(R),E;if(C<an)if(E=pn(H,J,W,X,Q,U,M,N)){var Y=H-E[0],Z=J-E[1],b=Q-E[0],k=U-E[1],nn=1/q(fn((Y*b+Z*k)/(K(Y*Y+Z*Z)*K(b*b+k*k)))/2),en=K(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=V(W,X,H,J,s,x,t),r=V(Q,U,M,N,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(H,J),a.arc(0,0,s,m,g,!t)):a.moveTo(H,J),!(u>y)||!(P>y)?a.lineTo(M,N):p>y?(e=V(M,N,Q,U,u,-p,t),r=V(H,J,W,X,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[G(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:z(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:z(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:z(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:z(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:z(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:z(+n),i):A},i.padAngle=function(n){return arguments.length?(B=typeof n=="function"?n:z(+n),i):B},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{$ as ln,a0 as an,a1 as G,a2 as q,a3 as z,a4 as un,a5 as y,a6 as tn,a7 as K,a8 as _,a9 as rn,aa as o,ab as on,ac as sn,ad as fn}from"./mermaid.core-Bstsk9cs.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,B,a){var O=I-l,i=D-h,n=B-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function V(l,h,I,D,v,A,B){var a=l-I,O=h-D,i=(B?A:-A)/K(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,C=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*K(on(0,T*T*R-P*P)),$=(P*g-m*S)/R,j=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=$-C,e=j-t,r=w-C,F=p-t;return x*x+e*e>r*r+F*F&&($=w,j=p),{cx:$,cy:j,x01:-n,y01:-d,x11:$*(v/T-1),y11:j*(v/T-1)}}function hn(){var l=cn,h=yn,I=z(0),D=null,v=gn,A=dn,B=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,C=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(C>tn-y)a.moveTo(s*G(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*G(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=C,S=C,$=B.apply(this,arguments)/2,j=$>y&&(D?+D.apply(this,arguments):K(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(j>y){var F=sn(j/u*q($)),L=sn(j/s*q($));(P-=F*2)>y?(F*=t?1:-1,R+=F,T-=F):(P=0,R=T=(f+c)/2),(S-=L*2)>y?(L*=t?1:-1,m+=L,g-=L):(S=0,m=g=(f+c)/2)}var H=s*G(m),J=s*q(m),M=u*G(T),N=u*q(T);if(w>y){var Q=s*G(g),U=s*q(g),W=u*G(R),X=u*q(R),E;if(C<an)if(E=pn(H,J,W,X,Q,U,M,N)){var Y=H-E[0],Z=J-E[1],b=Q-E[0],k=U-E[1],nn=1/q(fn((Y*b+Z*k)/(K(Y*Y+Z*Z)*K(b*b+k*k)))/2),en=K(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=V(W,X,H,J,s,x,t),r=V(Q,U,M,N,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(H,J),a.arc(0,0,s,m,g,!t)):a.moveTo(H,J),!(u>y)||!(P>y)?a.lineTo(M,N):p>y?(e=V(M,N,Q,U,u,-p,t),r=V(H,J,W,X,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[G(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:z(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:z(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:z(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:z(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:z(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:z(+n),i):A},i.padAngle=function(n){return arguments.length?(B=typeof n=="function"?n:z(+n),i):B},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};