projax 3.3.58 → 3.3.59

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