projax 3.3.39 → 3.3.51

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 (115) hide show
  1. package/README.md +73 -0
  2. package/dist/__tests__/port-scanner.test.js +7 -17
  3. package/dist/__tests__/script-runner.test.js +7 -17
  4. package/dist/api/__tests__/database.test.js +7 -17
  5. package/dist/api/__tests__/database.test.js.map +1 -1
  6. package/dist/api/__tests__/routes.test.js +7 -17
  7. package/dist/api/__tests__/routes.test.js.map +1 -1
  8. package/dist/api/__tests__/scanner.test.js +7 -17
  9. package/dist/api/__tests__/scanner.test.js.map +1 -1
  10. package/dist/api/database.d.ts +20 -1
  11. package/dist/api/database.d.ts.map +1 -1
  12. package/dist/api/database.js +192 -21
  13. package/dist/api/database.js.map +1 -1
  14. package/dist/api/index.d.ts.map +1 -1
  15. package/dist/api/index.js +17 -19
  16. package/dist/api/index.js.map +1 -1
  17. package/dist/api/migrate.js +2 -1
  18. package/dist/api/migrate.js.map +1 -1
  19. package/dist/api/package.json +3 -2
  20. package/dist/api/routes/backup.d.ts +3 -0
  21. package/dist/api/routes/backup.d.ts.map +1 -0
  22. package/dist/api/routes/backup.js +51 -0
  23. package/dist/api/routes/backup.js.map +1 -0
  24. package/dist/api/routes/index.d.ts.map +1 -1
  25. package/dist/api/routes/index.js +6 -0
  26. package/dist/api/routes/index.js.map +1 -1
  27. package/dist/api/routes/mcp.d.ts +3 -0
  28. package/dist/api/routes/mcp.d.ts.map +1 -0
  29. package/dist/api/routes/mcp.js +147 -0
  30. package/dist/api/routes/mcp.js.map +1 -0
  31. package/dist/api/routes/projects.d.ts.map +1 -1
  32. package/dist/api/routes/projects.js +27 -17
  33. package/dist/api/routes/projects.js.map +1 -1
  34. package/dist/api/routes/settings.d.ts.map +1 -1
  35. package/dist/api/routes/settings.js +119 -11
  36. package/dist/api/routes/settings.js.map +1 -1
  37. package/dist/api/routes/workspaces.d.ts +3 -0
  38. package/dist/api/routes/workspaces.d.ts.map +1 -0
  39. package/dist/api/routes/workspaces.js +504 -0
  40. package/dist/api/routes/workspaces.js.map +1 -0
  41. package/dist/api/services/scanner.js +10 -19
  42. package/dist/api/services/scanner.js.map +1 -1
  43. package/dist/api/services/test-parser.js +3 -2
  44. package/dist/api/services/test-parser.js.map +1 -1
  45. package/dist/api/types.d.ts +31 -0
  46. package/dist/api/types.d.ts.map +1 -1
  47. package/dist/core/__tests__/database.test.js +7 -17
  48. package/dist/core/__tests__/detector.test.js +7 -17
  49. package/dist/core/__tests__/index.test.js +7 -17
  50. package/dist/core/__tests__/scanner.test.js +7 -17
  51. package/dist/core/__tests__/settings.test.js +7 -17
  52. package/dist/core/backup-utils.d.ts +17 -0
  53. package/dist/core/backup-utils.js +157 -0
  54. package/dist/core/database.d.ts +1 -0
  55. package/dist/core/database.js +9 -18
  56. package/dist/core/detector.js +11 -21
  57. package/dist/core/git-utils.d.ts +12 -0
  58. package/dist/core/git-utils.js +87 -0
  59. package/dist/core/index.d.ts +3 -0
  60. package/dist/core/index.js +8 -5
  61. package/dist/core/scanner.js +3 -2
  62. package/dist/core/settings.d.ts +85 -0
  63. package/dist/core/settings.js +306 -9
  64. package/dist/core/workspace-utils.d.ts +37 -0
  65. package/dist/core/workspace-utils.js +143 -0
  66. package/dist/core-bridge.js +7 -17
  67. package/dist/electron/core/__tests__/database.test.js +7 -17
  68. package/dist/electron/core/__tests__/detector.test.js +7 -17
  69. package/dist/electron/core/__tests__/index.test.js +7 -17
  70. package/dist/electron/core/__tests__/scanner.test.js +7 -17
  71. package/dist/electron/core/__tests__/settings.test.js +7 -17
  72. package/dist/electron/core/backup-utils.d.ts +17 -0
  73. package/dist/electron/core/backup-utils.js +157 -0
  74. package/dist/electron/core/database.d.ts +1 -0
  75. package/dist/electron/core/database.js +9 -18
  76. package/dist/electron/core/detector.js +11 -21
  77. package/dist/electron/core/git-utils.d.ts +12 -0
  78. package/dist/electron/core/git-utils.js +87 -0
  79. package/dist/electron/core/index.d.ts +3 -0
  80. package/dist/electron/core/index.js +8 -5
  81. package/dist/electron/core/scanner.js +3 -2
  82. package/dist/electron/core/settings.d.ts +85 -0
  83. package/dist/electron/core/settings.js +306 -9
  84. package/dist/electron/core/workspace-utils.d.ts +37 -0
  85. package/dist/electron/core/workspace-utils.js +143 -0
  86. package/dist/electron/core.js +7 -17
  87. package/dist/electron/main.js +663 -33
  88. package/dist/electron/port-extractor.js +9 -18
  89. package/dist/electron/port-scanner.js +11 -20
  90. package/dist/electron/port-utils.js +5 -4
  91. package/dist/electron/preload.d.ts +27 -2
  92. package/dist/electron/preload.js +18 -2
  93. package/dist/electron/renderer/assets/index-B-etDnj2.js +64 -0
  94. package/dist/electron/renderer/assets/index-Bx18Cyic.js +64 -0
  95. package/dist/electron/renderer/assets/index-C8f5yNYe.js +64 -0
  96. package/dist/electron/renderer/assets/index-CIZ3Wl6c.css +1 -0
  97. package/dist/electron/renderer/assets/index-CJbsU9y8.css +1 -0
  98. package/dist/electron/renderer/assets/index-CopVNRnR.js +64 -0
  99. package/dist/electron/renderer/assets/index-DUvcepWm.js +64 -0
  100. package/dist/electron/renderer/assets/index-DWe2TQFv.css +1 -0
  101. package/dist/electron/renderer/assets/index-DZzB20Xf.css +1 -0
  102. package/dist/electron/renderer/assets/index-DknLdADV.js +63 -0
  103. package/dist/electron/renderer/assets/index-DocuD8Lk.js +64 -0
  104. package/dist/electron/renderer/assets/index-DyU-xfd8.css +1 -0
  105. package/dist/electron/renderer/assets/index-GwC-JVUy.css +1 -0
  106. package/dist/electron/renderer/assets/index-fehviker.js +63 -0
  107. package/dist/electron/renderer/index.html +2 -2
  108. package/dist/electron/script-runner.js +20 -29
  109. package/dist/index.js +395 -21
  110. package/dist/port-extractor.js +9 -18
  111. package/dist/port-scanner.js +11 -20
  112. package/dist/port-utils.js +5 -4
  113. package/dist/script-runner.js +20 -29
  114. package/dist/test-parser.js +3 -2
  115. package/package.json +3 -2
