Skip to content

Commit ca4bf11

Browse files
refactor(cjs): resolver organized in multiple files
1 parent 3df00f4 commit ca4bf11

11 files changed

+378
-357
lines changed

src/cjs/api/module-resolve-filename.ts

-278
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import Module from 'node:module';
2+
import { fileURLToPath } from 'node:url';
3+
import {
4+
isFilePath,
5+
fileUrlPrefix,
6+
tsExtensionsPattern,
7+
nodeModulesPath,
8+
} from '../../../utils/path-utils.js';
9+
import { tsconfigPathsMatcher } from '../../../utils/tsconfig.js';
10+
import type { ResolveFilename, SimpleResolve, LoaderState } from '../types.js';
11+
import { createImplicitResolver } from './resolve-implicit-extensions.js';
12+
import { interopCjsExports } from './interop-cjs-exports.js';
13+
import { createTsExtensionResolver } from './resolve-ts-extensions.js';
14+
import { preserveQuery } from './preserve-query.js';
15+
16+
const resolveTsPaths = (
17+
request: string,
18+
parent: Module.Parent | undefined,
19+
nextResolve: SimpleResolve,
20+
) => {
21+
// Support file protocol
22+
if (request.startsWith(fileUrlPrefix)) {
23+
request = fileURLToPath(request);
24+
}
25+
26+
// Resolve TS path alias
27+
if (
28+
tsconfigPathsMatcher
29+
30+
// bare specifier
31+
&& !isFilePath(request)
32+
33+
// Dependency paths should not be resolved using tsconfig.json
34+
&& !parent?.filename?.includes(nodeModulesPath)
35+
) {
36+
const possiblePaths = tsconfigPathsMatcher(request);
37+
for (const possiblePath of possiblePaths) {
38+
try {
39+
return nextResolve(possiblePath);
40+
} catch {}
41+
}
42+
}
43+
44+
return nextResolve(request);
45+
};
46+
47+
export const createResolveFilename = (
48+
state: LoaderState,
49+
nextResolve: ResolveFilename,
50+
namespace?: string,
51+
): ResolveFilename => (
52+
request,
53+
parent,
54+
...restOfArgs
55+
) => {
56+
if (state.enabled === false) {
57+
return nextResolve(request, parent, ...restOfArgs);
58+
}
59+
60+
request = interopCjsExports(request);
61+
62+
const [
63+
cleanRequest,
64+
searchParams,
65+
appendQuery,
66+
] = preserveQuery(request, parent);
67+
68+
// If request namespace doesnt match the namespace, ignore
69+
if ((searchParams.get('namespace') ?? undefined) !== namespace) {
70+
return nextResolve(request, parent, ...restOfArgs);
71+
}
72+
73+
let nextResolveSimple: SimpleResolve = request_ => nextResolve(
74+
request_,
75+
parent,
76+
...restOfArgs,
77+
);
78+
79+
nextResolveSimple = createTsExtensionResolver(
80+
nextResolveSimple,
81+
Boolean(parent?.filename && tsExtensionsPattern.test(parent.filename)),
82+
);
83+
84+
nextResolveSimple = createImplicitResolver(nextResolveSimple);
85+
86+
const resolved = resolveTsPaths(cleanRequest, parent, nextResolveSimple);
87+
88+
return appendQuery(
89+
resolved,
90+
restOfArgs.length,
91+
);
92+
};

0 commit comments

Comments
 (0)