@@ -17,6 +17,7 @@ const {
17
17
mimeToFormat,
18
18
} = require('internal/modules/esm/formats');
19
19
20
+
const detectModule = getOptionValue('--experimental-detect-module');
20
21
const experimentalNetworkImports =
21
22
getOptionValue('--experimental-network-imports');
22
23
const { containsModuleSyntax } = internalBinding('contextify');
@@ -33,6 +34,17 @@ const protocolHandlers = {
33
34
'node:'() { return 'builtin'; },
34
35
};
35
36
37
+
/**
38
+
* Determine whether the given ambiguous source contains CommonJS or ES module syntax.
39
+
* @param {string | Buffer | undefined} source
40
+
* @param {URL} url
41
+
*/
42
+
function detectModuleFormat(source, url) {
43
+
if (!source) { return detectModule ? null : 'commonjs'; }
44
+
if (!detectModule) { return 'commonjs'; }
45
+
return containsModuleSyntax(`${source}`, fileURLToPath(url), url) ? 'module' : 'commonjs';
46
+
}
47
+
36
48
/**
37
49
* @param {URL} parsed
38
50
* @returns {string | null}
@@ -112,26 +124,23 @@ function getFileProtocolModuleFormat(url, context = { __proto__: null }, ignoreE
112
124
default: { // The user did not pass `--experimental-default-type`.
113
125
// `source` is undefined when this is called from `defaultResolve`;
114
126
// but this gets called again from `defaultLoad`/`defaultLoadSync`.
115
-
if (getOptionValue('--experimental-detect-module')) {
116
-
const format = source ?
117
-
(containsModuleSyntax(`${source}`, fileURLToPath(url), url) ? 'module' : 'commonjs') :
118
-
null;
119
-
if (format === 'module') {
120
-
// This module has a .js extension, a package.json with no `type` field, and ESM syntax.
121
-
// Warn about the missing `type` field so that the user can avoid the performance penalty of detection.
122
-
typelessPackageJsonFilesWarnedAbout ??= new SafeSet();
123
-
if (!typelessPackageJsonFilesWarnedAbout.has(pjsonPath)) {
124
-
const warning = `${url} parsed as an ES module because module syntax was detected;` +
125
-
` to avoid the performance penalty of syntax detection, add "type": "module" to ${pjsonPath}`;
126
-
process.emitWarning(warning, {
127
-
code: 'MODULE_TYPELESS_PACKAGE_JSON',
128
-
});
129
-
typelessPackageJsonFilesWarnedAbout.add(pjsonPath);
130
-
}
127
+
// For ambiguous files (no type field, .js extension) we return
128
+
// undefined from `resolve` and re-run the check in `load`.
129
+
const format = detectModuleFormat(source, url);
130
+
if (format === 'module') {
131
+
// This module has a .js extension, a package.json with no `type` field, and ESM syntax.
132
+
// Warn about the missing `type` field so that the user can avoid the performance penalty of detection.
133
+
typelessPackageJsonFilesWarnedAbout ??= new SafeSet();
134
+
if (!typelessPackageJsonFilesWarnedAbout.has(pjsonPath)) {
135
+
const warning = `${url} parsed as an ES module because module syntax was detected;` +
136
+
` to avoid the performance penalty of syntax detection, add "type": "module" to ${pjsonPath}`;
137
+
process.emitWarning(warning, {
138
+
code: 'MODULE_TYPELESS_PACKAGE_JSON',
139
+
});
140
+
typelessPackageJsonFilesWarnedAbout.add(pjsonPath);
131
141
}
132
-
return format;
133
142
}
134
-
return 'commonjs';
143
+
return format;
135
144
}
136
145
}
137
146
}
@@ -154,15 +163,14 @@ function getFileProtocolModuleFormat(url, context = { __proto__: null }, ignoreE
154
163
return 'commonjs';
155
164
}
156
165
default: { // The user did not pass `--experimental-default-type`.
157
-
if (getOptionValue('--experimental-detect-module')) {
158
-
if (!source) { return null; }
159
-
const format = getFormatOfExtensionlessFile(url);
160
-
if (format === 'module') {
161
-
return containsModuleSyntax(`${source}`, fileURLToPath(url), url) ? 'module' : 'commonjs';
162
-
}
166
+
if (!source) {
167
+
return null;
168
+
}
169
+
const format = getFormatOfExtensionlessFile(url);
170
+
if (format === 'wasm') {
163
171
return format;
164
172
}
165
-
return 'commonjs';
173
+
return detectModuleFormat(source, url);
166
174
}
167
175
}
168
176
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4