@@ -15,25 +15,15 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
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
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.extractPortsFromProject = extractPortsFromProject;
26
+ exports.extractPortsFromProject = void 0;
37
27
  const fs = __importStar(require("fs"));
38
28
  const path = __importStar(require("path"));
39
29
  /**
@@ -66,6 +56,7 @@ async function extractPortsFromProject(projectPath) {
66
56
  const uniquePorts = Array.from(new Map(ports.map(p => [`${p.port}-${p.script || ''}`, p])).values());
67
57
  return uniquePorts;
68
58
  }
59
+ exports.extractPortsFromProject = extractPortsFromProject;
69
60
  /**
70
61
  * Extract ports from package.json scripts
71
62
  */
@@ -15,27 +15,15 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
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
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.scanProjectPorts = scanProjectPorts;
37
- exports.scanAllProjectPorts = scanAllProjectPorts;
38
- exports.shouldRescanPorts = shouldRescanPorts;
26
+ exports.shouldRescanPorts = exports.scanAllProjectPorts = exports.scanProjectPorts = void 0;
39
27
  const core_bridge_1 = require("./core-bridge");
40
28
  const port_extractor_1 = require("./port-extractor");
41
29
  const fs = __importStar(require("fs"));
@@ -60,6 +48,7 @@ async function scanProjectPorts(projectId) {
60
48
  db.addProjectPort(projectId, portInfo.port, portInfo.source, portInfo.script);
61
49
  }
62
50
  }
51
+ exports.scanProjectPorts = scanProjectPorts;
63
52
  /**
64
53
  * Scan ports for all projects
65
54
  */
@@ -76,6 +65,7 @@ async function scanAllProjectPorts() {
76
65
  }
