@interopio/iocd-cli 0.0.57 → 0.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/changelog.md +447 -0
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/apps.command.js +1 -0
  5. package/dist/commands/apps.command.js.map +1 -1
  6. package/dist/commands/build.command.js +1 -1
  7. package/dist/commands/build.command.js.map +1 -1
  8. package/dist/commands/dev.command.js +4 -2
  9. package/dist/commands/dev.command.js.map +1 -1
  10. package/dist/commands/index.js +22 -0
  11. package/dist/commands/index.js.map +1 -0
  12. package/dist/commands/modifications.command.js +4 -2
  13. package/dist/commands/modifications.command.js.map +1 -1
  14. package/dist/schemas/iocd.cli.config.schema.json +1 -49
  15. package/dist/services/app.service.js +12 -0
  16. package/dist/services/app.service.js.map +1 -1
  17. package/dist/services/components/components.service.js +2 -0
  18. package/dist/services/components/components.service.js.map +1 -1
  19. package/dist/services/dev.service.js +8 -5
  20. package/dist/services/dev.service.js.map +1 -1
  21. package/dist/services/installer/installer.service.js +18 -10
  22. package/dist/services/installer/installer.service.js.map +1 -1
  23. package/dist/services/modifications/modifications.service.js +13 -4
  24. package/dist/services/modifications/modifications.service.js.map +1 -1
  25. package/dist/services/modifications/modifications.tracker.js +129 -0
  26. package/dist/services/modifications/modifications.tracker.js.map +1 -0
  27. package/dist/templates/ioconnect-desktop/.gitignore.template +2 -1
  28. package/dist/templates/launchpad/apps/launchpad/vite.config.ts +1 -2
  29. package/dist/utils/logger.js +2 -1
  30. package/dist/utils/logger.js.map +1 -1
  31. package/dist/utils/version-check.js +101 -0
  32. package/dist/utils/version-check.js.map +1 -0
  33. package/package.json +8 -8
  34. package/scripts/generate-schema.js +41 -7
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ModificationsTracker = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const crypto_1 = require("crypto");
10
+ const logger_1 = require("../../utils/logger");
11
+ const path_2 = require("../../utils/path");
12
+ const error_handler_1 = require("../../utils/error.handler");
13
+ const logger = logger_1.Logger.getInstance("modifications.tracker");
14
+ /**
15
+ * Tracks and resets the local changes (modifications/* -> components/*) during dev or build runs.
16
+ * The paths in each record are relative to the project root.
17
+ *
18
+ * Note: To avoid tracking the temporary MacOS app bundle modifications, the tracker skips if originalPath is outside components directory.
19
+ */
20
+ class ModificationsTracker {
21
+ static bakDirPathRelative = path_1.default.join(".iocd-cli", "backup");
22
+ static get recordsFilePath() {
23
+ return path_1.default.resolve(this.bakDirPathRelative, "records.json");
24
+ }
25
+ static get bakDirPath() {
26
+ return path_1.default.resolve(this.bakDirPathRelative);
27
+ }
28
+ static add(srcPath) {
29
+ if (!this.isComponentsSubPath(srcPath)) {
30
+ logger.debug(`Skipped tracking modification outside components directory: ${srcPath}`);
31
+ return;
32
+ }
33
+ const record = {
34
+ srcPathRelative: path_1.default.relative(process.cwd(), srcPath),
35
+ bakPathRelative: fs_extra_1.default.existsSync(srcPath)
36
+ ? path_1.default.join(this.bakDirPathRelative, (0, crypto_1.randomBytes)(8).toString("hex"))
37
+ : null,
38
+ };
39
+ const records = this.readRecords();
40
+ if (records.some(e => e.srcPathRelative === record.srcPathRelative)) {
41
+ return; // Skip backup if the path is already tracked.
42
+ }
43
+ records.push(record);
44
+ try {
45
+ if (record.bakPathRelative) {
46
+ fs_extra_1.default.cpSync(srcPath, path_1.default.resolve(record.bakPathRelative), {
47
+ recursive: true,
48
+ });
49
+ }
50
+ fs_extra_1.default.writeFileSync(this.recordsFilePath, JSON.stringify(records, null, 2), "utf-8");
51
+ }
52
+ catch (e) {
53
+ logger.warn(`Failed to make a record for ${srcPath}: `, e);
54
+ return;
55
+ }
56
+ logger.debug(`Recorded the modification on ${srcPath}`);
57
+ }
58
+ static resetAll() {
59
+ const records = this.readRecords(true);
60
+ for (const record of [...records]) {
61
+ try {
62
+ this.reset(record);
63
+ // Clean up the records.json and the backup file.
64
+ records.shift();
65
+ fs_extra_1.default.writeFileSync(this.recordsFilePath, JSON.stringify(records, null, 2), "utf-8");
66
+ if (record.bakPathRelative) {
67
+ fs_extra_1.default.removeSync(path_1.default.resolve(record.bakPathRelative));
68
+ }
69
+ }
70
+ catch (e) {
71
+ const suggestions = [
72
+ `Verify that the records.json contains valid JSON array: ${this.recordsFilePath}`,
73
+ ];
74
+ const srcPath = path_1.default.resolve(`${record.srcPathRelative}`);
75
+ if (fs_extra_1.default.existsSync(srcPath)) {
76
+ suggestions.push(`Verify that the source path is not locked: ${srcPath}`);
77
+ }
78
+ if (record.bakPathRelative) {
79
+ const bakPath = path_1.default.resolve(`${record.bakPathRelative}`);
80
+ suggestions.push(`Verify that the backup path exists: ${bakPath}`);
81
+ }
82
+ suggestions.push("Retry running the command. If error persists, run 'iocd setup' to install fresh components again.");
83
+ throw new error_handler_1.CLIError(`Unexpected error when resetting modification on ${record.srcPathRelative}: ${e}`, { suggestions });
84
+ }
85
+ }
86
+ }
87
+ static clearAll() {
88
+ fs_extra_1.default.emptyDirSync(this.bakDirPath);
89
+ logger.info(`Cleared backup directory: ${this.bakDirPath}`);
90
+ }
91
+ static reset(record) {
92
+ const srcPath = path_1.default.resolve(record.srcPathRelative);
93
+ const bakPath = record.bakPathRelative
94
+ ? path_1.default.resolve(record.bakPathRelative)
95
+ : null;
96
+ if (bakPath && !fs_extra_1.default.existsSync(bakPath)) {
97
+ throw new Error(`Backup item does not exist at ${bakPath}`);
98
+ }
99
+ // The original operation can be an addition, a deletion or a replacement, remove it first.
100
+ fs_extra_1.default.removeSync(srcPath);
101
+ if (bakPath) {
102
+ // Restore only if backup path is not null (i.e. the original operation was not an addition).
103
+ fs_extra_1.default.cpSync(bakPath, srcPath, { recursive: true });
104
+ }
105
+ logger.debug(`Reset the modification on ${srcPath}`);
106
+ }
107
+ static readRecords(shouldLog = false) {
108
+ let records = [];
109
+ fs_extra_1.default.ensureDirSync(this.bakDirPath);
110
+ try {
111
+ let content;
112
+ if (fs_extra_1.default.existsSync(this.recordsFilePath)) {
113
+ content = fs_extra_1.default.readFileSync(this.recordsFilePath, "utf-8");
114
+ }
115
+ !!shouldLog && logger.debug("Parsing records file: ", content);
116
+ records = JSON.parse(content || "[]");
117
+ }
118
+ catch (e) {
119
+ logger.warn(`Failed to read records: `, e);
120
+ }
121
+ return records;
122
+ }
123
+ static isComponentsSubPath(target) {
124
+ const rel = path_1.default.relative(path_2.PathUtils.getComponentsDir(), target);
125
+ return !!rel && !rel.startsWith("..") && !path_1.default.isAbsolute(rel);
126
+ }
127
+ }
128
+ exports.ModificationsTracker = ModificationsTracker;
129
+ //# sourceMappingURL=modifications.tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modifications.tracker.js","sourceRoot":"","sources":["../../../src/services/modifications/modifications.tracker.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ config/iocd.license.key
2
2
  temp/
