diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c0f3dac..b5795c0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -21,16 +21,6 @@ jobs: git clone --depth 1 $GITEA_URL/$GITHUB_REPOSITORY $GITHUB_WORKSPACE git -C $GITHUB_WORKSPACE checkout $GITHUB_SHA 2>/dev/null || true - - name: Run ruff (Python lint) - if: always() - run: | - if [[ -f pyproject.toml ]]; then - pip3 install ruff - ruff check . - else - echo "No Python project detected, skipping ruff" - fi - - name: Run npm lint (JS/TS) if: always() run: | @@ -52,36 +42,18 @@ jobs: git clone --depth 1 $GITEA_URL/$GITHUB_REPOSITORY $GITHUB_WORKSPACE git -C $GITHUB_WORKSPACE checkout $GITHUB_SHA 2>/dev/null || true - - name: Run pytest (Python) - if: always() - run: | - if [[ -f pyproject.toml ]]; then - python3 -m pip install --upgrade pip - pip3 install -e ".[dev]" 2>/dev/null || pip3 install -e . 2>/dev/null || true - pip3 install pytest - pytest tests/ -v --tb=short 2>/dev/null || true - else - echo "No Python project detected, skipping pytest" - fi + - name: Install dependencies + run: npm ci - - name: Run npm test (JS/TS) - if: always() - run: | - if [[ -f package.json ]]; then - npm ci - npm run test --if-present || true - else - echo "No Node.js project detected, skipping npm test" - fi + - name: Run tests with coverage + run: npm test - - name: Run Go tests + - name: Upload coverage report if: always() - run: | - if [[ -f go.mod ]]; then - go test ./... - else - echo "No Go project detected, skipping go test" - fi + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: coverage/ docker-build: runs-on: ubuntu-latest @@ -112,16 +84,6 @@ jobs: git clone --depth 1 $GITEA_URL/$GITHUB_REPOSITORY $GITHUB_WORKSPACE git -C $GITHUB_WORKSPACE checkout $GITHUB_SHA 2>/dev/null || true - - name: Run bandit (Python SAST) - if: always() - run: | - if [[ -f pyproject.toml ]]; then - pip3 install bandit - bandit -r . --severity-level high --confidence-level high --exclude tests/,test_* - else - echo "No Python project detected, skipping bandit" - fi - - name: Run npm audit (JS/TS) if: always() run: | diff --git a/.gitignore b/.gitignore index a5fb3cf..86a248c 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,7 @@ dist/ # Temporary files *.tmp -*.temp \ No newline at end of file +*.temp + +# Coverage +coverage/ \ No newline at end of file diff --git a/coverage/AppState.js.html b/coverage/AppState.js.html new file mode 100644 index 0000000..1fc60d4 --- /dev/null +++ b/coverage/AppState.js.html @@ -0,0 +1,697 @@ + + + + + + Code coverage report for AppState.js + + + + + + + + + +
+
+

All files AppState.js

+
+ +
+ 98.9% + Statements + 180/182 +
+ + +
+ 100% + Branches + 24/24 +
+ + +
+ 95.45% + Functions + 21/22 +
+ + +
+ 98.9% + Lines + 180/182 +
+ + +
+

+ 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 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +2051x +  +1x +1x +1x +1x +1x +22x +22x +22x +22x +22x +22x +22x +22x +22x +22x +22x +22x +  +1x +1x +1x +1x +1x +4x +4x +  +1x +1x +1x +1x +1x +4x +4x +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +4x +4x +  +1x +1x +1x +1x +1x +2x +2x +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +2x +2x +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +2x +2x +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +2x +2x +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +  +  +  +1x +1x +1x +1x +1x +3x +3x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +22x +22x +22x +22x +22x +  +1x +1x +1x +1x +1x +5x +3x +3x +3x +3x +2x +5x +  +1x +1x +1x +1x +1x +9x +9x +  +1x +1x +1x +1x +1x +2x +2x +  +1x +1x +1x +1x +1x +5x +5x +  +1x +1x +1x +1x +1x +6x +6x +1x +  +1x
const path = require('path');
+ 
+/**
+ * AppState - Manages application state
+ */
+class AppState {
+  constructor() {
+    this.currentDirectory = null;
+    this.currentFiles = [];
+    this.currentShow = null;
+    this.currentSeasons = [];
+    this.currentEpisodes = [];
+    this.selectedSeasonEpisodeCount = 0;
+    this.isUpdatingEpisodeNumbers = false;
+    
+    // Navigation stack for folder navigation
+    this.navigationStack = [];
+    this.currentDepth = 0;
+  }
+ 
+  /**
+   * Set the current directory
+   * @param {string} directory - Directory path
+   */
+  setCurrentDirectory(directory) {
+    this.currentDirectory = directory;
+  }
+ 
+  /**
+   * Get the current directory
+   * @returns {string|null} Current directory path
+   */
+  getCurrentDirectory() {
+    return this.currentDirectory;
+  }
+ 
+  /**
+   * Set current files
+   * @param {Array} files - Array of file objects
+   */
+  setCurrentFiles(files) {
+    this.currentFiles = files;
+  }
+ 
+  /**
+   * Get current files
+   * @returns {Array} Array of file objects
+   */
+  getCurrentFiles() {
+    return this.currentFiles;
+  }
+ 
+  /**
+   * Set current show
+   * @param {Object} show - Show object
+   */
+  setCurrentShow(show) {
+    this.currentShow = show;
+  }
+ 
+  /**
+   * Get current show
+   * @returns {Object|null} Current show object
+   */
+  getCurrentShow() {
+    return this.currentShow;
+  }
+ 
+  /**
+   * Set current seasons
+   * @param {Array} seasons - Array of season objects
+   */
+  setCurrentSeasons(seasons) {
+    this.currentSeasons = seasons;
+  }
+ 
+  /**
+   * Get current seasons
+   * @returns {Array} Array of season objects
+   */
+  getCurrentSeasons() {
+    return this.currentSeasons;
+  }
+ 
+  /**
+   * Set current episodes
+   * @param {Array} episodes - Array of episode objects
+   */
+  setCurrentEpisodes(episodes) {
+    this.currentEpisodes = episodes;
+  }
+ 
+  /**
+   * Get current episodes
+   * @returns {Array} Array of episode objects
+   */
+  getCurrentEpisodes() {
+    return this.currentEpisodes;
+  }
+ 
+  /**
+   * Set selected season episode count
+   * @param {number} count - Episode count
+   */
+  setSelectedSeasonEpisodeCount(count) {
+    this.selectedSeasonEpisodeCount = count;
+  }
+ 
+  /**
+   * Get selected season episode count
+   * @returns {number} Episode count
+   */
+  getSelectedSeasonEpisodeCount() {
+    return this.selectedSeasonEpisodeCount;
+  }
+ 
+  /**
+   * Check if episode numbers are currently updating
+   * @returns {boolean} True if updating
+   */
+  isUpdatingEpisodeNumbers() {
+    return this.isUpdatingEpisodeNumbers;
+  }
+ 
+  /**
+   * Set episode numbers updating flag
+   * @param {boolean} updating - Updating state
+   */
+  setUpdatingEpisodeNumbers(updating) {
+    this.isUpdatingEpisodeNumbers = updating;
+  }
+ 
+  /**
+   * Reset state to initial values
+   */
+  reset() {
+    this.currentDirectory = null;
+    this.currentFiles = [];
+    this.currentShow = null;
+    this.currentSeasons = [];
+    this.currentEpisodes = [];
+    this.selectedSeasonEpisodeCount = 0;
+    this.isUpdatingEpisodeNumbers = false;
+    this.navigationStack = [];
+    this.currentDepth = 0;
+  }
+ 
+  /**
+   * Add directory to navigation stack
+   * @param {string} directory - Directory path to add
+   */
+  addToNavigationStack(directory) {
+    // Remove any forward history if navigating from middle of stack
+    this.navigationStack = this.navigationStack.slice(0, this.currentDepth + 1);
+    this.navigationStack.push(directory);
+    this.currentDepth = this.navigationStack.length - 1;
+  }
+ 
+  /**
+   * Go back to previous directory in navigation stack
+   * @returns {string|null} Previous directory path or null if at root
+   */
+  goBack() {
+    if (this.canGoBack()) {
+      this.navigationStack.pop();
+      this.currentDepth--;
+      return this.navigationStack[this.currentDepth];
+    }
+    return null;
+  }
+ 
+  /**
+   * Check if can go back in navigation history
+   * @returns {boolean} True if can go back
+   */
+  canGoBack() {
+    return this.currentDepth > 0;
+  }
+ 
+  /**
+   * Get current directory from navigation stack
+   * @returns {string|null} Current directory path
+   */
+  getCurrentDirectoryFromStack() {
+    return this.navigationStack[this.currentDepth] || null;
+  }
+ 
+  /**
+   * Get navigation depth
+   * @returns {number} Current navigation depth
+   */
+  getNavigationDepth() {
+    return this.currentDepth;
+  }
+ 
+  /**
+   * Get navigation stack
+   * @returns {Array} Array of visited directories
+   */
+  getNavigationStack() {
+    return this.navigationStack;
+  }
+}
+ 
+module.exports = AppState;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/EpisodeManager.js.html b/coverage/EpisodeManager.js.html new file mode 100644 index 0000000..f6f9760 --- /dev/null +++ b/coverage/EpisodeManager.js.html @@ -0,0 +1,985 @@ + + + + + + Code coverage report for EpisodeManager.js + + + + + + + + + +
+
+

All files EpisodeManager.js

+
+ +
+ 81.27% + Statements + 204/251 +
+ + +
+ 85.1% + Branches + 40/47 +
+ + +
+ 84.61% + Functions + 11/13 +
+ + +
+ 81.27% + Lines + 204/251 +
+ + +
+

