projax 0.1.29 → 1.0.0
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/electron/main.js +214 -0
- package/dist/electron/preload.d.ts +34 -0
- package/dist/electron/preload.js +7 -0
- package/dist/electron/renderer/assets/index-CdMlFqhB.js +42 -0
- package/dist/electron/renderer/assets/index-DohAcUCg.css +1 -0
- package/dist/electron/renderer/index.html +2 -2
- package/dist/electron/script-runner.d.ts +25 -0
- package/dist/electron/script-runner.js +156 -1
- package/dist/index.js +28 -3
- package/dist/script-runner.d.ts +25 -0
- package/dist/script-runner.js +156 -1
- package/package.json +1 -1
package/dist/electron/main.js
CHANGED
|
@@ -308,3 +308,217 @@ electron_1.ipcMain.handle('get-project-ports', async (_, projectId) => {
|
|
|
308
308
|
const db = getDatabaseManager();
|
|
309
309
|
return db.getProjectPorts(projectId);
|
|
310
310
|
});
|
|
311
|
+
// Get running processes
|
|
312
|
+
electron_1.ipcMain.handle('get-running-processes', async () => {
|
|
313
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
314
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
315
|
+
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
316
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
317
|
+
let scriptRunnerPath;
|
|
318
|
+
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
319
|
+
scriptRunnerPath = bundledScriptRunnerPath;
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
scriptRunnerPath = localScriptRunnerPath;
|
|
323
|
+
}
|
|
324
|
+
const { getRunningProcesses } = await Promise.resolve(`${scriptRunnerPath}`).then(s => __importStar(require(s)));
|
|
325
|
+
return getRunningProcesses();
|
|
326
|
+
});
|
|
327
|
+
// Stop script by PID
|
|
328
|
+
electron_1.ipcMain.handle('stop-script', async (_, pid) => {
|
|
329
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
330
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
331
|
+
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
332
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
333
|
+
let scriptRunnerPath;
|
|
334
|
+
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
335
|
+
scriptRunnerPath = bundledScriptRunnerPath;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
scriptRunnerPath = localScriptRunnerPath;
|
|
339
|
+
}
|
|
340
|
+
const { stopScript } = await Promise.resolve(`${scriptRunnerPath}`).then(s => __importStar(require(s)));
|
|
341
|
+
return await stopScript(pid);
|
|
342
|
+
});
|
|
343
|
+
// Stop all processes for a project
|
|
344
|
+
electron_1.ipcMain.handle('stop-project', async (_, projectPath) => {
|
|
345
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/script-runner.js)
|
|
346
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/cli/dist/script-runner.js)
|
|
347
|
+
const bundledScriptRunnerPath = path.join(__dirname, '..', 'script-runner.js');
|
|
348
|
+
const localScriptRunnerPath = path.join(__dirname, '..', '..', '..', 'cli', 'dist', 'script-runner.js');
|
|
349
|
+
let scriptRunnerPath;
|
|
350
|
+
if (fs.existsSync(bundledScriptRunnerPath)) {
|
|
351
|
+
scriptRunnerPath = bundledScriptRunnerPath;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
scriptRunnerPath = localScriptRunnerPath;
|
|
355
|
+
}
|
|
356
|
+
const { stopProjectProcesses } = await Promise.resolve(`${scriptRunnerPath}`).then(s => __importStar(require(s)));
|
|
357
|
+
return await stopProjectProcesses(projectPath);
|
|
358
|
+
});
|
|
359
|
+
// Open URL in browser
|
|
360
|
+
electron_1.ipcMain.handle('open-url', async (_, url) => {
|
|
361
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
362
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/core/dist)
|
|
363
|
+
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
364
|
+
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
365
|
+
let corePath;
|
|
366
|
+
if (fs.existsSync(bundledCorePath)) {
|
|
367
|
+
corePath = bundledCorePath;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
corePath = localCorePath;
|
|
371
|
+
}
|
|
372
|
+
const { getBrowserSettings } = await Promise.resolve(`${corePath}`).then(s => __importStar(require(s)));
|
|
373
|
+
const browserSettings = getBrowserSettings();
|
|
374
|
+
let command;
|
|
375
|
+
let args = [url];
|
|
376
|
+
if (browserSettings.type === 'custom' && browserSettings.customPath) {
|
|
377
|
+
command = browserSettings.customPath;
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// Platform-specific browser commands
|
|
381
|
+
if (process.platform === 'darwin') {
|
|
382
|
+
// macOS
|
|
383
|
+
switch (browserSettings.type) {
|
|
384
|
+
case 'chrome':
|
|
385
|
+
command = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
|
|
386
|
+
break;
|
|
387
|
+
case 'firefox':
|
|
388
|
+
command = '/Applications/Firefox.app/Contents/MacOS/firefox';
|
|
389
|
+
break;
|
|
390
|
+
case 'safari':
|
|
391
|
+
command = 'open';
|
|
392
|
+
args = ['-a', 'Safari', url];
|
|
393
|
+
break;
|
|
394
|
+
case 'edge':
|
|
395
|
+
command = '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge';
|
|
396
|
+
break;
|
|
397
|
+
default:
|
|
398
|
+
command = 'open';
|
|
399
|
+
args = [url];
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else if (process.platform === 'win32') {
|
|
403
|
+
// Windows
|
|
404
|
+
switch (browserSettings.type) {
|
|
405
|
+
case 'chrome':
|
|
406
|
+
command = 'chrome';
|
|
407
|
+
break;
|
|
408
|
+
case 'firefox':
|
|
409
|
+
command = 'firefox';
|
|
410
|
+
break;
|
|
411
|
+
case 'edge':
|
|
412
|
+
command = 'msedge';
|
|
413
|
+
break;
|
|
414
|
+
case 'safari':
|
|
415
|
+
command = 'safari';
|
|
416
|
+
break;
|
|
417
|
+
default:
|
|
418
|
+
command = 'start';
|
|
419
|
+
args = [url];
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
// Linux
|
|
424
|
+
switch (browserSettings.type) {
|
|
425
|
+
case 'chrome':
|
|
426
|
+
command = 'google-chrome';
|
|
427
|
+
break;
|
|
428
|
+
case 'firefox':
|
|
429
|
+
command = 'firefox';
|
|
430
|
+
break;
|
|
431
|
+
case 'edge':
|
|
432
|
+
command = 'microsoft-edge';
|
|
433
|
+
break;
|
|
434
|
+
case 'safari':
|
|
435
|
+
command = 'safari';
|
|
436
|
+
break;
|
|
437
|
+
default:
|
|
438
|
+
command = 'xdg-open';
|
|
439
|
+
args = [url];
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
const { spawn } = require('child_process');
|
|
444
|
+
spawn(command, args, {
|
|
445
|
+
detached: true,
|
|
446
|
+
stdio: 'ignore',
|
|
447
|
+
}).unref();
|
|
448
|
+
});
|
|
449
|
+
// Open project in editor
|
|
450
|
+
electron_1.ipcMain.handle('open-in-editor', async (_, projectPath) => {
|
|
451
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
452
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/core/dist)
|
|
453
|
+
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
454
|
+
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
455
|
+
let corePath;
|
|
456
|
+
if (fs.existsSync(bundledCorePath)) {
|
|
457
|
+
corePath = bundledCorePath;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
corePath = localCorePath;
|
|
461
|
+
}
|
|
462
|
+
const { getEditorSettings } = await Promise.resolve(`${corePath}`).then(s => __importStar(require(s)));
|
|
463
|
+
const editorSettings = getEditorSettings();
|
|
464
|
+
let command;
|
|
465
|
+
let args = [projectPath];
|
|
466
|
+
if (editorSettings.type === 'custom' && editorSettings.customPath) {
|
|
467
|
+
command = editorSettings.customPath;
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
switch (editorSettings.type) {
|
|
471
|
+
case 'vscode':
|
|
472
|
+
command = 'code';
|
|
473
|
+
break;
|
|
474
|
+
case 'cursor':
|
|
475
|
+
command = 'cursor';
|
|
476
|
+
break;
|
|
477
|
+
case 'windsurf':
|
|
478
|
+
command = 'windsurf';
|
|
479
|
+
break;
|
|
480
|
+
case 'zed':
|
|
481
|
+
command = 'zed';
|
|
482
|
+
break;
|
|
483
|
+
default:
|
|
484
|
+
command = 'code'; // Default to VS Code
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
const { spawn } = require('child_process');
|
|
488
|
+
spawn(command, args, {
|
|
489
|
+
detached: true,
|
|
490
|
+
stdio: 'ignore',
|
|
491
|
+
}).unref();
|
|
492
|
+
});
|
|
493
|
+
// Get settings
|
|
494
|
+
electron_1.ipcMain.handle('get-settings', async () => {
|
|
495
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
496
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/core/dist)
|
|
497
|
+
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
498
|
+
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
499
|
+
let corePath;
|
|
500
|
+
if (fs.existsSync(bundledCorePath)) {
|
|
501
|
+
corePath = bundledCorePath;
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
corePath = localCorePath;
|
|
505
|
+
}
|
|
506
|
+
const { getAppSettings } = await Promise.resolve(`${corePath}`).then(s => __importStar(require(s)));
|
|
507
|
+
return getAppSettings();
|
|
508
|
+
});
|
|
509
|
+
// Save settings
|
|
510
|
+
electron_1.ipcMain.handle('save-settings', async (_, settings) => {
|
|
511
|
+
// Try bundled path first (when bundled in CLI: dist/electron/main.js -> dist/core)
|
|
512
|
+
// Then try local dev path (packages/electron/dist/main.js -> packages/core/dist)
|
|
513
|
+
const bundledCorePath = path.join(__dirname, '..', 'core');
|
|
514
|
+
const localCorePath = path.join(__dirname, '..', '..', '..', 'core', 'dist');
|
|
515
|
+
let corePath;
|
|
516
|
+
if (fs.existsSync(bundledCorePath)) {
|
|
517
|
+
corePath = bundledCorePath;
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
corePath = localCorePath;
|
|
521
|
+
}
|
|
522
|
+
const { setAppSettings } = await Promise.resolve(`${corePath}`).then(s => __importStar(require(s)));
|
|
523
|
+
setAppSettings(settings);
|
|
524
|
+
});
|
|
@@ -46,4 +46,38 @@ export interface ElectronAPI {
|
|
|
46
46
|
scanProjectPorts: (projectId: number) => Promise<ProjectPort[]>;
|
|
47
47
|
scanAllPorts: () => Promise<Record<number, ProjectPort[]>>;
|
|
48
48
|
getProjectPorts: (projectId: number) => Promise<ProjectPort[]>;
|
|
49
|
+
getRunningProcesses: () => Promise<Array<{
|
|
50
|
+
pid: number;
|
|
51
|
+
projectPath: string;
|
|
52
|
+
projectName: string;
|
|
53
|
+
scriptName: string;
|
|
54
|
+
command: string;
|
|
55
|
+
startedAt: number;
|
|
56
|
+
logFile: string;
|
|
57
|
+
detectedUrls?: string[];
|
|
58
|
+
}>>;
|
|
59
|
+
stopScript: (pid: number) => Promise<boolean>;
|
|
60
|
+
stopProject: (projectPath: string) => Promise<number>;
|
|
61
|
+
openUrl: (url: string) => Promise<void>;
|
|
62
|
+
openInEditor: (projectPath: string) => Promise<void>;
|
|
63
|
+
getSettings: () => Promise<{
|
|
64
|
+
editor: {
|
|
65
|
+
type: string;
|
|
66
|
+
customPath?: string;
|
|
67
|
+
};
|
|
68
|
+
browser: {
|
|
69
|
+
type: string;
|
|
70
|
+
customPath?: string;
|
|
71
|
+
};
|
|
72
|
+
}>;
|
|
73
|
+
saveSettings: (settings: {
|
|
74
|
+
editor: {
|
|
75
|
+
type: string;
|
|
76
|
+
customPath?: string;
|
|
77
|
+
};
|
|
78
|
+
browser: {
|
|
79
|
+
type: string;
|
|
80
|
+
customPath?: string;
|
|
81
|
+
};
|
|
82
|
+
}) => Promise<void>;
|
|
49
83
|
}
|
package/dist/electron/preload.js
CHANGED
|
@@ -18,4 +18,11 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
18
18
|
scanProjectPorts: (projectId) => electron_1.ipcRenderer.invoke('scan-project-ports', projectId),
|
|
19
19
|
scanAllPorts: () => electron_1.ipcRenderer.invoke('scan-all-ports'),
|
|
20
20
|
getProjectPorts: (projectId) => electron_1.ipcRenderer.invoke('get-project-ports', projectId),
|
|
21
|
+
getRunningProcesses: () => electron_1.ipcRenderer.invoke('get-running-processes'),
|
|
22
|
+
stopScript: (pid) => electron_1.ipcRenderer.invoke('stop-script', pid),
|
|
23
|
+
stopProject: (projectPath) => electron_1.ipcRenderer.invoke('stop-project', projectPath),
|
|
24
|
+
openUrl: (url) => electron_1.ipcRenderer.invoke('open-url', url),
|
|
25
|
+
openInEditor: (projectPath) => electron_1.ipcRenderer.invoke('open-in-editor', projectPath),
|
|
26
|
+
getSettings: () => electron_1.ipcRenderer.invoke('get-settings'),
|
|
27
|
+
saveSettings: (settings) => electron_1.ipcRenderer.invoke('save-settings', settings),
|
|
21
28
|
});
|