@vitest/utils
Advanced tools
| export * from './dist/display.js' |
| export * from './dist/timers.js' |
@@ -155,3 +155,15 @@ const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//; | ||
| }; | ||
| const basename = function(p, extension) { | ||
| const segments = normalizeWindowsPath(p).split("/"); | ||
| let lastSegment = ""; | ||
| for (let i = segments.length - 1; i >= 0; i--) { | ||
| const val = segments[i]; | ||
| if (val) { | ||
| lastSegment = val; | ||
| break; | ||
| } | ||
| } | ||
| return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment; | ||
| }; | ||
| export { dirname as d, join as j, resolve as r }; | ||
| export { basename as b, dirname as d, join as j, resolve as r }; |
@@ -1,7 +0,3 @@ | ||
| declare function findNearestPackageData(basedir: string): { | ||
| type?: "module" | "commonjs"; | ||
| }; | ||
| declare function getCachedData<T>(cache: Map<string, T>, basedir: string, originalBasedir: string): NonNullable<T> | undefined; | ||
| declare function setCacheData<T>(cache: Map<string, T>, data: T, basedir: string, originalBasedir: string): void; | ||
| declare function lookupPackageScopeType(directory: string): "cjs" | "esm" | "none"; | ||
| export { findNearestPackageData, getCachedData, setCacheData }; | ||
| export { lookupPackageScopeType }; |
+35
-48
| import fs from 'node:fs'; | ||
| import { j as join, d as dirname } from './chunk-pathe.M-eThtNZ.js'; | ||
| import { b as basename, j as join, d as dirname } from './chunk-pathe.M-eThtNZ.js'; | ||
| const packageCache = new Map(); | ||
| function findNearestPackageData(basedir) { | ||
| const originalBasedir = basedir; | ||
| while (basedir) { | ||
| const cached = getCachedData(packageCache, basedir, originalBasedir); | ||
| const packageScopeTypeCache = new Map(); | ||
| // mirrors LOOKUP_PACKAGE_SCOPE from the ESM resolution algorithm: | ||
| // the lookup stops at the first package.json and never crosses | ||
| // the "node_modules" boundary, so typeless dependencies don't | ||
| // inherit the `type` field of the user's project | ||
| function lookupPackageScopeType(directory) { | ||
| const visited = []; | ||
| let result = "none"; | ||
| let current = directory; | ||
| while (current) { | ||
| const cached = packageScopeTypeCache.get(current); | ||
| if (cached) { | ||
| return cached; | ||
| result = cached; | ||
| break; | ||
| } | ||
| const pkgPath = join(basedir, "package.json"); | ||
| if (tryStatSync(pkgPath)?.isFile()) { | ||
| const pkgData = JSON.parse(stripBomTag(fs.readFileSync(pkgPath, "utf8"))); | ||
| if (packageCache) { | ||
| setCacheData(packageCache, pkgData, basedir, originalBasedir); | ||
| } | ||
| return pkgData; | ||
| if (basename(current) === "node_modules") { | ||
| break; | ||
| } | ||
| const nextBasedir = dirname(basedir); | ||
| if (nextBasedir === basedir) { | ||
| visited.push(current); | ||
| const packageJsonPath = join(current, "package.json"); | ||
| if (tryStatSync(packageJsonPath)?.isFile()) { | ||
| try { | ||
| const packageJson = JSON.parse(stripBomTag(fs.readFileSync(packageJsonPath, "utf8"))); | ||
| if (packageJson.type === "module") { | ||
| result = "esm"; | ||
| } else if (packageJson.type === "commonjs") { | ||
| result = "cjs"; | ||
| } | ||
| } catch {} | ||
| break; | ||
| } | ||
| basedir = nextBasedir; | ||
| const parent = dirname(current); | ||
| if (parent === current) { | ||
| break; | ||
| } | ||
| current = parent; | ||
| } | ||
| return {}; | ||
| visited.forEach((dir) => packageScopeTypeCache.set(dir, result)); | ||
| return result; | ||
| } | ||
@@ -40,32 +56,3 @@ function stripBomTag(content) { | ||
| } | ||
| function getCachedData(cache, basedir, originalBasedir) { | ||
| const pkgData = cache.get(getFnpdCacheKey(basedir)); | ||
| if (pkgData) { | ||
| traverseBetweenDirs(originalBasedir, basedir, (dir) => { | ||
| cache.set(getFnpdCacheKey(dir), pkgData); | ||
| }); | ||
| return pkgData; | ||
| } | ||
| } | ||
| function setCacheData(cache, data, basedir, originalBasedir) { | ||
| cache.set(getFnpdCacheKey(basedir), data); | ||
| traverseBetweenDirs(originalBasedir, basedir, (dir) => { | ||
| cache.set(getFnpdCacheKey(dir), data); | ||
| }); | ||
| } | ||
| function getFnpdCacheKey(basedir) { | ||
| return `fnpd_${basedir}`; | ||
| } | ||
| /** | ||
| * Traverse between `longerDir` (inclusive) and `shorterDir` (exclusive) and call `cb` for each dir. | ||
| * @param longerDir Longer dir path, e.g. `/User/foo/bar/baz` | ||
| * @param shorterDir Shorter dir path, e.g. `/User/foo` | ||
| */ | ||
| function traverseBetweenDirs(longerDir, shorterDir, cb) { | ||
| while (longerDir !== shorterDir) { | ||
| cb(longerDir); | ||
| longerDir = dirname(longerDir); | ||
| } | ||
| } | ||
| export { findNearestPackageData, getCachedData, setCacheData }; | ||
| export { lookupPackageScopeType }; |
+10
-3
@@ -239,3 +239,4 @@ import { isPrimitive, notNullish } from './helpers.js'; | ||
| "/@id/__x00__vitest/browser", | ||
| /\/deps\/vitest_/ | ||
| /\/deps\/vitest_/, | ||
| "/deps/vitest.js" | ||
| ]; | ||
@@ -399,3 +400,9 @@ const NOW_LENGTH = Date.now().toString().length; | ||
| const traceMap = new DecodedMap(map, stack.file); | ||
| const position = getOriginalPosition(traceMap, stack); | ||
| if (stack.line <= 0 || stack.column <= 0) { | ||
| return stack; | ||
| } | ||
| const position = getOriginalPosition(traceMap, { | ||
| line: stack.line, | ||
| column: stack.column - 1 | ||
| }); | ||
| if (!position) { | ||
@@ -415,3 +422,3 @@ return stack; | ||
| line, | ||
| column, | ||
| column: column + 1, | ||
| file, | ||
@@ -418,0 +425,0 @@ method: name || stack.method |
+15
-3
| { | ||
| "name": "@vitest/utils", | ||
| "type": "module", | ||
| "version": "5.0.0-beta.6", | ||
| "version": "5.0.0-beta.7", | ||
| "description": "Shared Vitest utility functions", | ||
@@ -20,2 +20,3 @@ "license": "MIT", | ||
| ".": { | ||
| "__vitest_source__": "./src/index.ts", | ||
| "types": "./dist/index.d.ts", | ||
@@ -25,2 +26,3 @@ "default": "./dist/index.js" | ||
| "./diff": { | ||
| "__vitest_source__": "./src/diff/index.ts", | ||
| "types": "./dist/diff.d.ts", | ||
@@ -30,2 +32,3 @@ "default": "./dist/diff.js" | ||
| "./resolver": { | ||
| "__vitest_source__": "./src/resolver.ts", | ||
| "types": "./dist/resolver.d.ts", | ||
@@ -35,2 +38,3 @@ "default": "./dist/resolver.js" | ||
| "./error": { | ||
| "__vitest_source__": "./src/error.ts", | ||
| "types": "./dist/error.d.ts", | ||
@@ -40,2 +44,3 @@ "default": "./dist/error.js" | ||
| "./helpers": { | ||
| "__vitest_source__": "./src/helpers.ts", | ||
| "types": "./dist/helpers.d.ts", | ||
@@ -45,2 +50,3 @@ "default": "./dist/helpers.js" | ||
| "./offset": { | ||
| "__vitest_source__": "./src/offset.ts", | ||
| "types": "./dist/offset.d.ts", | ||
@@ -50,2 +56,3 @@ "default": "./dist/offset.js" | ||
| "./constants": { | ||
| "__vitest_source__": "./src/constants.ts", | ||
| "types": "./dist/constants.d.ts", | ||
@@ -55,2 +62,3 @@ "default": "./dist/constants.js" | ||
| "./timers": { | ||
| "__vitest_source__": "./src/timers.ts", | ||
| "types": "./dist/timers.d.ts", | ||
@@ -60,2 +68,3 @@ "default": "./dist/timers.js" | ||
| "./display": { | ||
| "__vitest_source__": "./src/display.ts", | ||
| "types": "./dist/display.d.ts", | ||
@@ -65,2 +74,3 @@ "default": "./dist/display.js" | ||
| "./source-map": { | ||
| "__vitest_source__": "./src/source-map.ts", | ||
| "types": "./dist/source-map.d.ts", | ||
@@ -70,2 +80,3 @@ "default": "./dist/source-map.js" | ||
| "./source-map/node": { | ||
| "__vitest_source__": "./src/source-map/node.ts", | ||
| "types": "./dist/source-map/node.d.ts", | ||
@@ -75,6 +86,7 @@ "default": "./dist/source-map/node.js" | ||
| "./serialize": { | ||
| "__vitest_source__": "./src/serialize.ts", | ||
| "types": "./dist/serialize.d.ts", | ||
| "default": "./dist/serialize.js" | ||
| }, | ||
| "./*": "./*" | ||
| "./package.json": "./package.json" | ||
| }, | ||
@@ -101,3 +113,3 @@ "main": "./dist/index.js", | ||
| "tinyrainbow": "^3.1.0", | ||
| "@vitest/pretty-format": "5.0.0-beta.6" | ||
| "@vitest/pretty-format": "5.0.0-beta.7" | ||
| }, | ||
@@ -104,0 +116,0 @@ "devDependencies": { |
149063
0.34%36
5.88%4143
0.1%+ Added
- Removed