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.
- package/README.md +73 -0
- package/dist/__tests__/port-scanner.test.js +7 -17
- package/dist/__tests__/script-runner.test.js +7 -17
- package/dist/api/__tests__/database.test.js +7 -17
- package/dist/api/__tests__/database.test.js.map +1 -1
- package/dist/api/__tests__/routes.test.js +7 -17
- package/dist/api/__tests__/routes.test.js.map +1 -1
- package/dist/api/__tests__/scanner.test.js +7 -17
- package/dist/api/__tests__/scanner.test.js.map +1 -1
- package/dist/api/database.d.ts +20 -1
- package/dist/api/database.d.ts.map +1 -1
- package/dist/api/database.js +192 -21
- package/dist/api/database.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +17 -19
- package/dist/api/index.js.map +1 -1
- package/dist/api/migrate.js +2 -1
- package/dist/api/migrate.js.map +1 -1
- package/dist/api/package.json +3 -2
- package/dist/api/routes/backup.d.ts +3 -0
- package/dist/api/routes/backup.d.ts.map +1 -0
- package/dist/api/routes/backup.js +51 -0
- package/dist/api/routes/backup.js.map +1 -0
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +6 -0
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/mcp.d.ts +3 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +147 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/projects.d.ts.map +1 -1
- package/dist/api/routes/projects.js +27 -17
- package/dist/api/routes/projects.js.map +1 -1
- package/dist/api/routes/settings.d.ts.map +1 -1
- package/dist/api/routes/settings.js +119 -11
- package/dist/api/routes/settings.js.map +1 -1
- package/dist/api/routes/workspaces.d.ts +3 -0
- package/dist/api/routes/workspaces.d.ts.map +1 -0
- package/dist/api/routes/workspaces.js +504 -0
- package/dist/api/routes/workspaces.js.map +1 -0
- package/dist/api/services/scanner.js +10 -19
- package/dist/api/services/scanner.js.map +1 -1
- package/dist/api/services/test-parser.js +3 -2
- package/dist/api/services/test-parser.js.map +1 -1
- package/dist/api/types.d.ts +31 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/core/__tests__/database.test.js +7 -17
- package/dist/core/__tests__/detector.test.js +7 -17
- package/dist/core/__tests__/index.test.js +7 -17
- package/dist/core/__tests__/scanner.test.js +7 -17
- package/dist/core/__tests__/settings.test.js +7 -17
- package/dist/core/backup-utils.d.ts +17 -0
- package/dist/core/backup-utils.js +157 -0
- package/dist/core/database.d.ts +1 -0
- package/dist/core/database.js +9 -18
- package/dist/core/detector.js +11 -21
- package/dist/core/git-utils.d.ts +12 -0
- package/dist/core/git-utils.js +87 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +8 -5
- package/dist/core/scanner.js +3 -2
- package/dist/core/settings.d.ts +85 -0
- package/dist/core/settings.js +306 -9
- package/dist/core/workspace-utils.d.ts +37 -0
- package/dist/core/workspace-utils.js +143 -0
- package/dist/core-bridge.js +7 -17
- package/dist/electron/core/__tests__/database.test.js +7 -17
- package/dist/electron/core/__tests__/detector.test.js +7 -17
- package/dist/electron/core/__tests__/index.test.js +7 -17
- package/dist/electron/core/__tests__/scanner.test.js +7 -17
- package/dist/electron/core/__tests__/settings.test.js +7 -17
- package/dist/electron/core/backup-utils.d.ts +17 -0
- package/dist/electron/core/backup-utils.js +157 -0
- package/dist/electron/core/database.d.ts +1 -0
- package/dist/electron/core/database.js +9 -18
- package/dist/electron/core/detector.js +11 -21
- package/dist/electron/core/git-utils.d.ts +12 -0
- package/dist/electron/core/git-utils.js +87 -0
- package/dist/electron/core/index.d.ts +3 -0
- package/dist/electron/core/index.js +8 -5
- package/dist/electron/core/scanner.js +3 -2
- package/dist/electron/core/settings.d.ts +85 -0
- package/dist/electron/core/settings.js +306 -9
- package/dist/electron/core/workspace-utils.d.ts +37 -0
- package/dist/electron/core/workspace-utils.js +143 -0
- package/dist/electron/core.js +7 -17
- package/dist/electron/main.js +663 -33
- package/dist/electron/port-extractor.js +9 -18
- package/dist/electron/port-scanner.js +11 -20
- package/dist/electron/port-utils.js +5 -4
- package/dist/electron/preload.d.ts +27 -2
- package/dist/electron/preload.js +18 -2
- package/dist/electron/renderer/assets/index-B-etDnj2.js +64 -0
- package/dist/electron/renderer/assets/index-Bx18Cyic.js +64 -0
- package/dist/electron/renderer/assets/index-C8f5yNYe.js +64 -0
- package/dist/electron/renderer/assets/index-CIZ3Wl6c.css +1 -0
- package/dist/electron/renderer/assets/index-CJbsU9y8.css +1 -0
- package/dist/electron/renderer/assets/index-CopVNRnR.js +64 -0
- package/dist/electron/renderer/assets/index-DUvcepWm.js +64 -0
- package/dist/electron/renderer/assets/index-DWe2TQFv.css +1 -0
- package/dist/electron/renderer/assets/index-DZzB20Xf.css +1 -0
- package/dist/electron/renderer/assets/index-DknLdADV.js +63 -0
- package/dist/electron/renderer/assets/index-DocuD8Lk.js +64 -0
- package/dist/electron/renderer/assets/index-DyU-xfd8.css +1 -0
- package/dist/electron/renderer/assets/index-GwC-JVUy.css +1 -0
- package/dist/electron/renderer/assets/index-fehviker.js +63 -0
- package/dist/electron/renderer/index.html +2 -2
- package/dist/electron/script-runner.js +20 -29
- package/dist/index.js +395 -21
- package/dist/port-extractor.js +9 -18
- package/dist/port-scanner.js +11 -20
- package/dist/port-utils.js +5 -4
- package/dist/script-runner.js +20 -29
- package/dist/test-parser.js +3 -2
- 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) ||
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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 =
|
|
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":"
|
|
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 =
|
|
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
|