@eggjs/utils 5.0.0-beta.19 → 5.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/import.js CHANGED
@@ -1,231 +1,385 @@
1
- import { __require } from "./_virtual/rolldown_runtime.js";
2
- import { ImportResolveError } from "./error/ImportResolveError.js";
3
- import { createRequire } from "node:module";
4
- import path from "node:path";
5
- import { debuglog } from "node:util";
6
- import fs from "node:fs";
7
- import { fileURLToPath, pathToFileURL } from "node:url";
8
-
9
- //#region src/import.ts
10
- const debug = debuglog("egg/utils/import");
11
- let isESM = true;
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { debuglog } from 'node:util';
10
+ import { createRequire } from 'node:module';
11
+ import { pathToFileURL, fileURLToPath } from 'node:url';
12
+ import path from 'node:path';
13
+ import fs from 'node:fs';
14
+ import { ImportResolveError } from "./error/index.js";
15
+ const debug = debuglog('egg/utils/import');
16
+ // detect is esm or cjs
17
+ export let isESM = true;
12
18
  try {
13
- if (typeof import.meta !== "undefined") isESM = true;
14
- } catch {
15
- isESM = false;
19
+ // Accessing import.meta will throw an error in CJS
20
+ if (typeof import.meta !== 'undefined') {
21
+ isESM = true;
22
+ }
16
23
  }
17
- const supportImportMetaResolve = parseInt(process.versions.node.split(".", 1)[0], 10) >= 18;
24
+ catch {
25
+ // If import.meta is not available, it's likely CJS
26
+ isESM = false;
27
+ }
28
+ const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
29
+ const supportImportMetaResolve = nodeMajorVersion >= 18;
18
30
  let _customRequire;
