projax 3.3.51 → 3.3.52
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 +0 -73
- package/coverage/core-bridge.ts.html +24 -3
- package/coverage/index.html +34 -19
- package/coverage/lcov-report/core-bridge.ts.html +24 -3
- package/coverage/lcov-report/index.html +34 -19
- package/coverage/lcov-report/port-extractor.ts.html +1 -1
- package/coverage/lcov-report/port-scanner.ts.html +3 -3
- package/coverage/lcov-report/port-utils.ts.html +1 -1
- package/coverage/lcov-report/script-runner.ts.html +302 -11
- package/coverage/lcov-report/test-parser.ts.html +799 -0
- package/coverage/lcov.info +270 -49
- package/coverage/port-extractor.ts.html +1 -1
- package/coverage/port-scanner.ts.html +3 -3
- package/coverage/port-utils.ts.html +1 -1
- package/coverage/script-runner.ts.html +302 -11
- package/coverage/test-parser.ts.html +799 -0
- package/dist/__tests__/port-scanner.test.js +17 -7
- package/dist/__tests__/script-runner.test.js +17 -7
- package/dist/api/__tests__/database.test.js +17 -7
- package/dist/api/__tests__/database.test.js.map +1 -1
- package/dist/api/__tests__/routes.test.js +18 -7
- package/dist/api/__tests__/routes.test.js.map +1 -1
- package/dist/api/__tests__/scanner.test.js +18 -7
- package/dist/api/__tests__/scanner.test.js.map +1 -1
- package/dist/api/database.d.ts +0 -8
- package/dist/api/database.d.ts.map +1 -1
- package/dist/api/database.js +24 -57
- package/dist/api/database.js.map +1 -1
- package/dist/api/index.js +19 -9
- package/dist/api/index.js.map +1 -1
- package/dist/api/migrate.js +1 -2
- package/dist/api/migrate.js.map +1 -1
- package/dist/api/package.json +6 -3
- package/dist/api/routes/backup.d.ts +2 -1
- package/dist/api/routes/backup.d.ts.map +1 -1
- package/dist/api/routes/backup.js.map +1 -1
- package/dist/api/routes/index.d.ts +2 -1
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/projects.d.ts +2 -1
- package/dist/api/routes/projects.d.ts.map +1 -1
- package/dist/api/routes/projects.js +17 -7
- package/dist/api/routes/projects.js.map +1 -1
- package/dist/api/routes/settings.d.ts +2 -1
- package/dist/api/routes/settings.d.ts.map +1 -1
- package/dist/api/routes/settings.js +22 -57
- package/dist/api/routes/settings.js.map +1 -1
- package/dist/api/routes/workspaces.d.ts +2 -1
- package/dist/api/routes/workspaces.d.ts.map +1 -1
- package/dist/api/routes/workspaces.js +21 -96
- package/dist/api/routes/workspaces.js.map +1 -1
- package/dist/api/services/scanner.js +19 -10
- package/dist/api/services/scanner.js.map +1 -1
- package/dist/api/services/test-parser.js +2 -3
- package/dist/api/services/test-parser.js.map +1 -1
- package/dist/api/types.d.ts +0 -5
- package/dist/api/types.d.ts.map +1 -1
- package/dist/core/__tests__/database.test.js +17 -7
- package/dist/core/__tests__/detector.test.js +17 -7
- package/dist/core/__tests__/index.test.js +18 -7
- package/dist/core/__tests__/scanner.test.js +18 -7
- package/dist/core/__tests__/settings.test.js +18 -7
- package/dist/core/backup-utils.js +20 -11
- package/dist/core/database.js +18 -9
- package/dist/core/detector.js +21 -11
- package/dist/core/git-utils.js +19 -10
- package/dist/core/index.js +5 -5
- package/dist/core/scanner.js +2 -3
- package/dist/core/settings.d.ts +0 -85
- package/dist/core/settings.js +9 -306
- package/dist/core/workspace-utils.js +20 -11
- package/dist/core-bridge.js +22 -8
- package/dist/electron/core/__tests__/database.test.js +17 -7
- package/dist/electron/core/__tests__/detector.test.js +17 -7
- package/dist/electron/core/__tests__/index.test.js +18 -7
- package/dist/electron/core/__tests__/scanner.test.js +18 -7
- package/dist/electron/core/__tests__/settings.test.js +18 -7
- package/dist/electron/core/backup-utils.js +20 -11
- package/dist/electron/core/database.js +18 -9
- package/dist/electron/core/detector.js +21 -11
- package/dist/electron/core/git-utils.js +19 -10
- package/dist/electron/core/index.js +5 -5
- package/dist/electron/core/scanner.js +2 -3
- package/dist/electron/core/settings.d.ts +0 -85
- package/dist/electron/core/settings.js +9 -306
- package/dist/electron/core/workspace-utils.js +20 -11
- package/dist/electron/core.js +22 -8
- package/dist/electron/main.js +143 -444
- package/dist/electron/port-extractor.js +18 -9
- package/dist/electron/port-scanner.js +21 -12
- package/dist/electron/port-utils.js +4 -5
- package/dist/electron/preload.d.ts +2 -13
- package/dist/electron/preload.js +2 -9
- package/dist/electron/renderer/assets/index-BjZn_mEF.js +66 -0
- package/dist/electron/renderer/assets/index-CZmDxbJO.js +66 -0
- package/dist/electron/renderer/assets/{index-DWe2TQFv.css → index-DfocdjIj.css} +1 -1
- package/dist/electron/renderer/index.html +2 -2
- package/dist/electron/script-runner.js +29 -20
- package/dist/index.js +37 -134
- package/dist/port-extractor.js +18 -9
- package/dist/port-scanner.js +21 -12
- package/dist/port-utils.js +4 -5
- package/dist/prxi.d.ts +1 -0
- package/dist/prxi.js +1106 -0
- package/dist/prxi.tsx +6 -6
- package/dist/script-runner.js +29 -20
- package/dist/test-parser.js +2 -3
- package/jest.config.js +8 -0
- package/package.json +9 -6
- package/dist/api/routes/mcp.d.ts +0 -3
- package/dist/api/routes/mcp.d.ts.map +0 -1
- package/dist/api/routes/mcp.js +0 -147
- package/dist/api/routes/mcp.js.map +0 -1
- package/dist/electron/renderer/assets/index-59AhiV_K.css +0 -1
- package/dist/electron/renderer/assets/index-A04svynq.js +0 -62
- package/dist/electron/renderer/assets/index-B-etDnj2.js +0 -64
- package/dist/electron/renderer/assets/index-BGodNljq.js +0 -62
- package/dist/electron/renderer/assets/index-Bx18Cyic.js +0 -64
- package/dist/electron/renderer/assets/index-ByBOaxqv.js +0 -62
- package/dist/electron/renderer/assets/index-ByHY-x-j.js +0 -62
- package/dist/electron/renderer/assets/index-C1SRt6Jx.js +0 -62
- package/dist/electron/renderer/assets/index-C8f5yNYe.js +0 -64
- package/dist/electron/renderer/assets/index-C9Fo49a8.js +0 -61
- package/dist/electron/renderer/assets/index-CGx7K7jh.js +0 -62
- package/dist/electron/renderer/assets/index-CIZ3Wl6c.css +0 -1
- package/dist/electron/renderer/assets/index-CJbsU9y8.css +0 -1
- package/dist/electron/renderer/assets/index-CJrLunKK.js +0 -62
- package/dist/electron/renderer/assets/index-CQTleudf.css +0 -1
- package/dist/electron/renderer/assets/index-CQcilqlv.js +0 -62
- package/dist/electron/renderer/assets/index-CS-85xbL.css +0 -1
- package/dist/electron/renderer/assets/index-CYph0WPA.js +0 -62
- package/dist/electron/renderer/assets/index-C_WSLD6y.css +0 -1
- package/dist/electron/renderer/assets/index-CgB-tTpV.js +0 -62
- package/dist/electron/renderer/assets/index-ChoTzPLo.css +0 -1
- package/dist/electron/renderer/assets/index-CopVNRnR.js +0 -64
- package/dist/electron/renderer/assets/index-D1jmaGv5.css +0 -1
- package/dist/electron/renderer/assets/index-D2AOB6Er.js +0 -62
- package/dist/electron/renderer/assets/index-DAfjuYKX.js +0 -61
- package/dist/electron/renderer/assets/index-DEOOHPEi.css +0 -1
- package/dist/electron/renderer/assets/index-DTtg6XrF.css +0 -1
- package/dist/electron/renderer/assets/index-DUvcepWm.js +0 -64
- package/dist/electron/renderer/assets/index-DVWDlM1D.js +0 -62
- package/dist/electron/renderer/assets/index-DZzB20Xf.css +0 -1
- package/dist/electron/renderer/assets/index-Dk0EQt0u.css +0 -1
- package/dist/electron/renderer/assets/index-DknLdADV.js +0 -63
- package/dist/electron/renderer/assets/index-DocuD8Lk.js +0 -64
- package/dist/electron/renderer/assets/index-DwRy5FqP.js +0 -62
- package/dist/electron/renderer/assets/index-DyU-xfd8.css +0 -1
- package/dist/electron/renderer/assets/index-GwC-JVUy.css +0 -1
- package/dist/electron/renderer/assets/index-JXrtTB1F.js +0 -63
- package/dist/electron/renderer/assets/index-Ocrdv8Lb.css +0 -1
- package/dist/electron/renderer/assets/index-R-HsWJ0K.js +0 -62
- package/dist/electron/renderer/assets/index-Ytah0wbZ.js +0 -62
- package/dist/electron/renderer/assets/index-ZVyXUshO.css +0 -1
- package/dist/electron/renderer/assets/index-Z_8dJn3i.js +0 -62
- package/dist/electron/renderer/assets/index-fehviker.js +0 -63
- package/dist/electron/renderer/assets/index-nts9ST-M.js +0 -62
- package/dist/electron/renderer/assets/index-q8NVIH3g.css +0 -1
- package/dist/electron/renderer/assets/index-thUWIXon.js +0 -62
- package/dist/electron/renderer/assets/index-tuQmrwcm.css +0 -1
- package/dist/prxi/src/index.tsx +0 -1370
package/README.md
CHANGED
|
@@ -107,79 +107,6 @@ The API server automatically finds an available port in the range 38124-38133. T
|
|
|
107
107
|
**API Endpoints:**
|
|
108
108
|
See [packages/api/README.md](packages/api/README.md) for complete API documentation.
|
|
109
109
|
|
|
110
|
-
## MCP Server - AI Context Integration
|
|
111
|
-
|
|
112
|
-
**PROJAX MCP Server** provides project and workspace context to AI tools like Cursor and VS Code through the Model Context Protocol (MCP). This enables AI assistants to understand your project structure and relationships.
|
|
113
|
-
|
|
114
|
-
### 🎯 What is MCP?
|
|
115
|
-
|
|
116
|
-
The Model Context Protocol is an open standard that lets AI tools access contextual information from your development environment. The PROJAX MCP server exposes:
|
|
117
|
-
|
|
118
|
-
- **Current Project Context**: Name, path, framework, tags, and git branch
|
|
119
|
-
- **Linked Projects**: Other projects in the same workspace
|
|
120
|
-
- **Workspace Metadata**: Workspace descriptions and relationships
|
|
121
|
-
|
|
122
|
-
### 📦 Configuration
|
|
123
|
-
|
|
124
|
-
The MCP server is included with PROJAX. Configure it in your editor:
|
|
125
|
-
|
|
126
|
-
#### Cursor Configuration
|
|
127
|
-
|
|
128
|
-
Add to `~/.cursor/mcp.json`:
|
|
129
|
-
```json
|
|
130
|
-
{
|
|
131
|
-
"mcpServers": {
|
|
132
|
-
"projax": {
|
|
133
|
-
"command": "prx",
|
|
134
|
-
"args": ["mcp"]
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
#### VS Code Configuration
|
|
141
|
-
|
|
142
|
-
Add to `settings.json`:
|
|
143
|
-
```json
|
|
144
|
-
{
|
|
145
|
-
"mcp.servers": {
|
|
146
|
-
"projax": {
|
|
147
|
-
"command": "prx",
|
|
148
|
-
"args": ["mcp"]
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 💡 Usage
|
|
155
|
-
|
|
156
|
-
Once configured, AI assistants automatically receive context about:
|
|
157
|
-
- Your current project when working in any registered PROJAX project
|
|
158
|
-
- Related projects in the same workspace
|
|
159
|
-
- Project metadata (framework, tags, descriptions)
|
|
160
|
-
|
|
161
|
-
**Example**: If you're working in a frontend project that's part of a workspace with backend and mobile projects, the AI assistant will know about all three projects and can provide context-aware suggestions.
|
|
162
|
-
|
|
163
|
-
### ⚙️ Commands
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
# Display MCP configuration for copy/paste
|
|
167
|
-
prx mcp-config
|
|
168
|
-
|
|
169
|
-
# Show Cursor-specific configuration
|
|
170
|
-
prx mcp-config --cursor
|
|
171
|
-
|
|
172
|
-
# Show VS Code-specific configuration
|
|
173
|
-
prx mcp-config --vscode
|
|
174
|
-
|
|
175
|
-
# View configuration in Desktop app
|
|
176
|
-
# Settings → MCP Server
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### 📚 Documentation
|
|
180
|
-
|
|
181
|
-
For detailed documentation, see [packages/mcp-server/README.md](packages/mcp-server/README.md)
|
|
182
|
-
|
|
183
110
|
## Usage
|
|
184
111
|
|
|
185
112
|
### CLI Commands
|
|
@@ -124,7 +124,17 @@
|
|
|
124
124
|
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
125
|
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
126
|
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
128
138
|
<span class="cline-any cline-neutral"> </span>
|
|
129
139
|
<span class="cline-any cline-neutral"> </span>
|
|
130
140
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -151,6 +161,10 @@
|
|
|
151
161
|
<span class="cline-any cline-no"> </span>
|
|
152
162
|
<span class="cline-any cline-neutral"> </span>
|
|
153
163
|
<span class="cline-any cline-neutral"> </span>
|
|
164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
154
168
|
<span class="cline-any cline-no"> </span>
|
|
155
169
|
<span class="cline-any cline-neutral"> </span>
|
|
156
170
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -187,6 +201,9 @@
|
|
|
187
201
|
<span class="cline-any cline-neutral"> </span>
|
|
188
202
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import * as path from 'path';</span>
|
|
189
203
|
|
|
204
|
+
// NOTE: projax-core is a workspace alias (not an npm scoped package)
|
|
205
|
+
// pnpm resolves this via the "workspace:*" dependency in package.json
|
|
206
|
+
// to the local packages/core package
|
|
190
207
|
type CoreModule = typeof import('projax-core');
|
|
191
208
|
|
|
192
209
|
let cachedCore: CoreModule | null = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
@@ -212,6 +229,10 @@ function <span class="fstat-no" title="function not covered" >loadCore(</span>):
|
|
|
212
229
|
<span class="cstat-no" title="statement not covered" > return cachedCore;</span>
|
|
213
230
|
}
|
|
214
231
|
|
|
232
|
+
// Try multiple locations to find the projax-core module
|
|
233
|
+
// 1. Local dist/core (copied during build)
|
|
234
|
+
// 2. Workspace root packages/core/dist (development)
|
|
235
|
+
// 3. Workspace alias 'projax-core' (resolved by pnpm via workspace:*)
|
|
215
236
|
const candidates = <span class="cstat-no" title="statement not covered" >[</span>
|
|
216
237
|
path.join(__dirname, 'core', 'index.js'),
|
|
217
238
|
path.join(__dirname, 'core'),
|
|
@@ -219,7 +240,7 @@ function <span class="fstat-no" title="function not covered" >loadCore(</span>):
|
|
|
219
240
|
path.join(__dirname, '..', 'core', 'dist'),
|
|
220
241
|
path.join(__dirname, '..', '..', 'core', 'dist', 'index.js'),
|
|
221
242
|
path.join(__dirname, '..', '..', 'core', 'dist'),
|
|
222
|
-
'projax-core',
|
|
243
|
+
'projax-core', // Workspace alias - pnpm resolves this to packages/core
|
|
223
244
|
];
|
|
224
245
|
|
|
225
246
|
<span class="cstat-no" title="statement not covered" > for (const candidate of candidates) {</span>
|
|
@@ -253,7 +274,7 @@ export type { Project, Test, ProjectPort } from 'projax-core';
|
|
|
253
274
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
254
275
|
Code coverage generated by
|
|
255
276
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
256
|
-
at
|
|
277
|
+
at 2026-01-08T01:22:23.536Z
|
|
257
278
|
</div>
|
|
258
279
|
<script src="prettify.js"></script>
|
|
259
280
|
<script>
|
package/coverage/index.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">17.96% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>154/
|
|
28
|
+
<span class='fraction'>154/857</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">13% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>39/
|
|
35
|
+
<span class='fraction'>39/300</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">20.77% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>16/
|
|
42
|
+
<span class='fraction'>16/77</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">18.19% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>151/
|
|
49
|
+
<span class='fraction'>151/830</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -140,17 +140,32 @@
|
|
|
140
140
|
|
|
141
141
|
<tr>
|
|
142
142
|
<td class="file low" data-value="script-runner.ts"><a href="script-runner.ts.html">script-runner.ts</a></td>
|
|
143
|
-
<td data-value="
|
|
144
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
143
|
+
<td data-value="25" class="pic low">
|
|
144
|
+
<div class="chart"><div class="cover-fill" style="width: 25%"></div><div class="cover-empty" style="width: 75%"></div></div>
|
|
145
145
|
</td>
|
|
146
|
-
<td data-value="
|
|
147
|
-
<td data-value="
|
|
148
|
-
<td data-value="
|
|
149
|
-
<td data-value="
|
|
150
|
-
<td data-value="
|
|
151
|
-
<td data-value="
|
|
152
|
-
<td data-value="
|
|
153
|
-
<td data-value="
|
|
146
|
+
<td data-value="25" class="pct low">25%</td>
|
|
147
|
+
<td data-value="488" class="abs low">122/488</td>
|
|
148
|
+
<td data-value="21.89" class="pct low">21.89%</td>
|
|
149
|
+
<td data-value="137" class="abs low">30/137</td>
|
|
150
|
+
<td data-value="26" class="pct low">26%</td>
|
|
151
|
+
<td data-value="50" class="abs low">13/50</td>
|
|
152
|
+
<td data-value="25.21" class="pct low">25.21%</td>
|
|
153
|
+
<td data-value="476" class="abs low">120/476</td>
|
|
154
|
+
</tr>
|
|
155
|
+
|
|
156
|
+
<tr>
|
|
157
|
+
<td class="file low" data-value="test-parser.ts"><a href="test-parser.ts.html">test-parser.ts</a></td>
|
|
158
|
+
<td data-value="0" class="pic low">
|
|
159
|
+
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
160
|
+
</td>
|
|
161
|
+
<td data-value="0" class="pct low">0%</td>
|
|
162
|
+
<td data-value="79" class="abs low">0/79</td>
|
|
163
|
+
<td data-value="0" class="pct low">0%</td>
|
|
164
|
+
<td data-value="59" class="abs low">0/59</td>
|
|
165
|
+
<td data-value="0" class="pct low">0%</td>
|
|
166
|
+
<td data-value="8" class="abs low">0/8</td>
|
|
167
|
+
<td data-value="0" class="pct low">0%</td>
|
|
168
|
+
<td data-value="78" class="abs low">0/78</td>
|
|
154
169
|
</tr>
|
|
155
170
|
|
|
156
171
|
</tbody>
|
|
@@ -161,7 +176,7 @@
|
|
|
161
176
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
162
177
|
Code coverage generated by
|
|
163
178
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
164
|
-
at
|
|
179
|
+
at 2026-01-08T01:22:23.536Z
|
|
165
180
|
</div>
|
|
166
181
|
<script src="prettify.js"></script>
|
|
167
182
|
<script>
|
|
@@ -124,7 +124,17 @@
|
|
|
124
124
|
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
125
|
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
126
|
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
128
138
|
<span class="cline-any cline-neutral"> </span>
|
|
129
139
|
<span class="cline-any cline-neutral"> </span>
|
|
130
140
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -151,6 +161,10 @@
|
|
|
151
161
|
<span class="cline-any cline-no"> </span>
|
|
152
162
|
<span class="cline-any cline-neutral"> </span>
|
|
153
163
|
<span class="cline-any cline-neutral"> </span>
|
|
164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
154
168
|
<span class="cline-any cline-no"> </span>
|
|
155
169
|
<span class="cline-any cline-neutral"> </span>
|
|
156
170
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -187,6 +201,9 @@
|
|
|
187
201
|
<span class="cline-any cline-neutral"> </span>
|
|
188
202
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import * as path from 'path';</span>
|
|
189
203
|
|
|
204
|
+
// NOTE: projax-core is a workspace alias (not an npm scoped package)
|
|
205
|
+
// pnpm resolves this via the "workspace:*" dependency in package.json
|
|
206
|
+
// to the local packages/core package
|
|
190
207
|
type CoreModule = typeof import('projax-core');
|
|
191
208
|
|
|
192
209
|
let cachedCore: CoreModule | null = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
@@ -212,6 +229,10 @@ function <span class="fstat-no" title="function not covered" >loadCore(</span>):
|
|
|
212
229
|
<span class="cstat-no" title="statement not covered" > return cachedCore;</span>
|
|
213
230
|
}
|
|
214
231
|
|
|
232
|
+
// Try multiple locations to find the projax-core module
|
|
233
|
+
// 1. Local dist/core (copied during build)
|
|
234
|
+
// 2. Workspace root packages/core/dist (development)
|
|
235
|
+
// 3. Workspace alias 'projax-core' (resolved by pnpm via workspace:*)
|
|
215
236
|
const candidates = <span class="cstat-no" title="statement not covered" >[</span>
|
|
216
237
|
path.join(__dirname, 'core', 'index.js'),
|
|
217
238
|
path.join(__dirname, 'core'),
|
|
@@ -219,7 +240,7 @@ function <span class="fstat-no" title="function not covered" >loadCore(</span>):
|
|
|
219
240
|
path.join(__dirname, '..', 'core', 'dist'),
|
|
220
241
|
path.join(__dirname, '..', '..', 'core', 'dist', 'index.js'),
|
|
221
242
|
path.join(__dirname, '..', '..', 'core', 'dist'),
|
|
222
|
-
'projax-core',
|
|
243
|
+
'projax-core', // Workspace alias - pnpm resolves this to packages/core
|
|
223
244
|
];
|
|
224
245
|
|
|
225
246
|
<span class="cstat-no" title="statement not covered" > for (const candidate of candidates) {</span>
|
|
@@ -253,7 +274,7 @@ export type { Project, Test, ProjectPort } from 'projax-core';
|
|
|
253
274
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
254
275
|
Code coverage generated by
|
|
255
276
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
256
|
-
at
|
|
277
|
+
at 2026-01-08T01:22:23.516Z
|
|
257
278
|
</div>
|
|
258
279
|
<script src="prettify.js"></script>
|
|
259
280
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">17.96% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>154/
|
|
28
|
+
<span class='fraction'>154/857</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">13% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>39/
|
|
35
|
+
<span class='fraction'>39/300</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">20.77% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>16/
|
|
42
|
+
<span class='fraction'>16/77</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">18.19% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>151/
|
|
49
|
+
<span class='fraction'>151/830</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -140,17 +140,32 @@
|
|
|
140
140
|
|
|
141
141
|
<tr>
|
|
142
142
|
<td class="file low" data-value="script-runner.ts"><a href="script-runner.ts.html">script-runner.ts</a></td>
|
|
143
|
-
<td data-value="
|
|
144
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
143
|
+
<td data-value="25" class="pic low">
|
|
144
|
+
<div class="chart"><div class="cover-fill" style="width: 25%"></div><div class="cover-empty" style="width: 75%"></div></div>
|
|
145
145
|
</td>
|
|
146
|
-
<td data-value="
|
|
147
|
-
<td data-value="
|
|
148
|
-
<td data-value="
|
|
149
|
-
<td data-value="
|
|
150
|
-
<td data-value="
|
|
151
|
-
<td data-value="
|
|
152
|
-
<td data-value="
|
|
153
|
-
<td data-value="
|
|
146
|
+
<td data-value="25" class="pct low">25%</td>
|
|
147
|
+
<td data-value="488" class="abs low">122/488</td>
|
|
148
|
+
<td data-value="21.89" class="pct low">21.89%</td>
|
|
149
|
+
<td data-value="137" class="abs low">30/137</td>
|
|
150
|
+
<td data-value="26" class="pct low">26%</td>
|
|
151
|
+
<td data-value="50" class="abs low">13/50</td>
|
|
152
|
+
<td data-value="25.21" class="pct low">25.21%</td>
|
|
153
|
+
<td data-value="476" class="abs low">120/476</td>
|
|
154
|
+
</tr>
|
|
155
|
+
|
|
156
|
+
<tr>
|
|
157
|
+
<td class="file low" data-value="test-parser.ts"><a href="test-parser.ts.html">test-parser.ts</a></td>
|
|
158
|
+
<td data-value="0" class="pic low">
|
|
159
|
+
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
160
|
+
</td>
|
|
161
|
+
<td data-value="0" class="pct low">0%</td>
|
|
162
|
+
<td data-value="79" class="abs low">0/79</td>
|
|
163
|
+
<td data-value="0" class="pct low">0%</td>
|
|
164
|
+
<td data-value="59" class="abs low">0/59</td>
|
|
165
|
+
<td data-value="0" class="pct low">0%</td>
|
|
166
|
+
<td data-value="8" class="abs low">0/8</td>
|
|
167
|
+
<td data-value="0" class="pct low">0%</td>
|
|
168
|
+
<td data-value="78" class="abs low">0/78</td>
|
|
154
169
|
</tr>
|
|
155
170
|
|
|
156
171
|
</tbody>
|
|
@@ -161,7 +176,7 @@
|
|
|
161
176
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
162
177
|
Code coverage generated by
|
|
163
178
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
164
|
-
at
|
|
179
|
+
at 2026-01-08T01:22:23.516Z
|
|
165
180
|
</div>
|
|
166
181
|
<script src="prettify.js"></script>
|
|
167
182
|
<script>
|
|
@@ -1159,7 +1159,7 @@ function <span class="fstat-no" title="function not covered" >extractPortsFromEn
|
|
|
1159
1159
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1160
1160
|
Code coverage generated by
|
|
1161
1161
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1162
|
-
at
|
|
1162
|
+
at 2026-01-08T01:22:23.516Z
|
|
1163
1163
|
</div>
|
|
1164
1164
|
<script src="prettify.js"></script>
|
|
1165
1165
|
<script>
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
<span class="cline-any cline-yes">6x</span>
|
|
208
208
|
<span class="cline-any cline-neutral"> </span>
|
|
209
209
|
<span class="cline-any cline-neutral"> </span>
|
|
210
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { getDatabaseManager, Project } from './core-bridge';
|
|
210
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { getDatabaseManager, Project, ProjectPort } from './core-bridge';
|
|
211
211
|
import { extractPortsFromProject, PortInfo } from './port-extractor';
|
|
212
212
|
import * as fs from 'fs';
|
|
213
213
|
|
|
@@ -274,7 +274,7 @@ export function shouldRescanPorts(projectId: number): boolean {
|
|
|
274
274
|
|
|
275
275
|
// Check if any port was detected 24 hours ago or older
|
|
276
276
|
const twentyFourHoursAgo = Math.floor(Date.now() / 1000) - (24 * 60 * 60);
|
|
277
|
-
const needsRescan = ports.some(port => (port.last_detected || <span class="branch-1 cbranch-no" title="branch not covered" >0)</span> <= twentyFourHoursAgo);
|
|
277
|
+
const needsRescan = ports.some((port: ProjectPort) => (port.last_detected || <span class="branch-1 cbranch-no" title="branch not covered" >0)</span> <= twentyFourHoursAgo);
|
|
278
278
|
|
|
279
279
|
return needsRescan;
|
|
280
280
|
}
|
|
@@ -286,7 +286,7 @@ export function shouldRescanPorts(projectId: number): boolean {
|
|
|
286
286
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
287
287
|
Code coverage generated by
|
|
288
288
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
289
|
-
at
|
|
289
|
+
at 2026-01-08T01:22:23.516Z
|
|
290
290
|
</div>
|
|
291
291
|
<script src="prettify.js"></script>
|
|
292
292
|
<script>
|
|
@@ -655,7 +655,7 @@ export function extractPortFromError(error: string): number | null {
|
|
|
655
655
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
656
656
|
Code coverage generated by
|
|
657
657
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
658
|
-
at
|
|
658
|
+
at 2026-01-08T01:22:23.516Z
|
|
659
659
|
</div>
|
|
660
660
|
<script src="prettify.js"></script>
|
|
661
661
|
<script>
|