@interopio/iocd-cli 0.0.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 (297) hide show
  1. package/README.md +40 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +96 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/apps.command.d.ts +3 -0
  7. package/dist/commands/apps.command.d.ts.map +1 -0
  8. package/dist/commands/apps.command.js +110 -0
  9. package/dist/commands/apps.command.js.map +1 -0
  10. package/dist/commands/components.command.d.ts +3 -0
  11. package/dist/commands/components.command.d.ts.map +1 -0
  12. package/dist/commands/components.command.js +116 -0
  13. package/dist/commands/components.command.js.map +1 -0
  14. package/dist/commands/create.command.d.ts +3 -0
  15. package/dist/commands/create.command.d.ts.map +1 -0
  16. package/dist/commands/create.command.js +19 -0
  17. package/dist/commands/create.command.js.map +1 -0
  18. package/dist/commands/dev.command.d.ts +4 -0
  19. package/dist/commands/dev.command.d.ts.map +1 -0
  20. package/dist/commands/dev.command.js +25 -0
  21. package/dist/commands/dev.command.js.map +1 -0
  22. package/dist/commands/installer.command.d.ts +3 -0
  23. package/dist/commands/installer.command.d.ts.map +1 -0
  24. package/dist/commands/installer.command.js +19 -0
  25. package/dist/commands/installer.command.js.map +1 -0
  26. package/dist/commands/license.command.d.ts +3 -0
  27. package/dist/commands/license.command.d.ts.map +1 -0
  28. package/dist/commands/license.command.js +23 -0
  29. package/dist/commands/license.command.js.map +1 -0
  30. package/dist/commands/modifications.command.d.ts +3 -0
  31. package/dist/commands/modifications.command.d.ts.map +1 -0
  32. package/dist/commands/modifications.command.js +28 -0
  33. package/dist/commands/modifications.command.js.map +1 -0
  34. package/dist/commands/setup.command.d.ts +4 -0
  35. package/dist/commands/setup.command.d.ts.map +1 -0
  36. package/dist/commands/setup.command.js +34 -0
  37. package/dist/commands/setup.command.js.map +1 -0
  38. package/dist/services/app-builder.service.d.ts +2 -0
  39. package/dist/services/app-builder.service.d.ts.map +1 -0
  40. package/dist/services/app-builder.service.js +3 -0
  41. package/dist/services/app-builder.service.js.map +1 -0
  42. package/dist/services/app.service.d.ts +74 -0
  43. package/dist/services/app.service.d.ts.map +1 -0
  44. package/dist/services/app.service.js +328 -0
  45. package/dist/services/app.service.js.map +1 -0
  46. package/dist/services/components/component.config.d.ts +11 -0
  47. package/dist/services/components/component.config.d.ts.map +1 -0
  48. package/dist/services/components/component.config.js +101 -0
  49. package/dist/services/components/component.config.js.map +1 -0
  50. package/dist/services/components/component.d.ts +12 -0
  51. package/dist/services/components/component.d.ts.map +1 -0
  52. package/dist/services/components/component.js +3 -0
  53. package/dist/services/components/component.js.map +1 -0
  54. package/dist/services/components/components.registry.d.ts +40 -0
  55. package/dist/services/components/components.registry.d.ts.map +1 -0
  56. package/dist/services/components/components.registry.js +72 -0
  57. package/dist/services/components/components.registry.js.map +1 -0
  58. package/dist/services/components/components.service.d.ts +20 -0
  59. package/dist/services/components/components.service.d.ts.map +1 -0
  60. package/dist/services/components/components.service.js +171 -0
  61. package/dist/services/components/components.service.js.map +1 -0
  62. package/dist/services/components/file.helper.d.ts +12 -0
  63. package/dist/services/components/file.helper.d.ts.map +1 -0
  64. package/dist/services/components/file.helper.js +124 -0
  65. package/dist/services/components/file.helper.js.map +1 -0
  66. package/dist/services/components/platform.utils.d.ts +72 -0
  67. package/dist/services/components/platform.utils.d.ts.map +1 -0
  68. package/dist/services/components/platform.utils.js +156 -0
  69. package/dist/services/components/platform.utils.js.map +1 -0
  70. package/dist/services/components/stores/github.store.d.ts +35 -0
  71. package/dist/services/components/stores/github.store.d.ts.map +1 -0
  72. package/dist/services/components/stores/github.store.js +157 -0
  73. package/dist/services/components/stores/github.store.js.map +1 -0
  74. package/dist/services/components/stores/local.store.d.ts +69 -0
  75. package/dist/services/components/stores/local.store.d.ts.map +1 -0
  76. package/dist/services/components/stores/local.store.js +300 -0
  77. package/dist/services/components/stores/local.store.js.map +1 -0
  78. package/dist/services/components/stores/s3.store.d.ts +98 -0
  79. package/dist/services/components/stores/s3.store.d.ts.map +1 -0
  80. package/dist/services/components/stores/s3.store.js +368 -0
  81. package/dist/services/components/stores/s3.store.js.map +1 -0
  82. package/dist/services/components/stores/store.d.ts +11 -0
  83. package/dist/services/components/stores/store.d.ts.map +1 -0
  84. package/dist/services/components/stores/store.js +3 -0
  85. package/dist/services/components/stores/store.js.map +1 -0
  86. package/dist/services/config/cli.config.d.ts +57 -0
  87. package/dist/services/config/cli.config.d.ts.map +1 -0
  88. package/dist/services/config/cli.config.js +3 -0
  89. package/dist/services/config/cli.config.js.map +1 -0
  90. package/dist/services/config/config.service.d.ts +14 -0
  91. package/dist/services/config/config.service.d.ts.map +1 -0
  92. package/dist/services/config/config.service.js +170 -0
  93. package/dist/services/config/config.service.js.map +1 -0
  94. package/dist/services/create.service.d.ts +58 -0
  95. package/dist/services/create.service.d.ts.map +1 -0
  96. package/dist/services/create.service.js +318 -0
  97. package/dist/services/create.service.js.map +1 -0
  98. package/dist/services/dev.service.d.ts +2 -0
  99. package/dist/services/dev.service.d.ts.map +1 -0
  100. package/dist/services/dev.service.js +78 -0
  101. package/dist/services/dev.service.js.map +1 -0
  102. package/dist/services/installer/electronBuilder.d.ts +2 -0
  103. package/dist/services/installer/electronBuilder.d.ts.map +1 -0
  104. package/dist/services/installer/electronBuilder.js +3 -0
  105. package/dist/services/installer/electronBuilder.js.map +1 -0
  106. package/dist/services/installer/electronForge.d.ts +2 -0
  107. package/dist/services/installer/electronForge.d.ts.map +1 -0
  108. package/dist/services/installer/electronForge.js +248 -0
  109. package/dist/services/installer/electronForge.js.map +1 -0
  110. package/dist/services/installer/installer.service.d.ts +5 -0
  111. package/dist/services/installer/installer.service.d.ts.map +1 -0
  112. package/dist/services/installer/installer.service.js +101 -0
  113. package/dist/services/installer/installer.service.js.map +1 -0
  114. package/dist/services/installer/macOS.helper.d.ts +3 -0
  115. package/dist/services/installer/macOS.helper.d.ts.map +1 -0
  116. package/dist/services/installer/macOS.helper.js +244 -0
  117. package/dist/services/installer/macOS.helper.js.map +1 -0
  118. package/dist/services/installer/prerequisites.d.ts +2 -0
  119. package/dist/services/installer/prerequisites.d.ts.map +1 -0
  120. package/dist/services/installer/prerequisites.js +73 -0
  121. package/dist/services/installer/prerequisites.js.map +1 -0
  122. package/dist/services/installer/windows.helper.d.ts +10 -0
  123. package/dist/services/installer/windows.helper.d.ts.map +1 -0
  124. package/dist/services/installer/windows.helper.js +394 -0
  125. package/dist/services/installer/windows.helper.js.map +1 -0
  126. package/dist/services/license.service.d.ts +7 -0
  127. package/dist/services/license.service.d.ts.map +1 -0
  128. package/dist/services/license.service.js +14 -0
  129. package/dist/services/license.service.js.map +1 -0
  130. package/dist/services/modifications/macOS.helper.d.ts +13 -0
  131. package/dist/services/modifications/macOS.helper.d.ts.map +1 -0
  132. package/dist/services/modifications/macOS.helper.js +274 -0
  133. package/dist/services/modifications/macOS.helper.js.map +1 -0
  134. package/dist/services/modifications/modifications.service.d.ts +2 -0
  135. package/dist/services/modifications/modifications.service.d.ts.map +1 -0
  136. package/dist/services/modifications/modifications.service.js +376 -0
  137. package/dist/services/modifications/modifications.service.js.map +1 -0
  138. package/dist/services/modifications/windows.helper.d.ts +2 -0
  139. package/dist/services/modifications/windows.helper.d.ts.map +1 -0
  140. package/dist/services/modifications/windows.helper.js +83 -0
  141. package/dist/services/modifications/windows.helper.js.map +1 -0
  142. package/dist/services/template.service.d.ts +116 -0
  143. package/dist/services/template.service.d.ts.map +1 -0
  144. package/dist/services/template.service.js +354 -0
  145. package/dist/services/template.service.js.map +1 -0
  146. package/dist/templates/auto-tests/README.md +31 -0
  147. package/dist/templates/auto-tests/playwright.config.js +19 -0
  148. package/dist/templates/auto-tests/template.json +12 -0
  149. package/dist/templates/auto-tests/tests/basic.test.js +15 -0
  150. package/dist/templates/ioconnect-desktop/.env.example +29 -0
  151. package/dist/templates/ioconnect-desktop/.github/workflows/build-installers.yml +170 -0
  152. package/dist/templates/ioconnect-desktop/LICENSE +0 -0
  153. package/dist/templates/ioconnect-desktop/README.md +0 -0
  154. package/dist/templates/ioconnect-desktop/config/mac-build/entitlements.mac.plist +44 -0
  155. package/dist/templates/ioconnect-desktop/config/win-build/template.nuspectemplate +33 -0
  156. package/dist/templates/ioconnect-desktop/forge.config.js +47 -0
  157. package/dist/templates/ioconnect-desktop/iocd.cli.config.json +45 -0
  158. package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.icns +0 -0
  159. package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.ico +0 -0
  160. package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.png +0 -0
  161. package/dist/templates/ioconnect-desktop/modifications/iocd/config/system.json.merge +3 -0
  162. package/dist/templates/ioconnect-desktop/package.json +43 -0
  163. package/dist/templates/ioconnect-desktop/template.json +7 -0
  164. package/dist/templates/launchpad/apps/launchpad/.eslintrc.json +3 -0
  165. package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +57 -0
  166. package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.prod.json +2 -0
  167. package/dist/templates/launchpad/apps/launchpad/config/iocd.system.dev.json +3 -0
  168. package/dist/templates/launchpad/apps/launchpad/config/iocd.system.prod.json +3 -0
  169. package/dist/templates/launchpad/apps/launchpad/index.html +16 -0
  170. package/dist/templates/launchpad/apps/launchpad/iocd.app.json +32 -0
  171. package/dist/templates/launchpad/apps/launchpad/package-lock.json +2778 -0
  172. package/dist/templates/launchpad/apps/launchpad/package.json +21 -0
  173. package/dist/templates/launchpad/apps/launchpad/public/favicon.ico +0 -0
  174. package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +39 -0
  175. package/dist/templates/launchpad/apps/launchpad/src/app/constants.ts +27 -0
  176. package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +11 -0
  177. package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +162 -0
  178. package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +44 -0
  179. package/dist/templates/launchpad/apps/launchpad/src/main.tsx +6 -0
  180. package/dist/templates/launchpad/apps/launchpad/src/styles.css +17 -0
  181. package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -0
  182. package/dist/templates/launchpad/apps/launchpad/vite.config.ts +13 -0
  183. package/dist/templates/launchpad/template.json +12 -0
  184. package/dist/templates/splash-screen/apps/splash-screen/README.md +119 -0
  185. package/dist/templates/splash-screen/apps/splash-screen/config/system-dev.json +9 -0
  186. package/dist/templates/splash-screen/apps/splash-screen/config/system-prod.json +8 -0
  187. package/dist/templates/splash-screen/apps/splash-screen/index.html +55 -0
  188. package/dist/templates/splash-screen/apps/splash-screen/iocd.app.json +20 -0
  189. package/dist/templates/splash-screen/apps/splash-screen/package-lock.json +1059 -0
  190. package/dist/templates/splash-screen/apps/splash-screen/package.json +17 -0
  191. package/dist/templates/splash-screen/apps/splash-screen/public/assets/fonts/PTSans-Regular.ttf +0 -0
  192. package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/logo-light.svg +85 -0
  193. package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/splash-bg.png +0 -0
  194. package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css +149 -0
  195. package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css.map +1 -0
  196. package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.scss +90 -0
  197. package/dist/templates/splash-screen/apps/splash-screen/src/main.ts +93 -0
  198. package/dist/templates/splash-screen/apps/splash-screen/src/types.ts +28 -0
  199. package/dist/templates/splash-screen/apps/splash-screen/tsconfig.json +25 -0
  200. package/dist/templates/splash-screen/apps/splash-screen/vite.config.ts +27 -0
  201. package/dist/templates/splash-screen/template.json +12 -0
  202. package/dist/templates/web-groups/apps/web-groups/README.md +15 -0
  203. package/dist/templates/web-groups/apps/web-groups/config/web-group-dev.json +13 -0
  204. package/dist/templates/web-groups/apps/web-groups/config/web-group-prod.json +12 -0
  205. package/dist/templates/web-groups/apps/web-groups/index.html +18 -0
  206. package/dist/templates/web-groups/apps/web-groups/iocd.app.json +24 -0
  207. package/dist/templates/web-groups/apps/web-groups/package.json +28 -0
  208. package/dist/templates/web-groups/apps/web-groups/public/favicon.ico +0 -0
  209. package/dist/templates/web-groups/apps/web-groups/public/logo192.png +0 -0
  210. package/dist/templates/web-groups/apps/web-groups/public/logo512.png +0 -0
  211. package/dist/templates/web-groups/apps/web-groups/public/manifest.json +25 -0
  212. package/dist/templates/web-groups/apps/web-groups/public/robots.txt +3 -0
  213. package/dist/templates/web-groups/apps/web-groups/src/App.css +38 -0
  214. package/dist/templates/web-groups/apps/web-groups/src/App.tsx +11 -0
  215. package/dist/templates/web-groups/apps/web-groups/src/index.css +13 -0
  216. package/dist/templates/web-groups/apps/web-groups/src/index.tsx +25 -0
  217. package/dist/templates/web-groups/apps/web-groups/src/logo.svg +1 -0
  218. package/dist/templates/web-groups/apps/web-groups/src/reportWebVitals.ts +15 -0
  219. package/dist/templates/web-groups/apps/web-groups/tsconfig.json +26 -0
  220. package/dist/templates/web-groups/apps/web-groups/vite.config.ts +8 -0
  221. package/dist/templates/web-groups/template.json +12 -0
  222. package/dist/templates/workspaces/apps/workspaces/README.md +15 -0
  223. package/dist/templates/workspaces/apps/workspaces/config/workspaces-dev.json +21 -0
  224. package/dist/templates/workspaces/apps/workspaces/config/workspaces-prod.json +20 -0
  225. package/dist/templates/workspaces/apps/workspaces/index.html +17 -0
  226. package/dist/templates/workspaces/apps/workspaces/iocd.app.json +24 -0
  227. package/dist/templates/workspaces/apps/workspaces/package.json +29 -0
  228. package/dist/templates/workspaces/apps/workspaces/public/favicon.ico +0 -0
  229. package/dist/templates/workspaces/apps/workspaces/public/logo192.png +0 -0
  230. package/dist/templates/workspaces/apps/workspaces/public/logo512.png +0 -0
  231. package/dist/templates/workspaces/apps/workspaces/public/manifest.json +25 -0
  232. package/dist/templates/workspaces/apps/workspaces/public/robots.txt +3 -0
  233. package/dist/templates/workspaces/apps/workspaces/src/AddWindowButton.tsx +33 -0
  234. package/dist/templates/workspaces/apps/workspaces/src/AfterTabs.tsx +27 -0
  235. package/dist/templates/workspaces/apps/workspaces/src/App.css +38 -0
  236. package/dist/templates/workspaces/apps/workspaces/src/App.tsx +103 -0
  237. package/dist/templates/workspaces/apps/workspaces/src/GroupHeaderButtons.tsx +9 -0
  238. package/dist/templates/workspaces/apps/workspaces/src/index.css +4 -0
  239. package/dist/templates/workspaces/apps/workspaces/src/index.tsx +28 -0
  240. package/dist/templates/workspaces/apps/workspaces/src/logo.svg +7 -0
  241. package/dist/templates/workspaces/apps/workspaces/src/reportWebVitals.ts +15 -0
  242. package/dist/templates/workspaces/apps/workspaces/src/setupTests.ts +5 -0
  243. package/dist/templates/workspaces/apps/workspaces/src/useAddWindowButtonVisible.tsx +30 -0
  244. package/dist/templates/workspaces/apps/workspaces/tsconfig.json +26 -0
  245. package/dist/templates/workspaces/apps/workspaces/vite.config.ts +8 -0
  246. package/dist/templates/workspaces/template.json +12 -0
  247. package/dist/tools/rcedit-x64.exe +0 -0
  248. package/dist/utils/colors.d.ts +57 -0
  249. package/dist/utils/colors.d.ts.map +1 -0
  250. package/dist/utils/colors.js +151 -0
  251. package/dist/utils/colors.js.map +1 -0
  252. package/dist/utils/deep.merge.d.ts +5 -0
  253. package/dist/utils/deep.merge.d.ts.map +1 -0
  254. package/dist/utils/deep.merge.js +27 -0
  255. package/dist/utils/deep.merge.js.map +1 -0
  256. package/dist/utils/electron.builder.config.helper.d.ts +6 -0
  257. package/dist/utils/electron.builder.config.helper.d.ts.map +1 -0
  258. package/dist/utils/electron.builder.config.helper.js +25 -0
  259. package/dist/utils/electron.builder.config.helper.js.map +1 -0
  260. package/dist/utils/ensure.iocd.exists.d.ts +2 -0
  261. package/dist/utils/ensure.iocd.exists.d.ts.map +1 -0
  262. package/dist/utils/ensure.iocd.exists.js +27 -0
  263. package/dist/utils/ensure.iocd.exists.js.map +1 -0
  264. package/dist/utils/error.handler.d.ts +30 -0
  265. package/dist/utils/error.handler.d.ts.map +1 -0
  266. package/dist/utils/error.handler.js +104 -0
  267. package/dist/utils/error.handler.js.map +1 -0
  268. package/dist/utils/file.d.ts +10 -0
  269. package/dist/utils/file.d.ts.map +1 -0
  270. package/dist/utils/file.js +40 -0
  271. package/dist/utils/file.js.map +1 -0
  272. package/dist/utils/find.package.dir.d.ts +2 -0
  273. package/dist/utils/find.package.dir.d.ts.map +1 -0
  274. package/dist/utils/find.package.dir.js +23 -0
  275. package/dist/utils/find.package.dir.js.map +1 -0
  276. package/dist/utils/logger.d.ts +19 -0
  277. package/dist/utils/logger.d.ts.map +1 -0
  278. package/dist/utils/logger.js +184 -0
  279. package/dist/utils/logger.js.map +1 -0
  280. package/dist/utils/nextSteps.d.ts +2 -0
  281. package/dist/utils/nextSteps.d.ts.map +1 -0
  282. package/dist/utils/nextSteps.js +44 -0
  283. package/dist/utils/nextSteps.js.map +1 -0
  284. package/dist/utils/pacakge.json.helper.d.ts +9 -0
  285. package/dist/utils/pacakge.json.helper.d.ts.map +1 -0
  286. package/dist/utils/pacakge.json.helper.js +71 -0
  287. package/dist/utils/pacakge.json.helper.js.map +1 -0
  288. package/dist/utils/path.d.ts +19 -0
  289. package/dist/utils/path.d.ts.map +1 -0
  290. package/dist/utils/path.js +81 -0
  291. package/dist/utils/path.js.map +1 -0
  292. package/dist/utils/version.d.ts +2 -0
  293. package/dist/utils/version.d.ts.map +1 -0
  294. package/dist/utils/version.js +16 -0
  295. package/dist/utils/version.js.map +1 -0
  296. package/package.json +69 -0
  297. package/tools/rcedit-x64.exe +0 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentsRegistry = void 0;
