@phystack/cli 4.4.29

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 (192) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +24 -0
  3. package/bin/index.js +2 -0
  4. package/dist/commands/app/build-apps.js +66 -0
  5. package/dist/commands/app/build-apps.js.map +1 -0
  6. package/dist/commands/app/build-container-remote.js +171 -0
  7. package/dist/commands/app/build-container-remote.js.map +1 -0
  8. package/dist/commands/app/build-container.js +322 -0
  9. package/dist/commands/app/build-container.js.map +1 -0
  10. package/dist/commands/app/build.js +375 -0
  11. package/dist/commands/app/build.js.map +1 -0
  12. package/dist/commands/app/create.js +409 -0
  13. package/dist/commands/app/create.js.map +1 -0
  14. package/dist/commands/app/deploy.js +176 -0
  15. package/dist/commands/app/deploy.js.map +1 -0
  16. package/dist/commands/app/device-picker.js +150 -0
  17. package/dist/commands/app/device-picker.js.map +1 -0
  18. package/dist/commands/app/import.js +303 -0
  19. package/dist/commands/app/import.js.map +1 -0
  20. package/dist/commands/app/list.js +26 -0
  21. package/dist/commands/app/list.js.map +1 -0
  22. package/dist/commands/app/publish.js +327 -0
  23. package/dist/commands/app/publish.js.map +1 -0
  24. package/dist/commands/app/settings.js +129 -0
  25. package/dist/commands/app/settings.js.map +1 -0
  26. package/dist/commands/app/types.js +13 -0
  27. package/dist/commands/app/types.js.map +1 -0
  28. package/dist/commands/app/upload-description.js +139 -0
  29. package/dist/commands/app/upload-description.js.map +1 -0
  30. package/dist/commands/app/upload-settings.js +29 -0
  31. package/dist/commands/app/upload-settings.js.map +1 -0
  32. package/dist/commands/app/utils.js +86 -0
  33. package/dist/commands/app/utils.js.map +1 -0
  34. package/dist/commands/auth/login.js +111 -0
  35. package/dist/commands/auth/login.js.map +1 -0
  36. package/dist/commands/auth/logout.js +19 -0
  37. package/dist/commands/auth/logout.js.map +1 -0
  38. package/dist/commands/descriptor/create.js +143 -0
  39. package/dist/commands/descriptor/create.js.map +1 -0
  40. package/dist/commands/descriptor/index.js +36 -0
  41. package/dist/commands/descriptor/index.js.map +1 -0
  42. package/dist/commands/descriptor/publish.js +163 -0
  43. package/dist/commands/descriptor/publish.js.map +1 -0
  44. package/dist/commands/descriptor/show.js +68 -0
  45. package/dist/commands/descriptor/show.js.map +1 -0
  46. package/dist/commands/dev/develop.js +175 -0
  47. package/dist/commands/dev/develop.js.map +1 -0
  48. package/dist/commands/dev/forward.js +118 -0
  49. package/dist/commands/dev/forward.js.map +1 -0
  50. package/dist/commands/dev/index.js +66 -0
  51. package/dist/commands/dev/index.js.map +1 -0
  52. package/dist/commands/dev/list.js +96 -0
  53. package/dist/commands/dev/list.js.map +1 -0
  54. package/dist/commands/dev/screen-devtools.js +156 -0
  55. package/dist/commands/dev/screen-devtools.js.map +1 -0
  56. package/dist/commands/dev/select.js +118 -0
  57. package/dist/commands/dev/select.js.map +1 -0
  58. package/dist/commands/dev/shell.js +171 -0
  59. package/dist/commands/dev/shell.js.map +1 -0
  60. package/dist/commands/dev/vnc.js +75 -0
  61. package/dist/commands/dev/vnc.js.map +1 -0
  62. package/dist/commands/device/select.js +118 -0
  63. package/dist/commands/device/select.js.map +1 -0
  64. package/dist/commands/flash.js +1120 -0
  65. package/dist/commands/flash.js.map +1 -0
  66. package/dist/commands/inst/create.js +55 -0
  67. package/dist/commands/inst/create.js.map +1 -0
  68. package/dist/commands/inst/index.js +15 -0
  69. package/dist/commands/inst/index.js.map +1 -0
  70. package/dist/commands/inst/list.js +26 -0
  71. package/dist/commands/inst/list.js.map +1 -0
  72. package/dist/commands/legacydev/debug.js +11 -0
  73. package/dist/commands/legacydev/debug.js.map +1 -0
  74. package/dist/commands/legacydev/deploy.js +15 -0
  75. package/dist/commands/legacydev/deploy.js.map +1 -0
  76. package/dist/commands/legacydev/dumpTwin.js +27 -0
  77. package/dist/commands/legacydev/dumpTwin.js.map +1 -0
  78. package/dist/commands/legacydev/forward.js +104 -0
  79. package/dist/commands/legacydev/forward.js.map +1 -0
  80. package/dist/commands/legacydev/index.js +188 -0
  81. package/dist/commands/legacydev/index.js.map +1 -0
  82. package/dist/commands/legacydev/invoke.js +29 -0
  83. package/dist/commands/legacydev/invoke.js.map +1 -0
  84. package/dist/commands/legacydev/js.js +69 -0
  85. package/dist/commands/legacydev/js.js.map +1 -0
  86. package/dist/commands/legacydev/list.js +196 -0
  87. package/dist/commands/legacydev/list.js.map +1 -0
  88. package/dist/commands/legacydev/logs.js +60 -0
  89. package/dist/commands/legacydev/logs.js.map +1 -0
  90. package/dist/commands/legacydev/modules.js +50 -0
  91. package/dist/commands/legacydev/modules.js.map +1 -0
  92. package/dist/commands/legacydev/move.js +23 -0
  93. package/dist/commands/legacydev/move.js.map +1 -0
  94. package/dist/commands/legacydev/ota.js +88 -0
  95. package/dist/commands/legacydev/ota.js.map +1 -0
  96. package/dist/commands/legacydev/patchTwin.js +21 -0
  97. package/dist/commands/legacydev/patchTwin.js.map +1 -0
  98. package/dist/commands/legacydev/pin.js +23 -0
  99. package/dist/commands/legacydev/pin.js.map +1 -0
  100. package/dist/commands/legacydev/pub.js +25 -0
  101. package/dist/commands/legacydev/pub.js.map +1 -0
  102. package/dist/commands/legacydev/rdp.js +64 -0
  103. package/dist/commands/legacydev/rdp.js.map +1 -0
  104. package/dist/commands/legacydev/screen-devtools.js +142 -0
  105. package/dist/commands/legacydev/screen-devtools.js.map +1 -0
  106. package/dist/commands/legacydev/settingsShow.js +89 -0
  107. package/dist/commands/legacydev/settingsShow.js.map +1 -0
  108. package/dist/commands/legacydev/settingsUpdate.js +114 -0
  109. package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
  110. package/dist/commands/legacydev/shell.js +167 -0
  111. package/dist/commands/legacydev/shell.js.map +1 -0
  112. package/dist/commands/legacydev/showTwin.js +9 -0
  113. package/dist/commands/legacydev/showTwin.js.map +1 -0
  114. package/dist/commands/legacydev/statusLog.js +56 -0
  115. package/dist/commands/legacydev/statusLog.js.map +1 -0
  116. package/dist/commands/legacydev/sub.js +39 -0
  117. package/dist/commands/legacydev/sub.js.map +1 -0
  118. package/dist/commands/legacydev/vnc.js +61 -0
  119. package/dist/commands/legacydev/vnc.js.map +1 -0
  120. package/dist/commands/tenant/index.js +21 -0
  121. package/dist/commands/tenant/index.js.map +1 -0
  122. package/dist/commands/tenant/list.js +14 -0
  123. package/dist/commands/tenant/list.js.map +1 -0
  124. package/dist/commands/tenant/select.js +87 -0
  125. package/dist/commands/tenant/select.js.map +1 -0
  126. package/dist/commands/vm/create.js +718 -0
  127. package/dist/commands/vm/create.js.map +1 -0
  128. package/dist/commands/vm/index.js +130 -0
  129. package/dist/commands/vm/index.js.map +1 -0
  130. package/dist/commands/vm/list.js +124 -0
  131. package/dist/commands/vm/list.js.map +1 -0
  132. package/dist/commands/vm/logs.js +66 -0
  133. package/dist/commands/vm/logs.js.map +1 -0
  134. package/dist/commands/vm/remove.js +180 -0
  135. package/dist/commands/vm/remove.js.map +1 -0
  136. package/dist/commands/vm/shell.js +400 -0
  137. package/dist/commands/vm/shell.js.map +1 -0
  138. package/dist/commands/vm/start.js +861 -0
  139. package/dist/commands/vm/start.js.map +1 -0
  140. package/dist/commands/vm/stop.js +232 -0
  141. package/dist/commands/vm/stop.js.map +1 -0
  142. package/dist/index.js +158 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/services/admin-api/admin-api.types.js +3 -0
  145. package/dist/services/admin-api/admin-api.types.js.map +1 -0
  146. package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
  147. package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
  148. package/dist/services/admin-api/devices-admin-api.service.js +213 -0
  149. package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
  150. package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
  151. package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
  152. package/dist/services/admin-api/index.js +157 -0
  153. package/dist/services/admin-api/index.js.map +1 -0
  154. package/dist/services/admin-api/installations-admin-api.service.js +29 -0
  155. package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
  156. package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
  157. package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
  158. package/dist/services/auth/device-grant-auth.service.js +224 -0
  159. package/dist/services/auth/device-grant-auth.service.js.map +1 -0
  160. package/dist/services/phyhub/index.js +200 -0
  161. package/dist/services/phyhub/index.js.map +1 -0
  162. package/dist/services/phyhub/phyhub.types.js +3 -0
  163. package/dist/services/phyhub/phyhub.types.js.map +1 -0
  164. package/dist/utils/device-fetcher.js +92 -0
  165. package/dist/utils/device-fetcher.js.map +1 -0
  166. package/dist/utils/devices.js +41 -0
  167. package/dist/utils/devices.js.map +1 -0
  168. package/dist/utils/docker-credentials.js +546 -0
  169. package/dist/utils/docker-credentials.js.map +1 -0
  170. package/dist/utils/emulated-device.js +91 -0
  171. package/dist/utils/emulated-device.js.map +1 -0
  172. package/dist/utils/index.js +180 -0
  173. package/dist/utils/index.js.map +1 -0
  174. package/dist/utils/modules.js +36 -0
  175. package/dist/utils/modules.js.map +1 -0
  176. package/dist/utils/org-selector.js +108 -0
  177. package/dist/utils/org-selector.js.map +1 -0
  178. package/dist/utils/proxy.js +31 -0
  179. package/dist/utils/proxy.js.map +1 -0
  180. package/dist/utils/registry-credentials.js +113 -0
  181. package/dist/utils/registry-credentials.js.map +1 -0
  182. package/dist/utils/statuses.js +124 -0
  183. package/dist/utils/statuses.js.map +1 -0
  184. package/dist/utils/templates.js +189 -0
  185. package/dist/utils/templates.js.map +1 -0
  186. package/dist/utils/tenant-storage.js +88 -0
  187. package/dist/utils/tenant-storage.js.map +1 -0
  188. package/dist/utils/vm.js +434 -0
  189. package/dist/utils/vm.js.map +1 -0
  190. package/dist/utils/with-spinner.js +20 -0
  191. package/dist/utils/with-spinner.js.map +1 -0
  192. package/package.json +103 -0