3
3
  dist/
4
4
  node_modules/
5
- components/
5
+ /components/
6
+ .iocd-cli/
6
7
  .env
7
8
 
8
9
  # macOS
@@ -1,6 +1,5 @@
1
1
  import { defineConfig } from "vite";
2
2
  import react from "@vitejs/plugin-react";
3
- import EnvironmentPlugin from "vite-plugin-environment";
4
3
 
5
4
  export default defineConfig({
6
5
  server: {
@@ -8,5 +7,5 @@ export default defineConfig({
8
7
  host: "localhost",
9
8
  },
10
9
  base: "./",
11
- plugins: [react(), EnvironmentPlugin("all")],
10
+ plugins: [react()],
12
11
  });
@@ -48,7 +48,8 @@ class Logger {
48
48
  logger;
49
49
  static timestamp = new Date().toISOString().replace(/[:.]/g, "-");
50
50
  static logFileName = `cli-${Logger.timestamp}.log`;
51
- static logDir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), "@interopio-iocd-cli");
51
+ // Allow overriding log directory via environment variable (useful for tests)
52
+ static logDir = process.env["IOCD_CLI_LOG_DIR"] || (0, node_path_1.join)((0, node_os_1.tmpdir)(), "@interopio-iocd-cli");
52
53
  static logPath = (0, node_path_1.join)(Logger.logDir, Logger.logFileName);
53
54
  constructor(name) {
54
55
  this.logger = log4js_1.default.getLogger(name);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
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.checkForUpdates = checkForUpdates;
37
+ const colors_1 = require("./colors");
38
+ const logger_1 = require("./logger");
39
+ const pacakge_json_helper_1 = require("./pacakge.json.helper");
40
+ const clack = __importStar(require("@clack/prompts"));
41
+ const logger = logger_1.Logger.getInstance("version-check");
42
+ /**
43
+ * Compare two semver version strings
44
+ * Returns: -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2
45
+ */
46
+ function compareVersions(v1, v2) {
47
+ const parts1 = v1.replace(/^v/, "").split(".").map(Number);
48
+ const parts2 = v2.replace(/^v/, "").split(".").map(Number);
49
+ for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
50
+ const p1 = parts1[i] || 0;
51
+ const p2 = parts2[i] || 0;
52
+ if (p1 < p2)
53
+ return -1;
54
+ if (p1 > p2)
55
+ return 1;
56
+ }
57
+ return 0;
58
+ }
59
+ /**
60
+ * Check if a newer version of the CLI is available on npm
61
+ * Logs a warning message if an update is available
62
+ */
63
+ async function checkForUpdates() {
64
+ try {
65
+ const packageName = "@interopio/iocd-cli";
66
+ const currentVersion = pacakge_json_helper_1.PackageJSONHelper.getCliPackageJson().version;
67
+ logger.debug(`Checking for updates... Current version: ${currentVersion}`);
68
+ // Fetch latest version from npm registry with a short timeout
69
+ const controller = new AbortController();
70
+ const timeoutId = setTimeout(() => controller.abort(), 3000); // 3 second timeout
71
+ const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
72
+ signal: controller.signal,
73
+ headers: {
74
+ Accept: "application/json",
75
+ },
76
+ });
77
+ clearTimeout(timeoutId);
78
+ if (!response.ok) {
79
+ logger.debug(`Failed to fetch npm registry: ${response.status}`);
80
+ return;
81
+ }
82
+ const data = (await response.json());
83
+ const latestVersion = data.version;
84
+ logger.debug(`Latest version on npm: ${latestVersion}`);
85
+ if (compareVersions(currentVersion, latestVersion) < 0) {
86
+ // Current version is older than latest
87
+ clack.log.warn((0, colors_1.yellow)(`A new version of ${packageName} is available: ${latestVersion} (current: ${currentVersion}). Run npm i ${packageName}@latest to update.`));
88
+ logger.debug("A new version of ${packageName} is available: ${latestVersion} (current: ${currentVersion})");
89
+ }
90
+ }
91
+ catch (error) {
92
+ // Silently fail - don't block CLI execution for version check failures
93
+ if (error instanceof Error && error.name === "AbortError") {
94
+ logger.debug("Version check timed out");
95
+ }
96
+ else {
97
+ logger.debug(`Version check failed: ${error instanceof Error ? error.message : "Unknown error"}`);
98
+ }
99
+ }
100
+ }
101
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/utils/version-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@interopio/iocd-cli",
3
- "version": "0.0.57",
3
+ "version": "0.0.60",
4
4
  "description": "CLI tool for setting up, building and packaging io.Connect Desktop platforms",