19
- function getRequire() {
20
- if (!_customRequire) if (typeof __require !== "undefined") _customRequire = __require;
21
- else _customRequire = createRequire(process.cwd());
22
- return _customRequire;
31
+ export function getRequire() {
32
+ if (!_customRequire) {
33
+ if (typeof require !== 'undefined') {
34
+ _customRequire = require;
35
+ }
36
+ else {
37
+ _customRequire = createRequire(process.cwd());
38
+ }
39
+ }
40
+ return _customRequire;
23
41
  }
24
- function getExtensions() {
25
- return getRequire().extensions;
42
+ export function getExtensions() {
43
+ return getRequire().extensions;
26
44
  }
27
45
  let _supportTypeScript;
28
- function isSupportTypeScript() {
29
- if (_supportTypeScript === void 0) {
30
- const extensions = getExtensions();
31
- _supportTypeScript = extensions[".ts"] !== void 0 || process.env.VITEST === "true" || process.env.EGG_TS_ENABLE === "true" || parseInt(process.versions.node.split(".", 1)[0], 10) >= 22;
32
- debug("[isSupportTypeScript] %o, extensions: %j, process.env.VITEST: %j, process.env.EGG_TS_ENABLE: %j, node version: %s", _supportTypeScript, Object.keys(extensions), process.env.VITEST, process.env.EGG_TS_ENABLE, process.versions.node);
33
- }
34
- return _supportTypeScript;
46
+ export function isSupportTypeScript() {
47
+ if (_supportTypeScript === undefined) {
48
+ const extensions = getExtensions();
49
+ // enable ts by process.env.EGG_TS_ENABLE or process.env.VITEST
50
+ _supportTypeScript =
51
+ extensions['.ts'] !== undefined ||
52
+ process.env.VITEST === 'true' ||
53
+ process.env.EGG_TS_ENABLE === 'true' ||
54
+ parseInt(process.versions.node.split('.', 1)[0], 10) >= 22;
55
+ debug('[isSupportTypeScript] %o, extensions: %j, process.env.VITEST: %j, process.env.EGG_TS_ENABLE: %j, node version: %s', _supportTypeScript, Object.keys(extensions), process.env.VITEST, process.env.EGG_TS_ENABLE, process.versions.node);
56
+ }
57
+ return _supportTypeScript;
35
58
  }
36
59
  function tryToResolveFromFile(filepath) {
37
- const type = isESM ? "module" : "commonjs";
38
- let mainIndexFile = "";
39
- if (type === "module") {
40
- mainIndexFile = filepath + ".mjs";
41
- if (fs.existsSync(mainIndexFile)) {
42
- debug("[tryToResolveFromFile] %o, use index.mjs, type: %o", mainIndexFile, type);
43
- return mainIndexFile;
44
- }
45
- mainIndexFile = filepath + ".js";
46
- if (fs.existsSync(mainIndexFile)) {
47
- debug("[tryToResolveFromFile] %o, use index.js, type: %o", mainIndexFile, type);
48
- return mainIndexFile;
49
- }
50
- } else {
51
- mainIndexFile = filepath + ".cjs";
52
- if (fs.existsSync(mainIndexFile)) {
53
- debug("[tryToResolveFromFile] %o, use index.cjs, type: %o", mainIndexFile, type);
54
- return mainIndexFile;
55
- }
56
- mainIndexFile = filepath + ".js";
57
- if (fs.existsSync(mainIndexFile)) {
58
- debug("[tryToResolveFromFile] %o, use index.js, type: %o", mainIndexFile, type);
59
- return mainIndexFile;
60
- }
61
- }
62
- if (!isSupportTypeScript()) return;
63
- mainIndexFile = filepath + ".ts";
64
- if (fs.existsSync(mainIndexFile)) {
65
- debug("[tryToResolveFromFile] %o, use index.ts, type: %o", mainIndexFile, type);
66
- return mainIndexFile;
67
- }
60
+ // "type": "module", try index.mjs then index.js
61
+ const type = isESM ? 'module' : 'commonjs';
62
+ let mainIndexFile = '';
63
+ if (type === 'module') {
64
+ mainIndexFile = filepath + '.mjs';
65
+ if (fs.existsSync(mainIndexFile)) {
66
+ debug('[tryToResolveFromFile] %o, use index.mjs, type: %o', mainIndexFile, type);
67
+ return mainIndexFile;
68
+ }
69
+ mainIndexFile = filepath + '.js';
70
+ if (fs.existsSync(mainIndexFile)) {
71
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
72
+ return mainIndexFile;
73
+ }
74
+ }
75
+ else {
76
+ // "type": "commonjs", try index.js then index.cjs
77
+ mainIndexFile = filepath + '.cjs';
78
+ if (fs.existsSync(mainIndexFile)) {
79
+ debug('[tryToResolveFromFile] %o, use index.cjs, type: %o', mainIndexFile, type);
80
+ return mainIndexFile;
81
+ }
82
+ mainIndexFile = filepath + '.js';
83
+ if (fs.existsSync(mainIndexFile)) {
84
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
85
+ return mainIndexFile;
86
+ }
87
+ }
88
+ if (!isSupportTypeScript()) {
89
+ return;
90
+ }
91
+ // for the module under development
92
+ mainIndexFile = filepath + '.ts';
93
+ if (fs.existsSync(mainIndexFile)) {
94
+ debug('[tryToResolveFromFile] %o, use index.ts, type: %o', mainIndexFile, type);
95
+ return mainIndexFile;
96
+ }
68
97
  }
69
98
  function tryToResolveByDirnameFromPackage(dirname, pkg) {
70
- const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
71
- if (defaultMainFile) {
72
- const mainIndexFilePath$1 = path.join(dirname, defaultMainFile);
73
- if (fs.existsSync(mainIndexFilePath$1)) {
74
- debug("[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s", mainIndexFilePath$1, defaultMainFile, isESM);
75
- return mainIndexFilePath$1;
76
- }
77
- }
78
- if (pkg.exports?.["."]) {
79
- const pkgType = pkg.type ?? "commonjs";
80
- const defaultExport = pkg.exports["."];
81
- let mainIndexFilePath$1 = "";
82
- if (typeof defaultExport === "string") mainIndexFilePath$1 = path.join(dirname, defaultExport);
83
- else if (pkgType === "module") {
84
- if (typeof defaultExport.import === "string") mainIndexFilePath$1 = path.join(dirname, defaultExport.import);
85
- else if (typeof defaultExport.import?.default === "string") mainIndexFilePath$1 = path.join(dirname, defaultExport.import.default);
86
- } else if (typeof defaultExport.require === "string") mainIndexFilePath$1 = path.join(dirname, defaultExport.require);
87
- else if (typeof defaultExport.require?.default === "string") mainIndexFilePath$1 = path.join(dirname, defaultExport.require.default);
88
- if (mainIndexFilePath$1 && fs.existsSync(mainIndexFilePath$1)) {
89
- debug("[tryToResolveByDirnameFromPackage] %o, use pkg.exports[.]: %o, pkg.type: %o", mainIndexFilePath$1, defaultExport, pkgType);
90
- return mainIndexFilePath$1;
91
- }
92
- }
93
- const type = pkg?.type ?? (isESM ? "module" : "commonjs");
94
- if (type === "module") {
95
- const mainIndexFilePath$1 = path.join(dirname, "index.mjs");
96
- if (fs.existsSync(mainIndexFilePath$1)) {
97
- debug("[tryToResolveByDirnameFromPackage] %o, use index.mjs, pkg.type: %o", mainIndexFilePath$1, type);
98
- return mainIndexFilePath$1;
99
- }
100
- const mainIndexMjsFilePath = path.join(dirname, "index.js");
101
- if (fs.existsSync(mainIndexMjsFilePath)) {
102
- debug("[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o", mainIndexMjsFilePath, type);
103
- return mainIndexMjsFilePath;
104
- }
105
- } else {
106
- const mainIndexFilePath$1 = path.join(dirname, "index.cjs");
107
- if (fs.existsSync(mainIndexFilePath$1)) {
108
- debug("[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o", mainIndexFilePath$1, type);
109
- return mainIndexFilePath$1;
110
- }
111
- const mainIndexCjsFilePath = path.join(dirname, "index.js");
112
- if (fs.existsSync(mainIndexCjsFilePath)) {
113
- debug("[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o", mainIndexCjsFilePath, type);
114
- return mainIndexCjsFilePath;
115
- }
116
- }
117
- if (!isSupportTypeScript()) return;
118
- const mainIndexFile = pkg.tshy?.exports?.["."] ?? "index.ts";
119
- const mainIndexFilePath = path.join(dirname, mainIndexFile);
120
- if (fs.existsSync(mainIndexFilePath)) return mainIndexFilePath;
99
+ // try to read pkg.main or pkg.module first
100
+ // "main": "./dist/commonjs/index.js",
101
+ // "module": "./dist/esm/index.js"
102
+ const defaultMainFile = isESM ? (pkg.module ?? pkg.main) : pkg.main;
103
+ if (defaultMainFile) {
104
+ const mainIndexFilePath = path.join(dirname, defaultMainFile);
105
+ if (fs.existsSync(mainIndexFilePath)) {
106
+ debug('[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s', mainIndexFilePath, defaultMainFile, isESM);
107
+ return mainIndexFilePath;
108
+ }
109
+ }
110
+ // detect from exports
111
+ if (pkg.exports?.['.']) {
112
+ const pkgType = pkg.type ?? 'commonjs';
113
+ const defaultExport = pkg.exports['.'];
114
+ let mainIndexFilePath = '';
115
+ if (typeof defaultExport === 'string') {
116
+ mainIndexFilePath = path.join(dirname, defaultExport);
117
+ }
118
+ else {
119
+ // "type": "module",
120
+ if (pkgType === 'module') {
121
+ if (typeof defaultExport.import === 'string') {
122
+ mainIndexFilePath = path.join(dirname, defaultExport.import);
123
+ }
124
+ else if (typeof defaultExport.import?.default === 'string') {
125
+ mainIndexFilePath = path.join(dirname, defaultExport.import.default);
126
+ }
127
+ }
128
+ else {
129
+ // "type": "commonjs",
130
+ if (typeof defaultExport.require === 'string') {
131
+ mainIndexFilePath = path.join(dirname, defaultExport.require);
132
+ }
133
+ else if (typeof defaultExport.require?.default === 'string') {
134
+ mainIndexFilePath = path.join(dirname, defaultExport.require.default);
135
+ }
136
+ }
137
+ }
138
+ if (mainIndexFilePath && fs.existsSync(mainIndexFilePath)) {
139
+ debug('[tryToResolveByDirnameFromPackage] %o, use pkg.exports[.]: %o, pkg.type: %o', mainIndexFilePath, defaultExport, pkgType);
140
+ return mainIndexFilePath;
141
+ }
142
+ }
143
+ // "type": "module", try index.mjs then index.js
144
+ const type = pkg?.type ?? (isESM ? 'module' : 'commonjs');
145
+ if (type === 'module') {
146
+ const mainIndexFilePath = path.join(dirname, 'index.mjs');
147
+ if (fs.existsSync(mainIndexFilePath)) {
148
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.mjs, pkg.type: %o', mainIndexFilePath, type);
149
+ return mainIndexFilePath;
150
+ }
151
+ const mainIndexMjsFilePath = path.join(dirname, 'index.js');
152
+ if (fs.existsSync(mainIndexMjsFilePath)) {
153
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexMjsFilePath, type);
154
+ return mainIndexMjsFilePath;
155
+ }
156
+ }
157
+ else {
158
+ // "type": "commonjs", try index.cjs then index.js
159
+ const mainIndexFilePath = path.join(dirname, 'index.cjs');
160
+ if (fs.existsSync(mainIndexFilePath)) {
161
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
162
+ return mainIndexFilePath;
163
+ }
164
+ const mainIndexCjsFilePath = path.join(dirname, 'index.js');
165
+ if (fs.existsSync(mainIndexCjsFilePath)) {
166
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexCjsFilePath, type);
167
+ return mainIndexCjsFilePath;
168
+ }
169
+ }
170
+ if (!isSupportTypeScript()) {
171
+ return;
172
+ }
173
+ // for the module under development
174
+ // "tshy": {
175
+ // "exports": {
176
+ // "./package.json": "./package.json",
177
+ // ".": "./src/index.ts"
178
+ // }
179
+ // }
180
+ const mainIndexFile = pkg.tshy?.exports?.['.'] ?? 'index.ts';
181
+ const mainIndexFilePath = path.join(dirname, mainIndexFile);
182
+ if (fs.existsSync(mainIndexFilePath)) {
183
+ return mainIndexFilePath;
184
+ }
121
185
  }
122
186
  function tryToResolveByDirname(dirname) {
123
- let pkg = {};
124
- const pkgFile = path.join(dirname, "package.json");
125
- if (fs.existsSync(pkgFile)) pkg = JSON.parse(fs.readFileSync(pkgFile, "utf-8"));
126
- return tryToResolveByDirnameFromPackage(dirname, pkg);
187
+ let pkg = {};
188
+ const pkgFile = path.join(dirname, 'package.json');
189
+ if (fs.existsSync(pkgFile)) {
190
+ pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
191
+ }
192
+ return tryToResolveByDirnameFromPackage(dirname, pkg);
127
193
  }
128
194
  function isRelativePath(filepath) {
129
- return filepath.startsWith("./") || filepath.startsWith("../") || filepath.startsWith(".\\") || filepath.startsWith("..\\");
195
+ return (filepath.startsWith('./') || filepath.startsWith('../') || filepath.startsWith('.\\') || filepath.startsWith('..\\'));
130
196
  }
131
197
  function tryToResolveFromAbsoluteFile(filepath) {
132
- let moduleFilePath;
133
- const stat = fs.statSync(filepath, { throwIfNoEntry: false });
134
- if (stat?.isDirectory()) {
135
- moduleFilePath = tryToResolveByDirname(filepath);
136
- if (moduleFilePath) return moduleFilePath;
137
- } else if (stat?.isFile()) return filepath;
138
- moduleFilePath = tryToResolveFromFile(filepath);
139
- if (moduleFilePath) return moduleFilePath;
140
- const parentDir = path.dirname(filepath);
141
- const basename = path.basename(filepath);
142
- const pkgFile = path.join(parentDir, "package.json");
143
- if (fs.existsSync(pkgFile)) {
144
- const pkg = JSON.parse(fs.readFileSync(pkgFile, "utf-8"));
145
- const key = `./${basename}`;
146
- if (pkg.exports?.[key]) return path.join(parentDir, pkg.exports[key]);
147
- }
198
+ let moduleFilePath;
199
+ const stat = fs.statSync(filepath, { throwIfNoEntry: false });
200
+ // try to resolve from directory
201
+ if (stat?.isDirectory()) {
202
+ moduleFilePath = tryToResolveByDirname(filepath);
203
+ if (moduleFilePath) {
204
+ return moduleFilePath;
205
+ }
206
+ }
207
+ else if (stat?.isFile()) {
208
+ return filepath;
209
+ }
210
+ // try to resolve from file
211
+ moduleFilePath = tryToResolveFromFile(filepath);
212
+ if (moduleFilePath) {
213
+ return moduleFilePath;
214
+ }
215
+ // try to resolve from parent directory and read package.json#exports
216
+ // e.g: /path/to/mock/app => /path/to/mock/src/app.ts
217
+ // {
218
+ // "exports": {
219
+ // "./app": "./src/app.ts"
220
+ // }
221
+ // }
222
+ const parentDir = path.dirname(filepath);
223
+ const basename = path.basename(filepath);
224
+ const pkgFile = path.join(parentDir, 'package.json');
225
+ if (fs.existsSync(pkgFile)) {
226
+ const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
227
+ const key = `./${basename}`;
228
+ if (pkg.exports?.[key]) {
229
+ return path.join(parentDir, pkg.exports[key]);
230
+ }
231
+ }
148
232
  }
149
- function importResolve(filepath, options) {
150
- const paths = options?.paths ?? [process.cwd()];
151
- debug("[importResolve] filepath: %o, options: %j, paths: %j", filepath, options, paths);
152
- let moduleFilePath;
153
- const isAbsolute = path.isAbsolute(filepath);
154
- if (isAbsolute) {
155
- moduleFilePath = tryToResolveFromAbsoluteFile(filepath);
156
- if (moduleFilePath) {
157
- debug("[importResolve:isAbsolute] %o => %o", filepath, moduleFilePath);
158
- return moduleFilePath;
159
- }
160
- } else if (isRelativePath(filepath)) for (const p of paths) {
161
- const resolvedPath = path.resolve(p, filepath);
162
- moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
163
- if (moduleFilePath) {
164
- debug("[importResolve:isRelativePath] %o => %o => %o", filepath, resolvedPath, moduleFilePath);
165
- return moduleFilePath;
166
- }
167
- }
168
- for (const p of paths) {
169
- let resolvedPath = path.join(p, "node_modules", filepath);
170
- moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
171
- if (moduleFilePath) {
172
- debug("[importResolve:node_modules] %o => %o => %o", filepath, resolvedPath, moduleFilePath);
173
- return moduleFilePath;
174
- }
175
- let parentPath = path.dirname(p);
176
- if (path.basename(parentPath) === "node_modules") {
177
- resolvedPath = path.join(parentPath, filepath);
178
- moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
179
- if (moduleFilePath) {
180
- debug("[importResolve:node_modules] %o => %o => %o", filepath, resolvedPath, moduleFilePath);
181
- return moduleFilePath;
182
- }
183
- }
184
- parentPath = path.dirname(parentPath);
185
- if (path.basename(parentPath) === "node_modules") {
186
- resolvedPath = path.join(parentPath, filepath);
187
- moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
188
- if (moduleFilePath) {
189
- debug("[importResolve:node_modules] %o => %o => %o", filepath, resolvedPath, moduleFilePath);
190
- return moduleFilePath;
191
- }
192
- }
193
- }
194
- const extname = path.extname(filepath);
195
- if (!isAbsolute && extname === ".json" || !isESM) moduleFilePath = getRequire().resolve(filepath, { paths });
196
- else if (supportImportMetaResolve) {
197
- try {
198
- moduleFilePath = import.meta.resolve(filepath);
199
- } catch (err) {
200
- debug("[importResolve:error] import.meta.resolve %o => %o, options: %o", filepath, err, options);
201
- throw new ImportResolveError(filepath, paths, err);
202
- }
203
- if (moduleFilePath.startsWith("file://")) moduleFilePath = fileURLToPath(moduleFilePath);
204
- debug("[importResolve] import.meta.resolve %o => %o", filepath, moduleFilePath);
205
- if (!fs.statSync(moduleFilePath, { throwIfNoEntry: false })?.isFile()) throw new TypeError(`Cannot find module ${filepath}, because ${moduleFilePath} does not exists`);
206
- } else moduleFilePath = getRequire().resolve(filepath);
207
- debug("[importResolve:success] %o, options: %o => %o, isESM: %s", filepath, options, moduleFilePath, isESM);
208
- return moduleFilePath;
233
+ export function importResolve(filepath, options) {
234
+ // find *.json or CommonJS module by require.resolve
235
+ // e.g.: importResolve('egg/package.json', { paths })
236
+ const paths = options?.paths ?? [process.cwd()];
237
+ debug('[importResolve] filepath: %o, options: %j, paths: %j', filepath, options, paths);
238
+ let moduleFilePath;
239
+ const isAbsolute = path.isAbsolute(filepath);
240
+ if (isAbsolute) {
241
+ moduleFilePath = tryToResolveFromAbsoluteFile(filepath);
242
+ if (moduleFilePath) {
243
+ debug('[importResolve:isAbsolute] %o => %o', filepath, moduleFilePath);
244
+ return moduleFilePath;
245
+ }
246
+ }
247
+ else if (isRelativePath(filepath)) {
248
+ for (const p of paths) {
249
+ const resolvedPath = path.resolve(p, filepath);
250
+ moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
251
+ if (moduleFilePath) {
252
+ debug('[importResolve:isRelativePath] %o => %o => %o', filepath, resolvedPath, moduleFilePath);
253
+ return moduleFilePath;
254
+ }
255
+ }
256
+ }
257
+ // find from node_modules
258
+ for (const p of paths) {
259
+ let resolvedPath = path.join(p, 'node_modules', filepath);
260
+ moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
261
+ if (moduleFilePath) {
262
+ debug('[importResolve:node_modules] %o => %o => %o', filepath, resolvedPath, moduleFilePath);
263
+ return moduleFilePath;
264
+ }
265
+ // find from parent node_modules
266
+ // non-scoped package, e.g: node_modules/egg
267
+ let parentPath = path.dirname(p);
268
+ if (path.basename(parentPath) === 'node_modules') {
269
+ resolvedPath = path.join(parentPath, filepath);
270
+ moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
271
+ if (moduleFilePath) {
272
+ debug('[importResolve:node_modules] %o => %o => %o', filepath, resolvedPath, moduleFilePath);
273
+ return moduleFilePath;
274
+ }
275
+ }
276
+ // scoped package, e.g: node_modules/@eggjs/tegg
277
+ parentPath = path.dirname(parentPath);
278
+ if (path.basename(parentPath) === 'node_modules') {
279
+ resolvedPath = path.join(parentPath, filepath);
280
+ moduleFilePath = tryToResolveFromAbsoluteFile(resolvedPath);
281
+ if (moduleFilePath) {
282
+ debug('[importResolve:node_modules] %o => %o => %o', filepath, resolvedPath, moduleFilePath);
283
+ return moduleFilePath;
284
+ }
285
+ }
286
+ }
287
+ const extname = path.extname(filepath);
288
+ if ((!isAbsolute && extname === '.json') || !isESM) {
289
+ moduleFilePath = getRequire().resolve(filepath, {
290
+ paths,
291
+ });
292
+ }
293
+ else {
294
+ if (supportImportMetaResolve) {
295
+ try {
296
+ moduleFilePath = import.meta.resolve(filepath);
297
+ }
298
+ catch (err) {
299
+ debug('[importResolve:error] import.meta.resolve %o => %o, options: %o', filepath, err, options);
300
+ throw new ImportResolveError(filepath, paths, err);
301
+ }
302
+ if (moduleFilePath.startsWith('file://')) {
303
+ // resolve will return file:// URL on Linux and MacOS expect on Windows
304
+ moduleFilePath = fileURLToPath(moduleFilePath);
305
+ }
306
+ debug('[importResolve] import.meta.resolve %o => %o', filepath, moduleFilePath);
307
+ const stat = fs.statSync(moduleFilePath, { throwIfNoEntry: false });
308
+ if (!stat?.isFile()) {
309
+ throw new TypeError(`Cannot find module ${filepath}, because ${moduleFilePath} does not exists`);
310
+ }
311
+ }
312
+ else {
313
+ moduleFilePath = getRequire().resolve(filepath);
314
+ }
315
+ }
316
+ debug('[importResolve:success] %o, options: %o => %o, isESM: %s', filepath, options, moduleFilePath, isESM);
317
+ return moduleFilePath;
209
318
  }
210
- async function importModule(filepath, options) {
211
- const moduleFilePath = importResolve(filepath, options);
212
- let obj;
213
- if (isESM) {
214
- const fileUrl = pathToFileURL(moduleFilePath).toString();
215
- obj = await import(fileUrl);
216
- debug("[importModule:success] await import %o", fileUrl);
217
- if (obj?.default?.__esModule === true && "default" in obj?.default) obj = obj.default;
218
- if (options?.importDefaultOnly) {
219
- if ("default" in obj) obj = obj.default;
220
- }
221
- } else {
222
- obj = __require(moduleFilePath);
223
- debug("[importModule] require %o", moduleFilePath);
224
- if (obj?.__esModule === true && "default" in obj) obj = obj.default;
225
- }
226
- if (debug.enabled) debug("[importModule] return %o => keys: %j, typeof obj: %s", filepath, obj ? Object.keys(obj) : obj, typeof obj);
227
- return obj;
319
+ export async function importModule(filepath, options) {
320
+ const moduleFilePath = importResolve(filepath, options);
321
+ let obj;
322
+ if (isESM) {
323
+ // esm
324
+ const fileUrl = pathToFileURL(moduleFilePath).toString();
325
+ obj = await import(__rewriteRelativeImportExtension(fileUrl));
326
+ debug('[importModule:success] await import %o', fileUrl);
327
+ // {
328
+ // default: { foo: 'bar', one: 1 },
329
+ // foo: 'bar',
330
+ // one: 1,
331
+ // [Symbol(Symbol.toStringTag)]: 'Module'
332
+ // }
333
+ if (obj?.default?.__esModule === true && 'default' in obj?.default) {
334
+ // 兼容 cjs 模拟 esm 的导出格式
335
+ // {
336
+ // __esModule: true,
337
+ // default: {
338
+ // __esModule: true,
339
+ // default: {
340
+ // fn: [Function: fn] { [length]: 0, [name]: 'fn' },
341
+ // foo: 'bar',
342
+ // one: 1
343
+ // }
344
+ // },
345
+ // [Symbol(Symbol.toStringTag)]: 'Module'
346
+ // }
347
+ // 兼容 ts module
348
+ // {
349
+ // default: {
350
+ // [__esModule]: true,
351
+ // default: <ref *1> [Function: default_1] {
352
+ // [length]: 0,
353
+ // [name]: 'default_1',
354
+ // [prototype]: { [constructor]: [Circular *1] }
355
+ // }
356
+ // },
357
+ // [Symbol(Symbol.toStringTag)]: 'Module'
358
+ // }
359
+ obj = obj.default;
360
+ }
361
+ if (options?.importDefaultOnly) {
362
+ if ('default' in obj) {
363
+ obj = obj.default;
364
+ }
365
+ }
366
+ }
367
+ else {
368
+ // commonjs
369
+ obj = require(moduleFilePath);
370
+ debug('[importModule] require %o', moduleFilePath);
371
+ if (obj?.__esModule === true && 'default' in obj) {
372
+ // 兼容 cjs 模拟 esm 的导出格式
373
+ // {
374
+ // __esModule: true,
375
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
376
+ // }
377
+ obj = obj.default;
378
+ }
379
+ }
380
+ if (debug.enabled) {
381
+ debug('[importModule] return %o => keys: %j, typeof obj: %s', filepath, obj ? Object.keys(obj) : obj, typeof obj);
382
+ }
383
+ return obj;
228
384
  }
229
-
230
- //#endregion
231
- export { getExtensions, getRequire, importModule, importResolve, isESM, isSupportTypeScript };
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBVzNDLHVCQUF1QjtBQUN2QixNQUFNLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLElBQUksQ0FBQztJQUNILG1EQUFtRDtJQUNuRCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFBQyxNQUFNLENBQUM7SUFDUCxtREFBbUQ7SUFDbkQsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNoQixDQUFDO0FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLElBQUksT0FB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