@@ -0,0 +1,375 @@
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.getGridAppFileInfo = exports.getOutputFileInfo = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const tar_1 = __importDefault(require("tar"));
12
+ const ajv_1 = __importDefault(require("ajv"));
13
+ const child_process_1 = __importDefault(require("child_process"));
14
+ const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
15
+ const build_container_1 = require("./build-container");
16
+ var TemplateFileEnums;
17
+ (function (TemplateFileEnums) {
18
+ TemplateFileEnums["SCHEMA"] = "schema.json";
19
+ TemplateFileEnums["META_SCHEMA"] = "meta-schema.json";
20
+ TemplateFileEnums["PACKAGE"] = "package.json";
21
+ TemplateFileEnums["INDEX"] = "index.html";
22
+ TemplateFileEnums["CONTAINER_SETTINGS"] = "settings.json";
23
+ TemplateFileEnums["ANALYTICS_SCHEMA"] = "analytics-schema.json";
24
+ })(TemplateFileEnums || (TemplateFileEnums = {}));
25
+ const defaultBuildFolder = 'build';
26
+ const defaultSchema = {
27
+ type: 'object',
28
+ title: 'Application Settings',
29
+ properties: {},
30
+ };
31
+ const DEFAULT_META_SCHEMA = {};
32
+ const DEFAULT_ANALYTICS_SCHEMA = [];
33
+ const archiveExcludedFiles = [
34
+ TemplateFileEnums.SCHEMA,
35
+ TemplateFileEnums.PACKAGE,
36
+ TemplateFileEnums.META_SCHEMA,
37
+ TemplateFileEnums.ANALYTICS_SCHEMA,
38
+ defaultBuildFolder,
39
+ ];
40
+ const validateAndGetSchema = async (templatePath, requireIndex = true) => {
41
+ try {
42
+ if (requireIndex) {
43
+ const indexPath = path_1.default.join(templatePath, TemplateFileEnums.INDEX);
44
+ if (!fs_extra_1.default.existsSync(indexPath)) {
45
+ throw new Error(`Missing required file: ${TemplateFileEnums.INDEX}`);
46
+ }
47
+ }
48
+ let schema = defaultSchema;
49
+ const schemaPath = path_1.default.join(templatePath, TemplateFileEnums.SCHEMA);
50
+ if (fs_extra_1.default.existsSync(schemaPath)) {
51
+ schema = JSON.parse(await fs_extra_1.default.readFile(schemaPath, 'utf8'));
52
+ }
53
+ const metaSchemaPath = path_1.default.join(templatePath, TemplateFileEnums.META_SCHEMA);
54
+ let metaSchema = DEFAULT_META_SCHEMA;
55
+ if (fs_extra_1.default.existsSync(metaSchemaPath)) {
56
+ metaSchema = JSON.parse(await fs_extra_1.default.readFile(metaSchemaPath, 'utf8'));
57
+ }
58
+ const validator = new ajv_1.default();
59
+ if (!validator.validateSchema(schema)) {
60
+ throw new Error(`${TemplateFileEnums.SCHEMA} is not valid JSON schema file!`);
61
+ }
62
+ const analyticsSchemaPath = path_1.default.join(templatePath, TemplateFileEnums.ANALYTICS_SCHEMA);
63
+ let analyticsSchema = DEFAULT_ANALYTICS_SCHEMA;
64
+ if (fs_extra_1.default.existsSync(analyticsSchemaPath)) {
65
+ analyticsSchema = JSON.parse(await fs_extra_1.default.readFile(analyticsSchemaPath, 'utf8'));
66
+ }
67
+ return {
68
+ schema: JSON.stringify(schema),
69
+ metaSchema: JSON.stringify(metaSchema),
70
+ analyticsSchema,
71
+ };
72
+ }
73
+ catch (err) {
74
+ throw new Error(`Error during template files validation: ${err.message}`);
75
+ }
76
+ };
77
+ const readPackageJson = async (templatePath) => {
78
+ const packageJsonPath = path_1.default.join(templatePath, TemplateFileEnums.PACKAGE);
79
+ if (fs_extra_1.default.existsSync(packageJsonPath)) {
80
+ const packageJson = await fs_extra_1.default.promises.readFile(packageJsonPath, 'utf8');
81
+ return JSON.parse(packageJson);
82
+ }
83
+ return null;
84
+ };
85
+ const build = async ({ templatePath, schema, metaSchema, analyticsSchema, outputFilePath, appInfo, }) => {
86
+ const outputPath = path_1.default.dirname(outputFilePath);
87
+ await fs_extra_1.default.emptyDir(outputPath);
88
+ const files = fs_extra_1.default.readdirSync(templatePath);
89
+ // check for icon presence
90
+ let iconPath;
91
+ const manifestJsonPath = path_1.default.join(templatePath, 'manifest.json');
92
+ if (fs_extra_1.default.existsSync(manifestJsonPath)) {
93
+ const manifestJson = await fs_extra_1.default.readFile(manifestJsonPath, 'utf8');
94
+ const manifestObject = JSON.parse(manifestJson);
95
+ // try and find matching icon
96
+ iconPath = manifestObject?.icons?.find((icon) => icon.type === 'image/png' && icon.sizes?.includes('192x192'))?.src;
97
+ }
98
+ const info = {
99
+ ...appInfo,
100
+ analyticsSchema,
101
+ createdAt: Math.floor(Date.now() / 1000),
102
+ iconPath,
103
+ };
104
+ await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_info.json'), JSON.stringify(info));
105
+ await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_schema.json'), schema);
106
+ await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, '_meta-schema.json'), metaSchema);
107
+ files.push('_info.json', '_schema.json', '_meta-schema.json');
108
+ const outputFileStream = fs_extra_1.default.createWriteStream(outputFilePath);
109
+ const filesToAdd = files.filter((file) => !archiveExcludedFiles.includes(file));
110
+ if (filesToAdd.length === 0) {
111
+ // cannot create tar with no files, so create a stub file - only important for edge apps
112
+ await fs_extra_1.default.promises.writeFile(path_1.default.join(templatePath, 'index.html'), '');
113
+ filesToAdd.push('index.html');
114
+ }
115
+ const archiveReadable = await tar_1.default.create({
116
+ gzip: true,
117
+ cwd: templatePath,
118
+ }, filesToAdd);
119
+ await new Promise((resolve) => archiveReadable.pipe(outputFileStream).on('finish', resolve));
120
+ };
121
+ const getOutputFileInfo = async ({ buildPath, tag, arch, }) => {
122
+ // Fallback values
123
+ let version = '1.0.0';
124
+ let name = path_1.default.basename(process.cwd());
125
+ let license = 'UNLICENSED';
126
+ let tagName;
127
+ let tagVersion;
128
+ if (tag) {
129
+ const fileAndVersionArr = tag.split(':');
130
+ if (fileAndVersionArr.length < 2) {
131
+ throw new Error('Invalid tag option, --tag <filename:version>');
132
+ }
133
+ [tagName, tagVersion] = fileAndVersionArr;
134
+ }
135
+ let applicationType = 'screen';
136
+ let iotOptions = {};
137
+ // if app name and version are known, use them
138
+ const packageObject = await readPackageJson(process.cwd());
139
+ if (packageObject) {
140
+ name = tagName || packageObject.name || name;
141
+ license = packageObject.license || license;
142
+ version = tagVersion || packageObject.version || version;
143
+ if (packageObject['application-type'] === 'iot' ||
144
+ packageObject['application-type'] === 'module' ||
145
+ packageObject['application-type'] === 'edge') {
146
+ applicationType = 'module';
147
+ if (!fs_extra_1.default.existsSync(TemplateFileEnums.CONTAINER_SETTINGS))
148
+ throw new Error(`${TemplateFileEnums.CONTAINER_SETTINGS} is required for Edge apps`);
149
+ console.log('Container Settings:', TemplateFileEnums.CONTAINER_SETTINGS);
150
+ const continerOpttions = JSON.parse(fs_extra_1.default.readFileSync(TemplateFileEnums.CONTAINER_SETTINGS).toString());
151
+ const registry = packageObject['docker-credentials']?.registry ||
152
+ packageObject['container-registry'];
153
+ if (!registry)
154
+ throw new Error('package.json should contain "container-registry" entry or "docker-credentials.registry" entry');
155
+ const dir = process.cwd();
156
+ const archs = arch ? [arch] : Object.keys((0, build_container_1.findArchs)(dir, 'all'));
157
+ console.log(chalk_1.default.dim('Reading container registry credentials from package.json'));
158
+ const dockerCredentials = packageObject['docker-credentials'];
159
+ if (!dockerCredentials?.pull?.username || !dockerCredentials?.pull?.password) {
160
+ throw new Error('Docker credentials not found in package.json. Please run create command again.');
161
+ }
162
+ // Check if a custom image name is specified in docker-credentials
163
+ let image;
164
+ if (dockerCredentials.image) {
165
+ image = dockerCredentials.image;
166
+ console.log(chalk_1.default.dim(`Using custom image name from docker-credentials: ${chalk_1.default.blue(image)}`));
167
+ // Ensure the custom image has a version tag
168
+ if (!image.includes(':')) {
169
+ image = `${image}:${version}`;
170
+ console.log(chalk_1.default.dim(`Adding version tag to custom image: ${chalk_1.default.blue(image)}`));
171
+ }
172
+ }
173
+ else {
174
+ image = `${registry}/${name}:${version}`;
175
+ }
176
+ let credentials = null;
177
+ const pullUsername = dockerCredentials.pull.username;
178
+ const pullPassword = dockerCredentials.pull.password;
179
+ const pushUsername = dockerCredentials.push?.username;
180
+ const pushPassword = dockerCredentials.push?.password;
181
+ credentials = { username: pullUsername, password: pullPassword };
182
+ if (pushUsername && pushPassword) {
183
+ try {
184
+ child_process_1.default.execSync(`docker login ${registry} -u ${pushUsername} -p ${pushPassword}`, {
185
+ stdio: 'inherit',
186
+ });
187
+ }
188
+ catch (error) {
189
+ console.log(chalk_1.default.yellow('Warning: Failed to store push credentials locally'));
190
+ }
191
+ }
192
+ console.log(chalk_1.default.dim(`Image found ${chalk_1.default.blue(image)}`));
193
+ // Update createOptions with pull credentials for the container
194
+ const updatedCreateOptions = {
195
+ ...continerOpttions,
196
+ RegistryCredentials: {
197
+ [registry]: {
198
+ username: pullUsername,
199
+ password: pullPassword,
200
+ },
201
+ },
202
+ };
203
+ iotOptions = {
204
+ image,
205
+ createOptions: JSON.stringify(updatedCreateOptions),
206
+ platforms: archs,
207
+ credentials,
208
+ };
209
+ }
210
+ }
211
+ const outputFileName = `${name}-${version}.gridapp`;
212
+ return {
213
+ outputFilePath: path_1.default.join(buildPath, outputFileName),
214
+ appInfo: {
215
+ name,
216
+ license,
217
+ version,
218
+ ...iotOptions,
219
+ applicationType,
220
+ // TODO: credentials, platforms, createOptions
221
+ },
222
+ };
223
+ };
224
+ exports.getOutputFileInfo = getOutputFileInfo;
225
+ // Alt version of getOutputFileInfo
226
+ const getGridAppFileInfo = async (appRootDir, tag) => {
227
+ const currentDir = appRootDir || process.cwd();
228
+ // Fallback values
229
+ let version = '1.0.0';
230
+ let name = path_1.default.basename(currentDir);
231
+ let license = 'UNLICENSED';
232
+ if (tag) {
233
+ const fileAndVersionArr = tag.split(':');
234
+ if (fileAndVersionArr.length < 2) {
235
+ throw new Error('Invalid tag option, --tag <filename:version>');
236
+ }
237
+ [name, version] = fileAndVersionArr;
238
+ }
239
+ let applicationType = 'screen';
240
+ let iotOptions = {};
241
+ // if app name and version are known, use them
242
+ const packageObject = await readPackageJson(appRootDir || process.cwd());
243
+ if (packageObject) {
244
+ name = packageObject.name || name;
245
+ license = packageObject.license || license;
246
+ version = packageObject.version || version;
247
+ if (packageObject['application-type'] === 'iot' ||
248
+ packageObject['application-type'] === 'module' ||
249
+ packageObject['application-type'] === 'edge') {
250
+ applicationType = 'module';
251
+ const settingsFilePath = `${currentDir}/${TemplateFileEnums.CONTAINER_SETTINGS}`;
252
+ if (!fs_extra_1.default.existsSync(settingsFilePath))
253
+ throw new Error(`${TemplateFileEnums.CONTAINER_SETTINGS} is required for Edge apps`);
254
+ const createOptions = JSON.parse(fs_extra_1.default.readFileSync(settingsFilePath).toString());
255
+ const registry = packageObject['docker-credentials']?.registry ||
256
+ packageObject['container-registry'];
257
+ if (!registry)
258
+ throw new Error('package.json should contain "container-registry" entry or "docker-credentials.registry" entry');
259
+ const archs = Object.keys((0, build_container_1.findArchs)(currentDir, 'all'));
260
+ console.log(chalk_1.default.dim('Reading container registry credentials from package.json'));
261
+ const dockerCredentials = packageObject['docker-credentials'];
262
+ if (!dockerCredentials?.pull?.username || !dockerCredentials?.pull?.password) {
263
+ throw new Error('Docker credentials not found in package.json. Please run create command again.');
264
+ }
265
+ // Check if a custom image name is specified in docker-credentials
266
+ let image;
267
+ if (dockerCredentials.image) {
268
+ image = dockerCredentials.image;
269
+ console.log(chalk_1.default.dim(`Using custom image name from docker-credentials: ${chalk_1.default.blue(image)}`));
270
+ // Ensure the custom image has a version tag
271
+ if (!image.includes(':')) {
272
+ image = `${image}:${version}`;
273
+ console.log(chalk_1.default.dim(`Adding version tag to custom image: ${chalk_1.default.blue(image)}`));
274
+ }
275
+ }
276
+ else {
277
+ image = `${registry}/${name}:${version}`;
278
+ }
279
+ let credentials = null;
280
+ const pullUsername = dockerCredentials.pull.username;
281
+ const pullPassword = dockerCredentials.pull.password;
282
+ const pushUsername = dockerCredentials.push?.username;
283
+ const pushPassword = dockerCredentials.push?.password;
284
+ credentials = { username: pullUsername, password: pullPassword };
285
+ if (pushUsername && pushPassword) {
286
+ try {
287
+ child_process_1.default.execSync(`docker login ${registry} -u ${pushUsername} -p ${pushPassword}`, {
288
+ stdio: 'inherit',
289
+ });
290
+ }
291
+ catch (error) {
292
+ console.log(chalk_1.default.yellow('Warning: Failed to store push credentials locally'));
293
+ }
294
+ }
295
+ console.log(chalk_1.default.dim(`Image found ${chalk_1.default.blue(image)}`));
296
+ // Update createOptions with pull credentials for the container
297
+ const updatedCreateOptions = {
298
+ ...createOptions,
299
+ RegistryCredentials: {
300
+ [registry]: {
301
+ username: pullUsername,
302
+ password: pullPassword,
303
+ },
304
+ },
305
+ };
306
+ iotOptions = {
307
+ image,
308
+ createOptions: JSON.stringify(updatedCreateOptions),
309
+ platforms: archs,
310
+ credentials,
311
+ };
312
+ }
313
+ }
314
+ const buildPath = `${currentDir}/build/build`;
315
+ const outputFileName = `${name}-${version}.gridapp`;
316
+ return {
317
+ outputFilePath: path_1.default.join(buildPath, outputFileName),
318
+ appInfo: {
319
+ name,
320
+ license,
321
+ version,
322
+ ...iotOptions,
323
+ applicationType,
324
+ // TODO: credentials, platforms, createOptions
325
+ },
326
+ };
327
+ };
328
+ exports.getGridAppFileInfo = getGridAppFileInfo;
329
+ exports.default = async (moduleName, options = {}) => {
330
+ try {
331
+ // Extract options with defaults to avoid undefined destructuring errors
332
+ const { arch } = options;
333
+ const tagArg = options.tag;
334
+ let templatePathArg = options.templatePath;
335
+ const buildPathArg = options.buildPath;
336
+ let tag = null;
337
+ // TRICKY: if this is an iot app build via yarn deploy
338
+ if (templatePathArg && templatePathArg.indexOf('@') >= 0) {
339
+ tag = templatePathArg.replace('@', ':');
340
+ templatePathArg = null; // Reset templatePathArg to null after extracting the tag
341
+ }
342
+ const templatePath = templatePathArg
343
+ ? path_1.default.resolve(templatePathArg)
344
+ : path_1.default.resolve('build');
345
+ const buildPath = buildPathArg
346
+ ? path_1.default.resolve(buildPathArg)
347
+ : path_1.default.resolve('build/build');
348
+ console.log(chalk_1.default.dim(`Reading package information`));
349
+ const outputFileInfo = await (0, exports.getOutputFileInfo)({ tag, moduleName, buildPath, arch });
350
+ const isIotApp = outputFileInfo.appInfo.applicationType === 'module';
351
+ if (isIotApp) {
352
+ // For IoT/Edge apps, just verify that Docker configuration is present
353
+ // The actual Docker build will happen during publish
354
+ const { image } = outputFileInfo.appInfo;
355
+ console.log(chalk_1.default.dim('Edge application detected'));
356
+ console.log(chalk_1.default.dim(`Docker image will be built during publish: ${chalk_1.default.blue(image)}`));
357
+ console.log(chalk_1.default.yellow('⚠️ Note: Run "yarn publish" to build and push the Docker image'));
358
+ }
359
+ console.log(chalk_1.default.dim('Using metadata'));
360
+ Object.entries(outputFileInfo.appInfo).map(([key, value]) => console.log(chalk_1.default.dim(` ${key}: ${chalk_1.default.blue(value)}`)));
361
+ console.log(chalk_1.default.dim(`Validating template files in ${templatePath}...`));
362
+ const requireIndex = !isIotApp;
363
+ const schemaInfo = await (0, with_spinner_1.default)(() => validateAndGetSchema(templatePath, requireIndex), `Validating...`);
364
+ console.log(chalk_1.default.green(`✓ Template files are valid`));
365
+ console.log(chalk_1.default.dim(`Creating gridapp file...`));
366
+ await (0, with_spinner_1.default)(() => build({ templatePath, ...schemaInfo, ...outputFileInfo }), `Building...`);
367
+ console.log(chalk_1.default.green(`✓ Build successful: ${outputFileInfo.outputFilePath}`));
368
+ }
369
+ catch (err) {
370
+ // TODO: setup logging (Sentry, file, console output)
371
+ console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
372
+ throw err;
373
+ }
374
+ };
375
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/app/build.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAwD;AACxD,wDAA0B;AAC1B,gDAAwB;AACxB,kDAA0B;AAC1B,8CAAsB;AACtB,8CAAsB;AAEtB,kEAA+B;AAC/B,4EAAmD;AAInD,uDAA8C;AAE9C,IAAK,iBAOJ;AAPD,WAAK,iBAAiB;IACpB,2CAAsB,CAAA;IACtB,qDAAgC,CAAA;IAChC,6CAAwB,CAAA;IACxB,yCAAoB,CAAA;IACpB,yDAAoC,CAAA;IACpC,+DAA0C,CAAA;AAC5C,CAAC,EAPI,iBAAiB,KAAjB,iBAAiB,QAOrB;AAED,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,aAAa,GAAQ;IACzB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,sBAAsB;IAC7B,UAAU,EAAE,EAAE;CACf,CAAC;AACF,MAAM,mBAAmB,GAAQ,EAAE,CAAC;AACpC,MAAM,wBAAwB,GAAU,EAAE,CAAC;AAE3C,MAAM,oBAAoB,GAAG;IAC3B,iBAAiB,CAAC,MAAM;IACxB,iBAAiB,CAAC,OAAO;IACzB,iBAAiB,CAAC,WAAW;IAC7B,iBAAiB,CAAC,gBAAgB;IAClC,kBAAkB;CACnB,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,YAAoB,EAAE,YAAY,GAAG,IAAI,EAAE,EAAE;IAC/E,IAAI,CAAC;QACH,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,aAAa,CAAC;QAC3B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC9E,IAAI,UAAU,GAAG,mBAAmB,CAAC;QACrC,IAAI,kBAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,aAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,GAAG,iBAAiB,CAAC,MAAM,iCAAiC,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CACnC,YAAY,EACZ,iBAAiB,CAAC,gBAAgB,CACnC,CAAC;QACF,IAAI,eAAe,GAAG,wBAAwB,CAAC;QAC/C,IAAI,kBAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YACtC,eAAe;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,YAAoB,EAAE,EAAE;IACrD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,kBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAwBF,MAAM,KAAK,GAAG,KAAK,EAAE,EACnB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,eAAe,EACf,cAAc,EACd,OAAO,GACI,EAAE,EAAE;IACf,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE9B,MAAM,KAAK,GAAG,kBAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,IAAI,QAAgB,CAAC;IACrB,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,6BAA6B;QAC7B,QAAQ,GAAG,cAAc,EAAE,KAAK,EAAE,IAAI,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CACvE,EAAE,GAAG,CAAC;IACT,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,OAAO;QACV,eAAe;QACf,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACxC,QAAQ;KACT,CAAC;IAEF,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACrB,CAAC;IACF,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;IAE9D,MAAM,gBAAgB,GAAG,kBAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAE9D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,wFAAwF;QACxF,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,aAAG,CAAC,MAAM,CACtC;QACE,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,YAAY;KAClB,EACD,UAAU,CACX,CAAC;IACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC7D,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,SAAS,EACT,GAAG,EACH,IAAI,GAML,EAAE,EAAE;IACH,kBAAkB;IAClB,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,YAAY,CAAC;IAE3B,IAAI,OAAO,CAAC;IACZ,IAAI,UAAU,CAAC;IAEf,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAAC;IAC5C,CAAC;IAED,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,OAAO,IAAI,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC;QAC7C,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;QAC3C,OAAO,GAAG,UAAU,IAAI,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;QAEzD,IACE,aAAa,CAAC,kBAAkB,CAAC,KAAK,KAAK;YAC3C,aAAa,CAAC,kBAAkB,CAAC,KAAK,QAAQ;YAC9C,aAAa,CAAC,kBAAkB,CAAC,KAAK,MAAM,EAC5C,CAAC;YACD,eAAe,GAAG,QAAQ,CAAC;YAE3B,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;gBACtD,MAAM,IAAI,KAAK,CACb,GAAG,iBAAiB,CAAC,kBAAkB,4BAA4B,CACpE,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YACzE,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CACjC,kBAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CACjE,CAAC;YAEF,MAAM,QAAQ,GACZ,aAAa,CAAC,oBAAoB,CAAC,EAAE,QAAQ;gBAC7C,aAAa,CAAC,oBAAoB,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ;gBACX,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;YAEJ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,2BAAS,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAEjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACnF,MAAM,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;YAE9D,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;YACJ,CAAC;YAED,kEAAkE;YAClE,IAAI,KAAK,CAAC;YACV,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;gBAC5B,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;gBAChC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,oDAAoD,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACxE,CACF,CAAC;gBAEF,4CAA4C;gBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,KAAK,GAAG,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,uCAAuC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CACtE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,GAAG,QAAQ,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3C,CAAC;YAED,IAAI,WAAW,GAAG,IAAI,CAAC;YAEvB,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;YACtD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;YAEtD,WAAW,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAEjE,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,uBAAE,CAAC,QAAQ,CAAC,gBAAgB,QAAQ,OAAO,YAAY,OAAO,YAAY,EAAE,EAAE;wBAC5E,KAAK,EAAE,SAAS;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3D,+DAA+D;YAC/D,MAAM,oBAAoB,GAAG;gBAC3B,GAAG,gBAAgB;gBACnB,mBAAmB,EAAE;oBACnB,CAAC,QAAQ,CAAC,EAAE;wBACV,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,YAAY;qBACvB;iBACF;aACF,CAAC;YAEF,UAAU,GAAG;gBACX,KAAK;gBACL,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBACnD,SAAS,EAAE,KAAK;gBAChB,WAAW;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,IAAI,IAAI,OAAO,UAAU,CAAC;IACpD,OAAO;QACL,cAAc,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QACpD,OAAO,EAAE;YACP,IAAI;YACJ,OAAO;YACP,OAAO;YACP,GAAG,UAAU;YACb,eAAe;YACf,8CAA8C;SACpC;KACb,CAAC;AACJ,CAAC,CAAC;AAnJW,QAAA,iBAAiB,qBAmJ5B;AAEF,mCAAmC;AAC5B,MAAM,kBAAkB,GAAG,KAAK,EAAE,UAAmB,EAAE,GAAY,EAAE,EAAE;IAC5E,MAAM,UAAU,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,kBAAkB;IAClB,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,OAAO,GAAG,YAAY,CAAC;IAE3B,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAAC;IACtC,CAAC;IAED,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzE,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC;QAClC,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;QAC3C,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;QAE3C,IACE,aAAa,CAAC,kBAAkB,CAAC,KAAK,KAAK;YAC3C,aAAa,CAAC,kBAAkB,CAAC,KAAK,QAAQ;YAC9C,aAAa,CAAC,kBAAkB,CAAC,KAAK,MAAM,EAC5C,CAAC;YACD,eAAe,GAAG,QAAQ,CAAC;YAE3B,MAAM,gBAAgB,GAAG,GAAG,UAAU,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;YACjF,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,GAAG,iBAAiB,CAAC,kBAAkB,4BAA4B,CACpE,CAAC;YACJ,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE/E,MAAM,QAAQ,GACZ,aAAa,CAAC,oBAAoB,CAAC,EAAE,QAAQ;gBAC7C,aAAa,CAAC,oBAAoB,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ;gBACX,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;YAEJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAA,2BAAS,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YAExD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACnF,MAAM,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;YAE9D,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;YACJ,CAAC;YAED,kEAAkE;YAClE,IAAI,KAAK,CAAC;YACV,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;gBAC5B,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;gBAChC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,oDAAoD,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACxE,CACF,CAAC;gBAEF,4CAA4C;gBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,KAAK,GAAG,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,uCAAuC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CACtE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,GAAG,QAAQ,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3C,CAAC;YAED,IAAI,WAAW,GAAG,IAAI,CAAC;YAEvB,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;YACtD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;YAEtD,WAAW,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAEjE,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,uBAAE,CAAC,QAAQ,CAAC,gBAAgB,QAAQ,OAAO,YAAY,OAAO,YAAY,EAAE,EAAE;wBAC5E,KAAK,EAAE,SAAS;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3D,+DAA+D;YAC/D,MAAM,oBAAoB,GAAG;gBAC3B,GAAG,aAAa;gBAChB,mBAAmB,EAAE;oBACnB,CAAC,QAAQ,CAAC,EAAE;wBACV,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,YAAY;qBACvB;iBACF;aACF,CAAC;YAEF,UAAU,GAAG;gBACX,KAAK;gBACL,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBACnD,SAAS,EAAE,KAAK;gBAChB,WAAW;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,UAAU,cAAc,CAAC;IAC9C,MAAM,cAAc,GAAG,GAAG,IAAI,IAAI,OAAO,UAAU,CAAC;IAEpD,OAAO;QACL,cAAc,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QACpD,OAAO,EAAE;YACP,IAAI;YACJ,OAAO;YACP,OAAO;YACP,GAAG,UAAU;YACb,eAAe;YACf,8CAA8C;SACpC;KACb,CAAC;AACJ,CAAC,CAAC;AAvIW,QAAA,kBAAkB,sBAuI7B;AAEF,kBAAe,KAAK,EAClB,UAAU,EACV,UAKI,EAAE,EACN,EAAE;IACF,IAAI,CAAC;QACH,wEAAwE;QACxE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3B,IAAI,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;QAEvC,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,sDAAsD;QACtD,IAAI,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,eAAe,GAAG,IAAI,CAAC,CAAC,yDAAyD;QACnF,CAAC;QAED,MAAM,YAAY,GAAG,eAAe;YAClC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAC/B,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1B,MAAM,SAAS,GAAG,YAAY;YAC5B,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5B,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,MAAM,IAAA,yBAAiB,EAAC,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAErF,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,sEAAsE;YACtE,qDAAqD;YACrD,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,8CAA8C,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CACxD,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,YAAY,KAAK,CAAC,CAAC,CAAC;QAE1E,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAA,sBAAW,EAClC,GAAG,EAAE,CAAC,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,EACtD,eAAe,CAChB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnD,MAAM,IAAA,sBAAW,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC,EAC/D,aAAa,CACd,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qDAAqD;QACrD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}