From 4f6420519ac5c5f8d7dcb1ed419ae70f90896080 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 22:53:55 +0530 Subject: [PATCH 01/20] Implement ride management functions in rideController --- ml/controllers/rider/rideController.js | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 ml/controllers/rider/rideController.js diff --git a/ml/controllers/rider/rideController.js b/ml/controllers/rider/rideController.js new file mode 100644 index 00000000..070311cd --- /dev/null +++ b/ml/controllers/rider/rideController.js @@ -0,0 +1,53 @@ +import { calculateDistance } from '../../utils/math.js'; +import demandService from '../../services/demandService.js'; + +let rides = []; + +const createRide = (rideData) => { + if (!rideData.pickup || !rideData.destination) { + throw new Error('Required fields missing'); + } + const newRide = { ...rideData, id: Date.now(), status: 'pending' }; + rides.push(newRide); + + // Log demand record for the pickup zone + try { + demandService.storeDemandData({ + zone: rideData.pickup, // Assuming pickup is a zone name or coordinates string + timestamp: new Date().toISOString(), + demand: 1 + }); + } catch (e) { + console.error('Failed to log demand data:', e.message); + } + + return newRide; +}; + +const getRideById = (id) => { + return rides.find(r => r.id === id); +}; + +const updateRide = (id, updateData) => { + const ride = getRideById(id); + if (!ride) return null; + Object.assign(ride, updateData); + return ride; +}; + +const deleteRide = (id) => { + const index = rides.findIndex(r => r.id === id); + if (index === -1) return false; + rides.splice(index, 1); + return true; +}; + +const getRideStats = () => { + return { + totalRides: rides.length, + activeRides: rides.filter(r => r.status === 'active').length, + completedRides: rides.filter(r => r.status === 'completed').length + }; +}; + +export { createRide, getRideById, updateRide, deleteRide, getRideStats, rides }; From 6b742f136d2bb01f2f8c31c5a0e34d928739cdca Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:02:20 +0530 Subject: [PATCH 02/20] Add coverage report HTML for rider controller --- ml/coverage/ml/controllers/rider/index.html | 116 ++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 ml/coverage/ml/controllers/rider/index.html diff --git a/ml/coverage/ml/controllers/rider/index.html b/ml/coverage/ml/controllers/rider/index.html new file mode 100644 index 00000000..66f08595 --- /dev/null +++ b/ml/coverage/ml/controllers/rider/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for ml/controllers/rider + + + + + + + + + +
+
+

All files ml/controllers/rider

+
+ +
+ 96.22% + Statements + 51/53 +
+ + +
+ 81.25% + Branches + 13/16 +
+ + +
+ 100% + Functions + 5/5 +
+ + +
+ 96.22% + Lines + 51/53 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
rideController.js +
+
96.22%51/5381.25%13/16100%5/596.22%51/53
+
+
+
+ + + + + + + + From 346d58604cd28cb2ecc8a4255fa99471fee0dd6c Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:03:50 +0530 Subject: [PATCH 03/20] Add HTML coverage report for rideController.js --- .../controllers/rider/rideController.js.html | 244 ++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 ml/coverage/ml/controllers/rider/rideController.js.html diff --git a/ml/coverage/ml/controllers/rider/rideController.js.html b/ml/coverage/ml/controllers/rider/rideController.js.html new file mode 100644 index 00000000..dcd5e88c --- /dev/null +++ b/ml/coverage/ml/controllers/rider/rideController.js.html @@ -0,0 +1,244 @@ + + + + + + Code coverage report for ml/controllers/rider/rideController.js + + + + + + + + + +
+
+

All files / ml/controllers/rider rideController.js

+
+ +
+ 96.22% + Statements + 51/53 +
+ + +
+ 81.25% + Branches + 13/16 +
+ + +
+ 100% + Functions + 5/5 +
+ + +
+ 96.22% + Lines + 51/53 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +541x +1x +1x +1x +1x +1x +6x +1x +1x +5x +5x +5x +5x +5x +5x +5x +5x +5x +5x +6x +  +  +5x +5x +5x +1x +1x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { calculateDistance } from '../../utils/math.js';
+import demandService from '../../services/demandService.js';
+ 
+let rides = [];
+ 
+const createRide = (rideData) => {
+    if (!rideData.pickup || !rideData.destination) {
+        throw new Error('Required fields missing');
+    }
+    const newRide = { ...rideData, id: Date.now(), status: 'pending' };
+    rides.push(newRide);
+    
+    // Log demand record for the pickup zone
+    try {
+        demandService.storeDemandData({
+            zone: rideData.pickup, // Assuming pickup is a zone name or coordinates string
+            timestamp: new Date().toISOString(),
+            demand: 1
+        });
+    } catch (e) {
+        console.error('Failed to log demand data:', e.message);
+    }
+ 
+    return newRide;
+};
+ 
+const getRideById = (id) => {
+    return rides.find(r => r.id === id);
+};
+ 
+const updateRide = (id, updateData) => {
+    const ride = getRideById(id);
+    if (!ride) return null;
+    Object.assign(ride, updateData);
+    return ride;
+};
+ 
+const deleteRide = (id) => {
+    const index = rides.findIndex(r => r.id === id);
+    if (index === -1) return false;
+    rides.splice(index, 1);
+    return true;
+};
+ 
+const getRideStats = () => {
+    return {
+        totalRides: rides.length,
+        activeRides: rides.filter(r => r.status === 'active').length,
+        completedRides: rides.filter(r => r.status === 'completed').length
+    };
+};
+ 
+export { createRide, getRideById, updateRide, deleteRide, getRideStats, rides };
+ 
+ +
+
+ + + + + + + + From 392430a6788c697e1766e6b3cf84040720c9d238 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:05:50 +0530 Subject: [PATCH 04/20] Add files via upload --- ml/coverage/ml/index.html | 116 +++++++ ml/coverage/ml/script.js.html | 589 ++++++++++++++++++++++++++++++++++ 2 files changed, 705 insertions(+) create mode 100644 ml/coverage/ml/index.html create mode 100644 ml/coverage/ml/script.js.html diff --git a/ml/coverage/ml/index.html b/ml/coverage/ml/index.html new file mode 100644 index 00000000..64e7e0c2 --- /dev/null +++ b/ml/coverage/ml/index.html @@ -0,0 +1,116 @@ + + + + + + Code coverage report for ml + + + + + + + + + +
+
+

All files ml

+
+ +
+ 0% + Statements + 0/168 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/168 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
script.js +
+
0%0/1680%0/10%0/10%0/168
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/coverage/ml/script.js.html b/ml/coverage/ml/script.js.html new file mode 100644 index 00000000..844cb3f0 --- /dev/null +++ b/ml/coverage/ml/script.js.html @@ -0,0 +1,589 @@ + + + + + + Code coverage report for ml/script.js + + + + + + + + + +
+
+

All files / ml script.js

+
+ +
+ 0% + Statements + 0/168 +
+ + +
+ 0% + Branches + 0/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 0% + Lines + 0/168 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
const drivers = [
+    { name: 'Rahul S.', lat: 12.9720, lng: 77.5950, rating: 4.8 },
+    { name: 'Amit K.', lat: 12.9800, lng: 77.6000, rating: 4.9 },
+    { name: 'Sriya M.', lat: 12.9650, lng: 77.5850, rating: 4.7 },
+    { name: 'Vikram J.', lat: 13.0000, lng: 77.6200, rating: 4.6 }
+];
+
+// Haversine Formula for Distance Calculation
+function calculateDistance(lat1, lon1, lat2, lon2) {
+    const R = 6371; // Earth's radius in km
+    const dLat = (lat2 - lat1) * Math.PI / 180;
+    const dLon = (lon2 - lon1) * Math.PI / 180;
+    const a =
+        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
+        Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
+        Math.sin(dLon / 2) * Math.sin(dLon / 2);
+    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+    return R * c;
+}
+
+// Nearest Neighbor Search for Driver
+function findNearestDriver(userLat, userLng) {
+    let nearest = null;
+    let minDistance = Infinity;
+
+    drivers.forEach(driver => {
+        const dist = calculateDistance(userLat, userLng, driver.lat, driver.lng);
+        if (dist < minDistance) {
+            minDistance = dist;
+            nearest = driver;
+        }
+    });
+
+    return { driver: nearest, distance: minDistance };
+}
+
+// Export for tests if in Node environment
+if (typeof module !== 'undefined' && module.exports) {
+    module.exports = { calculateDistance, findNearestDriver, drivers };
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+    const bookBtn = document.getElementById('book-btn');
+    const resultsArea = document.getElementById('results');
+    const modeCards = document.querySelectorAll('.mode-card');
+    const pickupInput = document.getElementById('pickup');
+    const destInput = document.getElementById('destination');
+    const toast = document.getElementById('toast');
+
+    // Initialize Map
+    const map = L.map('map').setView([12.9716, 77.5946], 12);
+    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+        attribution: '&copy; OpenStreetMap contributors'
+    }).addTo(map);
+
+    let pickupMarker, destMarker, routeLine;
+    let heatLayer;
+    let adminMode = false;
+
+    const adminToggle = document.getElementById('admin-toggle');
+    const adminDashboard = document.getElementById('admin-dashboard');
+
+    function toggleAdminMode() {
+        adminMode = !adminMode;
+        if (adminMode) {
+            adminToggle.classList.add('active');
+            adminDashboard.classList.remove('hidden');
+            showHeatmap();
+            updateDashboard();
+        } else {
+            adminToggle.classList.remove('active');
+            adminDashboard.classList.add('hidden');
+            if (heatLayer) map.removeLayer(heatLayer);
+        }
+    }
+
+    adminToggle.addEventListener('click', (e) => {
+        e.preventDefault();
+        toggleAdminMode();
+    });
+
+    function showHeatmap() {
+        if (heatLayer) map.removeLayer(heatLayer);
+        
+        // Mocking some demand points for visualization
+        const heatPoints = [
+            [12.9716, 77.5946, 0.8],
+            [12.9800, 77.6000, 0.6],
+            [12.9650, 77.5850, 0.9],
+            [13.0000, 77.6200, 0.4]
+        ];
+
+        heatLayer = L.heatLayer(heatPoints, { radius: 25, blur: 15, maxZoom: 17 }).addTo(map);
+    }
+
+    function updateDashboard() {
+        document.getElementById('peak-demand-val').textContent = '145 units';
+        document.getElementById('efficiency-val').textContent = '88%';
+        
+        const alerts = document.getElementById('opt-alerts');
+        alerts.innerHTML = `
+            <div class="alert warn">
+                <i class="fas fa-exclamation-triangle"></i>
+                <span>High demand expected in Koramangala. 3 drivers recommended to relocate.</span>
+            </div>
+        `;
+    }
+
+    function updateMap(pCoords, dCoords) {
+        // Clear old markers
+        if (pickupMarker) map.removeLayer(pickupMarker);
+        if (destMarker) map.removeLayer(destMarker);
+        if (routeLine) map.removeLayer(routeLine);
+
+        // Add New Markers
+        pickupMarker = L.marker(pCoords).addTo(map).bindPopup('Pickup').openPopup();
+        destMarker = L.marker(dCoords).addTo(map).bindPopup('Destination');
+
+        // Draw Route (Simple Line)
+        routeLine = L.polyline([pCoords, dCoords], { color: '#00ff88', weight: 4, opacity: 0.8 }).addTo(map);
+
+        // Fit map to show both points
+        const group = new L.featureGroup([pickupMarker, destMarker]);
+        map.fitBounds(group.getBounds().pad(0.1));
+    }
+
+    bookBtn.addEventListener('click', () => {
+        const pickupVal = pickupInput.value.trim();
+        const destVal = destInput.value.trim();
+
+        if (!pickupVal || !destVal) {
+            alert('Please enter both pickup and destination coordinates.');
+            return;
+        }
+
+        // Parse coordinates
+        let pCoords = pickupVal.split(',').map(n => parseFloat(n.trim()));
+        let dCoords = destVal.split(',').map(n => parseFloat(n.trim()));
+
+        if (isNaN(pCoords[0]) || isNaN(pCoords[1]) || isNaN(dCoords[0]) || isNaN(dCoords[1])) {
+            alert('Invalid coordinate format. Please use: lat, lng');
+            return;
+        }
+
+        updateMap(pCoords, dCoords);
+
+        bookBtn.textContent = 'Finding Driver...';
+        bookBtn.disabled = true;
+
+        // Simulate Network Latency
+        setTimeout(() => {
+            const distance = calculateDistance(pCoords[0], pCoords[1], dCoords[0], dCoords[1]);
+            const { driver, distance: driverDist } = findNearestDriver(pCoords[0], pCoords[1]);
+
+            document.getElementById('distance-val').textContent = `${distance.toFixed(2)} km`;
+            document.getElementById('driver-val').textContent = `${driver.name} (⭐${driver.rating})`;
+            document.getElementById('eta-val').textContent = `${Math.ceil(driverDist * 2 + 2)} mins`;
+
+            resultsArea.classList.remove('hidden');
+            bookBtn.textContent = 'Book Now';
+            bookBtn.disabled = false;
+
+            // Show Toast
+            toast.classList.remove('hidden');
+            setTimeout(() => toast.classList.add('hidden'), 3000);
+        }, 1500);
+    });
+});
+ +
+
+ + + + + + + + \ No newline at end of file From 57a008e94ecc3ef3fb2d3c04fd6f0f39728e2113 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:06:34 +0530 Subject: [PATCH 05/20] Create services --- ml/coverage/ml/services | 1 + 1 file changed, 1 insertion(+) create mode 100644 ml/coverage/ml/services diff --git a/ml/coverage/ml/services b/ml/coverage/ml/services new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ml/coverage/ml/services @@ -0,0 +1 @@ + From 161a8a879bffed68e6bdd842890d59d9a49f9b16 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:08:13 +0530 Subject: [PATCH 06/20] Delete ml/coverage/ml/services --- ml/coverage/ml/services | 1 - 1 file changed, 1 deletion(-) delete mode 100644 ml/coverage/ml/services diff --git a/ml/coverage/ml/services b/ml/coverage/ml/services deleted file mode 100644 index 8b137891..00000000 --- a/ml/coverage/ml/services +++ /dev/null @@ -1 +0,0 @@ - From 6a55fbb1c506c64ecf96695d1351338b38d0afc6 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:09:46 +0530 Subject: [PATCH 07/20] Add HTML code coverage report for ml/services --- ml/coverage/ml/services/index.html | 161 +++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 ml/coverage/ml/services/index.html diff --git a/ml/coverage/ml/services/index.html b/ml/coverage/ml/services/index.html new file mode 100644 index 00000000..60c1f700 --- /dev/null +++ b/ml/coverage/ml/services/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for ml/services + + + + + + + + + +
+
+

