@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,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyModifications = applyModifications;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const logger_1 = require("../../utils/logger");
|
|
8
|
+
const config_service_1 = require("../config/config.service");
|
|
9
|
+
const deep_merge_1 = require("../../utils/deep.merge");
|
|
10
|
+
const windows_helper_1 = require("./windows.helper");
|
|
11
|
+
const path_2 = require("../../utils/path");
|
|
12
|
+
// Conditionally import macOS helper only on macOS
|
|
13
|
+
let macOSHelper = null;
|
|
14
|
+
if (process.platform === 'darwin') {
|
|
15
|
+
try {
|
|
16
|
+
macOSHelper = require('./macOS.helper');
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// Will be handled later when needed
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const logger = logger_1.Logger.getInstance();
|
|
23
|
+
const variables = {
|
|
24
|
+
dev: [
|
|
25
|
+
{ name: "COMPONENTS_PATH", value: path_2.PathUtils.getComponentsDir(), path: true }
|
|
26
|
+
],
|
|
27
|
+
prod: [
|
|
28
|
+
{ name: "COMPONENTS_PATH", value: (0, path_1.join)(path_2.PathUtils.getIOCDDir(), "components"), path: true }
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
async function applyModifications(mode) {
|
|
32
|
+
try {
|
|
33
|
+
logger.info(`Applying modifications in ${mode} mode...`);
|
|
34
|
+
const modificationsDir = (0, path_1.join)(process.cwd(), 'modifications');
|
|
35
|
+
const componentsDir = (0, path_1.join)(process.cwd(), 'components');
|
|
36
|
+
if (!(0, fs_1.existsSync)(modificationsDir)) {
|
|
37
|
+
logger.debug('No modifications directory found - skipping modifications');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!(0, fs_1.existsSync)(componentsDir)) {
|
|
41
|
+
logger.debug('No components directory found - skipping modifications');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (process.platform === "win32") {
|
|
45
|
+
logger.debug('Running on Windows, proceeding with Windows-specific modifications');
|
|
46
|
+
await (0, windows_helper_1.modifyExe)();
|
|
47
|
+
logger.debug('Windows-specific modifications applied successfully!');
|
|
48
|
+
}
|
|
49
|
+
// Get all component directories in modifications
|
|
50
|
+
const componentDirs = (0, fs_1.readdirSync)(modificationsDir, { withFileTypes: true })
|
|
51
|
+
.filter(dirent => dirent.isDirectory())
|
|
52
|
+
.map(dirent => dirent.name);
|
|
53
|
+
if (componentDirs.length === 0) {
|
|
54
|
+
logger.debug('No component modifications found');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const componentName of componentDirs) {
|
|
58
|
+
const modComponentDir = (0, path_1.join)(modificationsDir, componentName);
|
|
59
|
+
const baseTargetComponentDir = (0, path_1.join)(componentsDir, componentName);
|
|
60
|
+
if (!(0, fs_1.existsSync)(baseTargetComponentDir)) {
|
|
61
|
+
logger.warn(`Target component directory ${componentName} not found - skipping`);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Handle macOS app bundle structure for iocd component
|
|
65
|
+
if (process.platform === 'darwin' && componentName === 'iocd') {
|
|
66
|
+
await processIocdComponentOnMacOS(modComponentDir, baseTargetComponentDir, mode);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const targetComponentDir = getActualComponentPath(baseTargetComponentDir, componentName);
|
|
70
|
+
if (!(0, fs_1.existsSync)(targetComponentDir)) {
|
|
71
|
+
logger.warn(`Target component path ${(0, path_1.relative)(process.cwd(), targetComponentDir)} not found - skipping`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
logger.info(`Applying modifications for component: ${componentName}`);
|
|
75
|
+
await processModificationDirectory(modComponentDir, targetComponentDir, mode);
|
|
76
|
+
}
|
|
77
|
+
logger.info(`Modifications applied successfully for component: ${componentName}`);
|
|
78
|
+
}
|
|
79
|
+
logger.info('All Modifications applied successfully!');
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
logger.error(`Failed to apply modifications: ${error}`);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Recursively process a modification directory and apply changes to the target
|
|
88
|
+
*/
|
|
89
|
+
async function processModificationDirectory(modDir, targetDir, mode) {
|
|
90
|
+
const items = (0, fs_1.readdirSync)(modDir, { withFileTypes: true });
|
|
91
|
+
logger.debug(`Processing modifications in ${modDir} with targetDir ${targetDir}`);
|
|
92
|
+
for (const item of items) {
|
|
93
|
+
logger.debug(`Processing item ${item.name}`);
|
|
94
|
+
const modItemPath = (0, path_1.join)(modDir, item.name);
|
|
95
|
+
const targetItemPath = (0, path_1.join)(targetDir, item.name);
|
|
96
|
+
if (item.isDirectory()) {
|
|
97
|
+
await processDirectory(modItemPath, targetItemPath, mode);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
await processFile(modItemPath, targetItemPath, item.name, mode);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Process a directory modification
|
|
106
|
+
*/
|
|
107
|
+
async function processDirectory(modDirPath, targetDirPath, mode) {
|
|
108
|
+
logger.debug(`Processing directory ${modDirPath} with targetDir ${targetDirPath}`);
|
|
109
|
+
// Check for .replace marker in the modification directory
|
|
110
|
+
const replaceMarkerPath = (0, path_1.join)(modDirPath, '.replace');
|
|
111
|
+
const hasReplaceMarker = (0, fs_1.existsSync)(replaceMarkerPath);
|
|
112
|
+
// Check for .delete marker in the modification directory
|
|
113
|
+
const deleteMarkerPath = (0, path_1.join)(modDirPath, '.delete');
|
|
114
|
+
const hasDeleteMarker = (0, fs_1.existsSync)(deleteMarkerPath);
|
|
115
|
+
if (hasDeleteMarker) {
|
|
116
|
+
// Delete the entire target directory
|
|
117
|
+
if ((0, fs_1.existsSync)(targetDirPath)) {
|
|
118
|
+
logger.debug(` Deleting directory: ${(0, path_1.relative)(process.cwd(), targetDirPath)}`);
|
|
119
|
+
(0, fs_1.rmSync)(targetDirPath, { recursive: true, force: true });
|
|
120
|
+
logger.debug(`Deleted directory: ${(0, path_1.relative)(process.cwd(), targetDirPath)}`);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (hasReplaceMarker) {
|
|
125
|
+
// Replace the entire directory
|
|
126
|
+
if ((0, fs_1.existsSync)(targetDirPath)) {
|
|
127
|
+
logger.debug(`Replacing directory: ${(0, path_1.relative)(process.cwd(), targetDirPath)}`);
|
|
128
|
+
(0, fs_1.rmSync)(targetDirPath, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
// Create target directory
|
|
131
|
+
(0, fs_1.mkdirSync)(targetDirPath, { recursive: true });
|
|
132
|
+
// Copy all files except the .replace marker
|
|
133
|
+
const items = (0, fs_1.readdirSync)(modDirPath, { withFileTypes: true });
|
|
134
|
+
for (const item of items) {
|
|
135
|
+
if (item.name === '.replace')
|
|
136
|
+
continue;
|
|
137
|
+
const srcPath = (0, path_1.join)(modDirPath, item.name);
|
|
138
|
+
const destPath = (0, path_1.join)(targetDirPath, item.name);
|
|
139
|
+
if (item.isDirectory()) {
|
|
140
|
+
await copyDirectoryRecursive(srcPath, destPath);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
ensureDirectoryExists((0, path_1.dirname)(destPath));
|
|
144
|
+
(0, fs_1.copyFileSync)(srcPath, destPath);
|
|
145
|
+
logger.debug(`Copied file: ${(0, path_1.relative)(process.cwd(), destPath)}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
logger.debug(`Replaced directory: ${(0, path_1.relative)(process.cwd(), targetDirPath)}`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Normal directory processing - ensure target exists and recurse
|
|
152
|
+
if (!(0, fs_1.existsSync)(targetDirPath)) {
|
|
153
|
+
(0, fs_1.mkdirSync)(targetDirPath, { recursive: true });
|
|
154
|
+
}
|
|
155
|
+
await processModificationDirectory(modDirPath, targetDirPath, mode);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Process a file modification
|
|
160
|
+
*/
|
|
161
|
+
async function processFile(modFilePath, targetFilePath, fileName, mode) {
|
|
162
|
+
logger.debug(`Processing file ${fileName} with target ${targetFilePath} and modFilePath ${modFilePath}`);
|
|
163
|
+
if (fileName.endsWith('.gitkeep')) {
|
|
164
|
+
// ignore .gitkeep files
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Handle .delete files
|
|
168
|
+
if (fileName.endsWith('.delete')) {
|
|
169
|
+
const targetFile = fileName.slice(0, -7); // Remove '.delete' suffix
|
|
170
|
+
const actualTargetPath = (0, path_1.join)((0, path_1.dirname)(targetFilePath), targetFile);
|
|
171
|
+
logger.debug(`Deleting file: ${(0, path_1.relative)(process.cwd(), actualTargetPath)}`);
|
|
172
|
+
if ((0, fs_1.existsSync)(actualTargetPath)) {
|
|
173
|
+
(0, fs_1.rmSync)(actualTargetPath, { force: true });
|
|
174
|
+
logger.debug(`Deleted file: ${(0, path_1.relative)(process.cwd(), actualTargetPath)}`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
logger.debug(`File not found: ${(0, path_1.relative)(process.cwd(), actualTargetPath)}`);
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Handle .json.merge files
|
|
182
|
+
// names can be like system.json.merge or system.json.merge-suffix
|
|
183
|
+
const isJSONMergeFile = fileName.endsWith('.json.merge') || fileName.includes('.json.merge-');
|
|
184
|
+
if (isJSONMergeFile) {
|
|
185
|
+
// get the base filename without the .merge or .merge-suffix
|
|
186
|
+
const baseFileName = fileName.split('.json.merge')[0];
|
|
187
|
+
const targetFile = baseFileName + '.json'; // Remove '.merge' and ensure .json
|
|
188
|
+
const actualTargetPath = (0, path_1.join)((0, path_1.dirname)(targetFilePath), targetFile);
|
|
189
|
+
await mergeJsonFile(modFilePath, actualTargetPath);
|
|
190
|
+
await expandVars(actualTargetPath, mode);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// Handle regular file replacement
|
|
194
|
+
ensureDirectoryExists((0, path_1.dirname)(targetFilePath));
|
|
195
|
+
(0, fs_1.copyFileSync)(modFilePath, targetFilePath);
|
|
196
|
+
if (fileName.endsWith('.json')) {
|
|
197
|
+
// expand vars in the final file only if json
|
|
198
|
+
await expandVars(targetFilePath, mode);
|
|
199
|
+
logger.debug(`Expanded env vars in file: ${targetFilePath}`);
|
|
200
|
+
}
|
|
201
|
+
logger.debug(`Copied file: ${(0, path_1.relative)(process.cwd(), targetFilePath)}`);
|
|
202
|
+
}
|
|
203
|
+
async function expandVars(filePath, mode) {
|
|
204
|
+
const vars = variables[mode] || [];
|
|
205
|
+
// Read the file content
|
|
206
|
+
let content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
207
|
+
for (const variable of vars) {
|
|
208
|
+
const value = variable.path ? toForwardSlashes(variable.value) : variable.value;
|
|
209
|
+
content = content.replace(new RegExp(`\\$\\{${variable.name}\\}`, 'g'), value);
|
|
210
|
+
}
|
|
211
|
+
// Write the modified content back to the file
|
|
212
|
+
(0, fs_1.writeFileSync)(filePath, content, 'utf-8');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Merge a JSON modification file with the target JSON file
|
|
216
|
+
*/
|
|
217
|
+
async function mergeJsonFile(mergePath, targetPath) {
|
|
218
|
+
try {
|
|
219
|
+
logger.debug(`Merging JSON file: ${mergePath} into ${targetPath}`);
|
|
220
|
+
// Read the merge file
|
|
221
|
+
const mergeContent = (0, fs_1.readFileSync)(mergePath, 'utf-8');
|
|
222
|
+
const mergeData = JSON.parse(mergeContent);
|
|
223
|
+
let targetData = {};
|
|
224
|
+
// Read existing target file if it exists
|
|
225
|
+
if ((0, fs_1.existsSync)(targetPath)) {
|
|
226
|
+
const targetContent = (0, fs_1.readFileSync)(targetPath, 'utf-8');
|
|
227
|
+
targetData = JSON.parse(targetContent);
|
|
228
|
+
}
|
|
229
|
+
// Deep merge the objects
|
|
230
|
+
const mergedData = (0, deep_merge_1.deepMerge)(targetData, mergeData);
|
|
231
|
+
// Write the merged result
|
|
232
|
+
ensureDirectoryExists((0, path_1.dirname)(targetPath));
|
|
233
|
+
(0, fs_1.writeFileSync)(targetPath, JSON.stringify(mergedData, null, 2), 'utf-8');
|
|
234
|
+
logger.debug(`Merged JSON file: ${(0, path_1.relative)(process.cwd(), targetPath)}`);
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
logger.error(`Failed to merge JSON file ${mergePath}: ${error}`);
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Recursively copy a directory
|
|
243
|
+
*/
|
|
244
|
+
async function copyDirectoryRecursive(srcDir, destDir) {
|
|
245
|
+
(0, fs_1.mkdirSync)(destDir, { recursive: true });
|
|
246
|
+
const items = (0, fs_1.readdirSync)(srcDir, { withFileTypes: true });
|
|
247
|
+
for (const item of items) {
|
|
248
|
+
const srcPath = (0, path_1.join)(srcDir, item.name);
|
|
249
|
+
const destPath = (0, path_1.join)(destDir, item.name);
|
|
250
|
+
if (item.isDirectory()) {
|
|
251
|
+
await copyDirectoryRecursive(srcPath, destPath);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
(0, fs_1.copyFileSync)(srcPath, destPath);
|
|
255
|
+
logger.debug(`📄 Copied file: ${(0, path_1.relative)(process.cwd(), destPath)}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Ensure a directory exists
|
|
261
|
+
*/
|
|
262
|
+
function ensureDirectoryExists(dirPath) {
|
|
263
|
+
if (!(0, fs_1.existsSync)(dirPath)) {
|
|
264
|
+
(0, fs_1.mkdirSync)(dirPath, { recursive: true });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get the actual component path, handling platform-specific structures
|
|
269
|
+
* On macOS, iocd component is packaged as an app bundle with extra directory levels
|
|
270
|
+
*/
|
|
271
|
+
function getActualComponentPath(baseComponentPath, componentName) {
|
|
272
|
+
// Handle macOS app bundle structure for iocd component
|
|
273
|
+
if (process.platform === 'darwin' && componentName === 'iocd') {
|
|
274
|
+
// Check for app bundle structure: iocd/{BUNDLE_NAME}/Contents/
|
|
275
|
+
const items = (0, fs_1.readdirSync)(baseComponentPath, { withFileTypes: true });
|
|
276
|
+
const appBundle = items.find(item => item.isDirectory() && item.name.endsWith('.app'));
|
|
277
|
+
if (appBundle) {
|
|
278
|
+
const appBundlePath = (0, path_1.join)(baseComponentPath, appBundle.name);
|
|
279
|
+
const contentsPath = (0, path_1.join)(appBundlePath, 'Contents');
|
|
280
|
+
// Verify the Contents directory exists
|
|
281
|
+
if ((0, fs_1.existsSync)(contentsPath)) {
|
|
282
|
+
logger.debug(`Using macOS app bundle path: ${(0, path_1.relative)(process.cwd(), contentsPath)}`);
|
|
283
|
+
return contentsPath;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// For other platforms or components, use the base path
|
|
288
|
+
return baseComponentPath;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Special handling for iocd component on macOS app bundles.
|
|
292
|
+
*
|
|
293
|
+
* This function handles the complex process of applying modifications to macOS .app bundles,
|
|
294
|
+
* which require special handling due to code signing and permission constraints. The strategy
|
|
295
|
+
* involves copying the entire app bundle to a temporary location, applying modifications there,
|
|
296
|
+
* and then moving it back to replace the original.
|
|
297
|
+
*
|
|
298
|
+
* Process:
|
|
299
|
+
* 1. Locates the target app bundle (with fallback to "io.Connect Desktop.app")
|
|
300
|
+
* 2. Creates a temporary copy of the entire app bundle
|
|
301
|
+
* 3. Applies modifications to the Contents directory of the temp copy
|
|
302
|
+
* 4. Renames app bundle contents (executable, Info.plist, Helper apps) using macOS helper
|
|
303
|
+
* 5. Replaces the original app bundle with the modified version
|
|
304
|
+
* 6. Cleans up temporary files
|
|
305
|
+
*
|
|
306
|
+
* @param modComponentDir - Path to the modifications directory for the iocd component
|
|
307
|
+
* @param baseTargetComponentDir - Path to the base target component directory (components/iocd)
|
|
308
|
+
* @throws {Error} When macOS helper is not available or app bundle cannot be found
|
|
309
|
+
* @throws {Error} When file operations fail during the modification process
|
|
310
|
+
*/
|
|
311
|
+
async function processIocdComponentOnMacOS(modComponentDir, baseTargetComponentDir, mode) {
|
|
312
|
+
logger.info('Applying modifications for component: iocd (macOS app bundle)');
|
|
313
|
+
const appBundleName = config_service_1.ConfigManager.config.mac.appBundleName;
|
|
314
|
+
const targetAppBundlePath = (0, path_1.join)(baseTargetComponentDir, appBundleName); // where we expect the app bundle to be at the end
|
|
315
|
+
let currentAppBundlePath = targetAppBundlePath; // where the app bundle currently is
|
|
316
|
+
// Check if macOS helper is available
|
|
317
|
+
if (!macOSHelper) {
|
|
318
|
+
logger.error('macOS helper module is required but not available');
|
|
319
|
+
throw new Error('macOS helper module is required but not available');
|
|
320
|
+
}
|
|
321
|
+
if (!(0, fs_1.existsSync)(targetAppBundlePath)) {
|
|
322
|
+
// APP BUNDLE NOT FOUND, TRY io.Connect Desktop.app as fallback
|
|
323
|
+
const fallbackAppBundlePath = (0, path_1.join)(baseTargetComponentDir, "io.Connect Desktop.app");
|
|
324
|
+
if ((0, fs_1.existsSync)(fallbackAppBundlePath)) {
|
|
325
|
+
logger.debug(`Using fallback app bundle: ${(0, path_1.relative)(process.cwd(), fallbackAppBundlePath)}`);
|
|
326
|
+
currentAppBundlePath = fallbackAppBundlePath;
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
throw new Error(`App bundle path not found: ${currentAppBundlePath}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Strategy: Copy the entire app bundle to a temp location, modify it there, then copy back
|
|
333
|
+
const tempDir = (0, path_1.join)(process.cwd(), 'temp');
|
|
334
|
+
const tempAppPath = (0, path_1.join)(tempDir, `${appBundleName}-temp`);
|
|
335
|
+
try {
|
|
336
|
+
// Create temp directory
|
|
337
|
+
if (!(0, fs_1.existsSync)(tempDir)) {
|
|
338
|
+
(0, fs_1.mkdirSync)(tempDir, { recursive: true });
|
|
339
|
+
}
|
|
340
|
+
// Remove any existing temp app
|
|
341
|
+
if ((0, fs_1.existsSync)(tempAppPath)) {
|
|
342
|
+
(0, fs_1.rmSync)(tempAppPath, { recursive: true, force: true });
|
|
343
|
+
}
|
|
344
|
+
logger.debug(`Copying app bundle to temp location: ${tempAppPath}`);
|
|
345
|
+
// Copy the entire app bundle to temp (this should work since it's not constrained by permissions)
|
|
346
|
+
(0, child_process_1.execSync)(`cp -R "${currentAppBundlePath}" "${tempAppPath}"`, { stdio: 'pipe' });
|
|
347
|
+
// Apply modifications to the temp copy
|
|
348
|
+
const tempContentsPath = (0, path_1.join)(tempAppPath, 'Contents');
|
|
349
|
+
await processModificationDirectory(modComponentDir, tempContentsPath, mode); // rename the app bundle name
|
|
350
|
+
await macOSHelper.renameAppBundleContents(tempAppPath, appBundleName);
|
|
351
|
+
// Remove the original app bundle
|
|
352
|
+
logger.debug(`Removing original app bundle: ${currentAppBundlePath}`);
|
|
353
|
+
(0, fs_1.rmSync)(currentAppBundlePath, { recursive: true, force: true });
|
|
354
|
+
// Move the modified temp app back
|
|
355
|
+
logger.debug(`Moving modified app bundle back: ${targetAppBundlePath}`);
|
|
356
|
+
(0, child_process_1.execSync)(`mv "${tempAppPath}" "${targetAppBundlePath}"`, { stdio: 'pipe' });
|
|
357
|
+
logger.debug('Successfully applied modifications to macOS app bundle');
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
logger.error(`Failed to process iocd component on macOS: ${error}`);
|
|
361
|
+
// Cleanup temp directory if it exists
|
|
362
|
+
if ((0, fs_1.existsSync)(tempAppPath)) {
|
|
363
|
+
try {
|
|
364
|
+
(0, fs_1.rmSync)(tempAppPath, { recursive: true, force: true });
|
|
365
|
+
}
|
|
366
|
+
catch (cleanupError) {
|
|
367
|
+
logger.warn(`Could not clean up temp directory: ${cleanupError}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
throw error;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function toForwardSlashes(path) {
|
|
374
|
+
return path.replace(/\\/g, "/");
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=modifications.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifications.service.js","sourceRoot":"","sources":["../../../src/services/modifications/modifications.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.helper.d.ts","sourceRoot":"","sources":["../../../src/services/modifications/windows.helper.ts"],"names":[],"mappings":"AAYA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modifyExe = modifyExe;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const logger_1 = require("../../utils/logger");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const config_service_1 = require("../config/config.service");
|
|
8
|
+
const path_2 = require("../../utils/path");
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const find_package_dir_1 = require("../../utils/find.package.dir");
|
|
11
|
+
const version_1 = require("../../utils/version");
|
|
12
|
+
const logger = logger_1.Logger.getInstance();
|
|
13
|
+
async function modifyExe() {
|
|
14
|
+
logger.info('Modifying Windows executable...');
|
|
15
|
+
restoreOriginalUnsignedExeIfNeeded();
|
|
16
|
+
const defaultIOCDPath = (0, path_1.join)(path_2.PathUtils.getComponentDir("iocd"), 'io-connect-desktop.exe');
|
|
17
|
+
const options = config_service_1.ConfigManager.config;
|
|
18
|
+
const newExePath = renameExe(defaultIOCDPath, options.win.exe.exeName);
|
|
19
|
+
await changeIconAndMetadata(newExePath, options);
|
|
20
|
+
logger.info('Modification complete successfully!');
|
|
21
|
+
}
|
|
22
|
+
function restoreOriginalUnsignedExeIfNeeded() {
|
|
23
|
+
// we store the original unsigned exe before signing, because rcedit can be done on unsigned exe only (see installer/windows.helper.ts for store logic).
|
|
24
|
+
// at this point we are restoring it so we can do rcedit again if needed.
|
|
25
|
+
logger.debug('Will check if original unsigned exe exists in _temp...');
|
|
26
|
+
const tempDir = path_2.PathUtils.getComponentDir("_temp");
|
|
27
|
+
const exeBaseName = (0, path_1.basename)(path_2.PathUtils.getIOCDExePath());
|
|
28
|
+
const tempPath = (0, path_1.join)(tempDir, exeBaseName);
|
|
29
|
+
if ((0, fs_1.existsSync)(tempPath)) {
|
|
30
|
+
logger.debug('Restoring exe from _temp directory...');
|
|
31
|
+
(0, fs_1.copyFileSync)(tempPath, path_2.PathUtils.getIOCDExePath());
|
|
32
|
+
logger.debug('Restored exe from _temp directory.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** rename io-connect-desktop.exe in the path to newName.exe; don to use regex */
|
|
36
|
+
function renameExe(path, newName) {
|
|
37
|
+
logger.debug(`Renaming executable in path: ${path} to ${newName}.exe`);
|
|
38
|
+
const dir = (0, path_1.dirname)(path);
|
|
39
|
+
const oldPath = (0, path_1.join)(dir, 'io-connect-desktop.exe');
|
|
40
|
+
const newPath = (0, path_1.join)(dir, `${newName}`);
|
|
41
|
+
const oldExists = (0, fs_1.existsSync)(oldPath);
|
|
42
|
+
const newExists = (0, fs_1.existsSync)(newPath);
|
|
43
|
+
if (newExists) {
|
|
44
|
+
logger.debug(`File with new name already exists, skipping rename: ${newPath}`);
|
|
45
|
+
return newPath;
|
|
46
|
+
}
|
|
47
|
+
if (oldExists) {
|
|
48
|
+
(0, fs_1.renameSync)(oldPath, newPath);
|
|
49
|
+
logger.debug(`Renamed: ${oldPath} -> ${newPath}`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error(`File not found: ${oldPath} and new file does not exist: ${newPath}`);
|
|
53
|
+
}
|
|
54
|
+
return newPath;
|
|
55
|
+
}
|
|
56
|
+
async function changeIconAndMetadata(exePath, options) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
logger.debug(`Updating icon and metadata for executable: ${exePath}`);
|
|
59
|
+
const rceditPath = (0, path_1.join)((0, find_package_dir_1.findPackageRoot)(), "tools", "rcedit-x64.exe");
|
|
60
|
+
const args = [
|
|
61
|
+
exePath,
|
|
62
|
+
"--set-icon", options.win.exe.exeIconPath,
|
|
63
|
+
"--set-version-string", "CompanyName", options.company,
|
|
64
|
+
"--set-version-string", "FileDescription", options.productDescription,
|
|
65
|
+
"--set-version-string", "ProductName", options.productName,
|
|
66
|
+
"--set-file-version", (0, version_1.makeVersionFourDigitsIfNeeded)(options.version),
|
|
67
|
+
"--set-product-version", options.version
|
|
68
|
+
];
|
|
69
|
+
logger.debug(`Executing rcedit with args: ${args.join(' ')}`);
|
|
70
|
+
(0, child_process_1.execFile)(rceditPath, args, (error, stdout, stderr) => {
|
|
71
|
+
if (error) {
|
|
72
|
+
logger.error("rcedit error:", error);
|
|
73
|
+
return reject(error);
|
|
74
|
+
}
|
|
75
|
+
if (stderr) {
|
|
76
|
+
logger.error("rcedit stderr:", stderr);
|
|
77
|
+
}
|
|
78
|
+
logger.debug("rcedit output:", stdout);
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=windows.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.helper.js","sourceRoot":"","sources":["../../../src/services/modifications/windows.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface TemplateOptions {
|
|
2
|
+
productSlug: string;
|
|
3
|
+
productName: string;
|
|
4
|
+
company: string;
|
|
5
|
+
copyright: string;
|
|
6
|
+
version: string;
|
|
7
|
+
folderName: string;
|
|
8
|
+
targetDirectory: string;
|
|
9
|
+
templateApplications: string[];
|
|
10
|
+
initialComponents: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface TemplateVariable {
|
|
13
|
+
key: string;
|
|
14
|
+
value: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TemplateMetadata {
|
|
18
|
+
name: string;
|
|
19
|
+
displayName?: string;
|
|
20
|
+
description: string;
|
|
21
|
+
version: string;
|
|
22
|
+
type: 'base' | 'application' | 'tests';
|
|
23
|
+
setupUI?: {
|
|
24
|
+
text?: string;
|
|
25
|
+
separate?: boolean;
|
|
26
|
+
selected?: boolean;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* TemplateService handles the generation of io.Connect Desktop projects using a modular template system.
|
|
31
|
+
*
|
|
32
|
+
* This service supports two types of templates:
|
|
33
|
+
* - Base templates: Core project structure and essential files (e.g., ioconnect-desktop)
|
|
34
|
+
* - Feature templates: Optional functionality modules that extend the base template
|
|
35
|
+
*
|
|
36
|
+
* The service processes templates by:
|
|
37
|
+
* 1. Copying base template files to the target directory
|
|
38
|
+
* 2. Applying variable substitutions ({{variable}} patterns)
|
|
39
|
+
* 3. Conditionally applying feature templates based on user selection:
|
|
40
|
+
* - Validates that requested features exist as separate template directories
|
|
41
|
+
* - Only processes features that are explicitly selected by the user
|
|
42
|
+
* - Each feature template contains its own template.json with type: "feature"
|
|
43
|
+
* - Features are independent and can be combined in any combination
|
|
44
|
+
* 4. Merging feature-specific files into the project structure:
|
|
45
|
+
* - Feature templates overlay their files onto the base project structure
|
|
46
|
+
* - Files from features are copied to their corresponding paths in the target
|
|
47
|
+
* - Directory structures are preserved (e.g., modifications/iocd/assets/feature/)
|
|
48
|
+
* - No conflicts occur since features target different subdirectories
|
|
49
|
+
* - Variable substitution is applied to feature files just like base template files
|
|
50
|
+
*
|
|
51
|
+
* Key capabilities:
|
|
52
|
+
* - Template discovery and validation from filesystem
|
|
53
|
+
* - Variable interpolation for dynamic content generation
|
|
54
|
+
* - Modular feature system for extensible project setup
|
|
55
|
+
* - Comprehensive error handling and logging
|
|
56
|
+
* - Support for nested directory structures and file copying
|
|
57
|
+
*/
|
|
58
|
+
export declare class TemplateService {
|
|
59
|
+
private logger;
|
|
60
|
+
private templatesPath;
|
|
61
|
+
constructor();
|
|
62
|
+
/**
|
|
63
|
+
* Get the path to embedded templates
|
|
64
|
+
*/
|
|
65
|
+
getTemplatesPath(): string;
|
|
66
|
+
/**
|
|
67
|
+
* List available templates
|
|
68
|
+
*/
|
|
69
|
+
getAvailableTemplates(): string[];
|
|
70
|
+
/**
|
|
71
|
+
* Check if a template exists
|
|
72
|
+
*/
|
|
73
|
+
templateExists(templateName: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Generate a project from a template
|
|
76
|
+
*/
|
|
77
|
+
generateProject(templateName: string, options: TemplateOptions): Promise<void>;
|
|
78
|
+
/** Add a new template application to an already created seed project */
|
|
79
|
+
addTemplateApplication(appName: string): Promise<void>;
|
|
80
|
+
/** Adds initialComponents to the iocd.cli.config.json -> components.list object in the target directory */
|
|
81
|
+
private updateComponentsConfig;
|
|
82
|
+
/**
|
|
83
|
+
* Prepare template variables for replacement
|
|
84
|
+
*/
|
|
85
|
+
private prepareTemplateVariables;
|
|
86
|
+
/**
|
|
87
|
+
* Generate NPM-compatible package name from product name
|
|
88
|
+
*/
|
|
89
|
+
private generatePackageName;
|
|
90
|
+
/**
|
|
91
|
+
* Recursively copy template files with variable replacement
|
|
92
|
+
*/
|
|
93
|
+
private copyTemplateFiles;
|
|
94
|
+
/**
|
|
95
|
+
* Copy a single file with variable replacement
|
|
96
|
+
*/
|
|
97
|
+
private copyFileWithReplacement;
|
|
98
|
+
private copyFileNoReplacement;
|
|
99
|
+
/**
|
|
100
|
+
* Process feature-specific templates
|
|
101
|
+
*/
|
|
102
|
+
private processApplicationsTemplates;
|
|
103
|
+
/**
|
|
104
|
+
* Escape special regex characters
|
|
105
|
+
*/
|
|
106
|
+
private escapeRegExp;
|
|
107
|
+
/**
|
|
108
|
+
* Get template information
|
|
109
|
+
*/
|
|
110
|
+
getTemplateInfo(templateName: string): TemplateMetadata;
|
|
111
|
+
/**
|
|
112
|
+
* Get available application templates with their metadata
|
|
113
|
+
*/
|
|
114
|
+
getAvailableApplicationTemplates(): TemplateMetadata[];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=template.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.service.d.ts","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC;IACvC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,aAAa,CAAS;;IAM9B;;OAEG;IACI,gBAAgB,IAAI,MAAM;IAIjC;;OAEG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAuBxC;;OAEG;IACI,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAKpD;;OAEG;IACU,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA4E3F,wEAAwE;IAC3D,sBAAsB,CAAC,OAAO,EAAE,MAAM;IAqBnD,2GAA2G;IAC3G,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;YACW,iBAAiB;IAoC/B;;OAEG;YACW,uBAAuB;IAkBrC,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;YACW,4BAA4B;IAyB1C;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACI,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB;IAoB9D;;OAEG;IACI,gCAAgC,IAAI,gBAAgB,EAAE;CAa9D"}
|