5
5
  "engines": {
6
6
  "node": ">=22.0.0",
7
7
  "npm": ">=9.0.0"
8
8
  },
9
+ "main": "dist/commands/index.js",
9
10
  "bin": {
10
11
  "iocd": "./dist/cli.js"
11
12
  },
@@ -14,12 +15,8 @@
14
15
  "generate-schema": "node ./scripts/generate-schema.js",
15
16
  "copy-assets": "node ./scripts/copy-assets.js",
16
17
  "dev": "tsc --watch",
17
- "test": "NODE_OPTIONS='--no-experimental-webstorage' jest",
18
- "test:watch": "NODE_OPTIONS='--no-experimental-webstorage' jest --watch",
19
- "test:unit": "NODE_OPTIONS='--no-experimental-webstorage' jest --selectProjects=unit",
20
- "test:e2e": "npm run build && NODE_OPTIONS='--no-experimental-webstorage' jest --selectProjects=e2e",
21
- "test:e2e:verbose": "npm run build && NODE_OPTIONS='--no-experimental-webstorage' jest --selectProjects=e2e --verbose",
22
- "test:all": "npm run test:unit && npm run test:e2e",
18
+ "test": "cross-env NODE_OPTIONS=--no-experimental-webstorage jest",
19
+ "test:watch": "cross-env NODE_OPTIONS=--no-experimental-webstorage jest --watch",
23
20
  "lint": "eslint src --ext .ts",
