@interopio/iocd-cli 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +2 -865
  2. package/changelog.md +17 -0
  3. package/dist/cli.js +1 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/apps.command.js +1 -6
  6. package/dist/commands/apps.command.js.map +1 -1
  7. package/dist/commands/modifications.command.js +2 -2
  8. package/dist/commands/modifications.command.js.map +1 -1
  9. package/dist/commands/test.command.js +6 -0
  10. package/dist/commands/test.command.js.map +1 -1
  11. package/dist/services/components/components.service.js +17 -3
  12. package/dist/services/components/components.service.js.map +1 -1
  13. package/dist/services/components/stores/github.store.js +30 -2
  14. package/dist/services/components/stores/github.store.js.map +1 -1
  15. package/dist/services/installer/electronForge.js +5 -0
  16. package/dist/services/installer/electronForge.js.map +1 -1
  17. package/dist/services/installer/installer.service.js +26 -0
  18. package/dist/services/installer/installer.service.js.map +1 -1
  19. package/dist/services/installer/prerequisites.js +10 -3
  20. package/dist/services/installer/prerequisites.js.map +1 -1
  21. package/dist/services/installer/windows.helper.js +17 -1
  22. package/dist/services/installer/windows.helper.js.map +1 -1
  23. package/dist/services/installer/zip-maker.js +122 -0
  24. package/dist/services/installer/zip-maker.js.map +1 -0
  25. package/dist/services/installer/zip.helper.js +94 -0
  26. package/dist/services/installer/zip.helper.js.map +1 -0
  27. package/dist/services/license.service.js +58 -8
  28. package/dist/services/license.service.js.map +1 -1
  29. package/dist/services/modifications/modifications.service.js +22 -1
  30. package/dist/services/modifications/modifications.service.js.map +1 -1
  31. package/dist/services/modifications/windows.helper.js +95 -49
  32. package/dist/services/modifications/windows.helper.js.map +1 -1
  33. package/dist/services/test-infrastructure.service.js +23 -0
  34. package/dist/services/test-infrastructure.service.js.map +1 -1
  35. package/dist/services/test.service.js +57 -21
  36. package/dist/services/test.service.js.map +1 -1
  37. package/dist/templates/ioconnect-desktop/README.md +2 -865
  38. package/dist/templates/ioconnect-desktop/config/forge.config.js +2 -2
  39. package/dist/templates/ioconnect-desktop/package.json +1 -2
  40. package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/configuration.md +7 -3
  41. package/dist/utils/error.handler.js +6 -2
  42. package/dist/utils/error.handler.js.map +1 -1
  43. package/dist/utils/external-tool.js +34 -0
  44. package/dist/utils/external-tool.js.map +1 -0
  45. package/dist/utils/template-update.js +10 -1
  46. package/dist/utils/template-update.js.map +1 -1
  47. package/dist/utils/terminal-output-guard.js +5 -0
  48. package/dist/utils/terminal-output-guard.js.map +1 -0
  49. package/dist/utils/terminal-output.js +25 -0
  50. package/dist/utils/terminal-output.js.map +1 -0
  51. package/package.json +2 -1
@@ -10,6 +10,7 @@ const child_process_1 = require("child_process");
10
10
  const find_package_dir_1 = require("../../utils/find.package.dir");
11
11
  const version_1 = require("../../utils/version");
12
12
  const error_handler_1 = require("../../utils/error.handler");
13
+ const external_tool_1 = require("../../utils/external-tool");
13
14
  const logger = logger_1.Logger.getInstance("modifications.windows.helper");
