local-operator-ui 0.29.1 → 0.29.3

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 (70) hide show
  1. package/out/main/index.js +319 -116
  2. package/out/renderer/assets/{_basePickBy-BydJ9gPn.js → _basePickBy-BuxOTHVQ.js} +1 -1
  3. package/out/renderer/assets/{_baseUniq-BDr5gwdw.js → _baseUniq-CpAeJ_T5.js} +1 -1
  4. package/out/renderer/assets/{agent-details-page-DzuXjh7y.js → agent-details-page-MP0PffyF.js} +2 -2
  5. package/out/renderer/assets/{agent-hub-page-C4DQzZUK.js → agent-hub-page-D_VZWryD.js} +2 -2
  6. package/out/renderer/assets/{agents-page-BNG7sv4M.js → agents-page-DD8YflqT.js} +2 -2
  7. package/out/renderer/assets/{arc-Ts5EMYgx.js → arc-DYfSd8Jq.js} +1 -1
  8. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-BAzlZ3P9.js → architectureDiagram-IEHRJDOE-CB4RrqKK.js} +1 -1
  9. package/out/renderer/assets/{blockDiagram-JOT3LUYC-DwF0jv-B.js → blockDiagram-JOT3LUYC-ByZ-EtvL.js} +1 -1
  10. package/out/renderer/assets/browser-page-Bgm7Jusv.js +1 -0
  11. package/out/renderer/assets/{c4Diagram-VJAJSXHY-QrHSDv8I.js → c4Diagram-VJAJSXHY-C-px-58h.js} +1 -1
  12. package/out/renderer/assets/channel-CNh50WRj.js +1 -0
  13. package/out/renderer/assets/{chunk-4BMEZGHF-BjNHi0kM.js → chunk-4BMEZGHF-JfxshMc2.js} +1 -1
  14. package/out/renderer/assets/{chunk-A2AXSNBT-DxLxkNtl.js → chunk-A2AXSNBT-BhURhbRt.js} +1 -1
  15. package/out/renderer/assets/{chunk-AEK57VVT-C9g2i51Q.js → chunk-AEK57VVT-CU2c2HZ3.js} +1 -1
  16. package/out/renderer/assets/{chunk-D6G4REZN-DoSuJfra.js → chunk-D6G4REZN-2emtjcJO.js} +1 -1
  17. package/out/renderer/assets/{chunk-RZ5BOZE2-Bi2qxsMe.js → chunk-RZ5BOZE2-8oEYebhy.js} +1 -1
  18. package/out/renderer/assets/{chunk-XZIHB7SX-sURP5cay.js → chunk-XZIHB7SX-8mhmnfki.js} +1 -1
  19. package/out/renderer/assets/classDiagram-GIVACNV2-7rlY7XBk.js +1 -0
  20. package/out/renderer/assets/classDiagram-v2-COTLJTTW-7rlY7XBk.js +1 -0
  21. package/out/renderer/assets/clone-C0QmamW2.js +1 -0
  22. package/out/renderer/assets/{compact-pagination-ohz3hihb.js → compact-pagination-B5GLn5G8.js} +1 -1
  23. package/out/renderer/assets/{dagre-OKDRZEBW-ByoyCyPA.js → dagre-OKDRZEBW-DgVH2QFH.js} +1 -1
  24. package/out/renderer/assets/{diagram-SSKATNLV-mZiujngq.js → diagram-SSKATNLV-DgJWH7Pg.js} +1 -1
  25. package/out/renderer/assets/{diagram-VNBRO52H-D0zTyi6M.js → diagram-VNBRO52H-CK2mOdII.js} +1 -1
  26. package/out/renderer/assets/{erDiagram-Q7BY3M3F-B5TcZz4R.js → erDiagram-Q7BY3M3F-DsXSbjhz.js} +1 -1
  27. package/out/renderer/assets/{flowDiagram-4HSFHLVR-DBTPif6c.js → flowDiagram-4HSFHLVR-t_VxP8Y2.js} +1 -1
  28. package/out/renderer/assets/{ganttDiagram-APWFNJXF-DYbmXVph.js → ganttDiagram-APWFNJXF-CRA0nD3Z.js} +1 -1
  29. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-DPj0BkeE.js → gitGraphDiagram-7IBYFJ6S-EckWqrcy.js} +1 -1
  30. package/out/renderer/assets/{graph-DT3vvKWN.js → graph-B_e-5OmG.js} +1 -1
  31. package/out/renderer/assets/{icon-02RQhVJ6.js → icon-BLBWBLpQ.js} +1 -1
  32. package/out/renderer/assets/icon-DaEdqqLD.css +1 -0
  33. package/out/renderer/assets/{index-BkOD7HrG.js → index-BzJ5D16w.js} +1 -1
  34. package/out/renderer/assets/{index-CcZE1DSW.js → index-CzMCmFaC.js} +1 -1
  35. package/out/renderer/assets/{index-CVKAjzjY.js → index-W2LjSwcL.js} +396 -416
  36. package/out/renderer/assets/{infoDiagram-PH2N3AL5-CsR8b0O1.js → infoDiagram-PH2N3AL5-BHXcodOL.js} +1 -1
  37. package/out/renderer/assets/{installer-DbeF2a73.js → installer-CJaywoSL.js} +1 -1
  38. package/out/renderer/assets/{journeyDiagram-U35MCT3I-CDUogXFs.js → journeyDiagram-U35MCT3I-BbuZvzF4.js} +1 -1
  39. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-CXBuFpQO.js → kanban-definition-NDS4AKOZ-m6V84DzN.js} +1 -1
  40. package/out/renderer/assets/{layout-DFc6uQ1h.js → layout-CFV4pKtO.js} +1 -1
  41. package/out/renderer/assets/{legacy-agents-page-DJqe2gmd.js → legacy-agents-page-BYRquvwf.js} +5 -5
  42. package/out/renderer/assets/{mermaid.core-788Hb5C_.js → mermaid.core-CcCGG8rv.js} +5 -5
  43. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-DV20YLHP.js → mindmap-definition-ALO5MXBD-CnN1UhFO.js} +1 -1
  44. package/out/renderer/assets/{page-header-hdhRg_jg.js → page-header-B81uizKq.js} +1 -1
  45. package/out/renderer/assets/parseISO-SuyRamt_.js +6 -0
  46. package/out/renderer/assets/{pieDiagram-IB7DONF6--ODHtlRV.js → pieDiagram-IB7DONF6-DWvbkeJO.js} +1 -1
  47. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-BeBjHOIC.js → quadrantDiagram-7GDLP6J5-BqYtejyj.js} +1 -1
  48. package/out/renderer/assets/{radar-MK3ICKWK-DhIaA0my.js → radar-MK3ICKWK-CflNxnbe.js} +1 -1
  49. package/out/renderer/assets/{radient-auth-buttons-QryFNXsQ.js → radient-auth-buttons-bfpBoHvB.js} +2 -2
  50. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-DSjsP086.js → requirementDiagram-KVF5MWMF-CwboheY-.js} +1 -1
  51. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-BWYpjOje.js → sankeyDiagram-QLVOVGJD-DhwbV2-N.js} +1 -1
  52. package/out/renderer/assets/{schedules-page-BTcUAg3f.js → schedules-page-CqPwo7_C.js} +6 -6
  53. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-BkW8SZ0l.js → sequenceDiagram-X6HHIX6F-aZwx5ceT.js} +1 -1
  54. package/out/renderer/assets/{settings-page-o3rhI1O_.js → settings-page-BPMDTHwZ.js} +71 -66
  55. package/out/renderer/assets/{stateDiagram-DGXRK772-CQX1zc72.js → stateDiagram-DGXRK772-Cp2LT0zg.js} +1 -1
  56. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CUBxQeqf.js +1 -0
  57. package/out/renderer/assets/{timeline-definition-BDJGKUSR-DEJuFYsn.js → timeline-definition-BDJGKUSR-62sjziy0.js} +1 -1
  58. package/out/renderer/assets/{use-agent-like-mutation-Cge3KSLs.js → use-agent-like-mutation-Bpg52Kv_.js} +1 -1
  59. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-QzzQROdv.js → xychartDiagram-VJFVF3MP-Cu2lsyD3.js} +1 -1
  60. package/out/renderer/index.html +11 -4
  61. package/out/renderer/installer.html +3 -3
  62. package/package.json +3 -2
  63. package/out/renderer/assets/browser-page-C2cytRLR.js +0 -1
  64. package/out/renderer/assets/channel-BAGpTB5A.js +0 -1
  65. package/out/renderer/assets/classDiagram-GIVACNV2-COd_us28.js +0 -1
  66. package/out/renderer/assets/classDiagram-v2-COTLJTTW-COd_us28.js +0 -1
  67. package/out/renderer/assets/clone-awNOoFm7.js +0 -1
  68. package/out/renderer/assets/icon-Y8w93nKk.css +0 -1
  69. package/out/renderer/assets/parseISO-A4KRXmC2.js +0 -6
  70. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-sC3k5tGT.js +0 -1
