projax 1.0.2 → 1.3.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/dist/api/database.d.ts +34 -0
- package/dist/api/database.d.ts.map +1 -0
- package/dist/api/database.js +318 -0
- package/dist/api/database.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +130 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/migrate.d.ts +2 -0
- package/dist/api/migrate.d.ts.map +1 -0
- package/dist/api/migrate.js +158 -0
- package/dist/api/migrate.js.map +1 -0
- package/dist/api/package.json +27 -0
- package/dist/api/routes/index.d.ts +3 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/index.js +17 -0
- package/dist/api/routes/index.js.map +1 -0
- package/dist/api/routes/projects.d.ts +3 -0
- package/dist/api/routes/projects.d.ts.map +1 -0
- package/dist/api/routes/projects.js +198 -0
- package/dist/api/routes/projects.js.map +1 -0
- package/dist/api/routes/settings.d.ts +3 -0
- package/dist/api/routes/settings.d.ts.map +1 -0
- package/dist/api/routes/settings.js +33 -0
- package/dist/api/routes/settings.js.map +1 -0
- package/dist/api/services/scanner.d.ts +9 -0
- package/dist/api/services/scanner.d.ts.map +1 -0
- package/dist/api/services/scanner.js +172 -0
- package/dist/api/services/scanner.js.map +1 -0
- package/dist/api/types.d.ts +48 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/core/database.d.ts +15 -5
- package/dist/core/database.js +136 -208
- package/dist/core/detector.d.ts +5 -0
- package/dist/core/detector.js +135 -0
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.js +2 -4
- package/dist/core/scanner.js +2 -105
- package/dist/core/settings.d.ts +50 -0
- package/dist/core/settings.js +102 -0
- package/dist/core-bridge.d.ts +2 -0
- package/dist/core-bridge.js +73 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.js +76 -0
- package/dist/electron/core/database.d.ts +76 -0
- package/dist/electron/core/database.js +240 -0
- package/dist/electron/core/detector.d.ts +14 -0
- package/dist/electron/core/detector.js +284 -0
- package/dist/electron/core/index.d.ts +10 -0
- package/dist/electron/core/index.js +41 -0
- package/dist/electron/core/scanner.d.ts +8 -0
- package/dist/electron/core/scanner.js +11 -0
- package/dist/electron/core/settings.d.ts +50 -0
- package/dist/electron/core/settings.js +102 -0
- package/dist/electron/core.d.ts +2 -0
- package/dist/electron/core.js +76 -0
- package/dist/electron/main.js +93 -51
- package/dist/electron/port-scanner.js +4 -4
- package/dist/electron/preload.d.ts +1 -1
- package/dist/electron/renderer/assets/index-7KIJIiIM.js +42 -0
- package/dist/electron/renderer/assets/{index-DohAcUCg.css → index-ezVMxZrM.css} +1 -1
- package/dist/electron/renderer/index.html +2 -2
- package/dist/electron/script-runner.js +4 -4
- package/dist/index.js +240 -75
- package/dist/port-scanner.js +4 -4
- package/dist/script-runner.js +4 -4
- package/package.json +12 -11
- package/dist/electron/renderer/assets/index-BZ6USRnW.js +0 -42
- package/dist/electron/renderer/assets/index-CdMlFqhB.js +0 -42
- package/dist/electron/renderer/assets/index-DNtxfrZe.js +0 -42
- package/dist/electron/renderer/assets/index-khk3K-qG.css +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSetting = getSetting;
|
|
4
|
+
exports.setSetting = setSetting;
|
|
5
|
+
exports.getAllSettings = getAllSettings;
|
|
6
|
+
exports.getEditorSettings = getEditorSettings;
|
|
7
|
+
exports.setEditorSettings = setEditorSettings;
|
|
8
|
+
exports.getBrowserSettings = getBrowserSettings;
|
|
9
|
+
exports.setBrowserSettings = setBrowserSettings;
|
|
10
|
+
exports.getAppSettings = getAppSettings;
|
|
11
|
+
exports.setAppSettings = setAppSettings;
|
|
12
|
+
const database_1 = require("./database");
|
|
13
|
+
const DEFAULT_SETTINGS = {
|
|
14
|
+
editor: {
|
|
15
|
+
type: 'vscode',
|
|
16
|
+
},
|
|
17
|
+
browser: {
|
|
18
|
+
type: 'chrome',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get a setting value by key
|
|
23
|
+
*/
|
|
24
|
+
function getSetting(key) {
|
|
25
|
+
return (0, database_1.getDatabaseManager)().getSetting(key);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set a setting value by key
|
|
29
|
+
*/
|
|
30
|
+
function setSetting(key, value) {
|
|
31
|
+
(0, database_1.getDatabaseManager)().setSetting(key, value);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get all settings as a key-value object
|
|
35
|
+
*/
|
|
36
|
+
function getAllSettings() {
|
|
37
|
+
return (0, database_1.getDatabaseManager)().getAllSettings();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get editor settings
|
|
41
|
+
*/
|
|
42
|
+
function getEditorSettings() {
|
|
43
|
+
const db = (0, database_1.getDatabaseManager)();
|
|
44
|
+
const type = db.getSetting('editor.type') || DEFAULT_SETTINGS.editor.type;
|
|
45
|
+
const customPath = db.getSetting('editor.customPath') || undefined;
|
|
46
|
+
return {
|
|
47
|
+
type,
|
|
48
|
+
customPath,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set editor settings
|
|
53
|
+
*/
|
|
54
|
+
function setEditorSettings(settings) {
|
|
55
|
+
const db = (0, database_1.getDatabaseManager)();
|
|
56
|
+
db.setSetting('editor.type', settings.type);
|
|
57
|
+
if (settings.customPath) {
|
|
58
|
+
db.setSetting('editor.customPath', settings.customPath);
|
|
59
|
+
}
|
|
60
|
+
// Note: Removing settings is not yet supported via the API
|
|
61
|
+
// Setting to empty string would achieve similar effect if needed
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get browser settings
|
|
65
|
+
*/
|
|
66
|
+
function getBrowserSettings() {
|
|
67
|
+
const db = (0, database_1.getDatabaseManager)();
|
|
68
|
+
const type = db.getSetting('browser.type') || DEFAULT_SETTINGS.browser.type;
|
|
69
|
+
const customPath = db.getSetting('browser.customPath') || undefined;
|
|
70
|
+
return {
|
|
71
|
+
type,
|
|
72
|
+
customPath,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set browser settings
|
|
77
|
+
*/
|
|
78
|
+
function setBrowserSettings(settings) {
|
|
79
|
+
const db = (0, database_1.getDatabaseManager)();
|
|
80
|
+
db.setSetting('browser.type', settings.type);
|
|
81
|
+
if (settings.customPath) {
|
|
82
|
+
db.setSetting('browser.customPath', settings.customPath);
|
|
83
|
+
}
|
|
84
|
+
// Note: Removing settings is not yet supported via the API
|
|
85
|
+
// Setting to empty string would achieve similar effect if needed
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get all app settings
|
|
89
|
+
*/
|
|
90
|
+
function getAppSettings() {
|
|
91
|
+
return {
|
|
92
|
+
editor: getEditorSettings(),
|
|
93
|
+
browser: getBrowserSettings(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Set all app settings
|
|
98
|
+
*/
|
|
99
|
+
function setAppSettings(settings) {
|
|
100
|
+
setEditorSettings(settings.editor);
|
|
101
|
+
setBrowserSettings(settings.browser);
|
|
102
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const getDatabaseManager: typeof import("projax-core").getDatabaseManager, addProject: typeof import("projax-core").addProject, removeProject: typeof import("projax-core").removeProject, getAllProjects: typeof import("projax-core").getAllProjects, scanProject: typeof import("projax-core").scanProject, scanAllProjects: typeof import("projax-core").scanAllProjects, getTestsByProject: typeof import("projax-core").getTestsByProject;
|
|
2
|
+
export type { Project, Test, ProjectPort, JenkinsJob } from 'projax-core';
|
|
@@ -0,0 +1,76 @@
|
|
|
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.getTestsByProject = exports.scanAllProjects = exports.scanProject = exports.getAllProjects = exports.removeProject = exports.addProject = exports.getDatabaseManager = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
let cachedCore = null;
|
|
39
|
+
function tryRequire(candidate) {
|
|
40
|
+
try {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
42
|
+
return require(candidate);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (!(error instanceof Error) ||
|
|
46
|
+
!('code' in error) ||
|
|
47
|
+
error.code !== 'MODULE_NOT_FOUND') {
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function resolveCore() {
|
|
54
|
+
if (cachedCore) {
|
|
55
|
+
return cachedCore;
|
|
56
|
+
}
|
|
57
|
+
const candidates = [
|
|
58
|
+
// Packaged desktop build (core copied into dist/core)
|
|
59
|
+
path.join(__dirname, 'core'),
|
|
60
|
+
// Running from workspace build output
|
|
61
|
+
path.join(__dirname, '..', '..', 'core', 'dist'),
|
|
62
|
+
path.join(__dirname, '..', 'core', 'dist'),
|
|
63
|
+
// Fallback: installed module (during development)
|
|
64
|
+
'projax-core',
|
|
65
|
+
];
|
|
66
|
+
for (const candidate of candidates) {
|
|
67
|
+
const mod = tryRequire(candidate);
|
|
68
|
+
if (mod) {
|
|
69
|
+
cachedCore = mod;
|
|
70
|
+
return mod;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Unable to load projax core module. Tried locations: ${candidates.join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
const core = resolveCore();
|
|
76
|
+
exports.getDatabaseManager = core.getDatabaseManager, exports.addProject = core.addProject, exports.removeProject = core.removeProject, exports.getAllProjects = core.getAllProjects, exports.scanProject = core.scanProject, exports.scanAllProjects = core.scanAllProjects, exports.getTestsByProject = core.getTestsByProject;
|
package/dist/electron/main.js
CHANGED
|
@@ -36,24 +36,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const electron_1 = require("electron");
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
// Try relative import first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
43
|
-
coreModule = require('../core');
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
try {
|
|
47
|
-
// Try alternative path (local development: packages/electron/dist/main.js -> packages/cli/dist/core)
|
|
48
|
-
coreModule = require('../../cli/dist/core');
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
// Fallback to package import
|
|
52
|
-
coreModule = require('@projax/core');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const { getDatabaseManager, getAllProjects, addProject, removeProject, scanProject, scanAllProjects, getTestsByProject, } = coreModule;
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
40
|
+
const core_1 = require("./core");
|
|
56
41
|
let mainWindow = null;
|
|
42
|
+
let apiProcess = null;
|
|
57
43
|
// Prevent multiple instances
|
|
58
44
|
const gotTheLock = electron_1.app.requestSingleInstanceLock();
|
|
59
45
|
if (!gotTheLock) {
|
|
@@ -93,7 +79,7 @@ else {
|
|
|
93
79
|
}
|
|
94
80
|
else {
|
|
95
81
|
// Try bundled renderer path first (when bundled in CLI: dist/electron/renderer/index.html)
|
|
96
|
-
// Then try local dev path (packages/
|
|
82
|
+
// Then try local dev path (packages/desktop/dist/renderer/index.html)
|
|
97
83
|
const bundledRenderer = path.join(__dirname, 'renderer', 'index.html');
|
|
98
84
|
const localRenderer = path.join(__dirname, '..', 'renderer', 'index.html');
|
|
99
85
|
if (fs.existsSync(bundledRenderer)) {
|
|
@@ -113,7 +99,49 @@ else {
|
|
|
113
99
|
mainWindow = null;
|
|
114
100
|
});
|
|
115
101
|
}
|
|
102
|
+
// Start API server
|
|
103
|
+
function startAPIServer() {
|
|
104
|
+
try {
|
|
105
|
+
// Try to find API server in various locations
|
|
106
|
+
const apiPaths = [
|
|
107
|
+
path.join(__dirname, '..', '..', '..', 'api', 'dist', 'index.js'),
|
|
108
|
+
path.join(__dirname, '..', '..', 'api', 'dist', 'index.js'),
|
|
109
|
+
path.join(process.cwd(), 'packages', 'api', 'dist', 'index.js'),
|
|
110
|
+
];
|
|
111
|
+
let apiPath = null;
|
|
112
|
+
for (const p of apiPaths) {
|
|
113
|
+
if (fs.existsSync(p)) {
|
|
114
|
+
apiPath = p;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (!apiPath) {
|
|
119
|
+
console.warn('API server not found. Some features may not work.');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
console.log('Starting API server...');
|
|
123
|
+
apiProcess = (0, child_process_1.spawn)('node', [apiPath], {
|
|
124
|
+
detached: false,
|
|
125
|
+
stdio: 'pipe',
|
|
126
|
+
env: { ...process.env },
|
|
127
|
+
});
|
|
128
|
+
apiProcess.stdout?.on('data', (data) => {
|
|
129
|
+
console.log(`[API] ${data.toString().trim()}`);
|
|
130
|
+
});
|
|
131
|
+
apiProcess.stderr?.on('data', (data) => {
|
|
132
|
+
console.error(`[API Error] ${data.toString().trim()}`);
|
|
133
|
+
});
|
|
134
|
+
apiProcess.on('exit', (code) => {
|
|
135
|
+
console.log(`API server exited with code ${code}`);
|
|
136
|
+
apiProcess = null;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('Failed to start API server:', error);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
116
143
|
electron_1.app.whenReady().then(() => {
|
|
144
|
+
startAPIServer();
|
|
117
145
|
createWindow();
|
|
118
146
|
electron_1.app.on('activate', () => {
|
|
119
147
|
// On macOS, re-create window when dock icon is clicked and no windows are open
|
|
@@ -127,15 +155,29 @@ else {
|
|
|
127
155
|
});
|
|
128
156
|
}
|
|
129
157
|
electron_1.app.on('window-all-closed', () => {
|
|
158
|
+
// Kill API server
|
|
159
|
+
if (apiProcess) {
|
|
160
|
+
console.log('Stopping API server...');
|
|
161
|
+
apiProcess.kill();
|
|
162
|
+
apiProcess = null;
|
|
163
|
+
}
|
|
130
164
|
if (process.platform !== 'darwin') {
|
|
131
165
|
electron_1.app.quit();
|
|
132
166
|
}
|
|
133
167
|
});
|
|
168
|
+
electron_1.app.on('before-quit', () => {
|
|
169
|
+
// Kill API server before quitting
|
|
170
|
+
if (apiProcess) {
|
|
171
|
+
console.log('Stopping API server...');
|
|
172
|
+
apiProcess.kill();
|
|
173
|
+
apiProcess = null;
|
|
174
|
+
}
|
|
175
|
+
});
|
|
134
176
|
// IPC Handlers
|
|
135
177
|
electron_1.ipcMain.handle('get-projects', async () => {
|
|
136
178
|
try {
|
|
137
179
|
console.log('Getting projects from database...');
|
|
138
|
-
const projects = getAllProjects();
|
|
180
|
+
const projects = (0, core_1.getAllProjects)();
|
|
139
181
|
console.log(`Found ${projects.length} project(s)`);
|
|
140
182
|
return projects;
|
|
141
183
|
}
|
|
@@ -151,7 +193,7 @@ electron_1.ipcMain.handle('add-project', async (_, projectPath) => {
|
|
|
151
193
|
if (!fs.statSync(projectPath).isDirectory()) {
|
|
152
194
|
throw new Error('Path must be a directory');
|
|
153
195
|
}
|
|
154
|
-
const db = getDatabaseManager();
|
|
196
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
155
197
|
const existingProject = db.getProjectByPath(projectPath);
|
|
156
198
|
if (existingProject) {
|
|
157
199
|
throw new Error('Project already exists');
|
|
@@ -160,18 +202,18 @@ electron_1.ipcMain.handle('add-project', async (_, projectPath) => {
|
|
|
160
202
|
return db.addProject(projectName, projectPath);
|
|
161
203
|
});
|
|
162
204
|
electron_1.ipcMain.handle('remove-project', async (_, projectId) => {
|
|
163
|
-
removeProject(projectId);
|
|
205
|
+
(0, core_1.removeProject)(projectId);
|
|
164
206
|
});
|
|
165
207
|
electron_1.ipcMain.handle('scan-project', async (_, projectId) => {
|
|
166
|
-
return scanProject(projectId);
|
|
208
|
+
return (0, core_1.scanProject)(projectId);
|
|
167
209
|
});
|
|
168
210
|
electron_1.ipcMain.handle('scan-all-projects', async () => {
|
|
169
|
-
return scanAllProjects();
|
|
211
|
+
return (0, core_1.scanAllProjects)();
|
|
170
212
|
});
|
|
171
213
|
electron_1.ipcMain.handle('get-tests', async (_, projectId) => {
|
|
172
214
|
try {
|
|
173
|
-
const db = getDatabaseManager();
|
|
174
|
-
return getTestsByProject(projectId);
|
|
215
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
216
|
+
return (0, core_1.getTestsByProject)(projectId);
|
|
175
217
|
}
|
|
176
218
|
catch (error) {
|
|
177
219
|
console.error('Error getting tests:', error);
|
|
@@ -212,15 +254,15 @@ electron_1.ipcMain.handle('close-window', () => {
|
|
|
212
254
|
});
|
|
213
255
|
// Rename project
|
|
214
256
|
electron_1.ipcMain.handle('rename-project', async (_, projectId, newName) => {
|
|
215
|
-
const db = getDatabaseManager();
|
|
257
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
216
258
|
return db.updateProjectName(projectId, newName);
|
|
217
259
|
});
|
|
218
260
|
// Get project scripts
|
|
219
261
|
electron_1.ipcMain.handle('get-project-scripts', async (_, projectPath) => {
|
|
220
262
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
221
|
-
// Then try local dev path (packages/
|
|
263
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
222
264
|
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
223
|
-
const localScriptRunnerPath = path.join(__dirname, '..', '..', '
|
|
265
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
224
266
|
let scriptRunnerPath;
|
|
225
267
|
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
226
268
|
scriptRunnerPath = bundledScriptRunnerPath;
|
|
@@ -243,9 +285,9 @@ electron_1.ipcMain.handle('get-project-scripts', async (_, projectPath) => {
|
|
|
243
285
|
// Run script
|
|
244
286
|
electron_1.ipcMain.handle('run-script', async (_, projectPath, scriptName, args = [], background = false) => {
|
|
245
287
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
246
|
-
// Then try local dev path (packages/
|
|
288
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
247
289
|
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
248
|
-
const localScriptRunnerPath = path.join(__dirname, '..', '..', '
|
|
290
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
249
291
|
let scriptRunnerPath;
|
|
250
292
|
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
251
293
|
scriptRunnerPath = bundledScriptRunnerPath;
|
|
@@ -254,7 +296,7 @@ electron_1.ipcMain.handle('run-script', async (_, projectPath, scriptName, args
|
|
|
254
296
|
scriptRunnerPath = localScriptRunnerPath;
|
|
255
297
|
}
|
|
256
298
|
const { runScriptInBackground } = await Promise.resolve(`${scriptRunnerPath}`).then(s => __importStar(require(s)));
|
|
257
|
-
const db = getDatabaseManager();
|
|
299
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
258
300
|
const project = db.getProjectByPath(projectPath);
|
|
259
301
|
if (!project) {
|
|
260
302
|
throw new Error('Project not found');
|
|
@@ -266,9 +308,9 @@ electron_1.ipcMain.handle('run-script', async (_, projectPath, scriptName, args
|
|
|
266
308
|
// Scan ports
|
|
267
309
|
electron_1.ipcMain.handle('scan-project-ports', async (_, projectId) => {
|
|
268
310
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/port-scanner.js)
|
|
269
|
-
// Then try local dev path (packages/
|
|
311
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/port-scanner.js)
|
|
270
312
|
const bundledPortScannerPath = path.join(__dirname, '..', 'port-scanner.js');
|
|
271
|
-
const localPortScannerPath = path.join(__dirname, '..', '..', '
|
|
313
|
+
const localPortScannerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'port-scanner.js');
|
|
272
314
|
let portScannerPath;
|
|
273
315
|
if (fs.existsSync(bundledPortScannerPath)) {
|
|
274
316
|
portScannerPath = bundledPortScannerPath;
|
|
@@ -278,14 +320,14 @@ electron_1.ipcMain.handle('scan-project-ports', async (_, projectId) => {
|
|
|
278
320
|
}
|
|
279
321
|
const { scanProjectPorts } = await Promise.resolve(`${portScannerPath}`).then(s => __importStar(require(s)));
|
|
280
322
|
await scanProjectPorts(projectId);
|
|
281
|
-
const db = getDatabaseManager();
|
|
323
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
282
324
|
return db.getProjectPorts(projectId);
|
|
283
325
|
});
|
|
284
326
|
electron_1.ipcMain.handle('scan-all-ports', async () => {
|
|
285
327
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/port-scanner.js)
|
|
286
|
-
// Then try local dev path (packages/
|
|
328
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/port-scanner.js)
|
|
287
329
|
const bundledPortScannerPath = path.join(__dirname, '..', 'port-scanner.js');
|
|
288
|
-
const localPortScannerPath = path.join(__dirname, '..', '..', '
|
|
330
|
+
const localPortScannerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'port-scanner.js');
|
|
289
331
|
let portScannerPath;
|
|
290
332
|
if (fs.existsSync(bundledPortScannerPath)) {
|
|
291
333
|
portScannerPath = bundledPortScannerPath;
|
|
@@ -295,8 +337,8 @@ electron_1.ipcMain.handle('scan-all-ports', async () => {
|
|
|
295
337
|
}
|
|
296
338
|
const { scanAllProjectPorts } = await Promise.resolve(`${portScannerPath}`).then(s => __importStar(require(s)));
|
|
297
339
|
await scanAllProjectPorts();
|
|
298
|
-
const db = getDatabaseManager();
|
|
299
|
-
const projects = getAllProjects();
|
|
340
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
341
|
+
const projects = (0, core_1.getAllProjects)();
|
|
300
342
|
const result = {};
|
|
301
343
|
for (const project of projects) {
|
|
302
344
|
result[project.id] = db.getProjectPorts(project.id);
|
|
@@ -305,15 +347,15 @@ electron_1.ipcMain.handle('scan-all-ports', async () => {
|
|
|
305
347
|
});
|
|
306
348
|
// Get project ports
|
|
307
349
|
electron_1.ipcMain.handle('get-project-ports', async (_, projectId) => {
|
|
308
|
-
const db = getDatabaseManager();
|
|
350
|
+
const db = (0, core_1.getDatabaseManager)();
|
|
309
351
|
return db.getProjectPorts(projectId);
|
|
310
352
|
});
|
|
311
353
|
// Get running processes
|
|
312
354
|
electron_1.ipcMain.handle('get-running-processes', async () => {
|
|
313
355
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
314
|
-
// Then try local dev path (packages/
|
|
356
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
315
357
|
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
316
|
-
const localScriptRunnerPath = path.join(__dirname, '..', '..', '
|
|
358
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
317
359
|
let scriptRunnerPath;
|
|
318
360
|
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
319
361
|
scriptRunnerPath = bundledScriptRunnerPath;
|
|
@@ -327,9 +369,9 @@ electron_1.ipcMain.handle('get-running-processes', async () => {
|
|
|
327
369
|
// Stop script by PID
|
|
328
370
|
electron_1.ipcMain.handle('stop-script', async (_, pid) => {
|
|
329
371
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
330
|
-
// Then try local dev path (packages/
|
|
372
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
331
373
|
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
332
|
-
const localScriptRunnerPath = path.join(__dirname, '..', '..', '
|
|
374
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
333
375
|
let scriptRunnerPath;
|
|
334
376
|
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
335
377
|
scriptRunnerPath = bundledScriptRunnerPath;
|
|
@@ -343,9 +385,9 @@ electron_1.ipcMain.handle('stop-script', async (_, pid) => {
|
|
|
343
385
|
// Stop all processes for a project
|
|
344
386
|
electron_1.ipcMain.handle('stop-project', async (_, projectPath) => {
|
|
345
387
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
346
|
-
// Then try local dev path (packages/
|
|
388
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
347
389
|
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
348
|
-
const localScriptRunnerPath = path.join(__dirname, '..', '..', '
|
|
390
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
349
391
|
let scriptRunnerPath;
|
|
350
392
|
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
351
393
|
scriptRunnerPath = bundledScriptRunnerPath;
|
|
@@ -359,7 +401,7 @@ electron_1.ipcMain.handle('stop-project', async (_, projectPath) => {
|
|
|
359
401
|
// Open URL in browser
|
|
360
402
|
electron_1.ipcMain.handle('open-url', async (_, url) => {
|
|
361
403
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
362
|
-
// Then try local dev path (packages/
|
|
404
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/core/dist)
|
|
363
405
|
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
364
406
|
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
365
407
|
let corePath;
|
|
@@ -449,7 +491,7 @@ electron_1.ipcMain.handle('open-url', async (_, url) => {
|
|
|
449
491
|
// Open project in editor
|
|
450
492
|
electron_1.ipcMain.handle('open-in-editor', async (_, projectPath) => {
|
|
451
493
|
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
452
|
-
// Then try local dev path (packages/
|
|
494
|
+
// Then try local dev path (packages/desktop/dist/main.js -> packages/core/dist)
|
|
453
495
|
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
454
496
|
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
455
497
|
let corePath;
|
|
@@ -501,12 +543,12 @@ electron_1.ipcMain.handle('get-settings', async () => {
|
|
|
501
543
|
}
|
|
502
544
|
catch {
|
|
503
545
|
try {
|
|
504
|
-
// Try alternative path (local development: packages/
|
|
546
|
+
// Try alternative path (local development: packages/desktop/dist/main.js -> packages/cli/dist/core)
|
|
505
547
|
settingsModule = require('../../cli/dist/core');
|
|
506
548
|
}
|
|
507
549
|
catch {
|
|
508
550
|
// Fallback to package import
|
|
509
|
-
settingsModule = require('
|
|
551
|
+
settingsModule = require('projax-core');
|
|
510
552
|
}
|
|
511
553
|
}
|
|
512
554
|
const { getAppSettings } = settingsModule;
|
|
@@ -528,12 +570,12 @@ electron_1.ipcMain.handle('save-settings', async (_, settings) => {
|
|
|
528
570
|
}
|
|
529
571
|
catch {
|
|
530
572
|
try {
|
|
531
|
-
// Try alternative path (local development: packages/
|
|
573
|
+
// Try alternative path (local development: packages/desktop/dist/main.js -> packages/cli/dist/core)
|
|
532
574
|
settingsModule = require('../../cli/dist/core');
|
|
533
575
|
}
|
|
534
576
|
catch {
|
|
535
577
|
// Fallback to package import
|
|
536
|
-
settingsModule = require('
|
|
578
|
+
settingsModule = require('projax-core');
|
|
537
579
|
}
|
|
538
580
|
}
|
|
539
581
|
const { setAppSettings } = settingsModule;
|
|
@@ -36,14 +36,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.scanProjectPorts = scanProjectPorts;
|
|
37
37
|
exports.scanAllProjectPorts = scanAllProjectPorts;
|
|
38
38
|
exports.shouldRescanPorts = shouldRescanPorts;
|
|
39
|
-
const
|
|
39
|
+
const core_bridge_1 = require("./core-bridge");
|
|
40
40
|
const port_extractor_1 = require("./port-extractor");
|
|
41
41
|
const fs = __importStar(require("fs"));
|
|
42
42
|
/**
|
|
43
43
|
* Scan and index ports for a specific project
|
|
44
44
|
*/
|
|
45
45
|
async function scanProjectPorts(projectId) {
|
|
46
|
-
const db = (0,
|
|
46
|
+
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
47
47
|
const project = db.getProject(projectId);
|
|
48
48
|
if (!project) {
|
|
49
49
|
throw new Error(`Project with id ${projectId} not found`);
|
|
@@ -64,7 +64,7 @@ async function scanProjectPorts(projectId) {
|
|
|
64
64
|
* Scan ports for all projects
|
|
65
65
|
*/
|
|
66
66
|
async function scanAllProjectPorts() {
|
|
67
|
-
const db = (0,
|
|
67
|
+
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
68
68
|
const projects = db.getAllProjects();
|
|
69
69
|
for (const project of projects) {
|
|
70
70
|
try {
|
|
@@ -81,7 +81,7 @@ async function scanAllProjectPorts() {
|
|
|
81
81
|
* Returns true if ports haven't been scanned in the last 24 hours
|
|
82
82
|
*/
|
|
83
83
|
function shouldRescanPorts(projectId) {
|
|
84
|
-
const db = (0,
|
|
84
|
+
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
85
85
|
const ports = db.getProjectPorts(projectId);
|
|
86
86
|
if (ports.length === 0) {
|
|
87
87
|
return true; // No ports found, should scan
|