openboot 0.1.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/LICENSE +110 -0
- package/README.md +273 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +132 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/clean.d.ts +7 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +173 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +92 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/down.d.ts +5 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +33 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +560 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +14 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +243 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/reboot.d.ts +5 -0
- package/dist/commands/reboot.d.ts.map +1 -0
- package/dist/commands/reboot.js +15 -0
- package/dist/commands/reboot.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +200 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +200 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/up.d.ts +7 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +325 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +95 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/docker.d.ts +19 -0
- package/dist/lib/docker.d.ts.map +1 -0
- package/dist/lib/docker.js +511 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/health.d.ts +5 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +80 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/log.d.ts +11 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +51 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/ports.d.ts +13 -0
- package/dist/lib/ports.d.ts.map +1 -0
- package/dist/lib/ports.js +45 -0
- package/dist/lib/ports.js.map +1 -0
- package/dist/lib/prereqs.d.ts +8 -0
- package/dist/lib/prereqs.d.ts.map +1 -0
- package/dist/lib/prereqs.js +78 -0
- package/dist/lib/prereqs.js.map +1 -0
- package/dist/lib/process.d.ts +38 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +285 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/tail.d.ts +12 -0
- package/dist/lib/tail.d.ts.map +1 -0
- package/dist/lib/tail.js +136 -0
- package/dist/lib/tail.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,95 @@
|
|
|
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.findConfig = findConfig;
|
|
37
|
+
exports.loadConfig = loadConfig;
|
|
38
|
+
exports.detectPackageManager = detectPackageManager;
|
|
39
|
+
exports.getPackageManager = getPackageManager;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const yaml = __importStar(require("yaml"));
|
|
43
|
+
const CONFIG_FILES = ["boot.yaml", "boot.yml", "boot.json"];
|
|
44
|
+
/**
|
|
45
|
+
* Find the boot config file in a directory.
|
|
46
|
+
*/
|
|
47
|
+
function findConfig(dir = process.cwd()) {
|
|
48
|
+
for (const file of CONFIG_FILES) {
|
|
49
|
+
const p = path.join(dir, file);
|
|
50
|
+
if (fs.existsSync(p))
|
|
51
|
+
return p;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load and parse the boot config.
|
|
57
|
+
*/
|
|
58
|
+
function loadConfig(dir = process.cwd()) {
|
|
59
|
+
const configPath = findConfig(dir);
|
|
60
|
+
if (!configPath) {
|
|
61
|
+
throw new Error("No boot.yaml found. Run `boot init` to create one.");
|
|
62
|
+
}
|
|
63
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
64
|
+
let config;
|
|
65
|
+
if (configPath.endsWith(".json")) {
|
|
66
|
+
config = JSON.parse(raw);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
config = yaml.parse(raw);
|
|
70
|
+
}
|
|
71
|
+
if (!config.name) {
|
|
72
|
+
config.name = path.basename(dir);
|
|
73
|
+
}
|
|
74
|
+
return config;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Detect the package manager from lockfiles.
|
|
78
|
+
*/
|
|
79
|
+
function detectPackageManager(dir = process.cwd()) {
|
|
80
|
+
if (fs.existsSync(path.join(dir, "pnpm-lock.yaml")) ||
|
|
81
|
+
fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) {
|
|
82
|
+
return "pnpm";
|
|
83
|
+
}
|
|
84
|
+
if (fs.existsSync(path.join(dir, "yarn.lock"))) {
|
|
85
|
+
return "yarn";
|
|
86
|
+
}
|
|
87
|
+
return "npm";
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the resolved package manager for a config (or detect from lockfiles).
|
|
91
|
+
*/
|
|
92
|
+
function getPackageManager(config) {
|
|
93
|
+
return config?.packageManager || detectPackageManager();
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,gCAMC;AAKD,gCAoBC;AAKD,oDAaC;AAKD,8CAEC;AAlED,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAG7B,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAE5D;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjD,IAAI,MAAkB,CAAC;IACvB,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC/C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,EACpD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAAmB;IACnD,OAAO,MAAM,EAAE,cAAc,IAAI,oBAAoB,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BootConfig } from "../types";
|
|
2
|
+
export declare function isDockerAvailable(): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Start all Docker resources (compose services + standalone containers).
|
|
5
|
+
*/
|
|
6
|
+
export declare function startDocker(config: BootConfig): void;
|
|
7
|
+
/**
|
|
8
|
+
* Stop all Docker resources.
|
|
9
|
+
*/
|
|
10
|
+
export declare function stopDocker(config: BootConfig): void;
|
|
11
|
+
/**
|
|
12
|
+
* Get status of all Docker resources.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDockerStatus(config: BootConfig): Array<{
|
|
15
|
+
name: string;
|
|
16
|
+
status: string;
|
|
17
|
+
ports: string;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/lib/docker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;AAevD,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AA4cD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAiBpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAiBnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BxD"}
|
|
@@ -0,0 +1,511 @@
|
|
|
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.isDockerAvailable = isDockerAvailable;
|
|
37
|
+
exports.startDocker = startDocker;
|
|
38
|
+
exports.stopDocker = stopDocker;
|
|
39
|
+
exports.getDockerStatus = getDockerStatus;
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const yaml = __importStar(require("yaml"));
|
|
44
|
+
const log_1 = require("./log");
|
|
45
|
+
const ports_1 = require("./ports");
|
|
46
|
+
// ─── Helpers ────────────────────────────────────────────────
|
|
47
|
+
function getComposeCmd() {
|
|
48
|
+
try {
|
|
49
|
+
(0, child_process_1.execSync)("docker compose version", { stdio: "pipe" });
|
|
50
|
+
return "docker compose";
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return "docker-compose";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function isDockerAvailable() {
|
|
57
|
+
try {
|
|
58
|
+
(0, child_process_1.execSync)("docker info", { stdio: "pipe" });
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function isContainerRunning(container) {
|
|
66
|
+
try {
|
|
67
|
+
const status = (0, child_process_1.execSync)(`docker inspect -f '{{.State.Status}}' ${container}`, { stdio: "pipe" })
|
|
68
|
+
.toString()
|
|
69
|
+
.trim();
|
|
70
|
+
return status === "running";
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function containerExists(container) {
|
|
77
|
+
try {
|
|
78
|
+
(0, child_process_1.execSync)(`docker inspect ${container}`, { stdio: "pipe" });
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function waitForContainer(container, check, timeout) {
|
|
86
|
+
log_1.log.info(`Waiting for ${container}...`);
|
|
87
|
+
for (let i = 0; i < timeout; i++) {
|
|
88
|
+
try {
|
|
89
|
+
(0, child_process_1.execSync)(`docker exec ${container} ${check}`, { stdio: "pipe" });
|
|
90
|
+
log_1.log.success(`${container} is ready`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// not ready yet
|
|
95
|
+
}
|
|
96
|
+
(0, child_process_1.spawnSync)("sleep", ["1"]);
|
|
97
|
+
}
|
|
98
|
+
log_1.log.warn(`${container} may not be ready (timed out after ${timeout}s)`);
|
|
99
|
+
}
|
|
100
|
+
function findFreePort(startPort) {
|
|
101
|
+
for (let p = startPort + 1; p <= startPort + 10; p++) {
|
|
102
|
+
if (!(0, ports_1.isPortInUse)(p))
|
|
103
|
+
return p;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Resolve ${VAR:-default} in a port string to its actual value.
|
|
109
|
+
*/
|
|
110
|
+
function resolveHostPort(portStr) {
|
|
111
|
+
let str = String(portStr);
|
|
112
|
+
str = str.replace(/\$\{[^:}]+(:-([^}]+))?\}/g, (_match, _group1, defaultVal) => {
|
|
113
|
+
const varMatch = _match.match(/\$\{([^:}]+)/);
|
|
114
|
+
const varName = varMatch ? varMatch[1] : "";
|
|
115
|
+
return process.env[varName] || defaultVal || "";
|
|
116
|
+
});
|
|
117
|
+
const match = str.match(/(?:\d+\.\d+\.\d+\.\d+:)?(\d+):(\d+)/);
|
|
118
|
+
if (match) {
|
|
119
|
+
return {
|
|
120
|
+
host: parseInt(match[1], 10),
|
|
121
|
+
container: parseInt(match[2], 10),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
// ─── Raw Containers (docker run / docker start) ─────────────
|
|
127
|
+
/**
|
|
128
|
+
* Start standalone containers defined in config.docker.containers.
|
|
129
|
+
*/
|
|
130
|
+
function startContainers(containers) {
|
|
131
|
+
for (const ct of containers) {
|
|
132
|
+
// Already running?
|
|
133
|
+
if (isContainerRunning(ct.name)) {
|
|
134
|
+
log_1.log.success(`${ct.name} already running`);
|
|
135
|
+
if (ct.readyCheck) {
|
|
136
|
+
waitForContainer(ct.name, ct.readyCheck, ct.timeout || 30);
|
|
137
|
+
}
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Exists but stopped?
|
|
141
|
+
if (containerExists(ct.name)) {
|
|
142
|
+
// Check if ports are free before trying docker start
|
|
143
|
+
let portConflict = false;
|
|
144
|
+
if (ct.ports) {
|
|
145
|
+
for (const p of ct.ports) {
|
|
146
|
+
const resolved = resolveHostPort(p);
|
|
147
|
+
if (resolved && (0, ports_1.isPortInUse)(resolved.host)) {
|
|
148
|
+
portConflict = true;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (portConflict) {
|
|
154
|
+
// Port taken — remove old container and recreate with a free port
|
|
155
|
+
log_1.log.warn(`Port conflict for ${ct.name} — recreating on a free port...`);
|
|
156
|
+
try {
|
|
157
|
+
(0, child_process_1.execSync)(`docker rm -f ${ct.name}`, { stdio: "pipe" });
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// ignore
|
|
161
|
+
}
|
|
162
|
+
// Fall through to the "create new" block below
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
log_1.log.info(`Starting existing container ${ct.name}...`);
|
|
166
|
+
try {
|
|
167
|
+
(0, child_process_1.execSync)(`docker start ${ct.name}`, { stdio: "pipe" });
|
|
168
|
+
log_1.log.success(`${ct.name} started`);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
// If start fails for another reason (e.g. stale network), recreate
|
|
172
|
+
log_1.log.warn(`docker start failed for ${ct.name} — recreating...`);
|
|
173
|
+
try {
|
|
174
|
+
(0, child_process_1.execSync)(`docker rm -f ${ct.name}`, { stdio: "pipe" });
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// ignore
|
|
178
|
+
}
|
|
179
|
+
// Fall through to create new
|
|
180
|
+
}
|
|
181
|
+
if (isContainerRunning(ct.name)) {
|
|
182
|
+
if (ct.readyCheck) {
|
|
183
|
+
waitForContainer(ct.name, ct.readyCheck, ct.timeout || 30);
|
|
184
|
+
}
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Need to create — check port conflicts first
|
|
190
|
+
let portFlags = "";
|
|
191
|
+
if (ct.ports) {
|
|
192
|
+
for (const p of ct.ports) {
|
|
193
|
+
const resolved = resolveHostPort(p);
|
|
194
|
+
if (resolved && (0, ports_1.isPortInUse)(resolved.host)) {
|
|
195
|
+
const freePort = findFreePort(resolved.host);
|
|
196
|
+
if (freePort) {
|
|
197
|
+
log_1.log.warn(`Port ${resolved.host} in use — using ${freePort} for ${ct.name}`);
|
|
198
|
+
portFlags += ` -p ${freePort}:${resolved.container}`;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
log_1.log.error(`Port ${resolved.host} in use and no free port found for ${ct.name}`);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else if (resolved) {
|
|
206
|
+
portFlags += ` -p ${resolved.host}:${resolved.container}`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Build env flags
|
|
211
|
+
let envFlags = "";
|
|
212
|
+
if (ct.env) {
|
|
213
|
+
for (const [k, v] of Object.entries(ct.env)) {
|
|
214
|
+
envFlags += ` -e "${k}=${v}"`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Build volume flags
|
|
218
|
+
let volFlags = "";
|
|
219
|
+
if (ct.volumes) {
|
|
220
|
+
for (const v of ct.volumes) {
|
|
221
|
+
volFlags += ` -v ${v}`;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
log_1.log.info(`Creating container ${ct.name}...`);
|
|
225
|
+
try {
|
|
226
|
+
(0, child_process_1.execSync)(`docker run -d --name ${ct.name}${portFlags}${envFlags}${volFlags} ${ct.image}`, { stdio: "pipe" });
|
|
227
|
+
log_1.log.success(`${ct.name} started`);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
log_1.log.error(`Failed to create ${ct.name}: ${err.stderr?.toString().trim() || err.message}`);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (ct.readyCheck) {
|
|
234
|
+
waitForContainer(ct.name, ct.readyCheck, ct.timeout || 30);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Stop standalone containers.
|
|
240
|
+
*/
|
|
241
|
+
function stopContainers(containers) {
|
|
242
|
+
for (const ct of containers) {
|
|
243
|
+
if (isContainerRunning(ct.name)) {
|
|
244
|
+
log_1.log.info(`Stopping ${ct.name}...`);
|
|
245
|
+
try {
|
|
246
|
+
(0, child_process_1.execSync)(`docker stop ${ct.name}`, { stdio: "pipe" });
|
|
247
|
+
log_1.log.success(`${ct.name} stopped`);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
log_1.log.error(`Failed to stop ${ct.name}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
log_1.log.step(`${ct.name} is not running`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Get status of standalone containers.
|
|
260
|
+
*/
|
|
261
|
+
function getContainersStatus(containers) {
|
|
262
|
+
const results = [];
|
|
263
|
+
for (const ct of containers) {
|
|
264
|
+
let status = "not found";
|
|
265
|
+
let ports = "";
|
|
266
|
+
try {
|
|
267
|
+
status = (0, child_process_1.execSync)(`docker inspect -f '{{.State.Status}}' ${ct.name}`, { stdio: "pipe" })
|
|
268
|
+
.toString()
|
|
269
|
+
.trim();
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// not found
|
|
273
|
+
}
|
|
274
|
+
if (status === "running") {
|
|
275
|
+
try {
|
|
276
|
+
const portInfo = (0, child_process_1.execSync)(`docker port ${ct.name}`, { stdio: "pipe" })
|
|
277
|
+
.toString()
|
|
278
|
+
.trim();
|
|
279
|
+
ports = portInfo.split("\n").map((l) => l.split("->").pop()?.trim() || "").join(", ");
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// ignore
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
results.push({ name: ct.name, status, ports });
|
|
286
|
+
}
|
|
287
|
+
return results;
|
|
288
|
+
}
|
|
289
|
+
// ─── Compose Services ───────────────────────────────────────
|
|
290
|
+
function startComposeServices(config) {
|
|
291
|
+
if (!config.docker?.composeFile && !config.docker?.services?.length)
|
|
292
|
+
return;
|
|
293
|
+
const compose = getComposeCmd();
|
|
294
|
+
const file = config.docker.composeFile || "docker-compose.yml";
|
|
295
|
+
const services = config.docker.services || [];
|
|
296
|
+
// 1. All already running?
|
|
297
|
+
const allRunning = services.length > 0 &&
|
|
298
|
+
services.every((svc) => isContainerRunning(svc.container || svc.name));
|
|
299
|
+
if (allRunning) {
|
|
300
|
+
log_1.log.success("Docker services already running");
|
|
301
|
+
waitForAllComposeServices(services);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
// 2. Containers exist but stopped — start directly
|
|
305
|
+
const allExist = services.length > 0 &&
|
|
306
|
+
services.every((svc) => containerExists(svc.container || svc.name));
|
|
307
|
+
if (allExist) {
|
|
308
|
+
log_1.log.info("Starting existing Docker containers...");
|
|
309
|
+
for (const svc of services) {
|
|
310
|
+
const container = svc.container || svc.name;
|
|
311
|
+
if (!isContainerRunning(container)) {
|
|
312
|
+
try {
|
|
313
|
+
(0, child_process_1.execSync)(`docker start ${container}`, { stdio: "pipe" });
|
|
314
|
+
log_1.log.success(`${container} started`);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
log_1.log.error(`Failed to start ${container}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
waitForAllComposeServices(services);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
// 3. Check for port conflicts before compose
|
|
325
|
+
const conflicts = getComposePortConflicts(file);
|
|
326
|
+
if (conflicts.length > 0) {
|
|
327
|
+
for (const conflict of conflicts) {
|
|
328
|
+
const freePort = findFreePort(conflict.hostPort);
|
|
329
|
+
if (!freePort) {
|
|
330
|
+
log_1.log.error(`Port ${conflict.hostPort} in use and no free port found for ${conflict.service}`);
|
|
331
|
+
log_1.log.step("Check what's using it: docker ps");
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
log_1.log.warn(`Port ${conflict.hostPort} in use — using ${freePort} for ${conflict.service}`);
|
|
335
|
+
const image = getComposeServiceImage(file, conflict.service);
|
|
336
|
+
const svc = services.find((s) => s.name === conflict.service);
|
|
337
|
+
const container = svc?.container || conflict.service;
|
|
338
|
+
const envVars = getComposeServiceEnv(file, conflict.service);
|
|
339
|
+
const envFlags = envVars.map((e) => `-e "${e}"`).join(" ");
|
|
340
|
+
try {
|
|
341
|
+
(0, child_process_1.execSync)(`docker rm -f ${container} 2>/dev/null`, { stdio: "pipe" });
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
// ignore
|
|
345
|
+
}
|
|
346
|
+
try {
|
|
347
|
+
(0, child_process_1.execSync)(`docker run -d --name ${container} -p ${freePort}:${conflict.containerPort} ${envFlags} ${image}`, { stdio: "pipe" });
|
|
348
|
+
log_1.log.success(`${conflict.service} started on port ${freePort} (mapped to container:${conflict.containerPort})`);
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
log_1.log.error(`Failed to start ${conflict.service}: ${err.message}`);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
waitForAllComposeServices(services);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
// 4. Normal compose up
|
|
359
|
+
log_1.log.info("Starting Docker services...");
|
|
360
|
+
try {
|
|
361
|
+
(0, child_process_1.execSync)(`${compose} -f ${file} up -d`, { stdio: "inherit" });
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
log_1.log.error("Failed to start Docker services");
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
waitForAllComposeServices(services);
|
|
368
|
+
}
|
|
369
|
+
function stopComposeServices(config) {
|
|
370
|
+
if (!config.docker?.composeFile && !config.docker?.services?.length)
|
|
371
|
+
return;
|
|
372
|
+
const compose = getComposeCmd();
|
|
373
|
+
const file = config.docker.composeFile || "docker-compose.yml";
|
|
374
|
+
log_1.log.info("Stopping Docker services...");
|
|
375
|
+
try {
|
|
376
|
+
(0, child_process_1.execSync)(`${compose} -f ${file} down`, { stdio: "inherit" });
|
|
377
|
+
log_1.log.success("Docker services stopped");
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
log_1.log.error("Failed to stop Docker services");
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function waitForAllComposeServices(services) {
|
|
384
|
+
if (!services)
|
|
385
|
+
return;
|
|
386
|
+
for (const svc of services) {
|
|
387
|
+
if (svc.readyCheck) {
|
|
388
|
+
waitForContainer(svc.container || svc.name, svc.readyCheck, svc.timeout || 30);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
function getComposePortConflicts(composeFile) {
|
|
393
|
+
const conflicts = [];
|
|
394
|
+
try {
|
|
395
|
+
const raw = fs.readFileSync(path.resolve(composeFile), "utf-8");
|
|
396
|
+
const compose = yaml.parse(raw);
|
|
397
|
+
if (compose?.services) {
|
|
398
|
+
for (const [name, svc] of Object.entries(compose.services)) {
|
|
399
|
+
const ports = svc?.ports || [];
|
|
400
|
+
for (const p of ports) {
|
|
401
|
+
const resolved = resolveHostPort(String(p));
|
|
402
|
+
if (resolved && (0, ports_1.isPortInUse)(resolved.host)) {
|
|
403
|
+
conflicts.push({
|
|
404
|
+
hostPort: resolved.host,
|
|
405
|
+
containerPort: resolved.container,
|
|
406
|
+
service: name,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
// Can't parse
|
|
415
|
+
}
|
|
416
|
+
return conflicts;
|
|
417
|
+
}
|
|
418
|
+
function getComposeServiceImage(composeFile, serviceName) {
|
|
419
|
+
try {
|
|
420
|
+
const raw = fs.readFileSync(path.resolve(composeFile), "utf-8");
|
|
421
|
+
const compose = yaml.parse(raw);
|
|
422
|
+
return compose?.services?.[serviceName]?.image || "postgres:15";
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
return "postgres:15";
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function getComposeServiceEnv(composeFile, serviceName) {
|
|
429
|
+
try {
|
|
430
|
+
const raw = fs.readFileSync(path.resolve(composeFile), "utf-8");
|
|
431
|
+
const compose = yaml.parse(raw);
|
|
432
|
+
const env = compose?.services?.[serviceName]?.environment;
|
|
433
|
+
if (!env)
|
|
434
|
+
return [];
|
|
435
|
+
if (Array.isArray(env))
|
|
436
|
+
return env;
|
|
437
|
+
return Object.entries(env).map(([k, v]) => `${k}=${v}`);
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
return [];
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// ─── Public API ─────────────────────────────────────────────
|
|
444
|
+
/**
|
|
445
|
+
* Start all Docker resources (compose services + standalone containers).
|
|
446
|
+
*/
|
|
447
|
+
function startDocker(config) {
|
|
448
|
+
if (!config.docker)
|
|
449
|
+
return;
|
|
450
|
+
if (!isDockerAvailable()) {
|
|
451
|
+
log_1.log.warn("Docker is not running — skipping Docker services");
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
// Compose-based services
|
|
455
|
+
if (config.docker.composeFile || config.docker.services?.length) {
|
|
456
|
+
startComposeServices(config);
|
|
457
|
+
}
|
|
458
|
+
// Standalone containers
|
|
459
|
+
if (config.docker.containers?.length) {
|
|
460
|
+
startContainers(config.docker.containers);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Stop all Docker resources.
|
|
465
|
+
*/
|
|
466
|
+
function stopDocker(config) {
|
|
467
|
+
if (!config.docker)
|
|
468
|
+
return;
|
|
469
|
+
if (!isDockerAvailable()) {
|
|
470
|
+
log_1.log.warn("Docker is not running — skipping");
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
// Stop standalone containers first
|
|
474
|
+
if (config.docker.containers?.length) {
|
|
475
|
+
stopContainers(config.docker.containers);
|
|
476
|
+
}
|
|
477
|
+
// Stop compose services
|
|
478
|
+
if (config.docker.composeFile || config.docker.services?.length) {
|
|
479
|
+
stopComposeServices(config);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Get status of all Docker resources.
|
|
484
|
+
*/
|
|
485
|
+
function getDockerStatus(config) {
|
|
486
|
+
if (!config.docker || !isDockerAvailable())
|
|
487
|
+
return [];
|
|
488
|
+
const results = [];
|
|
489
|
+
// Compose services
|
|
490
|
+
if (config.docker.services) {
|
|
491
|
+
for (const svc of config.docker.services) {
|
|
492
|
+
const container = svc.container || svc.name;
|
|
493
|
+
let status = "unknown";
|
|
494
|
+
try {
|
|
495
|
+
status = (0, child_process_1.execSync)(`docker inspect -f '{{.State.Status}}' ${container}`, { stdio: "pipe" })
|
|
496
|
+
.toString()
|
|
497
|
+
.trim();
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
status = "not found";
|
|
501
|
+
}
|
|
502
|
+
results.push({ name: svc.name, status, ports: "" });
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
// Standalone containers
|
|
506
|
+
if (config.docker.containers) {
|
|
507
|
+
results.push(...getContainersStatus(config.docker.containers));
|
|
508
|
+
}
|
|
509
|
+
return results;
|
|
510
|
+
}
|
|
511
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/lib/docker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,8CAOC;AA+cD,kCAiBC;AAKD,gCAiBC;AAKD,0CAgCC;AArjBD,iDAAoD;AACpD,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAE7B,+BAA4B;AAC5B,mCAAsC;AAEtC,+DAA+D;AAE/D,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,yCAAyC,SAAS,EAAE,EACpD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;aACE,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,KAAK,SAAS,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACxC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,kBAAkB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,SAAiB,EACjB,KAAa,EACb,OAAe;IAEf,SAAG,CAAC,IAAI,CAAC,eAAe,SAAS,KAAK,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,eAAe,SAAS,IAAI,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,SAAG,CAAC,OAAO,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,IAAA,yBAAS,EAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,SAAG,CAAC,IAAI,CAAC,GAAG,SAAS,sCAAsC,OAAO,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,IAAA,mBAAW,EAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,OAAe;IAEf,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAE1B,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,2BAA2B,EAC3B,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,EAAE,CAAC;IAClD,CAAC,CACF,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAE/D;;GAEG;AACH,SAAS,eAAe,CAAC,UAA6B;IACpD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,mBAAmB;QACnB,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,SAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC;YAC1C,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,SAAS;QACX,CAAC;QAED,sBAAsB;QACtB,IAAI,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,qDAAqD;YACrD,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACb,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,QAAQ,IAAI,IAAA,mBAAW,EAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3C,YAAY,GAAG,IAAI,CAAC;wBACpB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,kEAAkE;gBAClE,SAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,iCAAiC,CAAC,CAAC;gBACxE,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,+CAA+C;YACjD,CAAC;iBAAM,CAAC;gBACN,SAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvD,SAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,mEAAmE;oBACnE,SAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC;oBAC/D,IAAI,CAAC;wBACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzD,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,6BAA6B;gBAC/B,CAAC;gBAED,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;wBAClB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,QAAQ,IAAI,IAAA,mBAAW,EAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC7C,IAAI,QAAQ,EAAE,CAAC;wBACb,SAAG,CAAC,IAAI,CACN,QAAQ,QAAQ,CAAC,IAAI,mBAAmB,QAAQ,QAAQ,EAAE,CAAC,IAAI,EAAE,CAClE,CAAC;wBACF,SAAS,IAAI,OAAO,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACvD,CAAC;yBAAM,CAAC;wBACN,SAAG,CAAC,KAAK,CACP,QAAQ,QAAQ,CAAC,IAAI,sCAAsC,EAAE,CAAC,IAAI,EAAE,CACrE,CAAC;wBACF,SAAS;oBACX,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,EAAE,CAAC;oBACpB,SAAS,IAAI,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBAC3B,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,SAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,IAAA,wBAAQ,EACN,wBAAwB,EAAE,CAAC,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC,KAAK,EAAE,EAC/E,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;YACF,SAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,SAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,SAAS;QACX,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAA6B;IACnD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,SAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACtD,SAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,iBAAiB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,UAA6B;IAE7B,MAAM,OAAO,GAA2D,EAAE,CAAC;IAE3E,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,WAAW,CAAC;QACzB,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,wBAAQ,EACf,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAClD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;iBACE,QAAQ,EAAE;iBACV,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAA,wBAAQ,EACvB,eAAe,EAAE,CAAC,IAAI,EAAE,EACxB,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;qBACE,QAAQ,EAAE;qBACV,IAAI,EAAE,CAAC;gBACV,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+DAA+D;AAE/D,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM;QAAE,OAAO;IAE5E,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,GAAG,CAAC;QACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzE,IAAI,UAAU,EAAE,CAAC;QACf,SAAG,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC/C,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,mDAAmD;IACnD,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,GAAG,CAAC;QACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,IAAI,QAAQ,EAAE,CAAC;QACb,SAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,IAAA,wBAAQ,EAAC,gBAAgB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzD,SAAG,CAAC,OAAO,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAG,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,6CAA6C;IAC7C,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAG,CAAC,KAAK,CACP,QAAQ,QAAQ,CAAC,QAAQ,sCAAsC,QAAQ,CAAC,OAAO,EAAE,CAClF,CAAC;gBACF,SAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,SAAG,CAAC,IAAI,CACN,QAAQ,QAAQ,CAAC,QAAQ,mBAAmB,QAAQ,QAAQ,QAAQ,CAAC,OAAO,EAAE,CAC/E,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC;YACrD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE3D,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,gBAAgB,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,IAAA,wBAAQ,EACN,wBAAwB,SAAS,OAAO,QAAQ,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,IAAI,KAAK,EAAE,EACjG,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;gBACF,SAAG,CAAC,OAAO,CACT,GAAG,QAAQ,CAAC,OAAO,oBAAoB,QAAQ,yBAAyB,QAAQ,CAAC,aAAa,GAAG,CAClG,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,SAAG,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;QACH,CAAC;QAED,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,SAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,GAAG,OAAO,OAAO,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,SAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAkB;IAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM;QAAE,OAAO;IAE5E,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAEhE,SAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,GAAG,OAAO,OAAO,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,SAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,SAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAuD;IAEvD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,gBAAgB,CACd,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,EACzB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,OAAO,IAAI,EAAE,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,WAAmB;IAEnB,MAAM,SAAS,GAIV,EAAE,CAAC;IAER,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChE,MAAM,KAAK,GAAU,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,IAAI,QAAQ,IAAI,IAAA,mBAAW,EAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3C,SAAS,CAAC,IAAI,CAAC;4BACb,QAAQ,EAAE,QAAQ,CAAC,IAAI;4BACvB,aAAa,EAAE,QAAQ,CAAC,SAAS;4BACjC,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAC7B,WAAmB,EACnB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,OAAO,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,aAAa,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAAmB,EACnB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1D,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,+DAA+D;AAE/D;;GAEG;AACH,SAAgB,WAAW,CAAC,MAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO;IAE3B,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,SAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAChE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QACrC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAkB;IAC3C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO;IAE3B,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,SAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QACrC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAChE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,EAAE,CAAC;IAEtD,MAAM,OAAO,GAA2D,EAAE,CAAC;IAE3E,mBAAmB;IACnB,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;YAC5C,IAAI,MAAM,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAA,wBAAQ,EACf,yCAAyC,SAAS,EAAE,EACpD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;qBACE,QAAQ,EAAE;qBACV,IAAI,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,WAAW,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/lib/health.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAalB"}
|