@dotobokuri/fleet-console 1.10.1 → 1.11.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/cli-bin.mjs +198 -0
- package/dist/cli.mjs +198 -0
- package/dist/client/assets/{_baseUniq-e_j340KJ.js → _baseUniq-ztWyEFQN.js} +1 -1
- package/dist/client/assets/{arc-CioNx0k6.js → arc-EhU8s6Ua.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-B_8HDSCb.js → architectureDiagram-Q4EWVU46-D-A0BxBN.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-CpHdrypQ.js → blockDiagram-DXYQGD6D-2I4IGpqO.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-CkitEGpF.js → c4Diagram-AHTNJAMY-CbqNPptt.js} +1 -1
- package/dist/client/assets/channel-Dd54JtFQ.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DxyXXSCc.js → chunk-4BX2VUAB-BazJQgjj.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-C2-nU4zS.js → chunk-4TB4RGXK-B5U6jXNZ.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Ch5DNHFU.js → chunk-55IACEB6-0n2BOb9g.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-CHE6KKZa.js → chunk-EDXVE4YY-CCIYCj-v.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-PFqCeOs6.js → chunk-FMBD7UC4-De3-snUm.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-DHE5_rgO.js → chunk-OYMX7WX6-diQ1neOD.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BNsfe2Ai.js → chunk-QZHKN3VN-jDt-UT0T.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-Du6aAWOS.js → chunk-YZCP3GAM-DcO9HsKI.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DXlHCr38.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-DXlHCr38.js +1 -0
- package/dist/client/assets/clone-aAfeyUSr.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BMbRb2Ij.js → cose-bilkent-S5V4N54A--wgqx5mz.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-BIYIuU4t.js → dagre-KV5264BT-BJ0_Y4Vz.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-DE58KlL0.js → diagram-5BDNPKRD-CfBHVHZE.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-BBHYXkDj.js → diagram-G4DWMVQ6-DDcFZCuW.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-BGA4ZKw3.js → diagram-MMDJMWI5-D1h5iLfb.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-DusN1Hix.js → diagram-TYMM5635-BDq0icy6.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-84E-AJKo.js → erDiagram-SMLLAGMA-hM5asp2K.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-Dpap9NqV.js → flowDiagram-DWJPFMVM-Duycvo32.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-CukRJAaM.js → ganttDiagram-T4ZO3ILL-f43QwkVB.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DuAwiTii.js → gitGraphDiagram-UUTBAWPF-B-fSCy1k.js} +1 -1
- package/dist/client/assets/{graph-B7irxl7Q.js → graph-Cl_pkMd7.js} +1 -1
- package/dist/client/assets/index-BvDAt7ke.js +777 -0
- package/dist/client/assets/index-CWhJm0eS.css +1 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-Gdh2w_Ry.js → infoDiagram-42DDH7IO-CI1F8uHU.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DvbqJman.js → ishikawaDiagram-UXIWVN3A-CPTPh9Lu.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-DIQYAsjN.js → journeyDiagram-VCZTEJTY-D_FHFgB1.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-8BBtOuAV.js → kanban-definition-6JOO6SKY-C_Bn4fd8.js} +1 -1
- package/dist/client/assets/{layout-DDUpLunD.js → layout-Bc8t_qfg.js} +1 -1
- package/dist/client/assets/{linear-BzLoJVdP.js → linear-GI_b927m.js} +1 -1
- package/dist/client/assets/{mermaid.core-Ddi7z3V3.js → mermaid.core-Dpt8s_19.js} +4 -4
- package/dist/client/assets/{min-CEKwugI-.js → min-C0TmzA9X.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-y-V-6GIi.js → mindmap-definition-QFDTVHPH-DeVjdvs_.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-DjqTUefi.js → pieDiagram-DEJITSTG-D6vRcSmr.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-BZbwyDuC.js → quadrantDiagram-34T5L4WZ-CHx1fSsQ.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-M2epVejI.js → requirementDiagram-MS252O5E-BYXRdqXr.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-DQHzVL6h.js → sankeyDiagram-XADWPNL6-DQ6TVGQn.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-Dldq08WJ.js → sequenceDiagram-FGHM5R23-DLKBakQH.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-B32muPdI.js → stateDiagram-FHFEXIEX-CKEUdeZY.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DtBjrVLm.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-nSYYEX6t.js → timeline-definition-GMOUNBTQ-DJ34nw1g.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-DPIMKKCQ.js → vennDiagram-DHZGUBPP-DaF9-6LK.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-DArerB6Y.js → wardley-RL74JXVD-B3nUfV4p.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-DRvimWEN.js → wardleyDiagram-NUSXRM2D-DeYWbpzl.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-D0VCX3ps.js → xychartDiagram-5P7HB3ND-DkpV5JZH.js} +1 -1
- package/dist/client/index.html +2 -2
- package/package.json +1 -1
- package/dist/client/assets/channel-CEwT4AXW.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-BcAsKAPs.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-BcAsKAPs.js +0 -1
- package/dist/client/assets/clone-BbRCSYXZ.js +0 -1
- package/dist/client/assets/index-CTyjGQHF.css +0 -1
- package/dist/client/assets/index-Uidvbtqb.js +0 -777
- 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-
|
|
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-Dpt8s_19.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-
|
|
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-Dpt8s_19.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};
|