projax 3.3.40 → 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
@@ -0,0 +1,504 @@
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 (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
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const express_1 = require("express");
27
+ const database_1 = require("../database");
28
+ const projax_core_1 = require("projax-core");
29
+ const fs = __importStar(require("fs"));
30
+ const path = __importStar(require("path"));
31
+ const os = __importStar(require("os"));
32
+ const router = (0, express_1.Router)();
33
+ const db = (0, database_1.getDatabase)();
34
+ // Helper function to normalize paths (matches database normalization)
35
+ function normalizePath(p) {
36
+ return path.normalize(path.resolve(p)).replace(/[/\\]+$/, '');
37
+ }
38
+ // Helper function to get PROJAX workspaces directory
39
+ function getProjaxWorkspacesDir() {
40
+ const projaxDir = path.join(os.homedir(), '.projax', 'workspaces');
41
+ if (!fs.existsSync(projaxDir)) {
42
+ fs.mkdirSync(projaxDir, { recursive: true });
43
+ }
44
+ return projaxDir;
45
+ }
46
+ // Helper function to generate workspace file path in PROJAX directory
47
+ function getProjaxWorkspaceFilePath(workspaceId, workspaceName) {
48
+ const workspacesDir = getProjaxWorkspacesDir();
49
+ const safeName = workspaceName.replace(/[^a-z0-9]/gi, '-').toLowerCase();
50
+ return path.join(workspacesDir, `workspace-${workspaceId}-${safeName}.code-workspace`);
51
+ }
52
+ // Helper function to ensure workspace file exists and is up-to-date
53
+ function ensureWorkspaceFile(workspaceId) {
54
+ const workspace = db.getWorkspace(workspaceId);
55
+ if (!workspace) {
56
+ throw new Error('Workspace not found');
57
+ }
58
+ // Check if workspace file path is in PROJAX directory
59
+ const projaxWorkspacesDir = getProjaxWorkspacesDir();
60
+ const isProjaxManaged = workspace.workspace_file_path.startsWith(projaxWorkspacesDir);
61
+ // If file exists and is not PROJAX-managed, use it
62
+ if (!isProjaxManaged && fs.existsSync(workspace.workspace_file_path)) {
63
+ return workspace.workspace_file_path;
64
+ }
65
+ // Generate/update PROJAX-managed workspace file
66
+ const workspaceFilePath = isProjaxManaged
67
+ ? workspace.workspace_file_path
68
+ : getProjaxWorkspaceFilePath(workspaceId, workspace.name);
69
+ // Get all projects in workspace
70
+ const workspaceProjects = db.getWorkspaceProjects(workspaceId);
71
+ const projectPaths = workspaceProjects.map(wp => wp.project_path);
72
+ // Generate workspace file
73
+ (0, projax_core_1.generateWorkspaceFile)(workspace.name, projectPaths, workspaceFilePath);
74
+ // Update workspace file path if it changed
75
+ if (workspace.workspace_file_path !== workspaceFilePath) {
76
+ db.updateWorkspace(workspaceId, { workspace_file_path: workspaceFilePath });
77
+ }
78
+ return workspaceFilePath;
79
+ }
80
+ // List all workspaces
81
+ router.get('/', (req, res) => {
82
+ try {
83
+ const workspaces = db.getAllWorkspaces();
84
+ res.json(workspaces);
85
+ }
86
+ catch (error) {
87
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
88
+ }
89
+ });
90
+ // Get workspace by ID
91
+ router.get('/:id', (req, res) => {
92
+ try {
93
+ const id = parseInt(req.params.id, 10);
94
+ if (isNaN(id)) {
95
+ return res.status(400).json({ error: 'Invalid workspace ID' });
96
+ }
97
+ const workspace = db.getWorkspace(id);
98
+ if (!workspace) {
99
+ return res.status(404).json({ error: 'Workspace not found' });
100
+ }
101
+ res.json(workspace);
102
+ }
103
+ catch (error) {
104
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
105
+ }
106
+ });
107
+ // Create new workspace
108
+ router.post('/', (req, res) => {
109
+ try {
110
+ const { name, workspace_file_path, description, tags } = req.body;
111
+ if (!name || !workspace_file_path) {
112
+ return res.status(400).json({ error: 'Name and workspace_file_path are required' });
113
+ }
114
+ // Validate workspace file path exists
115
+ if (!fs.existsSync(workspace_file_path)) {
116
+ return res.status(400).json({ error: 'Workspace file does not exist' });
117
+ }
118
+ if (!(0, projax_core_1.validateWorkspacePath)(workspace_file_path)) {
119
+ return res.status(400).json({ error: 'Invalid workspace file format' });
120
+ }
121
+ const workspace = db.addWorkspace(name, workspace_file_path, description || null, tags || []);
122
+ res.status(201).json(workspace);
123
+ }
124
+ catch (error) {
125
+ if (error instanceof Error && error.message.includes('already exists')) {
126
+ return res.status(409).json({ error: error.message });
127
+ }
128
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
129
+ }
130
+ });
131
+ // Update workspace
132
+ router.put('/:id', (req, res) => {
133
+ try {
134
+ const id = parseInt(req.params.id, 10);
135
+ if (isNaN(id)) {
136
+ return res.status(400).json({ error: 'Invalid workspace ID' });
137
+ }
138
+ const { name, description, tags, workspace_file_path, last_opened } = req.body;
139
+ const updates = {};
140
+ if (name !== undefined)
141
+ updates.name = name;
142
+ if (description !== undefined)
143
+ updates.description = description;
144
+ if (tags !== undefined)
145
+ updates.tags = tags;
146
+ if (last_opened !== undefined)
147
+ updates.last_opened = last_opened;
148
+ if (workspace_file_path !== undefined) {
149
+ // Only validate if it's not a PROJAX-managed workspace
150
+ const projaxWorkspacesDir = getProjaxWorkspacesDir();
151
+ if (!workspace_file_path.startsWith(projaxWorkspacesDir)) {
152
+ if (!fs.existsSync(workspace_file_path)) {
153
+ return res.status(400).json({ error: 'Workspace file does not exist' });
154
+ }
155
+ if (!(0, projax_core_1.validateWorkspacePath)(workspace_file_path)) {
156
+ return res.status(400).json({ error: 'Invalid workspace file format' });
157
+ }
158
+ }
159
+ updates.workspace_file_path = workspace_file_path;
160
+ }
161
+ const workspace = db.updateWorkspace(id, updates);
162
+ // Regenerate workspace file if projects changed or name changed
163
+ if (name !== undefined || description !== undefined || tags !== undefined) {
164
+ try {
165
+ ensureWorkspaceFile(id);
166
+ }
167
+ catch (error) {
168
+ console.warn('Failed to regenerate workspace file:', error);
169
+ }
170
+ }
171
+ res.json(workspace);
172
+ }
173
+ catch (error) {
174
+ if (error instanceof Error && error.message.includes('not found')) {
175
+ return res.status(404).json({ error: error.message });
176
+ }
177
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
178
+ }
179
+ });
180
+ // Delete workspace
181
+ router.delete('/:id', (req, res) => {
182
+ try {
183
+ const id = parseInt(req.params.id, 10);
184
+ if (isNaN(id)) {
185
+ return res.status(400).json({ error: 'Invalid workspace ID' });
186
+ }
187
+ db.removeWorkspace(id);
188
+ res.status(204).send();
189
+ }
190
+ catch (error) {
191
+ if (error instanceof Error && error.message.includes('not found')) {
192
+ return res.status(404).json({ error: error.message });
193
+ }
194
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
195
+ }
196
+ });
197
+ // Get projects in workspace
198
+ router.get('/:id/projects', (req, res) => {
199
+ try {
200
+ const id = parseInt(req.params.id, 10);
201
+ if (isNaN(id)) {
202
+ return res.status(400).json({ error: 'Invalid workspace ID' });
203
+ }
204
+ const workspace = db.getWorkspace(id);
205
+ if (!workspace) {
206
+ return res.status(404).json({ error: 'Workspace not found' });
207
+ }
208
+ const workspaceProjects = db.getWorkspaceProjects(id);
209
+ res.json(workspaceProjects);
210
+ }
211
+ catch (error) {
212
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
213
+ }
214
+ });
215
+ // Add project to workspace
216
+ router.post('/:id/projects', (req, res) => {
217
+ try {
218
+ const id = parseInt(req.params.id, 10);
219
+ if (isNaN(id)) {
220
+ return res.status(400).json({ error: 'Invalid workspace ID' });
221
+ }
222
+ const { project_path } = req.body;
223
+ if (!project_path) {
224
+ return res.status(400).json({ error: 'project_path is required' });
225
+ }
226
+ // Resolve to absolute path
227
+ const absolutePath = path.isAbsolute(project_path)
228
+ ? project_path
229
+ : path.resolve(process.cwd(), project_path);
230
+ if (!fs.existsSync(absolutePath)) {
231
+ return res.status(400).json({ error: 'Project path does not exist' });
232
+ }
233
+ const workspaceProject = db.addProjectToWorkspace(id, absolutePath);
234
+ // Regenerate workspace file to include new project
235
+ try {
236
+ ensureWorkspaceFile(id);
237
+ }
238
+ catch (error) {
239
+ console.warn('Failed to regenerate workspace file:', error);
240
+ }
241
+ res.status(201).json(workspaceProject);
242
+ }
243
+ catch (error) {
244
+ if (error instanceof Error && error.message.includes('already in workspace')) {
245
+ return res.status(409).json({ error: error.message });
246
+ }
247
+ if (error instanceof Error && error.message.includes('not found')) {
248
+ return res.status(404).json({ error: error.message });
249
+ }
250
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
251
+ }
252
+ });
253
+ // Remove project from workspace
254
+ // Use query parameter to handle paths with slashes
255
+ router.delete('/:id/projects', (req, res) => {
256
+ try {
257
+ const id = parseInt(req.params.id, 10);
258
+ if (isNaN(id)) {
259
+ return res.status(400).json({ error: 'Invalid workspace ID' });
260
+ }
261
+ // Get project path from query parameter
262
+ const projectPath = req.query.project_path;
263
+ if (!projectPath) {
264
+ return res.status(400).json({ error: 'project_path query parameter is required' });
265
+ }
266
+ // Decode the path if it was URL encoded
267
+ const decodedPath = decodeURIComponent(projectPath);
268
+ db.removeProjectFromWorkspace(id, decodedPath);
269
+ // Regenerate workspace file to remove project
270
+ try {
271
+ ensureWorkspaceFile(id);
272
+ }
273
+ catch (error) {
274
+ console.warn('Failed to regenerate workspace file:', error);
275
+ }
276
+ res.status(204).send();
277
+ }
278
+ catch (error) {
279
+ if (error instanceof Error && error.message.includes('not found')) {
280
+ return res.status(404).json({ error: error.message });
281
+ }
282
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
283
+ }
284
+ });
285
+ // Update project order in workspace
286
+ router.put('/:id/projects/:projectPath/order', (req, res) => {
287
+ try {
288
+ const id = parseInt(req.params.id, 10);
289
+ if (isNaN(id)) {
290
+ return res.status(400).json({ error: 'Invalid workspace ID' });
291
+ }
292
+ const projectPath = decodeURIComponent(req.params.projectPath);
293
+ const { order } = req.body;
294
+ if (typeof order !== 'number') {
295
+ return res.status(400).json({ error: 'Order must be a number' });
296
+ }
297
+ db.updateWorkspaceProjectOrder(id, projectPath, order);
298
+ res.status(204).send();
299
+ }
300
+ catch (error) {
301
+ if (error instanceof Error && error.message.includes('not found')) {
302
+ return res.status(404).json({ error: error.message });
303
+ }
304
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
305
+ }
306
+ });
307
+ // Import workspace from .code-workspace file
308
+ router.post('/import', (req, res) => {
309
+ try {
310
+ const { workspace_file_path, name } = req.body;
311
+ if (!workspace_file_path) {
312
+ return res.status(400).json({ error: 'workspace_file_path is required' });
313
+ }
314
+ if (!fs.existsSync(workspace_file_path)) {
315
+ return res.status(400).json({ error: 'Workspace file does not exist' });
316
+ }
317
+ if (!(0, projax_core_1.validateWorkspacePath)(workspace_file_path)) {
318
+ return res.status(400).json({ error: 'Invalid workspace file format' });
319
+ }
320
+ // Parse workspace file to get name if not provided
321
+ const parsed = (0, projax_core_1.parseWorkspaceFile)(workspace_file_path);
322
+ const workspaceName = name || path.basename(workspace_file_path, '.code-workspace');
323
+ // Check if workspace already exists
324
+ const existingWorkspaces = db.getAllWorkspaces();
325
+ const existing = existingWorkspaces.find(w => w.workspace_file_path === workspace_file_path);
326
+ if (existing) {
327
+ return res.status(409).json({ error: 'Workspace with this file path already exists', workspace: existing });
328
+ }
329
+ // For imported workspaces, we'll keep the original file path
330
+ // But also generate a PROJAX-managed copy for reliability
331
+ const workspace = db.addWorkspace(workspaceName, workspace_file_path, null, []);
332
+ // Add projects from workspace file
333
+ for (const folder of parsed.folders) {
334
+ try {
335
+ db.addProjectToWorkspace(workspace.id, folder.path);
336
+ }
337
+ catch (error) {
338
+ // Ignore errors for projects that don't exist or are already added
339
+ console.warn(`Failed to add project ${folder.path} to workspace:`, error);
340
+ }
341
+ }
342
+ // Generate PROJAX-managed workspace file as backup
343
+ try {
344
+ const projaxFilePath = getProjaxWorkspaceFilePath(workspace.id, workspace.name);
345
+ const workspaceProjects = db.getWorkspaceProjects(workspace.id);
346
+ const projectPaths = workspaceProjects.map(wp => wp.project_path);
347
+ (0, projax_core_1.generateWorkspaceFile)(workspace.name, projectPaths, projaxFilePath);
348
+ }
349
+ catch (error) {
350
+ console.warn('Failed to generate PROJAX workspace file:', error);
351
+ }
352
+ res.status(201).json(workspace);
353
+ }
354
+ catch (error) {
355
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
356
+ }
357
+ });
358
+ // Create new blank workspace
359
+ router.post('/create', (req, res) => {
360
+ try {
361
+ const { name, description, tags, projects } = req.body;
362
+ if (!name) {
363
+ return res.status(400).json({ error: 'Name is required' });
364
+ }
365
+ // Create workspace in database first (we'll generate the file path after we have the ID)
366
+ // Use a temporary path that will be replaced
367
+ const tempPath = getProjaxWorkspaceFilePath(999999, name);
368
+ const workspace = db.addWorkspace(name, tempPath, description || null, tags || []);
369
+ // Now generate the actual workspace file path with the real ID
370
+ const workspaceFilePath = getProjaxWorkspaceFilePath(workspace.id, workspace.name);
371
+ // Add projects to workspace first
372
+ const projectPaths = [];
373
+ if (projects && Array.isArray(projects)) {
374
+ for (const projectPath of projects) {
375
+ try {
376
+ const absolutePath = path.isAbsolute(projectPath)
377
+ ? projectPath
378
+ : path.resolve(process.cwd(), projectPath);
379
+ db.addProjectToWorkspace(workspace.id, absolutePath);
380
+ projectPaths.push(absolutePath);
381
+ }
382
+ catch (error) {
383
+ console.warn(`Failed to add project ${projectPath} to workspace:`, error);
384
+ }
385
+ }
386
+ }
387
+ // Generate workspace file
388
+ (0, projax_core_1.generateWorkspaceFile)(workspace.name, projectPaths, workspaceFilePath);
389
+ // Update workspace with correct file path
390
+ const updatedWorkspace = db.updateWorkspace(workspace.id, { workspace_file_path: workspaceFilePath });
391
+ res.status(201).json(updatedWorkspace);
392
+ }
393
+ catch (error) {
394
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
395
+ }
396
+ });
397
+ // Get workspace file path (ensures file exists)
398
+ router.get('/:id/file-path', (req, res) => {
399
+ try {
400
+ const id = parseInt(req.params.id, 10);
401
+ if (isNaN(id)) {
402
+ return res.status(400).json({ error: 'Invalid workspace ID' });
403
+ }
404
+ const workspaceFilePath = ensureWorkspaceFile(id);
405
+ res.json({ workspace_file_path: workspaceFilePath });
406
+ }
407
+ catch (error) {
408
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
409
+ }
410
+ });
411
+ // Update workspace file (regenerates it)
412
+ router.post('/:id/regenerate-file', (req, res) => {
413
+ try {
414
+ const id = parseInt(req.params.id, 10);
415
+ if (isNaN(id)) {
416
+ return res.status(400).json({ error: 'Invalid workspace ID' });
417
+ }
418
+ const workspaceFilePath = ensureWorkspaceFile(id);
419
+ const workspace = db.getWorkspace(id);
420
+ if (workspace) {
421
+ res.json({ workspace_file_path: workspaceFilePath, workspace });
422
+ }
423
+ else {
424
+ res.status(404).json({ error: 'Workspace not found' });
425
+ }
426
+ }
427
+ catch (error) {
428
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
429
+ }
430
+ });
431
+ // Sync workspace from file (updates database to match workspace file)
432
+ router.post('/:id/sync-from-file', async (req, res) => {
433
+ try {
434
+ const id = parseInt(req.params.id, 10);
435
+ if (isNaN(id)) {
436
+ return res.status(400).json({ error: 'Invalid workspace ID' });
437
+ }
438
+ const workspace = db.getWorkspace(id);
439
+ if (!workspace) {
440
+ return res.status(404).json({ error: 'Workspace not found' });
441
+ }
442
+ // Check if workspace file exists
443
+ if (!fs.existsSync(workspace.workspace_file_path)) {
444
+ return res.status(404).json({ error: 'Workspace file does not exist' });
445
+ }
446
+ // Parse workspace file to get current projects
447
+ const parsed = (0, projax_core_1.parseWorkspaceFile)(workspace.workspace_file_path);
448
+ const fileProjectPaths = parsed.folders.map((f) => {
449
+ // Resolve to absolute path and normalize (same as database normalization)
450
+ const absolutePath = path.isAbsolute(f.path) ? f.path : path.resolve(process.cwd(), f.path);
451
+ return normalizePath(absolutePath);
452
+ });
453
+ // Get current projects in database
454
+ const dbWorkspaceProjects = db.getWorkspaceProjects(id);
455
+ const dbProjectPaths = new Set(dbWorkspaceProjects.map(wp => normalizePath(wp.project_path)));
456
+ // Find projects to add (in file but not in database)
457
+ const projectsToAdd = [];
458
+ for (const filePath of fileProjectPaths) {
459
+ if (!dbProjectPaths.has(filePath)) {
460
+ projectsToAdd.push(filePath);
461
+ }
462
+ }
463
+ // Find projects to remove (in database but not in file)
464
+ const projectsToRemove = [];
465
+ for (const dbPath of dbProjectPaths) {
466
+ if (!fileProjectPaths.includes(dbPath)) {
467
+ projectsToRemove.push(dbPath);
468
+ }
469
+ }
470
+ // Add missing projects
471
+ for (const projectPath of projectsToAdd) {
472
+ try {
473
+ db.addProjectToWorkspace(id, projectPath);
474
+ }
475
+ catch (error) {
476
+ console.warn(`Failed to add project ${projectPath} to workspace:`, error);
477
+ }
478
+ }
479
+ // Remove projects not in file
480
+ for (const projectPath of projectsToRemove) {
481
+ try {
482
+ db.removeProjectFromWorkspace(id, projectPath);
483
+ }
484
+ catch (error) {
485
+ console.warn(`Failed to remove project ${projectPath} from workspace:`, error);
486
+ }
487
+ }
488
+ // Force a small delay to ensure file system has flushed the write
489
+ // The database write is synchronous, but we want to ensure the file is fully written
490
+ await new Promise(resolve => setTimeout(resolve, 50));
491
+ // Reload database to ensure we have the latest data (in case of concurrent writes)
492
+ (0, database_1.reloadDatabase)();
493
+ res.json({
494
+ added: projectsToAdd.length,
495
+ removed: projectsToRemove.length,
496
+ workspace: db.getWorkspace(id),
497
+ });
498
+ }
499
+ catch (error) {
500
+ res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
501
+ }
502
+ });
503
+ exports.default = router;
504
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/routes/workspaces.ts"],"names":[],"mappings":"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"}
@@ -15,26 +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.scanProject = scanProject;
37
- exports.scanAllProjects = scanAllProjects;
26
+ exports.scanAllProjects = exports.scanProject = void 0;
38
27
  const fs = __importStar(require("fs"));
39
28
  const path = __importStar(require("path"));
40
29
  const database_1 = require("../database");
@@ -149,6 +138,7 @@ function scanProject(projectId) {
149
138
  tests,
150
139
  };
151
140
  }