77
66
  }
78
67
  }
68
+ exports.scanAllProjectPorts = scanAllProjectPorts;
79
69
  /**
80
70
  * Check if ports need to be rescanned (stale check)
81
71
  * Returns true if ports haven't been scanned in the last 24 hours
@@ -91,3 +81,4 @@ function shouldRescanPorts(projectId) {
91
81
  const needsRescan = ports.some(port => (port.last_detected || 0) <= twentyFourHoursAgo);
92
82
  return needsRescan;
93
83
  }
84
+ exports.shouldRescanPorts = shouldRescanPorts;
@@ -1,9 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectPortInUse = detectPortInUse;
4
- exports.getProcessOnPort = getProcessOnPort;
5
- exports.killProcessOnPort = killProcessOnPort;
6
- exports.extractPortFromError = extractPortFromError;
3
+ exports.extractPortFromError = exports.killProcessOnPort = exports.getProcessOnPort = exports.detectPortInUse = void 0;
7
4
  const child_process_1 = require("child_process");
8
5
  const util_1 = require("util");
9
6
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
@@ -43,6 +40,7 @@ async function detectPortInUse(port) {
43
40
  return false;
44
41
  }
45
42
  }
43
+ exports.detectPortInUse = detectPortInUse;
46
44
  /**
47
45
  * Get process information for a port (cross-platform)
48
46
  */
@@ -104,6 +102,7 @@ async function getProcessOnPort(port) {
104
102
  return null;
105
103
  }
106
104
  }
105
+ exports.getProcessOnPort = getProcessOnPort;
107
106
  /**
108
107
  * Kill process(es) using a port (cross-platform)
109
108
  */
@@ -169,6 +168,7 @@ async function killProcessOnPort(port) {
169
168
  return false;
170
169
  }
171
170
  }
