@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,170 @@
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.ConfigManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const deep_merge_1 = require("../../utils/deep.merge");
40
+ const path_1 = require("../../utils/path");
41
+ const path_2 = require("path");
42
+ class ConfigManager {
43
+ static cachedConfig = null;
44
+ static configName = "iocd.cli.config.json";
45
+ static get config() {
46
+ if (!this.cachedConfig) {
47
+ this.cachedConfig = this.loadConfig();
48
+ }
49
+ return this.cachedConfig;
50
+ }
51
+ static getConfigStringWithoutSecrets() {
52
+ const configCopy = JSON.parse(JSON.stringify(ConfigManager.config));
53
+ // Remove or mask any sensitive information here if needed
54
+ if (configCopy.win?.codeSign) {
55
+ configCopy.win.codeSign = "<removed for security>";
56
+ }
57
+ if (configCopy.mac?.codeSign) {
58
+ configCopy.mac.codeSign = "<removed for security>";
59
+ }
60
+ if (configCopy.mac?.notarization) {
61
+ configCopy.mac.notarization = "<removed for security>";
62
+ }
63
+ return JSON.stringify(configCopy, null, 2);
64
+ }
65
+ static saveComponents(newComponents) {
66
+ // read the current config to preserve other fields, do not expand env vars or anything else
67
+ const configPath = path.join(path_1.PathUtils.getRootDir(), this.configName);
68
+ const configContent = fs.readFileSync(configPath, 'utf8');
69
+ const currentConfig = JSON.parse(configContent);
70
+ const updatedConfig = {
71
+ ...currentConfig,
72
+ components: {
73
+ ...currentConfig.components,
74
+ list: newComponents
75
+ }
76
+ };
77
+ fs.writeFileSync(configPath, JSON.stringify(updatedConfig, null, 2), 'utf-8');
78
+ // Invalidate cached config, so config is reloaded next time
79
+ this.cachedConfig = null;
80
+ }
81
+ static loadConfig() {
82
+ // Register some env variables that we can use in the config file
83
+ process.env["IOCD_COMPONENT_DIR"] = path_1.PathUtils.getComponentDir("iocd");
84
+ const defaultConfig = this.getDefaultConfig();
85
+ // Look for iocd.cli.config.json in the current working directory first
86
+ let configPath = path.join(path_1.PathUtils.getRootDir(), this.configName);
87
+ if (!fs.existsSync(configPath)) {
88
+ // Fallback to config directory if it exists
89
+ const configDir = path.join(path_1.PathUtils.getRootDir(), 'config');
90
+ if (fs.existsSync(configDir)) {
91
+ configPath = path.join(configDir, this.configName);
92
+ }
93
+ }
94
+ if (!fs.existsSync(configPath)) {
95
+ console.warn(`${this.configName} not found at ${configPath}, using fallback configuration`);
96
+ return this.getDefaultConfig();
97
+ }
98
+ const configContent = fs.readFileSync(configPath, 'utf8');
99
+ // Expand environment variables and template variables in the string before parsing
100
+ const expandedContent = this.expandVariablesInString(configContent);
101
+ const rawConfig = JSON.parse(expandedContent);
102
+ // deep merge with default config to ensure all fields are present
103
+ const final = (0, deep_merge_1.deepMerge)(defaultConfig, rawConfig);
104
+ return final;
105
+ }
106
+ static expandVariablesInString(content) {
107
+ // Expand environment variables in ${VAR_NAME} format
108
+ let expanded = content.replace(/\$\{([^}]+)\}/g, (_, varName) => {
109
+ const value = process.env[varName] || '';
110
+ // Normalize path separators to forward slashes for JSON safety
111
+ return value.replace(/\\/g, '/');
112
+ });
113
+ return expanded;
114
+ }
115
+ static getDefaultConfig() {
116
+ return {
117
+ productSlug: process.env["PRODUCT_SLUG"] || "io.Connect Desktop",
118
+ productName: process.env["PRODUCT_NAME"] || "io.Connect Desktop",
119
+ productDescription: process.env["PRODUCT_DESCRIPTION"] || "io.Connect Desktop is a real-time user interface integration platform.",
120
+ company: process.env["COMPANY"] || "interop.io",
121
+ version: process.env["npm_package_version"] || "1.0.0",
122
+ copyright: process.env["COPYRIGHT"] || "Copyright © 2025 interop.io",
123
+ win: {
124
+ exe: {
125
+ exeName: process.env["WIN_EXE_NAME"] || "io-connect-desktop.exe",
126
+ exeIconPath: process.env["WIN_EXE_ICON_PATH"] || (0, path_2.join)(process.env["IOCD_COMPONENT_DIR"] ?? "", "assets/images/logo.ico"),
127
+ }, codeSign: {
128
+ type: process.env["WIN_CODE_SIGN_TYPE"] || 'off',
129
+ ...(process.env["WIN_PFX_PATH"] && { pfxPath: process.env["WIN_PFX_PATH"] }),
130
+ ...(process.env["WIN_PFX_PASS"] && { pfxPassword: process.env["WIN_PFX_PASS"] }),
131
+ ...(process.env["WIN_CERT_SUBJECT"] && { wincertSubjectName: process.env["WIN_CERT_SUBJECT"] }),
132
+ ...(process.env["WIN_SMIME_CERTIFICATE_PATH"] && { smimeCertificatePath: process.env["WIN_SMIME_CERTIFICATE_PATH"] }),
133
+ ...(process.env["WIN_SMIME_CERTIFICATE_PASSWORD"] && { smimeCertificatePassword: process.env["WIN_SMIME_CERTIFICATE_PASSWORD"] }),
134
+ ...(process.env["WIN_CUSTOM_CODE_SIGNING"] && { customCodeSignScriptPath: process.env["WIN_CUSTOM_CODE_SIGNING"] })
135
+ }
136
+ },
137
+ components: {
138
+ store: process.env["COMPONENT_STORE"] || "github",
139
+ storeGithubRepo: process.env["COMPONENT_STORE_GITHUB_REPO"] || "interopio/desktop-releases/releases",
140
+ storeLocalPath: process.env["COMPONENT_STORE_LOCAL_PATH"] || "/components-store",
141
+ storeS3Config: {
142
+ bucketName: process.env["COMPONENT_STORE_S3_BUCKET"] || "",
143
+ region: process.env["COMPONENT_STORE_S3_REGION"] || "us-east-1",
144
+ ...(process.env["COMPONENT_STORE_S3_PREFIX"] && { prefix: process.env["COMPONENT_STORE_S3_PREFIX"] }),
145
+ ...(process.env["AWS_ACCESS_KEY_ID"] && { accessKeyId: process.env["AWS_ACCESS_KEY_ID"] }),
146
+ ...(process.env["AWS_SECRET_ACCESS_KEY"] && { secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"] })
147
+ },
148
+ list: { "iocd": "latest" }
149
+ },
150
+ mac: {
151
+ appBundleName: process.env["MAC_APP_BUNDLE_NAME"] || "io.Connect Desktop.app",
152
+ appBundleId: process.env["MAC_APP_BUNDLE_ID"] || "io.interopio.desktop",
153
+ codeSign: {
154
+ type: process.env["MAC_CODE_SIGN_TYPE"] || 'keychain', ...(process.env["MAC_IDENTITY"] && { identity: process.env["MAC_IDENTITY"] }),
155
+ ...(process.env["MAC_KEYCHAIN"] && { keychain: process.env["MAC_KEYCHAIN"] }),
156
+ ...(process.env["MAC_CUSTOM_CODE_SIGNING"] && { customCodeSignScriptPath: process.env["MAC_CUSTOM_CODE_SIGNING"] })
157
+ },
158
+ notarization: {
159
+ type: process.env["MAC_NOTARIZATION_TYPE"] || 'notarytool',
160
+ appleId: process.env["MAC_NOTARIZATION_APPLE_ID"] || "",
161
+ appleIdPassword: process.env["MAC_NOTARIZATION_APPLE_ID_PASSWORD"] || "",
162
+ appleTeamId: process.env["MAC_NOTARIZATION_APPLE_TEAM_ID"] || "",
163
+ ...(process.env["MAC_CUSTOM_NOTARIZATION"] && { customNotarizationScriptPath: process.env["MAC_CUSTOM_NOTARIZATION"] })
164
+ }
165
+ }
166
+ };
167
+ }
168
+ }
169
+ exports.ConfigManager = ConfigManager;
170
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/services/config/config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,uDAAmD;AACnD,2CAA6C;AAC7C,+BAA4B;AAE5B,MAAa,aAAa;IAEd,MAAM,CAAC,YAAY,GAAqB,IAAI,CAAC;IAC7C,MAAM,CAAC,UAAU,GAAG,sBAAsB,CAAC;IAEnD,MAAM,KAAK,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,6BAA6B;QACvC,MAAM,UAAU,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,0DAA0D;QAC1D,IAAI,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,QAAgB,GAAG,wBAAwB,CAAC;QAChE,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,QAAgB,GAAG,wBAAwB,CAAC;QAChE,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,YAAoB,GAAG,wBAAwB,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,aAA0C;QACnE,4FAA4F;QAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG;YAClB,GAAG,aAAa;YAChB,UAAU,EAAE;gBACR,GAAG,aAAa,CAAC,UAAU;gBAC3B,IAAI,EAAE,aAAa;aACtB;SACJ,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,4DAA4D;QAC5D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,UAAU;QAErB,iEAAiE;QACjE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,gBAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAEtE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,uEAAuE;QACvE,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAS,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,iBAAiB,UAAU,gCAAgC,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE1D,mFAAmF;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE9C,kEAAkE;QAClE,MAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,OAAe;QAClD,qDAAqD;QACrD,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,+DAA+D;YAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAGH,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC3B,OAAO;YACH,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,oBAAoB;YAChE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,oBAAoB;YAChE,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,wEAAwE;YAClI,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,YAAY;YAC/C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,OAAO;YACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,6BAA6B;YACpE,GAAG,EAAE;gBACD,GAAG,EAAE;oBACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,wBAAwB;oBAChE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,wBAAwB,CAAC;iBAC3H,EAAE,QAAQ,EAAE;oBACT,IAAI,EAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAA8D,IAAI,KAAK;oBAC9G,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBAChF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC/F,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CAAC;oBACrH,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC;oBACjI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;iBACtH;aACJ;YACD,UAAU,EAAE;gBACR,KAAK,EAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAiC,IAAI,QAAQ;gBAClF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,qCAAqC;gBACpG,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,mBAAmB;gBAChF,aAAa,EAAE;oBACX,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE;oBAC1D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,WAAW;oBAC/D,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC;oBACrG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC1F,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC;iBACzG;gBACD,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC7B;YACD,GAAG,EAAE;gBACD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,wBAAwB;gBAC7E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,sBAAsB;gBACvE,QAAQ,EAAE;oBACN,IAAI,EAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAmC,IAAI,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBACvK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC7E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;iBACtH;gBACD,YAAY,EAAE;oBACV,IAAI,EAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAqC,IAAI,YAAY;oBAC/F,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE;oBACvD,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,IAAI,EAAE;oBACxE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,EAAE;oBAChE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC;iBAC1H;aACJ;SACJ,CAAC;IACN,CAAC;;AA/IL,sCAgJC"}
@@ -0,0 +1,58 @@
1
+ export interface SetupResult {
2
+ productName: string;
3
+ productSlug: string;
4
+ targetDirectory: string;
5
+ applications: string[];
6
+ components: string[];
7
+ autoTests: boolean;
8
+ licenseKey: string | undefined;
9
+ }
10
+ /**
11
+ * SetupService handles the interactive project setup flow using @clack/prompts.
12
+ *
13
+ * This service provides a branded, user-friendly setup experience that:
14
+ * - Guides users through project configuration steps
15
+ * - Validates user inputs and provides helpful defaults
16
+ * - Collects feature selections and optional configurations
17
+ * - Generates project structure using the TemplateService
18
+ * - Creates license files when license keys are provided
19
+ *
20
+ * The setup flow follows the design document specification with:
21
+ * 1. Product name input with validation
22
+ * 2. Auto-generated folder name (editable)
23
+ * 3. Multi-select feature customizations
24
+ * 4. Auto-tests yes/no (defaults to Yes)
25
+ * 5. Optional license key (hidden input)
26
+ * 6. Confirmation before creation
27
+ * 7. Progress indication during generation
28
+ */
29
+ export declare class CreateService {
30
+ private logger;
31
+ private templateService;
32
+ /**
33
+ * Run the interactive setup flow
34
+ */
35
+ runSetup(): Promise<void>;
36
+ /**
37
+ * Collect all setup data through interactive prompts
38
+ */
39
+ private collectSetupData;
40
+ private collectComponents;
41
+ /**
42
+ * Collect feature selections using setupUI configuration
43
+ */
44
+ private collectTemplateApplications;
45
+ /**
46
+ * Show confirmation and create the project
47
+ */
48
+ private confirmAndCreate;
49
+ /**
50
+ * Generate NPM-compatible folder name from product name
51
+ */
52
+ private generateFolderName;
53
+ /**
54
+ * Generate license.json file with provided license JSON
55
+ */
56
+ private generateLicenseFile;
57
+ }
58
+ //# sourceMappingURL=create.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.service.d.ts","sourceRoot":"","sources":["../../src/services/create.service.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,eAAe,CAAyB;IAEhD;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtC;;OAEG;YACW,gBAAgB;YAwFhB,iBAAiB;IA8B/B;;OAEG;YACW,2BAA2B;IAgDzC;;OAEG;YACW,gBAAgB;IA8D9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;YACW,mBAAmB;CAclC"}
@@ -0,0 +1,318 @@
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.CreateService = void 0;
37
+ const node_path_1 = require("node:path");
38
+ const logger_1 = require("../utils/logger");
39
+ const error_handler_1 = require("../utils/error.handler");
40
+ const template_service_1 = require("./template.service");
41
+ const node_fs_1 = require("node:fs");
42
+ const colors_1 = require("../utils/colors");
43
+ const clack = __importStar(require("@clack/prompts"));
44
+ const components_registry_1 = require("./components/components.registry");
45
+ /**
46
+ * SetupService handles the interactive project setup flow using @clack/prompts.
47
+ *
48
+ * This service provides a branded, user-friendly setup experience that:
49
+ * - Guides users through project configuration steps
50
+ * - Validates user inputs and provides helpful defaults
51
+ * - Collects feature selections and optional configurations
52
+ * - Generates project structure using the TemplateService
53
+ * - Creates license files when license keys are provided
54
+ *
55
+ * The setup flow follows the design document specification with:
56
+ * 1. Product name input with validation
57
+ * 2. Auto-generated folder name (editable)
58
+ * 3. Multi-select feature customizations
59
+ * 4. Auto-tests yes/no (defaults to Yes)
60
+ * 5. Optional license key (hidden input)
61
+ * 6. Confirmation before creation
62
+ * 7. Progress indication during generation
63
+ */
64
+ class CreateService {
65
+ logger = logger_1.Logger.getInstance();
66
+ templateService = new template_service_1.TemplateService();
67
+ /**
68
+ * Run the interactive setup flow
69
+ */
70
+ async runSetup() {
71
+ try {
72
+ const result = await this.collectSetupData();
73
+ await this.confirmAndCreate(result);
74
+ clack.outro((0, colors_1.green)('✨ Project ready!'));
75
+ }
76
+ catch (error) {
77
+ if (clack.isCancel(error)) {
78
+ clack.cancel('Setup cancelled.');
79
+ process.exit(0);
80
+ }
81
+ throw error;
82
+ }
83
+ }
84
+ /**
85
+ * Collect all setup data through interactive prompts
86
+ */
87
+ async collectSetupData() {
88
+ // Step 1: Product Name
89
+ const productName = await clack.text({
90
+ message: 'What is your product name (can include spaces)?',
91
+ placeholder: 'My Desktop App',
92
+ validate: (value) => {
93
+ if (!value.trim()) {
94
+ return 'Product name is required';
95
+ }
96
+ if (value.trim().length < 2) {
97
+ return 'Product name must be at least 2 characters';
98
+ }
99
+ if (!/^[a-z0-9\s\-_.()]+$/i.test(value.trim())) {
100
+ return 'Product name can only contain letters, numbers, spaces, hyphens, underscores, periods and parentheses.';
101
+ }
102
+ return undefined;
103
+ }
104
+ });
105
+ if (clack.isCancel(productName))
106
+ throw productName;
107
+ // Step 2: Folder Name (auto-generated from product name)
108
+ const defaultFolderName = this.generateFolderName(productName);
109
+ const folderName = await clack.text({
110
+ message: 'What folder should we create for your project (no spaces; used for folder, exe, and app bundle)?',
111
+ placeholder: defaultFolderName,
112
+ validate: (value) => {
113
+ if (!value.trim()) {
114
+ return 'Folder name is required';
115
+ }
116
+ if (!/^[a-z0-9-_]+$/i.test(value.trim())) {
117
+ return 'Folder name can only contain letters, numbers, hyphens, and underscores';
118
+ }
119
+ return undefined;
120
+ }
121
+ });
122
+ if (clack.isCancel(folderName))
123
+ throw folderName;
124
+ // Step 3: Component selection (multi-select
125
+ const selectedComponents = await this.collectComponents();
126
+ // Step 4: Template applications (multi-select)
127
+ const selectedFeatures = await this.collectTemplateApplications();
128
+ // Step 5: License Key (optional, multi-line editor)
129
+ const hasLicense = await clack.confirm({
130
+ message: 'Do you have a valid license?',
131
+ initialValue: false
132
+ });
133
+ if (clack.isCancel(hasLicense))
134
+ throw hasLicense;
135
+ let licenseKey;
136
+ if (hasLicense) {
137
+ clack.note('You can paste multi-line JSON. Press Enter when done.', 'License Input');
138
+ const licenseInput = await clack.text({
139
+ message: 'Paste your license.json content here:',
140
+ validate: (value) => {
141
+ if (!value.trim()) {
142
+ return 'License content is required if you have a license';
143
+ }
144
+ // Try to parse as JSON to validate format
145
+ try {
146
+ JSON.parse(value.trim());
147
+ return undefined;
148
+ }
149
+ catch {
150
+ return 'Please provide valid JSON format for the license';
151
+ }
152
+ }
153
+ });
154
+ if (clack.isCancel(licenseInput))
155
+ throw licenseInput;
156
+ licenseKey = licenseInput;
157
+ }
158
+ return {
159
+ productName,
160
+ productSlug: folderName,
161
+ targetDirectory: (0, node_path_1.resolve)(process.cwd(), folderName),
162
+ applications: selectedFeatures,
163
+ components: selectedComponents,
164
+ autoTests: selectedFeatures.includes('auto-tests'),
165
+ licenseKey: licenseKey || undefined
166
+ };
167
+ }
168
+ async collectComponents() {
169
+ const availableComponents = components_registry_1.ComponentsRegistry.getComponents();
170
+ const selectedComponents = [];
171
+ if (availableComponents.length === 0) {
172
+ this.logger.warn('No components are available for selection.');
173
+ return selectedComponents;
174
+ }
175
+ const componentOptions = availableComponents.map(comp => ({
176
+ value: comp.name,
177
+ label: `${comp.displayName ?? comp.name} [${comp.platforms.join(", ")}] `,
178
+ hint: comp.description || '',
179
+ disabled: comp.required
180
+ }));
181
+ const components = await clack.multiselect({
182
+ message: 'Select any components to include using space, and press enter to complete',
183
+ options: componentOptions,
184
+ initialValues: ["iocd"],
185
+ required: false,
186
+ });
187
+ if (clack.isCancel(components)) {
188
+ throw components;
189
+ }
190
+ selectedComponents.push(...components);
191
+ return selectedComponents;
192
+ }
193
+ /**
194
+ * Collect feature selections using setupUI configuration
195
+ */
196
+ async collectTemplateApplications() {
197
+ const availableFeatures = this.templateService.getAvailableApplicationTemplates();
198
+ const selectedFeatures = [];
199
+ // Separate features into multi-select and separate questions
200
+ const multiSelectFeatures = availableFeatures.filter(template => !template.setupUI?.separate);
201
+ const separateFeatures = availableFeatures.filter(template => template.setupUI?.separate);
202
+ // Handle multi-select features
203
+ if (multiSelectFeatures.length > 0) {
204
+ const featureOptions = multiSelectFeatures.map(template => ({
205
+ value: template.name,
206
+ label: template.setupUI?.text || template.description || template.displayName || template.name
207
+ }));
208
+ // Set initial selections based on setupUI.selected
209
+ const initialSelections = multiSelectFeatures
210
+ .filter(template => template.setupUI?.selected === true)
211
+ .map(template => template.name);
212
+ const features = await clack.multiselect({
213
+ message: 'Select any customizations, and press enter',
214
+ options: featureOptions,
215
+ initialValues: initialSelections,
216
+ required: false
217
+ });
218
+ if (clack.isCancel(features))
219
+ throw features;
220
+ selectedFeatures.push(...features);
221
+ }
222
+ // Handle separate questions
223
+ for (const template of separateFeatures) {
224
+ const confirmed = await clack.confirm({
225
+ message: template.setupUI?.text || template.description || template.displayName || template.name,
226
+ initialValue: template.setupUI?.selected ?? false
227
+ });
228
+ if (clack.isCancel(confirmed))
229
+ throw confirmed;
230
+ if (confirmed) {
231
+ selectedFeatures.push(template.name);
232
+ }
233
+ }
234
+ return selectedFeatures;
235
+ }
236
+ /**
237
+ * Show confirmation and create the project
238
+ */
239
+ async confirmAndCreate(setupData) {
240
+ // Step 6: Confirmation
241
+ const confirmed = await clack.confirm({
242
+ message: `Create project "${setupData.productSlug}" with selected customizations?`,
243
+ initialValue: true
244
+ });
245
+ if (clack.isCancel(confirmed) || !confirmed) {
246
+ clack.cancel('Project creation cancelled.');
247
+ process.exit(0);
248
+ }
249
+ // Step 7: Project Creation with progress
250
+ const s = clack.spinner();
251
+ s.start('Creating your project...');
252
+ try {
253
+ // Generate project using template service
254
+ const templateOptions = {
255
+ productSlug: setupData.productSlug,
256
+ productName: setupData.productName,
257
+ company: "interop.io",
258
+ copyright: "Copyright © 2024",
259
+ version: "1.0.0",
260
+ folderName: setupData.productSlug,
261
+ targetDirectory: setupData.targetDirectory,
262
+ templateApplications: setupData.applications,
263
+ initialComponents: setupData.components
264
+ };
265
+ await this.templateService.generateProject('ioconnect-desktop', templateOptions);
266
+ // Generate license.json if license key provided
267
+ if (setupData.licenseKey) {
268
+ await this.generateLicenseFile(setupData.targetDirectory, setupData.licenseKey);
269
+ }
270
+ s.stop('Project created successfully!');
271
+ // Show next steps
272
+ clack.note(`cd ${setupData.productSlug}\n` +
273
+ `npm install\n` +
274
+ `npm run setup\n` +
275
+ `npm run start`, 'Next steps');
276
+ }
277
+ catch (error) {
278
+ s.stop('Project creation failed');
279
+ throw new error_handler_1.CLIError('Failed to create project', {
280
+ code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR,
281
+ cause: error,
282
+ suggestions: [
283
+ 'Check that the target directory does not already exist',
284
+ 'Ensure you have write permissions in the current directory',
285
+ 'Try running with --verbose for more details'
286
+ ]
287
+ });
288
+ }
289
+ }
290
+ /**
291
+ * Generate NPM-compatible folder name from product name
292
+ */
293
+ generateFolderName(productName) {
294
+ return productName
295
+ .toLowerCase()
296
+ .replace(/[^a-z0-9-]/g, '-')
297
+ .replace(/-+/g, '-')
298
+ .replace(/^-|-$/g, '');
299
+ }
300
+ /**
301
+ * Generate license.json file with provided license JSON
302
+ */
303
+ async generateLicenseFile(targetDirectory, licenseJson) {
304
+ try {
305
+ // Parse and re-format the license JSON to ensure proper formatting
306
+ const licenseData = JSON.parse(licenseJson);
307
+ const licensePath = (0, node_path_1.join)(targetDirectory, 'license.json');
308
+ (0, node_fs_1.writeFileSync)(licensePath, JSON.stringify(licenseData, null, 2), 'utf-8');
309
+ this.logger.debug(`License file created at: ${licensePath}`);
310
+ }
311
+ catch (error) {
312
+ this.logger.warn('Failed to create license file:', error);
313
+ // Don't fail the entire setup for license generation issues
314
+ }
315
+ }
316
+ }
317
+ exports.CreateService = CreateService;
318
+ //# sourceMappingURL=create.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.service.js","sourceRoot":"","sources":["../../src/services/create.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function startDevMode(): Promise<void>;
2
+ //# sourceMappingURL=dev.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.service.d.ts","sourceRoot":"","sources":["../../src/services/dev.service.ts"],"names":[],"mappings":"AAUA,wBAAsB,YAAY,kBAYjC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startDevMode = startDevMode;
4
+ const modifications_service_1 = require("./modifications/modifications.service");
5
+ const child_process_1 = require("child_process");
6
+ const logger_1 = require("../utils/logger");
7
+ const child_process_2 = require("child_process");
8
+ const path_1 = require("../utils/path");
9
+ const fs_1 = require("fs");
10
+ const ensure_iocd_exists_1 = require("../utils/ensure.iocd.exists");
11
+ const logger = logger_1.Logger.getInstance();
12
+ async function startDevMode() {
13
+ logger.info('Will start io.cd in dev mode....');
14
+ (0, ensure_iocd_exists_1.ensureIOCDComponentExists)();
15
+ // copy modifications over components
16
+ await (0, modifications_service_1.applyModifications)("dev");
17
+ // sign ioconnect desktop if MacOS
18
+ await signIocdAppIfMacOs();
19
+ await launchIocdComponent();
20
+ }
21
+ async function signIocdAppIfMacOs() {
22
+ // Code signing is only needed on macOS
23
+ if (process.platform !== 'darwin') {
24
+ logger.debug('Skipping code signing - not on macOS');
25
+ return;
26
+ }
27
+ try {
28
+ logger.debug('Running on mac - will sign iocd component...');
29
+ const appBundlePath = path_1.PathUtils.getIOCDAppBundlePath();
30
+ logger.debug('Executable path:', appBundlePath);
31
+ await signAppPackage(appBundlePath);
32
+ logger.debug('Code signing completed');
33
+ }
34
+ catch (error) {
35
+ logger.error(`Code signing failed: ${error}`);
36
+ throw error;
37
+ }
38
+ }
39
+ async function launchIocdComponent() {
40
+ logger.info('Launching io.Connect Desktop...');
41
+ try {
42
+ let executablePath = path_1.PathUtils.getIOCDExePath();
43
+ if (!(0, fs_1.existsSync)(executablePath)) {
44
+ throw new Error(`Executable not found at path: ${executablePath}`);
45
+ }
46
+ logger.debug(`starting executable ${executablePath}`);
47
+ (0, child_process_2.spawnSync)(executablePath, {
48
+ stdio: 'inherit'
49
+ });
50
+ logger.info('io.Connect Desktop component launched successfully!');
51
+ logger.printLogLocation();
52
+ }
53
+ catch (error) {
54
+ logger.error('Failed to launch io.Connect Desktop component:', error);
55
+ throw error;
56
+ }
57
+ }
58
+ /**
59
+ * Sign a single app package using codesign
60
+ */
61
+ async function signAppPackage(appPath) {
62
+ try {
63
+ logger.debug(`Signing ${appPath}...`);
64
+ // Use codesign with ad-hoc signing (no developer certificate required)
65
+ // --deep: Sign nested code recursively
66
+ // --force: Replace any existing signature
67
+ // --sign -: Use ad-hoc signing (no certificate)
68
+ const command = `codesign --deep --force --sign - "${appPath}"`;
69
+ logger.debug(`Executing: ${command}`);
70
+ (0, child_process_1.execSync)(command, { stdio: 'pipe' });
71
+ logger.debug(`Successfully signed ${appPath}`);
72
+ }
73
+ catch (error) {
74
+ logger.error(`Failed to sign ${appPath}: ${error}`);
75
+ throw error;
76
+ }
77
+ }
78
+ //# sourceMappingURL=dev.service.js.map