141
+ exports.scanProject = scanProject;
152
142
  function scanAllProjects() {
153
143
  const db = (0, database_1.getDatabase)();
154
144
  const projects = db.getAllProjects();
@@ -164,4 +154,5 @@ function scanAllProjects() {
164
154
  }
165
155
  return results;
166
156
  }
157
+ exports.scanAllProjects = scanAllProjects;
167
158
  //# sourceMappingURL=scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/services/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/services/scanner.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  // Test output parser for extracting test statistics from common test runners
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.parseTestOutput = parseTestOutput;
5
- exports.isTestOutput = isTestOutput;
4
+ exports.isTestOutput = exports.parseTestOutput = void 0;
6
5
  /**
7
6
  * Parse test output from various frameworks and extract statistics
8
7
  */
@@ -43,6 +42,7 @@ function parseTestOutput(output) {
43
42
  }
44
43
  return result.total > 0 ? result : null;
45
44
  }
45
+ exports.parseTestOutput = parseTestOutput;
46
46
  /**
47
47
  * Parse Jest/Vitest output
48
48
  */
@@ -197,4 +197,5 @@ function isTestOutput(output) {
197
197
  ];
198
198
  return testIndicators.some(indicator => output.includes(indicator));
199
199
  }
200
+ exports.isTestOutput = isTestOutput;
200
201
  //# sourceMappingURL=test-parser.js.map