docker-client-mx 1.45.0 → 1.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docker-desktop-mx/browser/{chunk-COdMLD3H.js → chunk--8mGUJAn.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-5_sGKQni.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-Dy_g3RHY.js → chunk-B-o5hXOb.js} +1 -1
- package/dist/docker-desktop-mx/browser/{chunk-CHa6bNlc.js → chunk-B-wG1P-32.js} +4 -4
- package/dist/docker-desktop-mx/browser/chunk-B2EShQtx.js +6 -0
- package/dist/docker-desktop-mx/browser/{chunk-B13W1gEu.js → chunk-BYVhZ88_.js} +1 -1
- package/dist/docker-desktop-mx/browser/{chunk-Bd5-MqqR.js → chunk-B_y5IYob2.js} +2 -2
- package/dist/docker-desktop-mx/browser/chunk-BdM_u7-N.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-BkMeriAO2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-BzctO2pl.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-BZwYBA7Z.js → chunk-C0zZrY7Q.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-CAFP1xPu.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CI4m0buS.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CQWK0K-u.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Ci_V0cow.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CsXiAvQZ.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Cva1WgC9.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CyIYmLAx2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-D9wKjS-4.js +4 -0
- package/dist/docker-desktop-mx/browser/chunk-DDXVa5ug.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DGowKW_R2.js +3 -0
- package/dist/docker-desktop-mx/browser/chunk-DJ_YTqcg.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DLduIDn8.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DM-ZJf6i2.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-eVHlLrxe.js → chunk-DRSLMQv0.js} +2 -2
- package/dist/docker-desktop-mx/browser/chunk-DUEEE1of.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DVNubhu5.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DaLHmamd.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DgQfvcw6.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DhhlIffD.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DnoDi7LZ.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DpQe-4PA.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Dx6pB9SS.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-B3n-2UOi.js → chunk-F6eWZMl2.js} +1 -1
- package/dist/docker-desktop-mx/browser/{chunk-Bcx5WMyJ.js → chunk-KPCWgafs.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-MHnhOupE2.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-_wm6hEEA.js → chunk-N02t_L0r.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-RW2CuHOJ.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-TwB2JZ5F2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-YcHxGDGY.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-BUtOgCv_.js → chunk-_SDm3Kr6.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-aZvSgdSQ.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-t2gYzsd3.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-x4B-Z7Ml.js +1 -0
- package/dist/docker-desktop-mx/browser/index.html +2 -2
- package/dist/docker-desktop-mx/browser/main-H3S3O6WP.js +1 -0
- package/dist/docker-desktop-mx/browser/styles-GSAQVAJP.css +1 -0
- package/dist-electron/attention.js +14 -1
- package/dist-electron/attention.js.map +1 -1
- package/dist-electron/channels.js +18 -0
- package/dist-electron/channels.js.map +1 -1
- package/dist-electron/container-adjust.js +138 -10
- package/dist-electron/container-adjust.js.map +1 -1
- package/dist-electron/file-ops.js +315 -0
- package/dist-electron/file-ops.js.map +1 -0
- package/dist-electron/files.js +19 -10
- package/dist-electron/files.js.map +1 -1
- package/dist-electron/ipc.js +113 -5
- package/dist-electron/ipc.js.map +1 -1
- package/dist-electron/main.js +93 -3
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/memory-watch.js +87 -0
- package/dist-electron/memory-watch.js.map +1 -0
- package/dist-electron/preload.js +40 -4
- package/dist-electron/preload.js.map +1 -1
- package/dist-electron/settings.js +32 -1
- package/dist-electron/settings.js.map +1 -1
- package/dist-electron/stats.js +25 -0
- package/dist-electron/stats.js.map +1 -1
- package/dist-electron/volume-files.js +1 -0
- package/dist-electron/volume-files.js.map +1 -1
- package/dist-electron/volume-restore.js +40 -0
- package/dist-electron/volume-restore.js.map +1 -0
- package/dist-electron/volume-schedules.js +343 -0
- package/dist-electron/volume-schedules.js.map +1 -0
- package/package.json +1 -1
- package/dist/docker-desktop-mx/browser/chunk-Af1e1d8G.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-B2NHI2Ew.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BIIdmzaV2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BJACElSf2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BPNQPsl2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BxKOYZan.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BxU6JdzU.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-C3u9Hm0s.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CGft6wQH2.js +0 -6
- package/dist/docker-desktop-mx/browser/chunk-COBWzwhz.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CXpIB_qc.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-ClGJowQ7.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-Clfbc1-d.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CoprhnOm.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CsQ_euXP.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-D3bHzook.js +0 -3
- package/dist/docker-desktop-mx/browser/chunk-DEXem6rk.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DPn8Rpg4.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DVXm8E_S.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DX-Zo-hw.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DZ-f89Uu.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DZXhuKXm.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DctinxSO.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DeXGJ-vD2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-EFAsN7J4.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-FqKVK_Os2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-IMRsZUv82.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-U7tL4XEw2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-YQkNtrRq.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-jpKpwesj.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-m112xmv9.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-u0OAgv4f.js +0 -4
- package/dist/docker-desktop-mx/browser/main-INZSNGJM.js +0 -1
- package/dist/docker-desktop-mx/browser/styles-BGYQU5CU.css +0 -1
package/dist-electron/stats.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.StatsWatcher = void 0;
|
|
4
4
|
exports.toCpuPercent = toCpuPercent;
|
|
5
5
|
exports.toMemoryBytes = toMemoryBytes;
|
|
6
|
+
exports.sampleLimitedMemory = sampleLimitedMemory;
|
|
6
7
|
exports.toNetworkCounters = toNetworkCounters;
|
|
7
8
|
exports.toNetworkRate = toNetworkRate;
|
|
8
9
|
exports.toContainerStats = toContainerStats;
|
|
@@ -46,6 +47,30 @@ function toMemoryBytes(raw) {
|
|
|
46
47
|
const cache = memory?.stats?.['inactive_file'] ?? memory?.stats?.['cache'] ?? 0;
|
|
47
48
|
return { used: Math.max(0, usage - cache), limit: memory?.limit ?? 0 };
|
|
48
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Eén geheugenmeting van elke draaiende container met een geheugengrens (fase 89). Zonder grens geeft
|
|
52
|
+
* Docker het geheugen van de machine als `limit`; daaraan is een container zonder grens te herkennen.
|
|
53
|
+
* `one-shot`: niet wachten op een tweede meting, die is alleen voor het processorgebruik nodig.
|
|
54
|
+
*/
|
|
55
|
+
async function sampleLimitedMemory() {
|
|
56
|
+
const { docker } = (0, docker_client_1.getConnection)();
|
|
57
|
+
const [info, running] = await Promise.all([docker.info(), docker.listContainers()]);
|
|
58
|
+
const machine = info.MemTotal ?? 0;
|
|
59
|
+
const samples = await Promise.all(running.map(async (container) => {
|
|
60
|
+
try {
|
|
61
|
+
const raw = (await docker.getContainer(container.Id).stats({ stream: false, 'one-shot': true }));
|
|
62
|
+
const { used, limit } = toMemoryBytes(raw);
|
|
63
|
+
return limit > 0 && (machine === 0 || limit < machine)
|
|
64
|
+
? { id: container.Id, name: (container.Names[0] ?? container.Id).replace(/^\//, ''), usedBytes: used, limitBytes: limit }
|
|
65
|
+
: null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Net gestopt: dan telt hij deze ronde niet mee.
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}));
|
|
72
|
+
return samples.filter((sample) => sample !== null);
|
|
73
|
+
}
|
|
49
74
|
const NO_TRAFFIC = { rxBytesPerSec: 0, txBytesPerSec: 0 };
|
|
50
75
|
/**
|
|
51
76
|
* De tellers uit een meting, opgeteld over alle interfaces, of `null` als er geen zijn.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../electron/stats.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../electron/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MOUNT = void 0;
|
|
4
4
|
exports.mountedPath = mountedPath;
|
|
5
5
|
exports.volumePath = volumePath;
|
|
6
|
+
exports.ensureImage = ensureImage;
|
|
6
7
|
exports.helperFor = helperFor;
|
|
7
8
|
exports.listVolumeDirectory = listVolumeDirectory;
|
|
8
9
|
exports.closeVolumeBrowser = closeVolumeBrowser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volume-files.js","sourceRoot":"","sources":["../electron/volume-files.ts"],"names":[],"mappings":";;;AAwCA,kCAKC;AAGD,gCASC;
|
|
1
|
+
{"version":3,"file":"volume-files.js","sourceRoot":"","sources":["../electron/volume-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.restoreWithUsers = restoreWithUsers;
|
|
4
|
+
const docker_client_1 = require("./docker-client");
|
|
5
|
+
const volume_backup_1 = require("./volume-backup");
|
|
6
|
+
const volume_copy_1 = require("./volume-copy");
|
|
7
|
+
const docker = () => ({
|
|
8
|
+
runningUsers: async (volume) => (await (0, volume_copy_1.listVolumeUsers)(volume)).filter((user) => user.running).map((user) => user.name),
|
|
9
|
+
stop: async (container) => {
|
|
10
|
+
await (0, docker_client_1.getConnection)().docker.getContainer(container).stop();
|
|
11
|
+
},
|
|
12
|
+
start: async (container) => {
|
|
13
|
+
await (0, docker_client_1.getConnection)().docker.getContainer(container).start();
|
|
14
|
+
},
|
|
15
|
+
restore: volume_backup_1.restoreVolume,
|
|
16
|
+
});
|
|
17
|
+
/** Zet `file` terug in `volume`; met `stopUsers` staan de containers die het gebruiken zolang stil. */
|
|
18
|
+
async function restoreWithUsers(volume, file, stopUsers, deps = docker()) {
|
|
19
|
+
if (file === null || !stopUsers) {
|
|
20
|
+
return deps.restore(volume, file);
|
|
21
|
+
}
|
|
22
|
+
const stopped = [];
|
|
23
|
+
let result;
|
|
24
|
+
try {
|
|
25
|
+
for (const user of await deps.runningUsers(volume)) {
|
|
26
|
+
await deps.stop(user);
|
|
27
|
+
stopped.push(user);
|
|
28
|
+
}
|
|
29
|
+
result = await deps.restore(volume, file);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
result = { ok: false, problem: err instanceof Error ? err.message : String(err) };
|
|
33
|
+
}
|
|
34
|
+
const notRestarted = [];
|
|
35
|
+
for (const user of stopped) {
|
|
36
|
+
await deps.start(user).catch(() => notRestarted.push(user));
|
|
37
|
+
}
|
|
38
|
+
return notRestarted.length > 0 && result.ok ? { ...result, notRestarted } : result;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=volume-restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-restore.js","sourceRoot":"","sources":["../electron/volume-restore.ts"],"names":[],"mappings":";;AA+BA,4CAgCC;AA9DD,mDAAgD;AAChD,mDAAgD;AAChD,+CAAgD;AAgBhD,MAAM,MAAM,GAAG,GAAgB,EAAE,CAAC,CAAC;IACjC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAA,6BAAe,EAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IACvH,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,IAAA,6BAAa,GAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IACD,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACzB,MAAM,IAAA,6BAAa,GAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,6BAAa;CACvB,CAAC,CAAC;AAEH,uGAAuG;AAChG,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,IAAmB,EACnB,SAAkB,EAClB,OAAoB,MAAM,EAAE;IAG5B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAqB,CAAC;IAE1B,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.VolumeSchedules = exports.MAX_KEEP = void 0;
|
|
37
|
+
exports.intervalOf = intervalOf;
|
|
38
|
+
exports.isScheduleDue = isScheduleDue;
|
|
39
|
+
exports.backupTime = backupTime;
|
|
40
|
+
exports.backupsToRemove = backupsToRemove;
|
|
41
|
+
exports.parseSchedules = parseSchedules;
|
|
42
|
+
exports.configureVolumeSchedules = configureVolumeSchedules;
|
|
43
|
+
exports.volumeSchedules = volumeSchedules;
|
|
44
|
+
const path = __importStar(require("node:path"));
|
|
45
|
+
const i18n_1 = require("./i18n");
|
|
46
|
+
const volume_backup_1 = require("./volume-backup");
|
|
47
|
+
/**
|
|
48
|
+
* Vanzelf een back-up van een volume (fase 85): per volume elke dag of elke week, naar een map,
|
|
49
|
+
* met een vast aantal dat blijft.
|
|
50
|
+
*
|
|
51
|
+
* De back-up zelf is die van fase 18, zonder dialoog. Het schema rekent vanaf de laatste back-up
|
|
52
|
+
* die lukte: een app die een week dicht was, maakt er één, niet zeven. Wat er weg mag, zijn alleen
|
|
53
|
+
* de bestanden met de naam die de app zelf geeft (`<volume>-<datum>-<tijd>.tar`); wat er verder in
|
|
54
|
+
* de map staat, blijft staan.
|
|
55
|
+
*
|
|
56
|
+
* Gebruikt een draaiende container het volume, dan overslaan (en het elk uur opnieuw proberen), of,
|
|
57
|
+
* als je dat koos, die containers zolang pauzeren. Een database die tijdens de back-up schrijft,
|
|
58
|
+
* levert een `.tar` die hij misschien zelf niet meer leest; gepauzeerd schrijft hij niets.
|
|
59
|
+
*
|
|
60
|
+
* Zonder Electron en zonder Docker: alles komt als functies binnen, zodat het met een klok te testen is.
|
|
61
|
+
*/
|
|
62
|
+
const HOUR_MS = 60 * 60 * 1000;
|
|
63
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
64
|
+
/** Hoeveel back-ups er hooguit blijven; meer is vast een tikfout. */
|
|
65
|
+
exports.MAX_KEEP = 100;
|
|
66
|
+
/** Hoe lang het tussen twee back-ups hoort te zijn. */
|
|
67
|
+
function intervalOf(every) {
|
|
68
|
+
return every === 'day' ? DAY_MS : 7 * DAY_MS;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Of een volume aan de beurt is. Een uur speling, omdat main elk uur kijkt: anders schuift een
|
|
72
|
+
* dagelijkse back-up elke dag een uur op. Na een mislukte of overgeslagen poging pas een uur later
|
|
73
|
+
* opnieuw, zodat een lege schijf niet bij elke tik een poging kost.
|
|
74
|
+
*/
|
|
75
|
+
function isScheduleDue(schedule, now) {
|
|
76
|
+
if (schedule.lastOutcome !== null && schedule.lastOutcome.kind !== 'ok' && now - schedule.lastOutcome.at < HOUR_MS - 5 * 60 * 1000) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return schedule.lastSuccess === null || now - schedule.lastSuccess >= intervalOf(schedule.every) - HOUR_MS;
|
|
80
|
+
}
|
|
81
|
+
function escapeRegExp(text) {
|
|
82
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
83
|
+
}
|
|
84
|
+
/** Wanneer een eigen back-up gemaakt is, uit zijn naam (`<volume>-<jjjjmmdd>-<uumm>.tar`); `null` als hij niet van de app is. */
|
|
85
|
+
function backupTime(volume, name) {
|
|
86
|
+
const match = new RegExp(`^${escapeRegExp(volume)}-(\\d{4})(\\d{2})(\\d{2})-(\\d{2})(\\d{2})\\.tar$`).exec(name);
|
|
87
|
+
if (match === null) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const [year, month, day, hour, minute] = match.slice(1).map(Number);
|
|
91
|
+
return new Date(year, month - 1, day, hour, minute).getTime();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Welke bestanden in de map weg mogen: alleen back-ups van dit volume met de naam die de app geeft,
|
|
95
|
+
* en daarvan alles behalve de nieuwste `keep`. De datum staat in de naam, dus sorteren op naam is
|
|
96
|
+
* sorteren op tijd.
|
|
97
|
+
*/
|
|
98
|
+
function backupsToRemove(volume, names, keep) {
|
|
99
|
+
return names
|
|
100
|
+
.filter((name) => backupTime(volume, name) !== null)
|
|
101
|
+
.sort()
|
|
102
|
+
.reverse()
|
|
103
|
+
.slice(Math.max(1, keep));
|
|
104
|
+
}
|
|
105
|
+
const EVERY = ['day', 'week'];
|
|
106
|
+
const WHEN_IN_USE = ['skip', 'pause'];
|
|
107
|
+
function parseOutcome(raw) {
|
|
108
|
+
const value = raw;
|
|
109
|
+
if (value === null || typeof value !== 'object' || typeof value['at'] !== 'number') {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const at = value['at'];
|
|
113
|
+
if (value['kind'] === 'ok' && typeof value['file'] === 'string') {
|
|
114
|
+
return { kind: 'ok', at, file: value['file'] };
|
|
115
|
+
}
|
|
116
|
+
if (value['kind'] === 'failed' && typeof value['problem'] === 'string') {
|
|
117
|
+
return { kind: 'failed', at, problem: value['problem'] };
|
|
118
|
+
}
|
|
119
|
+
if (value['kind'] === 'skipped' && Array.isArray(value['users'])) {
|
|
120
|
+
return { kind: 'skipped', at, users: value['users'].filter((user) => typeof user === 'string') };
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/** Leest het bewaarde bestand; een schema dat niet klopt, valt weg in plaats van alles mee te nemen. */
|
|
125
|
+
function parseSchedules(text) {
|
|
126
|
+
if (text === null) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const raw = JSON.parse(text);
|
|
131
|
+
const list = Array.isArray(raw.schedules) ? raw.schedules : [];
|
|
132
|
+
const result = [];
|
|
133
|
+
for (const item of list) {
|
|
134
|
+
const { volume, every, folder, keep, whenInUse, lastSuccess } = item;
|
|
135
|
+
if (typeof volume !== 'string' ||
|
|
136
|
+
volume === '' ||
|
|
137
|
+
!EVERY.includes(every) ||
|
|
138
|
+
typeof folder !== 'string' ||
|
|
139
|
+
folder === '' ||
|
|
140
|
+
typeof keep !== 'number' ||
|
|
141
|
+
!Number.isInteger(keep) ||
|
|
142
|
+
keep < 1 ||
|
|
143
|
+
keep > exports.MAX_KEEP ||
|
|
144
|
+
!WHEN_IN_USE.includes(whenInUse) ||
|
|
145
|
+
result.some((existing) => existing.volume === volume)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
result.push({
|
|
149
|
+
volume,
|
|
150
|
+
every: every,
|
|
151
|
+
folder,
|
|
152
|
+
keep,
|
|
153
|
+
whenInUse: whenInUse,
|
|
154
|
+
lastSuccess: typeof lastSuccess === 'number' ? lastSuccess : null,
|
|
155
|
+
lastOutcome: parseOutcome(item.lastOutcome),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
class VolumeSchedules {
|
|
165
|
+
deps;
|
|
166
|
+
schedules;
|
|
167
|
+
/** Of er al een tik loopt of wacht; een tweede tik tegelijk heeft geen zin. */
|
|
168
|
+
ticking = false;
|
|
169
|
+
/** Back-ups na elkaar, ook "Nu een back-up" tijdens een tik: twee tegelijk in dezelfde minuut geven dezelfde naam. */
|
|
170
|
+
queue = Promise.resolve();
|
|
171
|
+
constructor(deps) {
|
|
172
|
+
this.deps = deps;
|
|
173
|
+
this.schedules = parseSchedules(deps.read());
|
|
174
|
+
}
|
|
175
|
+
list() {
|
|
176
|
+
return this.schedules;
|
|
177
|
+
}
|
|
178
|
+
/** Zet of vervangt het schema; wat er al gebeurde (de laatste back-up) blijft. */
|
|
179
|
+
set(input) {
|
|
180
|
+
const previous = this.schedules.find((schedule) => schedule.volume === input.volume);
|
|
181
|
+
const next = {
|
|
182
|
+
volume: input.volume,
|
|
183
|
+
every: input.every,
|
|
184
|
+
folder: input.folder,
|
|
185
|
+
keep: Math.min(exports.MAX_KEEP, Math.max(1, Math.round(input.keep))),
|
|
186
|
+
whenInUse: input.whenInUse,
|
|
187
|
+
lastSuccess: previous?.lastSuccess ?? null,
|
|
188
|
+
// Een ander doel of een andere keus: een eerdere mislukking zegt daar niets meer over.
|
|
189
|
+
lastOutcome: previous?.lastOutcome?.kind === 'ok' ? previous.lastOutcome : null,
|
|
190
|
+
};
|
|
191
|
+
this.store([...this.schedules.filter((schedule) => schedule.volume !== input.volume), next].sort((a, b) => a.volume.localeCompare(b.volume)));
|
|
192
|
+
return this.schedules;
|
|
193
|
+
}
|
|
194
|
+
remove(volume) {
|
|
195
|
+
this.store(this.schedules.filter((schedule) => schedule.volume !== volume));
|
|
196
|
+
return this.schedules;
|
|
197
|
+
}
|
|
198
|
+
/** Maakt de back-ups die aan de beurt zijn, na elkaar. Aan te roepen zo vaak als je wilt. */
|
|
199
|
+
async tick() {
|
|
200
|
+
if (this.ticking) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
this.ticking = true;
|
|
204
|
+
try {
|
|
205
|
+
await this.serial(async () => {
|
|
206
|
+
for (const schedule of this.schedules) {
|
|
207
|
+
if (isScheduleDue(schedule, this.deps.now())) {
|
|
208
|
+
await this.run(schedule, true);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
this.ticking = false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Nu een back-up (fase 88), met de regels van het schema: dezelfde map, overslaan of pauzeren, en
|
|
219
|
+
* het aantal dat blijft. Zonder melding: wie erom vroeg, ziet de uitkomst in de dialoog.
|
|
220
|
+
*/
|
|
221
|
+
backupNow(volume) {
|
|
222
|
+
return this.serial(async () => {
|
|
223
|
+
const schedule = this.schedules.find((candidate) => candidate.volume === volume);
|
|
224
|
+
return schedule === undefined ? null : this.run(schedule, false);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/** De back-ups die de app voor dit volume in de map van het schema zette, nieuwste eerst. */
|
|
228
|
+
backups(volume) {
|
|
229
|
+
const schedule = this.schedules.find((candidate) => candidate.volume === volume);
|
|
230
|
+
if (schedule === undefined || !this.deps.folderExists(schedule.folder)) {
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
return this.deps
|
|
234
|
+
.listFolder(schedule.folder)
|
|
235
|
+
.flatMap((name) => {
|
|
236
|
+
const at = backupTime(volume, name);
|
|
237
|
+
if (at === null) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
return [{ name, at, sizeBytes: this.deps.fileSize(path.join(schedule.folder, name)) }];
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Net weggehaald, of geen rechten: dan staat hij er niet in.
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
})
|
|
248
|
+
.sort((a, b) => b.at - a.at);
|
|
249
|
+
}
|
|
250
|
+
/** Het volledige pad van een eigen back-up; `null` als die naam er niet (meer) bij hoort. */
|
|
251
|
+
backupPath(volume, name) {
|
|
252
|
+
const schedule = this.schedules.find((candidate) => candidate.volume === volume);
|
|
253
|
+
return schedule !== undefined && this.backups(volume).some((backup) => backup.name === name) ? path.join(schedule.folder, name) : null;
|
|
254
|
+
}
|
|
255
|
+
serial(work) {
|
|
256
|
+
const next = this.queue.then(work, work);
|
|
257
|
+
this.queue = next.catch(() => undefined);
|
|
258
|
+
return next;
|
|
259
|
+
}
|
|
260
|
+
async run(schedule, notify) {
|
|
261
|
+
const outcome = await this.attempt(schedule);
|
|
262
|
+
const current = this.schedules.find((candidate) => candidate.volume === schedule.volume);
|
|
263
|
+
// Intussen weggehaald: dan niets terugzetten.
|
|
264
|
+
if (current === undefined) {
|
|
265
|
+
return outcome;
|
|
266
|
+
}
|
|
267
|
+
if (notify && outcome.kind === 'failed' && current.lastOutcome?.kind !== 'failed') {
|
|
268
|
+
this.deps.notifyFailure(schedule.volume, outcome.problem);
|
|
269
|
+
}
|
|
270
|
+
this.store(this.schedules.map((candidate) => candidate.volume === schedule.volume
|
|
271
|
+
? { ...candidate, lastOutcome: outcome, lastSuccess: outcome.kind === 'ok' ? outcome.at : candidate.lastSuccess }
|
|
272
|
+
: candidate));
|
|
273
|
+
return outcome;
|
|
274
|
+
}
|
|
275
|
+
async attempt(schedule) {
|
|
276
|
+
const started = this.deps.now();
|
|
277
|
+
const failed = (problem) => ({ kind: 'failed', at: started, problem });
|
|
278
|
+
if (!this.deps.folderExists(schedule.folder)) {
|
|
279
|
+
return failed((0, i18n_1.t)({
|
|
280
|
+
en: `The folder ${schedule.folder} is not there (anymore).`,
|
|
281
|
+
nl: `De map ${schedule.folder} is er niet (meer).`,
|
|
282
|
+
de: `Der Ordner ${schedule.folder} ist nicht (mehr) da.`,
|
|
283
|
+
fr: `Le dossier ${schedule.folder} n’existe pas (ou plus).`,
|
|
284
|
+
es: `La carpeta ${schedule.folder} no está (ya).`,
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
const paused = [];
|
|
288
|
+
try {
|
|
289
|
+
const users = await this.deps.runningUsers(schedule.volume);
|
|
290
|
+
if (users.length > 0 && schedule.whenInUse === 'skip') {
|
|
291
|
+
return { kind: 'skipped', at: started, users };
|
|
292
|
+
}
|
|
293
|
+
for (const user of users) {
|
|
294
|
+
await this.deps.pause(user);
|
|
295
|
+
paused.push(user);
|
|
296
|
+
}
|
|
297
|
+
const target = path.join(schedule.folder, (0, volume_backup_1.backupFileName)(schedule.volume, new Date(started)));
|
|
298
|
+
const result = await this.deps.backup(schedule.volume, target);
|
|
299
|
+
if (!result.ok) {
|
|
300
|
+
return failed(result.problem);
|
|
301
|
+
}
|
|
302
|
+
this.prune(schedule);
|
|
303
|
+
return { kind: 'ok', at: started, file: target };
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
return failed(err instanceof Error ? err.message : String(err));
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
// Altijd weer los, ook als de back-up mislukte: een gepauzeerde database is erger dan geen back-up.
|
|
310
|
+
for (const user of paused) {
|
|
311
|
+
await this.deps.unpause(user).catch(() => undefined);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/** Haalt de oudste back-ups weg; lukt dat niet, dan blijven ze staan, en is de back-up nog steeds gelukt. */
|
|
316
|
+
prune(schedule) {
|
|
317
|
+
try {
|
|
318
|
+
for (const name of backupsToRemove(schedule.volume, this.deps.listFolder(schedule.folder), schedule.keep)) {
|
|
319
|
+
this.deps.removeFile(path.join(schedule.folder, name));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
// Een bestand dat in gebruik is, of een map zonder rechten: de volgende keer opnieuw.
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
store(schedules) {
|
|
327
|
+
this.schedules = schedules;
|
|
328
|
+
this.deps.write(`${JSON.stringify({ schedules }, null, 2)}\n`);
|
|
329
|
+
this.deps.changed(schedules);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.VolumeSchedules = VolumeSchedules;
|
|
333
|
+
let instance = null;
|
|
334
|
+
/** Eén keer, vanuit main.ts, dat de paden en Docker kent. */
|
|
335
|
+
function configureVolumeSchedules(deps) {
|
|
336
|
+
instance = new VolumeSchedules(deps);
|
|
337
|
+
return instance;
|
|
338
|
+
}
|
|
339
|
+
/** `null` zonder `configureVolumeSchedules` (de smoke test): dan zijn er geen schema's. */
|
|
340
|
+
function volumeSchedules() {
|
|
341
|
+
return instance;
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=volume-schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-schedules.js","sourceRoot":"","sources":["../electron/volume-schedules.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,B as Kr,Hn as p$1,Rn as oS,Rt as X,_r as wt,f as C}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";var p;var g=p$1(()=>{Kr();sS();f();Kr();p=class i{toast=C(u);cliStatus=wt(null);running=wt(new Set);remembered=wt([]);openingFile=wt(!1);status=this.cliStatus.asReadonly();known=this.remembered.asReadonly();opening=this.openingFile.asReadonly();pending=this.running.asReadonly();async loadStatus(){this.cliStatus.set(await window.electron.compose.status())}async loadKnown(){try{this.remembered.set(await window.electron.compose.known())}catch{}}async openFile(){this.openingFile.set(!0);try{let e=await window.electron.compose.openFile();e.ok?e.project!==null&&this.toast.success(oS().compose.upDone(e.project)):this.toast.error(e.problem)}finally{this.openingFile.set(!1),this.loadKnown()}}async forget(e){await window.electron.compose.forget(e),this.toast.success(oS().compose.forgotten(e)),await this.loadKnown()}async up(e){await this.run(e,`up`)}async down(e){await this.run(e,`down`)}async recreate(e,t){this.running.update(o=>new Set(o).add(e));try{let o=await window.electron.compose.recreate(e,t);return o.ok?this.toast.success(oS().compose.recreateDone(t)):this.toast.error(o.problem),o.ok}finally{this.release(e)}}async run(e,t){this.running.update(o=>new Set(o).add(e));try{let o=await(t===`up`?window.electron.compose.up(e):window.electron.compose.down(e));if(o.ok){let r=oS().compose;this.toast.success(t===`up`?r.upDone(e):r.downDone(e))}else this.toast.error(o.problem)}finally{this.release(e),this.loadKnown()}}release(e){this.running.update(t=>{let o=new Set(t);return o.delete(e),o})}static ɵfac=function(t){return new(t||i)};static ɵprov=X({token:i,factory:i.ɵfac,providedIn:`root`})}});export{p as n,g as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,An as lS,B as Kr,Hn as p,Nt as W,Rn as oS,Rt as X,_r as wt,cr as ve,f as C,rt as Ot,sn as eH,w as G}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{i as h,r as d}from"./chunk-BZwYBA7Z.js";var w;var B=p(()=>{Kr();h();lS();f();sS();Kr();w=class l{toast=C(u);items=wt([]);sizeByName=wt({});busy=wt(!1);sizesBusy=wt(!1);loadProblem=wt(null);running=wt(new Set);loading=this.busy.asReadonly();loadingSizes=this.sizesBusy.asReadonly();problem=this.loadProblem.asReadonly();pending=this.running.asReadonly();volumes=Ot(()=>{let s=this.sizeByName();return this.items().map(e=>G(W({},e),{sizeBytes:s[e.name]??null}))});totalBytes=Ot(()=>this.volumes().reduce((s,e)=>s+(e.sizeBytes??0),0));unusedCount=Ot(()=>this.items().filter(s=>s.inUseBy===0).length);constructor(){C(ve).onDestroy(window.electron.events.subscribe(s=>{s.includes(`volume`)&&this.refresh()}))}async refresh(){this.busy.set(!0);try{this.items.set(await window.electron.volumes.list()),this.loadProblem.set(null)}catch(s){this.loadProblem.set(eH(s))}finally{this.busy.set(!1)}this.loadSizes()}async loadSizes(){this.sizesBusy.set(!0);try{this.sizeByName.set(await window.electron.volumes.sizes())}catch{}finally{this.sizesBusy.set(!1)}}async create(s){let e;try{let t=await window.electron.volumes.create(s);e=t.ok?null:t.problem}catch(t){e=eH(t)}return e===null&&(this.toast.success(oS().volumes.created(s.name)),await this.refresh()),e}async remove(s,e){this.running.update(t=>new Set(t).add(s));try{let t=await window.electron.volumes.remove(s,e);t.ok||this.toast.error(t.problem)}finally{this.running.update(t=>{let i=new Set(t);return i.delete(s),i})}await this.refresh()}async removeMany(s,e){await Promise.all(s.map(t=>this.remove(t,e)))}async prune(s){this.busy.set(!0);try{let e=await window.electron.volumes.prune(s);e.ok?this.toast.success(e.removed===0?oS().common.nothingToPrune:oS().volumes.pruned(e.removed,d(e.reclaimedBytes))):this.toast.error(e.problem)}finally{this.busy.set(!1)}await this.refresh()}async backup(s){await this.whilePending(s,async()=>{let e=await window.electron.volumes.backup(s);e.ok?e.savedTo!==null&&this.toast.success(oS().volumes.backedUp(s,e.savedTo)):this.toast.error(e.problem)})}async restore(s){await this.whilePending(s,async()=>{let e=await window.electron.volumes.restore(s);e.ok?e.restoredFrom!==null&&this.toast.success(oS().volumes.restored(e.restoredFrom,s)):this.toast.error(e.problem)}),await this.loadSizes()}async whilePending(s,e){this.running.update(t=>new Set(t).add(s));try{await e()}catch(t){this.toast.error(eH(t))}finally{this.running.update(t=>{let i=new Set(t);return i.delete(s),i})}}static ɵfac=function(e){return new(e||l)};static ɵprov=X({token:l,factory:l.ɵfac,providedIn:`root`})}});export{w as n,B as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,A as HE,An as lS,B as Kr,D as Gm,En as kE,Fn as nk,Gt as _m,H as Ld,Hn as p,K as My,Kn as pk,Nn as mj,Nt as W,Pt as Wm,Qn as rp,R as Jm,Rn as oS,Rt as X,St as Tg,_r as wt,bn as hg,cn as ec,dr as vk,et as Od,f as C,hr as wc,ht as Sc,in as dS,lr as vg,mt as SE,o as Ac,q as Nc,rt as Ot,sn as eH,t as $E,tt as Oi,u as Br,un as fg,w as G,wn as jc,xt as Tc}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{_ as pn,d as dn,f as fn,g as ln,l as an,m as ie,r as Je,u as cn,v as un}from"./chunk-EFAsN7J4.js";import{n as p$1,t as M}from"./chunk-DZXhuKXm.js";import{n as v,t as u$1}from"./chunk-BUtOgCv_.js";import{s as fe,u as ra}from"./chunk-jpKpwesj.js";var be;var J;var ue=p(()=>{Kr();M();Kr();be=`containers.groups`,J=class i{assignments=C(p$1).entries(be);names=Ot(()=>[...new Set(this.assignments().values())].sort((e,t)=>e.localeCompare(t)));groupOf(n){return this.assignments().get(n)??null}assign(n,e){let t=e.trim();if(t===``)return;let o=new Map(this.assignments());for(let d of n)o.set(d,t);this.assignments.set(o)}release(n){let e=new Map(this.assignments());for(let t of n)e.delete(t);this.assignments.set(e)}rename(n,e){let t=e.trim();if(t===``||t===n)return;let o=new Map(this.assignments());for(let[d,M]of o)M===n&&o.set(d,t);this.assignments.set(o)}moveContainer(n,e){let t=this.assignments().get(n);if(t===void 0||n===e)return;let o=new Map(this.assignments());o.delete(n),o.set(e,t),this.assignments.set(o)}dissolve(n){let e=new Map([...this.assignments()].filter(([,t])=>t!==n));this.assignments.set(e)}static ɵfac=function(e){return new(e||i)};static ɵprov=X({token:i,factory:i.ɵfac,providedIn:`root`})}});function he(i,n){if(i&1&&(Oi(0,`p`,11),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().taken)}}function Ce(i,n){if(i&1&&(Oi(0,`p`,12),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().invalid)}}function we(i,n){if(i&1&&(Oi(0,`p`,13),pk(1),Nc()),i&2){let e=HE(2);ec(),Ac(` `,e.t().compose,` `)}}function ke(i,n){i&1&&(Oi(0,`p`,14),pk(1),Nc()),i&2&&(ec(),fg(n))}function Se(i,n){if(i&1){let e=$E();Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),pk(6),Nc(),Oi(7,`form`,7),Jm(`submit`,function(o){Ld(e);return Od(HE().submit(o))}),Oi(8,`label`,8)(9,`span`,9),pk(10),Nc(),Oi(11,`input`,10),Jm(`input`,function(o){Ld(e);return Od(HE().target.set(o.target.value))}),Nc()(),kE(12,he,2,1,`p`,11)(13,Ce,2,1,`p`,12),kE(14,we,2,1,`p`,13),kE(15,ke,2,1,`p`,14),Oi(16,`div`,15)(17,`button`,16),Gm(18,`app-icon`,17),pk(19),Nc(),Oi(20,`button`,18),Gm(21,`app-icon`,19),pk(22),Nc()()()()()}if(i&2){let e,t=HE();ec(4),fg(t.t().title),ec(2),fg(t.t().description(t.name())),ec(4),fg(t.t().label),ec(),nk(t.field+` mt-1.5`),Wm(`value`,t.target()),ec(),SE(t.taken()?12:t.invalid()?13:-1),ec(2),SE(t.compose()?14:-1),ec(),SE((e=t.problem())?15:-1,e),ec(3),Wm(`size`,14),ec(),Ac(` `,t.common().close,` `),ec(),Wm(`disabled`,!t.canSave()),ec(),Wm(`size`,14),ec(),Ac(` `,t.saving()?t.t().saving:t.t().save,` `)}}var Ie;var ge;var xe;var Me=p(()=>{Kr();Je();v();lS();ue();sS();dS();f();Kr();Ie=`mx-focus w-full rounded-md border border-ink-700 bg-ink-800 px-2.5 py-1.5 font-mono text-[13px] text-ink-100 placeholder:text-ink-500`,ge=/^[a-zA-Z0-9][a-zA-Z0-9_.-]+$/,xe=class i{open=mj(!1);containerId=jc.required();name=jc.required();compose=jc(!1);store=C(u$1);groups=C(J);toast=C(u);t=Ot(()=>oS().containers.rename);common=Ot(()=>oS().common);field=Ie;target=wt(``);saving=wt(!1);problem=wt(null);wanted=Ot(()=>this.target().trim());invalid=Ot(()=>this.wanted()!==``&&!ge.test(this.wanted()));taken=Ot(()=>this.store.containers().some(n=>n.name===this.wanted()&&n.id!==this.containerId()));canSave=Ot(()=>!this.saving()&&ge.test(this.wanted())&&!this.taken()&&this.wanted()!==this.name());constructor(){rp(()=>{if(!this.open())return;let n=this.name();Tg(()=>{this.target.set(n),this.problem.set(null)})})}async submit(n){if(n.preventDefault(),!this.canSave())return;let e=this.name(),t=this.wanted();this.saving.set(!0),this.problem.set(null);try{let o=await window.electron.containers.rename(this.containerId(),t);o.ok?(this.groups.moveContainer(e,t),this.toast.success(this.t().saved(e,t)),this.open.set(!1)):this.problem.set(o.problem)}catch(o){this.problem.set(eH(o))}finally{this.saving.set(!1)}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-rename-dialog`]],inputs:{open:[1,`open`],containerId:[1,`containerId`],name:[1,`name`],compose:[1,`compose`]},outputs:{open:`openChange`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`rename-dialog`,1,`w-full`,`max-w-md`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`text-[15px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,1,`mt-1`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,3,`submit`],[1,`block`],[1,`text-[13px]`,`font-medium`,`text-ink-200`],[`type`,`text`,`spellcheck`,`false`,`autocomplete`,`off`,`data-testid`,`rename-name`,3,`input`,`value`],[`data-testid`,`rename-taken`,1,`mt-2`,`text-[12px]`,`text-danger`],[`data-testid`,`rename-invalid`,1,`mt-2`,`text-[12px]`,`text-danger`],[`data-testid`,`rename-compose`,1,`mt-3`,`rounded-md`,`border`,`border-warn/40`,`bg-warn/10`,`px-3`,`py-2`,`text-[12px]`,`text-ink-200`],[`role`,`alert`,1,`mt-3`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-5`,`flex`,`items-center`,`justify-end`,`gap-2`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`],[`name`,`close`,3,`size`],[`type`,`submit`,`data-testid`,`rename-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`disabled`],[`name`,`pencil`,3,`size`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(d){return vk(t.open,d)||(t.open=d),d}),_m(1,Se,23,14,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});function Te(i,n){if(i&1&&(Oi(0,`span`,14),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().taken)}}function Re(i,n){if(i&1&&(Oi(0,`span`,15),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().invalid)}}function Pe(i,n){if(i&1){let e=$E();Oi(0,`div`,24)(1,`input`,26),Jm(`input`,function(o){let d=Ld(e).$index;return Od(HE(4).setPort(d,o.target.value))}),Nc(),Oi(2,`span`,27),pk(3,`→`),Nc(),Oi(4,`span`,28),pk(5),Nc()()}if(i&2){let e=n.$implicit,t=n.$index,o=HE(4);ec(),nk(o.field+` w-24`),Wm(`value`,o.hostPorts()[t]??``),Br(`aria-label`,o.t().hostPort(o.label(e)))(`data-testid`,`duplicate-port-`+e.containerPort),ec(4),fg(o.label(e))}}function Ve(i,n){if(i&1&&(Oi(0,`div`)(1,`p`,12),pk(2),Nc(),Oi(3,`div`,23),Sc(4,Pe,6,6,`div`,24,Ee),Nc(),Oi(6,`p`,25),pk(7),Nc()()),i&2){let e=HE(),t=HE(2);ec(2),fg(t.t().ports),ec(2),Tc(e.ports),ec(3),fg(t.t().portHint)}}function ze(i,n){if(i&1){let e=$E();Oi(0,`div`,29)(1,`span`,30),pk(2),Oi(3,`span`,27),pk(4),Nc()(),Oi(5,`div`,31)(6,`button`,32),Jm(`click`,function(){let o=Ld(e).$implicit;return Od(HE(4).setCopy(o.name,!0))}),pk(7),Nc(),Oi(8,`button`,32),Jm(`click`,function(){let o=Ld(e).$implicit;return Od(HE(4).setCopy(o.name,!1))}),pk(9),Nc()()()}if(i&2){let e=n.$implicit,t=HE(4);ec(),Wm(`title`,e.name+` → `+e.target),ec(),Ac(` `,e.name,` `),ec(2),Ac(`→ `,e.target),ec(),Br(`aria-label`,e.name),ec(),nk(t.copied().has(e.name)?`bg-accent/15 text-accent`:`text-ink-400`),Br(`aria-checked`,t.copied().has(e.name))(`data-testid`,`duplicate-copy-`+e.name),ec(),Ac(` `,t.t().copy,` `),ec(),nk(t.copied().has(e.name)?`text-ink-400`:`bg-warn/15 text-warn`),Br(`aria-checked`,!t.copied().has(e.name))(`data-testid`,`duplicate-share-`+e.name),ec(),Ac(` `,t.t().share,` `)}}function Fe(i,n){if(i&1&&(Oi(0,`div`)(1,`p`,12),pk(2),Nc(),Oi(3,`div`,23),Sc(4,ze,10,14,`div`,29,Ne),Nc(),Oi(6,`p`,25),pk(7),Nc()()),i&2){let e=HE(),t=HE(2);ec(2),fg(t.t().volumes),ec(2),Tc(e.volumes),ec(3),fg(t.t().volumesHint)}}function $e(i,n){if(i&1&&(Oi(0,`p`,16),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().compose)}}function Ae(i,n){i&1&&(Oi(0,`p`,17),pk(1),Nc()),i&2&&(ec(),fg(n))}function je(i,n){if(i&1){let e=$E();Oi(0,`form`,10),Jm(`submit`,function(o){Ld(e);return Od(HE(2).submit(o))}),Oi(1,`label`,11)(2,`span`,12),pk(3),Nc(),Oi(4,`input`,13),Jm(`input`,function(o){Ld(e);return Od(HE(2).target.set(o.target.value))}),Nc(),kE(5,Te,2,1,`span`,14)(6,Re,2,1,`span`,15),Nc(),kE(7,Ve,8,2,`div`),kE(8,Fe,8,2,`div`),kE(9,$e,2,1,`p`,16),kE(10,Ae,2,1,`p`,17),Oi(11,`div`,18)(12,`button`,19),Gm(13,`app-icon`,20),pk(14),Nc(),Oi(15,`button`,21),Gm(16,`app-icon`,22),pk(17),Nc()()()}if(i&2){let e,t=n,o=HE(2);ec(3),fg(o.t().name),ec(),nk(o.field+` mt-1.5 w-full`),Wm(`value`,o.target()),ec(),SE(o.taken()?5:o.invalid()?6:-1),ec(2),SE(t.ports.length>0?7:-1),ec(),SE(t.volumes.length>0?8:-1),ec(),SE(t.compose?9:-1),ec(),SE((e=o.problem())?10:-1,e),ec(3),Wm(`size`,14),ec(),Ac(` `,o.common().close,` `),ec(),Wm(`disabled`,!o.canSave()),ec(),Wm(`size`,14),ec(),Ac(` `,o.saving()?o.t().saving:o.t().save,` `)}}function qe(i,n){i&1&&(Oi(0,`p`,8),pk(1),Nc()),i&2&&(ec(),fg(n))}function Be(i,n){if(i&1&&(Oi(0,`p`,9),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().loading)}}function We(i,n){if(i&1&&(Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),pk(6),Nc(),kE(7,je,18,14,`form`,7)(8,qe,2,1,`p`,8)(9,Be,2,1,`p`,9),Nc()()),i&2){let e,t=HE();ec(4),fg(t.t().title(t.name())),ec(2),fg(t.t().description),ec(),SE((e=t.plan())?7:(e=t.problem())?8:9,e)}}var Ee;var Ne;var Le;var _e;var ve;var Ze=p(()=>{Kr();ra();Je();v();lS();sS();dS();f();Kr();Ee=(i,n)=>n.containerPort+n.protocol,Ne=(i,n)=>n.name;Le=`mx-focus rounded-md border border-ink-700 bg-ink-800 px-2.5 py-1.5 font-mono text-[13px] text-ink-100 placeholder:text-ink-500`,_e=/^[a-zA-Z0-9][a-zA-Z0-9_.-]+$/,ve=class i{open=mj(!1);containerId=jc.required();name=jc.required();store=C(u$1);toast=C(u);router=C(fe);t=Ot(()=>oS().containers.duplicate);common=Ot(()=>oS().common);field=Le;plan=wt(null);target=wt(``);hostPorts=wt([]);copied=wt(new Set);saving=wt(!1);problem=wt(null);wanted=Ot(()=>this.target().trim());invalid=Ot(()=>this.wanted()!==``&&!_e.test(this.wanted()));taken=Ot(()=>this.store.containers().some(n=>n.name===this.wanted()));portsValid=Ot(()=>this.hostPorts().every(n=>n.trim()===``||/^\d{1,5}$/.test(n.trim())&&Number(n)>=1&&Number(n)<=65535));canSave=Ot(()=>!this.saving()&&this.plan()!==null&&_e.test(this.wanted())&&!this.taken()&&this.portsValid());constructor(){rp(()=>{if(!this.open())return;let n=this.containerId();Tg(()=>{this.load(n)})})}label(n){return`${String(n.containerPort)}/${n.protocol}`}setPort(n,e){this.hostPorts.update(t=>t.map((o,d)=>d===n?e:o))}setCopy(n,e){let t=new Set(this.copied());e?t.add(n):t.delete(n),this.copied.set(t)}async submit(n){n.preventDefault();let e=this.plan();if(!this.canSave()||e===null)return;let t=this.wanted(),o=e.ports.map((d,M)=>{let ee=(this.hostPorts()[M]??``).trim();return G(W({},d),{hostPort:ee===``?null:Number(ee)})});this.saving.set(!0),this.problem.set(null);try{let d=await window.electron.containers.duplicate(this.containerId(),{name:t,ports:o,copyVolumes:[...this.copied()]});d.ok?(this.toast.success(this.t().done(t)),this.open.set(!1),this.router.navigate([`/containers`,d.id]).catch(()=>{})):this.problem.set(d.problem)}catch(d){this.problem.set(eH(d))}finally{this.saving.set(!1)}}async load(n){this.plan.set(null),this.problem.set(null);try{let e=await window.electron.containers.duplicatePlan(n);e.ok?(this.plan.set(e.plan),this.target.set(e.plan.suggestion),this.hostPorts.set(e.plan.ports.map(()=>``)),this.copied.set(new Set(e.plan.volumes.map(t=>t.name)))):this.problem.set(e.problem)}catch(e){this.problem.set(eH(e))}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-duplicate-dialog`]],inputs:{open:[1,`open`],containerId:[1,`containerId`],name:[1,`name`]},outputs:{open:`openChange`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`duplicate-dialog`,1,`w-full`,`max-w-lg`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`text-[15px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,1,`mt-1`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,`space-y-4`],[`role`,`alert`,1,`mt-4`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-4`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,`space-y-4`,3,`submit`],[1,`block`],[1,`text-[13px]`,`font-medium`,`text-ink-200`],[`type`,`text`,`spellcheck`,`false`,`autocomplete`,`off`,`data-testid`,`duplicate-name`,3,`input`,`value`],[`data-testid`,`duplicate-taken`,1,`mt-1.5`,`block`,`text-[12px]`,`text-danger`],[1,`mt-1.5`,`block`,`text-[12px]`,`text-danger`],[`data-testid`,`duplicate-compose`,1,`rounded-md`,`border`,`border-warn/40`,`bg-warn/10`,`px-3`,`py-2`,`text-[12px]`,`text-ink-200`],[`role`,`alert`,1,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`flex`,`items-center`,`justify-end`,`gap-2`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`],[`name`,`close`,3,`size`],[`type`,`submit`,`data-testid`,`duplicate-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`disabled`],[`name`,`copy`,3,`size`],[1,`mt-1.5`,`space-y-1.5`],[1,`flex`,`items-center`,`gap-2`,`text-[13px]`],[1,`mt-1.5`,`text-[12px]`,`text-ink-500`],[`type`,`text`,`inputmode`,`numeric`,`autocomplete`,`off`,3,`input`,`value`],[1,`text-ink-500`],[1,`font-mono`,`text-ink-300`],[1,`flex`,`items-center`,`gap-3`,`text-[13px]`],[1,`min-w-0`,`flex-1`,`truncate`,`font-mono`,`text-ink-200`,3,`title`],[`role`,`radiogroup`,1,`flex`,`shrink-0`,`overflow-hidden`,`rounded-md`,`border`,`border-ink-700`],[`type`,`button`,`role`,`radio`,1,`mx-focus`,`px-2`,`py-0.5`,`text-[12px]`,3,`click`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(d){return vk(t.open,d)||(t.open=d),d}),_m(1,We,10,3,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});export{ve as a,ue as i,Me as n,xe as o,Ze as r,J as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,A as HE,An as lS,B as Kr,D as Gm,En as kE,Gt as _m,H as Ld,Hn as p,K as My,Kn as pk,Mn as mg,Nn as mj,Pt as Wm,Qn as rp,R as Jm,Rn as oS,St as Tg,_r as wt,bn as hg,cn as ec,dn as fj,dr as vk,et as Od,f as C,hr as wc,in as dS,lr as vg,mt as SE,o as Ac,q as Nc,rt as Ot,sn as eH,t as $E,tt as Oi,u as Br,un as fg,wn as jc}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{_ as pn,d as dn,f as fn,g as ln,l as an,m as ie$1,r as Je,u as cn,v as un}from"./chunk-EFAsN7J4.js";function ie(i,o){if(i&1&&pk(0),i&2)Ac(` `,HE(2).t().inVolume,` `)}function ne(i,o){if(i&1&&pk(0),i&2){let e=HE(2);mg(` `,e.onMount()?e.t().onMount:e.t().notOnMount,` `,e.t().restart,` `)}}function oe(i,o){if(i&1&&(Oi(0,`p`,7),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().loading)}}function ae(i,o){if(i&1){let e=$E();Oi(0,`textarea`,17),Jm(`input`,function(a){Ld(e);return Od(HE(2).text.set(a.target.value))}),Nc()}if(i&2){let e=HE(2);Wm(`value`,e.text()),Br(`aria-label`,e.t().title(e.shownPath()))}}function le(i,o){if(i&1){let e=$E();Oi(0,`p`,18),pk(1),Nc(),Oi(2,`div`,19)(3,`button`,20),Jm(`click`,function(){Ld(e);return Od(HE(3).load())}),pk(4),Nc(),Oi(5,`button`,21),Jm(`click`,function(){Ld(e);return Od(HE(3).save(!0))}),pk(6),Nc()()}if(i&2){let e=HE(3);ec(),fg(e.t().conflict),ec(3),fg(e.t().reload),ec(2),Ac(` `,e.t().overwrite,` `)}}function re(i,o){if(i&1&&(Oi(0,`div`,9)(1,`p`),pk(2),Nc(),kE(3,le,7,3),Nc()),i&2){let e=HE(2);ec(2),fg(o),ec(),SE(e.conflict()?3:-1)}}function de(i,o){if(i&1&&(Oi(0,`span`,11),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().unsaved)}}function se(i,o){if(i&1){let e=$E();Oi(0,`button`,22),Jm(`click`,function(){Ld(e);let a=HE(2);return a.saveAsImage.emit(),Od(a.open.set(!1))}),Gm(1,`app-icon`,23),pk(2),Nc()}if(i&2){let e=HE(2);ec(),Wm(`size`,14),ec(),Ac(` `,e.t().saveAsImage,` `)}}function ce(i,o){if(i&1){let e=$E();Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),kE(6,ie,1,1)(7,ne,1,2),Nc(),kE(8,oe,2,1,`p`,7)(9,ae,1,2,`textarea`,8),kE(10,re,4,2,`div`,9),Oi(11,`div`,10),kE(12,de,2,1,`span`,11),kE(13,se,3,2,`button`,12),Oi(14,`button`,13),Gm(15,`app-icon`,14),pk(16),Nc(),Oi(17,`button`,15),Jm(`click`,function(){Ld(e);return Od(HE().save(!1))}),Gm(18,`app-icon`,16),pk(19),Nc()()()()}if(i&2){let e,t=HE();ec(4),fg(t.t().title(t.shownPath())),ec(2),SE(t.source().kind===`volume`?6:7),ec(2),SE(t.loading()?8:t.loaded()?9:-1),ec(2),SE((e=t.problem())?10:-1,e),ec(2),SE(t.dirty()?12:-1),ec(),SE(!t.onMount()&&t.loaded()?13:-1),ec(2),Wm(`size`,14),ec(),Ac(` `,t.dirty()?t.t().closeUnsaved:t.common().close,` `),ec(),Wm(`disabled`,!t.dirty()||t.saving()),ec(),Wm(`size`,14),ec(),Ac(` `,t.saving()?t.t().saving:t.t().save,` `)}}var Q;var me=p(()=>{Kr();Je();lS();sS();dS();f();Kr();Q=class i{open=mj(!1);source=jc.required();path=jc.required();saveAsImage=fj();toast=C(u);t=Ot(()=>oS().containers.editor);common=Ot(()=>oS().common);text=wt(``);original=wt(``);version=wt(``);shownPath=wt(``);onMount=wt(!0);loading=wt(!1);loaded=wt(!1);saving=wt(!1);problem=wt(null);conflict=wt(!1);dirty=Ot(()=>this.loaded()&&this.text()!==this.original());constructor(){rp(()=>{this.open()&&(this.path(),this.source(),Tg(()=>{this.load()}))})}async load(){this.loading.set(!0),this.loaded.set(!1),this.problem.set(null),this.conflict.set(!1),this.shownPath.set(this.path());try{let o=this.source(),e=o.kind===`volume`?await window.electron.volumes.readText(o.name,this.path()):await window.electron.files.readText(o.id,this.path());e.ok?(this.shownPath.set(e.path),this.text.set(e.text),this.original.set(e.text),this.version.set(e.version),this.onMount.set(e.onMount),this.loaded.set(!0)):this.problem.set(e.problem)}catch(o){this.problem.set(eH(o))}finally{this.loading.set(!1)}}async save(o){this.saving.set(!0),this.problem.set(null),this.conflict.set(!1);try{let e=this.text(),t=this.source(),a=t.kind===`volume`?await window.electron.volumes.saveText(t.name,this.shownPath(),e,this.version(),o):await window.electron.files.saveText(t.id,this.shownPath(),e,this.version(),o);a.ok?(this.original.set(e),this.version.set(a.version),this.toast.success(this.t().saved(this.shownPath()))):(this.problem.set(a.problem),this.conflict.set(a.conflict))}catch(e){this.problem.set(eH(e))}finally{this.saving.set(!1)}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-edit-file-dialog`]],inputs:{open:[1,`open`],source:[1,`source`],path:[1,`path`]},outputs:{open:`openChange`,saveAsImage:`saveAsImage`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`edit-file-dialog`,1,`flex`,`h-[80vh]`,`w-full`,`max-w-4xl`,`flex-col`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`font-mono`,`text-[14px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,`data-testid`,`edit-file-where`,1,`mt-1`,`text-[12px]`,`text-ink-400`],[1,`mt-4`,`text-[13px]`,`text-ink-400`],[`spellcheck`,`false`,`autocomplete`,`off`,`wrap`,`off`,`data-testid`,`edit-file-text`,1,`mx-focus`,`mt-3`,`min-h-0`,`flex-1`,`resize-none`,`rounded-md`,`border`,`border-ink-700`,`bg-ink-950`,`p-3`,`font-mono`,`text-[12px]`,`leading-[1.6]`,`text-ink-100`,3,`value`],[`role`,`alert`,1,`mt-3`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-4`,`flex`,`items-center`,`gap-2`],[`data-testid`,`edit-file-dirty`,1,`text-[12px]`,`text-warn`],[`type`,`button`,`data-testid`,`edit-file-commit`,1,`mx-btn`,`mx-focus`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`,`ml-auto`],[`name`,`close`,3,`size`],[`type`,`button`,`data-testid`,`edit-file-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`click`,`disabled`],[`name`,`check`,3,`size`],[`spellcheck`,`false`,`autocomplete`,`off`,`wrap`,`off`,`data-testid`,`edit-file-text`,1,`mx-focus`,`mt-3`,`min-h-0`,`flex-1`,`resize-none`,`rounded-md`,`border`,`border-ink-700`,`bg-ink-950`,`p-3`,`font-mono`,`text-[12px]`,`leading-[1.6]`,`text-ink-100`,3,`input`,`value`],[1,`mt-1`,`text-ink-200`],[1,`mt-2`,`flex`,`gap-2`],[`type`,`button`,`data-testid`,`edit-file-reload`,1,`mx-btn`,`mx-focus`,3,`click`],[`type`,`button`,`data-testid`,`edit-file-overwrite`,1,`mx-btn`,`mx-focus`,`border-danger`,`text-danger`,3,`click`],[`type`,`button`,`data-testid`,`edit-file-commit`,1,`mx-btn`,`mx-focus`,3,`click`],[`name`,`images`,3,`size`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(h){return vk(t.open,h)||(t.open=h),h}),_m(1,ce,20,11,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie$1,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});export{me as n,Q as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{An as lS,B as Kr,Hn as p,Rt as X,_r as wt,sn as eH}from"./chunk-u0OAgv4f.js";var o;var y=p(()=>{Kr();lS();Kr();o=class a{state=wt(null);busy=wt(!1);startingWsl=wt(!1);wslFailure=wt(null);startedWsl=wt(!1);status=this.state.asReadonly();loading=this.busy.asReadonly();wslStarting=this.startingWsl.asReadonly();wslProblem=this.wslFailure.asReadonly();wslStartedBefore=this.startedWsl.asReadonly();async refresh(){this.busy.set(!0);try{this.state.set(await window.electron.engine.status())}finally{this.busy.set(!1)}}async startWsl(e){return this.start(()=>window.electron.engine.startWsl(e),!0)}async startWslDaemon(e){return this.start(()=>window.electron.engine.startWslDaemon(e),!1)}async start(e,r){this.startingWsl.set(!0),this.wslFailure.set(null);try{let s=await e();return s.ok?this.startedWsl.set(r):this.wslFailure.set(s.problem),await this.refresh(),s.ok}catch(s){return this.wslFailure.set(eH(s)),!1}finally{this.startingWsl.set(!1)}}static ɵfac=function(r){return new(r||a)};static ɵprov=X({token:a,factory:a.ɵfac,providedIn:`root`})}});export{y as n,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as Kr,Hn as p$1,Q as OD,Qn as rp,U as M}from"./chunk-u0OAgv4f.js";import{E as tn,g as en}from"./chunk-Clfbc1-d.js";function L(r){return{provide:v,useFactory:r}}var p;var N;var f;var v;var g=p$1(()=>{Kr();tn();p={mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}},N=50,f=class{constructor(e){this.host=e,this.nodes=[],this.prevAnimationNames=new WeakMap,this.pendingExits=new Set,this.removeListeners=null,this.closeTimestamp=0,this.exitVersion=0,this.waapiPending=!1,this.safetyTimer=null,this.prevPresent=e.present(),this.state=this.prevPresent?`mounted`:`unmounted`,this.prevPresent&&this.mount(),rp(()=>{let i=e.present();i!==this.prevPresent&&(this.prevPresent=i,i?this.send(`MOUNT`):e.isBrowser?(this.closeTimestamp=this.now(),OD(()=>this.evaluateExit(),{injector:e.injector})):this.send(`UNMOUNT`))},{injector:e.injector,debugName:`PresenceMachine.present`})}dispose(){this.unmount()}evaluateExit(){if(this.state!==`mounted`||this.host.present())return;this.pendingExits.clear();for(let i of this.nodes){let t=getComputedStyle(i),n=t.animationName||`none`,s=this.prevAnimationNames.get(i)??`none`;n!==`none`&&t.display!==`none`&&s!==n&&this.pendingExits.add(i)}let e=this.collectExitAnimations();if(this.pendingExits.size===0&&e.length===0){this.send(`UNMOUNT`);return}if(this.send(`ANIMATION_OUT`),e.length>0){this.waapiPending=!0;let i=this.exitVersion;Promise.all(e.map(t=>t.finished.catch(()=>{}))).then(()=>this.finishExit(i)),this.armSafetyNet(i,e)}}collectExitAnimations(){if(!this.host.isBrowser)return[];let e=[];for(let i of this.nodes)if(typeof i.getAnimations==`function`)for(let t of i.getAnimations({subtree:!0})){let n=t.startTime===null||Number(t.startTime)>=this.closeTimestamp;(t.playState===`running`||t.pending)&&n&&e.push(t)}return e}armSafetyNet(e,i){let t=new Set(this.nodes);for(let s of i){let o=s.effect?.target;o instanceof HTMLElement&&t.add(o)}let n=0;for(let s of t)n=Math.max(n,en(s));this.clearSafetyNet(),this.safetyTimer=setTimeout(()=>this.finishExit(e),n+N)}finishExit(e){e===this.exitVersion&&(this.waapiPending=!1,this.clearSafetyNet(),this.send(`ANIMATION_END`))}clearSafetyNet(){this.safetyTimer!==null&&(clearTimeout(this.safetyTimer),this.safetyTimer=null)}send(e){let i=p[this.state][e];if(!(i===void 0||i===this.state))if(this.state=i,i===`mounted`)if(this.exitVersion++,this.waapiPending=!1,this.clearSafetyNet(),this.nodes.length>0){this.pendingExits.clear();for(let t of this.nodes)this.prevAnimationNames.set(t,this.getAnimationName(t))}else this.mount();else i===`unmounted`&&(this.exitVersion++,this.unmount())}mount(){if(this.nodes=this.host.mountView(),this.host.isBrowser&&this.nodes.length>0){for(let e of this.nodes)this.prevAnimationNames.set(e,this.getAnimationName(e));this.addAnimationListeners()}}unmount(){this.removeListeners?.(),this.removeListeners=null,this.clearSafetyNet(),this.waapiPending=!1,this.host.destroyView(),this.nodes=[],this.pendingExits.clear()}addAnimationListeners(){let e=t=>{let n=t.target;this.nodes.includes(n)&&this.prevAnimationNames.set(n,this.getAnimationName(n))},i=t=>{let n=t.target;this.nodes.includes(n)&&this.getAnimationName(n).includes(t.animationName)&&(this.pendingExits.delete(n),!this.waapiPending&&this.pendingExits.size===0&&this.finishExit(this.exitVersion))};for(let t of this.nodes)t.addEventListener(`animationstart`,e),t.addEventListener(`animationcancel`,i),t.addEventListener(`animationend`,i);this.removeListeners=()=>{for(let t of this.nodes)t.removeEventListener(`animationstart`,e),t.removeEventListener(`animationcancel`,i),t.removeEventListener(`animationend`,i)}}getAnimationName(e){return(this.host.isBrowser?getComputedStyle(e).animationName:``)||`none`}now(){let e=typeof document<`u`?document.timeline?.currentTime:null;return typeof e==`number`?e:Number(e??0)}},v=new M(`RdxPresenceContext`)});export{v as i,f as n,g as r,L as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,A as HE,B as Kr,D as Gm,En as kE,Et as UE,Fn as nk,H as Ld,Hn as p,K as My,Kn as pk,Pt as Wm,R as Jm,Rn as oS,Zn as rg,_r as wt,cn as ec,dn as fj,et as Od,f as C,hn as gj,hr as wc,ht as Sc,in as dS,mt as SE,o as Ac,pr as wD,q as Nc,rt as Ot,st as Pr,t as $E,tt as Oi,u as Br,wn as jc,xt as Tc,y as Dj}from"./chunk-u0OAgv4f.js";function $(i,e){i&1&&Gm(0,`li`,6)}function j(i,e){if(i&1){let t=$E();kE(0,$,1,0,`li`,6),Oi(1,`li`,7)(2,`button`,8),Jm(`click`,function(){let o=Ld(t).$implicit;return Od(HE(2).pick(o))})(`keydown`,function(o){Ld(t);return Od(HE(2).onItemKey(o))}),Gm(3,`app-icon`,9),pk(4),Nc()()}if(i&2){let t=e.$implicit,n=HE(2);SE(t.separated?0:-1),ec(),Br(`title`,t.hint??null),ec(),nk(t.danger?n.dangerClass:n.normalClass),Wm(`disabled`,t.disabled===!0),Br(`data-testid`,`menu-`+t.id),ec(),Wm(`name`,t.icon)(`size`,14),ec(),Ac(` `,t.label,` `)}}function P(i,e){if(i&1&&(Oi(0,`ul`,5),Sc(1,j,5,9,null,null,U),Nc()),i&2){let t=HE();nk(t.upward()?`bottom-full mb-1.5`:`top-full mt-1.5`),Br(`aria-label`,t.shownLabel()),ec(),Tc(t.items())}}var Q;var U;var V;var G=p(()=>{Kr();sS();dS();Kr();Q=[`trigger`],U=(i,e)=>e.id;V=class i{items=jc.required();label=jc(null);compact=jc(!1,{transform:Dj});picked=fj();shownLabel=Ot(()=>this.label()??oS().shell.actionMenu.label);host=C(Pr);trigger=gj(`trigger`);open=wt(!1);upward=wt(!1);compactTriggerClass=`mx-focus cursor-pointer rounded p-1 text-ink-400 transition-colors hover:bg-ink-800 hover:text-ink-100`;normalClass=`text-ink-200 hover:bg-ink-750 hover:text-ink-100 focus-visible:bg-ink-750 focus-visible:text-ink-100`;dangerClass=`text-danger hover:bg-danger/15 focus-visible:bg-danger/15`;toggle(){let e=!this.open();e&&this.placeMenu(),this.open.set(e),e&&setTimeout(()=>this.focusItem(0))}onOutside(e){this.open()&&!this.host.nativeElement.contains(e.target)&&this.open.set(!1)}onTriggerKey(e){e.key!==`ArrowDown`&&e.key!==`ArrowUp`||(e.preventDefault(),this.placeMenu(),this.open.set(!0),setTimeout(()=>this.focusItem(e.key===`ArrowUp`?-1:0)))}onItemKey(e){if(e.key===`Escape`||e.key===`Tab`){e.key===`Escape`&&e.preventDefault(),this.close();return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;e.preventDefault();let n=this.enabledItems().indexOf(document.activeElement);this.focusItem(n===-1?0:n+(e.key===`ArrowDown`?1:-1))}pick(e){this.close(),this.picked.emit(e.id)}placeMenu(){let e=this.trigger()?.nativeElement;if(e===void 0)return;let t=e.getBoundingClientRect(),n=this.items().length*32+24,o=window.innerHeight-t.bottom;this.upward.set(o<n&&t.top>o)}close(){this.open.set(!1),this.trigger()?.nativeElement.focus()}enabledItems(){return[...this.host.nativeElement.querySelectorAll(`[role="menuitem"]:not(:disabled)`)]}focusItem(e){let t=this.enabledItems();t.length!==0&&t[(e+t.length)%t.length].focus()}static ɵfac=function(t){return new(t||i)};static ɵcmp=wc({type:i,selectors:[[`app-action-menu`]],viewQuery:function(t,n){t&1&&rg(n.trigger,Q,5),t&2&&UE()},hostBindings:function(t,n){t&1&&Jm(`pointerdown`,function(a){return n.onOutside(a)},wD)},inputs:{items:[1,`items`],label:[1,`label`],compact:[1,`compact`]},outputs:{picked:`picked`},decls:5,vars:7,consts:[[`trigger`,``],[1,`relative`],[`type`,`button`,`aria-haspopup`,`menu`,`data-testid`,`action-menu`,3,`click`,`keydown`,`title`],[`name`,`menu`,3,`size`],[`role`,`menu`,1,`absolute`,`right-0`,`z-50`,`w-56`,`rounded-md`,`border`,`border-ink-700`,`bg-panel`,`py-1`,`shadow-2xl`,3,`class`],[`role`,`menu`,1,`absolute`,`right-0`,`z-50`,`w-56`,`rounded-md`,`border`,`border-ink-700`,`bg-panel`,`py-1`,`shadow-2xl`],[`role`,`separator`,1,`my-1`,`border-t`,`border-ink-700`],[`role`,`none`],[`type`,`button`,`role`,`menuitem`,1,`mx-focus`,`flex`,`w-full`,`cursor-pointer`,`items-center`,`gap-2`,`px-3`,`py-1.5`,`text-left`,`text-[13px]`,`transition-colors`,`focus-visible:outline-none`,`disabled:cursor-not-allowed`,`disabled:opacity-40`,`disabled:hover:bg-transparent`,3,`click`,`keydown`,`disabled`],[3,`name`,`size`]],template:function(t,n){t&1&&(Oi(0,`div`,1)(1,`button`,2,0),Jm(`click`,function(){return n.toggle()})(`keydown`,function(a){return n.onTriggerKey(a)}),Gm(3,`app-icon`,3),Nc(),kE(4,P,3,3,`ul`,4),Nc()),t&2&&(ec(),nk(n.compact()?n.compactTriggerClass:`mx-btn mx-focus`),Wm(`title`,n.shownLabel()),Br(`aria-expanded`,n.open())(`aria-label`,n.shownLabel()),ec(2),Wm(`size`,n.compact()?15:16),ec(),SE(n.open()?4:-1))},dependencies:[My],encapsulation:2})}});export{V as n,G as t};
|