+ 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 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +3011x +1x +1x +1x +1x +21x +21x +  +1x +1x +1x +1x +1x +6x +1x +1x +1x +  +5x +  +5x +5x +5x +  +5x +6x +6x +6x +6x +  +6x +6x +  +6x +6x +6x +6x +6x +5x +5x +5x +5x +6x +  +1x +1x +1x +1x +1x +2x +  +1x +1x +1x +  +1x +1x +1x +  +1x +1x +1x +1x +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +1x +  +1x +2x +  +1x +1x +1x +1x +1x +1x +1x +4x +4x +  +4x +  +3x +4x +4x +  +4x +4x +  +4x +4x +2x +2x +1x +1x +4x +1x +1x +1x +  +3x +3x +3x +  +3x +3x +  +3x +3x +3x +3x +3x +3x +3x +3x +3x +  +4x +  +3x +4x +1x +  +  +  +  +  +  +  +  +  +  +  +4x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +2x +  +3x +3x +4x +  +1x +1x +1x +1x +1x +1x +1x +2x +  +1x +  +1x +3x +3x +  +3x +3x +  +3x +2x +2x +3x +1x +2x +  +1x +1x +1x +1x +1x +2x +  +1x +  +1x +1x +1x +2x +  +1x +1x +1x +1x +1x +1x +4x +4x +4x +4x +  +1x +1x +1x +1x +1x +1x +2x +2x +  +2x +2x +2x +2x +2x +2x +2x +  +2x +2x +  +1x +1x +1x +1x +1x +1x +2x +2x +  +2x +1x +1x +1x +1x +1x +1x +1x +2x +  +2x +2x +  +1x +1x +1x +1x +1x +4x +4x +  +1x +1x +1x +1x +1x +3x +3x +1x +  +1x
/**
+ * EpisodeManager - Manages episode number editing and highlighting
+ */
+class EpisodeManager {
+  constructor() {
+    this.isUpdatingEpisodeNumbers = false;
+  }
+ 
+  /**
+   * Update episode numbers in the file list
+   * @param {HTMLElement} fileListEl - File list element
+   */
+  updateEpisodeNumbers(fileListEl) {
+    if (this.isUpdatingEpisodeNumbers) {
+      console.log('[updateEpisodeNumbers] Already updating, skipping re-entrant call');
+      return;
+    }
+ 
+    this.isUpdatingEpisodeNumbers = true;
+ 
+    try {
+      const fileItems = fileListEl.querySelectorAll('.file-item:not(.folder-item)');
+      let episodeNum = 1;
+ 
+      fileItems.forEach((item, index) => {
+        const episodeEl = item.querySelector('.episode-number');
+        if (episodeEl) {
+          const storedStart = episodeEl.dataset.episodeStart;
+          const storedEnd = episodeEl.dataset.episodeEnd;
+ 
+          const start = storedStart ? parseInt(storedStart) : episodeNum;
+          const end = storedEnd ? parseInt(storedEnd) : start;
+ 
+          const rangeText = start === end ? `${start}` : `${start}-${end}`;
+          episodeEl.textContent = rangeText;
+          episodeEl.dataset.episode = episodeNum;
+          episodeNum = end + 1;
+        }
+      });
+    } finally {
+      this.isUpdatingEpisodeNumbers = false;
+    }
+  }
+ 
+  /**
+   * Make episode range editable
+   * @param {HTMLElement} element - Episode number element
+   */
+  makeEpisodeRangeEditable(element) {
+    if (element.contentEditable === 'true') return;
+ 
+    const originalText = element.textContent;
+    const originalStart = element.dataset.episodeStart;
+    const originalEnd = element.dataset.episodeEnd;
+ 
+    element.contentEditable = 'true';
+    element.focus();
+    element.classList.add('editing');
+ 
+    const range = document.createRange();
+    range.selectNodeContents(element);
+    const selection = window.getSelection();
+    selection.removeAllRanges();
+    selection.addRange(range);
+ 
+    const saveEdit = () => {
+      const newText = element.textContent.trim();
+ 
+      if (newText !== originalText) {
+        let start, end;
+ 
+        if (newText.includes('-')) {
+          const parts = newText.split('-').map(p => parseInt(p.trim()));
+          start = parts[0];
+          end = parts[1] || start;
+        } else {
+          const num = parseInt(newText);
+          start = num;
+          end = num;
+        }
+ 
+        if (!isNaN(start) && !isNaN(end)) {
+          element.dataset.episodeStart = start;
+          element.dataset.episodeEnd = end;
+          console.log(`Episode range updated: ${start}-${end}`);
+          this.updateEpisodeNumbers(element.closest('#file-list'));
+        } else {
+          element.textContent = originalText;
+          element.dataset.episodeStart = originalStart;
+          element.dataset.episodeEnd = originalEnd;
+        }
+      }
+ 
+      element.contentEditable = 'false';
+      element.classList.remove('editing');
+    };
+ 
+    element.addEventListener('keydown', function(e) {
+      if (e.key === 'Enter') {
+        e.preventDefault();
+        saveEdit();
+      }
+    }, { once: true });
+ 
+    element.addEventListener('blur', saveEdit, { once: true });
+  }
+ 
+  /**
+   * Handle episode arrow click
+   * @param {HTMLElement} element - Arrow element
+   * @param {string} direction - Direction (left or right)
+   * @param {HTMLElement} fileListEl - File list element
+   */
+  handleEpisodeArrowClick(element, direction, fileListEl) {
+    const fileItem = element.closest('.file-item');
+    const episodeEl = fileItem.querySelector('.episode-number');
+ 
+    if (!episodeEl) return;
+ 
+    // Get current values before updating
+    let start = parseInt(episodeEl.dataset.episodeStart) || 1;
+    let end = parseInt(episodeEl.dataset.episodeEnd) || start;
+ 
+    const oldStart = start;
+    const oldEnd = end;
+ 
+    // Update the episode range
+    if (direction === 'left') {
+      // Decrease range - move start back by 1
+      if (start > 1) {
+        start--;
+      }
+    } else {
+      // Increase range - move end forward by 1
+      end++;
+    }
+ 
+    // Update this episode's data attributes
+    episodeEl.dataset.episodeStart = start;
+    episodeEl.dataset.episodeEnd = end;
+ 
+    // Get all media file items (not folders) in order
+    const allFileItems = Array.from(fileListEl.querySelectorAll('.file-item:not(.folder-item)'));
+ 
+    // Find current index by matching file path
+    const filePath = fileItem.dataset.filePath;
+    let currentIndex = -1;
+    for (let i = 0; i < allFileItems.length; i++) {
+      if (allFileItems[i].dataset.filePath === filePath) {
+        currentIndex = i;
+        break;
+      }
+    }
+ 
+    if (currentIndex === -1) return;
+ 
+    // For right arrow: shift all subsequent episodes forward by 1
+    if (direction === 'right') {
+      for (let i = currentIndex + 1; i < allFileItems.length; i++) {
+        const nextItem = allFileItems[i];
+        const nextEpisodeEl = nextItem.querySelector('.episode-number');
+ 
+        if (nextEpisodeEl) {
+          let nextStart = parseInt(nextEpisodeEl.dataset.episodeStart) || 1;
+          const nextEnd = parseInt(nextEpisodeEl.dataset.episodeEnd) || nextStart;
+ 
+          nextEpisodeEl.dataset.episodeStart = nextStart + 1;
+          nextEpisodeEl.dataset.episodeEnd = nextEnd + 1;
+        }
+      }
+    } else {
+      // For left arrow: all subsequent episodes shift down
+      const shiftAmount = oldStart - start;
+      for (let i = currentIndex + 1; i < allFileItems.length; i++) {
+        const nextItem = allFileItems[i];
+        const nextEpisodeEl = nextItem.querySelector('.episode-number');
+ 
+        if (nextEpisodeEl) {
+          let nextStart = parseInt(nextEpisodeEl.dataset.episodeStart) || 1;
+          const nextEnd = parseInt(nextEpisodeEl.dataset.episodeEnd) || nextStart;
+ 
+          nextEpisodeEl.dataset.episodeStart = nextStart - shiftAmount;
+          nextEpisodeEl.dataset.episodeEnd = nextEnd - shiftAmount;
+        }
+      }
+    }
+ 
+    // Force immediate DOM update
+    this.updateEpisodeNumbers(fileListEl);
+  }
+ 
+  /**
+   * Highlight episodes in the episodes container
+   * @param {number} startEpisode - Start episode number
+   * @param {number} endEpisode - End episode number
+   * @param {HTMLElement} episodesContainer - Episodes container element
+   */
+  highlightEpisodes(startEpisode, endEpisode, episodesContainer) {
+    if (!episodesContainer) return;
+ 
+    const episodeItems = episodesContainer.querySelectorAll('.episode-item');
+ 
+    episodeItems.forEach(item => {
+      const episodeText = item.textContent.trim();
+      const episodeMatch = episodeText.match(/E(\d+)/);
+ 
+      if (episodeMatch) {
+        const episodeNum = parseInt(episodeMatch[1]);
+ 
+        if (episodeNum >= startEpisode && episodeNum <= endEpisode) {
+          item.classList.add('highlighted-episode');
+        }
+      }
+    });
+  }
+ 
+  /**
+   * Remove highlights from all episodes
+   * @param {HTMLElement} episodesContainer - Episodes container element
+   */
+  removeEpisodeHighlights(episodesContainer) {
+    if (!episodesContainer) return;
+ 
+    const episodeItems = episodesContainer.querySelectorAll('.episode-item');
+ 
+    episodeItems.forEach(item => {
+      item.classList.remove('highlighted-episode');
+    });
+  }
+ 
+  /**
+   * Get episode range from element
+   * @param {HTMLElement} episodeEl - Episode element
+   * @returns {Object} Episode range object
+   */
+  getEpisodeRange(episodeEl) {
+    const episodeStart = parseInt(episodeEl.dataset.episodeStart) || 1;
+    const episodeEnd = parseInt(episodeEl.dataset.episodeEnd) || episodeStart;
+    return { start: episodeStart, end: episodeEnd };
+  }
+ 
+  /**
+   * Calculate total episode count from file items
+   * @param {HTMLElement} fileListEl - File list element
+   * @returns {number} Total episode count
+   */
+  calculateTotalEpisodeCount(fileListEl) {
+    const mediaFiles = fileListEl.querySelectorAll('.file-item:not(.folder-item)');
+    let totalEpisodeCount = 0;
+ 
+    mediaFiles.forEach(item => {
+      const episodeEl = item.querySelector('.episode-number');
+      if (episodeEl) {
+        const { start, end } = this.getEpisodeRange(episodeEl);
+        totalEpisodeCount += (end - start + 1);
+      }
+    });
+ 
+    return totalEpisodeCount;
+  }
+ 
+  /**
+   * Get last episode end from file items
+   * @param {HTMLElement} fileListEl - File list element
+   * @returns {number} Last episode end number
+   */
+  getLastEpisodeEnd(fileListEl) {
+    const mediaFiles = fileListEl.querySelectorAll('.file-item:not(.folder-item)');
+    let lastEpisodeEnd = 0;
+ 
+    mediaFiles.forEach((item, index) => {
+      const episodeEl = item.querySelector('.episode-number');
+      if (episodeEl) {
+        const episodeEnd = parseInt(episodeEl.dataset.episodeEnd) || 1;
+        if (index === 0 || episodeEnd > lastEpisodeEnd) {
+          lastEpisodeEnd = episodeEnd;
+        }
+      }
+    });
+ 
+    return lastEpisodeEnd;
+  }
+ 
+  /**
+   * Get updating episode numbers flag
+   * @returns {boolean} Updating state
+   */
+  getIsUpdatingEpisodeNumbers() {
+    return this.isUpdatingEpisodeNumbers;
+  }
+ 
+  /**
+   * Set updating episode numbers flag
+   * @param {boolean} updating - Updating state
+   */
+  setIsUpdatingEpisodeNumbers(updating) {
+    this.isUpdatingEpisodeNumbers = updating;
+  }
+}
+ 
+module.exports = EpisodeManager;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/FileListManager.js.html b/coverage/FileListManager.js.html new file mode 100644 index 0000000..6a57638 --- /dev/null +++ b/coverage/FileListManager.js.html @@ -0,0 +1,1318 @@ + + + + + + Code coverage report for FileListManager.js + + + + + + + + + +
+
+

All files FileListManager.js

+
+ +
+ 80.88% + Statements + 275/340 +
+ + +
+ 78.37% + Branches + 29/37 +
+ + +
+ 70.58% + Functions + 12/17 +
+ + +
+ 80.88% + Lines + 275/340 +
+ + +
+

+ 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 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +4121x +1x +1x +1x +1x +18x +18x +18x +18x +18x +18x +  +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +14x +14x +14x +14x +  +14x +1x +1x +1x +  +13x +13x +13x +  +13x +13x +  +13x +13x +6x +13x +  +13x +13x +16x +16x +13x +14x +  +1x +1x +1x +1x +1x +1x +6x +6x +  +6x +6x +6x +  +6x +6x +6x +  +6x +6x +  +6x +6x +  +6x +6x +  +6x +6x +  +6x +  +6x +6x +6x +1x +  +  +1x +1x +1x +6x +  +6x +6x +  +1x +1x +1x +1x +1x +1x +1x +16x +16x +16x +16x +16x +  +16x +16x +16x +  +16x +16x +16x +  +16x +16x +  +16x +16x +16x +16x +  +16x +16x +16x +16x +16x +  +16x +16x +16x +16x +  +16x +  +16x +16x +16x +  +16x +1x +1x +1x +1x +1x +  +16x +16x +16x +  +16x +16x +16x +  +16x +16x +16x +  +16x +16x +  +16x +16x +16x +16x +  +16x +16x +16x +16x +  +16x +16x +16x +16x +  +16x +16x +16x +16x +  +16x +16x +16x +16x +16x +  +16x +  +16x +  +16x +16x +16x +16x +16x +  +16x +16x +  +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 +1x +1x +1x +1x +  +1x +3x +3x +3x +3x +  +3x +3x +  +3x +3x +3x +3x +3x +1x +1x +  +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +9x +9x +  +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +32x +32x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +32x +  +32x +  +  +  +  +  +  +  +  +  +  +32x +32x +  +1x +1x +1x +1x +1x +1x +3x +3x +6x +6x +  +6x +6x +  +6x +6x +  +6x +3x +3x +3x +3x +3x +3x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x
/**
+ * FileListManager - Handles file list display and manipulation
+ */
+class FileListManager {
+  constructor(fileListEl, onFolderClick = null) {
+    this.fileListEl = fileListEl;
+    this.draggedItem = null;
+    this.onFolderClick = onFolderClick || null;
+    this.hoveredEpisodeRange = null;
+    this._setupHoverHandlers();
+  }
+ 
+  /**
+   * Set callback for folder click events
+   * @param {Function} callback - Function to call when folder is clicked
+   */
+  setFolderClickCallback(callback) {
+    this.onFolderClick = callback;
+  }
+ 
+  /**
+   * Display files in the UI
+   * @param {Array} files - Array of file objects
+   */
+  displayFiles(files) {
+    // Re-setup hover handlers when displaying files
+    this._setupHoverHandlers();
+    
+    this.fileListEl.innerHTML = '';
+ 
+    if (files.length === 0) {
+      this.fileListEl.innerHTML = '<p>No media files found in this directory.</p>';
+      return;
+    }
+ 
+    // Separate folders from media files
+    const folders = files.filter(f => f.isFolder);
+    const mediaFiles = files.filter(f => !f.isFolder);
+ 
+    // Track episode number for media files only
+    let episodeNumber = 1;
+ 
+    // Display folders first (not draggable, no episode number)
+    folders.forEach(file => {
+      this._createFolderElement(file);
+    });
+ 
+    // Display media files with episode numbers and drag/drop
+    mediaFiles.forEach((file, index) => {
+      this._createMediaFileElement(file, episodeNumber, index);
+      episodeNumber++;
+    });
+  }
+ 
+  /**
+   * Create folder element
+   * @param {Object} file - File object
+   * @private
+   */
+  _createFolderElement(file) {
+    const fileItem = document.createElement('div');
+    fileItem.className = 'file-item folder-item';
+ 
+    const icon = document.createElement('div');
+    icon.style.cssText = 'font-size: 18px; margin-right: 10px;';
+    icon.textContent = '\uD83D\uDCC1';
+ 
+    const nameEl = document.createElement('div');
+    nameEl.className = 'file-name folder-name';
+    nameEl.textContent = file.name;
+ 
+    const durationEl = document.createElement('div');
+    durationEl.className = 'file-duration';
+ 
+    const qualityEl = document.createElement('div');
+    qualityEl.className = 'file-quality';
+ 
+    const fpsEl = document.createElement('div');
+    fpsEl.className = 'file-fps';
+ 
+    const tagsEl = document.createElement('div');
+    tagsEl.className = 'file-tags';
+ 
+    fileItem.append(icon, nameEl, durationEl, qualityEl, fpsEl, tagsEl);
+ 
+    const filePath = file.path;
+    const fileName = file.name;
+    fileItem.addEventListener('click', (e) => {
+      if (e.target !== fileItem && e.target.className !== 'file-name folder-name') {
+        return;
+      }
+      if (this.onFolderClick) {
+        this.onFolderClick(filePath, fileName);
+      }
+    });
+ 
+    this.fileListEl.appendChild(fileItem);
+  }
+ 
+  /**
+   * Create media file element
+   * @param {Object} file - File object
+   * @param {number} episodeNumber - Episode number
+   * @param {number} index - File index
+   */
+  _createMediaFileElement(file, episodeNumber, index) {
+    const fileItem = document.createElement('div');
+    fileItem.className = 'file-item';
+    fileItem.draggable = true;
+    fileItem.dataset.index = index;
+    fileItem.dataset.filePath = file.path;
+ 
+    const duration = file.duration || '00:00';
+    const quality = file.quality || 'unknown';
+    const fps = file.fps || 'unknown';
+ 
+    const dragHandle = document.createElement('div');
+    dragHandle.className = 'drag-handle';
+    dragHandle.textContent = '\u22EE\u22EE';
+ 
+    const episodeContainer = document.createElement('div');
+    episodeContainer.className = 'episode-number-container';
+ 
+    const leftArrow = document.createElement('button');
+    leftArrow.className = 'episode-arrow episode-arrow-left';
+    leftArrow.title = 'Decrease episode range';
+    leftArrow.textContent = '\u25C0';
+ 
+    const episodeNum = document.createElement('div');
+    episodeNum.className = 'episode-number';
+    episodeNum.dataset.episodeStart = episodeNumber;
+    episodeNum.dataset.episodeEnd = episodeNumber;
+    episodeNum.textContent = episodeNumber;
+ 
+    const rightArrow = document.createElement('button');
+    rightArrow.className = 'episode-arrow episode-arrow-right';
+    rightArrow.title = 'Increase episode range';
+    rightArrow.textContent = '\u25B6';
+ 
+    episodeContainer.append(leftArrow, episodeNum, rightArrow);
+ 
+    const nameEl = document.createElement('div');
+    nameEl.className = 'file-name';
+    nameEl.textContent = file.name;
+ 
+    if (file.isProblematic) {
+      const warn = document.createElement('span');
+      warn.className = 'problematic-label';
+      warn.textContent = '\u26A0\ufe0f';
+      nameEl.prepend(warn, ' ');
+    }
+ 
+    const durEl = document.createElement('div');
+    durEl.className = 'file-duration';
+    durEl.textContent = duration;
+ 
+    const qualEl = document.createElement('div');
+    qualEl.className = 'file-quality';
+    qualEl.textContent = quality;
+ 
+    const fpsEl = document.createElement('div');
+    fpsEl.className = 'file-fps';
+    fpsEl.textContent = fps;
+ 
+    const tagsEl = document.createElement('div');
+    tagsEl.className = 'file-tags';
+ 
+    const extraTag = document.createElement('span');
+    extraTag.className = 'tag-icon extra-tag';
+    extraTag.title = 'Mark as Extra';
+    extraTag.textContent = '\uD83C\uDFF7\uFE0F';
+ 
+    const btsTag = document.createElement('span');
+    btsTag.className = 'tag-icon behind-the-scenes-tag';
+    btsTag.title = 'Add Behind the Scenes';
+    btsTag.textContent = '\uD83C\uDFA5';
+ 
+    const delTag = document.createElement('span');
+    delTag.className = 'tag-icon delete-tag';
+    delTag.title = 'Mark for Deletion';
+    delTag.textContent = '\uD83D\uDDD1\uFE0F';
+ 
+    const previewBtn = document.createElement('span');
+    previewBtn.className = 'video-preview-btn';
+    previewBtn.title = 'Preview Video';
+    previewBtn.textContent = '\uD83C\uDFAC';
+ 
+    const playBtn = document.createElement('button');
+    playBtn.className = 'play-button';
+    playBtn.style.cssText = 'opacity: 0.3; cursor: default; flex-shrink: 0;';
+    playBtn.disabled = true;
+    playBtn.textContent = '\u25B6\uFE0F';
+ 
+    tagsEl.append(extraTag, btsTag, delTag, previewBtn, playBtn);
+ 
+    fileItem.append(dragHandle, episodeContainer, nameEl, durEl, qualEl, fpsEl, tagsEl);
+ 
+    fileItem.addEventListener('dragstart', this._handleDragStart.bind(this));
+    fileItem.addEventListener('dragend', this._handleDragEnd.bind(this));
+    fileItem.addEventListener('dragover', this._handleDragOver.bind(this));
+    fileItem.addEventListener('dragleave', this._handleDragLeave.bind(this));
+    fileItem.addEventListener('drop', this._handleDrop.bind(this));
+ 
+    this.fileListEl.appendChild(fileItem);
+  }
+ 
+  /**
+   * Handle drag start
+   * @param {Event} e - Drag event
+   * @private
+   */
+  _handleDragStart(e) {
+    const fileItem = this;
+    this.draggedItem = fileItem;
+    fileItem.classList.add('dragging');
+    e.dataTransfer.effectAllowed = 'move';
+    e.dataTransfer.setData('text/plain', fileItem.dataset.index);
+  }
+ 
+  /**
+   * Handle drag end
+   * @param {Event} e - Drag event
+   * @private
+   */
+  _handleDragEnd(e) {
+    const fileItem = this;
+    fileItem.classList.remove('dragging');
+    // Remove drag-over class from all items
+    document.querySelectorAll('.file-item').forEach(item => {
+      item.classList.remove('drag-over');
+    });
+    this.draggedItem = null;
+  }
+ 
+  /**
+   * Handle drag over
+   * @param {Event} e - Drag event
+   * @private
+   */
+  _handleDragOver(e) {
+    const fileItem = this;
+    e.preventDefault();
+    e.dataTransfer.dropEffect = 'move';
+ 
+    // Only show drag-over for non-folder items
+    if (!fileItem.classList.contains('folder-item') && fileItem !== this.draggedItem) {
+      fileItem.classList.add('drag-over');
+    }
+  }
+ 
+  /**
+   * Handle drag leave
+   * @param {Event} e - Drag event
+   * @private
+   */
+  _handleDragLeave(e) {
+    const fileItem = this;
+    fileItem.classList.remove('drag-over');
+  }
+ 
+  /**
+   * Handle drop
+   * @param {Event} e - Drop event
+   */
+  _handleDrop(e) {
+    const fileItem = this;
+    e.preventDefault();
+    fileItem.classList.remove('drag-over');
+ 
+    if (fileItem === this.draggedItem || fileItem.classList.contains('folder-item')) return;
+ 
+    // Get all media file items (not folders)
+    const fileItems = Array.from(this.fileListEl.querySelectorAll('.file-item:not(.folder-item)'));
+    const draggedIndex = fileItems.indexOf(this.draggedItem);
+    const dropIndex = fileItems.indexOf(fileItem);
+ 
+    if (draggedIndex === -1 || dropIndex === -1) return;
+ 
+    // Move the dragged item in the DOM
+    if (draggedIndex < dropIndex) {
+      fileItem.parentNode.insertBefore(this.draggedItem, fileItem.nextSibling);
+    } else {
+      fileItem.parentNode.insertBefore(this.draggedItem, fileItem);
+    }
+ 
+    // Update episode numbers
+    this.updateEpisodeNumbers();
+  }
+ 
+  /**
+   * Update episode numbers
+   */
+  updateEpisodeNumbers() {
+    const fileItems = this.fileListEl.querySelectorAll('.file-item:not(.folder-item)');
+    let episodeNum = 1;
+ 
+    fileItems.forEach((item, index) => {
+      const episodeEl = item.querySelector('.episode-number');
+      if (episodeEl) {
+        const storedStart = episodeEl.dataset.episodeStart;
+        const storedEnd = episodeEl.dataset.episodeEnd;
+ 
+        const start = storedStart ? parseInt(storedStart) : episodeNum;
+        const end = storedEnd ? parseInt(storedEnd) : start;
+ 
+        const rangeText = start === end ? `${start}` : `${start}-${end}`;
+        episodeEl.textContent = rangeText;
+        episodeEl.dataset.episode = episodeNum;
+        episodeNum = end + 1;
+      }
+    });
+  }
+ 
+  /**
+   * Clear the file list
+   */
+  clear() {
+    this.fileListEl.innerHTML = '';
+  }
+ 
+  /**
+   * Get all media file items
+   * @returns {NodeList} Media file items
+   */
+  getMediaFileItems() {
+    return this.fileListEl.querySelectorAll('.file-item:not(.folder-item)');
+  }
+ 
+  /**
+   * Get folder items
+   * @returns {NodeList} Folder items
+   */
+  getFolderItems() {
+    return this.fileListEl.querySelectorAll('.folder-item');
+  }
+ 
+  /**
+   * Set up hover handlers for file items
+   * @private
+   */
+  _setupHoverHandlers() {
+    // Use event delegation on the file list
+    this.fileListEl.addEventListener('mouseenter', (e) => {
+      const fileItem = e.target.closest('.file-item');
+      if (!fileItem || fileItem.classList.contains('folder-item')) return;
+ 
+      const episodeEl = fileItem.querySelector('.episode-number');
+      if (!episodeEl) return;
+ 
+      const startEpisode = parseInt(episodeEl.dataset.episodeStart) || 1;
+      const endEpisode = parseInt(episodeEl.dataset.episodeEnd) || startEpisode;
+ 
+      // Store hovered range for later use
+      this.hoveredEpisodeRange = { start: startEpisode, end: endEpisode };
+ 
+      // Notify UIManager to highlight episodes
+      if (this.onHoverStart && typeof this.onHoverStart === 'function') {
+        this.onHoverStart(startEpisode, endEpisode, fileItem);
+      }
+    });
+ 
+    this.fileListEl.addEventListener('mouseleave', (e) => {
+      const fileItem = e.target.closest('.file-item');
+      if (!fileItem) return;
+ 
+      // Remove from current file item
+      fileItem.classList.remove('hovered-file');
+ 
+      // Notify UIManager to remove highlights
+      if (this.onHoverEnd && typeof this.onHoverEnd === 'function') {
+        this.onHoverEnd(fileItem);
+      }
+    });
+  }
+ 
+  /**
+   * Highlight files matching episode range
+   * @param {number} startEpisode - Start episode number
+   * @param {number} endEpisode - End episode number
+   */
+  highlightFilesMatchingEpisode(startEpisode, endEpisode) {
+    const mediaFiles = this.getMediaFileItems();
+    mediaFiles.forEach(fileItem => {
+      const episodeEl = fileItem.querySelector('.episode-number');
+      if (!episodeEl) return;
+ 
+      const fileStart = parseInt(episodeEl.dataset.episodeStart) || 1;
+      const fileEnd = parseInt(episodeEl.dataset.episodeEnd) || fileStart;
+ 
+      // Check if the file's episode range overlaps with the hovered range
+      const overlaps = !(endEpisode < fileStart || startEpisode > fileEnd);
+ 
+      if (overlaps) {
+        fileItem.classList.add('hovered-file');
+      } else {
+        fileItem.classList.remove('hovered-file');
+      }
+    });
+  }
+ 
+  /**
+   * Remove file highlights
+   */
+  removeFileHighlights() {
+    const mediaFiles = this.getMediaFileItems();
+    mediaFiles.forEach(fileItem => {
+      fileItem.classList.remove('hovered-file');
+    });
+  }
+}
+ 
+module.exports = FileListManager;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/ProgressManager.js.html b/coverage/ProgressManager.js.html new file mode 100644 index 0000000..88ed791 --- /dev/null +++ b/coverage/ProgressManager.js.html @@ -0,0 +1,313 @@ + + + + + + Code coverage report for ProgressManager.js + + + + + + + + + +
+
+

