@eggjs/utils 4.1.1 → 4.1.3

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.
@@ -12,6 +12,8 @@ const node_path_1 = __importDefault(require("node:path"));
12
12
  const node_fs_1 = __importDefault(require("node:fs"));
13
13
  const debug = (0, node_util_1.debuglog)('@eggjs/utils/import');
14
14
  const isESM = typeof require === 'undefined';
15
+ const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
16
+ const supportImportMetaResolve = nodeMajorVersion >= 18;
15
17
  let _customRequire;
16
18
  function getRequire() {
17
19
  if (!_customRequire) {
@@ -33,17 +35,86 @@ function isSupportTypeScript() {
33
35
  }
34
36
  return _supportTypeScript;
35
37
  }
36
- function tryToGetTypeScriptMainFile(pkg, baseDir) {
38
+ function tryToResolveFromFile(filepath) {
39
+ // "type": "module", try index.mjs then index.js
40
+ const type = isESM ? 'module' : 'commonjs';
41
+ let mainIndexFile = '';
42
+ if (type === 'module') {
43
+ mainIndexFile = filepath + '.mjs';
44
+ if (node_fs_1.default.existsSync(mainIndexFile)) {
45
+ debug('[tryToResolveFromFile] %o, use index.mjs, type: %o', mainIndexFile, type);
46
+ return mainIndexFile;
47
+ }
48
+ mainIndexFile = filepath + '.js';
49
+ if (node_fs_1.default.existsSync(mainIndexFile)) {
50
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
51
+ return mainIndexFile;
52
+ }
53
+ }
54
+ else {
55
+ // "type": "commonjs", try index.js then index.cjs
56
+ mainIndexFile = filepath + '.cjs';
57
+ if (node_fs_1.default.existsSync(mainIndexFile)) {
58
+ debug('[tryToResolveFromFile] %o, use index.cjs, type: %o', mainIndexFile, type);
59
+ return mainIndexFile;
60
+ }
61
+ mainIndexFile = filepath + '.js';
62
+ if (node_fs_1.default.existsSync(mainIndexFile)) {
63
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
64
+ return mainIndexFile;
65
+ }
66
+ }
67
+ if (!isSupportTypeScript()) {
68
+ return;
69
+ }
70
+ // for the module under development
71
+ mainIndexFile = filepath + '.ts';
72
+ if (node_fs_1.default.existsSync(mainIndexFile)) {
73
+ debug('[tryToResolveFromFile] %o, use index.ts, type: %o', mainIndexFile, type);
74
+ return mainIndexFile;
75
+ }
76
+ }
77
+ function tryToResolveByDirnameFromPackage(dirname, pkg) {
37
78
  // try to read pkg.main or pkg.module first
38
79
  // "main": "./dist/commonjs/index.js",
39
80
  // "module": "./dist/esm/index.js"
40
81
  const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
41
82
  if (defaultMainFile) {
42
- const mainIndexFilePath = node_path_1.default.join(baseDir, defaultMainFile);
83
+ const mainIndexFilePath = node_path_1.default.join(dirname, defaultMainFile);
84
+ if (node_fs_1.default.existsSync(mainIndexFilePath)) {
85
+ debug('[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s', mainIndexFilePath, defaultMainFile, isESM);
86
+ return mainIndexFilePath;
87
+ }
88
+ }
89
+ // "type": "module", try index.mjs then index.js
90
+ const type = pkg?.type ?? (isESM ? 'module' : 'commonjs');
91
+ if (type === 'module') {
92
+ const mainIndexFilePath = node_path_1.default.join(dirname, 'index.mjs');
93
+ if (node_fs_1.default.existsSync(mainIndexFilePath)) {
94
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.mjs, pkg.type: %o', mainIndexFilePath, type);
95
+ return mainIndexFilePath;
96
+ }
97
+ const mainIndexMjsFilePath = node_path_1.default.join(dirname, 'index.js');
98
+ if (node_fs_1.default.existsSync(mainIndexMjsFilePath)) {
99
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexMjsFilePath, type);
100
+ return mainIndexMjsFilePath;
101
+ }
102
+ }
103
+ else {
104
+ // "type": "commonjs", try index.cjs then index.js
105
+ const mainIndexFilePath = node_path_1.default.join(dirname, 'index.cjs');
43
106
  if (node_fs_1.default.existsSync(mainIndexFilePath)) {
44
- debug('[tryToGetTypeScriptMainFile] %o, use pkg.main or pkg.module: %o, isESM: %s', mainIndexFilePath, defaultMainFile, isESM);
45
- return;
107
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
108
+ return mainIndexFilePath;
46
109
  }
110
+ const mainIndexCjsFilePath = node_path_1.default.join(dirname, 'index.js');
111
+ if (node_fs_1.default.existsSync(mainIndexCjsFilePath)) {
112
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexCjsFilePath, type);
113
+ return mainIndexCjsFilePath;
114
+ }
115
+ }
116
+ if (!isSupportTypeScript()) {
117
+ return;
47
118
  }
48
119
  // for the module under development
49
120
  // "tshy": {
@@ -52,57 +123,73 @@ function tryToGetTypeScriptMainFile(pkg, baseDir) {
52
123
  // ".": "./src/index.ts"
53
124
  // }
54
125
  // }
55
- const mainIndexFile = pkg.tshy?.exports?.['.'];
56
- if (mainIndexFile) {
57
- const mainIndexFilePath = node_path_1.default.join(baseDir, mainIndexFile);
58
- if (node_fs_1.default.existsSync(mainIndexFilePath)) {
59
- return mainIndexFilePath;
60
- }
126
+ const mainIndexFile = pkg.tshy?.exports?.['.'] ?? 'index.ts';
127
+ const mainIndexFilePath = node_path_1.default.join(dirname, mainIndexFile);
128
+ if (node_fs_1.default.existsSync(mainIndexFilePath)) {
129
+ return mainIndexFilePath;
130
+ }
131
+ }
132
+ function tryToResolveByDirname(dirname) {
133
+ const pkgFile = node_path_1.default.join(dirname, 'package.json');
134
+ if (node_fs_1.default.existsSync(pkgFile)) {
135
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgFile, 'utf-8'));
136
+ return tryToResolveByDirnameFromPackage(dirname, pkg);
61
137
  }
62
138
  }