All files ml/services

+
+ +
+ 98.54% + Statements + 270/274 +
+ + +
+ 86% + Branches + 43/50 +
+ + +
+ 100% + Functions + 17/17 +
+ + +
+ 98.54% + Lines + 270/274 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
demandService.js +
+
97.43%76/7894.11%16/17100%6/697.43%76/78
optimizationService.js +
+
100%85/8575%12/16100%4/4100%85/85
predictionService.js +
+
97.84%91/9384.61%11/13100%4/497.84%91/93
socketService.js +
+
100%18/18100%4/4100%3/3100%18/18
+
+
+
+ + + + + + + + From 66c33b407c529f3d881c01d936edea1641fbbb27 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:10:16 +0530 Subject: [PATCH 08/20] Add files via upload --- ml/coverage/ml/services/demandService.js.html | 319 +++++++++++++++ .../ml/services/optimizationService.js.html | 340 ++++++++++++++++ .../ml/services/predictionService.js.html | 364 ++++++++++++++++++ ml/coverage/ml/services/socketService.js.html | 139 +++++++ 4 files changed, 1162 insertions(+) create mode 100644 ml/coverage/ml/services/demandService.js.html create mode 100644 ml/coverage/ml/services/optimizationService.js.html create mode 100644 ml/coverage/ml/services/predictionService.js.html create mode 100644 ml/coverage/ml/services/socketService.js.html diff --git a/ml/coverage/ml/services/demandService.js.html b/ml/coverage/ml/services/demandService.js.html new file mode 100644 index 00000000..f06a30d2 --- /dev/null +++ b/ml/coverage/ml/services/demandService.js.html @@ -0,0 +1,319 @@ + + + + + + Code coverage report for ml/services/demandService.js + + + + + + + + + +
+
+

All files / ml/services demandService.js

+
+ +
+ 97.43% + Statements + 76/78 +
+ + +
+ 94.11% + Branches + 16/17 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 97.43% + Lines + 76/78 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +791x +1x +1x +1x +1x +4x +4x +1x +1x +1x +1x +1x +1x +62x +62x +62x +62x +62x +62x +62x +62x +62x +1x +1x +1x +1x +1x +1x +1x +62x +1x +1x +62x +  +  +62x +1x +1x +62x +1x +1x +1x +1x +1x +1x +1x +1x +1x +3x +3x +1x +1x +1x +1x +1x +1x +1x +1x +1x +3x +2x +2x +3x +1x +1x +1x +1x +1x +1x +1x +1x +13x +13x +1x +1x +1x +1x +1x + 
/**
+ * Service for managing ride demand data.
+ */
+class DemandService {
+    constructor() {
+        this.demandData = []; // Array of { zone, timestamp, demand, status }
+    }
+ 
+    /**
+     * Stores a demand record after validation.
+     * @param {Object} data - { zone, timestamp, demand }
+     */
+    storeDemandData(data) {
+        this.validateDemandData(data);
+        const record = {
+            ...data,
+            id: Date.now() + Math.random().toString(36).substr(2, 9),
+            loggedAt: new Date().toISOString()
+        };
+        this.demandData.push(record);
+        return record;
+    }
+ 
+    /**
+     * Validates demand data.
+     * @param {Object} data 
+     * @throws {Error} if validation fails
+     */
+    validateDemandData(data) {
+        if (!data.zone || typeof data.zone !== 'string') {
+            throw new Error('Invalid zone: Zone is required and must be a string');
+        }
+        if (!data.timestamp || isNaN(new Date(data.timestamp).getTime())) {
+            throw new Error('Invalid timestamp: A valid date/time is required');
+        }
+        if (typeof data.demand !== 'number' || data.demand < 0) {
+            throw new Error('Invalid demand: Demand must be a non-negative number');
+        }
+    }
+ 
+    /**
+     * Gets historical demand for a specific zone and time range.
+     * @param {string} zone 
+     * @param {number} startTime - unix timestamp
+     * @param {number} endTime - unix timestamp
+     */
+    getHistoricalDemand(zone, startTime, endTime) {
+        return this.demandData.filter(d => {
+            const time = new Date(d.timestamp).getTime();
+            return d.zone === zone && time >= startTime && time <= endTime;
+        });
+    }
+ 
+    /**
+     * Aggregates demand by zone.
+     */
+    getAggregatedDemand() {
+        const aggregation = {};
+        this.demandData.forEach(d => {
+            if (!aggregation[d.zone]) {
+                aggregation[d.zone] = 0;
+            }
+            aggregation[d.zone] += d.demand;
+        });
+        return aggregation;
+    }
+ 
+    /**
+     * Clears all demand data (useful for resets).
+     */
+    clearData() {
+        this.demandData = [];
+    }
+}
+ 
+const demandService = new DemandService();
+export default demandService;
+export { DemandService };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/coverage/ml/services/optimizationService.js.html b/ml/coverage/ml/services/optimizationService.js.html new file mode 100644 index 00000000..9543c88b --- /dev/null +++ b/ml/coverage/ml/services/optimizationService.js.html @@ -0,0 +1,340 @@ + + + + + + Code coverage report for ml/services/optimizationService.js + + + + + + + + + +
+
+

All files / ml/services optimizationService.js

+
+ +
+ 100% + Statements + 85/85 +
+ + +
+ 75% + Branches + 12/16 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 85/85 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +861x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import demandService from './demandService.js';
+import predictionService from './predictionService.js';
+ 
+/**
+ * Service for optimizing resource (driver) allocation.
+ */
+class OptimizationService {
+    constructor() {
+        this.hotspots = []; // Array of rooms/zones with high demand
+    }
+ 
+    /**
+     * Detects geographic demand hotspots based on current and predicted demand.
+     * @param {Array} zones 
+     */
+    detectHotspots(zones) {
+        const aggregated = demandService.getAggregatedDemand();
+        const hotspots = zones.map(zone => {
+            const currentDemand = aggregated[zone] || 0;
+            const predictedDemand = predictionService.predictDemand(zone, new Date());
+            
+            // Score based on combination of current and future demand
+            const score = (currentDemand * 0.4) + (predictedDemand * 0.6);
+            
+            return { zone, score, currentDemand, predictedDemand };
+        })
+        .filter(h => h.score > 50) // Threshold for hotspot
+        .sort((a, b) => b.score - a.score);
+ 
+        this.hotspots = hotspots;
+        return hotspots;
+    }
+ 
+    /**
+     * Analyzes imbalance between drivers and riders.
+     * @param {string} zone 
+     * @param {number} driverCount 
+     * @param {number} riderCount 
+     */
+    analyzeImbalance(zone, driverCount, riderCount) {
+        const predictedDemand = predictionService.predictDemand(zone, new Date());
+        const totalExpectedRiders = riderCount + predictedDemand;
+        
+        const supplyDemandRatio = driverCount / (totalExpectedRiders || 1);
+        
+        return {
+            zone,
+            driverCount,
+            riderCount,
+            predictedDemand,
+            supplyDemandRatio,
+            status: supplyDemandRatio < 0.5 ? 'underserved' : (supplyDemandRatio > 2 ? 'oversaturated' : 'balanced')
+        };
+    }
+ 
+    /**
+     * Generates relocation recommendations for drivers in low-demand zones.
+     * @param {Array} currentImbalances - Result of analyzeImbalance for all zones
+     */
+    generateRecommendations(currentImbalances) {
+        const underserved = currentImbalances.filter(i => i.status === 'underserved');
+        const oversaturated = currentImbalances.filter(i => i.status === 'oversaturated');
+        
+        const recommendations = [];
+        
+        oversaturated.forEach(over => {
+            if (underserved.length > 0) {
+                // Recommend moving to the most underserved zone
+                const target = underserved[0];
+                recommendations.push({
+                    from: over.zone,
+                    to: target.zone,
+                    reason: `High demand expected in ${target.zone} with low driver supply.`,
+                    priority: target.supplyDemandRatio < 0.2 ? 'high' : 'medium'
+                });
+            }
+        });
+ 
+        return recommendations;
+    }
+}
+ 
+const optimizationService = new OptimizationService();
+export default optimizationService;
+export { OptimizationService };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/coverage/ml/services/predictionService.js.html b/ml/coverage/ml/services/predictionService.js.html new file mode 100644 index 00000000..9760aa9f --- /dev/null +++ b/ml/coverage/ml/services/predictionService.js.html @@ -0,0 +1,364 @@ + + + + + + Code coverage report for ml/services/predictionService.js + + + + + + + + + +
+
+

All files / ml/services predictionService.js