All files ProgressManager.js

+
+ +
+ 100% + Statements + 70/70 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 70/70 +
+ + +
+

+ 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 +771x +1x +1x +1x +1x +9x +9x +9x +9x +  +1x +1x +1x +1x +1x +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 +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +2x +2x +2x +2x +2x +  +1x +1x +1x +1x +1x +1x +1x +1x +  +1x
/**
+ * ProgressManager - Manages progress display and feedback
+ */
+class ProgressManager {
+  constructor(progressContainer, progressText, progressCount) {
+    this.progressContainer = progressContainer;
+    this.progressText = progressText;
+    this.progressCount = progressCount;
+  }
+ 
+  /**
+   * Show progress indicator
+   * @param {string} message - Progress message
+   */
+  showProgress(message = 'Scanning directory...') {
+    if (this.progressContainer) {
+      this.progressContainer.style.display = 'block';
+      this.progressText.textContent = message;
+      this.progressCount.textContent = '';
+    }
+  }
+ 
+  /**
+   * Hide progress indicator
+   */
+  hideProgress() {
+    if (this.progressContainer) {
+      this.progressContainer.style.display = 'none';
+    }
+  }
+ 
+  /**
+   * Update progress with current/total counts
+   * @param {number} current - Current count
+   * @param {number} total - Total count
+   * @param {string} fileName - Current file name
+   */
+  updateProgress(current, total, fileName) {
+    if (this.progressContainer) {
+      const displayCurrent = current + 1;
+      this.progressText.textContent = `Processing: ${fileName}`;
+      this.progressCount.textContent = `${displayCurrent} of ${total} files`;
+    }
+  }
+ 
+  /**
+   * Update progress with custom text
+   * @param {string} text - Progress text
+   */
+  updateProgressText(text) {
+    if (this.progressText) {
+      this.progressText.textContent = text;
+    }
+  }
+ 
+  /**
+   * Update progress count display
+   * @param {number} current - Current count
+   * @param {number} total - Total count
+   */
+  updateProgressCount(current, total) {
+    if (this.progressCount) {
+      const displayCurrent = current + 1;
+      this.progressCount.textContent = `${displayCurrent} of ${total} files`;
+    }
+  }
+ 
+  /**
+   * Show directory feedback
+   * @param {string} folderName - Folder name
+   */
+  showDirectoryFeedback(folderName) {
+    console.log(`Directory "${folderName}" created and file moved`);
+  }
+}
+ 
+module.exports = ProgressManager;
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/base.css b/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/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/coverage/block-navigation.js b/coverage/block-navigation.js new file mode 100644 index 0000000..530d1ed --- /dev/null +++ b/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/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..7fa4bb4 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,5 @@ +{"/tmp/MovieMapper/utils/renderer/AppState.js": {"path":"/tmp/MovieMapper/utils/renderer/AppState.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":29}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":39}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":16}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":17}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":27}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":28}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":29}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":30}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":40}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":42}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":4}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":45}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":30}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":26}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":5}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":30}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":47}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":5}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":34}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":38}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":5}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":30}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":50}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":5}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":25}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":33}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":5}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":22}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":49}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":5}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":26}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":30}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":22}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":43}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":5}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":21}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":39}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":5}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":24}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":28}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":5}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":21}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":47}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":5}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":20}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":28}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":5}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":24}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":53}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":5}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":30}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":34}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":3}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":5}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":24}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":45}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":5}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":23}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":31}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":5}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":25}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":55}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":5}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":32}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":36}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":5}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":25}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":46}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":5}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":24}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":32}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":5}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":38}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":42}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":5}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":40}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":44}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":3}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":5}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":38}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":36}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":5}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":35}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":43}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":5}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":52}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":40}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":5}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":30}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":41}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":3}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":5}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":38}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":47}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":5}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":39}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":45}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":3}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":5}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":34}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":5}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":11}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":33}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":27}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":28}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":29}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":30}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":40}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":42}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":30}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":26}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":3}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":5}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":38}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":54}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":5}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":35}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":68}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":80}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":41}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":56}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":5}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":54}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":70}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":5}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":12}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":27}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":33}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":26}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":53}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":5}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":16}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":3}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":5}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":47}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":43}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":5}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":15}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":33}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":3}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":5}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":48}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":50}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":5}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":34}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":59}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":3}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":5}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":25}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":47}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":5}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":24}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":29}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":3}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":5}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":25}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":50}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":5}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":24}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":32}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":3}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":1}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":26}}},"s":{"0":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":22,"16":22,"17":22,"18":22,"20":1,"21":1,"22":1,"23":1,"24":1,"25":4,"26":4,"28":1,"29":1,"30":1,"31":1,"32":1,"33":4,"34":4,"36":1,"37":1,"38":1,"39":1,"40":1,"41":3,"42":3,"44":1,"45":1,"46":1,"47":1,"48":1,"49":4,"50":4,"52":1,"53":1,"54":1,"55":1,"56":1,"57":2,"58":2,"60":1,"61":1,"62":1,"63":1,"64":1,"65":3,"66":3,"68":1,"69":1,"70":1,"71":1,"72":1,"73":2,"74":2,"76":1,"77":1,"78":1,"79":1,"80":1,"81":3,"82":3,"84":1,"85":1,"86":1,"87":1,"88":1,"89":2,"90":2,"92":1,"93":1,"94":1,"95":1,"96":1,"97":3,"98":3,"100":1,"101":1,"102":1,"103":1,"104":1,"105":2,"106":2,"108":1,"109":1,"110":1,"111":1,"112":1,"113":3,"114":3,"116":1,"117":1,"118":1,"119":1,"120":1,"121":0,"122":0,"124":1,"125":1,"126":1,"127":1,"128":1,"129":3,"130":3,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":22,"153":22,"154":22,"155":22,"156":22,"158":1,"159":1,"160":1,"161":1,"162":1,"163":5,"164":3,"165":3,"166":3,"167":3,"168":2,"169":5,"171":1,"172":1,"173":1,"174":1,"175":1,"176":9,"177":9,"179":1,"180":1,"181":1,"182":1,"183":1,"184":2,"185":2,"187":1,"188":1,"189":1,"190":1,"191":1,"192":5,"193":5,"195":1,"196":1,"197":1,"198":1,"199":1,"200":6,"201":6,"202":1,"204":1},"branchMap":{"0":{"type":"branch","line":7,"loc":{"start":{"line":7,"column":2},"end":{"line":19,"column":3}},"locations":[{"start":{"line":7,"column":2},"end":{"line":19,"column":3}}]},"1":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":27,"column":3}},"locations":[{"start":{"line":25,"column":2},"end":{"line":27,"column":3}}]},"2":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":35,"column":3}},"locations":[{"start":{"line":33,"column":2},"end":{"line":35,"column":3}}]},"3":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":43,"column":3}},"locations":[{"start":{"line":41,"column":2},"end":{"line":43,"column":3}}]},"4":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":51,"column":3}},"locations":[{"start":{"line":49,"column":2},"end":{"line":51,"column":3}}]},"5":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}},"locations":[{"start":{"line":57,"column":2},"end":{"line":59,"column":3}}]},"6":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":67,"column":3}},"locations":[{"start":{"line":65,"column":2},"end":{"line":67,"column":3}}]},"7":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":75,"column":3}},"locations":[{"start":{"line":73,"column":2},"end":{"line":75,"column":3}}]},"8":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}},"locations":[{"start":{"line":81,"column":2},"end":{"line":83,"column":3}}]},"9":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":2},"end":{"line":91,"column":3}},"locations":[{"start":{"line":89,"column":2},"end":{"line":91,"column":3}}]},"10":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},"locations":[{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}]},"11":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}},"locations":[{"start":{"line":105,"column":2},"end":{"line":107,"column":3}}]},"12":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":2},"end":{"line":115,"column":3}},"locations":[{"start":{"line":113,"column":2},"end":{"line":115,"column":3}}]},"13":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":2},"end":{"line":131,"column":3}},"locations":[{"start":{"line":129,"column":2},"end":{"line":131,"column":3}}]},"14":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":2},"end":{"line":146,"column":3}},"locations":[{"start":{"line":136,"column":2},"end":{"line":146,"column":3}}]},"15":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":2},"end":{"line":157,"column":3}},"locations":[{"start":{"line":152,"column":2},"end":{"line":157,"column":3}}]},"16":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":2},"end":{"line":170,"column":3}},"locations":[{"start":{"line":163,"column":2},"end":{"line":170,"column":3}}]},"17":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":26},"end":{"line":168,"column":5}},"locations":[{"start":{"line":164,"column":26},"end":{"line":168,"column":5}}]},"18":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":4},"end":{"line":170,"column":2}},"locations":[{"start":{"line":168,"column":4},"end":{"line":170,"column":2}}]},"19":{"type":"branch","line":176,"loc":{"start":{"line":176,"column":2},"end":{"line":178,"column":3}},"locations":[{"start":{"line":176,"column":2},"end":{"line":178,"column":3}}]},"20":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":2},"end":{"line":186,"column":3}},"locations":[{"start":{"line":184,"column":2},"end":{"line":186,"column":3}}]},"21":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":51},"end":{"line":185,"column":58}},"locations":[{"start":{"line":185,"column":51},"end":{"line":185,"column":58}}]},"22":{"type":"branch","line":192,"loc":{"start":{"line":192,"column":2},"end":{"line":194,"column":3}},"locations":[{"start":{"line":192,"column":2},"end":{"line":194,"column":3}}]},"23":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":2},"end":{"line":202,"column":3}},"locations":[{"start":{"line":200,"column":2},"end":{"line":202,"column":3}}]}},"b":{"0":[22],"1":[4],"2":[4],"3":[3],"4":[4],"5":[2],"6":[3],"7":[2],"8":[3],"9":[2],"10":[3],"11":[2],"12":[3],"13":[3],"14":[1],"15":[22],"16":[5],"17":[3],"18":[2],"19":[9],"20":[2],"21":[1],"22":[5],"23":[6]},"fnMap":{"0":{"name":"AppState","decl":{"start":{"line":7,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":7,"column":2},"end":{"line":19,"column":3}},"line":7},"1":{"name":"setCurrentDirectory","decl":{"start":{"line":25,"column":2},"end":{"line":27,"column":3}},"loc":{"start":{"line":25,"column":2},"end":{"line":27,"column":3}},"line":25},"2":{"name":"getCurrentDirectory","decl":{"start":{"line":33,"column":2},"end":{"line":35,"column":3}},"loc":{"start":{"line":33,"column":2},"end":{"line":35,"column":3}},"line":33},"3":{"name":"setCurrentFiles","decl":{"start":{"line":41,"column":2},"end":{"line":43,"column":3}},"loc":{"start":{"line":41,"column":2},"end":{"line":43,"column":3}},"line":41},"4":{"name":"getCurrentFiles","decl":{"start":{"line":49,"column":2},"end":{"line":51,"column":3}},"loc":{"start":{"line":49,"column":2},"end":{"line":51,"column":3}},"line":49},"5":{"name":"setCurrentShow","decl":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}},"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}},"line":57},"6":{"name":"getCurrentShow","decl":{"start":{"line":65,"column":2},"end":{"line":67,"column":3}},"loc":{"start":{"line":65,"column":2},"end":{"line":67,"column":3}},"line":65},"7":{"name":"setCurrentSeasons","decl":{"start":{"line":73,"column":2},"end":{"line":75,"column":3}},"loc":{"start":{"line":73,"column":2},"end":{"line":75,"column":3}},"line":73},"8":{"name":"getCurrentSeasons","decl":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}},"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}},"line":81},"9":{"name":"setCurrentEpisodes","decl":{"start":{"line":89,"column":2},"end":{"line":91,"column":3}},"loc":{"start":{"line":89,"column":2},"end":{"line":91,"column":3}},"line":89},"10":{"name":"getCurrentEpisodes","decl":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},"line":97},"11":{"name":"setSelectedSeasonEpisodeCount","decl":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}},"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}},"line":105},"12":{"name":"getSelectedSeasonEpisodeCount","decl":{"start":{"line":113,"column":2},"end":{"line":115,"column":3}},"loc":{"start":{"line":113,"column":2},"end":{"line":115,"column":3}},"line":113},"13":{"name":"isUpdatingEpisodeNumbers","decl":{"start":{"line":121,"column":2},"end":{"line":123,"column":3}},"loc":{"start":{"line":121,"column":2},"end":{"line":123,"column":3}},"line":121},"14":{"name":"setUpdatingEpisodeNumbers","decl":{"start":{"line":129,"column":2},"end":{"line":131,"column":3}},"loc":{"start":{"line":129,"column":2},"end":{"line":131,"column":3}},"line":129},"15":{"name":"reset","decl":{"start":{"line":136,"column":2},"end":{"line":146,"column":3}},"loc":{"start":{"line":136,"column":2},"end":{"line":146,"column":3}},"line":136},"16":{"name":"addToNavigationStack","decl":{"start":{"line":152,"column":2},"end":{"line":157,"column":3}},"loc":{"start":{"line":152,"column":2},"end":{"line":157,"column":3}},"line":152},"17":{"name":"goBack","decl":{"start":{"line":163,"column":2},"end":{"line":170,"column":3}},"loc":{"start":{"line":163,"column":2},"end":{"line":170,"column":3}},"line":163},"18":{"name":"canGoBack","decl":{"start":{"line":176,"column":2},"end":{"line":178,"column":3}},"loc":{"start":{"line":176,"column":2},"end":{"line":178,"column":3}},"line":176},"19":{"name":"getCurrentDirectoryFromStack","decl":{"start":{"line":184,"column":2},"end":{"line":186,"column":3}},"loc":{"start":{"line":184,"column":2},"end":{"line":186,"column":3}},"line":184},"20":{"name":"getNavigationDepth","decl":{"start":{"line":192,"column":2},"end":{"line":194,"column":3}},"loc":{"start":{"line":192,"column":2},"end":{"line":194,"column":3}},"line":192},"21":{"name":"getNavigationStack","decl":{"start":{"line":200,"column":2},"end":{"line":202,"column":3}},"loc":{"start":{"line":200,"column":2},"end":{"line":202,"column":3}},"line":200}},"f":{"0":22,"1":4,"2":4,"3":3,"4":4,"5":2,"6":3,"7":2,"8":3,"9":2,"10":3,"11":2,"12":3,"13":0,"14":3,"15":1,"16":22,"17":5,"18":9,"19":2,"20":5,"21":6}} +,"/tmp/MovieMapper/utils/renderer/EpisodeManager.js": {"path":"/tmp/MovieMapper/utils/renderer/EpisodeManager.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":67}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":22}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":17}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":42}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":5}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":44}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":56}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":5}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":36}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":40}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":87}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":13}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":5}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":41}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":9}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":84}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":25}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":42}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":64}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":61}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":57}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":73}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":62}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":75}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":44}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":49}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":9}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":9}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":15}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":44}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":5}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":5}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":32}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":58}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":5}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":37}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":51}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":45}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":55}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":51}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":37}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":20}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":37}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":41}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":38}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":44}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":32}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":30}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":28}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":49}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":37}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":23}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":36}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":72}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":27}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":34}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":16}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":40}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":22}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":20}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":9}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":43}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":47}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":43}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":64}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":67}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":16}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":45}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":55}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":51}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":9}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":7}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":40}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":42}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":6}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":53}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":30}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":27}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":19}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":7}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":23}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":63}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":3}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":5}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":31}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":49}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":58}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":56}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":5}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":59}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":51}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":64}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":27}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":41}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":62}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":62}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":27}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":23}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":31}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":31}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":46}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":22}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":16}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":7}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":12}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":47}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":12}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":5}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":44}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":43}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":39}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":54}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":97}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":47}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":47}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":26}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":51}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":58}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":25}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":14}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":7}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":5}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":36}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":66}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":32}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":68}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":41}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":72}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":28}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":76}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":82}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":61}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":57}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":9}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":7}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":12}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":59}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":43}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":68}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":41}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":72}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":28}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":76}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":82}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":71}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":67}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":9}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":7}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":5}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":33}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":42}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":3}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":5}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":49}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":56}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":52}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":72}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":5}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":66}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":35}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":77}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":34}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":50}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":55}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":25}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":53}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":69}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":52}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":9}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":7}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":7}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":3}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":5}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":40}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":72}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":5}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":46}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":35}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":77}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":34}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":51}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":7}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":3}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":5}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":35}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":53}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":43}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":5}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":30}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":71}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":78}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":52}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":3}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":5}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":50}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":56}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":42}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":5}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":42}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":83}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":30}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":32}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":62}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":22}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":63}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":47}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":7}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":7}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":29}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":3}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":5}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":41}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":56}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":46}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":5}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":33}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":83}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":27}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":41}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":62}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":22}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":71}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":57}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":38}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":9}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":7}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":7}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":26}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":3}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":5}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":38}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":38}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":5}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":33}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":41}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":3}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":5}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":38}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":47}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":5}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":41}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":45}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":3}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":1}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":32}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":21,"6":21,"8":1,"9":1,"10":1,"11":1,"12":1,"13":6,"14":1,"15":1,"16":1,"18":5,"20":5,"21":5,"22":5,"24":5,"25":6,"26":6,"27":6,"28":6,"30":6,"31":6,"33":6,"34":6,"35":6,"36":6,"37":6,"38":5,"39":5,"40":5,"41":5,"42":6,"44":1,"45":1,"46":1,"47":1,"48":1,"49":2,"51":1,"52":1,"53":1,"55":1,"56":1,"57":1,"59":1,"60":1,"61":1,"62":1,"63":1,"65":1,"66":0,"68":0,"69":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"93":0,"94":0,"95":1,"97":1,"98":0,"99":0,"100":0,"101":0,"102":1,"104":1,"105":2,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":4,"115":4,"117":4,"119":3,"120":4,"121":4,"123":4,"124":4,"126":4,"127":4,"128":2,"129":2,"130":1,"131":1,"132":4,"133":1,"134":1,"135":1,"137":3,"138":3,"139":3,"141":3,"142":3,"144":3,"145":3,"146":3,"147":3,"148":3,"149":3,"150":3,"151":3,"152":3,"154":4,"156":3,"157":4,"158":1,"159":0,"160":0,"162":0,"163":0,"164":0,"166":0,"167":0,"168":0,"169":0,"170":4,"171":2,"172":2,"173":2,"174":0,"175":0,"177":0,"178":0,"179":0,"181":0,"182":0,"183":0,"184":0,"185":2,"187":3,"188":3,"189":4,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":2,"200":1,"202":1,"203":3,"204":3,"206":3,"207":3,"209":3,"210":2,"211":2,"212":3,"213":1,"214":2,"216":1,"217":1,"218":1,"219":1,"220":1,"221":2,"223":1,"225":1,"226":1,"227":1,"228":2,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":4,"237":4,"238":4,"239":4,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":2,"248":2,"250":2,"251":2,"252":2,"253":2,"254":2,"255":2,"256":2,"258":2,"259":2,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":2,"268":2,"270":2,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":2,"280":2,"281":2,"283":1,"284":1,"285":1,"286":1,"287":1,"288":4,"289":4,"291":1,"292":1,"293":1,"294":1,"295":1,"296":3,"297":3,"298":1,"300":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":7,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":7,"column":3}}]},"1":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":43,"column":3}},"locations":[{"start":{"line":13,"column":2},"end":{"line":43,"column":3}}]},"2":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":39},"end":{"line":17,"column":5}},"locations":[{"start":{"line":14,"column":39},"end":{"line":17,"column":5}}]},"3":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":42,"column":5}},"locations":[{"start":{"line":17,"column":4},"end":{"line":42,"column":5}}]},"4":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":24},"end":{"line":39,"column":7}},"locations":[{"start":{"line":25,"column":24},"end":{"line":39,"column":7}}]},"5":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":36},"end":{"line":31,"column":59}},"locations":[{"start":{"line":31,"column":36},"end":{"line":31,"column":59}}]},"6":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":60},"end":{"line":31,"column":72}},"locations":[{"start":{"line":31,"column":60},"end":{"line":31,"column":72}}]},"7":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":32},"end":{"line":32,"column":53}},"locations":[{"start":{"line":32,"column":32},"end":{"line":32,"column":53}}]},"8":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":54},"end":{"line":32,"column":61}},"locations":[{"start":{"line":32,"column":54},"end":{"line":32,"column":61}}]},"9":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":42},"end":{"line":34,"column":54}},"locations":[{"start":{"line":34,"column":42},"end":{"line":34,"column":54}}]},"10":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":55},"end":{"line":34,"column":74}},"locations":[{"start":{"line":34,"column":55},"end":{"line":34,"column":74}}]},"11":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":106,"column":3}},"locations":[{"start":{"line":49,"column":2},"end":{"line":106,"column":3}}]},"12":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":44},"end":{"line":106,"column":2}},"locations":[{"start":{"line":50,"column":44},"end":{"line":106,"column":2}}]},"13":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":2},"end":{"line":190,"column":3}},"locations":[{"start":{"line":114,"column":2},"end":{"line":190,"column":3}}]},"14":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},"locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}}]},"15":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":26},"end":{"line":121,"column":57}},"locations":[{"start":{"line":118,"column":26},"end":{"line":121,"column":57}}]},"16":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":57},"end":{"line":121,"column":61}},"locations":[{"start":{"line":121,"column":57},"end":{"line":121,"column":61}}]},"17":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":53},"end":{"line":122,"column":61}},"locations":[{"start":{"line":122,"column":53},"end":{"line":122,"column":61}}]},"18":{"type":"branch","line":128,"loc":{"start":{"line":128,"column":30},"end":{"line":133,"column":5}},"locations":[{"start":{"line":128,"column":30},"end":{"line":133,"column":5}}]},"19":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":21},"end":{"line":132,"column":7}},"locations":[{"start":{"line":130,"column":21},"end":{"line":132,"column":7}}]},"20":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":5},"end":{"line":136,"column":5}},"locations":[{"start":{"line":133,"column":5},"end":{"line":136,"column":5}}]},"21":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":4},"end":{"line":155,"column":29}},"locations":[{"start":{"line":136,"column":4},"end":{"line":155,"column":29}}]},"22":{"type":"branch","line":155,"loc":{"start":{"line":155,"column":29},"end":{"line":155,"column":36}},"locations":[{"start":{"line":155,"column":29},"end":{"line":155,"column":36}}]},"23":{"type":"branch","line":155,"loc":{"start":{"line":155,"column":35},"end":{"line":158,"column":31}},"locations":[{"start":{"line":155,"column":35},"end":{"line":158,"column":31}}]},"24":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":31},"end":{"line":171,"column":5}},"locations":[{"start":{"line":158,"column":31},"end":{"line":171,"column":5}}]},"25":{"type":"branch","line":159,"loc":{"start":{"line":159,"column":67},"end":{"line":170,"column":7}},"locations":[{"start":{"line":159,"column":67},"end":{"line":170,"column":7}}]},"26":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":5},"end":{"line":186,"column":5}},"locations":[{"start":{"line":171,"column":5},"end":{"line":186,"column":5}}]},"27":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":67},"end":{"line":185,"column":7}},"locations":[{"start":{"line":174,"column":67},"end":{"line":185,"column":7}}]},"28":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":4},"end":{"line":190,"column":2}},"locations":[{"start":{"line":186,"column":4},"end":{"line":190,"column":2}}]},"29":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":2},"end":{"line":215,"column":3}},"locations":[{"start":{"line":198,"column":2},"end":{"line":215,"column":3}}]},"30":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":28},"end":{"line":215,"column":2}},"locations":[{"start":{"line":199,"column":28},"end":{"line":215,"column":2}}]},"31":{"type":"branch","line":203,"loc":{"start":{"line":203,"column":25},"end":{"line":214,"column":5}},"locations":[{"start":{"line":203,"column":25},"end":{"line":214,"column":5}}]},"32":{"type":"branch","line":210,"loc":{"start":{"line":210,"column":68},"end":{"line":212,"column":9}},"locations":[{"start":{"line":210,"column":68},"end":{"line":212,"column":9}}]},"33":{"type":"branch","line":221,"loc":{"start":{"line":221,"column":2},"end":{"line":229,"column":3}},"locations":[{"start":{"line":221,"column":2},"end":{"line":229,"column":3}}]},"34":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":28},"end":{"line":229,"column":2}},"locations":[{"start":{"line":222,"column":28},"end":{"line":229,"column":2}}]},"35":{"type":"branch","line":226,"loc":{"start":{"line":226,"column":25},"end":{"line":228,"column":5}},"locations":[{"start":{"line":226,"column":25},"end":{"line":228,"column":5}}]},"36":{"type":"branch","line":236,"loc":{"start":{"line":236,"column":2},"end":{"line":240,"column":3}},"locations":[{"start":{"line":236,"column":2},"end":{"line":240,"column":3}}]},"37":{"type":"branch","line":237,"loc":{"start":{"line":237,"column":66},"end":{"line":237,"column":70}},"locations":[{"start":{"line":237,"column":66},"end":{"line":237,"column":70}}]},"38":{"type":"branch","line":238,"loc":{"start":{"line":238,"column":62},"end":{"line":238,"column":77}},"locations":[{"start":{"line":238,"column":62},"end":{"line":238,"column":77}}]},"39":{"type":"branch","line":247,"loc":{"start":{"line":247,"column":2},"end":{"line":260,"column":3}},"locations":[{"start":{"line":247,"column":2},"end":{"line":260,"column":3}}]},"40":{"type":"branch","line":251,"loc":{"start":{"line":251,"column":23},"end":{"line":257,"column":5}},"locations":[{"start":{"line":251,"column":23},"end":{"line":257,"column":5}}]},"41":{"type":"branch","line":267,"loc":{"start":{"line":267,"column":2},"end":{"line":282,"column":3}},"locations":[{"start":{"line":267,"column":2},"end":{"line":282,"column":3}}]},"42":{"type":"branch","line":271,"loc":{"start":{"line":271,"column":23},"end":{"line":279,"column":5}},"locations":[{"start":{"line":271,"column":23},"end":{"line":279,"column":5}}]},"43":{"type":"branch","line":274,"loc":{"start":{"line":274,"column":66},"end":{"line":274,"column":70}},"locations":[{"start":{"line":274,"column":66},"end":{"line":274,"column":70}}]},"44":{"type":"branch","line":275,"loc":{"start":{"line":275,"column":24},"end":{"line":275,"column":54}},"locations":[{"start":{"line":275,"column":24},"end":{"line":275,"column":54}}]},"45":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":2},"end":{"line":290,"column":3}},"locations":[{"start":{"line":288,"column":2},"end":{"line":290,"column":3}}]},"46":{"type":"branch","line":296,"loc":{"start":{"line":296,"column":2},"end":{"line":298,"column":3}},"locations":[{"start":{"line":296,"column":2},"end":{"line":298,"column":3}}]}},"b":{"0":[21],"1":[6],"2":[1],"3":[5],"4":[6],"5":[4],"6":[2],"7":[4],"8":[2],"9":[3],"10":[3],"11":[2],"12":[1],"13":[4],"14":[1],"15":[3],"16":[0],"17":[0],"18":[2],"19":[1],"20":[1],"21":[3],"22":[0],"23":[3],"24":[1],"25":[0],"26":[2],"27":[0],"28":[3],"29":[2],"30":[1],"31":[3],"32":[2],"33":[2],"34":[1],"35":[1],"36":[4],"37":[1],"38":[1],"39":[2],"40":[2],"41":[2],"42":[1],"43":[0],"44":[0],"45":[4],"46":[3]},"fnMap":{"0":{"name":"EpisodeManager","decl":{"start":{"line":5,"column":2},"end":{"line":7,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":7,"column":3}},"line":5},"1":{"name":"updateEpisodeNumbers","decl":{"start":{"line":13,"column":2},"end":{"line":43,"column":3}},"loc":{"start":{"line":13,"column":2},"end":{"line":43,"column":3}},"line":13},"2":{"name":"makeEpisodeRangeEditable","decl":{"start":{"line":49,"column":2},"end":{"line":106,"column":3}},"loc":{"start":{"line":49,"column":2},"end":{"line":106,"column":3}},"line":49},"3":{"name":"saveEdit","decl":{"start":{"line":66,"column":21},"end":{"line":96,"column":5}},"loc":{"start":{"line":66,"column":21},"end":{"line":96,"column":5}},"line":66},"4":{"name":"element.addEventListener.once","decl":{"start":{"line":98,"column":40},"end":{"line":103,"column":5}},"loc":{"start":{"line":98,"column":40},"end":{"line":103,"column":5}},"line":98},"5":{"name":"handleEpisodeArrowClick","decl":{"start":{"line":114,"column":2},"end":{"line":190,"column":3}},"loc":{"start":{"line":114,"column":2},"end":{"line":190,"column":3}},"line":114},"6":{"name":"highlightEpisodes","decl":{"start":{"line":198,"column":2},"end":{"line":215,"column":3}},"loc":{"start":{"line":198,"column":2},"end":{"line":215,"column":3}},"line":198},"7":{"name":"removeEpisodeHighlights","decl":{"start":{"line":221,"column":2},"end":{"line":229,"column":3}},"loc":{"start":{"line":221,"column":2},"end":{"line":229,"column":3}},"line":221},"8":{"name":"getEpisodeRange","decl":{"start":{"line":236,"column":2},"end":{"line":240,"column":3}},"loc":{"start":{"line":236,"column":2},"end":{"line":240,"column":3}},"line":236},"9":{"name":"calculateTotalEpisodeCount","decl":{"start":{"line":247,"column":2},"end":{"line":260,"column":3}},"loc":{"start":{"line":247,"column":2},"end":{"line":260,"column":3}},"line":247},"10":{"name":"getLastEpisodeEnd","decl":{"start":{"line":267,"column":2},"end":{"line":282,"column":3}},"loc":{"start":{"line":267,"column":2},"end":{"line":282,"column":3}},"line":267},"11":{"name":"getIsUpdatingEpisodeNumbers","decl":{"start":{"line":288,"column":2},"end":{"line":290,"column":3}},"loc":{"start":{"line":288,"column":2},"end":{"line":290,"column":3}},"line":288},"12":{"name":"setIsUpdatingEpisodeNumbers","decl":{"start":{"line":296,"column":2},"end":{"line":298,"column":3}},"loc":{"start":{"line":296,"column":2},"end":{"line":298,"column":3}},"line":296}},"f":{"0":21,"1":6,"2":2,"3":0,"4":0,"5":4,"6":2,"7":2,"8":4,"9":2,"10":2,"11":4,"12":3}} +,"/tmp/MovieMapper/utils/renderer/FileListManager.js": {"path":"/tmp/MovieMapper/utils/renderer/FileListManager.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":63}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":49}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":33}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":28}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":47}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":36}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":73}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":5}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":36}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":34}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":5}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":28}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":49}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":5}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":31}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":4}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":35}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":29}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":83}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":13}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":5}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":40}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":50}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":54}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":48}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":26}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":63}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":29}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":38}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":7}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":61}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":41}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":63}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":22}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":7}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":5}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":26}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":39}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":13}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":5}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":30}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":51}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":49}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":64}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":38}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":49}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":47}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":35}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":53}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":43}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":52}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":41}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":48}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":33}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":49}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":35}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":72}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":31}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":31}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":47}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":84}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":15}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":7}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":31}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":47}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":7}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":7}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":42}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":5}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":30}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":39}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":51}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":39}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":5}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":55}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":51}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":37}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":30}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":35}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":42}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":46}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":46}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":38}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":53}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":44}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":59}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":60}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":55}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":61}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":47}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":37}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":53}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":44}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":52}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":50}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":43}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":56}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":63}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":48}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":38}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":63}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":49}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":35}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":35}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":29}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":50}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":43}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":40}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":32}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":5}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":48}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":38}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":33}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":49}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":38}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":33}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":48}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":33}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":28}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":49}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":35}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":52}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":37}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":48}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":50}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":56}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":43}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":40}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":50}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":45}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":39}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":46}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":54}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":47}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":39}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":44}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":53}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":38}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":77}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":28}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":41}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":65}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":88}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":77}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":73}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":75}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":77}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":67}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":42}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":3}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":5}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":22}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":34}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":13}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":5}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":23}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":26}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":32}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":39}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":42}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":65}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":3}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":5}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":20}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":34}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":13}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":5}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":21}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":26}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":42}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":44}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":61}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":41}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":7}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":28}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":3}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":5}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":21}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":34}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":13}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":5}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":22}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":26}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":23}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":39}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":47}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":87}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":42}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":5}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":3}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":5}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":22}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":34}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":13}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":5}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":23}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":26}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":43}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":3}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":5}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":16}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":34}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":5}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":18}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":26}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":23}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":43}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":92}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":45}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":99}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":61}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":50}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":56}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":39}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":35}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":79}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":12}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":67}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":5}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":29}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":32}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":3}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":5}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":27}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":5}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":26}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":87}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":23}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":40}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":62}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":22}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":59}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":55}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":71}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":60}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":73}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":42}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":47}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":29}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":7}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":7}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":3}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":5}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":24}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":5}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":11}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":35}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":3}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":5}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":29}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":41}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":5}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":23}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":76}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":3}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":5}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":21}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":37}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":5}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":20}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":60}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":3}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":5}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":41}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":13}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":5}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":25}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":44}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":59}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":54}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":74}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":66}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":29}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":73}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":80}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":42}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":74}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":47}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":73}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":62}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":7}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":7}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":59}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":54}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":28}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":38}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":48}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":46}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":69}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":34}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":7}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":7}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":3}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":5}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":43}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":56}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":52}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":5}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":59}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":48}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":36}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":66}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":29}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":70}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":74}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":74}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":75}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":21}},"393":{"start":{"line":394,"column":0},"end":{"line":394,"column":47}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":14}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":50}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":7}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":7}},"398":{"start":{"line":399,"column":0},"end":{"line":399,"column":3}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":5}},"401":{"start":{"line":402,"column":0},"end":{"line":402,"column":27}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":5}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":26}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":48}},"405":{"start":{"line":406,"column":0},"end":{"line":406,"column":36}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":48}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":7}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":3}},"409":{"start":{"line":410,"column":0},"end":{"line":410,"column":1}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":33}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":18,"6":18,"7":18,"8":18,"9":18,"10":18,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":14,"26":14,"27":14,"28":14,"30":14,"31":1,"32":1,"33":1,"35":13,"36":13,"37":13,"39":13,"40":13,"42":13,"43":13,"44":6,"45":13,"47":13,"48":13,"49":16,"50":16,"51":13,"52":14,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":6,"61":6,"63":6,"64":6,"65":6,"67":6,"68":6,"69":6,"71":6,"72":6,"74":6,"75":6,"77":6,"78":6,"80":6,"81":6,"83":6,"85":6,"86":6,"87":6,"88":1,"89":0,"90":0,"91":1,"92":1,"93":1,"94":6,"96":6,"97":6,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":16,"107":16,"108":16,"109":16,"110":16,"112":16,"113":16,"114":16,"116":16,"117":16,"118":16,"120":16,"121":16,"123":16,"124":16,"125":16,"126":16,"128":16,"129":16,"130":16,"131":16,"132":16,"134":16,"135":16,"136":16,"137":16,"139":16,"141":16,"142":16,"143":16,"145":16,"146":1,"147":1,"148":1,"149":1,"150":1,"152":16,"153":16,"154":16,"156":16,"157":16,"158":16,"160":16,"161":16,"162":16,"164":16,"165":16,"167":16,"168":16,"169":16,"170":16,"172":16,"173":16,"174":16,"175":16,"177":16,"178":16,"179":16,"180":16,"182":16,"183":16,"184":16,"185":16,"187":16,"188":16,"189":16,"190":16,"191":16,"193":16,"195":16,"197":16,"198":16,"199":16,"200":16,"201":16,"203":16,"204":16,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":0,"241":0,"242":0,"244":0,"245":0,"246":0,"247":0,"248":0,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":0,"257":0,"258":0,"260":1,"261":1,"262":1,"263":1,"264":1,"265":0,"266":0,"267":0,"269":0,"271":0,"272":0,"273":0,"274":0,"276":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"285":0,"286":0,"287":0,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"296":1,"297":3,"298":3,"299":3,"300":3,"302":3,"303":3,"305":3,"306":3,"307":3,"308":3,"309":3,"310":1,"311":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":9,"326":9,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":32,"342":32,"343":0,"344":0,"346":0,"347":0,"349":0,"350":0,"352":0,"353":0,"355":0,"356":0,"357":0,"358":0,"359":32,"361":32,"362":0,"363":0,"365":0,"366":0,"368":0,"369":0,"370":0,"371":0,"372":32,"373":32,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":3,"382":3,"383":6,"384":6,"386":6,"387":6,"389":6,"390":6,"392":6,"393":3,"394":3,"395":3,"396":3,"397":3,"398":3,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"411":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":11,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":11,"column":3}}]},"1":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":39},"end":{"line":8,"column":46}},"locations":[{"start":{"line":8,"column":39},"end":{"line":8,"column":46}}]},"2":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}]},"3":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":2},"end":{"line":53,"column":3}},"locations":[{"start":{"line":25,"column":2},"end":{"line":53,"column":3}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":28},"end":{"line":34,"column":5}},"locations":[{"start":{"line":31,"column":28},"end":{"line":34,"column":5}}]},"5":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":4},"end":{"line":53,"column":2}},"locations":[{"start":{"line":34,"column":4},"end":{"line":53,"column":2}}]},"6":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":33},"end":{"line":37,"column":48}},"locations":[{"start":{"line":37,"column":33},"end":{"line":37,"column":48}}]},"7":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":36},"end":{"line":38,"column":52}},"locations":[{"start":{"line":38,"column":36},"end":{"line":38,"column":52}}]},"8":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":20},"end":{"line":46,"column":5}},"locations":[{"start":{"line":44,"column":20},"end":{"line":46,"column":5}}]},"9":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":23},"end":{"line":52,"column":5}},"locations":[{"start":{"line":49,"column":23},"end":{"line":52,"column":5}}]},"10":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":2},"end":{"line":98,"column":3}},"locations":[{"start":{"line":60,"column":2},"end":{"line":98,"column":3}}]},"11":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":39},"end":{"line":95,"column":5}},"locations":[{"start":{"line":88,"column":39},"end":{"line":95,"column":5}}]},"12":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":32},"end":{"line":89,"column":81}},"locations":[{"start":{"line":89,"column":32},"end":{"line":89,"column":81}}]},"13":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":83},"end":{"line":91,"column":7}},"locations":[{"start":{"line":89,"column":83},"end":{"line":91,"column":7}}]},"14":{"type":"branch","line":106,"loc":{"start":{"line":106,"column":2},"end":{"line":205,"column":3}},"locations":[{"start":{"line":106,"column":2},"end":{"line":205,"column":3}}]},"15":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":35},"end":{"line":113,"column":45}},"locations":[{"start":{"line":113,"column":35},"end":{"line":113,"column":45}}]},"16":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":33},"end":{"line":114,"column":45}},"locations":[{"start":{"line":114,"column":33},"end":{"line":114,"column":45}}]},"17":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":25},"end":{"line":115,"column":37}},"locations":[{"start":{"line":115,"column":25},"end":{"line":115,"column":37}}]},"18":{"type":"branch","line":146,"loc":{"start":{"line":146,"column":28},"end":{"line":151,"column":5}},"locations":[{"start":{"line":146,"column":28},"end":{"line":151,"column":5}}]},"19":{"type":"branch","line":293,"loc":{"start":{"line":293,"column":2},"end":{"line":312,"column":3}},"locations":[{"start":{"line":293,"column":2},"end":{"line":312,"column":3}}]},"20":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":22},"end":{"line":311,"column":5}},"locations":[{"start":{"line":297,"column":22},"end":{"line":311,"column":5}}]},"21":{"type":"branch","line":303,"loc":{"start":{"line":303,"column":58},"end":{"line":303,"column":70}},"locations":[{"start":{"line":303,"column":58},"end":{"line":303,"column":70}}]},"22":{"type":"branch","line":304,"loc":{"start":{"line":304,"column":52},"end":{"line":304,"column":59}},"locations":[{"start":{"line":304,"column":52},"end":{"line":304,"column":59}}]},"23":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":53},"end":{"line":306,"column":72}},"locations":[{"start":{"line":306,"column":53},"end":{"line":306,"column":72}}]},"24":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":2},"end":{"line":319,"column":3}},"locations":[{"start":{"line":317,"column":2},"end":{"line":319,"column":3}}]},"25":{"type":"branch","line":325,"loc":{"start":{"line":325,"column":2},"end":{"line":327,"column":3}},"locations":[{"start":{"line":325,"column":2},"end":{"line":327,"column":3}}]},"26":{"type":"branch","line":333,"loc":{"start":{"line":333,"column":2},"end":{"line":335,"column":3}},"locations":[{"start":{"line":333,"column":2},"end":{"line":335,"column":3}}]},"27":{"type":"branch","line":341,"loc":{"start":{"line":341,"column":2},"end":{"line":374,"column":3}},"locations":[{"start":{"line":341,"column":2},"end":{"line":374,"column":3}}]},"28":{"type":"branch","line":381,"loc":{"start":{"line":381,"column":2},"end":{"line":399,"column":3}},"locations":[{"start":{"line":381,"column":2},"end":{"line":399,"column":3}}]},"29":{"type":"branch","line":383,"loc":{"start":{"line":383,"column":23},"end":{"line":398,"column":5}},"locations":[{"start":{"line":383,"column":23},"end":{"line":398,"column":5}}]},"30":{"type":"branch","line":385,"loc":{"start":{"line":385,"column":22},"end":{"line":385,"column":29}},"locations":[{"start":{"line":385,"column":22},"end":{"line":385,"column":29}}]},"31":{"type":"branch","line":387,"loc":{"start":{"line":387,"column":65},"end":{"line":387,"column":69}},"locations":[{"start":{"line":387,"column":65},"end":{"line":387,"column":69}}]},"32":{"type":"branch","line":388,"loc":{"start":{"line":388,"column":61},"end":{"line":388,"column":73}},"locations":[{"start":{"line":388,"column":61},"end":{"line":388,"column":73}}]},"33":{"type":"branch","line":391,"loc":{"start":{"line":391,"column":48},"end":{"line":391,"column":73}},"locations":[{"start":{"line":391,"column":48},"end":{"line":391,"column":73}}]},"34":{"type":"branch","line":393,"loc":{"start":{"line":393,"column":20},"end":{"line":397,"column":7}},"locations":[{"start":{"line":393,"column":20},"end":{"line":397,"column":7}}]},"35":{"type":"branch","line":404,"loc":{"start":{"line":404,"column":2},"end":{"line":409,"column":3}},"locations":[{"start":{"line":404,"column":2},"end":{"line":409,"column":3}}]},"36":{"type":"branch","line":406,"loc":{"start":{"line":406,"column":23},"end":{"line":408,"column":5}},"locations":[{"start":{"line":406,"column":23},"end":{"line":408,"column":5}}]}},"b":{"0":[18],"1":[1],"2":[1],"3":[14],"4":[1],"5":[13],"6":[22],"7":[22],"8":[6],"9":[16],"10":[6],"11":[1],"12":[0],"13":[0],"14":[16],"15":[12],"16":[14],"17":[14],"18":[1],"19":[1],"20":[3],"21":[0],"22":[0],"23":[0],"24":[1],"25":[9],"26":[1],"27":[32],"28":[3],"29":[6],"30":[0],"31":[0],"32":[0],"33":[4],"34":[3],"35":[1],"36":[1]},"fnMap":{"0":{"name":"FileListManager","decl":{"start":{"line":5,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":11,"column":3}},"line":5},"1":{"name":"setFolderClickCallback","decl":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"line":17},"2":{"name":"displayFiles","decl":{"start":{"line":25,"column":2},"end":{"line":53,"column":3}},"loc":{"start":{"line":25,"column":2},"end":{"line":53,"column":3}},"line":25},"3":{"name":"_createFolderElement","decl":{"start":{"line":60,"column":2},"end":{"line":98,"column":3}},"loc":{"start":{"line":60,"column":2},"end":{"line":98,"column":3}},"line":60},"4":{"name":"_createMediaFileElement","decl":{"start":{"line":106,"column":2},"end":{"line":205,"column":3}},"loc":{"start":{"line":106,"column":2},"end":{"line":205,"column":3}},"line":106},"5":{"name":"_handleDragStart","decl":{"start":{"line":212,"column":2},"end":{"line":218,"column":3}},"loc":{"start":{"line":212,"column":2},"end":{"line":218,"column":3}},"line":212},"6":{"name":"_handleDragEnd","decl":{"start":{"line":225,"column":2},"end":{"line":233,"column":3}},"loc":{"start":{"line":225,"column":2},"end":{"line":233,"column":3}},"line":225},"7":{"name":"_handleDragOver","decl":{"start":{"line":240,"column":2},"end":{"line":249,"column":3}},"loc":{"start":{"line":240,"column":2},"end":{"line":249,"column":3}},"line":240},"8":{"name":"_handleDragLeave","decl":{"start":{"line":256,"column":2},"end":{"line":259,"column":3}},"loc":{"start":{"line":256,"column":2},"end":{"line":259,"column":3}},"line":256},"9":{"name":"_handleDrop","decl":{"start":{"line":265,"column":2},"end":{"line":288,"column":3}},"loc":{"start":{"line":265,"column":2},"end":{"line":288,"column":3}},"line":265},"10":{"name":"updateEpisodeNumbers","decl":{"start":{"line":293,"column":2},"end":{"line":312,"column":3}},"loc":{"start":{"line":293,"column":2},"end":{"line":312,"column":3}},"line":293},"11":{"name":"clear","decl":{"start":{"line":317,"column":2},"end":{"line":319,"column":3}},"loc":{"start":{"line":317,"column":2},"end":{"line":319,"column":3}},"line":317},"12":{"name":"getMediaFileItems","decl":{"start":{"line":325,"column":2},"end":{"line":327,"column":3}},"loc":{"start":{"line":325,"column":2},"end":{"line":327,"column":3}},"line":325},"13":{"name":"getFolderItems","decl":{"start":{"line":333,"column":2},"end":{"line":335,"column":3}},"loc":{"start":{"line":333,"column":2},"end":{"line":335,"column":3}},"line":333},"14":{"name":"_setupHoverHandlers","decl":{"start":{"line":341,"column":2},"end":{"line":374,"column":3}},"loc":{"start":{"line":341,"column":2},"end":{"line":374,"column":3}},"line":341},"15":{"name":"highlightFilesMatchingEpisode","decl":{"start":{"line":381,"column":2},"end":{"line":399,"column":3}},"loc":{"start":{"line":381,"column":2},"end":{"line":399,"column":3}},"line":381},"16":{"name":"removeFileHighlights","decl":{"start":{"line":404,"column":2},"end":{"line":409,"column":3}},"loc":{"start":{"line":404,"column":2},"end":{"line":409,"column":3}},"line":404}},"f":{"0":18,"1":1,"2":14,"3":6,"4":16,"5":0,"6":0,"7":0,"8":0,"9":0,"10":1,"11":1,"12":9,"13":1,"14":32,"15":3,"16":1}} +,"/tmp/MovieMapper/utils/renderer/ProgressManager.js": {"path":"/tmp/MovieMapper/utils/renderer/ProgressManager.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":58}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":63}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":47}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":37}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":39}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":5}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":28}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":47}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":5}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":51}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":33}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":53}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":46}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":42}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":5}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":5}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":28}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":18}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":33}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":52}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":5}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":5}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":46}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":44}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":40}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":49}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":5}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":44}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":33}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":41}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":64}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":77}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":5}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":5}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":37}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":41}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":5}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":28}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":28}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":43}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":5}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":3}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":5}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":34}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":44}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":40}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":5}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":39}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":29}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":41}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":77}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":5}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":3}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":5}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":28}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":45}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":5}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":37}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":68}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":3}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":33}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":9,"6":9,"7":9,"8":9,"10":1,"11":1,"12":1,"13":1,"14":1,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":2,"39":2,"40":2,"41":2,"42":2,"43":2,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":2,"62":2,"63":2,"64":2,"65":2,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"76":1},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":9,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":9,"column":3}}]},"1":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":2},"end":{"line":21,"column":3}},"locations":[{"start":{"line":15,"column":2},"end":{"line":21,"column":3}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":2},"end":{"line":30,"column":3}},"locations":[{"start":{"line":26,"column":2},"end":{"line":30,"column":3}}]},"3":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":44,"column":3}},"locations":[{"start":{"line":38,"column":2},"end":{"line":44,"column":3}}]},"4":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":54,"column":3}},"locations":[{"start":{"line":50,"column":2},"end":{"line":54,"column":3}}]},"5":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},"locations":[{"start":{"line":61,"column":2},"end":{"line":66,"column":3}}]},"6":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":2},"end":{"line":74,"column":3}},"locations":[{"start":{"line":72,"column":2},"end":{"line":74,"column":3}}]}},"b":{"0":[9],"1":[2],"2":[1],"3":[2],"4":[1],"5":[2],"6":[1]},"fnMap":{"0":{"name":"ProgressManager","decl":{"start":{"line":5,"column":2},"end":{"line":9,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":9,"column":3}},"line":5},"1":{"name":"showProgress","decl":{"start":{"line":15,"column":2},"end":{"line":21,"column":3}},"loc":{"start":{"line":15,"column":2},"end":{"line":21,"column":3}},"line":15},"2":{"name":"hideProgress","decl":{"start":{"line":26,"column":2},"end":{"line":30,"column":3}},"loc":{"start":{"line":26,"column":2},"end":{"line":30,"column":3}},"line":26},"3":{"name":"updateProgress","decl":{"start":{"line":38,"column":2},"end":{"line":44,"column":3}},"loc":{"start":{"line":38,"column":2},"end":{"line":44,"column":3}},"line":38},"4":{"name":"updateProgressText","decl":{"start":{"line":50,"column":2},"end":{"line":54,"column":3}},"loc":{"start":{"line":50,"column":2},"end":{"line":54,"column":3}},"line":50},"5":{"name":"updateProgressCount","decl":{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},"loc":{"start":{"line":61,"column":2},"end":{"line":66,"column":3}},"line":61},"6":{"name":"showDirectoryFeedback","decl":{"start":{"line":72,"column":2},"end":{"line":74,"column":3}},"loc":{"start":{"line":72,"column":2},"end":{"line":74,"column":3}},"line":72}},"f":{"0":9,"1":2,"2":1,"3":2,"4":1,"5":2,"6":1}} +} diff --git a/coverage/favicon.png b/coverage/favicon.png new file mode 100644 index 0000000..c1525b8 Binary files /dev/null and b/coverage/favicon.png differ diff --git a/coverage/index.html b/coverage/index.html new file mode 100644 index 0000000..5e490c1 --- /dev/null +++ b/coverage/index.html @@ -0,0 +1,161 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 86.47% + Statements + 729/843 +
+ + +
+ 86.95% + Branches + 100/115 +
+ + +
+ 86.44% + Functions + 51/59 +
+ + +
+ 86.47% + Lines + 729/843 +
+ + +
+

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

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AppState.js +
+
98.9%180/182100%24/2495.45%21/2298.9%180/182
EpisodeManager.js +
+
81.27%204/25185.1%40/4784.61%11/1381.27%204/251
FileListManager.js +
+
80.88%275/34078.37%29/3770.58%12/1780.88%275/340
ProgressManager.js +
+
100%70/70100%7/7100%7/7100%70/70
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/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/coverage/prettify.js b/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/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/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000..6ed6831 Binary files /dev/null and b/coverage/sort-arrow-sprite.png differ diff --git a/coverage/sorter.js b/coverage/sorter.js new file mode 100644 index 0000000..4ed70ae --- /dev/null +++ b/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); diff --git a/package-lock.json b/package-lock.json index 9c5c851..b7d7e70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,208 @@ "dotenv": "^17.3.1", "electron": "^40.4.1", "fluent-ffmpeg": "^2.1.3" + }, + "devDependencies": { + "@vitest/coverage-v8": "^3.2.6", + "jsdom": "^25.0.1", + "vitest": "^3.2.6" + } + }, + "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, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" } }, "node_modules/@electron/get": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -33,9 +230,822 @@ "global-agent": "^3.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "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 + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "engines": { "node": ">=10" }, @@ -45,7 +1055,8 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -55,7 +1066,8 @@ }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -63,77 +1075,340 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==" }, "node_modules/@types/keyv": { "version": "3.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "24.10.13", - "license": "MIT", + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/responselike": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@vitest/coverage-v8": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.6.tgz", + "integrity": "sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.2.6", + "vitest": "3.2.6" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz", + "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz", + "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.2.6", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz", + "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz", + "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.2.6", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz", + "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.6", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz", + "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==", + "dev": true, + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz", + "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.6", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz", + "integrity": "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, "node_modules/async": { - "version": "0.2.10" + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.13.5", - "license": "MIT", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/boolean": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "optional": true }, + "node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "engines": { "node": "*" } }, + "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, + "engines": { + "node": ">=8" + } + }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { "version": "7.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -149,7 +1424,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -158,9 +1434,35 @@ "node": ">= 0.4" } }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, "node_modules/clone-response": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dependencies": { "mimic-response": "^1.0.0" }, @@ -168,9 +1470,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -178,9 +1499,71 @@ "node": ">= 0.8" } }, + "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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/debug": { "version": "4.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dependencies": { "ms": "^2.1.3" }, @@ -193,9 +1576,16 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true + }, "node_modules/decompress-response": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { "mimic-response": "^3.1.0" }, @@ -208,7 +1598,8 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { "node": ">=10" }, @@ -216,16 +1607,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "engines": { "node": ">=10" } }, "node_modules/define-data-property": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "optional": true, "dependencies": { "es-define-property": "^1.0.0", @@ -241,7 +1643,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "optional": true, "dependencies": { "define-data-property": "^1.0.1", @@ -257,19 +1660,22 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/detect-node": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "optional": true }, "node_modules/dotenv": { - "version": "17.3.1", - "license": "BSD-2-Clause", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "engines": { "node": ">=12" }, @@ -279,7 +1685,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -289,10 +1696,17 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron": { - "version": "40.6.0", + "version": "40.10.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-40.10.2.tgz", + "integrity": "sha512-Xj3Hy0Imbu4g0gDIW55w/jJYz94nMO2JRSGYA3LyAn5SwaERCelgZrA21vfH+Bi//SWAWQXddHsMwCqauyMT8g==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^24.9.0", @@ -305,37 +1719,66 @@ "node": ">= 12.20.55" } }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/end-of-stream": { "version": "1.4.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dependencies": { "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "engines": { "node": ">=6" } }, "node_modules/es-define-property": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "license": "MIT", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dependencies": { "es-errors": "^1.3.0" }, @@ -345,7 +1788,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -358,12 +1802,55 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "optional": true, "engines": { "node": ">=10" @@ -372,9 +1859,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/extract-zip": { "version": "2.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -392,14 +1898,34 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dependencies": { "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fluent-ffmpeg": { "version": "2.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz", + "integrity": "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dependencies": { "async": "^0.2.9", "which": "^1.1.1" @@ -409,14 +1935,15 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -426,15 +1953,32 @@ } } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { - "version": "4.0.5", - "license": "MIT", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -442,7 +1986,8 @@ }, "node_modules/fs-extra": { "version": "8.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -452,16 +1997,32 @@ "node": ">=6 <7 || >=8" } }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -483,7 +2044,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -494,7 +2056,8 @@ }, "node_modules/get-stream": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, @@ -505,9 +2068,61 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "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, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/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 + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/global-agent": { "version": "3.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -522,8 +2137,9 @@ } }, "node_modules/global-agent/node_modules/semver": { - "version": "7.7.4", - "license": "ISC", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "optional": true, "bin": { "semver": "bin/semver.js" @@ -534,7 +2150,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "optional": true, "dependencies": { "define-properties": "^1.2.1", @@ -549,7 +2166,8 @@ }, "node_modules/gopd": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { "node": ">= 0.4" }, @@ -559,7 +2177,8 @@ }, "node_modules/got": { "version": "11.8.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -582,11 +2201,22 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "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, + "engines": { + "node": ">=8" + } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "optional": true, "dependencies": { "es-define-property": "^1.0.0" @@ -597,7 +2227,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -607,7 +2238,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { "has-symbols": "^1.0.3" }, @@ -619,8 +2251,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "license": "MIT", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dependencies": { "function-bind": "^1.1.2" }, @@ -628,13 +2261,55 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "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 + }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "engines": { + "node": ">= 14" + } }, "node_modules/http2-wrapper": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -643,43 +2318,281 @@ "node": ">=10.19.0" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "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, + "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, + "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, + "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, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dev": true, + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } }, "node_modules/json-buffer": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "optional": true }, "node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/keyv": { "version": "4.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { "json-buffer": "3.0.1" } }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true + }, "node_modules/lowercase-keys": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "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, + "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, + "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, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/matcher": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -690,21 +2603,24 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { "node": ">= 0.4" } }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -714,18 +2630,63 @@ }, "node_modules/mimic-response": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { "node": ">=4" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, "node_modules/normalize-url": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "engines": { "node": ">=10" }, @@ -733,9 +2694,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nwsapi": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", + "dev": true + }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "optional": true, "engines": { "node": ">= 0.4" @@ -743,44 +2711,167 @@ }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/p-cancelable": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "engines": { "node": ">=8" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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 + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, "node_modules/pend": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "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 + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } }, "node_modules/progress": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "engines": { "node": ">=0.4.0" } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "engines": { + "node": ">=10" + } }, "node_modules/pump": { - "version": "3.0.3", - "license": "MIT", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/quick-lru": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "engines": { "node": ">=10" }, @@ -790,11 +2881,13 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "node_modules/responselike": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -804,7 +2897,8 @@ }, "node_modules/roarr": { "version": "2.15.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -818,21 +2912,92 @@ "node": ">=8.0" } }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/semver": { "version": "6.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-compare": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "optional": true }, "node_modules/serialize-error": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -844,14 +3009,190 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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, + "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, + "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 + }, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "optional": true }, + "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 + }, + "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 + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/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 + }, "node_modules/sumchecker": { "version": "3.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dependencies": { "debug": "^4.1.0" }, @@ -859,9 +3200,139 @@ "node": ">= 8.0" } }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "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 + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/type-fest": { "version": "0.13.1", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "optional": true, "engines": { "node": ">=10" @@ -871,19 +3342,246 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "license": "MIT" + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" }, "node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { "node": ">= 4.0.0" } }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.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 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz", + "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.6", + "@vitest/mocker": "3.2.6", + "@vitest/pretty-format": "^3.2.6", + "@vitest/runner": "3.2.6", + "@vitest/snapshot": "3.2.6", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.6", + "@vitest/ui": "3.2.6", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "1.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, @@ -891,13 +3589,158 @@ "which": "bin/which" } }, + "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, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/yauzl": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index 8e15663..1bbdea5 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,17 @@ "main": "main.js", "scripts": { "start": "electron .", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "vitest run --coverage" }, "dependencies": { "axios": "^1.13.5", "dotenv": "^17.3.1", "electron": "^40.4.1", "fluent-ffmpeg": "^2.1.3" + }, + "devDependencies": { + "@vitest/coverage-v8": "^3.2.6", + "jsdom": "^25.0.1", + "vitest": "^3.2.6" } } diff --git a/tests/AppState.test.js b/tests/AppState.test.js new file mode 100644 index 0000000..eaffc58 --- /dev/null +++ b/tests/AppState.test.js @@ -0,0 +1,190 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import AppState from '../utils/renderer/AppState'; + +describe('AppState', () => { + let state; + + beforeEach(() => { + state = new AppState(); + }); + + describe('constructor', () => { + it('initializes with default values', () => { + expect(state.getCurrentDirectory()).toBeNull(); + expect(state.getCurrentFiles()).toEqual([]); + expect(state.getCurrentShow()).toBeNull(); + expect(state.getCurrentSeasons()).toEqual([]); + expect(state.getCurrentEpisodes()).toEqual([]); + expect(state.getSelectedSeasonEpisodeCount()).toBe(0); + expect(state.isUpdatingEpisodeNumbers).toBe(false); + expect(state.getNavigationStack()).toEqual([]); + expect(state.getNavigationDepth()).toBe(0); + }); + }); + + describe('currentDirectory', () => { + it('sets and gets directory', () => { + state.setCurrentDirectory('/path/to/dir'); + expect(state.getCurrentDirectory()).toBe('/path/to/dir'); + }); + + it('overwrites previous directory', () => { + state.setCurrentDirectory('/path/one'); + state.setCurrentDirectory('/path/two'); + expect(state.getCurrentDirectory()).toBe('/path/two'); + }); + }); + + describe('currentFiles', () => { + it('sets and gets files array', () => { + const files = [{ name: 'file1.mp4' }, { name: 'file2.mp4' }]; + state.setCurrentFiles(files); + expect(state.getCurrentFiles()).toEqual(files); + }); + + it('handles empty array', () => { + state.setCurrentFiles([]); + expect(state.getCurrentFiles()).toEqual([]); + }); + }); + + describe('currentShow', () => { + it('sets and gets show object', () => { + const show = { id: 'series-12345', name: 'Test Show' }; + state.setCurrentShow(show); + expect(state.getCurrentShow()).toEqual(show); + }); + }); + + describe('currentSeasons', () => { + it('sets and gets seasons array', () => { + const seasons = [{ number: 1 }, { number: 2 }]; + state.setCurrentSeasons(seasons); + expect(state.getCurrentSeasons()).toEqual(seasons); + }); + }); + + describe('currentEpisodes', () => { + it('sets and gets episodes array', () => { + const episodes = [{ number: 1 }, { number: 2 }]; + state.setCurrentEpisodes(episodes); + expect(state.getCurrentEpisodes()).toEqual(episodes); + }); + }); + + describe('selectedSeasonEpisodeCount', () => { + it('sets and gets episode count', () => { + state.setSelectedSeasonEpisodeCount(13); + expect(state.getSelectedSeasonEpisodeCount()).toBe(13); + }); + }); + + describe('updatingEpisodeNumbers', () => { + it('sets and gets updating flag', () => { + state.setUpdatingEpisodeNumbers(true); + expect(state.isUpdatingEpisodeNumbers).toBe(true); + state.setUpdatingEpisodeNumbers(false); + expect(state.isUpdatingEpisodeNumbers).toBe(false); + }); + }); + + describe('reset', () => { + it('resets all state to defaults', () => { + state.setCurrentDirectory('/path/to/dir'); + state.setCurrentFiles([{ name: 'file.mp4' }]); + state.setCurrentShow({ name: 'Show' }); + state.setCurrentSeasons([{ number: 1 }]); + state.setCurrentEpisodes([{ number: 1 }]); + state.setSelectedSeasonEpisodeCount(10); + state.setUpdatingEpisodeNumbers(true); + state.addToNavigationStack('/path/to/dir'); + + state.reset(); + + expect(state.getCurrentDirectory()).toBeNull(); + expect(state.getCurrentFiles()).toEqual([]); + expect(state.getCurrentShow()).toBeNull(); + expect(state.getCurrentSeasons()).toEqual([]); + expect(state.getCurrentEpisodes()).toEqual([]); + expect(state.getSelectedSeasonEpisodeCount()).toBe(0); + expect(state.isUpdatingEpisodeNumbers).toBe(false); + expect(state.getNavigationStack()).toEqual([]); + expect(state.getNavigationDepth()).toBe(0); + }); + }); + + describe('navigationStack', () => { + it('adds directories to stack', () => { + state.addToNavigationStack('/home'); + expect(state.getNavigationStack()).toEqual(['/home']); + expect(state.getNavigationDepth()).toBe(0); + }); + + it('supports multiple navigation levels', () => { + state.addToNavigationStack('/home'); + state.addToNavigationStack('/home/movies'); + state.addToNavigationStack('/home/movies/show'); + expect(state.getNavigationStack().length).toBe(3); + expect(state.getNavigationDepth()).toBe(2); + }); + + it('returns current directory from stack', () => { + state.addToNavigationStack('/home'); + state.addToNavigationStack('/home/movies'); + expect(state.getCurrentDirectoryFromStack()).toBe('/home/movies'); + }); + + it('returns null when stack is empty', () => { + expect(state.getCurrentDirectoryFromStack()).toBeNull(); + }); + + it('truncates forward history on new navigation', () => { + state.addToNavigationStack('/home'); + state.addToNavigationStack('/home/movies'); + state.goBack(); + state.addToNavigationStack('/home/photos'); + expect(state.getNavigationStack()).toEqual(['/home', '/home/photos']); + }); + + it('goes back to previous directory', () => { + state.addToNavigationStack('/home'); + state.addToNavigationStack('/home/movies'); + const result = state.goBack(); + expect(result).toBe('/home'); + }); + + it('returns null when cannot go back', () => { + state.addToNavigationStack('/home'); + const result = state.goBack(); + expect(result).toBeNull(); + }); + + it('returns null on empty stack goBack', () => { + const result = state.goBack(); + expect(result).toBeNull(); + }); + + it('canGoBack returns correct state', () => { + expect(state.canGoBack()).toBe(false); + state.addToNavigationStack('/home'); + expect(state.canGoBack()).toBe(false); + state.addToNavigationStack('/home/movies'); + expect(state.canGoBack()).toBe(true); + }); + + it('canGoBack becomes false after going back to root', () => { + state.addToNavigationStack('/home'); + state.addToNavigationStack('/home/movies'); + state.goBack(); + expect(state.canGoBack()).toBe(false); + }); + + it('handles deep navigation', () => { + for (let i = 1; i <= 5; i++) { + state.addToNavigationStack(`/level${i}`); + } + expect(state.getNavigationDepth()).toBe(4); + expect(state.getNavigationStack().length).toBe(5); + }); + }); +}); diff --git a/tests/EpisodeManager.test.js b/tests/EpisodeManager.test.js new file mode 100644 index 0000000..c053f1d --- /dev/null +++ b/tests/EpisodeManager.test.js @@ -0,0 +1,283 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import EpisodeManager from '../utils/renderer/EpisodeManager'; + +describe('EpisodeManager', () => { + let em; + let fileListEl; + + beforeEach(() => { + em = new EpisodeManager(); + fileListEl = document.createElement('div'); + fileListEl.id = 'file-list'; + }); + + describe('constructor', () => { + it('initializes with isUpdatingEpisodeNumbers false', () => { + expect(em.getIsUpdatingEpisodeNumbers()).toBe(false); + }); + }); + + describe('updateEpisodeNumbers', () => { + it('updates episode numbers sequentially', () => { + const item1 = document.createElement('div'); + item1.className = 'file-item'; + const ep1 = document.createElement('span'); + ep1.className = 'episode-number'; + ep1.dataset.episodeStart = ''; + ep1.dataset.episodeEnd = ''; + item1.appendChild(ep1); + + const item2 = document.createElement('div'); + item2.className = 'file-item'; + const ep2 = document.createElement('span'); + ep2.className = 'episode-number'; + ep2.dataset.episodeStart = ''; + ep2.dataset.episodeEnd = ''; + item2.appendChild(ep2); + + fileListEl.appendChild(item1); + fileListEl.appendChild(item2); + + em.updateEpisodeNumbers(fileListEl); + expect(ep1.textContent).toBe('1'); + expect(ep2.textContent).toBe('2'); + }); + + it('skips re-entrant calls', () => { + em.setIsUpdatingEpisodeNumbers(true); + em.updateEpisodeNumbers(fileListEl); + expect(em.getIsUpdatingEpisodeNumbers()).toBe(true); + }); + + it('respects stored episode ranges', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + const ep = document.createElement('span'); + ep.className = 'episode-number'; + ep.dataset.episodeStart = '5'; + ep.dataset.episodeEnd = '7'; + item.appendChild(ep); + fileListEl.appendChild(item); + + em.updateEpisodeNumbers(fileListEl); + expect(ep.textContent).toBe('5-7'); + }); + }); + + describe('setIsUpdatingEpisodeNumbers', () => { + it('sets the flag', () => { + em.setIsUpdatingEpisodeNumbers(true); + expect(em.getIsUpdatingEpisodeNumbers()).toBe(true); + em.setIsUpdatingEpisodeNumbers(false); + expect(em.getIsUpdatingEpisodeNumbers()).toBe(false); + }); + }); + + describe('highlightEpisodes', () => { + it('highlights episodes in range', () => { + const container = document.createElement('div'); + container.id = 'episodes-container'; + + const ep1 = document.createElement('div'); + ep1.className = 'episode-item'; + ep1.textContent = 'E1 Pilot'; + + const ep2 = document.createElement('div'); + ep2.className = 'episode-item'; + ep2.textContent = 'E2 Second'; + + const ep3 = document.createElement('div'); + ep3.className = 'episode-item'; + ep3.textContent = 'E3 Third'; + + container.appendChild(ep1); + container.appendChild(ep2); + container.appendChild(ep3); + + em.highlightEpisodes(1, 2, container); + expect(ep1.classList.contains('highlighted-episode')).toBe(true); + expect(ep2.classList.contains('highlighted-episode')).toBe(true); + expect(ep3.classList.contains('highlighted-episode')).toBe(false); + }); + + it('handles null container', () => { + expect(() => em.highlightEpisodes(1, 2, null)).not.toThrow(); + }); + }); + + describe('removeEpisodeHighlights', () => { + it('removes highlights', () => { + const container = document.createElement('div'); + const ep = document.createElement('div'); + ep.className = 'episode-item highlighted-episode'; + container.appendChild(ep); + + em.removeEpisodeHighlights(container); + expect(ep.classList.contains('highlighted-episode')).toBe(false); + }); + + it('handles null container', () => { + expect(() => em.removeEpisodeHighlights(null)).not.toThrow(); + }); + }); + + describe('getEpisodeRange', () => { + it('returns range from data attributes', () => { + const epEl = document.createElement('span'); + epEl.dataset.episodeStart = '3'; + epEl.dataset.episodeEnd = '5'; + const range = em.getEpisodeRange(epEl); + expect(range).toEqual({ start: 3, end: 5 }); + }); + + it('defaults to 1 when no data', () => { + const epEl = document.createElement('span'); + const range = em.getEpisodeRange(epEl); + expect(range).toEqual({ start: 1, end: 1 }); + }); + }); + + describe('calculateTotalEpisodeCount', () => { + it('sums episode ranges', () => { + const item1 = document.createElement('div'); + item1.className = 'file-item'; + const ep1 = document.createElement('span'); + ep1.className = 'episode-number'; + ep1.dataset.episodeStart = '1'; + ep1.dataset.episodeEnd = '1'; + item1.appendChild(ep1); + + const item2 = document.createElement('div'); + item2.className = 'file-item'; + const ep2 = document.createElement('span'); + ep2.className = 'episode-number'; + ep2.dataset.episodeStart = '2'; + ep2.dataset.episodeEnd = '3'; + item2.appendChild(ep2); + + fileListEl.appendChild(item1); + fileListEl.appendChild(item2); + + expect(em.calculateTotalEpisodeCount(fileListEl)).toBe(3); + }); + + it('returns 0 for empty list', () => { + expect(em.calculateTotalEpisodeCount(fileListEl)).toBe(0); + }); + }); + + describe('getLastEpisodeEnd', () => { + it('returns highest episode end', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + const ep = document.createElement('span'); + ep.className = 'episode-number'; + ep.dataset.episodeEnd = '13'; + item.appendChild(ep); + fileListEl.appendChild(item); + + expect(em.getLastEpisodeEnd(fileListEl)).toBe(13); + }); + + it('returns 0 for empty list', () => { + expect(em.getLastEpisodeEnd(fileListEl)).toBe(0); + }); + }); + + describe('handleEpisodeArrowClick', () => { + it('increases range with right arrow', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + item.dataset.filePath = '/path/file.mp4'; + const ep = document.createElement('span'); + ep.className = 'episode-number'; + ep.dataset.episodeStart = '1'; + ep.dataset.episodeEnd = '1'; + item.appendChild(ep); + + const arrow = document.createElement('button'); + arrow.className = 'episode-arrow-right'; + item.appendChild(arrow); + + fileListEl.appendChild(item); + + em.handleEpisodeArrowClick(arrow, 'right', fileListEl); + expect(ep.dataset.episodeEnd).toBe('2'); + }); + + it('decreases range with left arrow', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + item.dataset.filePath = '/path/file.mp4'; + const ep = document.createElement('span'); + ep.className = 'episode-number'; + ep.dataset.episodeStart = '3'; + ep.dataset.episodeEnd = '3'; + item.appendChild(ep); + + const arrow = document.createElement('button'); + arrow.className = 'episode-arrow-left'; + item.appendChild(arrow); + + fileListEl.appendChild(item); + + em.handleEpisodeArrowClick(arrow, 'left', fileListEl); + expect(ep.dataset.episodeStart).toBe('2'); + }); + + it('does not decrease below 1', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + item.dataset.filePath = '/path/file.mp4'; + const ep = document.createElement('span'); + ep.className = 'episode-number'; + ep.dataset.episodeStart = '1'; + ep.dataset.episodeEnd = '1'; + item.appendChild(ep); + + const arrow = document.createElement('button'); + arrow.className = 'episode-arrow-left'; + item.appendChild(arrow); + + fileListEl.appendChild(item); + + em.handleEpisodeArrowClick(arrow, 'left', fileListEl); + expect(ep.dataset.episodeStart).toBe('1'); + }); + + it('returns early when no episode element', () => { + const item = document.createElement('div'); + item.className = 'file-item'; + + const arrow = document.createElement('button'); + arrow.className = 'episode-arrow-right'; + item.appendChild(arrow); + + fileListEl.appendChild(item); + + expect(() => em.handleEpisodeArrowClick(arrow, 'right', fileListEl)).not.toThrow(); + }); + }); + + describe('makeEpisodeRangeEditable', () => { + it('makes element editable', () => { + const el = document.createElement('span'); + el.textContent = '1'; + el.dataset.episodeStart = '1'; + el.dataset.episodeEnd = '1'; + + em.makeEpisodeRangeEditable(el); + expect(el.contentEditable).toBe('true'); + expect(el.classList.contains('editing')).toBe(true); + }); + + it('returns early if already editable', () => { + const el = document.createElement('span'); + el.contentEditable = 'true'; + const focusSpy = vi.spyOn(el, 'focus'); + + em.makeEpisodeRangeEditable(el); + expect(focusSpy).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/tests/FileListManager.test.js b/tests/FileListManager.test.js new file mode 100644 index 0000000..8f754e9 --- /dev/null +++ b/tests/FileListManager.test.js @@ -0,0 +1,196 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import FileListManager from '../utils/renderer/FileListManager'; + +describe('FileListManager', () => { + let fileListEl; + let flm; + let folderClickSpy; + + beforeEach(() => { + fileListEl = document.createElement('div'); + fileListEl.id = 'file-list'; + folderClickSpy = vi.fn(); + flm = new FileListManager(fileListEl, folderClickSpy); + }); + + describe('constructor', () => { + it('initializes with null draggedItem', () => { + expect(flm.draggedItem).toBeNull(); + }); + + it('accepts null folder click callback', () => { + const manager = new FileListManager(fileListEl, null); + expect(manager.onFolderClick).toBeNull(); + }); + }); + + describe('displayFiles', () => { + it('shows empty message when no files', () => { + flm.displayFiles([]); + expect(fileListEl.textContent).toContain('No media files found'); + }); + + it('displays folders and media files', () => { + const files = [ + { isFolder: true, path: '/path/folder', name: 'Extras' }, + { isFolder: false, path: '/path/file.mp4', name: 'episode.mp4', duration: '45:00', quality: '1080p', fps: '30fps' }, + ]; + flm.displayFiles(files); + const items = fileListEl.querySelectorAll('.file-item'); + expect(items.length).toBe(2); + expect(items[0].classList.contains('folder-item')).toBe(true); + }); + + it('sorts folders before files', () => { + const files = [ + { isFolder: false, path: '/path/file.mp4', name: 'episode.mp4', duration: '45:00' }, + { isFolder: true, path: '/path/folder', name: 'Extras' }, + ]; + flm.displayFiles(files); + const items = fileListEl.querySelectorAll('.file-item'); + expect(items[0].classList.contains('folder-item')).toBe(true); + }); + + it('creates folder element with click handler', () => { + const files = [{ isFolder: true, path: '/path/folder', name: 'Extras' }]; + flm.displayFiles(files); + const folderItem = fileListEl.querySelector('.folder-item'); + expect(folderItem).not.toBeNull(); + }); + + it('creates media file with episode number', () => { + const files = [ + { isFolder: false, path: '/path/file.mp4', name: 'episode.mp4', duration: '45:00', quality: '1080p', fps: '30fps' }, + ]; + flm.displayFiles(files); + const episodeEl = fileListEl.querySelector('.episode-number'); + expect(episodeEl).not.toBeNull(); + expect(episodeEl.textContent).toBe('1'); + }); + + it('marks problematic files with warning icon', () => { + const files = [ + { isFolder: false, path: '/path/bad.mp4', name: 'bad.mp4', duration: '00:00', isProblematic: true }, + ]; + flm.displayFiles(files); + const warnLabel = fileListEl.querySelector('.problematic-label'); + expect(warnLabel).not.toBeNull(); + }); + }); + + describe('updateEpisodeNumbers', () => { + it('updates episode numbers sequentially', () => { + const files = [ + { isFolder: false, path: '/path/f1.mp4', name: 'f1.mp4' }, + { isFolder: false, path: '/path/f2.mp4', name: 'f2.mp4' }, + { isFolder: false, path: '/path/f3.mp4', name: 'f3.mp4' }, + ]; + flm.displayFiles(files); + flm.updateEpisodeNumbers(); + const episodeEls = fileListEl.querySelectorAll('.episode-number'); + expect(episodeEls[0].textContent).toBe('1'); + expect(episodeEls[1].textContent).toBe('2'); + expect(episodeEls[2].textContent).toBe('3'); + }); + }); + + describe('clear', () => { + it('clears the file list', () => { + const files = [ + { isFolder: false, path: '/path/f1.mp4', name: 'f1.mp4' }, + ]; + flm.displayFiles(files); + flm.clear(); + expect(fileListEl.innerHTML).toBe(''); + }); + }); + + describe('getMediaFileItems', () => { + it('returns only media file items', () => { + const files = [ + { isFolder: true, path: '/path/folder', name: 'Folder' }, + { isFolder: false, path: '/path/file.mp4', name: 'file.mp4' }, + ]; + flm.displayFiles(files); + const mediaItems = flm.getMediaFileItems(); + expect(mediaItems.length).toBe(1); + }); + }); + + describe('getFolderItems', () => { + it('returns only folder items', () => { + const files = [ + { isFolder: true, path: '/path/folder', name: 'Folder' }, + { isFolder: false, path: '/path/file.mp4', name: 'file.mp4' }, + ]; + flm.displayFiles(files); + const folderItems = flm.getFolderItems(); + expect(folderItems.length).toBe(1); + }); + }); + + describe('highlightFilesMatchingEpisode', () => { + it('highlights matching episodes', () => { + const files = [ + { isFolder: false, path: '/path/f1.mp4', name: 'f1.mp4' }, + { isFolder: false, path: '/path/f2.mp4', name: 'f2.mp4' }, + { isFolder: false, path: '/path/f3.mp4', name: 'f3.mp4' }, + ]; + flm.displayFiles(files); + flm.highlightFilesMatchingEpisode(2, 2); + const items = flm.getMediaFileItems(); + expect(items[0].classList.contains('hovered-file')).toBe(false); + expect(items[1].classList.contains('hovered-file')).toBe(true); + expect(items[2].classList.contains('hovered-file')).toBe(false); + }); + + it('highlights overlapping ranges', () => { + const files = [ + { isFolder: false, path: '/path/f1.mp4', name: 'f1.mp4' }, + { isFolder: false, path: '/path/f2.mp4', name: 'f2.mp4' }, + ]; + flm.displayFiles(files); + // Update first file to have range 1-2 + const firstEp = flm.getMediaFileItems()[0].querySelector('.episode-number'); + firstEp.dataset.episodeEnd = '2'; + + flm.highlightFilesMatchingEpisode(1, 1); + const items = flm.getMediaFileItems(); + // File 1 (range 1-2) overlaps with hover range 1-1 + expect(items[0].classList.contains('hovered-file')).toBe(true); + // File 2 (range 2-2) does NOT overlap with hover range 1-1 + expect(items[1].classList.contains('hovered-file')).toBe(false); + }); + }); + + describe('removeFileHighlights', () => { + it('removes all highlights', () => { + const files = [ + { isFolder: false, path: '/path/f1.mp4', name: 'f1.mp4' }, + ]; + flm.displayFiles(files); + flm.highlightFilesMatchingEpisode(1, 1); + flm.removeFileHighlights(); + const items = flm.getMediaFileItems(); + expect(items[0].classList.contains('hovered-file')).toBe(false); + }); + }); + + describe('setFolderClickCallback', () => { + it('updates the callback', () => { + const newCallback = vi.fn(); + flm.setFolderClickCallback(newCallback); + expect(flm.onFolderClick).toBe(newCallback); + }); + }); + + describe('folder click handling', () => { + it('calls folder click callback when folder is clicked', () => { + const files = [{ isFolder: true, path: '/path/folder', name: 'Extras' }]; + flm.displayFiles(files); + const folderItem = fileListEl.querySelector('.folder-item'); + folderItem.click(); + expect(folderClickSpy).toHaveBeenCalledWith('/path/folder', 'Extras'); + }); + }); +}); diff --git a/tests/ProgressManager.test.js b/tests/ProgressManager.test.js new file mode 100644 index 0000000..ce8298a --- /dev/null +++ b/tests/ProgressManager.test.js @@ -0,0 +1,76 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import ProgressManager from '../utils/renderer/ProgressManager'; + +describe('ProgressManager', () => { + let progressContainer, progressText, progressCount; + let pm; + + beforeEach(() => { + progressContainer = document.createElement('div'); + progressText = document.createElement('span'); + progressCount = document.createElement('span'); + pm = new ProgressManager(progressContainer, progressText, progressCount); + }); + + describe('showProgress', () => { + it('shows progress with default message', () => { + pm.showProgress(); + expect(progressContainer.style.display).toBe('block'); + expect(progressText.textContent).toBe('Scanning directory...'); + expect(progressCount.textContent).toBe(''); + }); + + it('shows progress with custom message', () => { + pm.showProgress('Custom message'); + expect(progressText.textContent).toBe('Custom message'); + }); + }); + + describe('hideProgress', () => { + it('hides progress container', () => { + pm.hideProgress(); + expect(progressContainer.style.display).toBe('none'); + }); + }); + + describe('updateProgress', () => { + it('updates progress with current/total', () => { + pm.updateProgress(2, 10, 'video.mp4'); + expect(progressText.textContent).toBe('Processing: video.mp4'); + expect(progressCount.textContent).toBe('3 of 10 files'); + }); + + it('handles first file (current=0)', () => { + pm.updateProgress(0, 5, 'file1.mp4'); + expect(progressCount.textContent).toBe('1 of 5 files'); + }); + }); + + describe('updateProgressText', () => { + it('updates progress text', () => { + pm.updateProgressText('Custom text'); + expect(progressText.textContent).toBe('Custom text'); + }); + }); + + describe('updateProgressCount', () => { + it('updates progress count', () => { + pm.updateProgressCount(5, 20); + expect(progressCount.textContent).toBe('6 of 20 files'); + }); + + it('handles last file', () => { + pm.updateProgressCount(19, 20); + expect(progressCount.textContent).toBe('20 of 20 files'); + }); + }); + + describe('showDirectoryFeedback', () => { + it('logs directory feedback', () => { + const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {}); + pm.showDirectoryFeedback('extras'); + expect(consoleSpy).toHaveBeenCalledWith('Directory "extras" created and file moved'); + consoleSpy.mockRestore(); + }); + }); +}); diff --git a/tests/fileUtils.test.js b/tests/fileUtils.test.js new file mode 100644 index 0000000..4a3cc94 --- /dev/null +++ b/tests/fileUtils.test.js @@ -0,0 +1,43 @@ +import { describe, it, expect } from 'vitest'; +import path from 'path'; + +const { isMediaFile } = require('../utils/fileUtils'); + +describe('isMediaFile', () => { + it('returns true for supported extensions', () => { + expect(isMediaFile('/path/to/video.mp4')).toBe(true); + expect(isMediaFile('/path/to/video.mkv')).toBe(true); + expect(isMediaFile('/path/to/video.avi')).toBe(true); + expect(isMediaFile('/path/to/video.mov')).toBe(true); + expect(isMediaFile('/path/to/video.flv')).toBe(true); + expect(isMediaFile('/path/to/video.webm')).toBe(true); + }); + + it('returns false for non-media extensions', () => { + expect(isMediaFile('/path/to/file.txt')).toBe(false); + expect(isMediaFile('/path/to/file.pdf')).toBe(false); + expect(isMediaFile('/path/to/file.jpg')).toBe(false); + expect(isMediaFile('/path/to/file.mp3')).toBe(false); + }); + + it('handles uppercase extensions', () => { + expect(isMediaFile('/path/to/video.MP4')).toBe(true); + expect(isMediaFile('/path/to/video.MKV')).toBe(true); + }); + + it('handles files without extension', () => { + expect(isMediaFile('/path/to/video')).toBe(false); + }); + + it('handles empty path', () => { + expect(isMediaFile('')).toBe(false); + }); + + it('handles deep nested paths', () => { + expect(isMediaFile('/very/deep/nested/path/to/episode.mp4')).toBe(true); + }); + + it('handles windows-style paths', () => { + expect(isMediaFile('C:\\Users\\video.mkv')).toBe(true); + }); +}); diff --git a/tests/main.test.js b/tests/main.test.js new file mode 100644 index 0000000..4b7e6d7 --- /dev/null +++ b/tests/main.test.js @@ -0,0 +1,364 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; + +const path = require('path'); + +describe('renderer.js - escapeHtml', () => { + let escapeHtml; + + beforeEach(() => { + escapeHtml = (str) => { + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; + }; + }); + + it('escapes angle brackets', () => { + expect(escapeHtml('