projax 3.3.24 → 3.3.25
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 +5 -5
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -11
- package/dist/api/index.js.map +1 -1
- package/dist/api/migrate.d.ts.map +1 -1
- package/dist/api/migrate.js +4 -152
- package/dist/api/migrate.js.map +1 -1
- package/dist/electron/main.js +3 -0
- package/dist/electron/preload.d.ts +1 -0
- package/dist/electron/preload.js +1 -0
- package/dist/electron/renderer/assets/index-CgB-tTpV.js +62 -0
- package/dist/electron/renderer/assets/index-ChoTzPLo.css +1 -0
- package/dist/electron/renderer/assets/index-D2AOB6Er.js +62 -0
- package/dist/electron/renderer/assets/index-DwRy5FqP.js +62 -0
- package/dist/electron/renderer/assets/index-Z_8dJn3i.js +62 -0
- package/dist/electron/renderer/index.html +2 -2
- package/dist/prxi.tsx +0 -42
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -99,7 +99,7 @@ prx --help
|
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
**API Port:**
|
|
102
|
-
The API server automatically finds an available port in the range
|
|
102
|
+
The API server automatically finds an available port in the range 38124-38133. The selected port is displayed in:
|
|
103
103
|
- CLI welcome screen
|
|
104
104
|
- Desktop app status bar
|
|
105
105
|
- `prx api` command output
|
|
@@ -690,10 +690,10 @@ The Desktop web interface provides a visual way to manage your projects:
|
|
|
690
690
|
|
|
691
691
|
3. Check if port is available:
|
|
692
692
|
```bash
|
|
693
|
-
# The API tries ports
|
|
693
|
+
# The API tries ports 38124-38133 automatically
|
|
694
694
|
# Check which port is in use
|
|
695
|
-
lsof -i :
|
|
696
|
-
netstat -ano | findstr :
|
|
695
|
+
lsof -i :38124 # macOS/Linux
|
|
696
|
+
netstat -ano | findstr :38124 # Windows
|
|
697
697
|
```
|
|
698
698
|
|
|
699
699
|
4. The API port is displayed in:
|
|
@@ -883,7 +883,7 @@ prx rename "Old Name" "New Name"
|
|
|
883
883
|
|
|
884
884
|
```bash
|
|
885
885
|
# Run with arguments
|
|
886
|
-
prx 1 dev --port
|
|
886
|
+
prx 1 dev --port 8001
|
|
887
887
|
prx 2 test --watch --coverage
|
|
888
888
|
|
|
889
889
|
# Run in background with arguments
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQ3C,QAAA,MAAM,GAAG,EAAE,OAAmB,CAAC;AA+C/B,iBAAe,WAAW,kBA8BzB;AAOD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/api/index.js
CHANGED
|
@@ -44,12 +44,11 @@ const path = __importStar(require("path"));
|
|
|
44
44
|
const os = __importStar(require("os"));
|
|
45
45
|
const fs = __importStar(require("fs"));
|
|
46
46
|
const net = __importStar(require("net"));
|
|
47
|
-
const migrate_1 = require("./migrate");
|
|
48
47
|
const routes_1 = __importDefault(require("./routes"));
|
|
49
48
|
const app = (0, express_1.default)();
|
|
50
49
|
exports.app = app;
|
|
51
|
-
const PORT_START =
|
|
52
|
-
const PORT_END =
|
|
50
|
+
const PORT_START = 38124;
|
|
51
|
+
const PORT_END = 38133;
|
|
53
52
|
// Middleware
|
|
54
53
|
app.use((0, cors_1.default)());
|
|
55
54
|
app.use(express_1.default.json());
|
|
@@ -90,14 +89,6 @@ function writePortToFile(port) {
|
|
|
90
89
|
// Main function
|
|
91
90
|
async function startServer() {
|
|
92
91
|
try {
|
|
93
|
-
// Run migration if needed
|
|
94
|
-
const dataDir = path.join(os.homedir(), '.projax');
|
|
95
|
-
const jsonPath = path.join(dataDir, 'data.json');
|
|
96
|
-
const sqlitePath = path.join(dataDir, 'dashboard.db');
|
|
97
|
-
if (!fs.existsSync(jsonPath) && fs.existsSync(sqlitePath)) {
|
|
98
|
-
console.log('Running migration from SQLite to JSON...');
|
|
99
|
-
(0, migrate_1.migrateFromSQLite)();
|
|
100
|
-
}
|
|
101
92
|
// Find available port
|
|
102
93
|
const port = await findAvailablePort();
|
|
103
94
|
// Write port to file
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C"}
|
package/dist/api/migrate.js
CHANGED
|
@@ -1,158 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
2
|
+
// Migration from SQLite is no longer supported
|
|
3
|
+
// All data is now stored in JSON format
|
|
38
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
5
|
exports.migrateFromSQLite = migrateFromSQLite;
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
|
-
const os = __importStar(require("os"));
|
|
42
|
-
const fs = __importStar(require("fs"));
|
|
43
|
-
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
44
|
-
const database_1 = require("./database");
|
|
45
6
|
function migrateFromSQLite() {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const jsonPath = path.join(dataDir, 'data.json');
|
|
49
|
-
const backupPath = path.join(dataDir, 'dashboard.db.backup');
|
|
50
|
-
// Check if SQLite database exists
|
|
51
|
-
if (!fs.existsSync(sqlitePath)) {
|
|
52
|
-
console.log('No SQLite database found. Skipping migration.');
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
// Check if JSON database already exists
|
|
56
|
-
if (fs.existsSync(jsonPath)) {
|
|
57
|
-
console.log('JSON database already exists. Skipping migration.');
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
console.log('Starting migration from SQLite to JSON...');
|
|
61
|
-
try {
|
|
62
|
-
// Open SQLite database
|
|
63
|
-
const sqliteDb = new better_sqlite3_1.default(sqlitePath);
|
|
64
|
-
// Helper to safely query table
|
|
65
|
-
const safeQuery = (query) => {
|
|
66
|
-
try {
|
|
67
|
-
return sqliteDb.prepare(query).all();
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.warn(`Table not found or empty, skipping: ${query}`);
|
|
71
|
-
return [];
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
// Read all data from SQLite
|
|
75
|
-
const projects = safeQuery('SELECT * FROM projects');
|
|
76
|
-
const tests = safeQuery('SELECT * FROM tests');
|
|
77
|
-
const jenkinsJobs = safeQuery('SELECT * FROM jenkins_jobs');
|
|
78
|
-
const projectPorts = safeQuery('SELECT * FROM project_ports');
|
|
79
|
-
const settings = safeQuery('SELECT * FROM settings');
|
|
80
|
-
sqliteDb.close();
|
|
81
|
-
// Get JSON database instance
|
|
82
|
-
const jsonDb = (0, database_1.getDatabase)();
|
|
83
|
-
// Migrate projects
|
|
84
|
-
console.log(`Migrating ${projects.length} projects...`);
|
|
85
|
-
for (const project of projects) {
|
|
86
|
-
try {
|
|
87
|
-
jsonDb.addProject(project.name, project.path);
|
|
88
|
-
// Update timestamps manually since addProject creates new timestamps
|
|
89
|
-
const migratedProject = jsonDb.getProjectByPath(project.path);
|
|
90
|
-
if (migratedProject) {
|
|
91
|
-
// We need to update the project directly in the database
|
|
92
|
-
// Since we don't have a direct update method, we'll need to modify the database
|
|
93
|
-
// For now, let's just migrate the data - timestamps will be new
|
|
94
|
-
// This is acceptable as the important data (name, path) is preserved
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
console.warn(`Failed to migrate project ${project.name}:`, error);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Migrate tests
|
|
102
|
-
console.log(`Migrating ${tests.length} tests...`);
|
|
103
|
-
for (const test of tests) {
|
|
104
|
-
try {
|
|
105
|
-
jsonDb.addTest(test.project_id, test.file_path, test.framework);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
console.warn(`Failed to migrate test ${test.id}:`, error);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// Migrate Jenkins jobs
|
|
112
|
-
console.log(`Migrating ${jenkinsJobs.length} Jenkins jobs...`);
|
|
113
|
-
for (const job of jenkinsJobs) {
|
|
114
|
-
try {
|
|
115
|
-
jsonDb.addJenkinsJob(job.project_id, job.job_name, job.job_url);
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
console.warn(`Failed to migrate Jenkins job ${job.id}:`, error);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Migrate project ports
|
|
122
|
-
console.log(`Migrating ${projectPorts.length} project ports...`);
|
|
123
|
-
for (const port of projectPorts) {
|
|
124
|
-
try {
|
|
125
|
-
jsonDb.addProjectPort(port.project_id, port.port, port.config_source, port.script_name);
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
console.warn(`Failed to migrate project port ${port.id}:`, error);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
// Migrate settings
|
|
132
|
-
console.log(`Migrating ${settings.length} settings...`);
|
|
133
|
-
for (const setting of settings) {
|
|
134
|
-
try {
|
|
135
|
-
jsonDb.setSetting(setting.key, setting.value);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
console.warn(`Failed to migrate setting ${setting.key}:`, error);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// Backup SQLite database
|
|
142
|
-
console.log('Creating backup of SQLite database...');
|
|
143
|
-
fs.copyFileSync(sqlitePath, backupPath);
|
|
144
|
-
console.log('✓ Migration completed successfully!');
|
|
145
|
-
console.log(` - Projects: ${projects.length}`);
|
|
146
|
-
console.log(` - Tests: ${tests.length}`);
|
|
147
|
-
console.log(` - Jenkins Jobs: ${jenkinsJobs.length}`);
|
|
148
|
-
console.log(` - Project Ports: ${projectPorts.length}`);
|
|
149
|
-
console.log(` - Settings: ${settings.length}`);
|
|
150
|
-
console.log(` - SQLite backup: ${backupPath}`);
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
console.error('Migration failed:', error);
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
7
|
+
// No migration needed - SQLite support has been removed
|
|
8
|
+
return false;
|
|
157
9
|
}
|
|
158
10
|
//# sourceMappingURL=migrate.js.map
|
package/dist/api/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":";AAAA,+CAA+C;AAC/C,wCAAwC;;AAExC,8CAGC;AAHD,SAAgB,iBAAiB;IAC/B,wDAAwD;IACxD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/electron/main.js
CHANGED
|
@@ -188,6 +188,9 @@ electron_1.app.on('before-quit', () => {
|
|
|
188
188
|
}
|
|
189
189
|
});
|
|
190
190
|
// IPC Handlers
|
|
191
|
+
electron_1.ipcMain.handle('get-app-version', async () => {
|
|
192
|
+
return electron_1.app.getVersion();
|
|
193
|
+
});
|
|
191
194
|
electron_1.ipcMain.handle('get-projects', async () => {
|
|
192
195
|
try {
|
|
193
196
|
console.log('Getting projects from database...');
|
package/dist/electron/preload.js
CHANGED
|
@@ -34,4 +34,5 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
34
34
|
onProcessExit: (callback) => electron_1.ipcRenderer.on('process-exit', callback),
|
|
35
35
|
removeProcessOutputListener: (callback) => electron_1.ipcRenderer.removeListener('process-output', callback),
|
|
36
36
|
removeProcessExitListener: (callback) => electron_1.ipcRenderer.removeListener('process-exit', callback),
|
|
37
|
+
getAppVersion: () => electron_1.ipcRenderer.invoke('get-app-version'),
|
|
37
38
|
});
|