vsegments 0.1.1 → 0.1.3
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 +31 -1
- package/TESTING.md +131 -0
- package/TROUBLESHOOTING.md +256 -0
- package/coverage/clover.xml +232 -0
- package/coverage/coverage-final.json +6 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/core.js.html +868 -0
- package/coverage/lcov-report/index.html +176 -0
- package/coverage/lcov-report/index.js.html +145 -0
- package/coverage/lcov-report/models.js.html +382 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/utils.js.html +439 -0
- package/coverage/lcov-report/visualize.js.html +631 -0
- package/coverage/lcov.info +377 -0
- package/jest.config.js +15 -0
- package/package.json +9 -2
- package/scripts/pre-deploy.js +105 -0
- package/src/core.js +37 -17
package/README.md
CHANGED
|
@@ -171,7 +171,7 @@ await vs.visualize('image.jpg', result, {
|
|
|
171
171
|
### API Options
|
|
172
172
|
|
|
173
173
|
- `--api-key <key>`: Google API key (default: `GOOGLE_API_KEY` env var)
|
|
174
|
-
- `-m, --model <model>`: Model name (default: `gemini-
|
|
174
|
+
- `-m, --model <model>`: Model name (default: `gemini-3-pro-preview`)
|
|
175
175
|
- `--temperature <temp>`: Sampling temperature 0.0-1.0 (default: 0.5)
|
|
176
176
|
- `--max-objects <n>`: Maximum objects to detect (default: 25)
|
|
177
177
|
|
|
@@ -361,6 +361,35 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
361
361
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
362
362
|
5. Open a Pull Request
|
|
363
363
|
|
|
364
|
+
## Troubleshooting
|
|
365
|
+
|
|
366
|
+
### Common Issues
|
|
367
|
+
|
|
368
|
+
#### 500 Internal Server Error
|
|
369
|
+
|
|
370
|
+
If you get a 500 error from the Google Gemini API:
|
|
371
|
+
|
|
372
|
+
1. **Try a different model:**
|
|
373
|
+
```javascript
|
|
374
|
+
const vs = new VSegments({
|
|
375
|
+
apiKey: 'YOUR_API_KEY',
|
|
376
|
+
model: 'gemini-3-pro-preview' // default model
|
|
377
|
+
});
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
2. **Check your image:** Ensure it's under 4MB and in a supported format (JPG, PNG, GIF, WEBP)
|
|
381
|
+
|
|
382
|
+
3. **Wait and retry:** The API may be experiencing temporary issues
|
|
383
|
+
|
|
384
|
+
4. **Verify API key:** Make sure your API key is valid and has proper permissions
|
|
385
|
+
|
|
386
|
+
For more detailed troubleshooting, see [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
|
387
|
+
|
|
388
|
+
### Recommended Models
|
|
389
|
+
|
|
390
|
+
- **Default (High quality):** `gemini-3-pro-preview`
|
|
391
|
+
- **Alternative:** `gemini-2.5-flash`
|
|
392
|
+
|
|
364
393
|
## License
|
|
365
394
|
|
|
366
395
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
@@ -374,6 +403,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
374
403
|
|
|
375
404
|
- **Issues**: [GitHub Issues](https://github.com/nxtphaseai/vsegments/issues)
|
|
376
405
|
- **Documentation**: [GitHub README](https://github.com/nxtphaseai/vsegments#readme)
|
|
406
|
+
- **Troubleshooting**: [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
|
377
407
|
|
|
378
408
|
---
|
|
379
409
|
|
package/TESTING.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Testing Summary for vsegments
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Comprehensive test suite created for the vsegments library with **59 passing tests** covering all major components.
|
|
5
|
+
|
|
6
|
+
## Test Files Created
|
|
7
|
+
|
|
8
|
+
### 1. `test/models.test.js` (12 tests)
|
|
9
|
+
Tests for data models:
|
|
10
|
+
- **BoundingBox**: Constructor, coordinate conversion (`toAbsolute`), API response parsing
|
|
11
|
+
- **SegmentationMask**: Constructor, buffer handling
|
|
12
|
+
- **SegmentationResult**: Container functionality, length getter
|
|
13
|
+
|
|
14
|
+
### 2. `test/utils.test.js` (12 tests)
|
|
15
|
+
Tests for utility functions:
|
|
16
|
+
- **parseJson**: Clean JSON, markdown fence removal, whitespace handling
|
|
17
|
+
- **parseBoundingBoxes**: Single/multiple boxes, markdown fencing, validation
|
|
18
|
+
- **parseSegmentationMasks**: Empty arrays, validation
|
|
19
|
+
|
|
20
|
+
### 3. `test/core.test.js` (21 tests)
|
|
21
|
+
Tests for VSegments core class:
|
|
22
|
+
- **Constructor**: API key handling, environment variables, custom configurations
|
|
23
|
+
- **_getMimeType**: File extension detection (jpg, png, gif, webp)
|
|
24
|
+
- **_getSystemInstructions**: Default and custom instructions
|
|
25
|
+
- **API methods**: Method availability checks
|
|
26
|
+
|
|
27
|
+
### 4. `test/integration.test.js` (10 tests)
|
|
28
|
+
Library integration tests:
|
|
29
|
+
- Module exports verification
|
|
30
|
+
- Instance creation
|
|
31
|
+
- Cross-component integration
|
|
32
|
+
|
|
33
|
+
### 5. `test/cli.test.js` (4 tests)
|
|
34
|
+
CLI validation:
|
|
35
|
+
- File existence
|
|
36
|
+
- Shebang validation
|
|
37
|
+
- Module requirements
|
|
38
|
+
|
|
39
|
+
## Test Infrastructure
|
|
40
|
+
|
|
41
|
+
### Configuration Files
|
|
42
|
+
- **`jest.config.js`**: Jest test configuration
|
|
43
|
+
- **`test/fixtures/mockResponses.js`**: Mock API responses for testing
|
|
44
|
+
|
|
45
|
+
### Package Scripts
|
|
46
|
+
```bash
|
|
47
|
+
npm test # Run all tests
|
|
48
|
+
npm run test:watch # Run tests in watch mode
|
|
49
|
+
npm run test:coverage # Run tests with coverage report
|
|
50
|
+
npm run pre-deploy # Run full pre-deployment validation
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Coverage Summary
|
|
54
|
+
Tests cover:
|
|
55
|
+
- ✅ Data models (100%)
|
|
56
|
+
- ✅ Utility functions (parsing, validation)
|
|
57
|
+
- ✅ Core class initialization and configuration
|
|
58
|
+
- ✅ MIME type detection
|
|
59
|
+
- ✅ System instruction generation
|
|
60
|
+
- ✅ Module exports
|
|
61
|
+
- ✅ CLI structure
|
|
62
|
+
|
|
63
|
+
## Pre-Deployment Checklist
|
|
64
|
+
|
|
65
|
+
Run before deploying:
|
|
66
|
+
```bash
|
|
67
|
+
npm run pre-deploy
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This script verifies:
|
|
71
|
+
1. ✅ All tests pass
|
|
72
|
+
2. ✅ Required files present
|
|
73
|
+
3. ✅ package.json is valid
|
|
74
|
+
4. ✅ Dependencies are installed
|
|
75
|
+
5. ✅ Coverage report generates
|
|
76
|
+
|
|
77
|
+
## Test Results
|
|
78
|
+
```
|
|
79
|
+
Test Suites: 5 passed, 5 total
|
|
80
|
+
Tests: 59 passed, 59 total
|
|
81
|
+
Snapshots: 0 total
|
|
82
|
+
Time: ~0.5s
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Notes
|
|
86
|
+
|
|
87
|
+
### What's Tested
|
|
88
|
+
- ✅ Core functionality (initialization, configuration)
|
|
89
|
+
- ✅ Data models (BoundingBox, SegmentationMask, SegmentationResult)
|
|
90
|
+
- ✅ Utility functions (parsing, validation)
|
|
91
|
+
- ✅ Module exports and integration
|
|
92
|
+
- ✅ CLI structure
|
|
93
|
+
|
|
94
|
+
### What's Not Tested (Would Require Real API/Images)
|
|
95
|
+
- ⚠️ Actual API calls to Google Gemini
|
|
96
|
+
- ⚠️ Real image loading and processing
|
|
97
|
+
- ⚠️ Actual segmentation/detection operations
|
|
98
|
+
- ⚠️ Canvas rendering and visualization
|
|
99
|
+
- ⚠️ Full CLI execution with images
|
|
100
|
+
|
|
101
|
+
These would require:
|
|
102
|
+
- Integration tests with test images
|
|
103
|
+
- Mocking the Google Generative AI SDK
|
|
104
|
+
- Test API keys
|
|
105
|
+
- Canvas rendering verification
|
|
106
|
+
|
|
107
|
+
## Recommendations Before Production
|
|
108
|
+
|
|
109
|
+
1. **Run pre-deployment check**: `npm run pre-deploy`
|
|
110
|
+
2. **Review coverage**: Check `coverage/` directory after running tests
|
|
111
|
+
3. **Manual testing**: Test with real images and API keys
|
|
112
|
+
4. **Version bump**: Update version in `package.json` if needed
|
|
113
|
+
5. **Documentation**: Ensure README.md is up to date
|
|
114
|
+
|
|
115
|
+
## Quick Start for Testing
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Install dependencies (already done)
|
|
119
|
+
npm install
|
|
120
|
+
|
|
121
|
+
# Run tests
|
|
122
|
+
npm test
|
|
123
|
+
|
|
124
|
+
# Run with coverage
|
|
125
|
+
npm run test:coverage
|
|
126
|
+
|
|
127
|
+
# Pre-deployment validation
|
|
128
|
+
npm run pre-deploy
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
All tests are ready and passing! 🎉
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# Troubleshooting Guide
|
|
2
|
+
|
|
3
|
+
## Common Issues and Solutions
|
|
4
|
+
|
|
5
|
+
### 1. Google Gemini API Errors
|
|
6
|
+
|
|
7
|
+
#### Error: 500 Internal Server Error
|
|
8
|
+
```
|
|
9
|
+
GoogleGenerativeAIFetchError: [GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/...: [500 Internal Server Error]
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Possible Causes:**
|
|
13
|
+
- Temporary API outage
|
|
14
|
+
- Model name is incorrect or unavailable
|
|
15
|
+
- API quota exceeded
|
|
16
|
+
- Image is too large or in unsupported format
|
|
17
|
+
|
|
18
|
+
**Solutions:**
|
|
19
|
+
1. **Try a different model:**
|
|
20
|
+
```javascript
|
|
21
|
+
const vs = new VSegments({
|
|
22
|
+
apiKey: 'YOUR_API_KEY',
|
|
23
|
+
model: 'gemini-3-pro-preview' // Default model
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2. **Wait and retry:** The API may be experiencing temporary issues
|
|
28
|
+
|
|
29
|
+
3. **Check your API key:** Verify it's valid and has proper permissions
|
|
30
|
+
|
|
31
|
+
4. **Reduce image size:** Ensure images are under 4MB and reasonable dimensions
|
|
32
|
+
|
|
33
|
+
5. **Verify image path:** Make sure the image file exists and is readable
|
|
34
|
+
|
|
35
|
+
#### Error: 403 Forbidden
|
|
36
|
+
```
|
|
37
|
+
GoogleGenerativeAIFetchError: [403 Forbidden]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Causes:**
|
|
41
|
+
- Invalid API key
|
|
42
|
+
- API key doesn't have necessary permissions
|
|
43
|
+
- API not enabled for your project
|
|
44
|
+
|
|
45
|
+
**Solutions:**
|
|
46
|
+
1. Verify your API key is correct
|
|
47
|
+
2. Enable the Generative Language API in Google Cloud Console
|
|
48
|
+
3. Check API key restrictions in Google Cloud Console
|
|
49
|
+
|
|
50
|
+
#### Error: 429 Too Many Requests
|
|
51
|
+
```
|
|
52
|
+
GoogleGenerativeAIFetchError: [429 Too Many Requests]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Causes:**
|
|
56
|
+
- Rate limit exceeded
|
|
57
|
+
- Quota exceeded
|
|
58
|
+
|
|
59
|
+
**Solutions:**
|
|
60
|
+
1. Wait before making more requests
|
|
61
|
+
2. Implement rate limiting in your code
|
|
62
|
+
3. Upgrade your API quota if needed
|
|
63
|
+
|
|
64
|
+
### 2. Image Loading Issues
|
|
65
|
+
|
|
66
|
+
#### Error: Image file not found
|
|
67
|
+
```
|
|
68
|
+
Error: Image file not found: path/to/image.jpg
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Solutions:**
|
|
72
|
+
1. Check the file path is correct (use absolute paths)
|
|
73
|
+
2. Verify the file exists: `ls path/to/image.jpg`
|
|
74
|
+
3. Check file permissions
|
|
75
|
+
|
|
76
|
+
#### Unsupported Image Format
|
|
77
|
+
**Supported formats:** JPG, JPEG, PNG, GIF, WEBP
|
|
78
|
+
|
|
79
|
+
**Solutions:**
|
|
80
|
+
1. Convert your image to a supported format
|
|
81
|
+
2. Check the file extension is correct
|
|
82
|
+
|
|
83
|
+
### 3. Module/Package Issues
|
|
84
|
+
|
|
85
|
+
#### Warning: MODULE_TYPELESS_PACKAGE_JSON
|
|
86
|
+
```
|
|
87
|
+
(node:xxxxx) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///... is not specified
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Solution:**
|
|
91
|
+
Add to your `package.json`:
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"type": "module"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Or use CommonJS syntax:
|
|
99
|
+
```javascript
|
|
100
|
+
const VSegments = require('vsegments');
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Error: Cannot find module 'vsegments'
|
|
104
|
+
```
|
|
105
|
+
Error: Cannot find module 'vsegments'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Solutions:**
|
|
109
|
+
1. Install the package: `npm install vsegments`
|
|
110
|
+
2. Check you're in the right directory
|
|
111
|
+
3. Verify `node_modules` exists
|
|
112
|
+
|
|
113
|
+
### 4. Segmentation Issues
|
|
114
|
+
|
|
115
|
+
#### No objects detected
|
|
116
|
+
```
|
|
117
|
+
Found 0 objects
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Possible causes:**
|
|
121
|
+
- Image is too simple/blank
|
|
122
|
+
- Objects are not clear enough
|
|
123
|
+
- Prompt is too specific
|
|
124
|
+
|
|
125
|
+
**Solutions:**
|
|
126
|
+
1. Use a clearer image
|
|
127
|
+
2. Try a custom prompt
|
|
128
|
+
3. Adjust the model settings
|
|
129
|
+
|
|
130
|
+
#### Poor segmentation quality
|
|
131
|
+
|
|
132
|
+
**Solutions:**
|
|
133
|
+
1. **Use higher quality images:**
|
|
134
|
+
```javascript
|
|
135
|
+
const result = await vs.segment('image.jpg', {
|
|
136
|
+
maxSize: 2048 // Increase max size
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
2. **Adjust temperature:**
|
|
141
|
+
```javascript
|
|
142
|
+
const vs = new VSegments({
|
|
143
|
+
apiKey: 'YOUR_API_KEY',
|
|
144
|
+
temperature: 0.2 // Lower = more consistent
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
3. **Use custom prompts:**
|
|
149
|
+
```javascript
|
|
150
|
+
const result = await vs.segment('image.jpg', {
|
|
151
|
+
prompt: 'Detect and segment all people and vehicles in this image'
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 5. Performance Issues
|
|
156
|
+
|
|
157
|
+
#### Slow processing
|
|
158
|
+
|
|
159
|
+
**Solutions:**
|
|
160
|
+
1. **Reduce image size:**
|
|
161
|
+
```javascript
|
|
162
|
+
const result = await vs.segment('image.jpg', {
|
|
163
|
+
maxSize: 512 // Smaller = faster
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
2. **Use recommended model:**
|
|
168
|
+
```javascript
|
|
169
|
+
const vs = new VSegments({
|
|
170
|
+
apiKey: 'YOUR_API_KEY',
|
|
171
|
+
model: 'gemini-3-pro-preview' // Default high-quality model
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
3. **Process images in batches** rather than all at once
|
|
176
|
+
|
|
177
|
+
### 6. Canvas/Visualization Issues
|
|
178
|
+
|
|
179
|
+
#### Error: Cannot find module 'canvas'
|
|
180
|
+
```
|
|
181
|
+
Error: Cannot find module 'canvas'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Solutions:**
|
|
185
|
+
1. The `canvas` dependency requires native compilation
|
|
186
|
+
2. Install build tools:
|
|
187
|
+
- **macOS:** `xcode-select --install`
|
|
188
|
+
- **Ubuntu/Debian:** `sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev`
|
|
189
|
+
- **Windows:** Install windows-build-tools
|
|
190
|
+
|
|
191
|
+
3. Reinstall canvas: `npm install canvas --build-from-source`
|
|
192
|
+
|
|
193
|
+
## Testing Your Setup
|
|
194
|
+
|
|
195
|
+
Create a simple test script (`test-setup.js`):
|
|
196
|
+
|
|
197
|
+
```javascript
|
|
198
|
+
import VSegments from 'vsegments';
|
|
199
|
+
import fs from 'fs';
|
|
200
|
+
|
|
201
|
+
async function test() {
|
|
202
|
+
console.log('Testing vsegments setup...\n');
|
|
203
|
+
|
|
204
|
+
// 1. Test API key
|
|
205
|
+
const apiKey = process.env.GOOGLE_API_KEY;
|
|
206
|
+
if (!apiKey) {
|
|
207
|
+
console.error('❌ GOOGLE_API_KEY not set');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
console.log('✅ API key found');
|
|
211
|
+
|
|
212
|
+
// 2. Test initialization
|
|
213
|
+
try {
|
|
214
|
+
const vs = new VSegments({ apiKey });
|
|
215
|
+
console.log('✅ VSegments initialized');
|
|
216
|
+
} catch (error) {
|
|
217
|
+
console.error('❌ Initialization failed:', error.message);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// 3. Test image file
|
|
222
|
+
const imagePath = 'test-image.jpg';
|
|
223
|
+
if (!fs.existsSync(imagePath)) {
|
|
224
|
+
console.error(`❌ Test image not found: ${imagePath}`);
|
|
225
|
+
console.log(' Create a test-image.jpg to continue');
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
console.log('✅ Test image found');
|
|
229
|
+
|
|
230
|
+
console.log('\n✅ Setup looks good! Try running your script.');
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
test().catch(console.error);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Getting Help
|
|
237
|
+
|
|
238
|
+
If you continue to experience issues:
|
|
239
|
+
|
|
240
|
+
1. **Check the examples:** Review the example scripts in the `examples/` directory
|
|
241
|
+
2. **Review the API documentation:** [Google Gemini API Docs](https://ai.google.dev/docs)
|
|
242
|
+
3. **File an issue:** [GitHub Issues](https://github.com/nxtphaseai/node_vsegments/issues)
|
|
243
|
+
4. **Check API status:** [Google Cloud Status Dashboard](https://status.cloud.google.com/)
|
|
244
|
+
|
|
245
|
+
## Recommended Models (as of December 2025)
|
|
246
|
+
|
|
247
|
+
- **Default (Best quality):** `gemini-3-pro-preview`
|
|
248
|
+
- **Alternative:** `gemini-2.5-flash`
|
|
249
|
+
|
|
250
|
+
Update your code:
|
|
251
|
+
```javascript
|
|
252
|
+
const vs = new VSegments({
|
|
253
|
+
apiKey: 'YOUR_API_KEY',
|
|
254
|
+
model: 'gemini-3-pro-preview' // Default
|
|
255
|
+
});
|
|
256
|
+
```
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<coverage generated="1764938703619" clover="3.2.0">
|
|
3
|
+
<project timestamp="1764938703620" name="All files">
|
|
4
|
+
<metrics statements="211" coveredstatements="82" conditionals="73" coveredconditionals="24" methods="24" coveredmethods="12" elements="308" coveredelements="118" complexity="0" loc="211" ncloc="211" packages="1" files="5" classes="5"/>
|
|
5
|
+
<file name="core.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/core.js">
|
|
6
|
+
<metrics statements="63" coveredstatements="23" conditionals="35" coveredconditionals="15" methods="7" coveredmethods="3"/>
|
|
7
|
+
<line num="5" count="2" type="stmt"/>
|
|
8
|
+
<line num="6" count="2" type="stmt"/>
|
|
9
|
+
<line num="7" count="2" type="stmt"/>
|
|
10
|
+
<line num="8" count="2" type="stmt"/>
|
|
11
|
+
<line num="9" count="2" type="stmt"/>
|
|
12
|
+
<line num="15" count="2" type="stmt"/>
|
|
13
|
+
<line num="27" count="23" type="cond" truecount="2" falsecount="0"/>
|
|
14
|
+
<line num="29" count="23" type="cond" truecount="2" falsecount="0"/>
|
|
15
|
+
<line num="30" count="1" type="stmt"/>
|
|
16
|
+
<line num="35" count="22" type="cond" truecount="2" falsecount="0"/>
|
|
17
|
+
<line num="36" count="22" type="cond" truecount="2" falsecount="0"/>
|
|
18
|
+
<line num="37" count="22" type="cond" truecount="2" falsecount="0"/>
|
|
19
|
+
<line num="40" count="22" type="stmt"/>
|
|
20
|
+
<line num="43" count="22" type="stmt"/>
|
|
21
|
+
<line num="49" count="22" type="stmt"/>
|
|
22
|
+
<line num="63" count="0" type="stmt"/>
|
|
23
|
+
<line num="64" count="0" type="stmt"/>
|
|
24
|
+
<line num="65" count="0" type="stmt"/>
|
|
25
|
+
<line num="67" count="0" type="stmt"/>
|
|
26
|
+
<line num="81" count="9" type="stmt"/>
|
|
27
|
+
<line num="82" count="9" type="stmt"/>
|
|
28
|
+
<line num="89" count="9" type="cond" truecount="2" falsecount="0"/>
|
|
29
|
+
<line num="98" count="3" type="stmt"/>
|
|
30
|
+
<line num="100" count="3" type="cond" truecount="2" falsecount="0"/>
|
|
31
|
+
<line num="101" count="1" type="stmt"/>
|
|
32
|
+
<line num="104" count="3" type="stmt"/>
|
|
33
|
+
<line num="121" count="0" type="stmt"/>
|
|
34
|
+
<line num="124" count="0" type="stmt"/>
|
|
35
|
+
<line num="127" count="0" type="stmt"/>
|
|
36
|
+
<line num="135" count="0" type="stmt"/>
|
|
37
|
+
<line num="136" count="0" type="stmt"/>
|
|
38
|
+
<line num="143" count="0" type="stmt"/>
|
|
39
|
+
<line num="144" count="0" type="stmt"/>
|
|
40
|
+
<line num="146" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
41
|
+
<line num="147" count="0" type="stmt"/>
|
|
42
|
+
<line num="151" count="0" type="stmt"/>
|
|
43
|
+
<line num="155" count="0" type="stmt"/>
|
|
44
|
+
<line num="157" count="0" type="stmt"/>
|
|
45
|
+
<line num="172" count="0" type="stmt"/>
|
|
46
|
+
<line num="175" count="0" type="stmt"/>
|
|
47
|
+
<line num="178" count="0" type="stmt"/>
|
|
48
|
+
<line num="179" count="0" type="stmt"/>
|
|
49
|
+
<line num="180" count="0" type="stmt"/>
|
|
50
|
+
<line num="183" count="0" type="stmt"/>
|
|
51
|
+
<line num="190" count="0" type="stmt"/>
|
|
52
|
+
<line num="191" count="0" type="stmt"/>
|
|
53
|
+
<line num="198" count="0" type="stmt"/>
|
|
54
|
+
<line num="199" count="0" type="stmt"/>
|
|
55
|
+
<line num="201" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
56
|
+
<line num="202" count="0" type="stmt"/>
|
|
57
|
+
<line num="206" count="0" type="stmt"/>
|
|
58
|
+
<line num="210" count="0" type="stmt"/>
|
|
59
|
+
<line num="211" count="0" type="stmt"/>
|
|
60
|
+
<line num="213" count="0" type="stmt"/>
|
|
61
|
+
<line num="233" count="0" type="stmt"/>
|
|
62
|
+
<line num="236" count="0" type="stmt"/>
|
|
63
|
+
<line num="239" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
64
|
+
<line num="240" count="0" type="stmt"/>
|
|
65
|
+
<line num="246" count="0" type="stmt"/>
|
|
66
|
+
<line num="253" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
67
|
+
<line num="254" count="0" type="stmt"/>
|
|
68
|
+
<line num="257" count="0" type="stmt"/>
|
|
69
|
+
<line num="261" count="2" type="stmt"/>
|
|
70
|
+
</file>
|
|
71
|
+
<file name="index.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/index.js">
|
|
72
|
+
<metrics statements="8" coveredstatements="8" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
|
|
73
|
+
<line num="12" count="1" type="stmt"/>
|
|
74
|
+
<line num="13" count="1" type="stmt"/>
|
|
75
|
+
<line num="15" count="1" type="stmt"/>
|
|
76
|
+
<line num="16" count="1" type="stmt"/>
|
|
77
|
+
<line num="17" count="1" type="stmt"/>
|
|
78
|
+
<line num="18" count="1" type="stmt"/>
|
|
79
|
+
<line num="19" count="1" type="stmt"/>
|
|
80
|
+
<line num="20" count="1" type="stmt"/>
|
|
81
|
+
</file>
|
|
82
|
+
<file name="models.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/models.js">
|
|
83
|
+
<metrics statements="23" coveredstatements="23" conditionals="2" coveredconditionals="2" methods="6" coveredmethods="6"/>
|
|
84
|
+
<line num="15" count="20" type="stmt"/>
|
|
85
|
+
<line num="16" count="20" type="stmt"/>
|
|
86
|
+
<line num="17" count="20" type="stmt"/>
|
|
87
|
+
<line num="18" count="20" type="stmt"/>
|
|
88
|
+
<line num="19" count="20" type="stmt"/>
|
|
89
|
+
<line num="29" count="3" type="stmt"/>
|
|
90
|
+
<line num="30" count="3" type="stmt"/>
|
|
91
|
+
<line num="31" count="3" type="stmt"/>
|
|
92
|
+
<line num="32" count="3" type="stmt"/>
|
|
93
|
+
<line num="33" count="3" type="stmt"/>
|
|
94
|
+
<line num="42" count="8" type="stmt"/>
|
|
95
|
+
<line num="43" count="8" type="stmt"/>
|
|
96
|
+
<line num="64" count="4" type="stmt"/>
|
|
97
|
+
<line num="65" count="4" type="stmt"/>
|
|
98
|
+
<line num="66" count="4" type="stmt"/>
|
|
99
|
+
<line num="67" count="4" type="stmt"/>
|
|
100
|
+
<line num="68" count="4" type="stmt"/>
|
|
101
|
+
<line num="69" count="4" type="stmt"/>
|
|
102
|
+
<line num="81" count="6" type="stmt"/>
|
|
103
|
+
<line num="82" count="6" type="stmt"/>
|
|
104
|
+
<line num="83" count="6" type="stmt"/>
|
|
105
|
+
<line num="91" count="3" type="stmt"/>
|
|
106
|
+
<line num="95" count="4" type="stmt"/>
|
|
107
|
+
</file>
|
|
108
|
+
<file name="utils.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/utils.js">
|
|
109
|
+
<metrics statements="51" coveredstatements="23" conditionals="12" coveredconditionals="7" methods="3" coveredmethods="3"/>
|
|
110
|
+
<line num="5" count="3" type="stmt"/>
|
|
111
|
+
<line num="6" count="3" type="stmt"/>
|
|
112
|
+
<line num="14" count="12" type="stmt"/>
|
|
113
|
+
<line num="15" count="12" type="stmt"/>
|
|
114
|
+
<line num="16" count="13" type="cond" truecount="2" falsecount="0"/>
|
|
115
|
+
<line num="17" count="4" type="stmt"/>
|
|
116
|
+
<line num="18" count="4" type="stmt"/>
|
|
117
|
+
<line num="19" count="4" type="stmt"/>
|
|
118
|
+
<line num="22" count="12" type="stmt"/>
|
|
119
|
+
<line num="31" count="5" type="stmt"/>
|
|
120
|
+
<line num="32" count="5" type="stmt"/>
|
|
121
|
+
<line num="34" count="5" type="stmt"/>
|
|
122
|
+
<line num="35" count="5" type="stmt"/>
|
|
123
|
+
<line num="36" count="8" type="cond" truecount="2" falsecount="0"/>
|
|
124
|
+
<line num="37" count="7" type="stmt"/>
|
|
125
|
+
<line num="41" count="5" type="stmt"/>
|
|
126
|
+
<line num="52" count="2" type="stmt"/>
|
|
127
|
+
<line num="53" count="2" type="stmt"/>
|
|
128
|
+
<line num="55" count="2" type="stmt"/>
|
|
129
|
+
<line num="57" count="2" type="stmt"/>
|
|
130
|
+
<line num="58" count="3" type="cond" truecount="3" falsecount="1"/>
|
|
131
|
+
<line num="60" count="0" type="stmt"/>
|
|
132
|
+
<line num="61" count="0" type="stmt"/>
|
|
133
|
+
<line num="64" count="0" type="stmt"/>
|
|
134
|
+
<line num="65" count="0" type="stmt"/>
|
|
135
|
+
<line num="66" count="0" type="stmt"/>
|
|
136
|
+
<line num="67" count="0" type="stmt"/>
|
|
137
|
+
<line num="69" count="0" type="stmt"/>
|
|
138
|
+
<line num="70" count="0" type="stmt"/>
|
|
139
|
+
<line num="73" count="0" type="stmt"/>
|
|
140
|
+
<line num="74" count="0" type="stmt"/>
|
|
141
|
+
<line num="77" count="0" type="stmt"/>
|
|
142
|
+
<line num="78" count="0" type="stmt"/>
|
|
143
|
+
<line num="79" count="0" type="stmt"/>
|
|
144
|
+
<line num="80" count="0" type="stmt"/>
|
|
145
|
+
<line num="83" count="0" type="stmt"/>
|
|
146
|
+
<line num="84" count="0" type="stmt"/>
|
|
147
|
+
<line num="86" count="0" type="stmt"/>
|
|
148
|
+
<line num="87" count="0" type="stmt"/>
|
|
149
|
+
<line num="91" count="0" type="stmt"/>
|
|
150
|
+
<line num="93" count="0" type="stmt"/>
|
|
151
|
+
<line num="94" count="0" type="stmt"/>
|
|
152
|
+
<line num="95" count="0" type="stmt"/>
|
|
153
|
+
<line num="96" count="0" type="stmt"/>
|
|
154
|
+
<line num="97" count="0" type="stmt"/>
|
|
155
|
+
<line num="99" count="0" type="cond" truecount="0" falsecount="4"/>
|
|
156
|
+
<line num="100" count="0" type="stmt"/>
|
|
157
|
+
<line num="101" count="0" type="stmt"/>
|
|
158
|
+
<line num="106" count="0" type="stmt"/>
|
|
159
|
+
<line num="111" count="2" type="stmt"/>
|
|
160
|
+
<line num="114" count="3" type="stmt"/>
|
|
161
|
+
</file>
|
|
162
|
+
<file name="visualize.js" path="/Users/marcokotrotsos/NXTPHASE/visualsegmenting/node_vsegments/src/visualize.js">
|
|
163
|
+
<metrics statements="66" coveredstatements="5" conditionals="24" coveredconditionals="0" methods="8" coveredmethods="0"/>
|
|
164
|
+
<line num="5" count="2" type="stmt"/>
|
|
165
|
+
<line num="6" count="2" type="stmt"/>
|
|
166
|
+
<line num="7" count="2" type="stmt"/>
|
|
167
|
+
<line num="10" count="2" type="stmt"/>
|
|
168
|
+
<line num="30" count="0" type="stmt"/>
|
|
169
|
+
<line num="32" count="0" type="stmt"/>
|
|
170
|
+
<line num="33" count="0" type="stmt"/>
|
|
171
|
+
<line num="34" count="0" type="stmt"/>
|
|
172
|
+
<line num="36" count="0" type="stmt"/>
|
|
173
|
+
<line num="37" count="0" type="stmt"/>
|
|
174
|
+
<line num="39" count="0" type="stmt"/>
|
|
175
|
+
<line num="40" count="0" type="stmt"/>
|
|
176
|
+
<line num="41" count="0" type="stmt"/>
|
|
177
|
+
<line num="44" count="0" type="stmt"/>
|
|
178
|
+
<line num="45" count="0" type="stmt"/>
|
|
179
|
+
<line num="48" count="0" type="cond" truecount="0" falsecount="4"/>
|
|
180
|
+
<line num="49" count="0" type="stmt"/>
|
|
181
|
+
<line num="50" count="0" type="stmt"/>
|
|
182
|
+
<line num="54" count="0" type="stmt"/>
|
|
183
|
+
<line num="67" count="0" type="stmt"/>
|
|
184
|
+
<line num="68" count="0" type="stmt"/>
|
|
185
|
+
<line num="69" count="0" type="stmt"/>
|
|
186
|
+
<line num="72" count="0" type="stmt"/>
|
|
187
|
+
<line num="73" count="0" type="stmt"/>
|
|
188
|
+
<line num="74" count="0" type="stmt"/>
|
|
189
|
+
<line num="75" count="0" type="stmt"/>
|
|
190
|
+
<line num="78" count="0" type="stmt"/>
|
|
191
|
+
<line num="79" count="0" type="stmt"/>
|
|
192
|
+
<line num="80" count="0" type="cond" truecount="0" falsecount="2"/>
|
|
193
|
+
<line num="81" count="0" type="stmt"/>
|
|
194
|
+
<line num="82" count="0" type="stmt"/>
|
|
195
|
+
<line num="84" count="0" type="stmt"/>
|
|
196
|
+
<line num="85" count="0" type="stmt"/>
|
|
197
|
+
<line num="86" count="0" type="stmt"/>
|
|
198
|
+
<line num="90" count="0" type="stmt"/>
|
|
199
|
+
<line num="106" count="0" type="stmt"/>
|
|
200
|
+
<line num="108" count="0" type="stmt"/>
|
|
201
|
+
<line num="109" count="0" type="stmt"/>
|
|
202
|
+
<line num="110" count="0" type="stmt"/>
|
|
203
|
+
<line num="113" count="0" type="stmt"/>
|
|
204
|
+
<line num="114" count="0" type="stmt"/>
|
|
205
|
+
<line num="115" count="0" type="stmt"/>
|
|
206
|
+
<line num="119" count="0" type="stmt"/>
|
|
207
|
+
<line num="120" count="0" type="stmt"/>
|
|
208
|
+
<line num="122" count="0" type="stmt"/>
|
|
209
|
+
<line num="123" count="0" type="stmt"/>
|
|
210
|
+
<line num="126" count="0" type="stmt"/>
|
|
211
|
+
<line num="127" count="0" type="stmt"/>
|
|
212
|
+
<line num="130" count="0" type="cond" truecount="0" falsecount="4"/>
|
|
213
|
+
<line num="131" count="0" type="stmt"/>
|
|
214
|
+
<line num="132" count="0" type="stmt"/>
|
|
215
|
+
<line num="136" count="0" type="stmt"/>
|
|
216
|
+
<line num="146" count="0" type="stmt"/>
|
|
217
|
+
<line num="149" count="0" type="stmt"/>
|
|
218
|
+
<line num="150" count="0" type="stmt"/>
|
|
219
|
+
<line num="152" count="0" type="cond" truecount="0" falsecount="4"/>
|
|
220
|
+
<line num="153" count="0" type="stmt"/>
|
|
221
|
+
<line num="154" count="0" type="stmt"/>
|
|
222
|
+
<line num="155" count="0" type="stmt"/>
|
|
223
|
+
<line num="159" count="0" type="stmt"/>
|
|
224
|
+
<line num="160" count="0" type="stmt"/>
|
|
225
|
+
<line num="161" count="0" type="stmt"/>
|
|
226
|
+
<line num="163" count="0" type="stmt"/>
|
|
227
|
+
<line num="172" count="0" type="stmt"/>
|
|
228
|
+
<line num="173" count="0" type="stmt"/>
|
|
229
|
+
<line num="176" count="2" type="stmt"/>
|
|
230
|
+
</file>
|
|
231
|
+
</project>
|
|
232
|
+
</coverage>
|