171
+ exports.killProcessOnPort = killProcessOnPort;
172
172
  /**
173
173
  * Extract port number from error messages
174
174
  * Handles common port conflict error patterns
@@ -198,3 +198,4 @@ function extractPortFromError(error) {
198
198
  }
199
199
  return null;
200
200
  }
201
+ exports.extractPortFromError = extractPortFromError;
@@ -46,7 +46,7 @@ export interface ElectronAPI {
46
46
  updateProject: (projectId: number, updates: {
47
47
  description?: string | null;
48
48
  }) => Promise<Project>;
49
- getProjectScripts: (projectPath: string) => Promise<ProjectScripts>;
49
+ getProjectScripts: (projectPath: string, projectId?: number) => Promise<ProjectScripts>;
50
50
  runScript: (projectPath: string, scriptName: string, args?: string[], background?: boolean) => Promise<{
51
51
  success: boolean;
52
52
  background: boolean;
@@ -68,8 +68,9 @@ export interface ElectronAPI {
68
68
  stopScript: (pid: number) => Promise<boolean>;
69
69
  stopProject: (projectPath: string) => Promise<number>;
70
70
  openUrl: (url: string) => Promise<void>;
71
- openInEditor: (projectPath: string) => Promise<void>;
71
+ openInEditor: (projectPath: string, projectId?: number) => Promise<void>;
72
72
  openInFiles: (projectPath: string) => Promise<void>;
73
+ openFilePath: (filePath: string) => Promise<void>;
73
74
  getSettings: () => Promise<{
74
75
  editor: {
75
76
  type: string;
@@ -79,6 +80,10 @@ export interface ElectronAPI {
79
80
  type: string;
80
81
  customPath?: string;
81
82
  };
83
+ display?: any;
84
+ appearance?: any;
85
+ behavior?: any;
86
+ advanced?: any;
82
87
  }>;
83
88
  saveSettings: (settings: {
84
89
  editor: {
@@ -89,6 +94,10 @@ export interface ElectronAPI {
89
94
  type: string;
90
95
  customPath?: string;
91
96
  };
97
+ display?: any;
98
+ appearance?: any;
99
+ behavior?: any;
100
+ advanced?: any;
92
101
  }) => Promise<void>;
93
102
  openExternal: (url: string) => void;
94
103
  watchProcessOutput: (pid: number) => Promise<{
@@ -115,4 +124,20 @@ export interface ElectronAPI {
115
124
  }) => void) => void;
116
125
  getAppVersion: () => Promise<string>;
117
126
  getLatestTestResult: (projectId: number) => Promise<any | null>;
127
+ getWorkspaces: () => Promise<any[]>;
128
+ addWorkspace: (workspace: any) => Promise<any>;
129
+ removeWorkspace: (workspaceId: number) => Promise<void>;
130
+ createBackup: (outputPath: string) => Promise<{
131
+ success: boolean;
132
+ backup_path: string;
133
+ }>;
134
+ restoreBackup: (backupPath: string) => Promise<{
135
+ success: boolean;
136
+ }>;
137
+ showSaveDialog: (options: any) => Promise<any>;
138
+ showOpenDialog: (options: any) => Promise<any>;
139
+ selectFile: (options: any) => Promise<string | null>;
140
+ openWorkspace: (workspaceId: number) => Promise<void>;
141
+ onMenuAction: (callback: (event: any, action: string, ...args: any[]) => void) => void;
142
+ removeMenuActionListener: (callback: (event: any, action: string, ...args: any[]) => void) => void;
118
143
  }
@@ -14,7 +14,7 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
14
14
  closeWindow: () => electron_1.ipcRenderer.invoke('close-window'),
15
15
  renameProject: (projectId, newName) => electron_1.ipcRenderer.invoke('rename-project', projectId, newName),
16
16
  updateProject: (projectId, updates) => electron_1.ipcRenderer.invoke('update-project', projectId, updates),
17
- getProjectScripts: (projectPath) => electron_1.ipcRenderer.invoke('get-project-scripts', projectPath),
17
+ getProjectScripts: (projectPath, projectId) => electron_1.ipcRenderer.invoke('get-project-scripts', projectPath, projectId),
18
18
  runScript: (projectPath, scriptName, args, background) => electron_1.ipcRenderer.invoke('run-script', projectPath, scriptName, args, background),
19
19
  scanProjectPorts: (projectId) => electron_1.ipcRenderer.invoke('scan-project-ports', projectId),
20
20
  scanAllPorts: () => electron_1.ipcRenderer.invoke('scan-all-ports'),
@@ -23,8 +23,9 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
23
23
  stopScript: (pid) => electron_1.ipcRenderer.invoke('stop-script', pid),
24
24
  stopProject: (projectPath) => electron_1.ipcRenderer.invoke('stop-project', projectPath),
25
25
  openUrl: (url) => electron_1.ipcRenderer.invoke('open-url', url),
26
- openInEditor: (projectPath) => electron_1.ipcRenderer.invoke('open-in-editor', projectPath),
26
+ openInEditor: (projectPath, projectId) => electron_1.ipcRenderer.invoke('open-in-editor', projectPath, projectId),
27
27
  openInFiles: (projectPath) => electron_1.ipcRenderer.invoke('open-in-files', projectPath),
28
+ openFilePath: (filePath) => electron_1.ipcRenderer.invoke('open-file-path', filePath),
28
29
  openExternal: (url) => electron_1.ipcRenderer.send('open-external-url', url),
29
30
  getSettings: () => electron_1.ipcRenderer.invoke('get-settings'),
30
31
  saveSettings: (settings) => electron_1.ipcRenderer.invoke('save-settings', settings),
@@ -36,4 +37,19 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
36
37
  removeProcessExitListener: (callback) => electron_1.ipcRenderer.removeListener('process-exit', callback),
37
38
  getAppVersion: () => electron_1.ipcRenderer.invoke('get-app-version'),
38
39
  getLatestTestResult: (projectId) => electron_1.ipcRenderer.invoke('get-latest-test-result', projectId),
40
+ getWorkspaces: () => electron_1.ipcRenderer.invoke('get-workspaces'),
41
+ addWorkspace: (workspace) => electron_1.ipcRenderer.invoke('add-workspace', workspace),
42
+ removeWorkspace: (workspaceId) => electron_1.ipcRenderer.invoke('remove-workspace', workspaceId),
43
+ createBackup: (outputPath) => electron_1.ipcRenderer.invoke('create-backup', outputPath),
44
+ restoreBackup: (backupPath) => electron_1.ipcRenderer.invoke('restore-backup', backupPath),
45
+ showSaveDialog: (options) => electron_1.ipcRenderer.invoke('show-save-dialog', options),
46
+ showOpenDialog: (options) => electron_1.ipcRenderer.invoke('show-open-dialog', options),
47
+ selectFile: (options) => electron_1.ipcRenderer.invoke('select-file', options),
48
+ openWorkspace: (workspaceId) => electron_1.ipcRenderer.invoke('open-workspace', workspaceId),
49
+ onMenuAction: (callback) => {
50
+ electron_1.ipcRenderer.on('menu-action', callback);
51
+ },
52
+ removeMenuActionListener: (callback) => {
53
+ electron_1.ipcRenderer.removeListener('menu-action', callback);
54
+ },
39
55
  });