From 689339e5b83e752c129f30dde21cdc2cadadb37b Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 10:00:40 +0300 Subject: [PATCH 1/6] fix: use "node:" prefix in Vitest imports --- packages/vite-node/rollup.config.js | 16 ++++++++++------ packages/vite-node/src/client.ts | 9 ++++----- packages/vite-node/src/debug.ts | 2 +- packages/vite-node/src/externalize.ts | 2 +- packages/vite-node/src/hmr/emitter.ts | 2 +- packages/vite-node/src/server.ts | 2 +- packages/vite-node/src/utils.ts | 7 ++++--- packages/vitest/rollup.config.js | 9 --------- packages/vitest/src/constants.ts | 2 +- packages/vitest/src/utils/index.ts | 3 +-- 10 files changed, 24 insertions(+), 30 deletions(-) diff --git a/packages/vite-node/rollup.config.js b/packages/vite-node/rollup.config.js index 37c8e2ad8d0f..130a79504cda 100644 --- a/packages/vite-node/rollup.config.js +++ b/packages/vite-node/rollup.config.js @@ -31,11 +31,6 @@ const external = [ ] const plugins = [ - alias({ - entries: [ - { find: /^node:(.+)$/, replacement: '$1' }, - ], - }), resolve({ preferBuiltins: true, }), @@ -68,7 +63,16 @@ export default defineConfig([ chunkFileNames: 'chunk-[name].cjs', }, external, - plugins, + plugins: [ + alias({ + entries: [ + // cjs in Node 14 doesn't support node: prefix + // can be dropped, when we drop support for Node 14 + { find: /^node:(.+)$/, replacement: '$1' }, + ], + }), + ...plugins, + ], onwarn, }, { diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 24a314c6da2e..2e6d951de92a 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -1,9 +1,8 @@ -import { createRequire } from 'module' +import { createRequire } from 'node:module' // we need native dirname, because windows __dirname has \\ -// eslint-disable-next-line no-restricted-imports -import { dirname } from 'path' -import { fileURLToPath, pathToFileURL } from 'url' -import vm from 'vm' +import { dirname } from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' +import vm from 'node:vm' import { resolve } from 'pathe' import createDebug from 'debug' import { VALID_ID_PREFIX, cleanUrl, isInternalRequest, isPrimitive, normalizeModuleId, normalizeRequestId, slash, toFilePath } from './utils' diff --git a/packages/vite-node/src/debug.ts b/packages/vite-node/src/debug.ts index 7d797f901333..15741369135e 100644 --- a/packages/vite-node/src/debug.ts +++ b/packages/vite-node/src/debug.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { existsSync, promises as fs } from 'fs' +import { existsSync, promises as fs } from 'node:fs' import { join, resolve } from 'pathe' import type { TransformResult } from 'vite' import c from 'picocolors' diff --git a/packages/vite-node/src/externalize.ts b/packages/vite-node/src/externalize.ts index b5331e3595e4..c6f5007bfaed 100644 --- a/packages/vite-node/src/externalize.ts +++ b/packages/vite-node/src/externalize.ts @@ -1,4 +1,4 @@ -import { existsSync } from 'fs' +import { existsSync } from 'node:fs' import { isNodeBuiltin, isValidNodeImport } from 'mlly' import type { DepsHandlingOptions } from './types' import { slash } from './utils' diff --git a/packages/vite-node/src/hmr/emitter.ts b/packages/vite-node/src/hmr/emitter.ts index 02904391e25d..1faa87fdedfb 100644 --- a/packages/vite-node/src/hmr/emitter.ts +++ b/packages/vite-node/src/hmr/emitter.ts @@ -1,4 +1,4 @@ -import { EventEmitter } from 'events' +import { EventEmitter } from 'node:events' import type { HMRPayload, Plugin } from 'vite' export type EventType = string | symbol diff --git a/packages/vite-node/src/server.ts b/packages/vite-node/src/server.ts index 61841738085f..f8e1c10d42fe 100644 --- a/packages/vite-node/src/server.ts +++ b/packages/vite-node/src/server.ts @@ -1,4 +1,4 @@ -import { performance } from 'perf_hooks' +import { performance } from 'node:perf_hooks' import { resolve } from 'pathe' import type { TransformResult, ViteDevServer } from 'vite' import createDebug from 'debug' diff --git a/packages/vite-node/src/utils.ts b/packages/vite-node/src/utils.ts index b4d0f77c68df..8ab153674cd9 100644 --- a/packages/vite-node/src/utils.ts +++ b/packages/vite-node/src/utils.ts @@ -1,5 +1,5 @@ -import { fileURLToPath, pathToFileURL } from 'url' -import { existsSync } from 'fs' +import { fileURLToPath, pathToFileURL } from 'node:url' +import { existsSync } from 'node:fs' import { resolve } from 'pathe' import type { Arrayable, Nullable } from './types' @@ -23,7 +23,7 @@ export function normalizeRequestId(id: string, base?: string): string { .replace(/^\/@id\/__x00__/, '\0') // virtual modules start with `\0` .replace(/^\/@id\//, '') .replace(/^__vite-browser-external:/, '') - .replace(/^(node|file):/, '') + .replace(/^file:/, '') .replace(/^\/+/, '/') // remove duplicate leading slashes .replace(/\?v=\w+/, '?') // remove ?v= query .replace(/&v=\w+/, '') // remove &v= query @@ -50,6 +50,7 @@ export function normalizeModuleId(id: string) { .replace(/\\/g, '/') .replace(/^\/@fs\//, isWindows ? '' : '/') .replace(/^file:\//, '/') + .replace(/^node:/, '') .replace(/^\/+/, '/') } diff --git a/packages/vitest/rollup.config.js b/packages/vitest/rollup.config.js index a7d1e99a3885..934abbd9abb7 100644 --- a/packages/vitest/rollup.config.js +++ b/packages/vitest/rollup.config.js @@ -6,7 +6,6 @@ import dts from 'rollup-plugin-dts' import nodeResolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' import json from '@rollup/plugin-json' -import alias from '@rollup/plugin-alias' import license from 'rollup-plugin-license' import c from 'picocolors' import fg from 'fast-glob' @@ -49,14 +48,6 @@ const external = [ ] const plugins = [ - alias({ - entries: [ - { find: /^node:(.+)$/, replacement: '$1' }, - { find: 'vite-node/server', replacement: resolve(__dirname, '../vite-node/src/server.ts') }, - { find: 'vite-node/client', replacement: resolve(__dirname, '../vite-node/src/client.ts') }, - { find: 'vite-node/utils', replacement: resolve(__dirname, '../vite-node/src/utils.ts') }, - ], - }), nodeResolve({ preferBuiltins: true, }), diff --git a/packages/vitest/src/constants.ts b/packages/vitest/src/constants.ts index 548c8880eb86..5727be5cb674 100644 --- a/packages/vitest/src/constants.ts +++ b/packages/vitest/src/constants.ts @@ -1,4 +1,4 @@ -import url from 'url' +import url from 'node:url' import { resolve } from 'pathe' import { isNode } from './utils/env' diff --git a/packages/vitest/src/utils/index.ts b/packages/vitest/src/utils/index.ts index 21e03df1fe63..21f3d40b7889 100644 --- a/packages/vitest/src/utils/index.ts +++ b/packages/vitest/src/utils/index.ts @@ -1,5 +1,4 @@ -// eslint-disable-next-line no-restricted-imports -import { relative as relativeBrowser } from 'path' +import { relative as relativeBrowser } from 'node:path' import c from 'picocolors' import { isPackageExists } from 'local-pkg' import { relative as relativeNode } from 'pathe' From 29bd260fbbc2e43797830844e94cd766936199f2 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 10:05:16 +0300 Subject: [PATCH 2/6] chore: add test for prefix --- packages/vite-node/rollup.config.js | 4 ++-- pnpm-lock.yaml | 2 ++ test/base/package.json | 1 + test/base/test/node-prefix.spec.ts | 12 ++++++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/base/test/node-prefix.spec.ts diff --git a/packages/vite-node/rollup.config.js b/packages/vite-node/rollup.config.js index 130a79504cda..71aceed94955 100644 --- a/packages/vite-node/rollup.config.js +++ b/packages/vite-node/rollup.config.js @@ -26,8 +26,8 @@ const external = [ 'pathe', 'birpc', 'vite', - 'url', - 'events', + 'node:url', + 'node:events', ] const plugins = [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc05a88a9f98..66494e3aa1f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -927,8 +927,10 @@ importers: test/base: specifiers: + url: ^0.11.0 vitest: workspace:* devDependencies: + url: 0.11.0 vitest: link:../../packages/vitest test/benchmark: diff --git a/test/base/package.json b/test/base/package.json index c0eb91451bb6..d739264e19e2 100644 --- a/test/base/package.json +++ b/test/base/package.json @@ -6,6 +6,7 @@ "coverage": "vitest run --coverage" }, "devDependencies": { + "url": "^0.11.0", "vitest": "workspace:*" } } diff --git a/test/base/test/node-prefix.spec.ts b/test/base/test/node-prefix.spec.ts new file mode 100644 index 000000000000..b2b1e700c1c3 --- /dev/null +++ b/test/base/test/node-prefix.spec.ts @@ -0,0 +1,12 @@ +import packageUrl from 'url' +import nodeUrl from 'node:url' +import { expect, it } from 'vitest' + +it('vitest respects node prefix', () => { + expect(packageUrl).not.toHaveProperty('URL') + expect(packageUrl).not.toHaveProperty('URLSearchParams') + expect(packageUrl).not.toHaveProperty('fileURLToPath') + expect(nodeUrl).toHaveProperty('URL') + expect(nodeUrl).toHaveProperty('URLSearchParams') + expect(nodeUrl).toHaveProperty('fileURLToPath') +}) From 5dc24b3b470067c04c448165514ef1813f051c11 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 10:19:36 +0300 Subject: [PATCH 3/6] chore: cleanup --- packages/vite-node/src/client.ts | 6 +++++- packages/vitest/src/runtime/execute.ts | 11 +++++++++++ pnpm-lock.yaml | 4 ++-- test/base/package.json | 1 - test/core/package.json | 1 + .../test/node-protocol-jsdom.spec.ts} | 7 ++++++- test/core/test/node-protocol-node.spec.ts | 15 +++++++++++++++ 7 files changed, 40 insertions(+), 5 deletions(-) rename test/{base/test/node-prefix.spec.ts => core/test/node-protocol-jsdom.spec.ts} (57%) create mode 100644 test/core/test/node-protocol-node.spec.ts diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 2e6d951de92a..faaed13458fa 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -189,8 +189,12 @@ export class ViteNodeRunner { } } + shouldResolveId(id: string, _importee?: string) { + return !isInternalRequest(id) + } + async resolveUrl(id: string, importee?: string): Promise<[url: string, fsPath: string]> { - if (isInternalRequest(id)) + if (!this.shouldResolveId(id)) return [id, id] // we don't pass down importee here, because otherwise Vite doesn't resolve it correctly if (importee && id.startsWith(VALID_ID_PREFIX)) diff --git a/packages/vitest/src/runtime/execute.ts b/packages/vitest/src/runtime/execute.ts index cd358480fea6..523bb72b520a 100644 --- a/packages/vitest/src/runtime/execute.ts +++ b/packages/vitest/src/runtime/execute.ts @@ -1,6 +1,7 @@ import { ViteNodeRunner } from 'vite-node/client' import type { ViteNodeRunnerOptions } from 'vite-node' import { normalizePath } from 'vite' +import { isNodeBuiltin } from 'mlly' import type { MockMap } from '../types/mocker' import { getCurrentEnvironment, getWorkerState } from '../utils' import { VitestMocker } from './mocker' @@ -31,6 +32,16 @@ export class VitestRunner extends ViteNodeRunner { this.mocker = new VitestMocker(this) } + shouldResolveId(id: string, _importee?: string | undefined): boolean { + const shouldResolve = super.shouldResolveId(id, _importee) + if (!shouldResolve) + return false + const environment = getCurrentEnvironment() + // do not try and resolve node builtins in Node + // import('url') returns Node internal even, if 'url' package is installed + return environment === 'node' ? !isNodeBuiltin(id) : true + } + async resolveUrl(id: string, importee?: string) { if (importee && importee.startsWith('mock:')) importee = importee.slice(5) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66494e3aa1f5..336e170c7b17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -927,10 +927,8 @@ importers: test/base: specifiers: - url: ^0.11.0 vitest: workspace:* devDependencies: - url: 0.11.0 vitest: link:../../packages/vitest test/benchmark: @@ -978,9 +976,11 @@ importers: test/core: specifiers: tinyspy: ^1.0.2 + url: ^0.11.0 vitest: workspace:* devDependencies: tinyspy: 1.0.2 + url: 0.11.0 vitest: link:../../packages/vitest test/coverage-test: diff --git a/test/base/package.json b/test/base/package.json index d739264e19e2..c0eb91451bb6 100644 --- a/test/base/package.json +++ b/test/base/package.json @@ -6,7 +6,6 @@ "coverage": "vitest run --coverage" }, "devDependencies": { - "url": "^0.11.0", "vitest": "workspace:*" } } diff --git a/test/core/package.json b/test/core/package.json index a31e9517a9bc..58f30d382ef8 100644 --- a/test/core/package.json +++ b/test/core/package.json @@ -7,6 +7,7 @@ }, "devDependencies": { "tinyspy": "^1.0.2", + "url": "^0.11.0", "vitest": "workspace:*" } } diff --git a/test/base/test/node-prefix.spec.ts b/test/core/test/node-protocol-jsdom.spec.ts similarity index 57% rename from test/base/test/node-prefix.spec.ts rename to test/core/test/node-protocol-jsdom.spec.ts index b2b1e700c1c3..0c856c2c1f9a 100644 --- a/test/base/test/node-prefix.spec.ts +++ b/test/core/test/node-protocol-jsdom.spec.ts @@ -1,12 +1,17 @@ +// @vitest-environment jsdom + +// outdated url package, which Vite will resolve to, if "url" import is used import packageUrl from 'url' import nodeUrl from 'node:url' import { expect, it } from 'vitest' -it('vitest respects node prefix', () => { +it('vitest resolves both url to internal URL module in Node environment', () => { expect(packageUrl).not.toHaveProperty('URL') expect(packageUrl).not.toHaveProperty('URLSearchParams') expect(packageUrl).not.toHaveProperty('fileURLToPath') expect(nodeUrl).toHaveProperty('URL') expect(nodeUrl).toHaveProperty('URLSearchParams') expect(nodeUrl).toHaveProperty('fileURLToPath') + // eslint-disable-next-line n/no-deprecated-api + expect(packageUrl.parse !== nodeUrl.parse).toBe(true) }) diff --git a/test/core/test/node-protocol-node.spec.ts b/test/core/test/node-protocol-node.spec.ts new file mode 100644 index 000000000000..fb074331be15 --- /dev/null +++ b/test/core/test/node-protocol-node.spec.ts @@ -0,0 +1,15 @@ +// @vitest-environment node + +import packageUrl from 'url' +import nodeUrl from 'node:url' +import { expect, it } from 'vitest' + +it('vitest resolves both url to internal URL module in Node environment', () => { + expect(packageUrl).toHaveProperty('URL') + expect(packageUrl).toHaveProperty('URLSearchParams') + expect(packageUrl).toHaveProperty('fileURLToPath') + expect(nodeUrl).toHaveProperty('URL') + expect(nodeUrl).toHaveProperty('URLSearchParams') + expect(nodeUrl).toHaveProperty('fileURLToPath') + expect(packageUrl.URL === nodeUrl.URL).toBe(true) +}) From c6581a7dc4625cfed0ee41cfd72a1a1fbb782b82 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 10:28:14 +0300 Subject: [PATCH 4/6] chore: use more node protocol --- packages/browser/rollup.config.js | 1 + packages/ui/rollup.config.js | 1 + packages/vitest/rollup.config.js | 2 ++ packages/vitest/src/api/setup.ts | 2 +- packages/vitest/src/integrations/env/node.ts | 2 +- packages/vitest/src/integrations/snapshot/port/state.ts | 2 +- packages/vitest/src/integrations/snapshot/port/utils.ts | 2 +- packages/vitest/src/node/cache/files.ts | 4 ++-- packages/vitest/src/node/cache/index.ts | 2 +- packages/vitest/src/node/cache/results.ts | 2 +- packages/vitest/src/node/core.ts | 2 +- packages/vitest/src/node/pool.ts | 6 +++--- packages/vitest/src/node/reporters/benchmark/json.ts | 2 +- packages/vitest/src/node/reporters/json.ts | 2 +- packages/vitest/src/node/reporters/junit.ts | 4 ++-- packages/vitest/src/runtime/entry.ts | 2 +- packages/vitest/src/runtime/loader.ts | 4 ++-- packages/vitest/src/runtime/mocker.ts | 2 +- packages/vitest/src/runtime/setup.ts | 4 ++-- packages/vitest/src/typecheck/typechecker.ts | 2 +- packages/vitest/src/types/worker.ts | 2 +- packages/web-worker/src/shared-worker.ts | 2 +- packages/ws-client/rollup.config.js | 2 ++ scripts/update-contributors.ts | 2 +- test/benchmark/test.mjs | 2 +- 25 files changed, 33 insertions(+), 27 deletions(-) diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js index 6431ca670586..0ff2d7bbe6d5 100644 --- a/packages/browser/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -10,6 +10,7 @@ const external = [ ...Object.keys(pkg.dependencies), ...Object.keys(pkg.peerDependencies || {}), 'worker_threads', + 'node:worker_threads', ] const plugins = [ diff --git a/packages/ui/rollup.config.js b/packages/ui/rollup.config.js index d6c01b08196d..0b8e5bd3f584 100644 --- a/packages/ui/rollup.config.js +++ b/packages/ui/rollup.config.js @@ -12,6 +12,7 @@ const external = [ ...Object.keys(pkg.dependencies), ...Object.keys(pkg.peerDependencies || {}), 'worker_threads', + 'node:worker_threads', 'vitest/node', 'vitest', ] diff --git a/packages/vitest/rollup.config.js b/packages/vitest/rollup.config.js index 934abbd9abb7..9c1328766d64 100644 --- a/packages/vitest/rollup.config.js +++ b/packages/vitest/rollup.config.js @@ -40,6 +40,8 @@ const external = [ ...Object.keys(pkg.dependencies), ...Object.keys(pkg.peerDependencies), 'worker_threads', + 'node:worker_threads', + 'node:fs', 'inspector', 'vite-node/source-map', 'vite-node/client', diff --git a/packages/vitest/src/api/setup.ts b/packages/vitest/src/api/setup.ts index 772d8da06b00..d4c6408df886 100644 --- a/packages/vitest/src/api/setup.ts +++ b/packages/vitest/src/api/setup.ts @@ -1,4 +1,4 @@ -import { promises as fs } from 'fs' +import { promises as fs } from 'node:fs' import type { BirpcReturn } from 'birpc' import { createBirpc } from 'birpc' import { parse, stringify } from 'flatted' diff --git a/packages/vitest/src/integrations/env/node.ts b/packages/vitest/src/integrations/env/node.ts index dcbe3e632d7f..e984c343dc23 100644 --- a/packages/vitest/src/integrations/env/node.ts +++ b/packages/vitest/src/integrations/env/node.ts @@ -1,4 +1,4 @@ -import { Console } from 'console' +import { Console } from 'node:console' import type { Environment } from '../../types' export default ({ diff --git a/packages/vitest/src/integrations/snapshot/port/state.ts b/packages/vitest/src/integrations/snapshot/port/state.ts index 566d48830a84..a74563880f87 100644 --- a/packages/vitest/src/integrations/snapshot/port/state.ts +++ b/packages/vitest/src/integrations/snapshot/port/state.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import fs from 'fs' +import fs from 'node:fs' import type { OptionsReceived as PrettyFormatOptions } from 'pretty-format' import type { ParsedStack, SnapshotData, SnapshotMatchOptions, SnapshotResult, SnapshotStateOptions, SnapshotUpdateState } from '../../../types' import { slash } from '../../../utils' diff --git a/packages/vitest/src/integrations/snapshot/port/utils.ts b/packages/vitest/src/integrations/snapshot/port/utils.ts index 9d4ffca7ce08..598f1ea25031 100644 --- a/packages/vitest/src/integrations/snapshot/port/utils.ts +++ b/packages/vitest/src/integrations/snapshot/port/utils.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import fs from 'fs' +import fs from 'node:fs' import { dirname, join } from 'pathe' import naturalCompare from 'natural-compare' import type { OptionsReceived as PrettyFormatOptions } from 'pretty-format' diff --git a/packages/vitest/src/node/cache/files.ts b/packages/vitest/src/node/cache/files.ts index 264fe80d6256..e3495f3b296b 100644 --- a/packages/vitest/src/node/cache/files.ts +++ b/packages/vitest/src/node/cache/files.ts @@ -1,5 +1,5 @@ -import fs from 'fs' -import type { Stats } from 'fs' +import fs from 'node:fs' +import type { Stats } from 'node:fs' type FileStatsCache = Pick diff --git a/packages/vitest/src/node/cache/index.ts b/packages/vitest/src/node/cache/index.ts index c45b9d0a2900..b947aa346ffb 100644 --- a/packages/vitest/src/node/cache/index.ts +++ b/packages/vitest/src/node/cache/index.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import fs from 'node:fs' import { findUp } from 'find-up' import { resolve } from 'pathe' import { loadConfigFromFile } from 'vite' diff --git a/packages/vitest/src/node/cache/results.ts b/packages/vitest/src/node/cache/results.ts index d5b784989b87..3e9fb8ba3d84 100644 --- a/packages/vitest/src/node/cache/results.ts +++ b/packages/vitest/src/node/cache/results.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import fs from 'node:fs' import { dirname, resolve } from 'pathe' import type { File, ResolvedConfig } from '../../types' import { version } from '../../../package.json' diff --git a/packages/vitest/src/node/core.ts b/packages/vitest/src/node/core.ts index d2e6c88ff96e..2345783a6ac3 100644 --- a/packages/vitest/src/node/core.ts +++ b/packages/vitest/src/node/core.ts @@ -1,4 +1,4 @@ -import { existsSync, promises as fs } from 'fs' +import { existsSync, promises as fs } from 'node:fs' import type { ViteDevServer } from 'vite' import { normalizePath } from 'vite' import { relative, toNamespacedPath } from 'pathe' diff --git a/packages/vitest/src/node/pool.ts b/packages/vitest/src/node/pool.ts index baf0ba950b2d..457d65cac2c0 100644 --- a/packages/vitest/src/node/pool.ts +++ b/packages/vitest/src/node/pool.ts @@ -1,6 +1,6 @@ -import { MessageChannel } from 'worker_threads' -import _url from 'url' -import { cpus } from 'os' +import { MessageChannel } from 'node:worker_threads' +import _url from 'node:url' +import { cpus } from 'node:os' import { resolve } from 'pathe' import type { Options as TinypoolOptions } from 'tinypool' import { Tinypool } from 'tinypool' diff --git a/packages/vitest/src/node/reporters/benchmark/json.ts b/packages/vitest/src/node/reporters/benchmark/json.ts index 35eeaf0a0322..23bcb87d010f 100644 --- a/packages/vitest/src/node/reporters/benchmark/json.ts +++ b/packages/vitest/src/node/reporters/benchmark/json.ts @@ -1,4 +1,4 @@ -import { existsSync, promises as fs } from 'fs' +import { existsSync, promises as fs } from 'node:fs' import { dirname, resolve } from 'pathe' import type { Vitest } from '../../../node' import type { BenchTaskResult, File, Reporter } from '../../../types' diff --git a/packages/vitest/src/node/reporters/json.ts b/packages/vitest/src/node/reporters/json.ts index ba84ae1456c3..986556597861 100644 --- a/packages/vitest/src/node/reporters/json.ts +++ b/packages/vitest/src/node/reporters/json.ts @@ -1,4 +1,4 @@ -import { existsSync, promises as fs } from 'fs' +import { existsSync, promises as fs } from 'node:fs' import { dirname, resolve } from 'pathe' import type { Vitest } from '../../node' import type { File, Reporter, Suite, Task, TaskState } from '../../types' diff --git a/packages/vitest/src/node/reporters/junit.ts b/packages/vitest/src/node/reporters/junit.ts index c2fdb51d6630..666dcbce1ead 100644 --- a/packages/vitest/src/node/reporters/junit.ts +++ b/packages/vitest/src/node/reporters/junit.ts @@ -1,5 +1,5 @@ -import { existsSync, promises as fs } from 'fs' -import { hostname } from 'os' +import { existsSync, promises as fs } from 'node:fs' +import { hostname } from 'node:os' import { dirname, relative, resolve } from 'pathe' import type { Vitest } from '../../node' diff --git a/packages/vitest/src/runtime/entry.ts b/packages/vitest/src/runtime/entry.ts index a815718fe5a6..d6e4f072968c 100644 --- a/packages/vitest/src/runtime/entry.ts +++ b/packages/vitest/src/runtime/entry.ts @@ -1,4 +1,4 @@ -import { promises as fs } from 'fs' +import { promises as fs } from 'node:fs' import type { EnvironmentOptions, ResolvedConfig, VitestEnvironment } from '../types' import { getWorkerState, resetModules } from '../utils' import { vi } from '../integrations/vi' diff --git a/packages/vitest/src/runtime/loader.ts b/packages/vitest/src/runtime/loader.ts index 35103d208845..00f7f2a3bc34 100644 --- a/packages/vitest/src/runtime/loader.ts +++ b/packages/vitest/src/runtime/loader.ts @@ -1,5 +1,5 @@ -import { pathToFileURL } from 'url' -import { readFile } from 'fs/promises' +import { pathToFileURL } from 'node:url' +import { readFile } from 'node:fs/promises' import { hasCJSSyntax, isNodeBuiltin } from 'mlly' import { normalizeModuleId } from 'vite-node/utils' import { getWorkerState } from '../utils' diff --git a/packages/vitest/src/runtime/mocker.ts b/packages/vitest/src/runtime/mocker.ts index ac124cdb5a6a..0f3f9d4de8f4 100644 --- a/packages/vitest/src/runtime/mocker.ts +++ b/packages/vitest/src/runtime/mocker.ts @@ -1,4 +1,4 @@ -import { existsSync, readdirSync } from 'fs' +import { existsSync, readdirSync } from 'node:fs' import { isNodeBuiltin } from 'mlly' import { basename, dirname, extname, isAbsolute, join, resolve } from 'pathe' import c from 'picocolors' diff --git a/packages/vitest/src/runtime/setup.ts b/packages/vitest/src/runtime/setup.ts index 2497b62fb46b..c6d7b679f4e1 100644 --- a/packages/vitest/src/runtime/setup.ts +++ b/packages/vitest/src/runtime/setup.ts @@ -50,8 +50,8 @@ export async function setupConsoleLogSpy() { const timers = new Map() const unknownTestId = '__vitest__unknown_test__' - const { Writable } = await import('stream') - const { Console } = await import('console') + const { Writable } = await import('node:stream') + const { Console } = await import('node:console') // group sync console.log calls with macro task function schedule(taskId: string) { diff --git a/packages/vitest/src/typecheck/typechecker.ts b/packages/vitest/src/typecheck/typechecker.ts index 41a1ffa5aec6..a4f33b7cce4c 100644 --- a/packages/vitest/src/typecheck/typechecker.ts +++ b/packages/vitest/src/typecheck/typechecker.ts @@ -1,4 +1,4 @@ -import { rm } from 'fs/promises' +import { rm } from 'node:fs/promises' import type { ExecaChildProcess } from 'execa' import { execa } from 'execa' import { resolve } from 'pathe' diff --git a/packages/vitest/src/types/worker.ts b/packages/vitest/src/types/worker.ts index 4b4b984cf7cf..17a121d80da4 100644 --- a/packages/vitest/src/types/worker.ts +++ b/packages/vitest/src/types/worker.ts @@ -1,4 +1,4 @@ -import type { MessagePort } from 'worker_threads' +import type { MessagePort } from 'node:worker_threads' import type { FetchFunction, ModuleCacheMap, RawSourceMap, ViteNodeResolveId } from 'vite-node' import type { BirpcReturn } from 'birpc' import type { MockMap } from './mocker' diff --git a/packages/web-worker/src/shared-worker.ts b/packages/web-worker/src/shared-worker.ts index 33e4f96deb65..f90dbe917bc4 100644 --- a/packages/web-worker/src/shared-worker.ts +++ b/packages/web-worker/src/shared-worker.ts @@ -1,4 +1,4 @@ -import { MessageChannel, type MessagePort as NodeMessagePort } from 'worker_threads' +import { MessageChannel, type MessagePort as NodeMessagePort } from 'node:worker_threads' import type { InlineWorkerContext, Procedure } from './types' import { InlineWorkerRunner } from './runner' import { debug, getRunnerOptions } from './utils' diff --git a/packages/ws-client/rollup.config.js b/packages/ws-client/rollup.config.js index 44325f4bde85..545ba5266ba5 100644 --- a/packages/ws-client/rollup.config.js +++ b/packages/ws-client/rollup.config.js @@ -13,7 +13,9 @@ const external = [ 'ws', 'birpc', 'worker_threads', + 'node:worker_threads', 'fs', + 'node:fs', 'vitest', 'inspector', ] diff --git a/scripts/update-contributors.ts b/scripts/update-contributors.ts index 64be8aadd137..774ac8ce6ac3 100644 --- a/scripts/update-contributors.ts +++ b/scripts/update-contributors.ts @@ -1,4 +1,4 @@ -import { promises as fs } from 'fs' +import { promises as fs } from 'node:fs' import { $fetch } from 'ohmyfetch' interface Contributor { diff --git a/test/benchmark/test.mjs b/test/benchmark/test.mjs index 1e4740574877..95e0054d815f 100644 --- a/test/benchmark/test.mjs +++ b/test/benchmark/test.mjs @@ -1,4 +1,4 @@ -import { readFile } from 'fs/promises' +import { readFile } from 'node:fs/promises' import { execa } from 'execa' let error From 0c5772877e9b505b96a0db84c58dea47d9893d84 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 10:33:15 +0300 Subject: [PATCH 5/6] chore: cleanup --- packages/vite-node/src/client.ts | 3 ++- packages/vitest/src/runtime/execute.ts | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index faaed13458fa..c83d142b7df0 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -3,6 +3,7 @@ import { createRequire } from 'node:module' import { dirname } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' import vm from 'node:vm' +import { isNodeBuiltin } from 'mlly' import { resolve } from 'pathe' import createDebug from 'debug' import { VALID_ID_PREFIX, cleanUrl, isInternalRequest, isPrimitive, normalizeModuleId, normalizeRequestId, slash, toFilePath } from './utils' @@ -190,7 +191,7 @@ export class ViteNodeRunner { } shouldResolveId(id: string, _importee?: string) { - return !isInternalRequest(id) + return !isInternalRequest(id) && !isNodeBuiltin(id) } async resolveUrl(id: string, importee?: string): Promise<[url: string, fsPath: string]> { diff --git a/packages/vitest/src/runtime/execute.ts b/packages/vitest/src/runtime/execute.ts index 523bb72b520a..f08d2095f8c2 100644 --- a/packages/vitest/src/runtime/execute.ts +++ b/packages/vitest/src/runtime/execute.ts @@ -1,4 +1,5 @@ import { ViteNodeRunner } from 'vite-node/client' +import { isInternalRequest } from 'vite-node/utils' import type { ViteNodeRunnerOptions } from 'vite-node' import { normalizePath } from 'vite' import { isNodeBuiltin } from 'mlly' @@ -33,12 +34,11 @@ export class VitestRunner extends ViteNodeRunner { } shouldResolveId(id: string, _importee?: string | undefined): boolean { - const shouldResolve = super.shouldResolveId(id, _importee) - if (!shouldResolve) + if (isInternalRequest(id)) return false const environment = getCurrentEnvironment() // do not try and resolve node builtins in Node - // import('url') returns Node internal even, if 'url' package is installed + // import('url') returns Node internal even if 'url' package is installed return environment === 'node' ? !isNodeBuiltin(id) : true } From cb0672ca0c0000224d2d0a527d800b71dfeebc5c Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 20 Dec 2022 11:44:01 +0300 Subject: [PATCH 6/6] chore: cleanup --- test/core/test/node-protocol-jsdom.spec.ts | 3 ++- test/core/test/node-protocol-node.spec.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/core/test/node-protocol-jsdom.spec.ts b/test/core/test/node-protocol-jsdom.spec.ts index 0c856c2c1f9a..8ceea722cc47 100644 --- a/test/core/test/node-protocol-jsdom.spec.ts +++ b/test/core/test/node-protocol-jsdom.spec.ts @@ -1,11 +1,12 @@ // @vitest-environment jsdom // outdated url package, which Vite will resolve to, if "url" import is used +// this should help catch bugs in source code import packageUrl from 'url' import nodeUrl from 'node:url' import { expect, it } from 'vitest' -it('vitest resolves both url to internal URL module in Node environment', () => { +it('vitest resolves url to installed url package, but node:url to internal Node module', () => { expect(packageUrl).not.toHaveProperty('URL') expect(packageUrl).not.toHaveProperty('URLSearchParams') expect(packageUrl).not.toHaveProperty('fileURLToPath') diff --git a/test/core/test/node-protocol-node.spec.ts b/test/core/test/node-protocol-node.spec.ts index fb074331be15..4f583e475b04 100644 --- a/test/core/test/node-protocol-node.spec.ts +++ b/test/core/test/node-protocol-node.spec.ts @@ -4,7 +4,7 @@ import packageUrl from 'url' import nodeUrl from 'node:url' import { expect, it } from 'vitest' -it('vitest resolves both url to internal URL module in Node environment', () => { +it('vitest resolves both "url" and "node:url" to internal URL module in Node environment', () => { expect(packageUrl).toHaveProperty('URL') expect(packageUrl).toHaveProperty('URLSearchParams') expect(packageUrl).toHaveProperty('fileURLToPath')