63
139
  function importResolve(filepath, options) {
64
- // support typescript import on absolute path
65
- if (node_path_1.default.isAbsolute(filepath) && isSupportTypeScript()) {
66
- const pkgFile = node_path_1.default.join(filepath, 'package.json');
67
- if (node_fs_1.default.existsSync(pkgFile)) {
68
- const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgFile, 'utf-8'));
69
- const mainFile = tryToGetTypeScriptMainFile(pkg, filepath);
70
- if (mainFile) {
71
- debug('[importResolve] %o, use typescript main file: %o', filepath, mainFile);
72
- return mainFile;
140
+ let moduleFilePath;
141
+ if (node_path_1.default.isAbsolute(filepath)) {
142
+ const stat = node_fs_1.default.statSync(filepath, { throwIfNoEntry: false });
143
+ if (stat?.isDirectory()) {
144
+ moduleFilePath = tryToResolveByDirname(filepath);
145
+ if (moduleFilePath) {
146
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
147
+ return moduleFilePath;
148
+ }
149
+ }
150
+ if (!stat) {
151
+ moduleFilePath = tryToResolveFromFile(filepath);
152
+ if (moduleFilePath) {
153
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
154
+ return moduleFilePath;
155
+ }
156
+ }
157
+ }
158
+ if (isESM) {
159
+ if (supportImportMetaResolve) {
160
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
161
+ // @ts-ignore
162
+ moduleFilePath = require.resolve(filepath);
163
+ if (moduleFilePath.startsWith('file://')) {
164
+ // resolve will return file:// URL on Linux and MacOS expect on Windows
165
+ moduleFilePath = (0, node_url_1.fileURLToPath)(moduleFilePath);
73
166
  }
167
+ if (!node_fs_1.default.existsSync(moduleFilePath)) {
168
+ throw new TypeError(`Cannot find module ${filepath}, because ${moduleFilePath} does not exists`);
169
+ }
170
+ }
171
+ else {
172
+ moduleFilePath = getRequire().resolve(filepath);
74
173
  }
75
174
  }
76
- const cwd = process.cwd();
77
- const paths = options?.paths ?? [cwd];
78
- const moduleFilePath = getRequire().resolve(filepath, {
79
- paths,
80
- });
81
- debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
175
+ else {
176
+ const cwd = process.cwd();
177
+ const paths = options?.paths ?? [cwd];
178
+ moduleFilePath = require.resolve(filepath, {
179
+ paths,
180
+ });
181
+ }
182
+ debug('[importResolve] %o, options: %o => %o, isESM: %s', filepath, options, moduleFilePath, isESM);
82
183
  return moduleFilePath;
83
184
  }
84
185
  async function importModule(filepath, options) {
85
186
  const moduleFilePath = importResolve(filepath, options);
86
187
  let obj;
87
- if (typeof require === 'function') {
88
- // commonjs
89
- obj = require(moduleFilePath);
90
- debug('[importModule] require %o => %o', filepath, obj);
91
- if (obj?.__esModule === true && 'default' in obj) {
92
- // 兼容 cjs 模拟 esm 的导出格式
93
- // {
94
- // __esModule: true,
95
- // default: { fn: [Function: fn], foo: 'bar', one: 1 }
96
- // }
97
- obj = obj.default;
98
- }
99
- }
100
- else {
188
+ if (isESM) {
101
189
  // esm
102
- debug('[importModule] await import start: %o', filepath);
103
190
  const fileUrl = (0, node_url_1.pathToFileURL)(moduleFilePath).toString();
104
191
  obj = await import(fileUrl);
105
- debug('[importModule] await import end: %o => %o', filepath, obj);
192
+ debug('[importModule] await import %o', fileUrl);
106
193
  // {
107
194
  // default: { foo: 'bar', one: 1 },
108
195
  // foo: 'bar',
@@ -143,7 +230,22 @@ async function importModule(filepath, options) {
143
230
  }
144
231
  }
145
232
  }
146
- debug('[importModule] return %o => %o', filepath, obj);
233
+ else {
234
+ // commonjs
235
+ obj = require(moduleFilePath);
236
+ debug('[importModule] require %o', moduleFilePath);
237
+ if (obj?.__esModule === true && 'default' in obj) {
238
+ // 兼容 cjs 模拟 esm 的导出格式
239
+ // {
240
+ // __esModule: true,
241
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
242
+ // }
243
+ obj = obj.default;
244
+ }
245
+ }
246
+ if (debug.enabled) {
247
+ debug('[importModule] return %o => keys: %j', filepath, obj ? Object.keys(obj) : obj);
248
+ }
147
249
  return obj;
148
250
  }
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVFQSxzQ0FvQkM7QUFFRCxvQ0ErREM7QUE1SkQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBeUM7QUFDekMsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFFN0MsSUFBSSxjQUEyQixDQUFDO0FBQ2hDLFNBQVMsVUFBVTtJQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sY0FBYyxHQUFHLElBQUEsMkJBQWEsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxJQUFJLGtCQUF1QyxDQUFDO0FBQzVDLFNBQVMsbUJBQW1CO0lBQzFCLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQzNDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUM7UUFDckQsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxHQUFRLEVBQUUsT0FBZTtJQUMzRCwyQ0FBMkM7SUFDM0Msc0NBQXNDO0lBQ3RDLGtDQUFrQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNsRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLE1BQU0saUJBQWlCLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlELElBQUksaUJBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyw0RUFBNEUsRUFDaEYsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLDBDQUEwQztJQUMxQyw0QkFBNEI7SUFDNUIsTUFBTTtJQUNOLElBQUk7SUFDSixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxpQkFBaUIsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUQsSUFBSSxpQkFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBZ0IsRUFBRSxPQUE4QjtJQUM1RSw2Q0FBNkM7SUFDN0MsSUFBSSxtQkFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxFQUFFLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksaUJBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sUUFBUSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMzRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLEtBQUssQ0FBQyxrREFBa0QsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlFLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxQixNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUUsR0FBRyxDQUFFLENBQUM7SUFDeEMsTUFBTSxjQUFjLEdBQUcsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtRQUNwRCxLQUFLO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbEYsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVNLEtBQUssVUFBVSxZQUFZLENBQUMsUUFBZ0IsRUFBRSxPQUE2QjtJQUNoRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxXQUFXO1FBQ1gsR0FBRyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsaUNBQWlDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksR0FBRyxFQUFFLFVBQVUsS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pELHNCQUFzQjtZQUN0QixJQUFJO1lBQ0osc0JBQXNCO1lBQ3RCLHdEQUF3RDtZQUN4RCxJQUFJO1lBQ0osR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTTtRQUNOLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFBLHdCQUFhLEVBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekQsR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSTtRQUNKLHFDQUFxQztRQUNyQyxnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLDJDQUEyQztRQUMzQyxJQUFJO1FBQ0osSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNuRSxzQkFBc0I7WUFDdEIsSUFBSTtZQUNKLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2Ysd0JBQXdCO1lBQ3hCLGlCQUFpQjtZQUNqQiwwREFBMEQ7WUFDMUQsb0JBQW9CO1lBQ3BCLGVBQWU7WUFDZixRQUFRO1lBQ1IsT0FBTztZQUNQLDJDQUEyQztZQUMzQyxJQUFJO1lBQ0osZUFBZTtZQUNmLElBQUk7WUFDSixlQUFlO1lBQ2YsMEJBQTBCO1lBQzFCLGdEQUFnRDtZQUNoRCxxQkFBcUI7WUFDckIsNkJBQTZCO1lBQzdCLHNEQUFzRDtZQUN0RCxRQUFRO1lBQ1IsT0FBTztZQUNQLDJDQUEyQztZQUMzQyxJQUFJO1lBQ0osR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDL0IsSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIn0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVKQSxzQ0E2Q0M7QUFFRCxvQ0FnRUM7QUF0UUQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBd0Q7QUFDeEQsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsSUFBQSwyQkFBYSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUss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
@@ -1,10 +1,12 @@
1
1
  import { debuglog } from 'node:util';
2
2
  import { createRequire } from 'node:module';
3
- import { pathToFileURL } from 'node:url';
3
+ import { pathToFileURL, fileURLToPath } from 'node:url';
4
4
  import path from 'node:path';
5
5
  import fs from 'node:fs';
6
6
  const debug = debuglog('@eggjs/utils/import');
7
7
  const isESM = typeof require === 'undefined';
8
+ const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
9
+ const supportImportMetaResolve = nodeMajorVersion >= 18;
8
10
  let _customRequire;
9
11
  function getRequire() {
10
12
  if (!_customRequire) {
@@ -26,17 +28,86 @@ function isSupportTypeScript() {
26
28
  }
27
29
  return _supportTypeScript;
28
30
  }
29
- function tryToGetTypeScriptMainFile(pkg, baseDir) {
31
+ function tryToResolveFromFile(filepath) {
32
+ // "type": "module", try index.mjs then index.js
33
+ const type = isESM ? 'module' : 'commonjs';
34
+ let mainIndexFile = '';
35
+ if (type === 'module') {
36
+ mainIndexFile = filepath + '.mjs';
37
+ if (fs.existsSync(mainIndexFile)) {
38
+ debug('[tryToResolveFromFile] %o, use index.mjs, type: %o', mainIndexFile, type);
39
+ return mainIndexFile;
40
+ }
41
+ mainIndexFile = filepath + '.js';
42
+ if (fs.existsSync(mainIndexFile)) {
43
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
44
+ return mainIndexFile;
45
+ }
46
+ }
47
+ else {
48
+ // "type": "commonjs", try index.js then index.cjs
49
+ mainIndexFile = filepath + '.cjs';
50
+ if (fs.existsSync(mainIndexFile)) {
51
+ debug('[tryToResolveFromFile] %o, use index.cjs, type: %o', mainIndexFile, type);
52
+ return mainIndexFile;
53
+ }
54
+ mainIndexFile = filepath + '.js';
55
+ if (fs.existsSync(mainIndexFile)) {
56
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
57
+ return mainIndexFile;
58
+ }
59
+ }
60
+ if (!isSupportTypeScript()) {
61
+ return;
62
+ }
63
+ // for the module under development
64
+ mainIndexFile = filepath + '.ts';
65
+ if (fs.existsSync(mainIndexFile)) {
66
+ debug('[tryToResolveFromFile] %o, use index.ts, type: %o', mainIndexFile, type);
67
+ return mainIndexFile;
68
+ }
69
+ }
70
+ function tryToResolveByDirnameFromPackage(dirname, pkg) {
30
71
  // try to read pkg.main or pkg.module first
31
72
  // "main": "./dist/commonjs/index.js",
32
73
  // "module": "./dist/esm/index.js"
33
74
  const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
34
75
  if (defaultMainFile) {
35
- const mainIndexFilePath = path.join(baseDir, defaultMainFile);
76
+ const mainIndexFilePath = path.join(dirname, defaultMainFile);
77
+ if (fs.existsSync(mainIndexFilePath)) {
78
+ debug('[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s', mainIndexFilePath, defaultMainFile, isESM);
79
+ return mainIndexFilePath;
80
+ }
81
+ }
82
+ // "type": "module", try index.mjs then index.js
83
+ const type = pkg?.type ?? (isESM ? 'module' : 'commonjs');
84
+ if (type === 'module') {
85
+ const mainIndexFilePath = path.join(dirname, 'index.mjs');
86
+ if (fs.existsSync(mainIndexFilePath)) {
87
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.mjs, pkg.type: %o', mainIndexFilePath, type);
88
+ return mainIndexFilePath;
89
+ }
90
+ const mainIndexMjsFilePath = path.join(dirname, 'index.js');
91
+ if (fs.existsSync(mainIndexMjsFilePath)) {
92
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexMjsFilePath, type);
93
+ return mainIndexMjsFilePath;
94
+ }
95
+ }
96
+ else {
97
+ // "type": "commonjs", try index.cjs then index.js
98
+ const mainIndexFilePath = path.join(dirname, 'index.cjs');
36
99
  if (fs.existsSync(mainIndexFilePath)) {
37
- debug('[tryToGetTypeScriptMainFile] %o, use pkg.main or pkg.module: %o, isESM: %s', mainIndexFilePath, defaultMainFile, isESM);
38
- return;
100
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
101
+ return mainIndexFilePath;
39
102
  }
103
+ const mainIndexCjsFilePath = path.join(dirname, 'index.js');
104
+ if (fs.existsSync(mainIndexCjsFilePath)) {
105
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexCjsFilePath, type);
106
+ return mainIndexCjsFilePath;
107
+ }
108
+ }
109
+ if (!isSupportTypeScript()) {
110
+ return;
40
111
  }
41
112
  // for the module under development
42
113
  // "tshy": {
@@ -45,57 +116,73 @@ function tryToGetTypeScriptMainFile(pkg, baseDir) {
45
116
  // ".": "./src/index.ts"
46
117
  // }
47
118
  // }
48
- const mainIndexFile = pkg.tshy?.exports?.['.'];
49
- if (mainIndexFile) {
50
- const mainIndexFilePath = path.join(baseDir, mainIndexFile);
51
- if (fs.existsSync(mainIndexFilePath)) {
52
- return mainIndexFilePath;
53
- }
119
+ const mainIndexFile = pkg.tshy?.exports?.['.'] ?? 'index.ts';
120
+ const mainIndexFilePath = path.join(dirname, mainIndexFile);
121
+ if (fs.existsSync(mainIndexFilePath)) {
122
+ return mainIndexFilePath;
123
+ }
124
+ }
125
+ function tryToResolveByDirname(dirname) {
126
+ const pkgFile = path.join(dirname, 'package.json');
127
+ if (fs.existsSync(pkgFile)) {
128
+ const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
129
+ return tryToResolveByDirnameFromPackage(dirname, pkg);
54
130
  }
55
131
  }
56
132
  export function importResolve(filepath, options) {
57
- // support typescript import on absolute path
58
- if (path.isAbsolute(filepath) && isSupportTypeScript()) {
59
- const pkgFile = path.join(filepath, 'package.json');
60
- if (fs.existsSync(pkgFile)) {
61
- const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
62
- const mainFile = tryToGetTypeScriptMainFile(pkg, filepath);
63
- if (mainFile) {
64
- debug('[importResolve] %o, use typescript main file: %o', filepath, mainFile);
65
- return mainFile;
133
+ let moduleFilePath;
134
+ if (path.isAbsolute(filepath)) {
135
+ const stat = fs.statSync(filepath, { throwIfNoEntry: false });
136
+ if (stat?.isDirectory()) {
137
+ moduleFilePath = tryToResolveByDirname(filepath);
138
+ if (moduleFilePath) {
139
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
140
+ return moduleFilePath;
141
+ }
142
+ }
143
+ if (!stat) {
144
+ moduleFilePath = tryToResolveFromFile(filepath);
145
+ if (moduleFilePath) {
146
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
147
+ return moduleFilePath;
148
+ }
149
+ }
150
+ }
151
+ if (isESM) {
152
+ if (supportImportMetaResolve) {
153
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
154
+ // @ts-ignore
155
+ moduleFilePath = import.meta.resolve(filepath);
156
+ if (moduleFilePath.startsWith('file://')) {
157
+ // resolve will return file:// URL on Linux and MacOS expect on Windows
158
+ moduleFilePath = fileURLToPath(moduleFilePath);
66
159
  }
160
+ if (!fs.existsSync(moduleFilePath)) {
161
+ throw new TypeError(`Cannot find module ${filepath}, because ${moduleFilePath} does not exists`);
162
+ }
163
+ }
164
+ else {
165
+ moduleFilePath = getRequire().resolve(filepath);
67
166
  }
68
167
  }
69
- const cwd = process.cwd();
70
- const paths = options?.paths ?? [cwd];
71
- const moduleFilePath = getRequire().resolve(filepath, {
72
- paths,
73
- });
74
- debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
168
+ else {
169
+ const cwd = process.cwd();
170
+ const paths = options?.paths ?? [cwd];
171
+ moduleFilePath = require.resolve(filepath, {
172
+ paths,
173
+ });
174
+ }
175
+ debug('[importResolve] %o, options: %o => %o, isESM: %s', filepath, options, moduleFilePath, isESM);
75
176
  return moduleFilePath;
76
177
  }
77
178
  export async function importModule(filepath, options) {
78
179
  const moduleFilePath = importResolve(filepath, options);
79
180
  let obj;
80
- if (typeof require === 'function') {
81
- // commonjs
82
- obj = require(moduleFilePath);
83
- debug('[importModule] require %o => %o', filepath, obj);
84
- if (obj?.__esModule === true && 'default' in obj) {
85
- // 兼容 cjs 模拟 esm 的导出格式
86
- // {
87
- // __esModule: true,
88
- // default: { fn: [Function: fn], foo: 'bar', one: 1 }
89
- // }
90
- obj = obj.default;
91
- }
92
- }
93
- else {
181
+ if (isESM) {
94
182
  // esm
95
- debug('[importModule] await import start: %o', filepath);
96
183
  const fileUrl = pathToFileURL(moduleFilePath).toString();
97
184
  obj = await import(fileUrl);
98
- debug('[importModule] await import end: %o => %o', filepath, obj);
185
+ debug('[importModule] await import %o', fileUrl);
99
186
  // {
100
187
  // default: { foo: 'bar', one: 1 },
101
188
  // foo: 'bar',
@@ -136,7 +223,22 @@ export async function importModule(filepath, options) {
136
223
  }
137
224
  }
138
225
  }
139
- debug('[importModule] return %o => %o', filepath, obj);
226
+ else {
227
+ // commonjs
228
+ obj = require(moduleFilePath);
229
+ debug('[importModule] require %o', moduleFilePath);
230
+ if (obj?.__esModule === true && 'default' in obj) {
231
+ // 兼容 cjs 模拟 esm 的导出格式
232
+ // {
233
+ // __esModule: true,
234
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
235
+ // }
236
+ obj = obj.default;
237
+ }
238
+ }
239
+ if (debug.enabled) {
240
+ debug('[importModule] return %o => keys: %j', filepath, obj ? Object.keys(obj) : obj);
241
+ }
140
242
  return obj;
141
243
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBVzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxLQUFLLFdBQVcsQ0FBQztBQUU3QyxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQztRQUNyRCxLQUFLLENBQUMsMENBQTBDLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLEdBQVEsRUFBRSxPQUFlO0lBQzNELDJDQUEyQztJQUMzQyxzQ0FBc0M7SUFDdEMsa0NBQWtDO0lBQ2xDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2xFLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM5RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyw0RUFBNEUsRUFDaEYsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLDBDQUEwQztJQUMxQyw0QkFBNEI7SUFDNUIsTUFBTTtJQUNOLElBQUk7SUFDSixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFnQixFQUFFLE9BQThCO0lBQzVFLDZDQUE2QztJQUM3QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMxRCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsa0RBQWtELEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFFLEdBQUcsQ0FBRSxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7UUFDcEQsS0FBSztLQUNOLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQTZCO0lBQ2hGLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLFdBQVc7UUFDWCxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLEVBQUUsVUFBVSxLQUFLLElBQUksSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7WUFDakQsc0JBQXNCO1lBQ3RCLElBQUk7WUFDSixzQkFBc0I7WUFDdEIsd0RBQXdEO1lBQ3hELElBQUk7WUFDSixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNO1FBQ04sS0FBSyxDQUFDLHVDQUF1QyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJO1FBQ0oscUNBQXFDO1FBQ3JDLGdCQUFnQjtRQUNoQixZQUFZO1FBQ1osMkNBQTJDO1FBQzNDLElBQUk7UUFDSixJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUFLLElBQUksSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ25FLHNCQUFzQjtZQUN0QixJQUFJO1lBQ0osc0JBQXNCO1lBQ3RCLGVBQWU7WUFDZix3QkFBd0I7WUFDeEIsaUJBQWlCO1lBQ2pCLDBEQUEwRDtZQUMxRCxvQkFBb0I7WUFDcEIsZUFBZTtZQUNmLFFBQVE7WUFDUixPQUFPO1lBQ1AsMkNBQTJDO1lBQzNDLElBQUk7WUFDSixlQUFlO1lBQ2YsSUFBSTtZQUNKLGVBQWU7WUFDZiwwQkFBMEI7WUFDMUIsZ0RBQWdEO1lBQ2hELHFCQUFxQjtZQUNyQiw2QkFBNkI7WUFDN0Isc0RBQXNEO1lBQ3RELFFBQVE7WUFDUixPQUFPO1lBQ1AsMkNBQTJDO1lBQzNDLElBQUk7WUFDSixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQixJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMifQ==
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVB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
package/dist/package.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@eggjs/utils",
3
- "version": "4.1.1"
3
+ "version": "4.1.3"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/utils",
3
- "version": "4.1.1",
3
+ "version": "4.1.3",
4
4
  "engine": {
5
5
  "node": ">=18.19.0"
6
6
  },
@@ -10,12 +10,13 @@
10
10
  "description": "Utils for all egg projects",
11
11
  "scripts": {
12
12
  "lint": "eslint src test --ext ts",
13
- "pretest": "npm run prepublishOnly",
14
- "test": "npm run lint -- --fix && npm run test-local",
13
+ "pretest": "npm run clean && npm run lint -- --fix && npm run prepublishOnly",
14
+ "test": "npm run test-local",
15
15
  "test-local": "egg-bin test",
16
- "preci": "npm run prepublishOnly",
17
- "ci": "npm run lint && egg-bin cov && npm run prepublishOnly",
18
- "prepublishOnly": "tshy && tshy-after"
16
+ "preci": "npm run clean && npm run lint && npm run prepublishOnly",
17
+ "ci": "egg-bin cov",
18
+ "clean": "rimraf dist",
19
+ "prepublishOnly": "tshy && tshy-after && attw --pack"
19
20
  },
20
21
  "keywords": [
21
22
  "egg",
@@ -29,6 +30,7 @@
29
30
  "license": "MIT",
30
31
  "dependencies": {},
31
32
  "devDependencies": {
33
+ "@arethetypeswrong/cli": "^0.17.2",
32
34
  "@eggjs/tsconfig": "1",
33
35
  "@types/mocha": "10",
34
36
  "@types/node": "22",
@@ -38,6 +40,7 @@
38
40
  "eslint-config-egg": "14",
39
41
  "mm": "3",
40
42
  "npminstall": "7",
43
+ "rimraf": "6",
41
44
  "runscript": "2",
42
45
  "tshy": "3",
43
46
  "tshy-after": "1",
package/src/import.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { debuglog } from 'node:util';
2
2
  import { createRequire } from 'node:module';
3
- import { pathToFileURL } from 'node:url';
3
+ import { pathToFileURL, fileURLToPath } from 'node:url';
4
4
  import path from 'node:path';
5
5
  import fs from 'node:fs';
6
6
 
@@ -16,6 +16,8 @@ export interface ImportModuleOptions extends ImportResolveOptions {
16
16
  }
17
17
 
18
18
  const isESM = typeof require === 'undefined';
19
+ const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
20
+ const supportImportMetaResolve = nodeMajorVersion >= 18;
19
21
 
20
22
  let _customRequire: NodeRequire;
21
23
  function getRequire() {
@@ -39,20 +41,92 @@ function isSupportTypeScript() {
39
41
  return _supportTypeScript;
40
42
  }
41
43
 
42
- function tryToGetTypeScriptMainFile(pkg: any, baseDir: string): string | undefined {
44
+ function tryToResolveFromFile(filepath: string): string | undefined {
45
+ // "type": "module", try index.mjs then index.js
46
+ const type = isESM ? 'module' : 'commonjs';
47
+ let mainIndexFile = '';
48
+ if (type === 'module') {
49
+ mainIndexFile = filepath + '.mjs';
50
+ if (fs.existsSync(mainIndexFile)) {
51
+ debug('[tryToResolveFromFile] %o, use index.mjs, type: %o', mainIndexFile, type);
52
+ return mainIndexFile;
53
+ }
54
+ mainIndexFile = filepath + '.js';
55
+ if (fs.existsSync(mainIndexFile)) {
56
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
57
+ return mainIndexFile;
58
+ }
59
+ } else {
60
+ // "type": "commonjs", try index.js then index.cjs
61
+ mainIndexFile = filepath + '.cjs';
62
+ if (fs.existsSync(mainIndexFile)) {
63
+ debug('[tryToResolveFromFile] %o, use index.cjs, type: %o', mainIndexFile, type);
64
+ return mainIndexFile;
65
+ }
66
+ mainIndexFile = filepath + '.js';
67
+ if (fs.existsSync(mainIndexFile)) {
68
+ debug('[tryToResolveFromFile] %o, use index.js, type: %o', mainIndexFile, type);
69
+ return mainIndexFile;
70
+ }
71
+ }
72
+
73
+ if (!isSupportTypeScript()) {
74
+ return;
75
+ }
76
+
77
+ // for the module under development
78
+ mainIndexFile = filepath + '.ts';
79
+ if (fs.existsSync(mainIndexFile)) {
80
+ debug('[tryToResolveFromFile] %o, use index.ts, type: %o', mainIndexFile, type);
81
+ return mainIndexFile;
82
+ }
83
+ }
84
+
85
+ function tryToResolveByDirnameFromPackage(dirname: string, pkg: any): string | undefined {
43
86
  // try to read pkg.main or pkg.module first
44
87
  // "main": "./dist/commonjs/index.js",
45
88
  // "module": "./dist/esm/index.js"
46
89
  const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
47
90
  if (defaultMainFile) {
48
- const mainIndexFilePath = path.join(baseDir, defaultMainFile);
91
+ const mainIndexFilePath = path.join(dirname, defaultMainFile);
49
92
  if (fs.existsSync(mainIndexFilePath)) {
50
- debug('[tryToGetTypeScriptMainFile] %o, use pkg.main or pkg.module: %o, isESM: %s',
93
+ debug('[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s',
51
94
  mainIndexFilePath, defaultMainFile, isESM);
52
- return;
95
+ return mainIndexFilePath;
53
96
  }
54
97
  }
55
98
 
99
+ // "type": "module", try index.mjs then index.js
100
+ const type = pkg?.type ?? (isESM ? 'module' : 'commonjs');
101
+ if (type === 'module') {
102
+ const mainIndexFilePath = path.join(dirname, 'index.mjs');
103
+ if (fs.existsSync(mainIndexFilePath)) {
104
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.mjs, pkg.type: %o', mainIndexFilePath, type);
105
+ return mainIndexFilePath;
106
+ }
107
+ const mainIndexMjsFilePath = path.join(dirname, 'index.js');
108
+ if (fs.existsSync(mainIndexMjsFilePath)) {
109
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexMjsFilePath, type);
110
+ return mainIndexMjsFilePath;
111
+ }
112
+ } else {
113
+ // "type": "commonjs", try index.cjs then index.js
114
+ const mainIndexFilePath = path.join(dirname, 'index.cjs');
115
+ if (fs.existsSync(mainIndexFilePath)) {
116
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
117
+ return mainIndexFilePath;
118
+ }
119
+ const mainIndexCjsFilePath = path.join(dirname, 'index.js');
120
+ if (fs.existsSync(mainIndexCjsFilePath)) {
121
+ debug('[tryToResolveByDirnameFromPackage] %o, use index.js, pkg.type: %o', mainIndexCjsFilePath, type);
122
+ return mainIndexCjsFilePath;
123
+ }
124
+ }
125
+
126
+ if (!isSupportTypeScript()) {
127
+ return;
128
+ }
129
+
56
130
  // for the module under development
57
131
  // "tshy": {
58
132
  // "exports": {
@@ -60,58 +134,76 @@ function tryToGetTypeScriptMainFile(pkg: any, baseDir: string): string | undefin
60
134
  // ".": "./src/index.ts"
61
135
  // }
62
136
  // }
63
- const mainIndexFile = pkg.tshy?.exports?.['.'];
64
- if (mainIndexFile) {
65
- const mainIndexFilePath = path.join(baseDir, mainIndexFile);
66
- if (fs.existsSync(mainIndexFilePath)) {
67
- return mainIndexFilePath;
68
- }
137
+ const mainIndexFile = pkg.tshy?.exports?.['.'] ?? 'index.ts';
138
+ const mainIndexFilePath = path.join(dirname, mainIndexFile);
139
+ if (fs.existsSync(mainIndexFilePath)) {
140
+ return mainIndexFilePath;
141
+ }
142
+ }
143
+
144
+ function tryToResolveByDirname(dirname: string): string | undefined {
145
+ const pkgFile = path.join(dirname, 'package.json');
146
+ if (fs.existsSync(pkgFile)) {
147
+ const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
148
+ return tryToResolveByDirnameFromPackage(dirname, pkg);
69
149
  }
70
150
  }
71
151
 
72
152
  export function importResolve(filepath: string, options?: ImportResolveOptions) {
73
- // support typescript import on absolute path
74
- if (path.isAbsolute(filepath) && isSupportTypeScript()) {
75
- const pkgFile = path.join(filepath, 'package.json');
76
- if (fs.existsSync(pkgFile)) {
77
- const pkg = JSON.parse(fs.readFileSync(pkgFile, 'utf-8'));
78
- const mainFile = tryToGetTypeScriptMainFile(pkg, filepath);
79
- if (mainFile) {
80
- debug('[importResolve] %o, use typescript main file: %o', filepath, mainFile);
81
- return mainFile;
153
+ let moduleFilePath: string | undefined;
154
+ if (path.isAbsolute(filepath)) {
155
+ const stat = fs.statSync(filepath, { throwIfNoEntry: false });
156
+ if (stat?.isDirectory()) {
157
+ moduleFilePath = tryToResolveByDirname(filepath);
158
+ if (moduleFilePath) {
159
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
160
+ return moduleFilePath;
82
161
  }
83
162
  }
163
+ if (!stat) {
164
+ moduleFilePath = tryToResolveFromFile(filepath);
165
+ if (moduleFilePath) {
166
+ debug('[importResolve] %o => %o', filepath, moduleFilePath);
167
+ return moduleFilePath;
168
+ }
169
+ }
170
+ }
171
+
172
+ if (isESM) {
173
+ if (supportImportMetaResolve) {
174
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
175
+ // @ts-ignore
176
+ moduleFilePath = import.meta.resolve(filepath);
177
+ if (moduleFilePath.startsWith('file://')) {
178
+ // resolve will return file:// URL on Linux and MacOS expect on Windows
179
+ moduleFilePath = fileURLToPath(moduleFilePath);
180
+ }
181
+ if (!fs.existsSync(moduleFilePath)) {
182
+ throw new TypeError(`Cannot find module ${filepath}, because ${moduleFilePath} does not exists`);
183
+ }
184
+ } else {
185
+ moduleFilePath = getRequire().resolve(filepath);
186
+ }
187
+ } else {
188
+ const cwd = process.cwd();
189
+ const paths = options?.paths ?? [ cwd ];
190
+ moduleFilePath = require.resolve(filepath, {
191
+ paths,
192
+ });
84
193
  }
85
- const cwd = process.cwd();
86
- const paths = options?.paths ?? [ cwd ];
87
- const moduleFilePath = getRequire().resolve(filepath, {
88
- paths,
89
- });
90
- debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
194
+ debug('[importResolve] %o, options: %o => %o, isESM: %s',
195
+ filepath, options, moduleFilePath, isESM);
91
196
  return moduleFilePath;
92
197
  }
93
198
 
94
199
  export async function importModule(filepath: string, options?: ImportModuleOptions) {
95
200
  const moduleFilePath = importResolve(filepath, options);
96
201
  let obj: any;
97
- if (typeof require === 'function') {
98
- // commonjs
99
- obj = require(moduleFilePath);
100
- debug('[importModule] require %o => %o', filepath, obj);
101
- if (obj?.__esModule === true && 'default' in obj) {
102
- // 兼容 cjs 模拟 esm 的导出格式
103
- // {
104
- // __esModule: true,
105
- // default: { fn: [Function: fn], foo: 'bar', one: 1 }
106
- // }
107
- obj = obj.default;
108
- }
109
- } else {
202
+ if (isESM) {
110
203
  // esm
111
- debug('[importModule] await import start: %o', filepath);
112
204
  const fileUrl = pathToFileURL(moduleFilePath).toString();
113
205
  obj = await import(fileUrl);
114
- debug('[importModule] await import end: %o => %o', filepath, obj);
206
+ debug('[importModule] await import %o', fileUrl);
115
207
  // {
116
208
  // default: { foo: 'bar', one: 1 },
117
209
  // foo: 'bar',
@@ -151,7 +243,21 @@ export async function importModule(filepath: string, options?: ImportModuleOptio
151
243
  obj = obj.default;
152
244
  }
153
245
  }
246
+ } else {
247
+ // commonjs
248
+ obj = require(moduleFilePath);
249
+ debug('[importModule] require %o', moduleFilePath);
250
+ if (obj?.__esModule === true && 'default' in obj) {
251
+ // 兼容 cjs 模拟 esm 的导出格式
252
+ // {
253
+ // __esModule: true,
254
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
255
+ // }
256
+ obj = obj.default;
257
+ }
258
+ }
259
+ if (debug.enabled) {
260
+ debug('[importModule] return %o => keys: %j', filepath, obj ? Object.keys(obj) : obj);
154
261
  }
155
- debug('[importModule] return %o => %o', filepath, obj);
156
262
  return obj;
157
263
  }