+
+ +
+ 97.84% + Statements + 91/93 +
+ + +
+ 84.61% + Branches + 11/13 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 97.84% + Lines + 91/93 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +941x +1x +1x +1x +1x +1x +1x +2x +2x +1x +1x +1x +1x +1x +1x +1x +3x +3x +3x +3x +3x +3x +3x +2x +2x +3x +3x +3x +3x +3x +3x +3x +2x +2x +3x +3x +3x +3x +3x +3x +3x +3x +1x +1x +1x +1x +1x +1x +1x +4x +4x +1x +1x +3x +3x +3x +3x +3x +4x +4x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
import { extractTemporalFeatures, prepareTrainingData } from '../utils/preprocessing.js';
+ 
+/**
+ * Service for predicting future ride demand.
+ */
+class PredictionService {
+    constructor() {
+        this.models = {}; // Model state per zone: { zone: { temporalProfiles: {}, lastTrend: 0 } }
+    }
+ 
+    /**
+     * Trains a simple temporal model for a zone.
+     * @param {string} zone 
+     * @param {Array} historicalData - Array of { timestamp, demand }
+     */
+    trainModel(zone, historicalData) {
+        const profiles = {}; // Stores sum and count per [dayOfWeek][hour]
+        
+        historicalData.forEach(record => {
+            const features = extractTemporalFeatures(record.timestamp);
+            const key = `${features.dayOfWeek}-${features.hour}`;
+            
+            if (!profiles[key]) {
+                profiles[key] = { sum: 0, count: 0 };
+            }
+            profiles[key].sum += record.demand;
+            profiles[key].count += 1;
+        });
+ 
+        // Compute averages for each time slot
+        const trainedProfiles = {};
+        for (const key in profiles) {
+            trainedProfiles[key] = profiles[key].sum / profiles[key].count;
+        }
+ 
+        this.models[zone] = {
+            temporalProfiles: trainedProfiles,
+            lastUpdated: new Date().toISOString()
+        };
+ 
+        return this.models[zone];
+    }
+ 
+    /**
+     * Predicts demand for a future timestamp in a specific zone.
+     * @param {string} zone 
+     * @param {string|Date} futureTimestamp 
+     */
+    predictDemand(zone, futureTimestamp) {
+        const model = this.models[zone];
+        if (!model) {
+            throw new Error(`No model trained for zone: ${zone}`);
+        }
+ 
+        const features = extractTemporalFeatures(futureTimestamp);
+        const key = `${features.dayOfWeek}-${features.hour}`;
+        
+        // Return historical average or default to 0 if no data for that slot
+        return model.temporalProfiles[key] || 0;
+    }
+ 
+    /**
+     * Evaluates model accuracy using Mean Absolute Error (MAE).
+     * @param {string} zone 
+     * @param {Array} testData - Array of { timestamp, actualDemand }
+     */
+    evaluateAccuracy(zone, testData) {
+        let totalError = 0;
+        let count = 0;
+ 
+        testData.forEach(record => {
+            try {
+                const prediction = this.predictDemand(zone, record.timestamp);
+                totalError += Math.abs(prediction - record.demand);
+                count++;
+            } catch (e) {
+                // Skip if no prediction available
+            }
+        });
+ 
+        const mae = count > 0 ? totalError / count : 0;
+        return {
+            zone,
+            mae,
+            sampleSize: count,
+            evaluatedAt: new Date().toISOString()
+        };
+    }
+}
+ 
+const predictionService = new PredictionService();
+export default predictionService;
+export { PredictionService };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/coverage/ml/services/socketService.js.html b/ml/coverage/ml/services/socketService.js.html new file mode 100644 index 00000000..defff916 --- /dev/null +++ b/ml/coverage/ml/services/socketService.js.html @@ -0,0 +1,139 @@ + + + + + + Code coverage report for ml/services/socketService.js + + + + + + + + + +
+
+

All files / ml/services socketService.js

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +191x +1x +1x +2x +2x +1x +1x +2x +2x +1x +1x +2x +1x +1x +2x +1x +1x +1x + 
const socketService = {
+    connected: false,
+    connect: () => {
+        socketService.connected = true;
+        console.log('Socket connected');
+    },
+    disconnect: () => {
+        socketService.connected = false;
+        console.log('Socket disconnected');
+    },
+    emit: (event, data) => {
+        if (!socketService.connected) return false;
+        console.log(`Emitting ${event}:`, data);
+        return true;
+    }
+};
+ 
+export default socketService;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file From e3a31dfec552a93b82d74e6bf80f64a66a33f3a4 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:12:14 +0530 Subject: [PATCH 09/20] Add coverage report HTML for ml/utils --- ml/utils/index.html | 146 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 ml/utils/index.html diff --git a/ml/utils/index.html b/ml/utils/index.html new file mode 100644 index 00000000..6eb950c6 --- /dev/null +++ b/ml/utils/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for ml/utils + + + + + + + + + +
+
+

All files ml/utils

+
+ +
+ 65.27% + Statements + 94/144 +
+ + +
+ 80% + Branches + 8/10 +
+ + +
+ 22.22% + Functions + 2/9 +
+ + +
+ 65.27% + Lines + 94/144 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
math.js +
+
15.78%3/19100%0/00%0/215.78%3/19
mockDataGenerator.js +
+
80.64%50/6287.5%7/833.33%1/380.64%50/62
preprocessing.js +
+
65.07%41/6350%1/225%1/465.07%41/63
+
+
+
+ + + + + + + + From 1678aa5a68dc798e66e0bd68d81f7b5f6942d8f5 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:15:07 +0530 Subject: [PATCH 10/20] Add files via upload --- ml/utils/math.js.html | 142 +++++++++++++++ ml/utils/mockDataGenerator.js.html | 271 ++++++++++++++++++++++++++++ ml/utils/preprocessing.js.html | 274 +++++++++++++++++++++++++++++ 3 files changed, 687 insertions(+) create mode 100644 ml/utils/math.js.html create mode 100644 ml/utils/mockDataGenerator.js.html create mode 100644 ml/utils/preprocessing.js.html diff --git a/ml/utils/math.js.html b/ml/utils/math.js.html new file mode 100644 index 00000000..2b3ba1ec --- /dev/null +++ b/ml/utils/math.js.html @@ -0,0 +1,142 @@ + + + + + + Code coverage report for ml/utils/math.js + + + + + + + + + +
+
+

All files / ml/utils math.js

+
+ +
+ 15.78% + Statements + 3/19 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 0% + Functions + 0/2 +
+ + +
+ 15.78% + Lines + 3/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +1x +1x + 
function calculateDistance(lat1, lon1, lat2, lon2) {
+    const R = 6371; // Earth's radius in km
+    const dLat = (lat2 - lat1) * Math.PI / 180;
+    const dLon = (lon2 - lon1) * Math.PI / 180;
+    const a =
+        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
+        Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
+        Math.sin(dLon / 2) * Math.sin(dLon / 2);
+    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+    return R * c;
+}
+ 
+function computeMAE(actual, predicted) {
+    if (actual.length !== predicted.length) return null;
+    const sum = actual.reduce((acc, val, i) => acc + Math.abs(val - predicted[i]), 0);
+    return sum / actual.length;
+}
+ 
+export { calculateDistance, computeMAE };
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/utils/mockDataGenerator.js.html b/ml/utils/mockDataGenerator.js.html new file mode 100644 index 00000000..a06704f9 --- /dev/null +++ b/ml/utils/mockDataGenerator.js.html @@ -0,0 +1,271 @@ + + + + + + Code coverage report for ml/utils/mockDataGenerator.js + + + + + + + + + +
+
+

All files / ml/utils mockDataGenerator.js

+
+ +
+ 80.64% + Statements + 50/62 +
+ + +
+ 87.5% + Branches + 7/8 +
+ + +
+ 33.33% + Functions + 1/3 +
+ + +
+ 80.64% + Lines + 50/62 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +631x +1x +1x +1x +1x +1x +1x +1x +1x +1x +2x +2x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +48x +2x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  + 
import demandService from '../services/demandService.js';
+ 
+/**
+ * Generates mock demand data for testing and model training.
+ */
+export const generateMockDemandData = (zones, days = 7) => {
+    const records = [];
+    const now = new Date();
+    
+    zones.forEach(zone => {
+        for (let d = 0; d < days; d++) {
+            for (let h = 0; h < 24; h++) {
+                const timestamp = new Date(now);
+                timestamp.setDate(timestamp.getDate() - d);
+                timestamp.setHours(h, 0, 0, 0);
+ 
+                // Simulate demand patterns: 
+                // - Higher during morning (8-10) and evening (17-19) peaks
+                // - Higher on weekends
+                let baseDemand = Math.floor(Math.random() * 20) + 10;
+                
+                const hour = timestamp.getHours();
+                const isPeak = (hour >= 8 && hour <= 10) || (hour >= 17 && hour <= 19);
+                const isWeekend = (timestamp.getDay() === 0 || timestamp.getDay() === 6);
+ 
+                if (isPeak) baseDemand += 40;
+                if (isWeekend) baseDemand += 15;
+ 
+                const record = demandService.storeDemandData({
+                    zone,
+                    timestamp: timestamp.toISOString(),
+                    demand: baseDemand + Math.floor(Math.random() * 10)
+                });
+                records.push(record);
+            }
+        }
+    });
+ 
+    return records;
+};
+ 
+/**
+ * Exports data to a JSON string for persistence.
+ */
+export const exportDemandData = () => {
+    return JSON.stringify(demandService.demandData, null, 2);
+};
+ 
+/**
+ * Imports data from a JSON string.
+ */
+export const importDemandData = (jsonString) => {
+    try {
+        const data = JSON.parse(jsonString);
+        demandService.clearData();
+        data.forEach(record => demandService.storeDemandData(record));
+        return true;
+    } catch (e) {
+        console.error('Failed to import demand data:', e);
+        return false;
+    }
+};
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ml/utils/preprocessing.js.html b/ml/utils/preprocessing.js.html new file mode 100644 index 00000000..b36c712b --- /dev/null +++ b/ml/utils/preprocessing.js.html @@ -0,0 +1,274 @@ + + + + + + Code coverage report for ml/utils/preprocessing.js + + + + + + + + + +
+
+

All files / ml/utils preprocessing.js

+
+ +
+ 65.07% + Statements + 41/63 +
+ + +
+ 50% + Branches + 1/2 +
+ + +
+ 25% + Functions + 1/4 +
+ + +
+ 65.07% + Lines + 41/63 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +641x +1x +1x +1x +1x +1x +1x +1x +1x +1x +6x +6x +6x +6x +6x +6x +6x +6x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  + 
/**
+ * Utility functions for preprocessing demand data for ML models.
+ */
+ 
+/**
+ * Extracts temporal features from a timestamp.
+ * @param {string|Date} timestamp 
+ * @returns {Object} { hour, dayOfWeek, month, isWeekend }
+ */
+export const extractTemporalFeatures = (timestamp) => {
+    const date = new Date(timestamp);
+    return {
+        hour: date.getHours(),
+        dayOfWeek: date.getDay(), // 0 (Sun) to 6 (Sat)
+        month: date.getMonth(),   // 0 to 11
+        isWeekend: (date.getDay() === 0 || date.getDay() === 6) ? 1 : 0
+    };
+};
+ 
+/**
+ * Normalizes a numerical value between 0 and 1.
+ * @param {number} value 
+ * @param {number} min 
+ * @param {number} max 
+ * @returns {number}
+ */
+export const normalize = (value, min, max) => {
+    if (max === min) return 0;
+    return (value - min) / (max - min);
+};
+ 
+/**
+ * Prepares a dataset for training.
+ * @param {Array} records - Array of { zone, timestamp, demand }
+ * @returns {Array} - Array of { input: [], output: [] }
+ */
+export const prepareTrainingData = (records) => {
+    return records.map(record => {
+        const features = extractTemporalFeatures(record.timestamp);
+        return {
+            input: [
+                normalize(features.hour, 0, 23),
+                normalize(features.dayOfWeek, 0, 6),
+                features.isWeekend
+            ],
+            output: [normalize(record.demand, 0, 100)] // Assuming max demand of 100 for normalization
+        };
+    });
+};
+ 
+/**
+ * Removes outliers and missing values from records.
+ * @param {Array} records 
+ * @returns {Array}
+ */
+export const cleanData = (records) => {
+    return records.filter(r => 
+        r.demand !== null && 
+        r.demand !== undefined && 
+        r.demand >= 0 && 
+        r.demand < 500 // Assuming demand > 500 is an outlier or error
+    );
+};
+ +
+
+ + + + + + + + \ No newline at end of file From b6628fda5d7cc19542255abebe87483eb842b7a4 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:16:24 +0530 Subject: [PATCH 11/20] Add files via upload --- ml/index.html | 114 +++ ml/package-lock.json | 2206 ++++++++++++++++++++++++++++++++++++++++++ ml/package.json | 14 + ml/script.js | 168 ++++ ml/style.css | 388 ++++++++ ml/test-results.xml | 71 ++ 6 files changed, 2961 insertions(+) create mode 100644 ml/index.html create mode 100644 ml/package-lock.json create mode 100644 ml/package.json create mode 100644 ml/script.js create mode 100644 ml/style.css create mode 100644 ml/test-results.xml diff --git a/ml/index.html b/ml/index.html new file mode 100644 index 00000000..61557ad0 --- /dev/null +++ b/ml/index.html @@ -0,0 +1,114 @@ + + + + + + + Rider Map + + + + + + + + + + + +
+
+
+
+
+ + + +
+
+
+

Where to?

+
+ + +
+
+ + +
+ +
+

Select Mode