package/out/main/index.js CHANGED
@@ -2360,6 +2360,9 @@ const WATCHDOG_TIMEOUT_SECONDS = 600;
2360
2360
  const WATCHDOG_HARD_TIMEOUT_SECONDS = 1800;
2361
2361
  const PENDING_INSTALL_RECENCY_MARGIN_SECONDS = 300;
2362
2362
  const PENDING_INSTALL_RECENCY_SECONDS = WATCHDOG_HARD_TIMEOUT_SECONDS + PENDING_INSTALL_RECENCY_MARGIN_SECONDS;
2363
+ const LAUNCH_HOLD_END_MARGIN_SECONDS = 60;
2364
+ const PENDING_INSTALL_LAUNCH_HOLD_SECONDS = WATCHDOG_HARD_TIMEOUT_SECONDS - LAUNCH_HOLD_END_MARGIN_SECONDS;
2365
+ const PENDING_INSTALL_HANDOFF_SECONDS = 30;
2363
2366
  const PLIST_READ_TIMEOUT_SECONDS = 5;
2364
2367
  const WATCHDOG_TOKEN = "local-operator-update-watchdog";
2365
2368
  const BAD_BUNDLE_MARKERS = [
@@ -2851,14 +2854,53 @@ function pendingInstallAgeSeconds(marker, now = Date.now()) {
2851
2854
  return (now - started) / 1e3;
2852
2855
  }
2853
2856
  function isInstallInFlight(input) {
2854
- if (!input.marker || !input.jobLoaded) return false;
2857
+ if (!input.marker) return false;
2855
2858
  const age = pendingInstallAgeSeconds(input.marker, input.now);
2856
2859
  if (age === null) return false;
2857
- return age >= 0 && age <= PENDING_INSTALL_RECENCY_SECONDS;
2860
+ if (age < 0 || age > PENDING_INSTALL_RECENCY_SECONDS) return false;
2861
+ if (input.jobState === "running") return true;
2862
+ return input.jobState === "registered" && age <= PENDING_INSTALL_HANDOFF_SECONDS;
2858
2863
  }
2859
- function launchdJobLoaded(jobLabel, probe) {
2860
- if (!jobLabel) return false;
2861
- return probe(jobLabel) === 0;
2864
+ function evaluateLaunchDuringInstall(input) {
2865
+ const { marker } = input;
2866
+ if (!marker) return { kind: "open" };
2867
+ const outcome = evaluatePendingInstall({
2868
+ marker,
2869
+ runningVersion: input.runningVersion,
2870
+ installInFlight: isInstallInFlight({
2871
+ marker,
2872
+ jobState: input.jobState,
2873
+ now: input.now
2874
+ })
2875
+ });
2876
+ if (outcome.kind !== "in-flight") return { kind: "open" };
2877
+ const age = pendingInstallAgeSeconds(marker, input.now);
2878
+ if (age === null || age > PENDING_INSTALL_LAUNCH_HOLD_SECONDS) {
2879
+ return { kind: "open" };
2880
+ }
2881
+ return { kind: "hold", marker };
2882
+ }
2883
+ function launchdJobPid(output) {
2884
+ const dictionary = /"PID"\s*=\s*(\d+)\s*;/.exec(output);
2885
+ if (dictionary) {
2886
+ const pid = Number.parseInt(dictionary[1], 10);
2887
+ return pid > 0 ? pid : null;
2888
+ }
2889
+ for (const line of output.split("\n")) {
2890
+ const columns = line.trim().split(/\s+/);
2891
+ if (columns.length < 3) continue;
2892
+ if (!/^\d+$/.test(columns[0]) || !/^\d+$/.test(columns[1])) continue;
2893
+ const pid = Number.parseInt(columns[0], 10);
2894
+ return pid > 0 ? pid : null;
2895
+ }
2896
+ return null;
2897
+ }
2898
+ function installJobState(jobLabel, probe) {
2899
+ if (!jobLabel) return "unread";
2900
+ const reading = probe(jobLabel);
2901
+ if (reading == null || reading.status == null) return "unread";
2902
+ if (reading.status !== 0) return "absent";
2903
+ return launchdJobPid(reading.output) == null ? "registered" : "running";
2862
2904
  }
2863
2905
  function installStartedText(marker) {
2864
2906
  const started = marker.startedAt ? new Date(marker.startedAt) : null;
@@ -2898,6 +2940,13 @@ function installInFlightPayload(marker, runningVersion) {
2898
2940
  detail: `Install started ${installStartedText(marker)} from ${marker.artifactPath || "an unknown artifact"}, while version ${runningVersion} was running.`
2899
2941
  };
2900
2942
  }
2943
+ function installLaunchHoldNotice(marker, options = {}) {
2944
+ const relaunch = options.relaunchEnsured === false ? "No relaunch could be arranged for this install, so start Local Operator by hand when it finishes." : "Local Operator will open by itself when the install finishes.";
2945
+ return {
2946
+ title: "Local Operator is still updating",
2947
+ body: `The update to version ${marker.targetVersion} is still installing — this can take a few minutes, and opening the app now would cancel it. ${relaunch} Clicking this notice will not open it any sooner.`
2948
+ };
2949
+ }
2901
2950
  function shipItJobLabel(bundleId) {
2902
2951
  return `${bundleId}.ShipIt`;
2903
2952
  }
@@ -17102,6 +17151,216 @@ function isWithinAnyRoot(roots, candidate) {
17102
17151
  return !relative.startsWith("..") && !path__namespace.isAbsolute(relative);
17103
17152
  });
17104
17153
  }
