@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.
- package/README.md +40 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +96 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apps.command.d.ts +3 -0
- package/dist/commands/apps.command.d.ts.map +1 -0
- package/dist/commands/apps.command.js +110 -0
- package/dist/commands/apps.command.js.map +1 -0
- package/dist/commands/components.command.d.ts +3 -0
- package/dist/commands/components.command.d.ts.map +1 -0
- package/dist/commands/components.command.js +116 -0
- package/dist/commands/components.command.js.map +1 -0
- package/dist/commands/create.command.d.ts +3 -0
- package/dist/commands/create.command.d.ts.map +1 -0
- package/dist/commands/create.command.js +19 -0
- package/dist/commands/create.command.js.map +1 -0
- package/dist/commands/dev.command.d.ts +4 -0
- package/dist/commands/dev.command.d.ts.map +1 -0
- package/dist/commands/dev.command.js +25 -0
- package/dist/commands/dev.command.js.map +1 -0
- package/dist/commands/installer.command.d.ts +3 -0
- package/dist/commands/installer.command.d.ts.map +1 -0
- package/dist/commands/installer.command.js +19 -0
- package/dist/commands/installer.command.js.map +1 -0
- package/dist/commands/license.command.d.ts +3 -0
- package/dist/commands/license.command.d.ts.map +1 -0
- package/dist/commands/license.command.js +23 -0
- package/dist/commands/license.command.js.map +1 -0
- package/dist/commands/modifications.command.d.ts +3 -0
- package/dist/commands/modifications.command.d.ts.map +1 -0
- package/dist/commands/modifications.command.js +28 -0
- package/dist/commands/modifications.command.js.map +1 -0
- package/dist/commands/setup.command.d.ts +4 -0
- package/dist/commands/setup.command.d.ts.map +1 -0
- package/dist/commands/setup.command.js +34 -0
- package/dist/commands/setup.command.js.map +1 -0
- package/dist/services/app-builder.service.d.ts +2 -0
- package/dist/services/app-builder.service.d.ts.map +1 -0
- package/dist/services/app-builder.service.js +3 -0
- package/dist/services/app-builder.service.js.map +1 -0
- package/dist/services/app.service.d.ts +74 -0
- package/dist/services/app.service.d.ts.map +1 -0
- package/dist/services/app.service.js +328 -0
- package/dist/services/app.service.js.map +1 -0
- package/dist/services/components/component.config.d.ts +11 -0
- package/dist/services/components/component.config.d.ts.map +1 -0
- package/dist/services/components/component.config.js +101 -0
- package/dist/services/components/component.config.js.map +1 -0
- package/dist/services/components/component.d.ts +12 -0
- package/dist/services/components/component.d.ts.map +1 -0
- package/dist/services/components/component.js +3 -0
- package/dist/services/components/component.js.map +1 -0
- package/dist/services/components/components.registry.d.ts +40 -0
- package/dist/services/components/components.registry.d.ts.map +1 -0
- package/dist/services/components/components.registry.js +72 -0
- package/dist/services/components/components.registry.js.map +1 -0
- package/dist/services/components/components.service.d.ts +20 -0
- package/dist/services/components/components.service.d.ts.map +1 -0
- package/dist/services/components/components.service.js +171 -0
- package/dist/services/components/components.service.js.map +1 -0
- package/dist/services/components/file.helper.d.ts +12 -0
- package/dist/services/components/file.helper.d.ts.map +1 -0
- package/dist/services/components/file.helper.js +124 -0
- package/dist/services/components/file.helper.js.map +1 -0
- package/dist/services/components/platform.utils.d.ts +72 -0
- package/dist/services/components/platform.utils.d.ts.map +1 -0
- package/dist/services/components/platform.utils.js +156 -0
- package/dist/services/components/platform.utils.js.map +1 -0
- package/dist/services/components/stores/github.store.d.ts +35 -0
- package/dist/services/components/stores/github.store.d.ts.map +1 -0
- package/dist/services/components/stores/github.store.js +157 -0
- package/dist/services/components/stores/github.store.js.map +1 -0
- package/dist/services/components/stores/local.store.d.ts +69 -0
- package/dist/services/components/stores/local.store.d.ts.map +1 -0
- package/dist/services/components/stores/local.store.js +300 -0
- package/dist/services/components/stores/local.store.js.map +1 -0
- package/dist/services/components/stores/s3.store.d.ts +98 -0
- package/dist/services/components/stores/s3.store.d.ts.map +1 -0
- package/dist/services/components/stores/s3.store.js +368 -0
- package/dist/services/components/stores/s3.store.js.map +1 -0
- package/dist/services/components/stores/store.d.ts +11 -0
- package/dist/services/components/stores/store.d.ts.map +1 -0
- package/dist/services/components/stores/store.js +3 -0
- package/dist/services/components/stores/store.js.map +1 -0
- package/dist/services/config/cli.config.d.ts +57 -0
- package/dist/services/config/cli.config.d.ts.map +1 -0
- package/dist/services/config/cli.config.js +3 -0
- package/dist/services/config/cli.config.js.map +1 -0
- package/dist/services/config/config.service.d.ts +14 -0
- package/dist/services/config/config.service.d.ts.map +1 -0
- package/dist/services/config/config.service.js +170 -0
- package/dist/services/config/config.service.js.map +1 -0
- package/dist/services/create.service.d.ts +58 -0
- package/dist/services/create.service.d.ts.map +1 -0
- package/dist/services/create.service.js +318 -0
- package/dist/services/create.service.js.map +1 -0
- package/dist/services/dev.service.d.ts +2 -0
- package/dist/services/dev.service.d.ts.map +1 -0
- package/dist/services/dev.service.js +78 -0
- package/dist/services/dev.service.js.map +1 -0
- package/dist/services/installer/electronBuilder.d.ts +2 -0
- package/dist/services/installer/electronBuilder.d.ts.map +1 -0
- package/dist/services/installer/electronBuilder.js +3 -0
- package/dist/services/installer/electronBuilder.js.map +1 -0
- package/dist/services/installer/electronForge.d.ts +2 -0
- package/dist/services/installer/electronForge.d.ts.map +1 -0
- package/dist/services/installer/electronForge.js +248 -0
- package/dist/services/installer/electronForge.js.map +1 -0
- package/dist/services/installer/installer.service.d.ts +5 -0
- package/dist/services/installer/installer.service.d.ts.map +1 -0
- package/dist/services/installer/installer.service.js +101 -0
- package/dist/services/installer/installer.service.js.map +1 -0
- package/dist/services/installer/macOS.helper.d.ts +3 -0
- package/dist/services/installer/macOS.helper.d.ts.map +1 -0
- package/dist/services/installer/macOS.helper.js +244 -0
- package/dist/services/installer/macOS.helper.js.map +1 -0
- package/dist/services/installer/prerequisites.d.ts +2 -0
- package/dist/services/installer/prerequisites.d.ts.map +1 -0
- package/dist/services/installer/prerequisites.js +73 -0
- package/dist/services/installer/prerequisites.js.map +1 -0
- package/dist/services/installer/windows.helper.d.ts +10 -0
- package/dist/services/installer/windows.helper.d.ts.map +1 -0
- package/dist/services/installer/windows.helper.js +394 -0
- package/dist/services/installer/windows.helper.js.map +1 -0
- package/dist/services/license.service.d.ts +7 -0
- package/dist/services/license.service.d.ts.map +1 -0
- package/dist/services/license.service.js +14 -0
- package/dist/services/license.service.js.map +1 -0
- package/dist/services/modifications/macOS.helper.d.ts +13 -0
- package/dist/services/modifications/macOS.helper.d.ts.map +1 -0
- package/dist/services/modifications/macOS.helper.js +274 -0
- package/dist/services/modifications/macOS.helper.js.map +1 -0
- package/dist/services/modifications/modifications.service.d.ts +2 -0
- package/dist/services/modifications/modifications.service.d.ts.map +1 -0
- package/dist/services/modifications/modifications.service.js +376 -0
- package/dist/services/modifications/modifications.service.js.map +1 -0
- package/dist/services/modifications/windows.helper.d.ts +2 -0
- package/dist/services/modifications/windows.helper.d.ts.map +1 -0
- package/dist/services/modifications/windows.helper.js +83 -0
- package/dist/services/modifications/windows.helper.js.map +1 -0
- package/dist/services/template.service.d.ts +116 -0
- package/dist/services/template.service.d.ts.map +1 -0
- package/dist/services/template.service.js +354 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/templates/auto-tests/README.md +31 -0
- package/dist/templates/auto-tests/playwright.config.js +19 -0
- package/dist/templates/auto-tests/template.json +12 -0
- package/dist/templates/auto-tests/tests/basic.test.js +15 -0
- package/dist/templates/ioconnect-desktop/.env.example +29 -0
- package/dist/templates/ioconnect-desktop/.github/workflows/build-installers.yml +170 -0
- package/dist/templates/ioconnect-desktop/LICENSE +0 -0
- package/dist/templates/ioconnect-desktop/README.md +0 -0
- package/dist/templates/ioconnect-desktop/config/mac-build/entitlements.mac.plist +44 -0
- package/dist/templates/ioconnect-desktop/config/win-build/template.nuspectemplate +33 -0
- package/dist/templates/ioconnect-desktop/forge.config.js +47 -0
- package/dist/templates/ioconnect-desktop/iocd.cli.config.json +45 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.icns +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.ico +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.png +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/config/system.json.merge +3 -0
- package/dist/templates/ioconnect-desktop/package.json +43 -0
- package/dist/templates/ioconnect-desktop/template.json +7 -0
- package/dist/templates/launchpad/apps/launchpad/.eslintrc.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +57 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.prod.json +2 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.dev.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.prod.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/index.html +16 -0
- package/dist/templates/launchpad/apps/launchpad/iocd.app.json +32 -0
- package/dist/templates/launchpad/apps/launchpad/package-lock.json +2778 -0
- package/dist/templates/launchpad/apps/launchpad/package.json +21 -0
- package/dist/templates/launchpad/apps/launchpad/public/favicon.ico +0 -0
- package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +39 -0
- package/dist/templates/launchpad/apps/launchpad/src/app/constants.ts +27 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +11 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +162 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +44 -0
- package/dist/templates/launchpad/apps/launchpad/src/main.tsx +6 -0
- package/dist/templates/launchpad/apps/launchpad/src/styles.css +17 -0
- package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -0
- package/dist/templates/launchpad/apps/launchpad/vite.config.ts +13 -0
- package/dist/templates/launchpad/template.json +12 -0
- package/dist/templates/splash-screen/apps/splash-screen/README.md +119 -0
- package/dist/templates/splash-screen/apps/splash-screen/config/system-dev.json +9 -0
- package/dist/templates/splash-screen/apps/splash-screen/config/system-prod.json +8 -0
- package/dist/templates/splash-screen/apps/splash-screen/index.html +55 -0
- package/dist/templates/splash-screen/apps/splash-screen/iocd.app.json +20 -0
- package/dist/templates/splash-screen/apps/splash-screen/package-lock.json +1059 -0
- package/dist/templates/splash-screen/apps/splash-screen/package.json +17 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/fonts/PTSans-Regular.ttf +0 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/logo-light.svg +85 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/splash-bg.png +0 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css +149 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css.map +1 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.scss +90 -0
- package/dist/templates/splash-screen/apps/splash-screen/src/main.ts +93 -0
- package/dist/templates/splash-screen/apps/splash-screen/src/types.ts +28 -0
- package/dist/templates/splash-screen/apps/splash-screen/tsconfig.json +25 -0
- package/dist/templates/splash-screen/apps/splash-screen/vite.config.ts +27 -0
- package/dist/templates/splash-screen/template.json +12 -0
- package/dist/templates/web-groups/apps/web-groups/README.md +15 -0
- package/dist/templates/web-groups/apps/web-groups/config/web-group-dev.json +13 -0
- package/dist/templates/web-groups/apps/web-groups/config/web-group-prod.json +12 -0
- package/dist/templates/web-groups/apps/web-groups/index.html +18 -0
- package/dist/templates/web-groups/apps/web-groups/iocd.app.json +24 -0
- package/dist/templates/web-groups/apps/web-groups/package.json +28 -0
- package/dist/templates/web-groups/apps/web-groups/public/favicon.ico +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/logo192.png +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/logo512.png +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/manifest.json +25 -0
- package/dist/templates/web-groups/apps/web-groups/public/robots.txt +3 -0
- package/dist/templates/web-groups/apps/web-groups/src/App.css +38 -0
- package/dist/templates/web-groups/apps/web-groups/src/App.tsx +11 -0
- package/dist/templates/web-groups/apps/web-groups/src/index.css +13 -0
- package/dist/templates/web-groups/apps/web-groups/src/index.tsx +25 -0
- package/dist/templates/web-groups/apps/web-groups/src/logo.svg +1 -0
- package/dist/templates/web-groups/apps/web-groups/src/reportWebVitals.ts +15 -0
- package/dist/templates/web-groups/apps/web-groups/tsconfig.json +26 -0
- package/dist/templates/web-groups/apps/web-groups/vite.config.ts +8 -0
- package/dist/templates/web-groups/template.json +12 -0
- package/dist/templates/workspaces/apps/workspaces/README.md +15 -0
- package/dist/templates/workspaces/apps/workspaces/config/workspaces-dev.json +21 -0
- package/dist/templates/workspaces/apps/workspaces/config/workspaces-prod.json +20 -0
- package/dist/templates/workspaces/apps/workspaces/index.html +17 -0
- package/dist/templates/workspaces/apps/workspaces/iocd.app.json +24 -0
- package/dist/templates/workspaces/apps/workspaces/package.json +29 -0
- package/dist/templates/workspaces/apps/workspaces/public/favicon.ico +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/logo192.png +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/logo512.png +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/manifest.json +25 -0
- package/dist/templates/workspaces/apps/workspaces/public/robots.txt +3 -0
- package/dist/templates/workspaces/apps/workspaces/src/AddWindowButton.tsx +33 -0
- package/dist/templates/workspaces/apps/workspaces/src/AfterTabs.tsx +27 -0
- package/dist/templates/workspaces/apps/workspaces/src/App.css +38 -0
- package/dist/templates/workspaces/apps/workspaces/src/App.tsx +103 -0
- package/dist/templates/workspaces/apps/workspaces/src/GroupHeaderButtons.tsx +9 -0
- package/dist/templates/workspaces/apps/workspaces/src/index.css +4 -0
- package/dist/templates/workspaces/apps/workspaces/src/index.tsx +28 -0
- package/dist/templates/workspaces/apps/workspaces/src/logo.svg +7 -0
- package/dist/templates/workspaces/apps/workspaces/src/reportWebVitals.ts +15 -0
- package/dist/templates/workspaces/apps/workspaces/src/setupTests.ts +5 -0
- package/dist/templates/workspaces/apps/workspaces/src/useAddWindowButtonVisible.tsx +30 -0
- package/dist/templates/workspaces/apps/workspaces/tsconfig.json +26 -0
- package/dist/templates/workspaces/apps/workspaces/vite.config.ts +8 -0
- package/dist/templates/workspaces/template.json +12 -0
- package/dist/tools/rcedit-x64.exe +0 -0
- package/dist/utils/colors.d.ts +57 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +151 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/deep.merge.d.ts +5 -0
- package/dist/utils/deep.merge.d.ts.map +1 -0
- package/dist/utils/deep.merge.js +27 -0
- package/dist/utils/deep.merge.js.map +1 -0
- package/dist/utils/electron.builder.config.helper.d.ts +6 -0
- package/dist/utils/electron.builder.config.helper.d.ts.map +1 -0
- package/dist/utils/electron.builder.config.helper.js +25 -0
- package/dist/utils/electron.builder.config.helper.js.map +1 -0
- package/dist/utils/ensure.iocd.exists.d.ts +2 -0
- package/dist/utils/ensure.iocd.exists.d.ts.map +1 -0
- package/dist/utils/ensure.iocd.exists.js +27 -0
- package/dist/utils/ensure.iocd.exists.js.map +1 -0
- package/dist/utils/error.handler.d.ts +30 -0
- package/dist/utils/error.handler.d.ts.map +1 -0
- package/dist/utils/error.handler.js +104 -0
- package/dist/utils/error.handler.js.map +1 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +40 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/find.package.dir.d.ts +2 -0
- package/dist/utils/find.package.dir.d.ts.map +1 -0
- package/dist/utils/find.package.dir.js +23 -0
- package/dist/utils/find.package.dir.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +184 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/nextSteps.d.ts +2 -0
- package/dist/utils/nextSteps.d.ts.map +1 -0
- package/dist/utils/nextSteps.js +44 -0
- package/dist/utils/nextSteps.js.map +1 -0
- package/dist/utils/pacakge.json.helper.d.ts +9 -0
- package/dist/utils/pacakge.json.helper.d.ts.map +1 -0
- package/dist/utils/pacakge.json.helper.js +71 -0
- package/dist/utils/pacakge.json.helper.js.map +1 -0
- package/dist/utils/path.d.ts +19 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +81 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +16 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +69 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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
|