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 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-flash-latest`)
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>