diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml
index 10b2672a..d1e5d07f 100644
--- a/.github/actions/setup-node/action.yml
+++ b/.github/actions/setup-node/action.yml
@@ -3,6 +3,6 @@ runs:
steps:
-
name: Setup node
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v4
with:
- node-version: 16.x
+ node-version: 18.x
diff --git a/docs/development.md b/docs/development.md
index 0709ccd1..22a3aa9b 100644
--- a/docs/development.md
+++ b/docs/development.md
@@ -13,7 +13,9 @@ See [ci-cd.md](./ci-cd.md) for more information.
### Prerequisites
-- Install Node >16.x.
+- Install Node.js:
+ - Refer to [action.yml](./../.github/actions/setup-node/action.yml) for the minimum required version compatible with the automated workflows.
+ - 💡 Recommended: Use [`nvm`](https://github.com/nvm-sh/nvm) CLI to install and switch between Node.js versions.
- Install dependencies using `npm install` (or [`npm run install-deps`](#utility-scripts) for more options).
### Testing
diff --git a/electron-builder.cjs b/electron-builder.cjs
index 8b8f4c11..e08e8c21 100644
--- a/electron-builder.cjs
+++ b/electron-builder.cjs
@@ -1,6 +1,6 @@
/* eslint-disable no-template-curly-in-string */
-const { join } = require('path');
+const { join } = require('node:path');
const { electronBundled, electronUnbundled } = require('./dist-dirs.json');
module.exports = {
diff --git a/electron.vite.config.ts b/electron.vite.config.ts
index 02f397b5..ae657c01 100644
--- a/electron.vite.config.ts
+++ b/electron.vite.config.ts
@@ -1,4 +1,4 @@
-import { resolve } from 'path';
+import { resolve } from 'node:path';
import { mergeConfig, UserConfig } from 'vite';
import { defineConfig, externalizeDepsPlugin } from 'electron-vite';
import { getAliasesFromTsConfig, getClientEnvironmentVariables } from './vite-config-helper';
diff --git a/package-lock.json b/package-lock.json
index e753883b..caa4cc7b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,13 +6,12 @@
"packages": {
"": {
"name": "privacy.sexy",
- "version": "0.12.8",
+ "version": "0.12.9",
"hasInstallScript": true,
"dependencies": {
"@floating-ui/vue": "^1.0.2",
"@juggle/resize-observer": "^3.4.0",
"ace-builds": "^1.30.0",
- "cross-fetch": "^4.0.0",
"electron-log": "^5.0.1",
"electron-progressbar": "^2.1.0",
"electron-updater": "^6.1.4",
@@ -5819,14 +5818,6 @@
"buffer": "^5.1.0"
}
},
- "node_modules/cross-fetch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
- "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
- "dependencies": {
- "node-fetch": "^2.6.12"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -12128,44 +12119,6 @@
"integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
"optional": true
},
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"node_modules/node-releases": {
"version": "2.0.13",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
@@ -23815,14 +23768,6 @@
"buffer": "^5.1.0"
}
},
- "cross-fetch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
- "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
- "requires": {
- "node-fetch": "^2.6.12"
- }
- },
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -28498,35 +28443,6 @@
"integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
"optional": true
},
- "node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "requires": {
- "whatwg-url": "^5.0.0"
- },
- "dependencies": {
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- }
- }
- },
"node-releases": {
"version": "2.0.13",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
diff --git a/package.json b/package.json
index f75abdf7..9260f5d0 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,6 @@
"@floating-ui/vue": "^1.0.2",
"@juggle/resize-observer": "^3.4.0",
"ace-builds": "^1.30.0",
- "cross-fetch": "^4.0.0",
"electron-log": "^5.0.1",
"electron-progressbar": "^2.1.0",
"electron-updater": "^6.1.4",
diff --git a/scripts/logo-update.js b/scripts/logo-update.js
index f460ef7e..59964544 100644
--- a/scripts/logo-update.js
+++ b/scripts/logo-update.js
@@ -1,8 +1,8 @@
#!/usr/bin/env bash
-import { resolve, join } from 'path';
-import { rm, mkdtemp, stat } from 'fs/promises';
-import { spawn } from 'child_process';
-import { URL, fileURLToPath } from 'url';
+import { resolve, join } from 'node:path';
+import { rm, mkdtemp, stat } from 'node:fs/promises';
+import { spawn } from 'node:child_process';
+import { URL, fileURLToPath } from 'node:url';
class Paths {
constructor(selfDirectory) {
diff --git a/scripts/npm-install.js b/scripts/npm-install.js
index 9b346ac9..2438822b 100644
--- a/scripts/npm-install.js
+++ b/scripts/npm-install.js
@@ -35,10 +35,10 @@ Note:
Example: npm run install-deps -- --fresh --non-deterministic
*/
-import { exec } from 'child_process';
-import { resolve } from 'path';
-import { access, rm, unlink } from 'fs/promises';
-import { constants } from 'fs';
+import { exec } from 'node:child_process';
+import { resolve } from 'node:path';
+import { access, rm, unlink } from 'node:fs/promises';
+import { constants } from 'node:fs';
const MAX_RETRIES = 5;
const RETRY_DELAY_IN_MS = 5 /* seconds */ * 1000;
diff --git a/scripts/print-dist-dir.js b/scripts/print-dist-dir.js
index 2f837945..858204d9 100644
--- a/scripts/print-dist-dir.js
+++ b/scripts/print-dist-dir.js
@@ -12,8 +12,8 @@
* --web Path for the web application
*/
-import { resolve } from 'path';
-import { readFile } from 'fs/promises';
+import { resolve } from 'node:path';
+import { readFile } from 'node:fs/promises';
const DIST_DIRS_JSON_FILE_PATH = resolve(process.cwd(), 'dist-dirs.json'); // cannot statically import because ESLint does not support it https://github.com/eslint/eslint/discussions/15305
const CLI_ARGUMENTS = process.argv.slice(2);
diff --git a/scripts/verify-build-artifacts.js b/scripts/verify-build-artifacts.js
index 947476ca..1ca9d77f 100644
--- a/scripts/verify-build-artifacts.js
+++ b/scripts/verify-build-artifacts.js
@@ -13,9 +13,9 @@
* --web Verify artifacts for the web application.
*/
-import { access, readdir } from 'fs/promises';
-import { exec } from 'child_process';
-import { resolve } from 'path';
+import { access, readdir } from 'node:fs/promises';
+import { exec } from 'node:child_process';
+import { resolve } from 'node:path';
const PROCESS_ARGUMENTS = process.argv.slice(2);
const PRINT_DIST_DIR_SCRIPT_BASE_COMMAND = 'node scripts/print-dist-dir';
diff --git a/src/presentation/electron/main/ElectronConfig.ts b/src/presentation/electron/main/ElectronConfig.ts
index d9a8e4c0..a8b3604c 100644
--- a/src/presentation/electron/main/ElectronConfig.ts
+++ b/src/presentation/electron/main/ElectronConfig.ts
@@ -4,7 +4,7 @@
*/
///
-import { join } from 'path';
+import { join } from 'node:path';
import appIcon from '@/presentation/public/icon.png?asset';
export const APP_ICON_PATH = appIcon;
diff --git a/src/presentation/electron/main/Update/ManualUpdater/Downloader.ts b/src/presentation/electron/main/Update/ManualUpdater/Downloader.ts
index 323d9211..7c1f0e6f 100644
--- a/src/presentation/electron/main/Update/ManualUpdater/Downloader.ts
+++ b/src/presentation/electron/main/Update/ManualUpdater/Downloader.ts
@@ -1,14 +1,12 @@
-import { existsSync, createWriteStream } from 'fs';
-import { unlink, mkdir } from 'fs/promises';
-import path from 'path';
+import { existsSync, createWriteStream, type WriteStream } from 'node:fs';
+import { unlink, mkdir } from 'node:fs/promises';
+import path from 'node:path';
import { app } from 'electron';
import { UpdateInfo } from 'electron-updater';
-import fetch from 'cross-fetch';
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
import { UpdateProgressBar } from '../UpdateProgressBar';
import { retryFileSystemAccess } from './RetryFileSystemAccess';
-import type { WriteStream } from 'fs';
-import type { Readable } from 'stream';
+import type { ReadableStream } from 'node:stream/web';
const MAX_PROGRESS_LOG_ENTRIES = 10;
const UNKNOWN_SIZE_LOG_INTERVAL_BYTES = 10 * 1024 * 1024; // 10 MB
@@ -128,13 +126,13 @@ function getContentLengthFromResponse(response: Response): ResponseContentLength
async function withReadableStream(
response: Response,
- handler: (readStream: Readable) => Promise,
+ handler: (readStream: ReadableStream) => Promise,
) {
const reader = createReader(response);
try {
await handler(reader);
} finally {
- reader.destroy();
+ reader.cancel();
}
}
@@ -152,7 +150,7 @@ async function withWriteStream(
async function streamWithProgress(
contentLength: ResponseContentLength,
- readStream: Readable,
+ readStream: ReadableStream,
writeStream: WriteStream,
progressHandler: ProgressCallback,
): Promise {
@@ -212,12 +210,13 @@ function shouldLogProgress(
return { shouldLog: false, nextLogThreshold: previousLogThreshold };
}
-function createReader(response: Response): Readable {
+function createReader(response: Response): ReadableStream {
if (!response.body) {
throw new Error('Response body is empty, cannot proceed with download.');
}
- // On browser, we could use browser API response.body.getReader()
- // But here, we use cross-fetch that gets node-fetch on a node application
- // This API is node-fetch specific, see https://github.com/node-fetch/node-fetch#streams
- return response.body as unknown as Readable;
+ // TypeScript has removed the async iterator type definition for ReadableStream due to
+ // limited browser support. Node.js, however, supports async iterable streams, allowing
+ // type casting to function properly in this context.
+ // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/65542#discussioncomment-6071004
+ return response.body as ReadableStream;
}
diff --git a/src/presentation/electron/main/Update/ManualUpdater/Integrity.ts b/src/presentation/electron/main/Update/ManualUpdater/Integrity.ts
index 22a63ca4..599eaf01 100644
--- a/src/presentation/electron/main/Update/ManualUpdater/Integrity.ts
+++ b/src/presentation/electron/main/Update/ManualUpdater/Integrity.ts
@@ -1,5 +1,5 @@
-import { createHash } from 'crypto';
-import { createReadStream } from 'fs';
+import { createHash } from 'node:crypto';
+import { createReadStream } from 'node:fs';
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
import { retryFileSystemAccess } from './RetryFileSystemAccess';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/app-logs.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/app-logs.ts
index bbd20e4a..d225ba50 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/app-logs.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/app-logs.ts
@@ -1,5 +1,5 @@
-import { unlink, readFile } from 'fs/promises';
-import { join } from 'path';
+import { unlink, readFile } from 'node:fs/promises';
+import { join } from 'node:path';
import { log, die, LogLevel } from '../utils/log';
import { exists } from '../utils/io';
import { SupportedPlatform, CURRENT_PLATFORM } from '../utils/platform';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/common/app-artifact-locator.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/common/app-artifact-locator.ts
index 7c6bec64..698b2aa0 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/common/app-artifact-locator.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/common/app-artifact-locator.ts
@@ -1,5 +1,5 @@
-import { join } from 'path';
-import { readdir } from 'fs/promises';
+import { join } from 'node:path';
+import { readdir } from 'node:fs/promises';
import { die } from '../../../utils/log';
import { exists } from '../../../utils/io';
import { getAppName } from '../../../utils/npm';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/linux.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/linux.ts
index cfdd250e..3d77f515 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/linux.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/linux.ts
@@ -1,5 +1,5 @@
-import { access, chmod } from 'fs/promises';
-import { constants } from 'fs';
+import { access, chmod } from 'node:fs/promises';
+import { constants } from 'node:fs';
import { log } from '../../utils/log';
import { ExtractionResult } from './common/extraction-result';
import { findByFilePattern } from './common/app-artifact-locator';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/windows.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/windows.ts
index e93ae96c..9accc130 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/windows.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/extractors/windows.ts
@@ -1,6 +1,6 @@
-import { mkdtemp, rm } from 'fs/promises';
-import { join } from 'path';
-import { tmpdir } from 'os';
+import { mkdtemp, rm } from 'node:fs/promises';
+import { join } from 'node:path';
+import { tmpdir } from 'node:os';
import { exists } from '../../utils/io';
import { log, die, LogLevel } from '../../utils/log';
import { runCommand } from '../../utils/run-command';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/runner.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/runner.ts
index bd792aac..8c7b8b28 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/runner.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/runner.ts
@@ -1,8 +1,7 @@
-import { spawn } from 'child_process';
+import { spawn, type ChildProcess } from 'node:child_process';
import { log, LogLevel, die } from '../utils/log';
import { captureScreen } from './system-capture/screen-capture';
import { captureWindowTitles } from './system-capture/window-title-capture';
-import type { ChildProcess } from 'child_process';
const TERMINATION_GRACE_PERIOD_IN_SECONDS = 20;
const TERMINATION_CHECK_INTERVAL_IN_MS = 1000;
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/system-capture/screen-capture.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/system-capture/screen-capture.ts
index f09b5334..b8655231 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/system-capture/screen-capture.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/app/system-capture/screen-capture.ts
@@ -1,4 +1,4 @@
-import { unlink } from 'fs/promises';
+import { unlink } from 'node:fs/promises';
import { runCommand } from '../../utils/run-command';
import { log, LogLevel } from '../../utils/log';
import { CURRENT_PLATFORM, SupportedPlatform } from '../../utils/platform';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/config.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/config.ts
index ff437fda..f68fc3c3 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/config.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/config.ts
@@ -1,4 +1,4 @@
-import { join } from 'path';
+import { join } from 'node:path';
import distDirs from '@/../dist-dirs.json' assert { type: 'json' };
export const DESKTOP_BUILD_COMMAND = [
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/io.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/io.ts
index de7b18dd..9599301a 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/io.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/io.ts
@@ -1,5 +1,5 @@
-import { readdir, access } from 'fs/promises';
-import { constants } from 'fs';
+import { readdir, access } from 'node:fs/promises';
+import { constants } from 'node:fs';
export async function exists(path: string): Promise {
if (!path) { throw new Error('Missing path'); }
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/npm.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/npm.ts
index 414a6c9f..0fe27357 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/npm.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/npm.ts
@@ -1,5 +1,5 @@
-import { join } from 'path';
-import { rm, readFile } from 'fs/promises';
+import { join } from 'node:path';
+import { rm, readFile } from 'node:fs/promises';
import { exists, isDirMissingOrEmpty } from './io';
import { runCommand } from './run-command';
import { LogLevel, die, log } from './log';
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/platform.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/platform.ts
index 45241d40..d638204a 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/platform.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/platform.ts
@@ -1,4 +1,4 @@
-import { platform } from 'os';
+import { platform } from 'node:os';
import { die } from './log';
export enum SupportedPlatform {
diff --git a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/run-command.ts b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/run-command.ts
index 1eb38dd8..fe3c96f1 100644
--- a/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/run-command.ts
+++ b/tests/checks/desktop-runtime-errors/check-desktop-runtime-errors/utils/run-command.ts
@@ -1,6 +1,5 @@
-import { exec } from 'child_process';
+import { exec, type ExecOptions, type ExecException } from 'node:child_process';
import { indentText } from './text';
-import type { ExecOptions, ExecException } from 'child_process';
const TIMEOUT_IN_SECONDS = 180;
const MAX_OUTPUT_BUFFER_SIZE = 1024 * 1024; // 1 MB
diff --git a/tests/checks/external-urls/StatusChecker/FetchWithTimeout.ts b/tests/checks/external-urls/StatusChecker/FetchWithTimeout.ts
index f4d480f3..f5144df9 100644
--- a/tests/checks/external-urls/StatusChecker/FetchWithTimeout.ts
+++ b/tests/checks/external-urls/StatusChecker/FetchWithTimeout.ts
@@ -1,5 +1,3 @@
-import fetch from 'cross-fetch';
-
export async function fetchWithTimeout(
url: string,
timeoutInMs: number,
diff --git a/tests/unit/application/collections/NoUnintentedInlining.spec.ts b/tests/unit/application/collections/NoUnintentedInlining.spec.ts
index ba402c7e..179ca633 100644
--- a/tests/unit/application/collections/NoUnintentedInlining.spec.ts
+++ b/tests/unit/application/collections/NoUnintentedInlining.spec.ts
@@ -1,5 +1,5 @@
-import { readdirSync, readFileSync } from 'fs';
-import { resolve, join, basename } from 'path';
+import { readdirSync, readFileSync } from 'node:fs';
+import { resolve, join, basename } from 'node:path';
import { describe, it, expect } from 'vitest';
import { formatAssertionMessage } from '@tests/shared/FormatAssertionMessage';
diff --git a/vite-config-helper.ts b/vite-config-helper.ts
index 7e765156..6a55452b 100644
--- a/vite-config-helper.ts
+++ b/vite-config-helper.ts
@@ -1,5 +1,5 @@
-import { resolve, dirname } from 'path';
-import { fileURLToPath } from 'url';
+import { resolve, dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
import { VITE_USER_DEFINED_ENVIRONMENT_KEYS } from './src/infrastructure/EnvironmentVariables/Vite/ViteEnvironmentKeys';
import tsconfigJson from './tsconfig.json' assert { type: 'json' };
import packageJson from './package.json' assert { type: 'json' };
diff --git a/vite.config.ts b/vite.config.ts
index c288de43..eea83a66 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,5 +1,5 @@
///
-import { resolve } from 'path';
+import { resolve } from 'node:path';
import { defineConfig, UserConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import legacy from '@vitejs/plugin-legacy';