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.
Files changed (84) hide show
  1. package/README.md +10 -1
  2. package/dist/electron/preload.d.ts +1 -0
  3. package/dist/electron/renderer/assets/index-CmtZriN5.js +66 -0
  4. package/dist/electron/renderer/index.html +1 -1
  5. package/dist/electron/script-runner.js +52 -20
  6. package/dist/index.js +14 -10
  7. package/dist/prxi.js +877 -109
  8. package/dist/prxi.tsx +1249 -177
  9. package/dist/script-runner.js +52 -20
  10. package/package.json +1 -1
  11. package/coverage/base.css +0 -224
  12. package/coverage/block-navigation.js +0 -87
  13. package/coverage/core-bridge.ts.html +0 -292
  14. package/coverage/favicon.png +0 -0
  15. package/coverage/index.html +0 -191
  16. package/coverage/lcov-report/base.css +0 -224
  17. package/coverage/lcov-report/block-navigation.js +0 -87
  18. package/coverage/lcov-report/core-bridge.ts.html +0 -292
  19. package/coverage/lcov-report/favicon.png +0 -0
  20. package/coverage/lcov-report/index.html +0 -191
  21. package/coverage/lcov-report/port-extractor.ts.html +0 -1174
  22. package/coverage/lcov-report/port-scanner.ts.html +0 -301
  23. package/coverage/lcov-report/port-utils.ts.html +0 -670
  24. package/coverage/lcov-report/prettify.css +0 -1
  25. package/coverage/lcov-report/prettify.js +0 -2
  26. package/coverage/lcov-report/script-runner.ts.html +0 -3346
  27. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  28. package/coverage/lcov-report/sorter.js +0 -210
  29. package/coverage/lcov-report/test-parser.ts.html +0 -799
  30. package/coverage/lcov.info +0 -1338
  31. package/coverage/port-extractor.ts.html +0 -1174
  32. package/coverage/port-scanner.ts.html +0 -301
  33. package/coverage/port-utils.ts.html +0 -670
  34. package/coverage/prettify.css +0 -1
  35. package/coverage/prettify.js +0 -2
  36. package/coverage/script-runner.ts.html +0 -3346
  37. package/coverage/sort-arrow-sprite.png +0 -0
  38. package/coverage/sorter.js +0 -210
  39. package/coverage/test-parser.ts.html +0 -799
  40. package/dist/__tests__/core-bridge.test.d.ts +0 -1
  41. package/dist/__tests__/core-bridge.test.js +0 -135
  42. package/dist/__tests__/port-extractor.test.d.ts +0 -1
  43. package/dist/__tests__/port-extractor.test.js +0 -407
  44. package/dist/__tests__/port-scanner.test.d.ts +0 -1
  45. package/dist/__tests__/port-scanner.test.js +0 -170
  46. package/dist/__tests__/port-utils.test.d.ts +0 -1
  47. package/dist/__tests__/port-utils.test.js +0 -127
  48. package/dist/__tests__/script-runner.test.d.ts +0 -1
  49. package/dist/__tests__/script-runner.test.js +0 -491
  50. package/dist/__tests__/test-parser.test.d.ts +0 -1
  51. package/dist/__tests__/test-parser.test.js +0 -276
  52. package/dist/api/__tests__/database.test.d.ts +0 -2
  53. package/dist/api/__tests__/database.test.d.ts.map +0 -1
  54. package/dist/api/__tests__/database.test.js +0 -485
  55. package/dist/api/__tests__/database.test.js.map +0 -1
  56. package/dist/api/__tests__/routes.test.d.ts +0 -2
  57. package/dist/api/__tests__/routes.test.d.ts.map +0 -1
  58. package/dist/api/__tests__/routes.test.js +0 -484
  59. package/dist/api/__tests__/routes.test.js.map +0 -1
  60. package/dist/api/__tests__/scanner.test.d.ts +0 -2
  61. package/dist/api/__tests__/scanner.test.d.ts.map +0 -1
  62. package/dist/api/__tests__/scanner.test.js +0 -403
  63. package/dist/api/__tests__/scanner.test.js.map +0 -1
  64. package/dist/core/__tests__/database.test.d.ts +0 -1
  65. package/dist/core/__tests__/database.test.js +0 -557
  66. package/dist/core/__tests__/detector.test.d.ts +0 -1
  67. package/dist/core/__tests__/detector.test.js +0 -375
  68. package/dist/core/__tests__/index.test.d.ts +0 -1
  69. package/dist/core/__tests__/index.test.js +0 -469
  70. package/dist/core/__tests__/scanner.test.d.ts +0 -1
  71. package/dist/core/__tests__/scanner.test.js +0 -406
  72. package/dist/core/__tests__/settings.test.d.ts +0 -1
  73. package/dist/core/__tests__/settings.test.js +0 -280
  74. package/dist/electron/core/__tests__/database.test.d.ts +0 -1
  75. package/dist/electron/core/__tests__/database.test.js +0 -557
  76. package/dist/electron/core/__tests__/detector.test.d.ts +0 -1
  77. package/dist/electron/core/__tests__/detector.test.js +0 -375
  78. package/dist/electron/core/__tests__/index.test.d.ts +0 -1
  79. package/dist/electron/core/__tests__/index.test.js +0 -469
  80. package/dist/electron/core/__tests__/scanner.test.d.ts +0 -1
  81. package/dist/electron/core/__tests__/scanner.test.js +0 -406
  82. package/dist/electron/core/__tests__/settings.test.d.ts +0 -1
  83. package/dist/electron/core/__tests__/settings.test.js +0 -280
  84. 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 {};