14
15
  async function modifyExe() {
15
16
  logger.info("Modifying Windows executable...");
@@ -17,11 +18,21 @@ async function modifyExe() {
17
18
  const newExePath = (0, path_1.join)(path_2.PathUtils.getComponentDir("iocd"), `${options.win.exe.exeName}`);
18
19
  logger.info(`Checking if target ${newExePath} is locked by another process...`);
19
20
  if ((0, fs_1.existsSync)(newExePath)) {
20
- if (isFileLocked(newExePath)) {
21
- throw new error_handler_1.CLIError(`Cannot modify executable because it is locked: ${newExePath}.`, {
22
- suggestions: [
23
- "Please close any running instances of the application and try again.",
24
- ],
21
+ const fileLockStatus = checkFileLock(newExePath);
22
+ if (fileLockStatus.isLocked) {
23
+ const isExpectedLock = !fileLockStatus.reportToSentry;
24
+ throw new error_handler_1.CLIError(isExpectedLock
25
+ ? `Cannot modify executable because it is locked: ${newExePath}.`
26
+ : `Cannot access executable for modification: ${newExePath}.`, {
27
+ cause: fileLockStatus.cause,
28
+ reportToSentry: fileLockStatus.reportToSentry,
29
+ suggestions: isExpectedLock
30
+ ? [
31
+ "Please close any running instances of the application and try again.",
32
+ ]
33
+ : [
34
+ "Check that the executable is writable and that you have permission to modify it.",
35
+ ],
25
36
  });
26
37
  }
27
38
  logger.debug("Executable is not locked, proceeding with modifications.");
@@ -91,62 +102,97 @@ function restoreOriginalUnsignedExe(newExePath) {
91
102
  }
92
103
  }
93
104
  async function changeIconAndMetadata(exePath, options) {
105
+ logger.debug(`Updating icon and metadata for executable: ${exePath}`);
106
+ const rceditPath = (0, path_1.join)((0, find_package_dir_1.findPackageRoot)(), "tools", "rcedit-x64.exe");
107
+ const args = [
108
+ exePath,
109
+ "--set-icon",
110
+ options.win.exe.exeIconPath,
111
+ "--set-version-string",
112
+ "CompanyName",
113
+ options.company,
114
+ "--set-version-string",
115
+ "FileDescription",
116
+ options.productDescription,
117
+ "--set-version-string",
118
+ "ProductName",
119
+ options.productName,
120
+ "--set-file-version",
121
+ (0, version_1.makeVersionFourDigitsIfNeeded)(options.version),
122
+ "--set-product-version",
123
+ options.version,
124
+ ];
125
+ logger.debug(`Executing rcedit with args: ${args.join(" ")}`);
126
+ try {
127
+ const result = process.platform === "linux"
128
+ ? await runRceditWithWine(rceditPath, args)
129
+ : await runExecutable(rceditPath, args);
130
+ if (result.stderr) {
131
+ logger.error("rcedit stderr:", result.stderr);
132
+ }
133
+ logger.debug("rcedit output:", result.stdout);
134
+ }
135
+ catch (error) {
136
+ logger.error("rcedit error:", error);
137
+ throw error;
138
+ }
139
+ }
140
+ async function runRceditWithWine(rceditPath, args) {
141
+ let lastMissingExecutableError = new Error("Neither wine64 nor wine was found on PATH");
142
+ for (const wineCommand of ["wine64", "wine"]) {
143
+ try {
144
+ return await runExecutable(wineCommand, [rceditPath, ...args]);
145
+ }
146
+ catch (error) {
147
+ if (!(0, external_tool_1.isMissingExecutableError)(error)) {
148
+ throw error;
149
+ }
150
+ lastMissingExecutableError = error;
151
+ logger.debug(`${wineCommand} was not found on PATH`);
152
+ }
153
+ }
154
+ throw new error_handler_1.CLIError("Wine is required to update Windows executable metadata on Linux.", {
155
+ code: error_handler_1.ErrorCode.NOT_FOUND,
156
+ cause: lastMissingExecutableError,
157
+ reportToSentry: false,
158
+ suggestions: [
159
+ "Install Wine with 64-bit support and ensure `wine64` or `wine` is available on PATH.",
160
+ "Alternatively, run the command on Windows.",
161
+ ],
162
+ });
163
+ }
164
+ function runExecutable(command, args) {
94
165
  return new Promise((resolve, reject) => {
95
- logger.debug(`Updating icon and metadata for executable: ${exePath}`);
96
- const rceditPath = (0, path_1.join)((0, find_package_dir_1.findPackageRoot)(), "tools", "rcedit-x64.exe");
97
- const args = [
98
- exePath,
99
- "--set-icon",
100
- options.win.exe.exeIconPath,
101
- "--set-version-string",
102
- "CompanyName",
103
- options.company,
104
- "--set-version-string",
105
- "FileDescription",
106
- options.productDescription,
107
- "--set-version-string",
108
- "ProductName",
109
- options.productName,
110
- "--set-file-version",
111
- (0, version_1.makeVersionFourDigitsIfNeeded)(options.version),
112
- "--set-product-version",
113
- options.version,
114
- ];
115
- const callback = (error, stdout, stderr) => {
166
+ (0, child_process_1.execFile)(command, args, (error, stdout, stderr) => {
116
167
  if (error) {
117
- logger.error("rcedit error:", error);
118
- return reject(error);
168
+ reject(error);
169
+ return;
119
170
  }
120
- if (stderr) {
121
- logger.error("rcedit stderr:", stderr);
122
- }
123
- logger.debug("rcedit output:", stdout);
124
- resolve();
125
- };
126
- logger.debug(`Executing rcedit with args: ${args.join(" ")}`);
127
- if (process.platform === "linux") {
128
- (0, child_process_1.execFile)("wine64", [rceditPath, ...args], callback);
129
- }
130
- else {
131
- (0, child_process_1.execFile)(rceditPath, args, callback);
132
- }
171
+ resolve({ stdout, stderr });
172
+ });
133
173
  });
134
174
  }
135
- function isFileLocked(path) {
175
+ function checkFileLock(path) {
136
176
  try {
137
177
  logger.debug(`Checking if file is locked: ${path}`);
138
178
  const fd = (0, fs_1.openSync)(path, "r+"); // request read/write exclusive access
139
179
  (0, fs_1.closeSync)(fd);
140
180
  logger.debug(`File is not locked: ${path}`);
141
- return false; // success -> not locked
181
+ return { isLocked: false };
142
182
  }
143
- catch (err) {
144
- logger.debug(`Error while checking if file is locked: ${path}`, err);
145
- // Common Windows lock errors:
146
- if (["EPERM", "EBUSY", "EACCES"].includes(err.code)) {
147
- return true;
183
+ catch (error) {
184
+ logger.debug(`Error while checking if file is locked: ${path}`, error);
185
+ if (!(error instanceof Error) || !("code" in error)) {
186
+ return { isLocked: false };
187
+ }
188
+ const code = error.code;
189
+ if (code === "EBUSY") {
190
+ return { isLocked: true, reportToSentry: false, cause: error };
191
+ }
192
+ if (code === "EPERM" || code === "EACCES") {
193
+ return { isLocked: true, reportToSentry: true, cause: error };
148
194
  }
149
- return false;
195
+ return { isLocked: false };
150
196
  }
151
197
  }
152
198
  //# sourceMappingURL=windows.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"windows.helper.js","sourceRoot":"","sources":["../../../src/services/modifications/windows.helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windows.helper.js","sourceRoot":"","sources":["../../../src/services/modifications/windows.helper.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,9 @@ const path_1 = require("path");
6
6
  const child_process_1 = require("child_process");
7
7
  const path_2 = require("../utils/path");
8
8
  const skills_service_1 = require("./skills.service");
9
+ const logger_1 = require("../utils/logger");
9
10
  class TestInfrastructureService {
11
+ logger = logger_1.Logger.getInstance("test-infrastructure.service");
10
12
  rootDir;
11
13
  testsDir;
12
14
  templateDir;
@@ -24,18 +26,30 @@ class TestInfrastructureService {
24
26
  this.runNpm = options.runNpm ?? this.runNpmCommand.bind(this);
25
27
  }
26
28
  async setup() {
29
+ this.logger.info("Starting test infrastructure setup...");
30
+ this.logger.debug(`Seed root directory: ${this.rootDir}`);
31
+ this.logger.debug(`Test infrastructure directory: ${this.testsDir}`);
32
+ this.logger.debug(`Test template directory: ${this.templateDir}`);
27
33
  this.assertTestsDirWithinRoot();
28
34
  if ((0, fs_1.existsSync)(this.testsDir)) {
35
+ this.logger.warn(`Test infrastructure directory already exists: ${this.testsDir}`);
29
36
  throw new Error(`The tests directory already exists at '${this.testsDir}'. Back up or remove it, then run 'iocd test setup' again.`);
30
37
  }
31
38
  try {
39
+ this.logger.info("Creating test infrastructure files...");
32
40
  (0, fs_1.mkdirSync)(this.testsDir, { recursive: true });
33
41
  this.copyDirectory((0, path_1.join)(this.templateDir, "tests"), this.testsDir, true);
34
42
  await this.validateInstallation();
43
+ this.logger.info("Installing missing Agent Skills...");
35
44
  this.skillsService.installMissing();
45
+ this.logger.debug("Agent Skill installation completed");
46
+ this.logger.info("Test infrastructure setup completed successfully.");
36
47
  }
37
48
  catch (error) {
49
+ this.logger.error("Test infrastructure setup failed:", error);
50
+ this.logger.warn("Removing partially created test infrastructure...");
38
51
  (0, fs_1.rmSync)(this.testsDir, { recursive: true, force: true });
52
+ this.logger.debug("Partial test infrastructure cleanup completed");
39
53
  throw new Error(`Test infrastructure setup failed and the created files were removed: ${error.message}`);
40
54
  }
41
55
  }
@@ -59,6 +73,7 @@ class TestInfrastructureService {
59
73
  ? (0, path_1.join)((0, fs_1.realpathSync)(existingAncestor), suffix)
60
74
  : (0, fs_1.realpathSync)(existingAncestor);
61
75
  if (!realTarget.startsWith(realRoot + path_1.sep)) {
76
+ this.logger.error(`Test infrastructure directory resolves outside the seed root: ${realTarget}`);
62
77
  throw new Error(`The tests directory must resolve inside the seed root. '${this.testsDir}' escapes '${this.rootDir}'. Set 'testsDirectory' to a path within the project.`);
63
78
  }
64
79
  }
@@ -72,16 +87,24 @@ class TestInfrastructureService {
72
87
  }
73
88
  else if (overwrite || !(0, fs_1.existsSync)(destinationPath)) {
74
89
  (0, fs_1.cpSync)(sourcePath, destinationPath);
90
+ this.logger.debug(`Copied ${sourcePath} to ${destinationPath}`);
91
+ }
92
+ else {
93
+ this.logger.debug(`Preserved existing file: ${destinationPath}`);
75
94
  }
76
95
  }
77
96
  }
78
97
  async validateInstallation() {
98
+ this.logger.info("Installing test infrastructure dependencies...");
79
99
  await this.runNpm(["install"], this.testsDir);
100
+ this.logger.info("Validating test infrastructure types...");
80
101
  await this.runNpm(["run", "typecheck"], this.testsDir);
102
+ this.logger.debug("Test infrastructure validation completed");
81
103
  }
82
104
  runNpmCommand(args, cwd) {
83
105
  return new Promise((resolve, reject) => {
84
106
  const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
107
+ this.logger.debug(`Running ${npmCommand} ${args.join(" ")} in ${cwd}`);
85
108
  const child = (0, child_process_1.spawn)(npmCommand, args, {
86
109
  cwd,
87
110
  stdio: "inherit",
@@ -1 +1 @@
1
- {"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,7 @@ const path = __importStar(require("path"));
40
40
  const path_1 = require("../utils/path");
41
41
  const child_process_1 = require("child_process");
42
42
  const license_service_1 = require("./license.service");
43
+ const error_handler_1 = require("../utils/error.handler");
43
44
  /**
44
45
  * TestService handles running automated tests for the io.Connect Desktop application.
45
46
  *
@@ -55,6 +56,7 @@ class TestService {
55
56
  logger = logger_1.Logger.getInstance("test.service");
56
57
  prepareIocd;
57
58
  getLicenseKey;
59
+ spawnProcess;
58
60
  constructor(options = {}) {
59
61
  this.prepareIocd =
60
62
  options.prepareIocd ??
@@ -64,31 +66,53 @@ class TestService {
64
66
  });
65
67
  this.getLicenseKey =
66
68
  options.getLicenseKey ?? (() => new license_service_1.LicenseService().getLicenseKey());
69
+ this.spawnProcess = options.spawnProcess ?? child_process_1.spawn;
67
70
  }
68
71
  /**
69
72
  * Run tests for the io.Connect Desktop application
70
73
  */
71
74
  async runTests(args = []) {
72
75
  this.logger.info("Starting test execution...");
73
- // Find tests directory
74
- const testsDir = path_1.PathUtils.getTestsDir();
75
- if (!fs.existsSync(testsDir)) {
76
- throw new Error(`Tests directory not found. Expected '${testsDir}' folder in project root.`);
76
+ this.logger.debug(`Forwarding ${args.length} test runner arguments`);
77
+ try {
78
+ // Find tests directory
79
+ const testsDir = path_1.PathUtils.getTestsDir();
80
+ if (!fs.existsSync(testsDir)) {
81
+ throw new Error(`Tests directory not found. Expected '${testsDir}' folder in project root.`);
82
+ }
83
+ this.logger.debug(`Tests directory: ${testsDir}`);
84
+ // Check if node_modules exists, if not run npm install
85
+ await this.ensureNodeModulesInstalled(testsDir);
86
+ this.ensureTestScriptConfigured(testsDir);
87
+ // Prepare the in-place component exactly as dev mode does before launching it.
88
+ this.logger.info("Preparing io.Connect Desktop for test execution...");
89
+ await this.prepareIocd();
90
+ this.logger.debug("io.Connect Desktop test preparation completed");
91
+ // Get the binary path based on platform
92
+ const binaryPath = path_1.PathUtils.getIOCDExePath();
93
+ this.logger.debug(`Binary path: ${binaryPath}`);
94
+ // Verify binary exists
95
+ if (!fs.existsSync(binaryPath)) {
96
+ throw new Error(`Binary not found at ${binaryPath} after dev preparation. Run 'iocd setup' to reinstall the configured component.`);
97
+ }
98
+ const licenseKey = this.getLicenseKey();
99
+ this.logger.debug(`Test license: ${licenseKey ? "configured" : "not configured"}`);
100
+ // Run the test script
101
+ await this.runTestScript(testsDir, binaryPath, args, licenseKey);
77
102
  }
78
- this.logger.debug(`Tests directory: ${testsDir}`);
79
- // Check if node_modules exists, if not run npm install
80
- await this.ensureNodeModulesInstalled(testsDir);
81
- // Prepare the in-place component exactly as dev mode does before launching it.
82
- await this.prepareIocd();
83
- // Get the binary path based on platform
84
- const binaryPath = path_1.PathUtils.getIOCDExePath();
85
- this.logger.info(`Binary path: ${binaryPath}`);
86
- // Verify binary exists
87
- if (!fs.existsSync(binaryPath)) {
88
- throw new Error(`Binary not found at ${binaryPath} after dev preparation. Run 'iocd setup' to reinstall the configured component.`);
103
+ catch (error) {
104
+ this.logger.error("Test execution failed:", error);
105
+ throw error;
89
106
  }
90
- // Run the test script
91
- await this.runTestScript(testsDir, binaryPath, args, this.getLicenseKey());
107
+ }
108
+ ensureTestScriptConfigured(testsDir) {
109
+ const packageJsonPath = path.join(testsDir, "package.json");
110
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
111
+ const testScript = packageJson.scripts?.test;
112
+ if (typeof testScript !== "string" || testScript.trim().length === 0) {
113
+ throw new Error(`No test script found in tests package.json: ${packageJsonPath}`);
114
+ }
115
+ this.logger.debug("Test script is configured");
92
116
  }
93
117
  /**
94
118
  * Ensure node_modules are installed in the tests directory
@@ -113,7 +137,8 @@ class TestService {
113
137
  async runNpmInstall(cwd) {
114
138
  return new Promise((resolve, reject) => {
115
139
  const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
116
- const child = (0, child_process_1.spawn)(npmCommand, ["install"], {
140
+ this.logger.debug(`Running ${npmCommand} install in ${cwd}`);
141
+ const child = this.spawnProcess(npmCommand, ["install"], {
117
142
  cwd,
118
143
  stdio: "inherit",
119
144
  shell: true,
@@ -139,7 +164,8 @@ class TestService {
139
164
  return new Promise((resolve, reject) => {
140
165
  const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
141
166
  const npmArgs = args.length > 0 ? ["test", "--", ...args] : ["test"];
142
- const child = (0, child_process_1.spawn)(npmCommand, npmArgs, {
167
+ this.logger.debug(`Running ${npmCommand} test in ${testsDir}`);
168
+ const child = this.spawnProcess(npmCommand, npmArgs, {
143
169
  cwd: testsDir,
144
170
  stdio: "inherit",
145
171
  shell: true,
@@ -149,13 +175,23 @@ class TestService {
149
175
  ...(licenseKey ? { IOCD_LICENSE_KEY: licenseKey } : {}),
150
176
  },
151
177
  });
152
- child.on("close", code => {
178
+ child.on("close", (code, signal) => {
153
179
  if (code === 0) {
154
180
  this.logger.info("Tests completed successfully");
155
181
  resolve();
156
182
  }
183
+ else if (code !== null && signal === null) {
184
+ reject(new error_handler_1.CLIError(`Tests failed with code ${code}`, {
185
+ reportToSentry: false,
186
+ suggestions: [
187
+ "Review the test runner output above for the cause of the failure.",
188
+ ],
189
+ }));
190
+ }
157
191
  else {
158
- reject(new Error(`Tests failed with code ${code}`));
192
+ reject(new Error(signal
193
+ ? `Test process terminated by signal ${signal}`
194
+ : `Test process failed with unexpected code ${code}`));
159
195
  }
160
196
  });
161
197
  child.on("error", err => {
@@ -1 +1 @@
1
- {"version":3,"file":"test.service.js","sourceRoot":"","sources":["../../src/services/test.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.service.js","sourceRoot":"","sources":["../../src/services/test.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,wCAA0C;AAC1C,iDAAkE;AAClE,uDAAmD;AACnD,0DAAkD;AAclD;;;;;;;;;;GAUG;AACH,MAAa,WAAW;IACd,MAAM,GAAG,eAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC5C,WAAW,CAAsB;IACjC,aAAa,CAA2B;IACxC,YAAY,CAAe;IAEnC,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,WAAW;YACd,OAAO,CAAC,WAAW;gBACnB,CAAC,KAAK,IAAI,EAAE;oBACV,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAC/D,MAAM,iBAAiB,EAAE,CAAC;gBAC5B,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,aAAa;YAChB,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,gCAAc,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAK,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAiB,EAAE;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,QAAQ,GAAG,gBAAS,CAAC,WAAW,EAAE,CAAC;YAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,2BAA2B,CAC5E,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;YAElD,uDAAuD;YACvD,MAAM,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YAE1C,+EAA+E;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAEnE,wCAAwC;YACxC,MAAM,UAAU,GAAG,gBAAS,CAAC,cAAc,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;YAEhD,uBAAuB;YACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,uBAAuB,UAAU,iFAAiF,CACnH,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,iBAAiB,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAChE,CAAC;YAEF,sBAAsB;YACtB,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,QAAgB;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAGzC,CAAC;QACF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC;QAE7C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,+CAA+C,eAAe,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,0BAA0B,CAAC,QAAgB;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAE5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,GAAW;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,eAAe,GAAG,EAAE,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;gBACvD,GAAG;gBACH,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACvB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACtB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,QAAgB,EAChB,UAAkB,EAClB,OAAiB,EAAE,EACnB,UAAmB;QAEnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAErC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,UAAU,YAAY,QAAQ,EAAE,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE;gBACnD,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,IAAI;gBACX,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,WAAW,EAAE,UAAU;oBACvB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxD;aACF,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBACjD,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,MAAM,CACJ,IAAI,wBAAQ,CAAC,0BAA0B,IAAI,EAAE,EAAE;wBAC7C,cAAc,EAAE,KAAK;wBACrB,WAAW,EAAE;4BACX,mEAAmE;yBACpE;qBACF,CAAC,CACH,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,MAAM;wBACJ,CAAC,CAAC,qCAAqC,MAAM,EAAE;wBAC/C,CAAC,CAAC,4CAA4C,IAAI,EAAE,CACvD,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACtB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA9LD,kCA8LC"}