@phystack/device-simulator 6.3.4 → 6.3.6
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/command.d.ts +6 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +44 -0
- package/dist/command.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +20 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +2 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +19 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/run.d.ts +13 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +353 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/start.d.ts +6 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +216 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/services/dev-token.d.ts +2 -0
- package/dist/services/dev-token.d.ts.map +1 -0
- package/dist/services/dev-token.js +36 -0
- package/dist/services/dev-token.js.map +1 -0
- package/dist/services/env.d.ts +2 -0
- package/dist/services/env.d.ts.map +1 -0
- package/dist/services/env.js +14 -0
- package/dist/services/env.js.map +1 -0
- package/dist/simulator/index.d.ts +19 -0
- package/dist/simulator/index.d.ts.map +1 -0
- package/dist/simulator/index.js +153 -0
- package/dist/simulator/index.js.map +1 -0
- package/dist/simulator/local-server.d.ts +24 -0
- package/dist/simulator/local-server.d.ts.map +1 -0
- package/dist/simulator/local-server.js +125 -0
- package/dist/simulator/local-server.js.map +1 -0
- package/dist/simulator/logger.d.ts +11 -0
- package/dist/simulator/logger.d.ts.map +1 -0
- package/dist/simulator/logger.js +42 -0
- package/dist/simulator/logger.js.map +1 -0
- package/dist/simulator/message-router.d.ts +34 -0
- package/dist/simulator/message-router.d.ts.map +1 -0
- package/dist/simulator/message-router.js +388 -0
- package/dist/simulator/message-router.js.map +1 -0
- package/dist/simulator/twin-cache.d.ts +16 -0
- package/dist/simulator/twin-cache.d.ts.map +1 -0
- package/dist/simulator/twin-cache.js +54 -0
- package/dist/simulator/twin-cache.js.map +1 -0
- package/dist/simulator/types.d.ts +48 -0
- package/dist/simulator/types.d.ts.map +1 -0
- package/dist/simulator/types.js +16 -0
- package/dist/simulator/types.js.map +1 -0
- package/dist/utils/config-paths.d.ts +12 -0
- package/dist/utils/config-paths.d.ts.map +1 -0
- package/dist/utils/config-paths.js +33 -0
- package/dist/utils/config-paths.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +37 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/simulator-config.d.ts +25 -0
- package/dist/utils/simulator-config.d.ts.map +1 -0
- package/dist/utils/simulator-config.js +140 -0
- package/dist/utils/simulator-config.js.map +1 -0
- package/dist/utils/tenant-storage.d.ts +14 -0
- package/dist/utils/tenant-storage.d.ts.map +1 -0
- package/dist/utils/tenant-storage.js +65 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/package.json +5 -2
- package/CHANGELOG.md +0 -42
- package/build-binary.sh +0 -37
- package/src/__tests__/e2e/binary.e2e.test.ts +0 -394
- package/src/__tests__/preload.ts +0 -44
- package/src/command.ts +0 -66
- package/src/commands/__tests__/run-helpers.test.ts +0 -181
- package/src/commands/list.ts +0 -25
- package/src/commands/remove.ts +0 -16
- package/src/commands/run.ts +0 -518
- package/src/commands/start.ts +0 -309
- package/src/index.ts +0 -45
- package/src/services/__tests__/dev-token.test.ts +0 -156
- package/src/services/dev-token.ts +0 -52
- package/src/services/env.ts +0 -10
- package/src/simulator/__tests__/message-router.test.ts +0 -782
- package/src/simulator/__tests__/twin-cache.test.ts +0 -129
- package/src/simulator/index.ts +0 -200
- package/src/simulator/local-server.ts +0 -184
- package/src/simulator/logger.ts +0 -44
- package/src/simulator/message-router.ts +0 -525
- package/src/simulator/twin-cache.ts +0 -61
- package/src/simulator/types.ts +0 -53
- package/src/utils/__tests__/simulator-config.test.ts +0 -230
- package/src/utils/config-paths.ts +0 -38
- package/src/utils/index.ts +0 -41
- package/src/utils/simulator-config.ts +0 -185
- package/src/utils/tenant-storage.ts +0 -106
- package/tsconfig.json +0 -12
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { SimulatorConfig, DeviceConfig, AppConfig, TwinResponse, EventPayload, } from "./simulator/types";
|
|
2
|
+
export { AppTypeEnum, TwinTypeEnum } from "./simulator/types";
|
|
3
|
+
export type { SimulatorConnectConfig } from "./utils/simulator-config";
|
|
4
|
+
export declare function buildSimulatorCommand(): import("commander").Command;
|
|
5
|
+
export default buildSimulatorCommand;
|
|
6
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAUA,YAAY,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOvE,wBAAgB,qBAAqB,gCAsCpC;AAED,eAAe,qBAAqB,CAAC"}
|
package/dist/command.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TwinTypeEnum = exports.AppTypeEnum = void 0;
|
|
7
|
+
exports.buildSimulatorCommand = buildSimulatorCommand;
|
|
8
|
+
const commander_1 = require("commander");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
const start_1 = __importDefault(require("./commands/start"));
|
|
11
|
+
const run_1 = __importDefault(require("./commands/run"));
|
|
12
|
+
const list_1 = __importDefault(require("./commands/list"));
|
|
13
|
+
const remove_1 = __importDefault(require("./commands/remove"));
|
|
14
|
+
var types_1 = require("./simulator/types");
|
|
15
|
+
Object.defineProperty(exports, "AppTypeEnum", { enumerable: true, get: function () { return types_1.AppTypeEnum; } });
|
|
16
|
+
Object.defineProperty(exports, "TwinTypeEnum", { enumerable: true, get: function () { return types_1.TwinTypeEnum; } });
|
|
17
|
+
function buildSimulatorCommand() {
|
|
18
|
+
const simulator = new commander_1.Command("simulator");
|
|
19
|
+
simulator.description("Local device simulator for app development");
|
|
20
|
+
simulator
|
|
21
|
+
.command("start")
|
|
22
|
+
.description("Start the local simulator server")
|
|
23
|
+
.option("-p, --port <port>", "Port to listen on", "55000")
|
|
24
|
+
.option("--connect <name>", "Connect to phyhub as a provisioned device")
|
|
25
|
+
.action((0, utils_1.handleError)(start_1.default));
|
|
26
|
+
simulator
|
|
27
|
+
.command("run <path>")
|
|
28
|
+
.description("Run an app connected to the simulator (reconciles twin, spawns dev server)")
|
|
29
|
+
.option("--type <type>", "Override app type detection (screen or edge)")
|
|
30
|
+
.option("--dev-command <command>", "Override dev command (default: npm run dev)")
|
|
31
|
+
.option("--settings-dir <path>", "Settings directory path (default: src/settings)")
|
|
32
|
+
.action((0, utils_1.handleError)(run_1.default));
|
|
33
|
+
simulator
|
|
34
|
+
.command("list")
|
|
35
|
+
.description("List all provisioned simulator devices")
|
|
36
|
+
.action(list_1.default);
|
|
37
|
+
simulator
|
|
38
|
+
.command("remove <name>")
|
|
39
|
+
.description("Remove a saved simulator device")
|
|
40
|
+
.action(remove_1.default);
|
|
41
|
+
return simulator;
|
|
42
|
+
}
|
|
43
|
+
exports.default = buildSimulatorCommand;
|
|
44
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;AAyBA,sDAsCC;AA/DD,yCAAoC;AACpC,mCAAsC;AACtC,6DAAqC;AACrC,yDAAiC;AACjC,2DAA4C;AAC5C,+DAAgD;AAYhD,2CAA8D;AAArD,oGAAA,WAAW,OAAA;AAAE,qGAAA,YAAY,OAAA;AAQlC,SAAgB,qBAAqB;IACnC,MAAM,SAAS,GAAG,IAAI,mBAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAEpE,SAAS;SACN,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;SACvE,MAAM,CAAC,IAAA,mBAAW,EAAC,eAAK,CAAC,CAAC,CAAC;IAE9B,SAAS;SACN,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CACV,4EAA4E,CAC7E;SACA,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;SACvE,MAAM,CACL,yBAAyB,EACzB,6CAA6C,CAC9C;SACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;SACA,MAAM,CAAC,IAAA,mBAAW,EAAC,aAAG,CAAC,CAAC,CAAC;IAE5B,SAAS;SACN,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,cAAa,CAAC,CAAC;IAEzB,SAAS;SACN,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,gBAAe,CAAC,CAAC;IAE3B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kBAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,aAAa,IAAI,IAAI,CAsB5C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = simulatorList;
|
|
4
|
+
const simulator_config_1 = require("../utils/simulator-config");
|
|
5
|
+
function simulatorList() {
|
|
6
|
+
const devices = (0, simulator_config_1.listSimulators)();
|
|
7
|
+
if (devices.length === 0) {
|
|
8
|
+
console.log('No provisioned simulators. Use "phy simulator start --connect <name>" to create one.');
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const header = `${"NAME".padEnd(20)} ${"ENV".padEnd(8)} ${"DEVICE ID".padEnd(38)} PROVISIONED`;
|
|
12
|
+
console.log(header);
|
|
13
|
+
console.log("-".repeat(header.length));
|
|
14
|
+
for (const d of devices) {
|
|
15
|
+
const envLabel = d.environment === "prod" || !d.environment ? "" : d.environment;
|
|
16
|
+
const date = d.provisionedAt ? d.provisionedAt.split("T")[0] : "unknown";
|
|
17
|
+
console.log(`${d.name.padEnd(20)} ${envLabel.padEnd(8)} ${d.deviceId.padEnd(38)} ${date}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;AAEA,gCAsBC;AAxBD,gEAA2D;AAE3D,SAAwB,aAAa;IACnC,MAAM,OAAO,GAAG,IAAA,iCAAc,GAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,sFAAsF,CACvF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GACZ,CAAC,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAClE,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAa1D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = simulatorRemove;
|
|
4
|
+
const simulator_config_1 = require("../utils/simulator-config");
|
|
5
|
+
function simulatorRemove(name) {
|
|
6
|
+
if (!name) {
|
|
7
|
+
console.error("Usage: phy simulator remove <name>");
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const removed = (0, simulator_config_1.removeSimulator)(name);
|
|
11
|
+
if (removed) {
|
|
12
|
+
console.log(`Removed simulator "${name}".`);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error(`Simulator "${name}" not found.`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":";;AAEA,kCAaC;AAfD,gEAA4D;AAE5D,SAAwB,eAAe,CAAC,IAAY;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,kCAAe,EAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,cAAc,IAAI,cAAc,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AppTypeEnum } from "../simulator/types";
|
|
2
|
+
export declare function resolveAppType(optionType?: string, pkgType?: string): AppTypeEnum;
|
|
3
|
+
declare const _default: (appPath: string, options?: {
|
|
4
|
+
type?: string;
|
|
5
|
+
devCommand?: string;
|
|
6
|
+
settingsDir?: string;
|
|
7
|
+
}) => Promise<void>;
|
|
8
|
+
export default _default;
|
|
9
|
+
export declare function resolveStartCommand(options: {
|
|
10
|
+
devCommand?: string;
|
|
11
|
+
}, pkg: any, appType: AppTypeEnum): string | undefined;
|
|
12
|
+
export declare function buildDockerRunArgs(config: any, image: string, twinId: string): string[];
|
|
13
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAkB1E,wBAAgB,cAAc,CAC5B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,WAAW,CAab;yBA4GC,SAAS,MAAM,EACf,UAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,KACzE,OAAO,CAAC,IAAI,CAAC;AAHhB,wBAmIE;AAEF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,SAAS,CAUpB;AAsDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAoGV"}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveAppType = resolveAppType;
|
|
7
|
+
exports.resolveStartCommand = resolveStartCommand;
|
|
8
|
+
exports.buildDockerRunArgs = buildDockerRunArgs;
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const child_process_1 = require("child_process");
|
|
13
|
+
const socket_io_client_1 = require("socket.io-client");
|
|
14
|
+
const simulator_config_1 = require("../utils/simulator-config");
|
|
15
|
+
const types_1 = require("../simulator/types");
|
|
16
|
+
const SIMULATOR_URL = "http://localhost:55000";
|
|
17
|
+
const APP_TYPE_TO_TWIN_TYPE = {
|
|
18
|
+
[types_1.AppTypeEnum.Screen]: types_1.TwinTypeEnum.Screen,
|
|
19
|
+
[types_1.AppTypeEnum.Edge]: types_1.TwinTypeEnum.Edge,
|
|
20
|
+
};
|
|
21
|
+
const SUPPORTED_APP_TYPES = new Set(Object.values(types_1.AppTypeEnum));
|
|
22
|
+
function resolveAppType(optionType, pkgType) {
|
|
23
|
+
const raw = (optionType || pkgType || "").toLowerCase();
|
|
24
|
+
if (!raw) {
|
|
25
|
+
throw new Error('Cannot detect app type. Set "application-type" in package.json or pass --type.');
|
|
26
|
+
}
|
|
27
|
+
if (!SUPPORTED_APP_TYPES.has(raw)) {
|
|
28
|
+
throw new Error(`Unsupported app type "${raw}". Supported types: ${[...SUPPORTED_APP_TYPES].join(", ")}`);
|
|
29
|
+
}
|
|
30
|
+
return raw;
|
|
31
|
+
}
|
|
32
|
+
async function tryReadSettingsFiles(appPath, files) {
|
|
33
|
+
for (const settingsPath of files) {
|
|
34
|
+
if (await fs_extra_1.default.pathExists(settingsPath)) {
|
|
35
|
+
try {
|
|
36
|
+
const data = await fs_extra_1.default.readJSON(settingsPath);
|
|
37
|
+
const settings = data?.app?.gridApp?.settings;
|
|
38
|
+
if (settings) {
|
|
39
|
+
console.log(chalk_1.default.dim(`Read settings from ${path_1.default.relative(appPath, settingsPath)}`));
|
|
40
|
+
return settings;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
console.log(`[simulator] Failed to read ${path_1.default.relative(appPath, settingsPath)}: ${err.message}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
async function readLocalSettings(appPath, settingsDir = "src/settings") {
|
|
51
|
+
const settingsFiles = [path_1.default.join(appPath, settingsDir, "index.json")];
|
|
52
|
+
const settings = await tryReadSettingsFiles(appPath, settingsFiles);
|
|
53
|
+
if (settings)
|
|
54
|
+
return settings;
|
|
55
|
+
const initScript = path_1.default.join(appPath, "scripts", "init-settings.js");
|
|
56
|
+
if (await fs_extra_1.default.pathExists(initScript)) {
|
|
57
|
+
console.log(chalk_1.default.dim("No settings found, running init-settings.js..."));
|
|
58
|
+
try {
|
|
59
|
+
(0, child_process_1.execSync)("node scripts/init-settings.js", {
|
|
60
|
+
cwd: appPath,
|
|
61
|
+
stdio: "pipe",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.log(`[simulator] init-settings.js failed: ${err.message}`);
|
|
66
|
+
}
|
|
67
|
+
const retrySettings = await tryReadSettingsFiles(appPath, settingsFiles);
|
|
68
|
+
if (retrySettings)
|
|
69
|
+
return retrySettings;
|
|
70
|
+
}
|
|
71
|
+
return {};
|
|
72
|
+
}
|
|
73
|
+
function connectSimulator() {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const socket = (0, socket_io_client_1.io)(SIMULATOR_URL, {
|
|
76
|
+
reconnectionAttempts: 1,
|
|
77
|
+
timeout: 3000,
|
|
78
|
+
});
|
|
79
|
+
socket.on("connect", () => resolve(socket));
|
|
80
|
+
socket.on("connect_error", (err) => {
|
|
81
|
+
reject(new Error(`Cannot connect to simulator: ${err.message}`));
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function sendSimulatorMessage(socket, payload) {
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
const timer = setTimeout(() => {
|
|
88
|
+
reject(new Error("Timeout waiting for simulator response"));
|
|
89
|
+
}, 10000);
|
|
90
|
+
socket.emit("simulator", payload, (response) => {
|
|
91
|
+
clearTimeout(timer);
|
|
92
|
+
resolve(response);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async function createTwinViaSimulator(type, desiredProperties, reuseId) {
|
|
97
|
+
const socket = await connectSimulator();
|
|
98
|
+
try {
|
|
99
|
+
const response = await sendSimulatorMessage(socket, {
|
|
100
|
+
method: "createInstanceTwin",
|
|
101
|
+
data: { type, desiredProperties, id: reuseId },
|
|
102
|
+
});
|
|
103
|
+
if (response?.status === "success" && response?.twin) {
|
|
104
|
+
return response.twin;
|
|
105
|
+
}
|
|
106
|
+
throw new Error(response?.message || "Failed to create twin");
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
socket.disconnect();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.default = async (appPath, options = {}) => {
|
|
113
|
+
const resolvedPath = path_1.default.resolve(appPath);
|
|
114
|
+
if (!(await fs_extra_1.default.pathExists(resolvedPath))) {
|
|
115
|
+
console.error(chalk_1.default.red(`Path does not exist: ${resolvedPath}`));
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
const pkgPath = path_1.default.join(resolvedPath, "package.json");
|
|
119
|
+
if (!(await fs_extra_1.default.pathExists(pkgPath))) {
|
|
120
|
+
console.error(chalk_1.default.red(`No package.json found at ${resolvedPath}. If this is a Python edge app, ensure the scaffold includes a package.json with "application-type": "edge".`));
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const pkg = await fs_extra_1.default.readJSON(pkgPath);
|
|
124
|
+
const appName = pkg.name || path_1.default.basename(resolvedPath);
|
|
125
|
+
const appType = resolveAppType(options.type, pkg["application-type"]);
|
|
126
|
+
const startCommand = resolveStartCommand(options, pkg, appType);
|
|
127
|
+
let isRunning = false;
|
|
128
|
+
try {
|
|
129
|
+
const socket = await connectSimulator();
|
|
130
|
+
socket.disconnect();
|
|
131
|
+
isRunning = true;
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.log(`[simulator] Connection check failed: ${err.message}`);
|
|
135
|
+
isRunning = false;
|
|
136
|
+
}
|
|
137
|
+
if (!isRunning) {
|
|
138
|
+
console.error(chalk_1.default.red("Simulator is not running. Start it first with `phy simulator start`."));
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
const localTenantId = "local";
|
|
142
|
+
const appConfig = await (0, simulator_config_1.getAppConfigByPath)(localTenantId, resolvedPath);
|
|
143
|
+
let twinId = appConfig?.twinId;
|
|
144
|
+
const persistedTwinId = twinId;
|
|
145
|
+
const localSettings = await readLocalSettings(resolvedPath, options.settingsDir);
|
|
146
|
+
if (Object.keys(localSettings).length > 0) {
|
|
147
|
+
console.log(chalk_1.default.green(`Loaded ${Object.keys(localSettings).length} settings from local files`));
|
|
148
|
+
}
|
|
149
|
+
const twinType = APP_TYPE_TO_TWIN_TYPE[appType];
|
|
150
|
+
if (persistedTwinId) {
|
|
151
|
+
console.log(chalk_1.default.dim(`Reusing instance ID ${persistedTwinId} for ${appName}`));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(chalk_1.default.dim(`Creating new ${appType} instance for ${appName}...`));
|
|
155
|
+
}
|
|
156
|
+
const twin = await createTwinViaSimulator(twinType, { settings: localSettings, appName, appVersion: pkg.version || "0.0.0" }, persistedTwinId);
|
|
157
|
+
twinId = twin.id;
|
|
158
|
+
if (persistedTwinId) {
|
|
159
|
+
console.log(chalk_1.default.green(`Recreated twin with existing ID ${twinId}`));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(chalk_1.default.green(`Created twin with new ID ${twinId}`));
|
|
163
|
+
}
|
|
164
|
+
const newAppConfig = {
|
|
165
|
+
name: appName,
|
|
166
|
+
type: appType,
|
|
167
|
+
path: resolvedPath,
|
|
168
|
+
twinId,
|
|
169
|
+
devCommand: startCommand || "docker",
|
|
170
|
+
};
|
|
171
|
+
await (0, simulator_config_1.saveAppConfig)(localTenantId, newAppConfig);
|
|
172
|
+
if (appType === types_1.AppTypeEnum.Screen) {
|
|
173
|
+
await launchWithStartCommand(resolvedPath, pkg, startCommand, twinId, appName, appType);
|
|
174
|
+
}
|
|
175
|
+
else if (appType === types_1.AppTypeEnum.Edge) {
|
|
176
|
+
const dockerfilePath = path_1.default.join(resolvedPath, "Dockerfile");
|
|
177
|
+
if (await fs_extra_1.default.pathExists(dockerfilePath)) {
|
|
178
|
+
await launchWithDocker(resolvedPath, pkg, twinId, appName);
|
|
179
|
+
}
|
|
180
|
+
else if (startCommand) {
|
|
181
|
+
await launchWithStartCommand(resolvedPath, pkg, startCommand, twinId, appName, appType);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
throw new Error('No Dockerfile or start script found. Add a Dockerfile or a "start" script in package.json.');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
function resolveStartCommand(options, pkg, appType) {
|
|
189
|
+
if (options.devCommand)
|
|
190
|
+
return options.devCommand;
|
|
191
|
+
if (pkg.scripts?.start)
|
|
192
|
+
return "npm start";
|
|
193
|
+
if (appType === types_1.AppTypeEnum.Edge)
|
|
194
|
+
return undefined;
|
|
195
|
+
throw new Error("No start script found in package.json. Pass --dev-command to specify one.");
|
|
196
|
+
}
|
|
197
|
+
async function launchWithStartCommand(resolvedPath, pkg, startCommand, twinId, appName, appType) {
|
|
198
|
+
console.log("");
|
|
199
|
+
console.log(chalk_1.default.green.bold(`Starting ${appName}`));
|
|
200
|
+
console.log(chalk_1.default.dim("─".repeat(40)));
|
|
201
|
+
console.log(` ${chalk_1.default.cyan("Type:")} ${appType}`);
|
|
202
|
+
console.log(` ${chalk_1.default.cyan("Twin ID:")} ${twinId}`);
|
|
203
|
+
console.log(` ${chalk_1.default.cyan("Path:")} ${resolvedPath}`);
|
|
204
|
+
console.log(` ${chalk_1.default.cyan("Command:")} ${startCommand}`);
|
|
205
|
+
console.log(chalk_1.default.dim("─".repeat(40)));
|
|
206
|
+
console.log("");
|
|
207
|
+
const env = {
|
|
208
|
+
...process.env,
|
|
209
|
+
TWIN_ID: twinId,
|
|
210
|
+
PHYSTACK_SIMULATOR_URL: SIMULATOR_URL,
|
|
211
|
+
};
|
|
212
|
+
const child = (0, child_process_1.spawn)(startCommand, {
|
|
213
|
+
cwd: resolvedPath,
|
|
214
|
+
stdio: "inherit",
|
|
215
|
+
env,
|
|
216
|
+
shell: true,
|
|
217
|
+
});
|
|
218
|
+
await new Promise((resolve, reject) => {
|
|
219
|
+
child.on("close", (code) => {
|
|
220
|
+
if (code === 0) {
|
|
221
|
+
resolve();
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
reject(new Error(`Start command exited with code ${code}`));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
child.on("error", (err) => {
|
|
228
|
+
reject(err);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
async function readContainerConfig(appPath) {
|
|
233
|
+
const settingsPath = path_1.default.join(appPath, "settings.json");
|
|
234
|
+
if (!(await fs_extra_1.default.pathExists(settingsPath)))
|
|
235
|
+
return null;
|
|
236
|
+
return fs_extra_1.default.readJSON(settingsPath);
|
|
237
|
+
}
|
|
238
|
+
function buildDockerRunArgs(config, image, twinId) {
|
|
239
|
+
const args = ["run", "--rm", "--name", `simulator-${Date.now()}`];
|
|
240
|
+
args.push("-e", `TWIN_ID=${twinId}`);
|
|
241
|
+
args.push("-e", `PHYSTACK_SIMULATOR_URL=http://host.docker.internal:55000`);
|
|
242
|
+
if (process.env.TZ) {
|
|
243
|
+
args.push("-e", `TZ=${process.env.TZ}`);
|
|
244
|
+
}
|
|
245
|
+
const isHostNetwork = config?.HostConfig?.NetworkMode === "host";
|
|
246
|
+
if (isHostNetwork) {
|
|
247
|
+
args.push("--network", "host");
|
|
248
|
+
args.push("--add-host", "phyos:127.0.0.1");
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
args.push("--add-host=host.docker.internal:host-gateway");
|
|
252
|
+
args.push("--add-host", "phyos:host-gateway");
|
|
253
|
+
}
|
|
254
|
+
if (config) {
|
|
255
|
+
for (const env of config.Env || []) {
|
|
256
|
+
args.push("-e", env);
|
|
257
|
+
}
|
|
258
|
+
if (config.Entrypoint) {
|
|
259
|
+
const ep = Array.isArray(config.Entrypoint)
|
|
260
|
+
? config.Entrypoint
|
|
261
|
+
: [config.Entrypoint];
|
|
262
|
+
args.push("--entrypoint", ep[0]);
|
|
263
|
+
}
|
|
264
|
+
const ports = config.HostConfig?.PortBindings || {};
|
|
265
|
+
for (const [containerPort, bindings] of Object.entries(ports)) {
|
|
266
|
+
for (const binding of bindings) {
|
|
267
|
+
args.push("-p", `${binding.HostPort}:${containerPort.replace("/tcp", "")}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
for (const bind of config.HostConfig?.Binds || []) {
|
|
271
|
+
args.push("-v", bind);
|
|
272
|
+
}
|
|
273
|
+
for (const device of config.HostConfig?.Devices || []) {
|
|
274
|
+
args.push("--device", device.PathOnHost);
|
|
275
|
+
}
|
|
276
|
+
for (const req of config.HostConfig?.DeviceRequests || []) {
|
|
277
|
+
const isGpu = req.Capabilities &&
|
|
278
|
+
req.Capabilities.some((cap) => cap.includes("gpu"));
|
|
279
|
+
if (isGpu) {
|
|
280
|
+
args.push("--gpus", "all");
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (config.HostConfig?.Privileged) {
|
|
284
|
+
args.push("--privileged");
|
|
285
|
+
}
|
|
286
|
+
if (config.HostConfig?.Memory > 0) {
|
|
287
|
+
args.push("--memory", String(config.HostConfig.Memory));
|
|
288
|
+
}
|
|
289
|
+
if (config.HostConfig?.CpuShares > 0) {
|
|
290
|
+
args.push("--cpu-shares", String(config.HostConfig.CpuShares));
|
|
291
|
+
}
|
|
292
|
+
for (const ulimit of config.HostConfig?.Ulimits || []) {
|
|
293
|
+
args.push("--ulimit", `${ulimit.Name}=${ulimit.Soft}:${ulimit.Hard}`);
|
|
294
|
+
}
|
|
295
|
+
if (config.HostConfig?.ReadonlyRootfs) {
|
|
296
|
+
args.push("--read-only");
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
args.push(image);
|
|
300
|
+
if (config?.Cmd) {
|
|
301
|
+
args.push(...config.Cmd);
|
|
302
|
+
}
|
|
303
|
+
return args;
|
|
304
|
+
}
|
|
305
|
+
async function launchWithDocker(appPath, pkg, twinId, appName) {
|
|
306
|
+
const imageName = pkg.name.replace(/[^a-z0-9_.-]/g, "-");
|
|
307
|
+
const imageTag = `${imageName}:${pkg.version || "latest"}`;
|
|
308
|
+
console.log("");
|
|
309
|
+
console.log(chalk_1.default.green.bold(`Building Docker image for ${appName}`));
|
|
310
|
+
console.log(chalk_1.default.dim(`Image: ${imageTag}`));
|
|
311
|
+
console.log("");
|
|
312
|
+
const buildResult = (0, child_process_1.spawnSync)("docker", ["build", "-t", imageTag, "."], {
|
|
313
|
+
cwd: appPath,
|
|
314
|
+
stdio: "inherit",
|
|
315
|
+
});
|
|
316
|
+
if (buildResult.status !== 0) {
|
|
317
|
+
throw new Error(`Docker build failed with exit code ${buildResult.status}`);
|
|
318
|
+
}
|
|
319
|
+
const containerConfig = await readContainerConfig(appPath);
|
|
320
|
+
const dockerArgs = buildDockerRunArgs(containerConfig, imageTag, twinId);
|
|
321
|
+
console.log("");
|
|
322
|
+
console.log(chalk_1.default.green.bold(`Starting ${appName}`));
|
|
323
|
+
console.log(chalk_1.default.dim("─".repeat(40)));
|
|
324
|
+
console.log(` ${chalk_1.default.cyan("Type:")} edge (Docker)`);
|
|
325
|
+
console.log(` ${chalk_1.default.cyan("Twin ID:")} ${twinId}`);
|
|
326
|
+
console.log(` ${chalk_1.default.cyan("Path:")} ${appPath}`);
|
|
327
|
+
console.log(` ${chalk_1.default.cyan("Image:")} ${imageTag}`);
|
|
328
|
+
console.log(chalk_1.default.dim("─".repeat(40)));
|
|
329
|
+
console.log(chalk_1.default.dim(`docker ${dockerArgs.join(" ")}`));
|
|
330
|
+
console.log("");
|
|
331
|
+
const child = (0, child_process_1.spawn)("docker", dockerArgs, {
|
|
332
|
+
cwd: appPath,
|
|
333
|
+
stdio: "inherit",
|
|
334
|
+
});
|
|
335
|
+
const containerName = dockerArgs[dockerArgs.indexOf("--name") + 1];
|
|
336
|
+
const cleanup = () => {
|
|
337
|
+
(0, child_process_1.spawnSync)("docker", ["stop", containerName], { stdio: "pipe" });
|
|
338
|
+
};
|
|
339
|
+
process.on("SIGINT", cleanup);
|
|
340
|
+
process.on("SIGTERM", cleanup);
|
|
341
|
+
await new Promise((resolve, reject) => {
|
|
342
|
+
child.on("close", (code) => {
|
|
343
|
+
if (code === 0) {
|
|
344
|
+
resolve();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
reject(new Error(`Docker exited with code ${code}`));
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
child.on("error", reject);
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;AAwBA,wCAgBC;AAgPD,kDAcC;AAsDD,gDAwGC;AApcD,kDAA0B;AAC1B,gDAAwB;AACxB,wDAA0B;AAC1B,iDAA2D;AAC3D,uDAAwD;AACxD,gEAA8E;AAC9E,8CAA0E;AAE1E,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,MAAM,qBAAqB,GAGvB;IACF,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,oBAAY,CAAC,MAAM;IACzC,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAE,oBAAY,CAAC,IAAI;CACtC,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC,CAAC;AAMxE,SAAgB,cAAc,CAC5B,UAAmB,EACnB,OAAgB;IAEhB,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,uBAAuB,CAAC,GAAG,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,GAAkB,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAAe,EACf,KAAe;IAEf,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;QACjC,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC;gBAC9C,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,sBAAsB,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAC7D,CACF,CAAC;oBACF,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CACT,8BAA8B,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAe,EACf,WAAW,GAAG,cAAc;IAE5B,MAAM,aAAa,GAAG,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAG9B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACrE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,+BAA+B,EAAE;gBACxC,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACzE,IAAI,aAAa;YAAE,OAAO,aAAa,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAA,qBAAc,EAAC,aAAa,EAAE;YAC3C,oBAAoB,EAAE,CAAC;YACvB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAU,EAAE,EAAE;YACxC,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAyC,EACzC,OAA4B;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC9D,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,QAAa,EAAE,EAAE;YAClD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAA6C,EAC7C,iBAAsC,EACtC,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE;YAClD,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE;SAC/C,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,uBAAuB,CAAC,CAAC;IAChE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,kBAAe,KAAK,EAClB,OAAe,EACf,UAAwE,EAAE,EAC3D,EAAE;IAEjB,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAGD,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CACP,4BAA4B,YAAY,8GAA8G,CACvJ,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAGxD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEtE,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAGhE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CACP,sEAAsE,CACvE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAGD,MAAM,aAAa,GAAG,OAAO,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,IAAA,qCAAkB,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACxE,IAAI,MAAM,GAAuB,SAAS,EAAE,MAAM,CAAC;IAEnD,MAAM,eAAe,GAAG,MAAM,CAAC;IAE/B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,YAAY,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CACT,UAAU,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,4BAA4B,CACxE,CACF,CAAC;IACJ,CAAC;IAGD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,uBAAuB,eAAe,QAAQ,OAAO,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,iBAAiB,OAAO,KAAK,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACvC,QAAQ,EACR,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EACxE,eAAe,CAChB,CAAC;IACF,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACjB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAGD,MAAM,YAAY,GAAc;QAC9B,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,YAAY;QAClB,MAAM;QACN,UAAU,EAAE,YAAY,IAAI,QAAQ;KACrC,CAAC;IACF,MAAM,IAAA,gCAAa,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAGjD,IAAI,OAAO,KAAK,mBAAW,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,sBAAsB,CAC1B,YAAY,EACZ,GAAG,EACH,YAAa,EACb,MAAM,EACN,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,mBAAW,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,MAAM,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,MAAM,sBAAsB,CAC1B,YAAY,EACZ,GAAG,EACH,YAAY,EACZ,MAAM,EACN,OAAO,EACP,OAAO,CACR,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,SAAgB,mBAAmB,CACjC,OAAgC,EAChC,GAAQ,EACR,OAAoB;IAEpB,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IAClD,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK;QAAE,OAAO,WAAW,CAAC;IAG3C,IAAI,OAAO,KAAK,mBAAW,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAEnD,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,YAAoB,EACpB,GAAQ,EACR,YAAoB,EACpB,MAAc,EACd,OAAe,EACf,OAAoB;IAEpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,GAAG,GAAG;QACV,GAAG,OAAO,CAAC,GAAG;QACd,OAAO,EAAE,MAAM;QACf,sBAAsB,EAAE,aAAa;KACtC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,YAAY,EAAE;QAChC,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,SAAS;QAChB,GAAG;QACH,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,OAAe;IAChD,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,kBAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,kBAAkB,CAChC,MAAW,EACX,KAAa,EACb,MAAc;IAEd,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAGlE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,0DAA0D,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAGD,MAAM,aAAa,GAAG,MAAM,EAAE,UAAU,EAAE,WAAW,KAAK,MAAM,CAAC;IACjE,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QAEN,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QAEX,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC;QAGD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;gBACzC,CAAC,CAAC,MAAM,CAAC,UAAU;gBACnB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAGD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,YAAY,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,OAAO,IAAI,QAAiB,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CACP,IAAI,EACJ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC;QAGD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QAGD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,EAAE,CAAC;YAC1D,MAAM,KAAK,GACT,GAAG,CAAC,YAAY;gBAChB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAGD,IAAI,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAGD,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,CAAC;QAGD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QAGD,IAAI,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAGjB,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAe,EACf,GAAQ,EACR,MAAc,EACd,OAAe;IAEf,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,GAAG,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;IAG3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,WAAW,GAAG,IAAA,yBAAS,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE;QACtE,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAGD,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAG3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,QAAQ,EAAE,UAAU,EAAE;QACxC,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAGH,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAA,yBAAS,EAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"yBA0RE,UAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,KAChD,OAAO,CAAC,IAAI,CAAC;AAFhB,wBA2BE"}
|