Index: frontend/node_modules/collect-v8-coverage/CHANGELOG.md
===================================================================
--- frontend/node_modules/collect-v8-coverage/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+## [1.0.3](https://github.com/SimenB/collect-v8-coverage/compare/v1.0.2...v1.0.3) (2025-10-15)
+
+
+### Bug Fixes
+
+* enable and disable debugger for more accurate coverage ([#235](https://github.com/SimenB/collect-v8-coverage/issues/235)) ([44fdef5](https://github.com/SimenB/collect-v8-coverage/commit/44fdef5d9110664da487f973f27aef134e0b035f))
+
+## [1.0.2](https://github.com/SimenB/collect-v8-coverage/compare/v1.0.1...v1.0.2) (2023-07-05)
+
+
+### Bug Fixes
+
+* workaround for networked filesystems on Windows ([#174](https://github.com/SimenB/collect-v8-coverage/issues/174)) ([4de72ea](https://github.com/SimenB/collect-v8-coverage/commit/4de72ea976228d6d8b7fb78207c1187aa58ddf50))
+
+## [1.0.1](https://github.com/SimenB/collect-v8-coverage/compare/v1.0.0...v1.0.1) (2020-04-02)
+
+### Bug Fixes
+
+- link to repo from package.json ([cf54d65](https://github.com/SimenB/collect-v8-coverage/commit/cf54d659f23afd411cd0ff752e69fa97d2ab1707))
+
+# 1.0.0 (2019-12-16)
+
+### Features
+
+- initial commit ([57e2041](https://github.com/SimenB/collect-v8-coverage/commit/57e20413f385d7730c5684b1852c14777583807e))
Index: frontend/node_modules/collect-v8-coverage/LICENSE
===================================================================
--- frontend/node_modules/collect-v8-coverage/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2019 Simen Bekkhus
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: frontend/node_modules/collect-v8-coverage/README.md
===================================================================
--- frontend/node_modules/collect-v8-coverage/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+# collect-v8-coverage
+
+Use this module to start and stop the V8 inspector manually and collect precise coverage.
+
+```js
+const {CoverageInstrumenter} = require('collect-v8-coverage');
+
+const instrumenter = new CoverageInstrumenter();
+
+await instrumenter.startInstrumenting();
+
+// require some modules, run some code
+
+const coverage = await instrumenter.stopInstrumenting();
+```
Index: frontend/node_modules/collect-v8-coverage/index.d.ts
===================================================================
--- frontend/node_modules/collect-v8-coverage/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+/// <reference types="node" />
+import { Profiler } from 'inspector';
+export declare type V8Coverage = ReadonlyArray<Profiler.ScriptCoverage>;
+export declare class CoverageInstrumenter {
+  startInstrumenting(): Promise<void>;
+  stopInstrumenting(): Promise<V8Coverage>;
+}
Index: frontend/node_modules/collect-v8-coverage/index.js
===================================================================
--- frontend/node_modules/collect-v8-coverage/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,56 @@
+'use strict';
+
+const { Session } = require('inspector');
+const { promisify } = require('util');
+
+class CoverageInstrumenter {
+  constructor() {
+    this.session = new Session();
+
+    this.postSession = promisify(this.session.post.bind(this.session));
+  }
+
+  async startInstrumenting() {
+    this.session.connect();
+
+    await this.postSession('Debugger.enable');
+
+    await this.postSession('Profiler.enable');
+
+    await this.postSession('Profiler.startPreciseCoverage', {
+      callCount: true,
+      detailed: true,
+    });
+  }
+
+  async stopInstrumenting() {
+    const {result} = await this.postSession(
+      'Profiler.takePreciseCoverage',
+    );
+
+    await this.postSession('Profiler.stopPreciseCoverage');
+
+    await this.postSession('Profiler.disable');
+
+    await this.postSession('Debugger.disable');
+
+    // When using networked filesystems on Windows, v8 sometimes returns URLs
+    // of the form file:////<host>/path. These URLs are not well understood
+    // by NodeJS (see https://github.com/nodejs/node/issues/48530).
+    // We circumvent this issue here by fixing these URLs.
+    // FWIW, Python has special code to deal with URLs like this
+    // https://github.com/python/cpython/blob/bef1c8761e3b0dfc5708747bb646ad8b669cbd67/Lib/nturl2path.py#L22C1-L22C1
+    if (process.platform === 'win32') {
+      const prefix = 'file:////';
+      result.forEach(res => {
+        if (res.url.startsWith(prefix)) {
+          res.url = 'file://' + res.url.slice(prefix.length);
+        }
+      })
+    }
+
+    return result;
+  }
+}
+
+module.exports.CoverageInstrumenter = CoverageInstrumenter;
Index: frontend/node_modules/collect-v8-coverage/package.json
===================================================================
--- frontend/node_modules/collect-v8-coverage/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/collect-v8-coverage/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,49 @@
+{
+  "name": "collect-v8-coverage",
+  "version": "1.0.3",
+  "main": "index.js",
+  "types": "index.d.ts",
+  "repository": "SimenB/collect-v8-coverage",
+  "files": [
+    "CHANGELOG.md",
+    "index.js",
+    "index.d.ts"
+  ],
+  "license": "MIT",
+  "devDependencies": {
+    "@commitlint/cli": "^19.0.0",
+    "@commitlint/config-conventional": "^19.0.0",
+    "@semantic-release/changelog": "^6.0.0",
+    "@semantic-release/git": "^10.0.0",
+    "husky": "^9.0.0",
+    "lint-staged": "^15.0.0",
+    "prettier": "^3.0.0",
+    "semantic-release": "^25.0.0"
+  },
+  "prettier": {
+    "singleQuote": true,
+    "trailingComma": "all"
+  },
+  "lint-staged": {
+    "*.{js,ts,md,json}": "prettier --write"
+  },
+  "commitlint": {
+    "extends": [
+      "@commitlint/config-conventional"
+    ]
+  },
+  "release": {
+    "plugins": [
+      "@semantic-release/commit-analyzer",
+      "@semantic-release/release-notes-generator",
+      "@semantic-release/changelog",
+      "@semantic-release/npm",
+      "@semantic-release/git",
+      "@semantic-release/github"
+    ]
+  },
+  "scripts": {
+    "prepare": "husky"
+  },
+  "packageManager": "yarn@4.10.3"
+}
