vite-tsconfig-paths
Advanced tools
Comparing version 4.0.0-alpha.5 to 4.0.0-alpha.6
@@ -32,25 +32,12 @@ "use strict"; | ||
module.exports = __toCommonJS(src_exports); | ||
// src/path.ts | ||
var os = __toESM(require("os")); | ||
var path = __toESM(require("path")); | ||
var import_vite = require("vite"); | ||
var import_path = require("path"); | ||
var isWindows = os.platform() == "win32"; | ||
var resolve = isWindows ? (...paths) => (0, import_vite.normalizePath)(path.win32.resolve(...paths)) : path.posix.resolve; | ||
var isAbsolute = isWindows ? path.win32.isAbsolute : path.posix.isAbsolute; | ||
var join = path.posix.join; | ||
var relative = path.posix.relative; | ||
var basename = path.posix.basename; | ||
// src/index.ts | ||
var import_vite2 = require("vite"); | ||
var import_debug = __toESM(require("debug")); | ||
var fs = __toESM(require("fs")); | ||
var import_globrex = __toESM(require("globrex")); | ||
var import_path3 = require("path"); | ||
var tsconfck = __toESM(require("tsconfck")); | ||
var import_util = require("util"); | ||
var import_debug = __toESM(require("debug")); | ||
var fs = __toESM(require("fs")); | ||
var import_vite2 = require("vite"); | ||
// src/mappings.ts | ||
var import_path2 = require("path"); | ||
var import_path = require("path"); | ||
function resolvePathMappings(paths, base) { | ||
@@ -66,3 +53,3 @@ const sortedPatterns = Object.keys(paths).sort( | ||
pattern: new RegExp("^" + pattern + "$"), | ||
paths: relativePaths.map((relativePath) => (0, import_path2.resolve)(base, relativePath)) | ||
paths: relativePaths.map((relativePath) => (0, import_path.resolve)(base, relativePath)) | ||
}); | ||
@@ -80,7 +67,19 @@ } | ||
// src/path.ts | ||
var os = __toESM(require("os")); | ||
var path = __toESM(require("path")); | ||
var import_vite = require("vite"); | ||
var import_path2 = require("path"); | ||
var isWindows = os.platform() == "win32"; | ||
var resolve2 = isWindows ? (...paths) => (0, import_vite.normalizePath)(path.win32.resolve(...paths)) : path.posix.resolve; | ||
var isAbsolute = isWindows ? path.win32.isAbsolute : path.posix.isAbsolute; | ||
var join = path.posix.join; | ||
var relative = path.posix.relative; | ||
var basename = path.posix.basename; | ||
// src/index.ts | ||
var import_path4 = require("path"); | ||
var debug = (0, import_debug.default)("vite-tsconfig-paths"); | ||
var noMatch = [void 0, false]; | ||
var src_default = (opts = {}) => { | ||
let resolvers; | ||
let resolversByDir; | ||
return { | ||
@@ -90,8 +89,20 @@ name: "vite-tsconfig-paths", | ||
async configResolved(config) { | ||
const configRoot = opts.root || config.root; | ||
const workspaceRoot = opts.root || (0, import_vite2.searchForWorkspaceRoot)(config.root); | ||
debug("roots:", { configRoot, workspaceRoot }); | ||
let projectRoot = config.root; | ||
let workspaceRoot; | ||
let { root } = opts; | ||
if (root) { | ||
root = (0, import_path3.resolve)(projectRoot, root); | ||
} else { | ||
workspaceRoot = (0, import_vite2.searchForWorkspaceRoot)(projectRoot); | ||
} | ||
debug("options.root ==", root); | ||
debug("project root ==", projectRoot); | ||
debug("workspace root ==", workspaceRoot); | ||
if (root) { | ||
projectRoot = root; | ||
workspaceRoot = root; | ||
} | ||
const projects = await resolveProjectPaths( | ||
opts.projects, | ||
configRoot, | ||
projectRoot, | ||
workspaceRoot | ||
@@ -123,3 +134,3 @@ ); | ||
); | ||
resolvers = []; | ||
resolversByDir = {}; | ||
parsedProjects.forEach((project) => { | ||
@@ -133,2 +144,4 @@ if (project.referenced) { | ||
if (resolver) { | ||
const projectDir = (0, import_path2.dirname)(project.tsconfigFile); | ||
const resolvers = resolversByDir[projectDir] || (resolversByDir[projectDir] = []); | ||
resolvers.push(resolver); | ||
@@ -145,8 +158,24 @@ } | ||
}; | ||
for (const resolve4 of resolvers) { | ||
const resolved = await resolve4(viteResolve, id, importer); | ||
if (resolved) { | ||
return resolved; | ||
let prevProjectDir; | ||
let projectDir = (0, import_path2.dirname)(importer); | ||
loop: | ||
while (projectDir && projectDir != prevProjectDir) { | ||
const resolvers = resolversByDir[projectDir]; | ||
if (resolvers) | ||
for (const resolve4 of resolvers) { | ||
const [resolved, matched] = await resolve4( | ||
viteResolve, | ||
id, | ||
importer | ||
); | ||
if (resolved) { | ||
return resolved; | ||
} | ||
if (matched) { | ||
break loop; | ||
} | ||
} | ||
prevProjectDir = projectDir; | ||
projectDir = (0, import_path2.dirname)(prevProjectDir); | ||
} | ||
} | ||
} | ||
@@ -158,3 +187,3 @@ } | ||
const configPath = project.tsconfigFile; | ||
const configDir = (0, import_path.dirname)(configPath); | ||
const configDir = (0, import_path2.dirname)(configPath); | ||
const config = project.tsconfig; | ||
@@ -173,3 +202,3 @@ const options = config.compilerOptions; | ||
paths, | ||
(_a = options.baseUrl) != null ? _a : (0, import_path.dirname)(configPath) | ||
(_a = options.baseUrl) != null ? _a : (0, import_path2.dirname)(configPath) | ||
); | ||
@@ -219,3 +248,3 @@ const resolveWithPaths = async (viteResolve, id, importer) => { | ||
if (id.includes("\0")) { | ||
return; | ||
return noMatch; | ||
} | ||
@@ -225,7 +254,7 @@ importer = (0, import_vite2.normalizePath)(importer); | ||
if (!importerExtRE.test(importerFile)) { | ||
return; | ||
return noMatch; | ||
} | ||
const relativeImporterFile = relative(configDir, importerFile); | ||
if (!isIncludedRelative(relativeImporterFile)) { | ||
return; | ||
return noMatch; | ||
} | ||
@@ -249,3 +278,3 @@ const suffix = (_a2 = /\?.+$/.exec(id)) == null ? void 0 : _a2[0]; | ||
} | ||
return path2 && suffix ? path2 + suffix : path2; | ||
return [path2 && suffix ? path2 + suffix : path2, true]; | ||
}; | ||
@@ -299,3 +328,3 @@ } | ||
} | ||
function resolveProjectPaths(projects, configRoot, workspaceRoot) { | ||
function resolveProjectPaths(projects, projectRoot, workspaceRoot) { | ||
if (projects) { | ||
@@ -306,3 +335,3 @@ return projects.map((file) => { | ||
} | ||
return (0, import_path4.resolve)(configRoot, file); | ||
return (0, import_path3.resolve)(projectRoot, file); | ||
}); | ||
@@ -309,0 +338,0 @@ } |
{ | ||
"name": "vite-tsconfig-paths", | ||
"version": "4.0.0-alpha.5", | ||
"version": "4.0.0-alpha.6", | ||
"description": "Vite resolver for TypeScript compilerOptions.paths", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
103
src/index.ts
@@ -1,15 +0,17 @@ | ||
import { basename, dirname, isAbsolute, join, relative } from './path' | ||
import { searchForWorkspaceRoot, normalizePath, Plugin } from 'vite' | ||
import type { CompilerOptions } from 'typescript' | ||
import _debug from 'debug' | ||
import * as fs from 'fs' | ||
import globRex from 'globrex' | ||
import { resolve } from 'path' | ||
import * as tsconfck from 'tsconfck' | ||
import type { CompilerOptions } from 'typescript' | ||
import { inspect } from 'util' | ||
import { normalizePath, Plugin, searchForWorkspaceRoot } from 'vite' | ||
import { resolvePathMappings } from './mappings' | ||
import { basename, dirname, isAbsolute, join, relative } from './path' | ||
import { PluginOptions } from './types' | ||
import _debug from 'debug' | ||
import * as fs from 'fs' | ||
import { resolvePathMappings } from './mappings' | ||
import { resolve } from 'path' | ||
const debug = _debug('vite-tsconfig-paths') | ||
const noMatch = [undefined, false] as [undefined, false] | ||
type ViteResolve = (id: string, importer: string) => Promise<string | undefined> | ||
@@ -21,3 +23,3 @@ | ||
importer: string | ||
) => Promise<string | undefined> | ||
) => Promise<[resolved: string | undefined, matched: boolean]> | ||
@@ -27,3 +29,3 @@ export type { PluginOptions } | ||
export default (opts: PluginOptions = {}): Plugin => { | ||
let resolvers: Resolver[] | ||
let resolversByDir: Record<string, Resolver[]> | ||
@@ -34,10 +36,25 @@ return { | ||
async configResolved(config) { | ||
const configRoot = opts.root || config.root | ||
const workspaceRoot = opts.root || searchForWorkspaceRoot(config.root) | ||
let projectRoot = config.root | ||
let workspaceRoot!: string | ||
debug('roots:', { configRoot, workspaceRoot }) | ||
let { root } = opts | ||
if (root) { | ||
root = resolve(projectRoot, root) | ||
} else { | ||
workspaceRoot = searchForWorkspaceRoot(projectRoot) | ||
} | ||
debug('options.root ==', root) | ||
debug('project root ==', projectRoot) | ||
debug('workspace root ==', workspaceRoot) | ||
// The "root" option overrides both of these. | ||
if (root) { | ||
projectRoot = root | ||
workspaceRoot = root | ||
} | ||
const projects = await resolveProjectPaths( | ||
opts.projects, | ||
configRoot, | ||
projectRoot, | ||
workspaceRoot | ||
@@ -75,3 +92,3 @@ ) | ||
resolvers = [] | ||
resolversByDir = {} | ||
parsedProjects.forEach((project) => { | ||
@@ -87,2 +104,4 @@ // Don't create a resolver for projects with a references array. | ||
if (resolver) { | ||
const projectDir = dirname(project.tsconfigFile) | ||
const resolvers = (resolversByDir[projectDir] ||= []) | ||
resolvers.push(resolver) | ||
@@ -98,7 +117,25 @@ } | ||
for (const resolve of resolvers) { | ||
const resolved = await resolve(viteResolve, id, importer) | ||
if (resolved) { | ||
return resolved | ||
} | ||
let prevProjectDir: string | undefined | ||
let projectDir = dirname(importer) | ||
// Find the nearest directory with a matching tsconfig file. | ||
loop: while (projectDir && projectDir != prevProjectDir) { | ||
const resolvers = resolversByDir[projectDir] | ||
if (resolvers) | ||
for (const resolve of resolvers) { | ||
const [resolved, matched] = await resolve( | ||
viteResolve, | ||
id, | ||
importer | ||
) | ||
if (resolved) { | ||
return resolved | ||
} | ||
if (matched) { | ||
// Once a matching resolver is found, stop looking. | ||
break loop | ||
} | ||
} | ||
prevProjectDir = projectDir | ||
projectDir = dirname(prevProjectDir) | ||
} | ||
@@ -128,7 +165,13 @@ } | ||
const resolveWithBaseUrl: Resolver | undefined = baseUrl | ||
type InternalResolver = ( | ||
viteResolve: ViteResolve, | ||
id: string, | ||
importer: string | ||
) => Promise<string | undefined> | ||
const resolveWithBaseUrl: InternalResolver | undefined = baseUrl | ||
? (viteResolve, id, importer) => viteResolve(join(baseUrl, id), importer) | ||
: undefined | ||
let resolveId: Resolver | ||
let resolveId: InternalResolver | ||
if (paths) { | ||
@@ -139,3 +182,7 @@ const pathMappings = resolvePathMappings( | ||
) | ||
const resolveWithPaths: Resolver = async (viteResolve, id, importer) => { | ||
const resolveWithPaths: InternalResolver = async ( | ||
viteResolve, | ||
id, | ||
importer | ||
) => { | ||
for (const mapping of pathMappings) { | ||
@@ -198,3 +245,3 @@ const match = id.match(mapping.pattern) | ||
if (id.includes('\0')) { | ||
return | ||
return noMatch | ||
} | ||
@@ -207,3 +254,3 @@ | ||
if (!importerExtRE.test(importerFile)) { | ||
return | ||
return noMatch | ||
} | ||
@@ -214,3 +261,3 @@ | ||
if (!isIncludedRelative(relativeImporterFile)) { | ||
return | ||
return noMatch | ||
} | ||
@@ -238,3 +285,3 @@ | ||
} | ||
return path && suffix ? path + suffix : path | ||
return [path && suffix ? path + suffix : path, true] | ||
} | ||
@@ -305,3 +352,3 @@ } | ||
projects: string[] | undefined, | ||
configRoot: string, | ||
projectRoot: string, | ||
workspaceRoot: string | ||
@@ -314,3 +361,3 @@ ) { | ||
} | ||
return resolve(configRoot, file) | ||
return resolve(projectRoot, file) | ||
}) | ||
@@ -317,0 +364,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
82093
1102