24
21
  "lint:fix": "eslint src --ext .ts --fix",
25
22
  "format": "prettier --write src/**/*.ts*",
@@ -44,7 +41,8 @@
44
41
  "dist",
45
42
  "scripts",
46
43
  "tools",
47
- "README.md"
44
+ "README.md",
45
+ "changelog.md"
48
46
  ],
49
47
  "dependencies": {
50
48
  "@clack/prompts": "^0.7.0",
@@ -69,10 +67,12 @@
69
67
  "@types/node": "^20.8.0",
70
68
  "@typescript-eslint/eslint-plugin": "^8.47.0",
71
69
  "@typescript-eslint/parser": "^8.47.0",
70
+ "cross-env": "^10.1.0",
72
71
  "eslint": "^8.50.0",
73
72
  "eslint-config-prettier": "^9.0.0",
74
73
  "eslint-plugin-prettier": "^5.0.0",
75
74
  "jest": "^29.7.0",
75
+ "jest-junit": "^16.0.0",
76
76
  "prettier": "^3.0.3",
77
77
  "ts-jest": "^29.1.1",
78
78
  "typescript": "^5.2.2",
@@ -14,9 +14,33 @@ if (!fs.existsSync(schemaDir)) {
14
14
  fs.mkdirSync(schemaDir, { recursive: true });
15
15
  }
16
16
 
17
+ /**
18
+ * Recursively remove all "required" arrays from a schema object.
19
+ * This makes all properties optional for user input.
20
+ */
21
+ function removeRequiredRecursively(obj) {
22
+ if (obj === null || typeof obj !== 'object') {
23
+ return obj;
24
+ }
25
+
26
+ if (Array.isArray(obj)) {
27
+ return obj.map(removeRequiredRecursively);
28
+ }
29
+
30
+ const result = {};
31
+ for (const [key, value] of Object.entries(obj)) {
32
+ // Skip "required" arrays
33
+ if (key === 'required' && Array.isArray(value)) {
34
+ continue;
35
+ }
36
+ result[key] = removeRequiredRecursively(value);
37
+ }
38
+ return result;
39
+ }
40
+
17
41
  try {
18
- // Generate schema using typescript-json-schema
19
- // Point directly to the source file to avoid compilation issues
42
+ // Generate schema using typescript-json-schema from CliConfig
43
+ // Use --required to get full schema structure, then post-process to remove required arrays
20
44
  execSync(
21
45
  `npx typescript-json-schema ./src/services/config/cli.config.ts CliConfig --required --noExtraProps --out ${schemaFile}`,
22
46
  {
@@ -28,18 +52,28 @@ try {
28
52
  // Read the generated schema
29
53
  const schema = JSON.parse(fs.readFileSync(schemaFile, 'utf8'));
30
54
 
55
+ // Remove all "required" arrays recursively to make all properties optional
56
+ const schemaWithoutRequired = removeRequiredRecursively(schema);
57
+
31
58
  // Add metadata at the beginning, preserving proper order
32
59
  const enhancedSchema = {
33
60
  "$schema": "http://json-schema.org/draft-07/schema#",
34
61
  "$id": "https://unpkg.com/@interopio/iocd-cli/schemas/iocd.cli.config.schema.json",
35
62
  "title": "io.Connect Desktop CLI Configuration",
36
- "description": "Configuration schema for io.Connect Desktop CLI projects",
37
- "additionalProperties": schema.additionalProperties,
38
- "properties": schema.properties,
39
- "required": schema.required,
40
- "type": schema.type || "object"
63
+ "description": "Configuration schema for io.Connect Desktop CLI projects. All properties are optional - the CLI provides sensible defaults.",
64
+ "additionalProperties": schemaWithoutRequired.additionalProperties,
65
+ "properties": schemaWithoutRequired.properties,
66
+ "definitions": schemaWithoutRequired.definitions,
67
+ "type": schemaWithoutRequired.type || "object"
41
68
  };
42
69
 
70
+ // Remove undefined keys
71
+ Object.keys(enhancedSchema).forEach(key => {
72
+ if (enhancedSchema[key] === undefined) {
73
+ delete enhancedSchema[key];
74
+ }
75
+ });
76
+
43
77
  // Write back the updated schema
44
78
  fs.writeFileSync(schemaFile, JSON.stringify(enhancedSchema, null, 2));
45
79