17154
+ const LAUNCH_HOLD_NOTICE_DEADLINE_MS = 2e3;
17155
+ const LAUNCH_HOLD_FORCE_QUIT_DEADLINE_MS = 1e4;
17156
+ function runningBundleIdentifier() {
17157
+ const bundlePath = appBundleFromExecutable(process.execPath);
17158
+ if (!bundlePath) return null;
17159
+ const value = readCommandOutput("/usr/bin/defaults", [
17160
+ "read",
17161
+ path$1.join(bundlePath, "Contents", "Info.plist"),
17162
+ "CFBundleIdentifier"
17163
+ ]);
17164
+ return value && BUNDLE_ID_REGEX.test(value) ? value : null;
17165
+ }
17166
+ function shipItJobForRunningBundle() {
17167
+ const bundleId = runningBundleIdentifier();
17168
+ return bundleId ? shipItJobLabel(bundleId) : null;
17169
+ }
17170
+ function probeShipItInstallJobState() {
17171
+ const jobProbe = watchdogSignals(process.platform).jobProbe;
17172
+ if (!jobProbe) return "unread";
17173
+ return installJobState(shipItJobForRunningBundle(), (label) => {
17174
+ const result = node_child_process.spawnSync(jobProbe, ["list", label], {
17175
+ encoding: "utf8",
17176
+ timeout: 5e3
17177
+ });
17178
+ return result.error || result.status == null ? null : { status: result.status, output: result.stdout ?? "" };
17179
+ });
17180
+ }
17181
+ function startRelaunchWatchdog(input) {
17182
+ if (process.platform !== "darwin" || !electron.app.isPackaged) return null;
17183
+ const bundlePath = appBundleFromExecutable(process.execPath);
17184
+ if (!bundlePath) return null;
17185
+ const plan = buildWatchdogPlan({
17186
+ appBundlePath: bundlePath,
17187
+ executableName: path$1.basename(process.execPath),
17188
+ // The app's own pid, captured here - before the quit - because the
17189
+ // watchdog cannot ask a name about its own ancestor (review R1).
17190
+ appPid: process.pid,
17191
+ shipItJob: shipItJobForRunningBundle(),
17192
+ // What "the install is over" is measured against on disk (review R11):
17193
+ // the updater's advertised version, and nothing that is already in place
17194
+ // (review R15).
17195
+ targetVersion: watchdogSwapTarget({
17196
+ target: input.targetVersion,
17197
+ running: input.runningVersion
17198
+ }),
17199
+ // Stated rather than read off `process.platform` at the plan: this
17200
+ // watchdog exists for Squirrel.Mac's ShipIt, the guard above already
17201
+ // refuses it anywhere else, and the script's two probes (launchd's job
17202
+ // lookup, `plutil`) are generated for the platform the script runs on
17203
+ // rather than for whichever host planned it (see `watchdogSignals`).
17204
+ platform: "darwin"
17205
+ });
17206
+ try {
17207
+ const child = node_child_process.spawn("sh", ["-c", plan.script], {
17208
+ detached: true,
17209
+ stdio: "ignore",
17210
+ env: { ...process.env, ...plan.env }
17211
+ });
17212
+ child.unref();
17213
+ input.log(
17214
+ `Started the update relaunch watchdog (pid ${child.pid ?? "unknown"}): it starts the app again as soon as the install's job goes or version ${plan.env.LO_UPDATE_WATCHDOG_TARGET_VERSION || "unknown"} is in place, and at the ${plan.timeoutSeconds}s bound if neither happens - or at the ${plan.hardTimeoutSeconds}s hard bound when the install's job is still loaded at the first, which is the case where starting the app would cancel the install.`
17215
+ );
17216
+ return child.pid ?? null;
17217
+ } catch (error) {
17218
+ input.log(`Could not start the update relaunch watchdog: ${String(error)}`);
17219
+ return null;
17220
+ }
17221
+ }
17222
+ function ensureRelaunchWatchdog(input) {
17223
+ const pid = input.marker.watchdogPid;
17224
+ const commandLine = pid == null ? null : readCommandOutput("/bin/ps", ["-o", "command=", "-p", String(pid)]);
17225
+ if (watchdogIsOurs({
17226
+ alive: commandLine != null,
17227
+ commandLine,
17228
+ installSucceeded: true
17229
+ })) {
17230
+ input.log(
17231
+ `Relaunch watchdog ${pid} is still running; it will start the app when the install settles.`
17232
+ );
17233
+ return true;
17234
+ }
17235
+ const launched = input.startWatchdog(input.marker.targetVersion);
17236
+ input.log(
17237
+ launched != null ? `Started relaunch watchdog ${launched} for the install already in flight; it will start the app when the install's job goes.` : "No relaunch watchdog is running for the install in flight and none could be started; the app will need starting by hand after it quits."
17238
+ );
17239
+ return launched != null;
17240
+ }
17241
+ const LAUNCH_HOLD_SCRIPT_DEADLINE_MS = 2e3;
17242
+ const LAUNCH_HOLD_LOG_FLUSH_MS = 300;
17243
+ const LAUNCH_HOLD_NOTICE_BUDGET_MS = LAUNCH_HOLD_NOTICE_DEADLINE_MS + LAUNCH_HOLD_SCRIPT_DEADLINE_MS + LAUNCH_HOLD_LOG_FLUSH_MS + /*
17244
+ * Headroom, so the quit and the flush it exists to allow cannot land in the same
17245
+ * millisecond (review R10): without it this budget IS its own worst case exactly,
17246
+ * and a host where `osascript` burns its whole deadline would make the record's
17247
+ * landing a coin flip rather than a guarantee.
17248
+ */
17249
+ 250;
17250
+ function notificationsSilenced() {
17251
+ const value = launchEnv[NOTIFICATIONS_ENV];
17252
+ return typeof value === "string" && value.length > 0;
17253
+ }
17254
+ function bannerReportedShown(notice, deadlineMs) {
17255
+ if (!electron.Notification.isSupported()) return Promise.resolve(false);
17256
+ return new Promise((resolve) => {
17257
+ const deadline2 = setTimeout(() => resolve(false), deadlineMs);
17258
+ deadline2.unref();
17259
+ try {
17260
+ const notification = new electron.Notification({
17261
+ title: notice.title,
17262
+ body: notice.body,
17263
+ silent: false
17264
+ });
17265
+ notification.on("show", () => {
17266
+ clearTimeout(deadline2);
17267
+ resolve(true);
17268
+ });
17269
+ notification.show();
17270
+ } catch {
17271
+ clearTimeout(deadline2);
17272
+ resolve(false);
17273
+ }
17274
+ });
17275
+ }
17276
+ function raiseThroughOsascript(notice) {
17277
+ if (process.platform !== "darwin") return null;
17278
+ const result = node_child_process.spawnSync(
17279
+ "/usr/bin/osascript",
17280
+ [
17281
+ "-e",
17282
+ "on run argv",
17283
+ "-e",
17284
+ "display notification (item 1 of argv) with title (item 2 of argv)",
17285
+ "-e",
17286
+ "end run",
17287
+ notice.body,
17288
+ notice.title
17289
+ ],
17290
+ { stdio: "ignore", timeout: LAUNCH_HOLD_SCRIPT_DEADLINE_MS }
17291
+ );
17292
+ return result.error || result.status == null ? null : result.status;
17293
+ }
17294
+ async function showInstallHoldNotice(notice, bannerDeadlineMs = LAUNCH_HOLD_NOTICE_DEADLINE_MS) {
17295
+ if (notificationsSilenced()) {
17296
+ return "suppressed: this launch switched notifications off, so no banner was raised";
17297
+ }
17298
+ const status2 = raiseThroughOsascript(notice);
17299
+ if (status2 === 0) {
17300
+ return "handed to the install's own notification channel (osascript, exit 0); nothing here observes whether the system displayed it";
17301
+ }
17302
+ if (await bannerReportedShown(notice, bannerDeadlineMs)) {
17303
+ return "shown by the app's own banner, which is the one leg that reports delivery (the install's channel being unavailable)";
17304
+ }
17305
+ if (status2 == null) {
17306
+ return "not raised: the install's channel is not available on this host, and the app's banner did not report itself shown";
17307
+ }
17308
+ return `not raised: the install's channel exited ${status2}, and the app's banner did not report itself shown`;
17309
+ }
17310
+ function holdLaunchForLiveInstall(options) {
17311
+ if (!electron.app.isPackaged) return false;
17312
+ const marker = readPendingInstallMarker(electron.app.getPath("userData"));
17313
+ const jobState = (options.jobState ?? probeShipItInstallJobState)();
17314
+ const reading = evaluateLaunchDuringInstall({
17315
+ marker,
17316
+ jobState,
17317
+ runningVersion: options.runningVersion ?? electron.app.getVersion(),
17318
+ now: options.now
17319
+ });
17320
+ if (reading.kind === "open") return false;
17321
+ options.log(
17322
+ `Holding this launch for the install of version ${reading.marker.targetVersion} that is still running (install job ${jobState}): a window here would make this process the running instance Squirrel's final check aborts the install on, so the app tells the user and quits.`
17323
+ );
17324
+ const relaunchEnsured = ensureRelaunchWatchdog({
17325
+ marker: reading.marker,
17326
+ startWatchdog: options.startWatchdog ?? defaultStartRelaunchWatchdog,
17327
+ log: options.log
17328
+ });
17329
+ const quit = options.quit ?? (() => electron.app.quit());
17330
+ const forceQuit = options.forceQuit ?? (() => electron.app.exit(0));
17331
+ const forceDeadline = setTimeout(
17332
+ forceQuit,
17333
+ LAUNCH_HOLD_FORCE_QUIT_DEADLINE_MS
17334
+ );
17335
+ forceDeadline.unref();
17336
+ const noticeDeadline = setTimeout(quit, LAUNCH_HOLD_NOTICE_BUDGET_MS);
17337
+ noticeDeadline.unref();
17338
+ const notice = installLaunchHoldNotice(reading.marker, { relaunchEnsured });
17339
+ const showNotice = options.showNotice ?? showInstallHoldNotice;
17340
+ options.log(
17341
+ `Telling the user the install of version ${reading.marker.targetVersion} is still running, and closing this launch so the install's final check finds no running instance of the app.`
17342
+ );
17343
+ void showNotice(notice).then((record) => {
17344
+ options.log(
17345
+ `The notice for the install of version ${reading.marker.targetVersion}: ${record}.`
17346
+ );
17347
+ }).catch(() => {
17348
+ }).finally(() => {
17349
+ const flush = setTimeout(() => {
17350
+ clearTimeout(noticeDeadline);
17351
+ quit();
17352
+ }, LAUNCH_HOLD_LOG_FLUSH_MS);
17353
+ flush.unref();
17354
+ });
17355
+ return true;
17356
+ }
17357
+ function defaultStartRelaunchWatchdog(targetVersion) {
17358
+ return startRelaunchWatchdog({
17359
+ targetVersion,
17360
+ runningVersion: electron.app.getVersion(),
17361
+ log: (message) => logger.info(message, LogFileType.UPDATE_SERVICE)
17362
+ });
17363
+ }
17105
17364
  class UpdateService {
17106
17365
  mainWindow = null;
17107
17366
  isDevMode;
@@ -17440,15 +17699,28 @@ class UpdateService {
17440
17699
  return;
17441
17700
  }
17442
17701
  const marker = readPendingInstallMarker(this.markerDir());
17702
+ const jobState = this.shipItInstallJobState();
17703
+ if (marker) {
17704
+ logger.info(
17705
+ `Pending install marker for version ${marker.targetVersion} on disk; its install job is ${jobState}.`,
17706
+ LogFileType.UPDATE_SERVICE
17707
+ );
17708
+ }
17443
17709
  const outcome = evaluatePendingInstall({
17444
17710
  marker,
17445
17711
  runningVersion: electron.app.getVersion(),
17446
- // Probed once per evaluation, and only on macOS: a loaded job plus a
17712
+ // Probed once per evaluation, and only on macOS: a RUNNING job plus a
17447
17713
  // current marker is what makes "still on the old version" an install in
17448
- // progress rather than an install that failed.
17714
+ // progress rather than an install that failed. A job that is registered
17715
+ // but not running is the state a finished install leaves behind, and
17716
+ // reading it as live is what held a launch - and so swallowed this very
17717
+ // report - for ~29 minutes after every successful update (review U1, U2);
17718
+ // the one exception is the hand-off, the window in which launchd has the
17719
+ // job but ShipIt has no pid yet, which `PENDING_INSTALL_HANDOFF_SECONDS`
17720
+ // bounds (review R6, R11).
17449
17721
  installInFlight: isInstallInFlight({
17450
17722
  marker,
17451
- jobLoaded: this.shipItInstallJobLoaded()
17723
+ jobState
17452
17724
  })
17453
17725
  });
17454
17726
  switch (outcome.kind) {
@@ -17473,7 +17745,7 @@ class UpdateService {
17473
17745
  case "in-flight": {
17474
17746
  this.installWasInFlight = true;
17475
17747
  logger.info(
17476
- `Update marker: the install of version ${outcome.marker.targetVersion} is still running (its install job is loaded). Leaving the marker, the install job and the relaunch watchdog in place.`,
17748
+ `Update marker: the install of version ${outcome.marker.targetVersion} is still running (install job ${jobState}). Leaving the marker, the install job and the relaunch watchdog in place.`,
17477
17749
  LogFileType.UPDATE_SERVICE
17478
17750
  );
17479
17751
  this.pendingInstallInFlight = installInFlightPayload(
@@ -17525,25 +17797,11 @@ class UpdateService {
17525
17797
  /**
17526
17798
  * This app's bundle identifier, as macOS records it.
17527
17799
  *
17528
- * Read from the running bundle rather than from `package.json`: the running
17529
- * app is the only thing whose ShipIt job and cache directory this process may
17530
- * touch, and a build whose `appId` drifted would otherwise have us cleaning up
17531
- * some other app's leftovers.
17800
+ * The service's name for `runningBundleIdentifier`, which the launch hold needs
17801
+ * before a service exists; the rule itself lives there.
17532
17802
  */
17533
17803
  bundleIdentifier() {
17534
- const bundlePath = appBundleFromExecutable(process.execPath);
17535
- if (!bundlePath) return null;
17536
- const value = readCommandOutput("/usr/bin/defaults", [
17537
- "read",
17538
- path$1.join(bundlePath, "Contents", "Info.plist"),
17539
- "CFBundleIdentifier"
17540
- ]);
17541
- return value && BUNDLE_ID_REGEX.test(value) ? value : null;
17542
- }
17543
- /** The launchd job Squirrel's install runs under, by label. */
17544
- shipItJob() {
17545
- const bundleId = this.bundleIdentifier();
17546
- return bundleId ? shipItJobLabel(bundleId) : null;
17804
+ return runningBundleIdentifier();
17547
17805
  }
17548
17806
  /**
17549
17807
  * Squirrel's own stderr log for this app, when it exists.
@@ -17689,9 +17947,9 @@ class UpdateService {
17689
17947
  );
17690
17948
  }
17691
17949
  /**
17692
- * A substituted answer to "is this app's install job loaded", or null.
17950
+ * A substituted answer to "what is this app's install job doing", or null.
17693
17951
  *
17694
- * The production answer is the launchd probe in `shipItInstallJobLoaded`, and
17952
+ * The production answer is the launchd probe in `shipItInstallJobState`, and
17695
17953
  * it asks about a label read from the RUNNING BUNDLE (`shipItJob`). A test or a
17696
17954
  * harness process that is not that bundle has no label to ask about, so the
17697
17955
  * whole in-flight path - recovery's reading, the re-check, and the quit below -
@@ -17701,28 +17959,21 @@ class UpdateService {
17701
17959
  * rule production uses rather than a second copy of it. Production never sets
17702
17960
  * it.
17703
17961
  */
17704
- installJobLoadedProbe = null;
17962
+ installJobStateProbe = null;
17705
17963
  /**
17706
- * Whether this app's ShipIt install job is loaded, right now.
17964
+ * What this app's ShipIt install job is doing, right now.
17707
17965
  *
17708
17966
  * This is the machine's own answer to "is an install in flight", and the only
17709
- * answer that can tell a live install apart from the job a failed one left
17710
- * behind. It is asked of launchd by label rather than inferred from a process
17711
- * name, so nothing else on the machine can be mistaken for it. Off macOS there
17712
- * is no launchd to ask, so the answer is a plain no and recovery stays
17967
+ * answer that can tell a live install from the job a finished one left behind -
17968
+ * which is why it reports `running` separately from `registered` rather than a
17969
+ * boolean (review U1). It is asked of launchd by label rather than inferred from
17970
+ * a process name, so nothing else on the machine can be mistaken for it. Off
17971
+ * macOS there is no launchd to ask, so the answer is `unread` and recovery stays
17713
17972
  * version-only there, exactly as it is today.
17714
17973
  */
17715
- shipItInstallJobLoaded() {
17716
- if (this.installJobLoadedProbe) return this.installJobLoadedProbe();
17717
- const jobProbe = watchdogSignals(process.platform).jobProbe;
17718
- if (!jobProbe) return false;
17719
- return launchdJobLoaded(this.shipItJob(), (label) => {
17720
- const result = node_child_process.spawnSync(jobProbe, ["list", label], {
17721
- encoding: "utf8",
17722
- timeout: 5e3
17723
- });
17724
- return result.error || result.status == null ? null : result.status;
17725
- });
17974
+ shipItInstallJobState() {
17975
+ if (this.installJobStateProbe) return this.installJobStateProbe();
17976
+ return probeShipItInstallJobState();
17726
17977
  }
17727
17978
  /**
17728
17979
  * Deliver the still-installing notice once the renderer can hear it.
@@ -17784,34 +18035,18 @@ class UpdateService {
17784
18035
  * Make sure something will start the app again after a quit that is only
17785
18036
  * getting out of an install's way.
17786
18037
  *
17787
- * The watchdog from the original install is usually still there - it holds
17788
- * while the job is loaded now, rather than starting the app into the swap -
17789
- * but it may have run out its own bounds, and the user may be quitting hours
17790
- * later. Quitting without one would leave them with no app at all, which is
17791
- * the outcome this whole change exists to remove. Nothing is started when ours
17792
- * is alive, because two watchdogs relaunching at the same moment is a race
17793
- * with nothing to gain. The marker is left exactly as it is: its start time is
17794
- * what tells recovery this is still the same install.
18038
+ * The rule is `ensureRelaunchWatchdog`'s, shared with the launch hold; what is
18039
+ * the service's own here is the starter, which a harness substitutes.
17795
18040
  */
17796
18041
  ensureWatchdogAfterInFlightQuit(marker) {
17797
- const pid = marker.watchdogPid;
17798
- const commandLine = pid == null ? null : readCommandOutput("/bin/ps", ["-o", "command=", "-p", String(pid)]);
17799
- if (watchdogIsOurs({
17800
- alive: commandLine != null,
17801
- commandLine,
17802
- installSucceeded: true
17803
- })) {
17804
- logger.info(
17805
- `Relaunch watchdog ${pid} is still running; it will start the app when the install settles.`,
17806
- LogFileType.UPDATE_SERVICE
17807
- );
17808
- return;
17809
- }
17810
- const launched = this.launchWatchdog(marker.targetVersion);
17811
- logger.info(
17812
- launched ? `Started relaunch watchdog ${launched} for the install already in flight; it will start the app when the install's job goes.` : "No relaunch watchdog is running for the install in flight and none could be started; the app will need starting by hand after it quits.",
17813
- LogFileType.UPDATE_SERVICE
17814
- );
18042
+ ensureRelaunchWatchdog({
18043
+ marker,
18044
+ // The service's own method, not the module function, because a harness
18045
+ // substitutes this one: substituting the seam is how a test counts the
18046
+ // watchdogs a quit leaves running without spawning any.
18047
+ startWatchdog: (targetVersion) => this.launchWatchdog(targetVersion),
18048
+ log: (message) => logger.info(message, LogFileType.UPDATE_SERVICE)
18049
+ });
17815
18050
  }
17816
18051
  /**
17817
18052
  * The pending-install marker, if the machine says an install is live now.
@@ -17826,7 +18061,7 @@ class UpdateService {
17826
18061
  if (!marker) return null;
17827
18062
  return isInstallInFlight({
17828
18063
  marker,
17829
- jobLoaded: this.shipItInstallJobLoaded()
18064
+ jobState: this.shipItInstallJobState()
17830
18065
  }) ? marker : null;
17831
18066
  }
17832
18067
  /**
@@ -18301,53 +18536,16 @@ ${heal.removed.join("\n")}`,
18301
18536
  /**
18302
18537
  * Start the detached relaunch watchdog.
18303
18538
  *
18304
- * Spawned detached so it survives this process exiting, with stdio ignored so
18305
- * it holds no pipe open and cannot keep the app alive.
18539
+ * The service's name for `startRelaunchWatchdog`, which the launch hold also
18540
+ * uses; the plan, the bounds and the log line live there. Kept as a method
18541
+ * because a harness substitutes it to count watchdogs without spawning one.
18306
18542
  */
18307
18543
  launchWatchdog(targetVersion) {
18308
- if (process.platform !== "darwin" || !electron.app.isPackaged) return null;
18309
- const bundlePath = appBundleFromExecutable(process.execPath);
18310
- if (!bundlePath) return null;
18311
- const plan = buildWatchdogPlan({
18312
- appBundlePath: bundlePath,
18313
- executableName: path$1.basename(process.execPath),
18314
- // The app's own pid, captured here - before the quit - because the
18315
- // watchdog cannot ask a name about its own ancestor (review R1).
18316
- appPid: process.pid,
18317
- shipItJob: this.shipItJob(),
18318
- // What "the install is over" is measured against on disk (review R11):
18319
- // the updater's advertised version, and nothing that is already in place
18320
- // (review R15).
18321
- targetVersion: watchdogSwapTarget({
18322
- target: targetVersion,
18323
- running: electron.app.getVersion()
18324
- }),
18325
- // Stated rather than read off `process.platform` at the plan: this
18326
- // watchdog exists for Squirrel.Mac's ShipIt, the guard above already
18327
- // refuses it anywhere else, and the script's two probes (launchd's job
18328
- // lookup, `plutil`) are generated for the platform the script runs on
18329
- // rather than for whichever host planned it (see `watchdogSignals`).
18330
- platform: "darwin"
18544
+ return startRelaunchWatchdog({
18545
+ targetVersion,
18546
+ runningVersion: electron.app.getVersion(),
18547
+ log: (message) => logger.info(message, LogFileType.UPDATE_SERVICE)
18331
18548
  });
18332
- try {
18333
- const child = node_child_process.spawn("sh", ["-c", plan.script], {
18334
- detached: true,
18335
- stdio: "ignore",
18336
- env: { ...process.env, ...plan.env }
18337
- });
18338
- child.unref();
18339
- logger.info(
18340
- `Started the update relaunch watchdog (pid ${child.pid ?? "unknown"}): it starts the app again as soon as the install's job goes or version ${plan.env.LO_UPDATE_WATCHDOG_TARGET_VERSION || "unknown"} is in place, and at the ${plan.timeoutSeconds}s bound if neither happens - or at the ${plan.hardTimeoutSeconds}s hard bound when the install's job is still loaded at the first, which is the case where starting the app would cancel the install.`,
18341
- LogFileType.UPDATE_SERVICE
18342
- );
18343
- return child.pid ?? null;
18344
- } catch (error) {
18345
- logger.error(
18346
- `Could not start the update relaunch watchdog: ${String(error)}`,
18347
- LogFileType.UPDATE_SERVICE
18348
- );
18349
- return null;
18350
- }
18351
18549
  }
18352
18550
  /**
18353
18551
  * Clean up resources when the service is no longer needed
@@ -22169,6 +22367,11 @@ electron.app.whenReady().then(async () => {
22169
22367
  electron.app.exit(0);
22170
22368
  return;
22171
22369
  }
22370
+ if (holdLaunchForLiveInstall({
22371
+ log: (message) => logger.info(message, LogFileType.UPDATE_SERVICE)
22372
+ })) {
22373
+ return;
22374
+ }
22172
22375
  configureAboutPanel();
22173
22376
  createApplicationMenu();
22174
22377
  const launcher = resolveLauncherWatchPlan({
@@ -1 +1 @@
1
- import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-BDr5gwdw.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-788Hb5C_.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
1
+ import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-CpAeJ_T5.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-CcCGG8rv.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
@@ -1 +1 @@
1
- import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-788Hb5C_.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=t&Re;if(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
1
+ import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-CcCGG8rv.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=t&Re;if(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};