4
+ /**
5
+ * Central registry of all known components with their static metadata
6
+ * It is best if this goes to cli configuration
7
+ */
8
+ class ComponentsRegistry {
9
+ static COMPONENT_REGISTRY = {
10
+ iocd: {
11
+ displayName: 'io.Connect Desktop',
12
+ name: 'iocd',
13
+ licenseRequired: true,
14
+ platforms: ['win32', 'darwin'],
15
+ description: 'The main io.Connect Desktop application runtime. Required component.',
16
+ required: true
17
+ },
18
+ 'devTools': {
19
+ displayName: 'Developer Tools',
20
+ name: 'devTools',
21
+ licenseRequired: false,
22
+ platforms: ['win32', 'darwin'],
23
+ description: 'Developer tools for io.Connect Desktop',
24
+ },
25
+ 'bbgv2': {
26
+ displayName: 'Bloomberg V2 Adapter',
27
+ name: 'bbgv2',
28
+ licenseRequired: true,
29
+ platforms: ['win32'],
30
+ description: 'Bloomberg Terminal V2 integration adapter',
31
+ },
32
+ 'bbgv3': {
33
+ displayName: 'Bloomberg V3 Adapter',
34
+ name: 'bbgv3',
35
+ licenseRequired: true,
36
+ platforms: ['win32', 'darwin'],
37
+ description: 'Bloomberg Terminal V3 integration adapter',
38
+ }
39
+ };
40
+ static getComponents() {
41
+ return Object.values(this.COMPONENT_REGISTRY);
42
+ }
43
+ /**
44
+ * Get component definition by name
45
+ */
46
+ static getComponentDefinition(componentName) {
47
+ return this.COMPONENT_REGISTRY[componentName];
48
+ }
49
+ /**
50
+ * Get all known component names
51
+ */
52
+ static getAllComponentNames() {
53
+ return Object.keys(this.COMPONENT_REGISTRY);
54
+ }
55
+ /**
56
+ * Get components that support a specific platform
57
+ */
58
+ static getComponentsForPlatform(platform) {
59
+ return Object.entries(this.COMPONENT_REGISTRY)
60
+ .filter(([_, def]) => def.platforms.includes(platform))
61
+ .map(([name, _]) => name);
62
+ }
63
+ /**
64
+ * Check if a component exists and supports a platform
65
+ */
66
+ static isComponentSupported(componentName, platform) {
67
+ const definition = this.getComponentDefinition(componentName);
68
+ return definition ? definition.platforms.includes(platform) : false;
69
+ }
70
+ }
71
+ exports.ComponentsRegistry = ComponentsRegistry;
72
+ //# sourceMappingURL=components.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.registry.js","sourceRoot":"","sources":["../../../src/services/components/components.registry.ts"],"names":[],"mappings":";;;AAiBA;;;GAGG;AACH,MAAa,kBAAkB;IAGnB,MAAM,CAAC,kBAAkB,GAAwC;QACrE,IAAI,EAAE;YACF,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,MAAM;YACZ,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC9B,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,IAAI;SACjB;QACD,UAAU,EAAE;YACR,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,UAAU;YAChB,eAAe,EAAE,KAAK;YACtB,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC9B,WAAW,EAAE,wCAAwC;SACxD;QACD,OAAO,EAAE;YACL,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,OAAO;YACb,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,2CAA2C;SAC3D;QACD,OAAO,EAAE;YACL,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,OAAO;YACb,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC9B,WAAW,EAAE,2CAA2C;SAC3D;KACJ,CAAC;IAEK,MAAM,CAAC,aAAa;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,sBAAsB,CAAC,aAAqB;QACtD,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,oBAAoB;QAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,wBAAwB,CAAC,QAA4B;QAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,oBAAoB,CAAC,aAAqB,EAAE,QAA4B;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAC9D,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,CAAC;;AApEL,gDAqEC"}
@@ -0,0 +1,20 @@
1
+ import { ComponentReference } from "./component";
2
+ /**
3
+ * Service for managing components
4
+ */
5
+ export declare class ComponentsService {
6
+ private logger;
7
+ private componentsStore;
8
+ constructor();
9
+ listComponentsInThisProject(): Promise<ComponentReference[]>;
10
+ browseComponentsFromStore(): Promise<Array<{
11
+ name: string;
12
+ versions: string[];
13
+ }>>;
14
+ installComponent(name: string, version?: string): Promise<any>;
15
+ uninstallComponent(name: string): Promise<any>;
16
+ installComponents(): Promise<any>;
17
+ private installComponentCore;
18
+ private processComponentConfig;
19
+ }
20
+ //# sourceMappingURL=components.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.service.d.ts","sourceRoot":"","sources":["../../../src/services/components/components.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAW5D;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,eAAe,CAAkB;;IAe5B,2BAA2B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAU5D,yBAAyB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAwBjF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmBrE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAoB9C,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;YAsBzB,oBAAoB;YAiBpB,sBAAsB;CAGvC"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ComponentsService = void 0;
37
+ const config_service_1 = require("../config/config.service");
38
+ const logger_1 = require("../../utils/logger");
39
+ const file_helper_1 = require("./file.helper");
40
+ const github_store_1 = require("./stores/github.store");
41
+ const local_store_1 = require("./stores/local.store");
42
+ const s3_store_1 = require("./stores/s3.store");
43
+ const fs_1 = require("fs");
44
+ const path_1 = require("path");
45
+ const component_config_1 = require("./component.config");
46
+ const colors_1 = require("../../utils/colors");
47
+ const clack = __importStar(require("@clack/prompts"));
48
+ /**
49
+ * Service for managing components
50
+ */
51
+ class ComponentsService {
52
+ logger = logger_1.Logger.getInstance();
53
+ componentsStore;
54
+ constructor() {
55
+ if (config_service_1.ConfigManager.config.components.store === "github") {
56
+ this.componentsStore = new github_store_1.GitHubComponentsStore(config_service_1.ConfigManager.config.components.storeGithubRepo);
57
+ }
58
+ else if (config_service_1.ConfigManager.config.components.store === "local") {
59
+ this.componentsStore = new local_store_1.LocalComponentsStore(config_service_1.ConfigManager.config.components.storeLocalPath);
60
+ }
61
+ else if (config_service_1.ConfigManager.config.components.store === "s3") {
62
+ this.componentsStore = new s3_store_1.S3ComponentsStore(config_service_1.ConfigManager.config.components.storeS3Config);
63
+ }
64
+ else {
65
+ throw new Error(`Unknown components store: ${config_service_1.ConfigManager.config.components.store}`);
66
+ }
67
+ this.logger.info(`Using components store: ${this.componentsStore.getInfo()}`);
68
+ }
69
+ async listComponentsInThisProject() {
70
+ // Logic to extract components from the definition
71
+ const componentsList = config_service_1.ConfigManager.config.components.list;
72
+ return Object.keys(componentsList).map(key => ({
73
+ name: key,
74
+ version: componentsList[key]
75
+ }));
76
+ }
77
+ async browseComponentsFromStore() {
78
+ this.logger.info(`Listing available components from store ${this.componentsStore.getInfo()}...`);
79
+ const all = await this.componentsStore.getAll();
80
+ const byComponent = all.reduce((acc, component) => {
81
+ let current = acc[component.name];
82
+ if (!current) {
83
+ current = {
84
+ versions: new Set()
85
+ };
86
+ acc[component.name] = current;
87
+ }
88
+ current.versions.add(component.version);
89
+ return acc;
90
+ }, {});
91
+ this.logger.debug(`Found ${Object.keys(byComponent).length} components:`);
92
+ for (const [name, { versions }] of Object.entries(byComponent)) {
93
+ this.logger.debug(`Component: ${name}, Versions: ${Array.from(versions).join(", ")}`);
94
+ }
95
+ return Object.entries(byComponent).map(([name, { versions }]) => ({
96
+ name,
97
+ versions: Array.from(versions)
98
+ }));
99
+ }
100
+ async installComponent(name, version) {
101
+ version = version ?? "latest";
102
+ if (name.indexOf('@') >= 0) {
103
+ const parts = name.split('@');
104
+ name = parts[0];
105
+ version = parts[1] || version;
106
+ }
107
+ // install the component
108
+ await this.installComponentCore(name, version);
109
+ this.logger.info(`Updating iocd.cli.config.json to include ${name}@${version}...`);
110
+ // Save back to config
111
+ const componentsList = config_service_1.ConfigManager.config.components.list;
112
+ componentsList[name] = version;
113
+ await config_service_1.ConfigManager.saveComponents(componentsList);
114
+ this.logger.info(`Updated iocd.cli.config.json to include ${name}@${version}`);
115
+ }
116
+ async uninstallComponent(name) {
117
+ this.logger.info(`Uninstalling component ${name}...`);
118
+ // Remove from config first
119
+ const componentsList = config_service_1.ConfigManager.config.components.list;
120
+ if (componentsList[name]) {
121
+ delete componentsList[name];
122
+ await config_service_1.ConfigManager.saveComponents(componentsList);
123
+ this.logger.debug(`Updated iocd.cli.config.json to remove ${name}`);
124
+ }
125
+ else {
126
+ this.logger.warn(`Component ${name} not found in iocd.cli.config.json`);
127
+ }
128
+ // Now remove the files
129
+ const fileService = new file_helper_1.FileHelper();
130
+ await fileService.removeComponent(name);
131
+ this.logger.info(`Component ${name} uninstalled successfully.`);
132
+ }
133
+ async installComponents() {
134
+ this.logger.info('Installing all components described in iocd.cli.config.json...');
135
+ // Use the ComponentsStore to download all components described in package.json under ioCDComponents
136
+ const components = await this.listComponentsInThisProject();
137
+ const status = [];
138
+ for (const component of components) {
139
+ try {
140
+ await this.installComponentCore(component.name, component.version);
141
+ status.push((0, colors_1.green)(` • ${component.name}@${component.version} installed successfully`));
142
+ }
143
+ catch (error) {
144
+ const errorMsg = `Failed to install component ${component.name}@${component.version}: ${error}`;
145
+ status.push((0, colors_1.yellow)(` • ${component.name}@${component.version} failed - ${error}`));
146
+ this.logger.error(errorMsg);
147
+ }
148
+ }
149
+ clack.note(status.join('\n'), '📦 Component Installation Finished');
150
+ this.logger.debug(`Components installation finished ${status.join('\n ')}`);
151
+ }
152
+ async installComponentCore(name, version) {
153
+ this.logger.info(`Installing component ${name}@${version}...`);
154
+ const componentData = await this.componentsStore.download(name, version);
155
+ const fileService = new file_helper_1.FileHelper();
156
+ const componentDir = await fileService.storeComponent(componentData);
157
+ // find component.json inside the componentDir
158
+ const componentJsonPath = (0, path_1.join)(componentDir, 'component.json');
159
+ this.logger.debug(`Looking for component.json at ${componentJsonPath}...`);
160
+ if ((0, fs_1.existsSync)(componentJsonPath)) {
161
+ this.logger.debug(`Found component.json for ${name}@${version}, processing components config...`);
162
+ await this.processComponentConfig(componentDir, componentJsonPath);
163
+ }
164
+ this.logger.info(`Component ${name}@${version} installed successfully.`);
165
+ }
166
+ async processComponentConfig(componentDir, componentJsonPath) {
167
+ await (0, component_config_1.copyModifications)(componentDir, componentJsonPath);
168
+ }
169
+ }
170
+ exports.ComponentsService = ComponentsService;
171
+ //# sourceMappingURL=components.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.service.js","sourceRoot":"","sources":["../../../src/services/components/components.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class FileHelper {
2
+ private logger;
3
+ removeComponent(name: string): void;
4
+ storeComponent(component: {
5
+ name: string;
6
+ data: any;
7
+ filename: string;
8
+ }): Promise<string>;
9
+ private extractDmg;
10
+ private extractZip;
11
+ }
12
+ //# sourceMappingURL=file.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.helper.d.ts","sourceRoot":"","sources":["../../../src/services/components/file.helper.ts"],"names":[],"mappings":"AAMA,qBAAa,UAAU;IAGnB,OAAO,CAAC,MAAM,CAAwB;IAE/B,eAAe,CAAC,IAAI,EAAE,MAAM;IAWtB,cAAc,CAAC,SAAS,EAAE;QACnC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,CAAC;QACV,QAAQ,EAAE,MAAM,CAAA;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;YAwDL,UAAU;YAyBV,UAAU;CAgC3B"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileHelper = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const child_process_1 = require("child_process");
7
+ const logger_1 = require("../../utils/logger");
8
+ const path_2 = require("../../utils/path");
9
+ class FileHelper {
10
+ logger = logger_1.Logger.getInstance();
11
+ removeComponent(name) {
12
+ this.logger.debug(`Removing component ${name}...`);
13
+ const componentDir = (0, path_1.join)(path_2.PathUtils.getComponentDir(name));
14
+ if ((0, fs_1.existsSync)(componentDir)) {
15
+ (0, fs_1.rmSync)(componentDir, { recursive: true, force: true });
16
+ this.logger.debug(`Component ${name} removed successfully from ${componentDir}`);
17
+ }
18
+ else {
19
+ this.logger.debug(`Component directory ${componentDir} does not exist, nothing to remove.`);
20
+ }
21
+ }
22
+ async storeComponent(component) {
23
+ try {
24
+ this.logger.debug(`Storing component ${component.name}...`);
25
+ // Create temp directory for storing the downloaded file
26
+ const tempDir = (0, path_1.join)(process.cwd(), 'temp');
27
+ if (!(0, fs_1.existsSync)(tempDir)) {
28
+ (0, fs_1.mkdirSync)(tempDir, { recursive: true });
29
+ }
30
+ // Write the file to temp location
31
+ const tempFilePath = (0, path_1.join)(tempDir, component.filename);
32
+ this.logger.debug(`Writing component file to temp directory: ${tempDir}, data length: ${component.data.length}`);
33
+ (0, fs_1.writeFileSync)(tempFilePath, component.data);
34
+ this.logger.debug(`Component file written to ${tempFilePath}`);
35
+ // Create components directory structure
36
+ const componentsDir = (0, path_1.join)(process.cwd(), 'components');
37
+ const componentDir = (0, path_1.join)(componentsDir, component.name);
38
+ // Remove existing component directory if it exists
39
+ if ((0, fs_1.existsSync)(componentDir)) {
40
+ this.logger.debug(`Removing existing component directory: ${componentDir}`);
41
+ (0, fs_1.rmSync)(componentDir, { recursive: true, force: true });
42
+ }
43
+ // Create fresh component directory
44
+ (0, fs_1.mkdirSync)(componentDir, { recursive: true });
45
+ // Extract based on file type
46
+ const filename = component.filename.toLowerCase();
47
+ if (filename.endsWith('.dmg')) {
48
+ await this.extractDmg(tempFilePath, componentDir);
49
+ }
50
+ else if (filename.endsWith('.zip')) {
51
+ await this.extractZip(tempFilePath, componentDir);
52
+ }
53
+ else {
54
+ // For other files (like .exe), just copy them directly
55
+ const targetPath = (0, path_1.join)(componentDir, component.filename);
56
+ (0, fs_1.writeFileSync)(targetPath, component.data);
57
+ this.logger.info(`Copied ${component.filename} to ${componentDir}`);
58
+ }
59
+ this.logger.debug(`Removing temporary file: ${tempFilePath}`);
60
+ // Clean up temp file
61
+ // rmSync(tempFilePath, { force: true });
62
+ this.logger.debug(`Temporary file ${tempFilePath} removed.`);
63
+ this.logger.info(`Component ${component.name} stored and extracted to ${componentDir} successfully!`);
64
+ return componentDir;
65
+ }
66
+ catch (error) {
67
+ this.logger.error(`Failed to store component ${component.name}:`, error);
68
+ throw error;
69
+ }
70
+ }
71
+ async extractDmg(dmgPath, extractDir) {
72
+ try {
73
+ // Create extraction directory
74
+ if (!(0, fs_1.existsSync)(extractDir)) {
75
+ (0, fs_1.mkdirSync)(extractDir, { recursive: true });
76
+ }
77
+ // Mount the DMG to a temporary location
78
+ const mountPoint = `/tmp/dmg_mount_${Date.now()}`;
79
+ (0, child_process_1.execSync)(`hdiutil attach "${dmgPath}" -mountpoint "${mountPoint}" -quiet`);
80
+ // Copy contents to extraction directory
81
+ (0, child_process_1.execSync)(`cp -R "${mountPoint}"/* "${extractDir}"/`);
82
+ // Unmount the DMG
83
+ (0, child_process_1.execSync)(`hdiutil detach "${mountPoint}" -quiet`);
84
+ this.logger.debug(`Extracted DMG to ${extractDir}`);
85
+ }
86
+ catch (error) {
87
+ this.logger.error(`Failed to extract DMG: ${error}`);
88
+ throw error;
89
+ }
90
+ }
91
+ async extractZip(zipPath, extractDir) {
92
+ try {
93
+ // Create extraction directory
94
+ if (!(0, fs_1.existsSync)(extractDir)) {
95
+ this.logger.debug(`Creating extraction directory: ${extractDir}`);
96
+ (0, fs_1.mkdirSync)(extractDir, { recursive: true });
97
+ }
98
+ // Use built-in unzip on macOS/Linux or try different methods
99
+ const platform = process.platform;
100
+ if (platform === 'darwin' || platform === 'linux') {
101
+ // Use unzip command on Unix systems
102
+ const command = `unzip -q "${zipPath}" -d "${extractDir}"`;
103
+ this.logger.debug(`Executing command: ${command}`);
104
+ (0, child_process_1.execSync)(command);
105
+ }
106
+ else if (platform === 'win32') {
107
+ // Use PowerShell Expand-Archive on Windows
108
+ const command = `powershell -command "Expand-Archive -Path '${zipPath}' -DestinationPath '${extractDir}' -Force"`;
109
+ this.logger.debug(`Executing command: ${command}`);
110
+ (0, child_process_1.execSync)(command);
111
+ }
112
+ else {
113
+ throw new Error(`Unsupported platform for ZIP extraction: ${platform}`);
114
+ }
115
+ this.logger.debug(`Extracted ZIP to ${extractDir}`);
116
+ }
117
+ catch (error) {
118
+ this.logger.error(`Failed to extract ZIP: ${error}`);
119
+ throw error;
120
+ }
121
+ }
122
+ }
123
+ exports.FileHelper = FileHelper;
124
+ //# sourceMappingURL=file.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.helper.js","sourceRoot":"","sources":["../../../src/services/components/file.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { SupportedPlatforms } from './component';
2
+ export interface ComponentFilenameInfo {
3
+ name: string;
4
+ version: string;
5
+ isOsSpecific: boolean;
6
+ platform?: SupportedPlatforms;
7
+ }
8
+ /**
9
+ * Platform utility for component stores
10
+ *
11
+ * This utility provides shared functionality for:
12
+ * - Platform detection from filenames
13
+ * - Component filename parsing (both OS-specific and OS-agnostic)
14
+ * - Current platform detection
15
+ * - Component matching logic
16
+ *
17
+ * Supports two component naming patterns:
18
+ * 1. OS-specific: <name>-v<version>-<platform>.zip (e.g., myapp-v1.0.0-win32.zip)
19
+ * 2. OS-agnostic: <name>-v<version>.zip (e.g., webapp-v1.0.0.zip)
20
+ */
21
+ export declare class ComponentPlatformUtils {
22
+ /**
23
+ * Get current platform string compatible with component naming
24
+ */
25
+ static getCurrentPlatform(): SupportedPlatforms;
26
+ /**
27
+ * Parse component information from filename;
28
+ *
29
+ * Supports multiple patterns:
30
+ * - OS-specific: <component>-v<version>-<platform>.<ext>
31
+ * - OS-agnostic: <component>-v<version>.<ext>
32
+ *
33
+ * @param filename The component filename to parse
34
+ * @returns Parsed component info or null if parsing fails
35
+ * @throws Error if parsing fails
36
+ */
37
+ static parseComponentFilename(filename: string): ComponentFilenameInfo;
38
+ /**
39
+ * Parse component information from a name (not filename)
40
+ *
41
+ * Supports multiple patterns:
42
+ * - OS-specific: <component>-v<version>-<platform>
43
+ * - OS-agnostic: <component>-v<version>
44
+ *
45
+ * @param filename The component filename to parse
46
+ * @returns Parsed component info or null if parsing fails
47
+ * @throws Error if parsing fails
48
+ */
49
+ static parseComponentName(name: string): ComponentFilenameInfo;
50
+ /**
51
+ * Check if a filename matches the current platform
52
+ *
53
+ * @param filename The filename to check
54
+ * @param currentPlatform Optional current platform (defaults to auto-detect)
55
+ * @returns True if the component matches the current platform
56
+ */
57
+ static matchesCurrentPlatform(filename: string, currentPlatform?: SupportedPlatforms): boolean;
58
+ /**
59
+ * Check if a file is a supported package format
60
+ */
61
+ static isSupportedPackageFile(filename: string): boolean;
62
+ /**
63
+ * Compare two version strings for sorting (simple lexicographic comparison)
64
+ * For proper semantic versioning, consider using a semver library
65
+ *
66
+ * @param a First version string
67
+ * @param b Second version string
68
+ * @returns -1 if a < b, 1 if a > b, 0 if equal
69
+ */
70
+ static compareVersions(a: string, b: string): number;
71
+ }
72
+ //# sourceMappingURL=platform.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.utils.d.ts","sourceRoot":"","sources":["../../../src/services/components/platform.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACjC;AACD;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAsB;IAE/B;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;IAa/C;;;;;;;;;;OAUG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB;IAKtE;;;;;;;;;;OAUG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAsC9D;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,kBAAkB,GAAG,OAAO;IA6B9F;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOxD;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAUvD"}