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.
- package/out/main/index.js +319 -116
- package/out/renderer/assets/{_basePickBy-BydJ9gPn.js → _basePickBy-BuxOTHVQ.js} +1 -1
- package/out/renderer/assets/{_baseUniq-BDr5gwdw.js → _baseUniq-CpAeJ_T5.js} +1 -1
- package/out/renderer/assets/{agent-details-page-DzuXjh7y.js → agent-details-page-MP0PffyF.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-C4DQzZUK.js → agent-hub-page-D_VZWryD.js} +2 -2
- package/out/renderer/assets/{agents-page-BNG7sv4M.js → agents-page-DD8YflqT.js} +2 -2
- package/out/renderer/assets/{arc-Ts5EMYgx.js → arc-DYfSd8Jq.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-BAzlZ3P9.js → architectureDiagram-IEHRJDOE-CB4RrqKK.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-DwF0jv-B.js → blockDiagram-JOT3LUYC-ByZ-EtvL.js} +1 -1
- package/out/renderer/assets/browser-page-Bgm7Jusv.js +1 -0
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-QrHSDv8I.js → c4Diagram-VJAJSXHY-C-px-58h.js} +1 -1
- package/out/renderer/assets/channel-CNh50WRj.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-BjNHi0kM.js → chunk-4BMEZGHF-JfxshMc2.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-DxLxkNtl.js → chunk-A2AXSNBT-BhURhbRt.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-C9g2i51Q.js → chunk-AEK57VVT-CU2c2HZ3.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-DoSuJfra.js → chunk-D6G4REZN-2emtjcJO.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-Bi2qxsMe.js → chunk-RZ5BOZE2-8oEYebhy.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-sURP5cay.js → chunk-XZIHB7SX-8mhmnfki.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-7rlY7XBk.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-7rlY7XBk.js +1 -0
- package/out/renderer/assets/clone-C0QmamW2.js +1 -0
- package/out/renderer/assets/{compact-pagination-ohz3hihb.js → compact-pagination-B5GLn5G8.js} +1 -1
- package/out/renderer/assets/{dagre-OKDRZEBW-ByoyCyPA.js → dagre-OKDRZEBW-DgVH2QFH.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-mZiujngq.js → diagram-SSKATNLV-DgJWH7Pg.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-D0zTyi6M.js → diagram-VNBRO52H-CK2mOdII.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-B5TcZz4R.js → erDiagram-Q7BY3M3F-DsXSbjhz.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-DBTPif6c.js → flowDiagram-4HSFHLVR-t_VxP8Y2.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-DYbmXVph.js → ganttDiagram-APWFNJXF-CRA0nD3Z.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-DPj0BkeE.js → gitGraphDiagram-7IBYFJ6S-EckWqrcy.js} +1 -1
- package/out/renderer/assets/{graph-DT3vvKWN.js → graph-B_e-5OmG.js} +1 -1
- package/out/renderer/assets/{icon-02RQhVJ6.js → icon-BLBWBLpQ.js} +1 -1
- package/out/renderer/assets/icon-DaEdqqLD.css +1 -0
- package/out/renderer/assets/{index-BkOD7HrG.js → index-BzJ5D16w.js} +1 -1
- package/out/renderer/assets/{index-CcZE1DSW.js → index-CzMCmFaC.js} +1 -1
- package/out/renderer/assets/{index-CVKAjzjY.js → index-W2LjSwcL.js} +396 -416
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-CsR8b0O1.js → infoDiagram-PH2N3AL5-BHXcodOL.js} +1 -1
- package/out/renderer/assets/{installer-DbeF2a73.js → installer-CJaywoSL.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-CDUogXFs.js → journeyDiagram-U35MCT3I-BbuZvzF4.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-CXBuFpQO.js → kanban-definition-NDS4AKOZ-m6V84DzN.js} +1 -1
- package/out/renderer/assets/{layout-DFc6uQ1h.js → layout-CFV4pKtO.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-DJqe2gmd.js → legacy-agents-page-BYRquvwf.js} +5 -5
- package/out/renderer/assets/{mermaid.core-788Hb5C_.js → mermaid.core-CcCGG8rv.js} +5 -5
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-DV20YLHP.js → mindmap-definition-ALO5MXBD-CnN1UhFO.js} +1 -1
- package/out/renderer/assets/{page-header-hdhRg_jg.js → page-header-B81uizKq.js} +1 -1
- package/out/renderer/assets/parseISO-SuyRamt_.js +6 -0
- package/out/renderer/assets/{pieDiagram-IB7DONF6--ODHtlRV.js → pieDiagram-IB7DONF6-DWvbkeJO.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-BeBjHOIC.js → quadrantDiagram-7GDLP6J5-BqYtejyj.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-DhIaA0my.js → radar-MK3ICKWK-CflNxnbe.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-QryFNXsQ.js → radient-auth-buttons-bfpBoHvB.js} +2 -2
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-DSjsP086.js → requirementDiagram-KVF5MWMF-CwboheY-.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-BWYpjOje.js → sankeyDiagram-QLVOVGJD-DhwbV2-N.js} +1 -1
- package/out/renderer/assets/{schedules-page-BTcUAg3f.js → schedules-page-CqPwo7_C.js} +6 -6
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-BkW8SZ0l.js → sequenceDiagram-X6HHIX6F-aZwx5ceT.js} +1 -1
- package/out/renderer/assets/{settings-page-o3rhI1O_.js → settings-page-BPMDTHwZ.js} +71 -66
- package/out/renderer/assets/{stateDiagram-DGXRK772-CQX1zc72.js → stateDiagram-DGXRK772-Cp2LT0zg.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CUBxQeqf.js +1 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-DEJuFYsn.js → timeline-definition-BDJGKUSR-62sjziy0.js} +1 -1
- package/out/renderer/assets/{use-agent-like-mutation-Cge3KSLs.js → use-agent-like-mutation-Bpg52Kv_.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-QzzQROdv.js → xychartDiagram-VJFVF3MP-Cu2lsyD3.js} +1 -1
- package/out/renderer/index.html +11 -4
- package/out/renderer/installer.html +3 -3
- package/package.json +3 -2
- package/out/renderer/assets/browser-page-C2cytRLR.js +0 -1
- package/out/renderer/assets/channel-BAGpTB5A.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-COd_us28.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-COd_us28.js +0 -1
- package/out/renderer/assets/clone-awNOoFm7.js +0 -1
- package/out/renderer/assets/icon-Y8w93nKk.css +0 -1
- package/out/renderer/assets/parseISO-A4KRXmC2.js +0 -6
- 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
|
|
2857
|
+
if (!input.marker) return false;
|
|
2855
2858
|
const age = pendingInstallAgeSeconds(input.marker, input.now);
|
|
2856
2859
|
if (age === null) return false;
|
|
2857
|
-
|
|
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
|
|
2860
|
-
|
|
2861
|
-
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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
|
-
*
|
|
17529
|
-
*
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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
|
-
|
|
17962
|
+
installJobStateProbe = null;
|
|
17705
17963
|
/**
|
|
17706
|
-
*
|
|
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
|
|
17710
|
-
*
|
|
17711
|
-
*
|
|
17712
|
-
*
|
|
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
|
-
|
|
17716
|
-
if (this.
|
|
17717
|
-
|
|
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
|
|
17788
|
-
*
|
|
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
|
-
|
|
17798
|
-
|
|
17799
|
-
|
|
17800
|
-
|
|
17801
|
-
|
|
17802
|
-
|
|
17803
|
-
|
|
17804
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
18305
|
-
*
|
|
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
|
-
|
|
18309
|
-
|
|
18310
|
-
|
|
18311
|
-
|
|
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-
|
|
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ℜ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ℜ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};
|