projax 3.3.58 → 3.3.63
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 +10 -1
- package/dist/electron/preload.d.ts +1 -0
- package/dist/electron/renderer/assets/index-CmtZriN5.js +66 -0
- package/dist/electron/renderer/index.html +1 -1
- package/dist/electron/script-runner.js +52 -20
- package/dist/index.js +14 -10
- package/dist/prxi.js +877 -109
- package/dist/prxi.tsx +1249 -177
- package/dist/script-runner.js +52 -20
- package/package.json +1 -1
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/core-bridge.ts.html +0 -292
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -191
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/core-bridge.ts.html +0 -292
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -191
- package/coverage/lcov-report/port-extractor.ts.html +0 -1174
- package/coverage/lcov-report/port-scanner.ts.html +0 -301
- package/coverage/lcov-report/port-utils.ts.html +0 -670
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/script-runner.ts.html +0 -3346
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/test-parser.ts.html +0 -799
- package/coverage/lcov.info +0 -1338
- package/coverage/port-extractor.ts.html +0 -1174
- package/coverage/port-scanner.ts.html +0 -301
- package/coverage/port-utils.ts.html +0 -670
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/script-runner.ts.html +0 -3346
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/test-parser.ts.html +0 -799
- package/dist/__tests__/core-bridge.test.d.ts +0 -1
- package/dist/__tests__/core-bridge.test.js +0 -135
- package/dist/__tests__/port-extractor.test.d.ts +0 -1
- package/dist/__tests__/port-extractor.test.js +0 -407
- package/dist/__tests__/port-scanner.test.d.ts +0 -1
- package/dist/__tests__/port-scanner.test.js +0 -170
- package/dist/__tests__/port-utils.test.d.ts +0 -1
- package/dist/__tests__/port-utils.test.js +0 -127
- package/dist/__tests__/script-runner.test.d.ts +0 -1
- package/dist/__tests__/script-runner.test.js +0 -491
- package/dist/__tests__/test-parser.test.d.ts +0 -1
- package/dist/__tests__/test-parser.test.js +0 -276
- package/dist/api/__tests__/database.test.d.ts +0 -2
- package/dist/api/__tests__/database.test.d.ts.map +0 -1
- package/dist/api/__tests__/database.test.js +0 -485
- package/dist/api/__tests__/database.test.js.map +0 -1
- package/dist/api/__tests__/routes.test.d.ts +0 -2
- package/dist/api/__tests__/routes.test.d.ts.map +0 -1
- package/dist/api/__tests__/routes.test.js +0 -484
- package/dist/api/__tests__/routes.test.js.map +0 -1
- package/dist/api/__tests__/scanner.test.d.ts +0 -2
- package/dist/api/__tests__/scanner.test.d.ts.map +0 -1
- package/dist/api/__tests__/scanner.test.js +0 -403
- package/dist/api/__tests__/scanner.test.js.map +0 -1
- package/dist/core/__tests__/database.test.d.ts +0 -1
- package/dist/core/__tests__/database.test.js +0 -557
- package/dist/core/__tests__/detector.test.d.ts +0 -1
- package/dist/core/__tests__/detector.test.js +0 -375
- package/dist/core/__tests__/index.test.d.ts +0 -1
- package/dist/core/__tests__/index.test.js +0 -469
- package/dist/core/__tests__/scanner.test.d.ts +0 -1
- package/dist/core/__tests__/scanner.test.js +0 -406
- package/dist/core/__tests__/settings.test.d.ts +0 -1
- package/dist/core/__tests__/settings.test.js +0 -280
- package/dist/electron/core/__tests__/database.test.d.ts +0 -1
- package/dist/electron/core/__tests__/database.test.js +0 -557
- package/dist/electron/core/__tests__/detector.test.d.ts +0 -1
- package/dist/electron/core/__tests__/detector.test.js +0 -375
- package/dist/electron/core/__tests__/index.test.d.ts +0 -1
- package/dist/electron/core/__tests__/index.test.js +0 -469
- package/dist/electron/core/__tests__/scanner.test.d.ts +0 -1
- package/dist/electron/core/__tests__/scanner.test.js +0 -406
- package/dist/electron/core/__tests__/settings.test.d.ts +0 -1
- package/dist/electron/core/__tests__/settings.test.js +0 -280
- package/jest.config.js +0 -26
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,135 +0,0 @@
|
|
|
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 () {
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
// Mock the core module before importing core-bridge
|
|
37
|
-
jest.mock('../core-bridge', () => {
|
|
38
|
-
const mockCore = {
|
|
39
|
-
getDatabaseManager: jest.fn(() => ({
|
|
40
|
-
getAllProjects: jest.fn(() => []),
|
|
41
|
-
getProject: jest.fn(),
|
|
42
|
-
addProject: jest.fn(),
|
|
43
|
-
removeProject: jest.fn(),
|
|
44
|
-
})),
|
|
45
|
-
getAllProjects: jest.fn(() => []),
|
|
46
|
-
addProject: jest.fn(),
|
|
47
|
-
removeProject: jest.fn(),
|
|
48
|
-
scanProject: jest.fn(),
|
|
49
|
-
scanAllProjects: jest.fn(),
|
|
50
|
-
getCurrentBranch: jest.fn((path) => 'main'),
|
|
51
|
-
};
|
|
52
|
-
return mockCore;
|
|
53
|
-
});
|
|
54
|
-
const coreBridge = __importStar(require("../core-bridge"));
|
|
55
|
-
describe('core-bridge', () => {
|
|
56
|
-
beforeEach(() => {
|
|
57
|
-
jest.clearAllMocks();
|
|
58
|
-
});
|
|
59
|
-
describe('exported functions', () => {
|
|
60
|
-
it('should export getDatabaseManager', () => {
|
|
61
|
-
expect(coreBridge.getDatabaseManager).toBeDefined();
|
|
62
|
-
expect(typeof coreBridge.getDatabaseManager).toBe('function');
|
|
63
|
-
});
|
|
64
|
-
it('should export getAllProjects', () => {
|
|
65
|
-
expect(coreBridge.getAllProjects).toBeDefined();
|
|
66
|
-
expect(typeof coreBridge.getAllProjects).toBe('function');
|
|
67
|
-
});
|
|
68
|
-
it('should export addProject', () => {
|
|
69
|
-
expect(coreBridge.addProject).toBeDefined();
|
|
70
|
-
expect(typeof coreBridge.addProject).toBe('function');
|
|
71
|
-
});
|
|
72
|
-
it('should export removeProject', () => {
|
|
73
|
-
expect(coreBridge.removeProject).toBeDefined();
|
|
74
|
-
expect(typeof coreBridge.removeProject).toBe('function');
|
|
75
|
-
});
|
|
76
|
-
it('should export scanProject', () => {
|
|
77
|
-
expect(coreBridge.scanProject).toBeDefined();
|
|
78
|
-
expect(typeof coreBridge.scanProject).toBe('function');
|
|
79
|
-
});
|
|
80
|
-
it('should export scanAllProjects', () => {
|
|
81
|
-
expect(coreBridge.scanAllProjects).toBeDefined();
|
|
82
|
-
expect(typeof coreBridge.scanAllProjects).toBe('function');
|
|
83
|
-
});
|
|
84
|
-
it('should export getCurrentBranch', () => {
|
|
85
|
-
expect(coreBridge.getCurrentBranch).toBeDefined();
|
|
86
|
-
expect(typeof coreBridge.getCurrentBranch).toBe('function');
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe('getDatabaseManager', () => {
|
|
90
|
-
it('should return a database manager instance', () => {
|
|
91
|
-
const db = coreBridge.getDatabaseManager();
|
|
92
|
-
expect(db).toBeDefined();
|
|
93
|
-
expect(db.getAllProjects).toBeDefined();
|
|
94
|
-
});
|
|
95
|
-
it('should be callable multiple times', () => {
|
|
96
|
-
const db1 = coreBridge.getDatabaseManager();
|
|
97
|
-
const db2 = coreBridge.getDatabaseManager();
|
|
98
|
-
expect(db1).toBeDefined();
|
|
99
|
-
expect(db2).toBeDefined();
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
describe('getAllProjects', () => {
|
|
103
|
-
it('should return an array', () => {
|
|
104
|
-
const projects = coreBridge.getAllProjects();
|
|
105
|
-
expect(Array.isArray(projects)).toBe(true);
|
|
106
|
-
});
|
|
107
|
-
it('should be callable', () => {
|
|
108
|
-
expect(() => coreBridge.getAllProjects()).not.toThrow();
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
describe('getCurrentBranch', () => {
|
|
112
|
-
it('should accept a path parameter', () => {
|
|
113
|
-
const result = coreBridge.getCurrentBranch('/some/path');
|
|
114
|
-
expect(coreBridge.getCurrentBranch).toHaveBeenCalledWith('/some/path');
|
|
115
|
-
});
|
|
116
|
-
it('should return a string', () => {
|
|
117
|
-
const result = coreBridge.getCurrentBranch('/some/path');
|
|
118
|
-
expect(typeof result).toBe('string');
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
describe('project operations', () => {
|
|
122
|
-
it('addProject should be callable', () => {
|
|
123
|
-
expect(() => coreBridge.addProject('test', '/path')).not.toThrow();
|
|
124
|
-
});
|
|
125
|
-
it('removeProject should be callable', () => {
|
|
126
|
-
expect(() => coreBridge.removeProject(1)).not.toThrow();
|
|
127
|
-
});
|
|
128
|
-
it('scanProject should be callable', () => {
|
|
129
|
-
expect(() => coreBridge.scanProject(1)).not.toThrow();
|
|
130
|
-
});
|
|
131
|
-
it('scanAllProjects should be callable', () => {
|
|
132
|
-
expect(() => coreBridge.scanAllProjects()).not.toThrow();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,407 +0,0 @@
|
|
|
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 () {
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
const fs = __importStar(require("fs"));
|
|
37
|
-
const path = __importStar(require("path"));
|
|
38
|
-
const os = __importStar(require("os"));
|
|
39
|
-
const port_extractor_1 = require("../port-extractor");
|
|
40
|
-
describe('port-extractor', () => {
|
|
41
|
-
let testDir;
|
|
42
|
-
beforeEach(() => {
|
|
43
|
-
testDir = path.join(os.tmpdir(), `projax-port-extractor-test-${Date.now()}`);
|
|
44
|
-
fs.mkdirSync(testDir, { recursive: true });
|
|
45
|
-
});
|
|
46
|
-
afterEach(() => {
|
|
47
|
-
if (fs.existsSync(testDir)) {
|
|
48
|
-
fs.rmSync(testDir, { recursive: true, force: true });
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
describe('extractPortsFromProject', () => {
|
|
52
|
-
it('should return empty array for empty directory', async () => {
|
|
53
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
54
|
-
expect(ports).toEqual([]);
|
|
55
|
-
});
|
|
56
|
-
describe('package.json extraction', () => {
|
|
57
|
-
it('should extract port from --port flag in scripts', async () => {
|
|
58
|
-
const packageJson = {
|
|
59
|
-
scripts: {
|
|
60
|
-
dev: 'vite --port 3000',
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
64
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
65
|
-
expect(ports).toContainEqual({
|
|
66
|
-
port: 3000,
|
|
67
|
-
script: 'dev',
|
|
68
|
-
source: 'package.json',
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
it('should extract port from -p flag in scripts', async () => {
|
|
72
|
-
const packageJson = {
|
|
73
|
-
scripts: {
|
|
74
|
-
start: 'next dev -p 4000',
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
78
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
79
|
-
expect(ports).toContainEqual({
|
|
80
|
-
port: 4000,
|
|
81
|
-
script: 'start',
|
|
82
|
-
source: 'package.json',
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('should extract port from PORT= in scripts', async () => {
|
|
86
|
-
const packageJson = {
|
|
87
|
-
scripts: {
|
|
88
|
-
serve: 'PORT=5000 node server.js',
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
92
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
93
|
-
expect(ports).toContainEqual({
|
|
94
|
-
port: 5000,
|
|
95
|
-
script: 'serve',
|
|
96
|
-
source: 'package.json',
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
it('should extract port from VITE_PORT= in scripts', async () => {
|
|
100
|
-
const packageJson = {
|
|
101
|
-
scripts: {
|
|
102
|
-
dev: 'VITE_PORT=3001 vite',
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
106
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
107
|
-
expect(ports).toContainEqual({
|
|
108
|
-
port: 3001,
|
|
109
|
-
script: 'dev',
|
|
110
|
-
source: 'package.json',
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
it('should extract multiple ports from different scripts', async () => {
|
|
114
|
-
const packageJson = {
|
|
115
|
-
scripts: {
|
|
116
|
-
dev: 'vite --port 3000',
|
|
117
|
-
preview: 'vite preview --port 4000',
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
121
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
122
|
-
expect(ports.length).toBe(2);
|
|
123
|
-
expect(ports.find(p => p.port === 3000)).toBeDefined();
|
|
124
|
-
expect(ports.find(p => p.port === 4000)).toBeDefined();
|
|
125
|
-
});
|
|
126
|
-
it('should handle malformed package.json gracefully', async () => {
|
|
127
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), 'not valid json');
|
|
128
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
129
|
-
expect(ports).toEqual([]);
|
|
130
|
-
});
|
|
131
|
-
it('should handle package.json without scripts', async () => {
|
|
132
|
-
const packageJson = { name: 'test' };
|
|
133
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
134
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
135
|
-
expect(ports).toEqual([]);
|
|
136
|
-
});
|
|
137
|
-
it('should ignore invalid port numbers', async () => {
|
|
138
|
-
const packageJson = {
|
|
139
|
-
scripts: {
|
|
140
|
-
dev: 'node server.js --port 99999', // Invalid port
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
144
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
145
|
-
expect(ports).toEqual([]);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
describe('vite.config extraction', () => {
|
|
149
|
-
it('should extract port from vite.config.js', async () => {
|
|
150
|
-
const viteConfig = `
|
|
151
|
-
export default {
|
|
152
|
-
server: {
|
|
153
|
-
port: 5173
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
`;
|
|
157
|
-
fs.writeFileSync(path.join(testDir, 'vite.config.js'), viteConfig);
|
|
158
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
159
|
-
expect(ports).toContainEqual({
|
|
160
|
-
port: 5173,
|
|
161
|
-
script: null,
|
|
162
|
-
source: 'vite.config.js',
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
it('should extract port from vite.config.ts', async () => {
|
|
166
|
-
const viteConfig = `
|
|
167
|
-
import { defineConfig } from 'vite';
|
|
168
|
-
export default defineConfig({
|
|
169
|
-
server: {
|
|
170
|
-
port: 3000
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
`;
|
|
174
|
-
fs.writeFileSync(path.join(testDir, 'vite.config.ts'), viteConfig);
|
|
175
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
176
|
-
expect(ports).toContainEqual({
|
|
177
|
-
port: 3000,
|
|
178
|
-
script: null,
|
|
179
|
-
source: 'vite.config.ts',
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
it('should extract port from vite.config.mjs', async () => {
|
|
183
|
-
const viteConfig = `
|
|
184
|
-
export default {
|
|
185
|
-
server: { port: 8080 }
|
|
186
|
-
}
|
|
187
|
-
`;
|
|
188
|
-
fs.writeFileSync(path.join(testDir, 'vite.config.mjs'), viteConfig);
|
|
189
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
190
|
-
expect(ports).toContainEqual({
|
|
191
|
-
port: 8080,
|
|
192
|
-
script: null,
|
|
193
|
-
source: 'vite.config.mjs',
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
describe('webpack.config extraction', () => {
|
|
198
|
-
it('should extract port from webpack.config.js devServer', async () => {
|
|
199
|
-
const webpackConfig = `
|
|
200
|
-
module.exports = {
|
|
201
|
-
devServer: {
|
|
202
|
-
port: 8081
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
`;
|
|
206
|
-
fs.writeFileSync(path.join(testDir, 'webpack.config.js'), webpackConfig);
|
|
207
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
208
|
-
expect(ports).toContainEqual({
|
|
209
|
-
port: 8081,
|
|
210
|
-
script: null,
|
|
211
|
-
source: 'webpack.config.js',
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
describe('angular.json extraction', () => {
|
|
216
|
-
it('should extract port from angular.json', async () => {
|
|
217
|
-
const angularJson = {
|
|
218
|
-
projects: {
|
|
219
|
-
myApp: {
|
|
220
|
-
architect: {
|
|
221
|
-
serve: {
|
|
222
|
-
options: {
|
|
223
|
-
port: 4200,
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
fs.writeFileSync(path.join(testDir, 'angular.json'), JSON.stringify(angularJson));
|
|
231
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
232
|
-
expect(ports).toContainEqual({
|
|
233
|
-
port: 4200,
|
|
234
|
-
script: null,
|
|
235
|
-
source: 'angular.json',
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
it('should handle malformed angular.json gracefully', async () => {
|
|
239
|
-
fs.writeFileSync(path.join(testDir, 'angular.json'), 'not valid json');
|
|
240
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
241
|
-
expect(ports).toEqual([]);
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
describe('nuxt.config extraction', () => {
|
|
245
|
-
it('should extract port from nuxt.config.js', async () => {
|
|
246
|
-
const nuxtConfig = `
|
|
247
|
-
export default {
|
|
248
|
-
server: {
|
|
249
|
-
port: 3001
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
`;
|
|
253
|
-
fs.writeFileSync(path.join(testDir, 'nuxt.config.js'), nuxtConfig);
|
|
254
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
255
|
-
expect(ports).toContainEqual({
|
|
256
|
-
port: 3001,
|
|
257
|
-
script: null,
|
|
258
|
-
source: 'nuxt.config.js',
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
it('should extract port from nuxt.config.ts', async () => {
|
|
262
|
-
const nuxtConfig = `
|
|
263
|
-
export default defineNuxtConfig({
|
|
264
|
-
server: {
|
|
265
|
-
port: 3002
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
`;
|
|
269
|
-
fs.writeFileSync(path.join(testDir, 'nuxt.config.ts'), nuxtConfig);
|
|
270
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
271
|
-
expect(ports).toContainEqual({
|
|
272
|
-
port: 3002,
|
|
273
|
-
script: null,
|
|
274
|
-
source: 'nuxt.config.ts',
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
describe('.env file extraction', () => {
|
|
279
|
-
it('should extract PORT from .env file', async () => {
|
|
280
|
-
const envContent = `
|
|
281
|
-
NODE_ENV=development
|
|
282
|
-
PORT=3000
|
|
283
|
-
`;
|
|
284
|
-
fs.writeFileSync(path.join(testDir, '.env'), envContent);
|
|
285
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
286
|
-
expect(ports).toContainEqual({
|
|
287
|
-
port: 3000,
|
|
288
|
-
script: null,
|
|
289
|
-
source: '.env',
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
it('should extract VITE_PORT from .env file', async () => {
|
|
293
|
-
const envContent = 'VITE_PORT=5174';
|
|
294
|
-
fs.writeFileSync(path.join(testDir, '.env'), envContent);
|
|
295
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
296
|
-
expect(ports).toContainEqual({
|
|
297
|
-
port: 5174,
|
|
298
|
-
script: null,
|
|
299
|
-
source: '.env',
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
it('should extract from .env.local', async () => {
|
|
303
|
-
const envContent = 'PORT=4000';
|
|
304
|
-
fs.writeFileSync(path.join(testDir, '.env.local'), envContent);
|
|
305
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
306
|
-
expect(ports).toContainEqual({
|
|
307
|
-
port: 4000,
|
|
308
|
-
script: null,
|
|
309
|
-
source: '.env.local',
|
|
310
|
-
});
|
|
311
|
-
});
|
|
312
|
-
it('should extract from .env.development', async () => {
|
|
313
|
-
const envContent = 'PORT=4001';
|
|
314
|
-
fs.writeFileSync(path.join(testDir, '.env.development'), envContent);
|
|
315
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
316
|
-
expect(ports).toContainEqual({
|
|
317
|
-
port: 4001,
|
|
318
|
-
script: null,
|
|
319
|
-
source: '.env.development',
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
it('should extract REACT_APP_PORT from .env', async () => {
|
|
323
|
-
const envContent = 'REACT_APP_PORT=3002';
|
|
324
|
-
fs.writeFileSync(path.join(testDir, '.env'), envContent);
|
|
325
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
326
|
-
expect(ports).toContainEqual({
|
|
327
|
-
port: 3002,
|
|
328
|
-
script: null,
|
|
329
|
-
source: '.env',
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
it('should skip comments in .env files', async () => {
|
|
333
|
-
const envContent = `
|
|
334
|
-
# This is a comment
|
|
335
|
-
# PORT=9999
|
|
336
|
-
PORT=3000
|
|
337
|
-
`;
|
|
338
|
-
fs.writeFileSync(path.join(testDir, '.env'), envContent);
|
|
339
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
340
|
-
expect(ports).toHaveLength(1);
|
|
341
|
-
expect(ports[0].port).toBe(3000);
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
describe('next.config extraction', () => {
|
|
345
|
-
it('should extract port from next.config.js if present', async () => {
|
|
346
|
-
const nextConfig = `
|
|
347
|
-
module.exports = {
|
|
348
|
-
devServer: {
|
|
349
|
-
port: 3003
|
|
350
|
-
}
|
|
351
|
-
};
|
|
352
|
-
`;
|
|
353
|
-
fs.writeFileSync(path.join(testDir, 'next.config.js'), nextConfig);
|
|
354
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
355
|
-
// Next.js doesn't typically configure port in config, but if devServer is there
|
|
356
|
-
expect(ports.find(p => p.source === 'next.config.js')).toBeDefined();
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
describe('deduplication', () => {
|
|
360
|
-
it('should remove duplicate ports with same port and script', async () => {
|
|
361
|
-
// Create multiple sources with the same port
|
|
362
|
-
const packageJson = {
|
|
363
|
-
scripts: {
|
|
364
|
-
dev: 'vite --port 3000',
|
|
365
|
-
},
|
|
366
|
-
};
|
|
367
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
368
|
-
const envContent = 'PORT=3000';
|
|
369
|
-
fs.writeFileSync(path.join(testDir, '.env'), envContent);
|
|
370
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
371
|
-
// Should have both since they have different scripts (one has 'dev', one has null)
|
|
372
|
-
const port3000 = ports.filter(p => p.port === 3000);
|
|
373
|
-
expect(port3000.length).toBe(2);
|
|
374
|
-
});
|
|
375
|
-
});
|
|
376
|
-
describe('edge cases', () => {
|
|
377
|
-
it('should handle non-existent directory gracefully', async () => {
|
|
378
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)('/non/existent/path');
|
|
379
|
-
expect(ports).toEqual([]);
|
|
380
|
-
});
|
|
381
|
-
it('should handle port 0', async () => {
|
|
382
|
-
const packageJson = {
|
|
383
|
-
scripts: {
|
|
384
|
-
dev: 'node server.js --port 0',
|
|
385
|
-
},
|
|
386
|
-
};
|
|
387
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
388
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
389
|
-
expect(ports).toEqual([]);
|
|
390
|
-
});
|
|
391
|
-
it('should handle maximum valid port', async () => {
|
|
392
|
-
const packageJson = {
|
|
393
|
-
scripts: {
|
|
394
|
-
dev: 'node server.js --port 65535',
|
|
395
|
-
},
|
|
396
|
-
};
|
|
397
|
-
fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify(packageJson));
|
|
398
|
-
const ports = await (0, port_extractor_1.extractPortsFromProject)(testDir);
|
|
399
|
-
expect(ports).toContainEqual({
|
|
400
|
-
port: 65535,
|
|
401
|
-
script: 'dev',
|
|
402
|
-
source: 'package.json',
|
|
403
|
-
});
|
|
404
|
-
});
|
|
405
|
-
});
|
|
406
|
-
});
|
|
407
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|