+
+
+ + Lux +
+
+ + Eco +
+
+ + Bike +
+
+
+ + + + + + + +
+ +
+
+
+ + + + + + + \ No newline at end of file diff --git a/ml/package-lock.json b/ml/package-lock.json new file mode 100644 index 00000000..e285d915 --- /dev/null +++ b/ml/package-lock.json @@ -0,0 +1,2206 @@ +{ + "name": "ml-ride-booking", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ml-ride-booking", + "version": "1.0.0", + "devDependencies": { + "@vitest/coverage-v8": "^1.0.0", + "vitest": "^1.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.1.tgz", + "integrity": "sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.1" + } + }, + "node_modules/@vitest/expect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", + "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.1.tgz", + "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.1.tgz", + "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.1.tgz", + "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.1.tgz", + "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "1.6.1", + "@vitest/runner": "1.6.1", + "@vitest/snapshot": "1.6.1", + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.1", + "@vitest/ui": "1.6.1", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/ml/package.json b/ml/package.json new file mode 100644 index 00000000..5eefa567 --- /dev/null +++ b/ml/package.json @@ -0,0 +1,14 @@ +{ + "name": "ml-ride-booking", + "version": "1.0.0", + "description": "Rider Map application with professional testing structure", + "scripts": { + "test": "vitest run", + "test:table": "vitest run --coverage --reporter=default", + "test:coverage": "vitest run --coverage" + }, + "devDependencies": { + "vitest": "^1.0.0", + "@vitest/coverage-v8": "^1.0.0" + } +} \ No newline at end of file diff --git a/ml/script.js b/ml/script.js new file mode 100644 index 00000000..a6b48dd9 --- /dev/null +++ b/ml/script.js @@ -0,0 +1,168 @@ +const drivers = [ + { name: 'Rahul S.', lat: 12.9720, lng: 77.5950, rating: 4.8 }, + { name: 'Amit K.', lat: 12.9800, lng: 77.6000, rating: 4.9 }, + { name: 'Sriya M.', lat: 12.9650, lng: 77.5850, rating: 4.7 }, + { name: 'Vikram J.', lat: 13.0000, lng: 77.6200, rating: 4.6 } +]; + +// Haversine Formula for Distance Calculation +function calculateDistance(lat1, lon1, lat2, lon2) { + const R = 6371; // Earth's radius in km + const dLat = (lat2 - lat1) * Math.PI / 180; + const dLon = (lon2 - lon1) * Math.PI / 180; + const a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; +} + +// Nearest Neighbor Search for Driver +function findNearestDriver(userLat, userLng) { + let nearest = null; + let minDistance = Infinity; + + drivers.forEach(driver => { + const dist = calculateDistance(userLat, userLng, driver.lat, driver.lng); + if (dist < minDistance) { + minDistance = dist; + nearest = driver; + } + }); + + return { driver: nearest, distance: minDistance }; +} + +// Export for tests if in Node environment +if (typeof module !== 'undefined' && module.exports) { + module.exports = { calculateDistance, findNearestDriver, drivers }; +} + +document.addEventListener('DOMContentLoaded', () => { + const bookBtn = document.getElementById('book-btn'); + const resultsArea = document.getElementById('results'); + const modeCards = document.querySelectorAll('.mode-card'); + const pickupInput = document.getElementById('pickup'); + const destInput = document.getElementById('destination'); + const toast = document.getElementById('toast'); + + // Initialize Map + const map = L.map('map').setView([12.9716, 77.5946], 12); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors' + }).addTo(map); + + let pickupMarker, destMarker, routeLine; + let heatLayer; + let adminMode = false; + + const adminToggle = document.getElementById('admin-toggle'); + const adminDashboard = document.getElementById('admin-dashboard'); + + function toggleAdminMode() { + adminMode = !adminMode; + if (adminMode) { + adminToggle.classList.add('active'); + adminDashboard.classList.remove('hidden'); + showHeatmap(); + updateDashboard(); + } else { + adminToggle.classList.remove('active'); + adminDashboard.classList.add('hidden'); + if (heatLayer) map.removeLayer(heatLayer); + } + } + + adminToggle.addEventListener('click', (e) => { + e.preventDefault(); + toggleAdminMode(); + }); + + function showHeatmap() { + if (heatLayer) map.removeLayer(heatLayer); + + // Mocking some demand points for visualization + const heatPoints = [ + [12.9716, 77.5946, 0.8], + [12.9800, 77.6000, 0.6], + [12.9650, 77.5850, 0.9], + [13.0000, 77.6200, 0.4] + ]; + + heatLayer = L.heatLayer(heatPoints, { radius: 25, blur: 15, maxZoom: 17 }).addTo(map); + } + + function updateDashboard() { + document.getElementById('peak-demand-val').textContent = '145 units'; + document.getElementById('efficiency-val').textContent = '88%'; + + const alerts = document.getElementById('opt-alerts'); + alerts.innerHTML = ` +
+ + High demand expected in Koramangala. 3 drivers recommended to relocate. +
+ `; + } + + function updateMap(pCoords, dCoords) { + // Clear old markers + if (pickupMarker) map.removeLayer(pickupMarker); + if (destMarker) map.removeLayer(destMarker); + if (routeLine) map.removeLayer(routeLine); + + // Add New Markers + pickupMarker = L.marker(pCoords).addTo(map).bindPopup('Pickup').openPopup(); + destMarker = L.marker(dCoords).addTo(map).bindPopup('Destination'); + + // Draw Route (Simple Line) + routeLine = L.polyline([pCoords, dCoords], { color: '#00ff88', weight: 4, opacity: 0.8 }).addTo(map); + + // Fit map to show both points + const group = new L.featureGroup([pickupMarker, destMarker]); + map.fitBounds(group.getBounds().pad(0.1)); + } + + bookBtn.addEventListener('click', () => { + const pickupVal = pickupInput.value.trim(); + const destVal = destInput.value.trim(); + + if (!pickupVal || !destVal) { + alert('Please enter both pickup and destination coordinates.'); + return; + } + + // Parse coordinates + let pCoords = pickupVal.split(',').map(n => parseFloat(n.trim())); + let dCoords = destVal.split(',').map(n => parseFloat(n.trim())); + + if (isNaN(pCoords[0]) || isNaN(pCoords[1]) || isNaN(dCoords[0]) || isNaN(dCoords[1])) { + alert('Invalid coordinate format. Please use: lat, lng'); + return; + } + + updateMap(pCoords, dCoords); + + bookBtn.textContent = 'Finding Driver...'; + bookBtn.disabled = true; + + // Simulate Network Latency + setTimeout(() => { + const distance = calculateDistance(pCoords[0], pCoords[1], dCoords[0], dCoords[1]); + const { driver, distance: driverDist } = findNearestDriver(pCoords[0], pCoords[1]); + + document.getElementById('distance-val').textContent = `${distance.toFixed(2)} km`; + document.getElementById('driver-val').textContent = `${driver.name} (⭐${driver.rating})`; + document.getElementById('eta-val').textContent = `${Math.ceil(driverDist * 2 + 2)} mins`; + + resultsArea.classList.remove('hidden'); + bookBtn.textContent = 'Book Now'; + bookBtn.disabled = false; + + // Show Toast + toast.classList.remove('hidden'); + setTimeout(() => toast.classList.add('hidden'), 3000); + }, 1500); + }); +}); diff --git a/ml/style.css b/ml/style.css new file mode 100644 index 00000000..a5c67462 --- /dev/null +++ b/ml/style.css @@ -0,0 +1,388 @@ +:root { + --primary: #00ff88; + --primary-glow: rgba(0, 255, 136, 0.4); + --bg: #000000; + --card-bg: rgba(20, 20, 20, 0.6); + --border: rgba(255, 255, 255, 0.08); + --text: #ffffff; + --text-dim: rgba(255, 255, 255, 0.5); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Outfit', sans-serif; +} + +body { + background-color: var(--bg); + color: var(--text); + overflow-x: hidden; + min-height: 100vh; +} + +/* Background Blobs */ +.background-blobs { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + filter: blur(80px); +} + +.blob { + position: absolute; + border-radius: 50%; + opacity: 0.5; +} + +.blob-1 { + width: 400px; + height: 400px; + background: #00ff88; + top: -100px; + right: -100px; + animation: move 20s infinite alternate; +} + +.blob-2 { + width: 300px; + height: 300px; + background: #0066ff; + bottom: -50px; + left: -50px; + animation: move 15s infinite alternate-reverse; +} + +.blob-3 { + width: 250px; + height: 250px; + background: #ff00ff; + top: 50%; + left: 20%; + animation: move 25s infinite alternate; +} + +@keyframes move { + from { + transform: translate(0, 0); + } + + to { + transform: translate(100px, 100px); + } +} + +nav { + display: flex; + justify-content: space-between; + align-items: center; + padding: 2rem 5%; +} + +.logo { + font-size: 1.5rem; + font-weight: 800; + letter-spacing: 2px; + color: var(--primary); +} + +.nav-links { + display: flex; + align-items: center; + gap: 2rem; +} + +.nav-links a { + color: var(--text); + text-decoration: none; + font-weight: 500; + font-size: 0.9rem; + transition: color 0.3s; +} + +.nav-links a:hover { + color: var(--primary); +} + +.btn-secondary { + background: transparent; + border: 1px solid var(--border); + color: white; + padding: 0.6rem 1.5rem; + border-radius: 100px; + cursor: pointer; + transition: all 0.3s; +} + +.btn-secondary:hover { + background: var(--border); +} + +main { + padding: 2rem 5%; +} + +.booking-container { + display: grid; + grid-template-columns: 1fr 1.5fr; + gap: 2rem; + align-items: start; +} + +@media (max-width: 968px) { + .booking-container { + grid-template-columns: 1fr; + } +} + +.glass { + background: var(--card-bg); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid var(--border); + border-radius: 24px; +} + +.card { + padding: 2.5rem; +} + +h1 { + font-size: 2.5rem; + margin-bottom: 2rem; + font-weight: 600; +} + +.input-group { + background: rgba(255, 255, 255, 0.03); + border: 1px solid var(--border); + border-radius: 12px; + display: flex; + align-items: center; + padding: 0.5rem 1rem; + margin-bottom: 1rem; + transition: border-color 0.3s; +} + +.input-group:focus-within { + border-color: var(--primary); +} + +.input-group i { + color: var(--primary); + margin-right: 1rem; +} + +.input-group input { + background: transparent; + border: none; + color: white; + width: 100%; + padding: 0.8rem 0; + font-size: 1rem; + outline: none; +} + +.transport-selection { + margin: 2rem 0; +} + +.transport-selection h3 { + font-size: 0.9rem; + color: var(--text-dim); + margin-bottom: 1rem; + text-transform: uppercase; + letter-spacing: 1px; +} + +.modes { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; +} + +.mode-card { + padding: 1.5rem; + text-align: center; + border: 1px solid var(--border); + border-radius: 16px; + cursor: pointer; + transition: all 0.3s; + background: rgba(255, 255, 255, 0.02); +} + +.mode-card i { + font-size: 1.5rem; + margin-bottom: 0.8rem; + display: block; +} + +.mode-card span { + font-weight: 500; + font-size: 0.9rem; +} + +.mode-card:hover { + border-color: rgba(255, 255, 255, 0.3); +} + +.mode-card.active { + border-color: var(--primary); + background: rgba(0, 255, 136, 0.05); + color: var(--primary); + box-shadow: 0 0 20px var(--primary-glow); +} + +.btn-primary { + width: 100%; + background: var(--primary); + color: #000; + border: none; + padding: 1.2rem; + border-radius: 16px; + font-size: 1.1rem; + font-weight: 600; + cursor: pointer; + transition: transform 0.2s, box-shadow 0.2s; + margin-top: 1rem; +} + +.btn-primary:active { + transform: scale(0.98); +} + +.btn-primary:hover { + box-shadow: 0 0 30px var(--primary-glow); +} + +.map-container { + height: 600px; + width: 100%; + border-radius: 24px; + overflow: hidden; + z-index: 1; +} + +/* Leaflet Overrides for Dark Mode */ +.leaflet-container { + background: #000 !important; +} + +.leaflet-tile { + filter: invert(100%) hue-rotate(180deg) brightness(95%) contrast(90%); +} + +.leaflet-bar a { + background: var(--card-bg) !important; + color: white !important; + border: 1px solid var(--border) !important; +} + +#map-placeholder { + text-align: center; + color: var(--text-dim); + z-index: 1; +} + +.pulsating-circle { + width: 20px; + height: 20px; + background: var(--primary); + border-radius: 50%; + margin: 0 auto 1rem; + position: relative; +} + +.pulsating-circle::after { + content: ''; + position: absolute; + width: 100%; + height: 100%; + background: var(--primary); + border-radius: 50%; + animation: pulse 2s infinite; +} + +@keyframes pulse { + 0% { + transform: scale(1); + opacity: 0.8; + } + + 100% { + transform: scale(3); + opacity: 0; + } +} + +.results { + margin-top: 2rem; + animation: slideUp 0.5s ease-out; +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(20px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +.divider { + height: 1px; + background: var(--border); + margin-bottom: 1.5rem; +} + +.stat { + display: flex; + justify-content: space-between; + margin-bottom: 0.8rem; +} + +.stat .label { + color: var(--text-dim); +} + +.stat .value { + font-weight: 600; +} + +.hidden { + display: none; +} + +.toast { + position: fixed; + bottom: 2rem; + left: 50%; + transform: translateX(-50%); + background: var(--primary); + color: #000; + padding: 1rem 2rem; + border-radius: 100px; + font-weight: 600; + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); + z-index: 1000; + animation: popUp 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +@keyframes popUp { + from { + bottom: -50px; + opacity: 0; + } + + to { + bottom: 2rem; + opacity: 1; + } +} \ No newline at end of file diff --git a/ml/test-results.xml b/ml/test-results.xml new file mode 100644 index 00000000..e48aa836 --- /dev/null +++ b/ml/test-results.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Socket connected + + + + + +Socket disconnected + + + + + +Socket disconnected +Socket connected +Emitting test: {} + + + + + From 67c9d449ff269279865b17f87cc4c181baacaaae Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:18:22 +0530 Subject: [PATCH 12/20] Create demand.test.js --- ml/tests/demand.test.js | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 ml/tests/demand.test.js diff --git a/ml/tests/demand.test.js b/ml/tests/demand.test.js new file mode 100644 index 00000000..0b0138e6 --- /dev/null +++ b/ml/tests/demand.test.js @@ -0,0 +1,61 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import demandService from '../services/demandService.js'; +import { generateMockDemandData } from '../utils/mockDataGenerator.js'; + +describe('DemandService', () => { + beforeEach(() => { + demandService.clearData(); + }); + + it('should store valid demand data', () => { + const data = { zone: 'Downtown', timestamp: new Date().toISOString(), demand: 50 }; + const record = demandService.storeDemandData(data); + + expect(record.zone).toBe('Downtown'); + expect(record.demand).toBe(50); + expect(demandService.demandData.length).toBe(1); + }); + + it('should throw error for invalid zone', () => { + const data = { zone: '', timestamp: new Date().toISOString(), demand: 50 }; + expect(() => demandService.storeDemandData(data)).toThrow('Invalid zone'); + }); + + it('should throw error for negative demand', () => { + const data = { zone: 'Downtown', timestamp: new Date().toISOString(), demand: -5 }; + expect(() => demandService.storeDemandData(data)).toThrow('Invalid demand'); + }); + + it('should filter historical demand by zone and time range', () => { + const now = Date.now(); + demandService.storeDemandData({ zone: 'A', timestamp: new Date(now - 1000).toISOString(), demand: 10 }); + demandService.storeDemandData({ zone: 'A', timestamp: new Date(now - 5000).toISOString(), demand: 20 }); + demandService.storeDemandData({ zone: 'B', timestamp: new Date(now - 1000).toISOString(), demand: 30 }); + + const history = demandService.getHistoricalDemand('A', now - 2000, now); + expect(history.length).toBe(1); + expect(history[0].demand).toBe(10); + }); + + it('should aggregate demand by zone', () => { + demandService.storeDemandData({ zone: 'A', timestamp: new Date().toISOString(), demand: 10 }); + demandService.storeDemandData({ zone: 'A', timestamp: new Date().toISOString(), demand: 20 }); + demandService.storeDemandData({ zone: 'B', timestamp: new Date().toISOString(), demand: 5 }); + + const aggregated = demandService.getAggregatedDemand(); + expect(aggregated['A']).toBe(30); + expect(aggregated['B']).toBe(5); + }); +}); + +describe('MockDataGenerator', () => { + it('should generate requested number of records', () => { + demandService.clearData(); + const zones = ['Zone1', 'Zone2']; + const days = 1; + generateMockDemandData(zones, days); + + // 2 zones * 1 day * 24 hours = 48 records + expect(demandService.demandData.length).toBe(48); + }); +}); From 3d9a40ab4b229968583e925ce6c0781bffed60c2 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:18:48 +0530 Subject: [PATCH 13/20] Add files via upload --- ml/tests/optimization.test.js | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 ml/tests/optimization.test.js diff --git a/ml/tests/optimization.test.js b/ml/tests/optimization.test.js new file mode 100644 index 00000000..f5b2a5e4 --- /dev/null +++ b/ml/tests/optimization.test.js @@ -0,0 +1,47 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import optimizationService from '../services/optimizationService.js'; +import demandService from '../services/demandService.js'; +import predictionService from '../services/predictionService.js'; + +describe('OptimizationService', () => { + beforeEach(() => { + vi.restoreAllMocks(); + demandService.clearData(); + }); + + it('should detect hotspots', () => { + vi.spyOn(demandService, 'getAggregatedDemand').mockReturnValue({ 'ZoneA': 100, 'ZoneB': 10 }); + vi.spyOn(predictionService, 'predictDemand').mockReturnValue(80); + + const hotspots = optimizationService.detectHotspots(['ZoneA', 'ZoneB']); + + expect(hotspots.length).toBeGreaterThan(0); + expect(hotspots[0].zone).toBe('ZoneA'); + expect(hotspots[0].score).toBeGreaterThan(50); + }); + + it('should analyze imbalance correctly', () => { + vi.spyOn(predictionService, 'predictDemand').mockReturnValue(10); + + // 2 drivers for (5 riders + 10 predicted) = 2/15 = 0.13 (underserved) + const analysis = optimizationService.analyzeImbalance('ZoneA', 2, 5); + expect(analysis.status).toBe('underserved'); + expect(analysis.supplyDemandRatio).toBeLessThan(0.5); + + // 20 drivers for (5 riders + 10 predicted) = 20/15 = 1.33 (balanced) + const analysis2 = optimizationService.analyzeImbalance('ZoneA', 20, 5); + expect(analysis2.status).toBe('balanced'); + }); + + it('should generate relocation recommendations', () => { + const imbalances = [ + { zone: 'OverZone', status: 'oversaturated', supplyDemandRatio: 3 }, + { zone: 'UnderZone', status: 'underserved', supplyDemandRatio: 0.1 } + ]; + + const recs = optimizationService.generateRecommendations(imbalances); + expect(recs.length).toBe(1); + expect(recs[0].from).toBe('OverZone'); + expect(recs[0].to).toBe('UnderZone'); + }); +}); From a1896bf76c6aecb0061b95364435e54f86d885dc Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:19:15 +0530 Subject: [PATCH 14/20] Add files via upload --- ml/tests/socketService.test.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 ml/tests/socketService.test.js diff --git a/ml/tests/socketService.test.js b/ml/tests/socketService.test.js new file mode 100644 index 00000000..7178a33d --- /dev/null +++ b/ml/tests/socketService.test.js @@ -0,0 +1,21 @@ +import { describe, it, expect } from 'vitest'; +import socketService from '../services/socketService.js'; + +describe('socketService', () => { + it('should handle connection status', () => { + socketService.connect(); + expect(socketService.connected).toBe(true); + }); + + it('should handle disconnection', () => { + socketService.disconnect(); + expect(socketService.connected).toBe(false); + }); + + it('should emit only when connected', () => { + socketService.disconnect(); + expect(socketService.emit('test', {})).toBe(false); + socketService.connect(); + expect(socketService.emit('test', {})).toBe(true); + }); +}); From d09d2ccbf40e9b8f4d085c1dc2e0d4dfd6ba97bd Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:19:41 +0530 Subject: [PATCH 15/20] Add files via upload --- ml/tests/prediction.test.js | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 ml/tests/prediction.test.js diff --git a/ml/tests/prediction.test.js b/ml/tests/prediction.test.js new file mode 100644 index 00000000..104582d2 --- /dev/null +++ b/ml/tests/prediction.test.js @@ -0,0 +1,52 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import predictionService from '../services/predictionService.js'; +import demandService from '../services/demandService.js'; +import { generateMockDemandData } from '../utils/mockDataGenerator.js'; + +describe('PredictionService', () => { + const zone = 'TestZone'; + + beforeEach(() => { + demandService.clearData(); + predictionService.models = {}; + }); + + it('should train a model and predict demand correctly', () => { + // Create simple historical data: 10 demand at 9 AM on Mon, 20 demand at 9 AM on Mon + const history = [ + { zone, timestamp: '2023-10-02T09:00:00Z', demand: 10 }, // Mon + { zone, timestamp: '2023-10-09T09:00:00Z', demand: 20 } // Mon + ]; + + predictionService.trainModel(zone, history); + + // Predict for another Monday at 9 AM + const prediction = predictionService.predictDemand(zone, '2023-10-16T09:00:00Z'); + expect(prediction).toBe(15); // Average of 10 and 20 + }); + + it('should evaluate accuracy using MAE', () => { + const history = [ + { zone, timestamp: '2023-10-02T09:00:00Z', demand: 10 } + ]; + predictionService.trainModel(zone, history); + + const testData = [ + { timestamp: '2023-10-09T09:00:00Z', demand: 15 } // Actual is 15, prediction is 10 + ]; + + const evaluation = predictionService.evaluateAccuracy(zone, testData); + expect(evaluation.mae).toBe(5); + expect(evaluation.sampleSize).toBe(1); + }); + + it('should return 0 for unknown temporal profiles', () => { + predictionService.trainModel(zone, []); + const prediction = predictionService.predictDemand(zone, new Date()); + expect(prediction).toBe(0); + }); + + it('should throw error if predicting for untrained zone', () => { + expect(() => predictionService.predictDemand('EmptyZone', new Date())).toThrow('No model trained'); + }); +}); From c31a42b33ca432abeb1fec48efde311076a27000 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:20:05 +0530 Subject: [PATCH 16/20] Add files via upload --- ml/tests/rideController.test.js | 56 +++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 ml/tests/rideController.test.js diff --git a/ml/tests/rideController.test.js b/ml/tests/rideController.test.js new file mode 100644 index 00000000..04848702 --- /dev/null +++ b/ml/tests/rideController.test.js @@ -0,0 +1,56 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import * as rideController from '../controllers/rider/rideController'; + +describe('rideController', () => { + beforeEach(() => { + rideController.rides.length = 0; // Clear mock db + }); + + describe('createRide', () => { + it('should accept ride data in body', () => { + const data = { pickup: 'Location A', destination: 'Location B', type: 'lux' }; + const ride = rideController.createRide(data); + expect(ride.pickup).toBe('Location A'); + expect(ride.status).toBe('pending'); + }); + + it('should validate required fields', () => { + expect(() => rideController.createRide({})).toThrow('Required fields missing'); + }); + }); + + describe('getRideById', () => { + it('should accept ID parameter', () => { + const ride = rideController.createRide({ pickup: 'A', destination: 'B' }); + const found = rideController.getRideById(ride.id); + expect(found.id).toBe(ride.id); + }); + }); + + describe('updateRide', () => { + it('should accept update data in body', () => { + const ride = rideController.createRide({ pickup: 'A', destination: 'B' }); + const updated = rideController.updateRide(ride.id, { status: 'active' }); + expect(updated.status).toBe('active'); + }); + }); + + describe('deleteRide', () => { + it('should accept ID parameter for deletion', () => { + const ride = rideController.createRide({ pickup: 'A', destination: 'B' }); + const deleted = rideController.deleteRide(ride.id); + expect(deleted).toBe(true); + expect(rideController.rides.length).toBe(0); + }); + }); + + describe('Ride statistics', () => { + it('getRideStats should provide statistical data', () => { + rideController.createRide({ pickup: 'A', destination: 'B', status: 'active' }); + const stats = rideController.getRideStats(); + expect(stats.totalRides).toBe(1); + }); + }); +}); + +//npm run test:table \ No newline at end of file From 464e7400b9ab4d7fd68dd6902bb3a08686887773 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:21:51 +0530 Subject: [PATCH 17/20] Implement DemandService for managing ride demand data This class provides methods to store, validate, retrieve, and aggregate ride demand data, as well as a method to clear all data. --- ml/service/demanService.js | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 ml/service/demanService.js diff --git a/ml/service/demanService.js b/ml/service/demanService.js new file mode 100644 index 00000000..57e80145 --- /dev/null +++ b/ml/service/demanService.js @@ -0,0 +1,78 @@ +/** + * Service for managing ride demand data. + */ +class DemandService { + constructor() { + this.demandData = []; // Array of { zone, timestamp, demand, status } + } + + /** + * Stores a demand record after validation. + * @param {Object} data - { zone, timestamp, demand } + */ + storeDemandData(data) { + this.validateDemandData(data); + const record = { + ...data, + id: Date.now() + Math.random().toString(36).substr(2, 9), + loggedAt: new Date().toISOString() + }; + this.demandData.push(record); + return record; + } + + /** + * Validates demand data. + * @param {Object} data + * @throws {Error} if validation fails + */ + validateDemandData(data) { + if (!data.zone || typeof data.zone !== 'string') { + throw new Error('Invalid zone: Zone is required and must be a string'); + } + if (!data.timestamp || isNaN(new Date(data.timestamp).getTime())) { + throw new Error('Invalid timestamp: A valid date/time is required'); + } + if (typeof data.demand !== 'number' || data.demand < 0) { + throw new Error('Invalid demand: Demand must be a non-negative number'); + } + } + + /** + * Gets historical demand for a specific zone and time range. + * @param {string} zone + * @param {number} startTime - unix timestamp + * @param {number} endTime - unix timestamp + */ + getHistoricalDemand(zone, startTime, endTime) { + return this.demandData.filter(d => { + const time = new Date(d.timestamp).getTime(); + return d.zone === zone && time >= startTime && time <= endTime; + }); + } + + /** + * Aggregates demand by zone. + */ + getAggregatedDemand() { + const aggregation = {}; + this.demandData.forEach(d => { + if (!aggregation[d.zone]) { + aggregation[d.zone] = 0; + } + aggregation[d.zone] += d.demand; + }); + return aggregation; + } + + /** + * Clears all demand data (useful for resets). + */ + clearData() { + this.demandData = []; + } +} + +const demandService = new DemandService(); +export default demandService; +export { DemandService }; From ddf0c1d06e0822324a6744f9204e9d0462681fd7 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:22:23 +0530 Subject: [PATCH 18/20] Add files via upload --- ml/service/optimizationService.js | 85 ++++++++++++++++++++++++++++ ml/service/predictionService.js | 93 +++++++++++++++++++++++++++++++ ml/service/socketService.js | 18 ++++++ 3 files changed, 196 insertions(+) create mode 100644 ml/service/optimizationService.js create mode 100644 ml/service/predictionService.js create mode 100644 ml/service/socketService.js diff --git a/ml/service/optimizationService.js b/ml/service/optimizationService.js new file mode 100644 index 00000000..0b2fe08c --- /dev/null +++ b/ml/service/optimizationService.js @@ -0,0 +1,85 @@ +import demandService from './demandService.js'; +import predictionService from './predictionService.js'; + +/** + * Service for optimizing resource (driver) allocation. + */ +class OptimizationService { + constructor() { + this.hotspots = []; // Array of rooms/zones with high demand + } + + /** + * Detects geographic demand hotspots based on current and predicted demand. + * @param {Array} zones + */ + detectHotspots(zones) { + const aggregated = demandService.getAggregatedDemand(); + const hotspots = zones.map(zone => { + const currentDemand = aggregated[zone] || 0; + const predictedDemand = predictionService.predictDemand(zone, new Date()); + + // Score based on combination of current and future demand + const score = (currentDemand * 0.4) + (predictedDemand * 0.6); + + return { zone, score, currentDemand, predictedDemand }; + }) + .filter(h => h.score > 50) // Threshold for hotspot + .sort((a, b) => b.score - a.score); + + this.hotspots = hotspots; + return hotspots; + } + + /** + * Analyzes imbalance between drivers and riders. + * @param {string} zone + * @param {number} driverCount + * @param {number} riderCount + */ + analyzeImbalance(zone, driverCount, riderCount) { + const predictedDemand = predictionService.predictDemand(zone, new Date()); + const totalExpectedRiders = riderCount + predictedDemand; + + const supplyDemandRatio = driverCount / (totalExpectedRiders || 1); + + return { + zone, + driverCount, + riderCount, + predictedDemand, + supplyDemandRatio, + status: supplyDemandRatio < 0.5 ? 'underserved' : (supplyDemandRatio > 2 ? 'oversaturated' : 'balanced') + }; + } + + /** + * Generates relocation recommendations for drivers in low-demand zones. + * @param {Array} currentImbalances - Result of analyzeImbalance for all zones + */ + generateRecommendations(currentImbalances) { + const underserved = currentImbalances.filter(i => i.status === 'underserved'); + const oversaturated = currentImbalances.filter(i => i.status === 'oversaturated'); + + const recommendations = []; + + oversaturated.forEach(over => { + if (underserved.length > 0) { + // Recommend moving to the most underserved zone + const target = underserved[0]; + recommendations.push({ + from: over.zone, + to: target.zone, + reason: `High demand expected in ${target.zone} with low driver supply.`, + priority: target.supplyDemandRatio < 0.2 ? 'high' : 'medium' + }); + } + }); + + return recommendations; + } +} + +const optimizationService = new OptimizationService(); +export default optimizationService; +export { OptimizationService }; diff --git a/ml/service/predictionService.js b/ml/service/predictionService.js new file mode 100644 index 00000000..3056519a --- /dev/null +++ b/ml/service/predictionService.js @@ -0,0 +1,93 @@ +import { extractTemporalFeatures, prepareTrainingData } from '../utils/preprocessing.js'; + +/** + * Service for predicting future ride demand. + */ +class PredictionService { + constructor() { + this.models = {}; // Model state per zone: { zone: { temporalProfiles: {}, lastTrend: 0 } } + } + + /** + * Trains a simple temporal model for a zone. + * @param {string} zone + * @param {Array} historicalData - Array of { timestamp, demand } + */ + trainModel(zone, historicalData) { + const profiles = {}; // Stores sum and count per [dayOfWeek][hour] + + historicalData.forEach(record => { + const features = extractTemporalFeatures(record.timestamp); + const key = `${features.dayOfWeek}-${features.hour}`; + + if (!profiles[key]) { + profiles[key] = { sum: 0, count: 0 }; + } + profiles[key].sum += record.demand; + profiles[key].count += 1; + }); + + // Compute averages for each time slot + const trainedProfiles = {}; + for (const key in profiles) { + trainedProfiles[key] = profiles[key].sum / profiles[key].count; + } + + this.models[zone] = { + temporalProfiles: trainedProfiles, + lastUpdated: new Date().toISOString() + }; + + return this.models[zone]; + } + + /** + * Predicts demand for a future timestamp in a specific zone. + * @param {string} zone + * @param {string|Date} futureTimestamp + */ + predictDemand(zone, futureTimestamp) { + const model = this.models[zone]; + if (!model) { + throw new Error(`No model trained for zone: ${zone}`); + } + + const features = extractTemporalFeatures(futureTimestamp); + const key = `${features.dayOfWeek}-${features.hour}`; + + // Return historical average or default to 0 if no data for that slot + return model.temporalProfiles[key] || 0; + } + + /** + * Evaluates model accuracy using Mean Absolute Error (MAE). + * @param {string} zone + * @param {Array} testData - Array of { timestamp, actualDemand } + */ + evaluateAccuracy(zone, testData) { + let totalError = 0; + let count = 0; + + testData.forEach(record => { + try { + const prediction = this.predictDemand(zone, record.timestamp); + totalError += Math.abs(prediction - record.demand); + count++; + } catch (e) { + // Skip if no prediction available + } + }); + + const mae = count > 0 ? totalError / count : 0; + return { + zone, + mae, + sampleSize: count, + evaluatedAt: new Date().toISOString() + }; + } +} + +const predictionService = new PredictionService(); +export default predictionService; +export { PredictionService }; diff --git a/ml/service/socketService.js b/ml/service/socketService.js new file mode 100644 index 00000000..3abb7023 --- /dev/null +++ b/ml/service/socketService.js @@ -0,0 +1,18 @@ +const socketService = { + connected: false, + connect: () => { + socketService.connected = true; + console.log('Socket connected'); + }, + disconnect: () => { + socketService.connected = false; + console.log('Socket disconnected'); + }, + emit: (event, data) => { + if (!socketService.connected) return false; + console.log(`Emitting ${event}:`, data); + return true; + } +}; + +export default socketService; From 00d677718277318ae41c500d13cea044efa12eb9 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:23:41 +0530 Subject: [PATCH 19/20] Add files via upload --- ml/coverage/prettify.css | 1 + ml/coverage/prettify.js | 2 + ml/coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes ml/coverage/sorter.js | 210 ++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 ml/coverage/prettify.css create mode 100644 ml/coverage/prettify.js create mode 100644 ml/coverage/sort-arrow-sprite.png create mode 100644 ml/coverage/sorter.js diff --git a/ml/coverage/prettify.css b/ml/coverage/prettify.css new file mode 100644 index 00000000..b317a7cd --- /dev/null +++ b/ml/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/ml/coverage/prettify.js b/ml/coverage/prettify.js new file mode 100644 index 00000000..b3225238 --- /dev/null +++ b/ml/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/ml/coverage/sort-arrow-sprite.png b/ml/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/ml/coverage/sorter.js b/ml/coverage/sorter.js new file mode 100644 index 00000000..4ed70ae5 --- /dev/null +++ b/ml/coverage/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); From 527dc17eb8a51d682cd66c1d0c95112cc0256a31 Mon Sep 17 00:00:00 2001 From: vijeyavarshini Date: Thu, 12 Mar 2026 23:24:48 +0530 Subject: [PATCH 20/20] Add files via upload --- ml/coverage/base.css | 224 +++++++++++ ml/coverage/block-navigation.js | 87 ++++ ml/coverage/clover.xml | 684 ++++++++++++++++++++++++++++++++ ml/coverage/coverage-final.json | 10 + ml/coverage/favicon.png | Bin 0 -> 445 bytes ml/coverage/index.html | 161 ++++++++ 6 files changed, 1166 insertions(+) create mode 100644 ml/coverage/base.css create mode 100644 ml/coverage/block-navigation.js create mode 100644 ml/coverage/clover.xml create mode 100644 ml/coverage/coverage-final.json create mode 100644 ml/coverage/favicon.png create mode 100644 ml/coverage/index.html diff --git a/ml/coverage/base.css b/ml/coverage/base.css new file mode 100644 index 00000000..f418035b --- /dev/null +++ b/ml/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/ml/coverage/block-navigation.js b/ml/coverage/block-navigation.js new file mode 100644 index 00000000..530d1ed2 --- /dev/null +++ b/ml/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/ml/coverage/clover.xml b/ml/coverage/clover.xml new file mode 100644 index 00000000..4e17b9e0 --- /dev/null +++ b/ml/coverage/clover.xml @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ml/coverage/coverage-final.json b/ml/coverage/coverage-final.json new file mode 100644 index 00000000..e86269dc --- /dev/null +++ b/ml/coverage/coverage-final.json @@ -0,0 +1,10 @@ +{"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\script.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\script.js","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":17}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":66}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":65}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":66}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":66}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":2}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":45}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":52}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":43}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":47}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":47}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":13}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":49}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":73}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":48}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":61}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":17}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":1}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":37}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":46}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":23}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":31}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":31}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":81}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":33}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":31}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":9}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":7}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":54}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":0}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":42}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":54}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":71}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":1}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":53}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":56}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":59}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":62}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":58}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":61}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":51}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":21}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":61}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":71}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":56}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":18}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":44}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":18}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":26}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":64}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":70}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":32}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":31}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":24}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":48}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":54}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":26}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":30}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":16}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":51}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":51}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":54}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":9}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":5}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":50}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":27}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":26}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":7}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":28}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":50}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":8}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":55}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":28}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":36}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":36}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":36}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":35}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":10}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":94}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":5}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":32}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":77}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":70}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":8}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":61}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":28}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":36}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":59}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":100}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":18}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":10}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":5}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":42}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":28}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":56}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":52}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":50}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":26}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":84}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":75}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":35}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":109}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":0}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":38}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":69}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":50}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":5}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":45}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":51}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":47}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":37}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":75}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":19}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":9}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":28}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":74}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":72}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":0}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":95}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":69}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":19}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":9}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":0}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":36}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":50}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":32}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":35}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":26}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":95}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":95}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":94}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":101}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":101}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":51}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":45}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":37}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":25}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":45}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":66}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":17}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":7}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":3}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":6337},"end":{"line":168,"column":3}},"locations":[{"start":{"line":1,"column":6337},"end":{"line":168,"column":3}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":6337},"end":{"line":168,"column":3}},"loc":{"start":{"line":1,"column":6337},"end":{"line":168,"column":3}},"line":1}},"f":{"0":0}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\controllers\\rider\\rideController.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\controllers\\rider\\rideController.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":60}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":15}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":34}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":52}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":51}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":5}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":71}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":24}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":4}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":44}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":9}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":39}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":90}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":48}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":21}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":11}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":17}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":63}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":5}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":2}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":29}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":40}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":40}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":33}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":27}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":36}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":16}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":28}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":52}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":35}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":27}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":16}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":2}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":0}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":28}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":12}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":33}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":69}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":74}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":6}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":2}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":80}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":6,"7":1,"8":1,"9":5,"10":5,"11":5,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":5,"19":6,"20":0,"21":0,"22":5,"23":5,"24":5,"25":1,"26":1,"27":2,"28":2,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1},"branchMap":{"0":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":19},"end":{"line":25,"column":2}},"locations":[{"start":{"line":6,"column":19},"end":{"line":25,"column":2}}]},"1":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":25},"end":{"line":7,"column":49}},"locations":[{"start":{"line":7,"column":25},"end":{"line":7,"column":49}}]},"2":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":51},"end":{"line":9,"column":5}},"locations":[{"start":{"line":7,"column":51},"end":{"line":9,"column":5}}]},"3":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":-2},"end":{"line":20,"column":6}},"locations":[{"start":{"line":10,"column":-2},"end":{"line":20,"column":6}}]},"4":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":6},"end":{"line":22,"column":5}},"locations":[{"start":{"line":20,"column":6},"end":{"line":22,"column":5}}]},"5":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":-2},"end":{"line":25,"column":2}},"locations":[{"start":{"line":23,"column":-2},"end":{"line":25,"column":2}}]},"6":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":20},"end":{"line":29,"column":2}},"locations":[{"start":{"line":27,"column":20},"end":{"line":29,"column":2}}]},"7":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":22},"end":{"line":28,"column":38}},"locations":[{"start":{"line":28,"column":22},"end":{"line":28,"column":38}}]},"8":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":19},"end":{"line":36,"column":2}},"locations":[{"start":{"line":31,"column":19},"end":{"line":36,"column":2}}]},"9":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":15},"end":{"line":33,"column":27}},"locations":[{"start":{"line":33,"column":15},"end":{"line":33,"column":27}}]},"10":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":19},"end":{"line":43,"column":2}},"locations":[{"start":{"line":38,"column":19},"end":{"line":43,"column":2}}]},"11":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":22},"end":{"line":40,"column":35}},"locations":[{"start":{"line":40,"column":22},"end":{"line":40,"column":35}}]},"12":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":34},"end":{"line":39,"column":50}},"locations":[{"start":{"line":39,"column":34},"end":{"line":39,"column":50}}]},"13":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":21},"end":{"line":51,"column":2}},"locations":[{"start":{"line":45,"column":21},"end":{"line":51,"column":2}}]},"14":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":34},"end":{"line":48,"column":60}},"locations":[{"start":{"line":48,"column":34},"end":{"line":48,"column":60}}]},"15":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":37},"end":{"line":49,"column":66}},"locations":[{"start":{"line":49,"column":37},"end":{"line":49,"column":66}}]}},"b":{"0":[6],"1":[5],"2":[1],"3":[5],"4":[0],"5":[5],"6":[2],"7":[2],"8":[1],"9":[0],"10":[1],"11":[0],"12":[1],"13":[1],"14":[1],"15":[1]},"fnMap":{"0":{"name":"createRide","decl":{"start":{"line":6,"column":19},"end":{"line":25,"column":2}},"loc":{"start":{"line":6,"column":19},"end":{"line":25,"column":2}},"line":6},"1":{"name":"getRideById","decl":{"start":{"line":27,"column":20},"end":{"line":29,"column":2}},"loc":{"start":{"line":27,"column":20},"end":{"line":29,"column":2}},"line":27},"2":{"name":"updateRide","decl":{"start":{"line":31,"column":19},"end":{"line":36,"column":2}},"loc":{"start":{"line":31,"column":19},"end":{"line":36,"column":2}},"line":31},"3":{"name":"deleteRide","decl":{"start":{"line":38,"column":19},"end":{"line":43,"column":2}},"loc":{"start":{"line":38,"column":19},"end":{"line":43,"column":2}},"line":38},"4":{"name":"getRideStats","decl":{"start":{"line":45,"column":21},"end":{"line":51,"column":2}},"loc":{"start":{"line":45,"column":21},"end":{"line":51,"column":2}},"line":45}},"f":{"0":6,"1":2,"2":1,"3":1,"4":1}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\demandService.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\demandService.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":41}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":19}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":77}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":5}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":47}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":57}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":7}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":38}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":24}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":20}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":69}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":46}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":10}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":37}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":22}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":5}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":7}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":29}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":28}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":42}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":7}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":30}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":58}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":83}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":9}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":75}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":80}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":65}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":84}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":7}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":65}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":28}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":49}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":47}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":7}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":51}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":44}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":57}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":75}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":11}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":5}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":7}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":33}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":7}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":27}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":31}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":38}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":39}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":40}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":13}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":44}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":11}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":27}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":5}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":7}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":50}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":7}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":17}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":29}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":5}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":1}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":42}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":29}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":25}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":4,"6":4,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":62,"14":62,"15":62,"16":62,"17":62,"18":62,"19":62,"20":62,"21":62,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":62,"30":1,"31":1,"32":62,"33":0,"34":0,"35":62,"36":1,"37":1,"38":62,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":3,"49":3,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":3,"60":2,"61":2,"62":3,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":13,"72":13,"73":1,"74":1,"75":1,"76":1,"77":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"locations":[{"start":{"line":5,"column":4},"end":{"line":7,"column":5}}]},"1":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":4},"end":{"line":22,"column":5}},"locations":[{"start":{"line":13,"column":4},"end":{"line":22,"column":5}}]},"2":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":4},"end":{"line":39,"column":5}},"locations":[{"start":{"line":29,"column":4},"end":{"line":39,"column":5}}]},"3":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":23},"end":{"line":30,"column":55}},"locations":[{"start":{"line":30,"column":23},"end":{"line":30,"column":55}}]},"4":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":57},"end":{"line":32,"column":9}},"locations":[{"start":{"line":30,"column":57},"end":{"line":32,"column":9}}]},"5":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":8},"end":{"line":33,"column":72}},"locations":[{"start":{"line":32,"column":8},"end":{"line":33,"column":72}}]},"6":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":74},"end":{"line":35,"column":9}},"locations":[{"start":{"line":33,"column":74},"end":{"line":35,"column":9}}]},"7":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":8},"end":{"line":36,"column":62}},"locations":[{"start":{"line":35,"column":8},"end":{"line":36,"column":62}}]},"8":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":64},"end":{"line":38,"column":9}},"locations":[{"start":{"line":36,"column":64},"end":{"line":38,"column":9}}]},"9":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"locations":[{"start":{"line":47,"column":4},"end":{"line":52,"column":5}}]},"10":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":38},"end":{"line":51,"column":9}},"locations":[{"start":{"line":48,"column":38},"end":{"line":51,"column":9}}]},"11":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":35},"end":{"line":50,"column":55}},"locations":[{"start":{"line":50,"column":35},"end":{"line":50,"column":55}}]},"12":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":56},"end":{"line":50,"column":74}},"locations":[{"start":{"line":50,"column":56},"end":{"line":50,"column":74}}]},"13":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":4},"end":{"line":66,"column":5}},"locations":[{"start":{"line":57,"column":4},"end":{"line":66,"column":5}}]},"14":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":32},"end":{"line":64,"column":9}},"locations":[{"start":{"line":59,"column":32},"end":{"line":64,"column":9}}]},"15":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":38},"end":{"line":62,"column":13}},"locations":[{"start":{"line":60,"column":38},"end":{"line":62,"column":13}}]},"16":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"locations":[{"start":{"line":71,"column":4},"end":{"line":73,"column":5}}]}},"b":{"0":[4],"1":[62],"2":[62],"3":[61],"4":[1],"5":[61],"6":[0],"7":[61],"8":[1],"9":[1],"10":[3],"11":[2],"12":[1],"13":[1],"14":[3],"15":[2],"16":[13]},"fnMap":{"0":{"name":"DemandService","decl":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"loc":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"line":5},"1":{"name":"storeDemandData","decl":{"start":{"line":13,"column":4},"end":{"line":22,"column":5}},"loc":{"start":{"line":13,"column":4},"end":{"line":22,"column":5}},"line":13},"2":{"name":"validateDemandData","decl":{"start":{"line":29,"column":4},"end":{"line":39,"column":5}},"loc":{"start":{"line":29,"column":4},"end":{"line":39,"column":5}},"line":29},"3":{"name":"getHistoricalDemand","decl":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"loc":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"line":47},"4":{"name":"getAggregatedDemand","decl":{"start":{"line":57,"column":4},"end":{"line":66,"column":5}},"loc":{"start":{"line":57,"column":4},"end":{"line":66,"column":5}},"line":57},"5":{"name":"clearData","decl":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":5}},"line":71}},"f":{"0":4,"1":62,"2":62,"3":1,"4":1,"5":13}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\optimizationService.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\optimizationService.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":47}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":55}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":3}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":55}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":3}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":19}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":68}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":5}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":7}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":80}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":7}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":27}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":63}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":44}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":56}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":86}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":12}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":70}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":74}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":12}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":67}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":10}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":59}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":43}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":0}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":33}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":24}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":5}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":7}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":53}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":28}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":34}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":7}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":53}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":82}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":65}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":8}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":75}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":8}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":16}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":17}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":24}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":28}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":30}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":116}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":10}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":5}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":7}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":76}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":82}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":48}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":86}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":90}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":8}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":35}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":8}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":39}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":41}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":64}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":46}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":38}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":36}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":36}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":93}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":80}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":19}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":13}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":11}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":31}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":5}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":1}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":54}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":35}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":31}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":2,"52":2,"53":2,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1},"branchMap":{"0":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":4},"end":{"line":10,"column":5}},"locations":[{"start":{"line":8,"column":4},"end":{"line":10,"column":5}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":4},"end":{"line":32,"column":5}},"locations":[{"start":{"line":16,"column":4},"end":{"line":32,"column":5}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":35},"end":{"line":26,"column":9}},"locations":[{"start":{"line":18,"column":35},"end":{"line":26,"column":9}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":51},"end":{"line":19,"column":55}},"locations":[{"start":{"line":19,"column":51},"end":{"line":19,"column":55}}]},"4":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":16},"end":{"line":27,"column":33}},"locations":[{"start":{"line":27,"column":16},"end":{"line":27,"column":33}}]},"5":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":14},"end":{"line":28,"column":41}},"locations":[{"start":{"line":28,"column":14},"end":{"line":28,"column":41}}]},"6":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":54,"column":5}},"locations":[{"start":{"line":40,"column":4},"end":{"line":54,"column":5}}]},"7":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":69},"end":{"line":44,"column":73}},"locations":[{"start":{"line":44,"column":69},"end":{"line":44,"column":73}}]},"8":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":44},"end":{"line":52,"column":59}},"locations":[{"start":{"line":52,"column":44},"end":{"line":52,"column":59}}]},"9":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":60},"end":{"line":52,"column":116}},"locations":[{"start":{"line":52,"column":60},"end":{"line":52,"column":116}}]},"10":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":85},"end":{"line":52,"column":102}},"locations":[{"start":{"line":52,"column":85},"end":{"line":52,"column":102}}]},"11":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":80,"column":5}},"locations":[{"start":{"line":60,"column":4},"end":{"line":80,"column":5}}]},"12":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":53},"end":{"line":61,"column":84}},"locations":[{"start":{"line":61,"column":53},"end":{"line":61,"column":84}}]},"13":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":55},"end":{"line":62,"column":88}},"locations":[{"start":{"line":62,"column":55},"end":{"line":62,"column":88}}]},"14":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":30},"end":{"line":77,"column":9}},"locations":[{"start":{"line":66,"column":30},"end":{"line":77,"column":9}}]},"15":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":70},"end":{"line":74,"column":80}},"locations":[{"start":{"line":74,"column":70},"end":{"line":74,"column":80}}]}},"b":{"0":[1],"1":[1],"2":[2],"3":[0],"4":[2],"5":[1],"6":[2],"7":[0],"8":[1],"9":[1],"10":[0],"11":[1],"12":[2],"13":[2],"14":[1],"15":[0]},"fnMap":{"0":{"name":"OptimizationService","decl":{"start":{"line":8,"column":4},"end":{"line":10,"column":5}},"loc":{"start":{"line":8,"column":4},"end":{"line":10,"column":5}},"line":8},"1":{"name":"detectHotspots","decl":{"start":{"line":16,"column":4},"end":{"line":32,"column":5}},"loc":{"start":{"line":16,"column":4},"end":{"line":32,"column":5}},"line":16},"2":{"name":"analyzeImbalance","decl":{"start":{"line":40,"column":4},"end":{"line":54,"column":5}},"loc":{"start":{"line":40,"column":4},"end":{"line":54,"column":5}},"line":40},"3":{"name":"generateRecommendations","decl":{"start":{"line":60,"column":4},"end":{"line":80,"column":5}},"loc":{"start":{"line":60,"column":4},"end":{"line":80,"column":5}},"line":60}},"f":{"0":1,"1":1,"2":2,"3":1}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\predictionService.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\predictionService.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":89}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":45}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":19}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":99}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":5}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":7}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":49}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":28}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":69}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":7}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":74}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":8}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":42}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":71}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":65}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":12}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":33}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":53}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":13}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":47}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":37}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":11}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":0}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":46}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":35}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":37}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":75}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":9}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":0}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":29}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":46}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":49}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":10}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":33}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":5}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":7}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":65}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":28}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":44}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":7}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":42}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":40}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":21}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":66}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":66}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":61}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":8}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":77}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":48}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":5}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":7}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":64}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":28}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":69}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":7}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":38}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":27}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":22}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":36}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":17}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":78}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":67}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":24}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":25}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":50}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":13}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":11}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":55}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":16}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":17}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":16}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":30}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":49}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":10}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":5}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":50}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":33}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":29}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":2,"8":2,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":3,"17":3,"18":3,"19":3,"20":3,"21":3,"22":3,"23":2,"24":2,"25":3,"26":3,"27":3,"28":3,"29":3,"30":3,"31":3,"32":2,"33":2,"34":3,"35":3,"36":3,"37":3,"38":3,"39":3,"40":3,"41":3,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":4,"50":4,"51":1,"52":1,"53":3,"54":3,"55":3,"56":3,"57":3,"58":4,"59":4,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":0,"77":0,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1},"branchMap":{"0":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},"locations":[{"start":{"line":7,"column":4},"end":{"line":9,"column":5}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":4},"end":{"line":42,"column":5}},"locations":[{"start":{"line":16,"column":4},"end":{"line":42,"column":5}}]},"2":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":36},"end":{"line":34,"column":9}},"locations":[{"start":{"line":32,"column":36},"end":{"line":34,"column":9}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":31},"end":{"line":28,"column":9}},"locations":[{"start":{"line":19,"column":31},"end":{"line":28,"column":9}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":32},"end":{"line":25,"column":13}},"locations":[{"start":{"line":23,"column":32},"end":{"line":25,"column":13}}]},"5":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":4},"end":{"line":60,"column":5}},"locations":[{"start":{"line":49,"column":4},"end":{"line":60,"column":5}}]},"6":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":20},"end":{"line":53,"column":9}},"locations":[{"start":{"line":51,"column":20},"end":{"line":53,"column":9}}]},"7":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":8},"end":{"line":59,"column":43}},"locations":[{"start":{"line":53,"column":8},"end":{"line":59,"column":43}}]},"8":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":43},"end":{"line":59,"column":47}},"locations":[{"start":{"line":59,"column":43},"end":{"line":59,"column":47}}]},"9":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":88,"column":5}},"locations":[{"start":{"line":67,"column":4},"end":{"line":88,"column":5}}]},"10":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":51},"end":{"line":81,"column":54}},"locations":[{"start":{"line":81,"column":51},"end":{"line":81,"column":54}}]},"11":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":25},"end":{"line":79,"column":9}},"locations":[{"start":{"line":71,"column":25},"end":{"line":79,"column":9}}]},"12":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":78,"column":13}},"locations":[{"start":{"line":76,"column":14},"end":{"line":78,"column":13}}]}},"b":{"0":[2],"1":[3],"2":[2],"3":[3],"4":[2],"5":[4],"6":[1],"7":[3],"8":[1],"9":[1],"10":[0],"11":[1],"12":[0]},"fnMap":{"0":{"name":"PredictionService","decl":{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},"line":7},"1":{"name":"trainModel","decl":{"start":{"line":16,"column":4},"end":{"line":42,"column":5}},"loc":{"start":{"line":16,"column":4},"end":{"line":42,"column":5}},"line":16},"2":{"name":"predictDemand","decl":{"start":{"line":49,"column":4},"end":{"line":60,"column":5}},"loc":{"start":{"line":49,"column":4},"end":{"line":60,"column":5}},"line":49},"3":{"name":"evaluateAccuracy","decl":{"start":{"line":67,"column":4},"end":{"line":88,"column":5}},"loc":{"start":{"line":67,"column":4},"end":{"line":88,"column":5}},"line":67}},"f":{"0":2,"1":3,"2":4,"3":1}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\socketService.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\services\\socketService.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":23}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":21}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":39}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":40}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":6}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":40}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":43}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":6}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":28}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":51}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":48}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":20}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":5}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":2}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":29}}},"s":{"0":1,"1":1,"2":1,"3":2,"4":2,"5":1,"6":1,"7":2,"8":2,"9":1,"10":1,"11":2,"12":1,"13":1,"14":2,"15":1,"16":1,"17":1},"branchMap":{"0":{"type":"branch","line":3,"loc":{"start":{"line":3,"column":13},"end":{"line":6,"column":5}},"locations":[{"start":{"line":3,"column":13},"end":{"line":6,"column":5}}]},"1":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":16},"end":{"line":10,"column":5}},"locations":[{"start":{"line":7,"column":16},"end":{"line":10,"column":5}}]},"2":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":10},"end":{"line":15,"column":5}},"locations":[{"start":{"line":11,"column":10},"end":{"line":15,"column":5}}]},"3":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":38},"end":{"line":15,"column":4}},"locations":[{"start":{"line":12,"column":38},"end":{"line":15,"column":4}}]}},"b":{"0":[2],"1":[2],"2":[2],"3":[1]},"fnMap":{"0":{"name":"connect","decl":{"start":{"line":3,"column":13},"end":{"line":6,"column":5}},"loc":{"start":{"line":3,"column":13},"end":{"line":6,"column":5}},"line":3},"1":{"name":"disconnect","decl":{"start":{"line":7,"column":16},"end":{"line":10,"column":5}},"loc":{"start":{"line":7,"column":16},"end":{"line":10,"column":5}},"line":7},"2":{"name":"emit","decl":{"start":{"line":11,"column":10},"end":{"line":15,"column":5}},"loc":{"start":{"line":11,"column":10},"end":{"line":15,"column":5}},"line":11}},"f":{"0":2,"1":2,"2":2}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\math.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\math.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":52}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":43}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":47}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":47}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":13}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":49}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":73}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":48}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":61}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":1}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":40}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":86}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":31}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":1}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":41}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1},"branchMap":{},"b":{},"fnMap":{"0":{"name":"calculateDistance","decl":{"start":{"line":1,"column":0},"end":{"line":11,"column":1}},"loc":{"start":{"line":1,"column":0},"end":{"line":11,"column":1}},"line":1},"1":{"name":"computeMAE","decl":{"start":{"line":13,"column":0},"end":{"line":17,"column":1}},"loc":{"start":{"line":13,"column":0},"end":{"line":17,"column":1}},"line":13}},"f":{"0":0,"1":0}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\mockDataGenerator.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\mockDataGenerator.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":60}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":4}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":27}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":40}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":42}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":48}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":59}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":47}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":0}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":45}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":75}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":39}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":69}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":16}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":50}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":87}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":89}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":45}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":48}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":62}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":25}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":55}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":71}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":19}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":37}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":13}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":9}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":7}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":19}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":2}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":3}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":49}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":3}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":39}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":61}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":35}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":49}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":9}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":44}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":34}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":70}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":17}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":58}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":21}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":5}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":2,"11":2,"12":48,"13":48,"14":48,"15":48,"16":48,"17":48,"18":48,"19":48,"20":48,"21":48,"22":48,"23":48,"24":48,"25":48,"26":48,"27":48,"28":48,"29":48,"30":48,"31":48,"32":48,"33":48,"34":48,"35":2,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":0,"46":0,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0},"branchMap":{"0":{"type":"branch","line":6,"loc":{"start":{"line":6,"column":38},"end":{"line":40,"column":2}},"locations":[{"start":{"line":6,"column":38},"end":{"line":40,"column":2}}]},"1":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":18},"end":{"line":37,"column":5}},"locations":[{"start":{"line":10,"column":18},"end":{"line":37,"column":5}}]},"2":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":41},"end":{"line":35,"column":13}},"locations":[{"start":{"line":12,"column":41},"end":{"line":35,"column":13}}]},"3":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":42},"end":{"line":23,"column":55}},"locations":[{"start":{"line":23,"column":42},"end":{"line":23,"column":55}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":57},"end":{"line":23,"column":86}},"locations":[{"start":{"line":23,"column":57},"end":{"line":23,"column":86}}]},"5":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":72},"end":{"line":23,"column":85}},"locations":[{"start":{"line":23,"column":72},"end":{"line":23,"column":85}}]},"6":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":28},"end":{"line":26,"column":45}},"locations":[{"start":{"line":26,"column":28},"end":{"line":26,"column":45}}]},"7":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":31},"end":{"line":27,"column":48}},"locations":[{"start":{"line":27,"column":31},"end":{"line":27,"column":48}}]}},"b":{"0":[1],"1":[2],"2":[48],"3":[32],"4":[42],"5":[14],"6":[12],"7":[0]},"fnMap":{"0":{"name":"generateMockDemandData","decl":{"start":{"line":6,"column":38},"end":{"line":40,"column":2}},"loc":{"start":{"line":6,"column":38},"end":{"line":40,"column":2}},"line":6},"1":{"name":"exportDemandData","decl":{"start":{"line":45,"column":32},"end":{"line":47,"column":2}},"loc":{"start":{"line":45,"column":32},"end":{"line":47,"column":2}},"line":45},"2":{"name":"importDemandData","decl":{"start":{"line":52,"column":32},"end":{"line":62,"column":2}},"loc":{"start":{"line":52,"column":32},"end":{"line":62,"column":2}},"line":52}},"f":{"0":1,"1":0,"2":0}} +,"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\preprocessing.js": {"path":"C:\\Users\\Vijeya Varshini\\OneDrive\\Desktop\\ml\\utils\\preprocessing.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":65}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":47}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":34}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":58}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":3}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":55}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":37}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":12}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":55}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":44}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":71}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":6}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":48}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":25}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":23}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":23}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":20}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":47}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":30}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":39}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":35}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":64}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":56}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":3}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":49}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":34}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":67}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":16}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":20}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":48}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":52}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":34}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":14}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":102}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":10}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":7}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":52}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":26}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":19}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":3}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":39}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":31}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":29}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":34}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":25}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":70}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":6}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":6,"11":6,"12":6,"13":6,"14":6,"15":6,"16":6,"17":6,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":0,"28":0,"29":0,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":39},"end":{"line":18,"column":2}},"locations":[{"start":{"line":10,"column":39},"end":{"line":18,"column":2}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":64},"end":{"line":16,"column":67}},"locations":[{"start":{"line":16,"column":64},"end":{"line":16,"column":67}}]}},"b":{"0":[6],"1":[0]},"fnMap":{"0":{"name":"extractTemporalFeatures","decl":{"start":{"line":10,"column":39},"end":{"line":18,"column":2}},"loc":{"start":{"line":10,"column":39},"end":{"line":18,"column":2}},"line":10},"1":{"name":"normalize","decl":{"start":{"line":27,"column":25},"end":{"line":30,"column":2}},"loc":{"start":{"line":27,"column":25},"end":{"line":30,"column":2}},"line":27},"2":{"name":"prepareTrainingData","decl":{"start":{"line":37,"column":35},"end":{"line":49,"column":2}},"loc":{"start":{"line":37,"column":35},"end":{"line":49,"column":2}},"line":37},"3":{"name":"cleanData","decl":{"start":{"line":56,"column":25},"end":{"line":63,"column":2}},"loc":{"start":{"line":56,"column":25},"end":{"line":63,"column":2}},"line":56}},"f":{"0":6,"1":0,"2":0,"3":0}} +} diff --git a/ml/coverage/favicon.png b/ml/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 64.94% + Statements + 415/639 +
+ + +
+ 83.11% + Branches + 64/77 +
+ + +
+ 75% + Functions + 24/32 +
+ + +
+ 64.94% + Lines + 415/639 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ml +
+
0%0/1680%0/10%0/10%0/168
ml/controllers/rider +
+
96.22%51/5381.25%13/16100%5/596.22%51/53
ml/services +
+
98.54%270/27486%43/50100%17/1798.54%270/274
ml/utils +
+
65.27%94/14480%8/1022.22%2/965.27%94/144
+
+
+
+ + + + + + + + \ No newline at end of file