Skip to content

Commit 5935065

Browse files
committed
fixup! fixup! loader: return package format from defaultResolve if known
1 parent 21b93ac commit 5935065

File tree

2 files changed

+137
-124
lines changed

2 files changed

+137
-124
lines changed

test/es-module/test-esm-resolve-type.js

+133-124
Original file line numberDiff line numberDiff line change
@@ -18,129 +18,138 @@ const {
1818
defaultResolve: resolve
1919
} = require('internal/modules/esm/resolve');
2020

21-
/**
22-
* ensure that resolving by full path does not return the format
23-
* with the defaultResolver
24-
*/
25-
[ [ '/es-modules/package-type-module/index.js', undefined ],
26-
[ '/es-modules/package-type-commonjs/index.js', undefined ],
27-
[ '/es-modules/package-without-type/index.js', undefined ],
28-
[ '/es-modules/package-without-pjson/index.js', undefined ],
29-
].forEach((testVariant) => {
30-
const [ testScript, expectedType ] = testVariant;
31-
const resolvedPath = path.resolve(fixtures.path(testScript));
32-
const resolveResult = resolve(resolvedPath);
33-
assert.strictEqual(resolveResult.format, expectedType);
34-
});
35-
36-
/**
37-
* create a test module and try to resolve it by module name.
38-
* check the result is as expected
39-
*/
40-
41-
(async () => {
42-
[ [ 'test-module-mainjs', 'js', 'module', 'module'],
43-
[ 'test-module-mainmjs', 'mjs', 'module', 'module'],
44-
[ 'test-module-cjs', 'js', 'commonjs', 'commonjs'],
45-
[ 'test-module-ne', 'js', undefined, undefined],
21+
const rel = (file) => path.join(tmpdir.path, file);
22+
const previousCwd = process.cwd();
23+
try {
24+
tmpdir.refresh();
25+
process.chdir(tmpdir.path);
26+
/**
27+
* ensure that resolving by full path does not return the format
28+
* with the defaultResolver
29+
*/
30+
[ [ '/es-modules/package-type-module/index.js', undefined ],
31+
[ '/es-modules/package-type-commonjs/index.js', undefined ],
32+
[ '/es-modules/package-without-type/index.js', undefined ],
33+
[ '/es-modules/package-without-pjson/index.js', undefined ],
4634
].forEach((testVariant) => {
47-
const [ moduleName,
48-
moduleExtenstion,
49-
moduleType,
50-
expectedResolvedType ] = testVariant;
51-
tmpdir.refresh();
52-
const rel = (file) => path.join(process.cwd(), file);
53-
const createDir = (path) => {
54-
if (!fs.existsSync(path)) {
55-
fs.mkdirSync(path);
56-
}
57-
};
58-
59-
const nmDir = rel('node_modules');
60-
const mDir = rel(`node_modules/${moduleName}`);
61-
const subDir = rel(`node_modules/${moduleName}/subdir`);
62-
const pkg = rel(`node_modules/${moduleName}/package.json`);
63-
const script = rel(`node_modules/${moduleName}/subdir/mainfile.${moduleExtenstion}`);
64-
65-
createDir(nmDir);
66-
createDir(mDir);
67-
createDir(subDir);
68-
const pkgJsonContent = {
69-
...(moduleType !== undefined) && { type: moduleType },
70-
main: `subdir/mainfile.${moduleExtenstion}`
71-
};
72-
fs.writeFileSync(pkg, JSON.stringify(pkgJsonContent));
73-
fs.writeFileSync(script,
74-
'export function esm-resolve-tester() {return 42}');
75-
76-
const resolveResult = resolve(`${moduleName}`);
77-
assert.strictEqual(resolveResult.format, expectedResolvedType);
78-
79-
fs.unlinkSync(script);
80-
fs.unlinkSync(pkg);
81-
fs.rmdirSync(subDir);
82-
fs.rmdirSync(mDir);
83-
fs.rmdirSync(nmDir);
35+
const [ testScript, expectedType ] = testVariant;
36+
const resolvedPath = path.resolve(fixtures.path(testScript));
37+
const resolveResult = resolve(resolvedPath);
38+
assert.strictEqual(resolveResult.format, expectedType);
8439
});
85-
})().then(common.mustCall());
86-
87-
// Helpers
88-
const rel = (file) => path.join(process.cwd(), file);
89-
const createDir = (path) => {
90-
if (!fs.existsSync(path)) {
91-
fs.mkdirSync(path);
92-
}
93-
};
94-
95-
// Create a dummy dual package
96-
const moduleName = 'my-dual-package';
97-
98-
const nmDir = rel('node_modules');
99-
const mDir = rel(`node_modules/${moduleName}`);
100-
const esSubDir = rel(`node_modules/${moduleName}/es`);
101-
const cjsSubDir = rel(`node_modules/${moduleName}/lib`);
102-
const pkg = rel(`node_modules/${moduleName}/package.json`);
103-
const esmPkg = rel(`node_modules/${moduleName}/es/package.json`);
104-
const esScript = rel(`node_modules/${moduleName}/es/index.js`);
105-
const cjsScript = rel(`node_modules/${moduleName}/lib/index.js`);
106-
107-
createDir(nmDir);
108-
createDir(mDir);
109-
createDir(esSubDir);
110-
createDir(cjsSubDir);
111-
112-
const mainPkgJsonContent = {
113-
type: 'commonjs',
114-
main: 'lib/mainfile.js',
115-
exports: {
116-
'.': {
117-
'require': './lib/index.js',
118-
'import': './es/index.js'
119-
},
120-
'./package.json': './package.json',
121-
}
122-
};
123-
const esmPkgJsonContent = {
124-
type: 'module'
125-
};
126-
127-
fs.writeFileSync(pkg, JSON.stringify(mainPkgJsonContent));
128-
fs.writeFileSync(esmPkg, JSON.stringify(esmPkgJsonContent));
129-
fs.writeFileSync(esScript, 'export function esm-resolve-tester() {return 42}');
130-
fs.writeFileSync(cjsScript,
131-
'module.exports = { esm-resolve-tester: () => {return 42}}');
132-
133-
134-
// test the resolve
135-
const resolveResult = resolve(`${moduleName}`);
136-
assert.strictEqual(resolveResult.format, 'module');
137-
138-
// cleanup
139-
fs.unlinkSync(esScript);
140-
fs.unlinkSync(cjsScript);
141-
fs.unlinkSync(pkg);
142-
fs.unlinkSync(esmPkg);
143-
fs.rmdirSync(esSubDir);
144-
fs.rmdirSync(cjsSubDir);
145-
fs.rmdirSync(mDir);
146-
fs.rmdirSync(nmDir);
40+
41+
/**
42+
* create a test module and try to resolve it by module name.
43+
* check the result is as expected
44+
*/
45+
46+
(async () => {
47+
[ [ 'test-module-mainjs', 'js', 'module', 'module'],
48+
[ 'test-module-mainmjs', 'mjs', 'module', 'module'],
49+
[ 'test-module-cjs', 'js', 'commonjs', 'commonjs'],
50+
[ 'test-module-ne', 'js', undefined, undefined],
51+
].forEach((testVariant) => {
52+
const [ moduleName,
53+
moduleExtenstion,
54+
moduleType,
55+
expectedResolvedType ] = testVariant;
56+
tmpdir.refresh();
57+
const createDir = (path) => {
58+
if (!fs.existsSync(path)) {
59+
fs.mkdirSync(path);
60+
}
61+
};
62+
63+
const nmDir = rel('node_modules');
64+
const mDir = rel(`node_modules/${moduleName}`);
65+
const subDir = rel(`node_modules/${moduleName}/subdir`);
66+
const pkg = rel(`node_modules/${moduleName}/package.json`);
67+
const script = rel(`node_modules/${moduleName}/subdir/mainfile.${moduleExtenstion}`);
68+
69+
createDir(nmDir);
70+
createDir(mDir);
71+
createDir(subDir);
72+
const pkgJsonContent = {
73+
...(moduleType !== undefined) && { type: moduleType },
74+
main: `subdir/mainfile.${moduleExtenstion}`
75+
};
76+
fs.writeFileSync(pkg, JSON.stringify(pkgJsonContent));
77+
fs.writeFileSync(script,
78+
'export function esm-resolve-tester() {return 42}');
79+
80+
const resolveResult = resolve(`${moduleName}`);
81+
assert.strictEqual(resolveResult.format, expectedResolvedType);
82+
83+
fs.unlinkSync(script);
84+
fs.unlinkSync(pkg);
85+
fs.rmdirSync(subDir);
86+
fs.rmdirSync(mDir);
87+
fs.rmdirSync(nmDir);
88+
});
89+
})().then(common.mustCall());
90+
91+
// Helpers
92+
const createDir = (path) => {
93+
if (!fs.existsSync(path)) {
94+
fs.mkdirSync(path);
95+
}
96+
};
97+
98+
// Create a dummy dual package
99+
const moduleName = 'my-dual-package';
100+
101+
const nmDir = rel('node_modules');
102+
const mDir = rel(`node_modules/${moduleName}`);
103+
const esSubDir = rel(`node_modules/${moduleName}/es`);
104+
const cjsSubDir = rel(`node_modules/${moduleName}/lib`);
105+
const pkg = rel(`node_modules/${moduleName}/package.json`);
106+
const esmPkg = rel(`node_modules/${moduleName}/es/package.json`);
107+
const esScript = rel(`node_modules/${moduleName}/es/index.js`);
108+
const cjsScript = rel(`node_modules/${moduleName}/lib/index.js`);
109+
110+
createDir(nmDir);
111+
createDir(mDir);
112+
createDir(esSubDir);
113+
createDir(cjsSubDir);
114+
115+
const mainPkgJsonContent = {
116+
type: 'commonjs',
117+
main: 'lib/mainfile.js',
118+
exports: {
119+
'.': {
120+
'require': './lib/index.js',
121+
'import': './es/index.js'
122+
},
123+
'./package.json': './package.json',
124+
}
125+
};
126+
const esmPkgJsonContent = {
127+
type: 'module'
128+
};
129+
130+
fs.writeFileSync(pkg, JSON.stringify(mainPkgJsonContent));
131+
fs.writeFileSync(esmPkg, JSON.stringify(esmPkgJsonContent));
132+
fs.writeFileSync(esScript,
133+
'export function esm-resolve-tester() {return 42}');
134+
fs.writeFileSync(cjsScript,
135+
`module.exports = {
136+
esm-resolve-tester: () => {return 42}}`
137+
);
138+
139+
140+
// test the resolve
141+
const resolveResult = resolve(`${moduleName}`);
142+
assert.strictEqual(resolveResult.format, 'module');
143+
144+
// cleanup
145+
fs.unlinkSync(esScript);
146+
fs.unlinkSync(cjsScript);
147+
fs.unlinkSync(pkg);
148+
fs.unlinkSync(esmPkg);
149+
fs.rmdirSync(esSubDir);
150+
fs.rmdirSync(cjsSubDir);
151+
fs.rmdirSync(mDir);
152+
fs.rmdirSync(nmDir);
153+
} finally {
154+
process.chdir(previousCwd);
155+
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
const identifier = 'package-without-pjson';
2+
3+
const common = require('../common');
4+
common.requireNoPackageJSONAbove();
5+
26
console.log(identifier);
37
module.exports = identifier;

0 commit comments

Comments
 (0)