@eggjs/utils 4.1.1 → 4.1.2

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,55 +123,69 @@ 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
  }
74
167
  }
168
+ else {
169
+ moduleFilePath = getRequire().resolve(filepath);
170
+ }
171
+ }
172
+ else {
173
+ const cwd = process.cwd();
174
+ const paths = options?.paths ?? [cwd];
175
+ moduleFilePath = require.resolve(filepath, {
176
+ paths,
177
+ });
75
178
  }
76
- const cwd = process.cwd();
77
- const paths = options?.paths ?? [cwd];
78
- const moduleFilePath = getRequire().resolve(filepath, {
79
- paths,
80
- });
81
179
  debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
82
180
  return moduleFilePath;
83
181
  }
84
182
  async function importModule(filepath, options) {
85
183
  const moduleFilePath = importResolve(filepath, options);
86
184
  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 {
185
+ if (isESM) {
101
186
  // esm
102
- debug('[importModule] await import start: %o', filepath);
103
187
  const fileUrl = (0, node_url_1.pathToFileURL)(moduleFilePath).toString();
188
+ debug('[importModule] await import start: %o', fileUrl);
104
189
  obj = await import(fileUrl);
105
190
  debug('[importModule] await import end: %o => %o', filepath, obj);
106
191
  // {
@@ -143,7 +228,20 @@ async function importModule(filepath, options) {
143
228
  }
144
229
  }
145
230
  }
231
+ else {
232
+ // commonjs
233
+ obj = require(moduleFilePath);
234
+ debug('[importModule] require %o => %o', filepath, obj);
235
+ if (obj?.__esModule === true && 'default' in obj) {
236
+ // 兼容 cjs 模拟 esm 的导出格式
237
+ // {
238
+ // __esModule: true,
239
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
240
+ // }
241
+ obj = obj.default;
242
+ }
243
+ }
146
244
  debug('[importModule] return %o => %o', filepath, obj);
147
245
  return obj;
148
246
  }
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVFQSxzQ0FvQkM7QUFFRCxvQ0ErREM7QUE1SkQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBeUM7QUFDekMsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFFN0MsSUFBSSxjQUEyQixDQUFDO0FBQ2hDLFNBQVMsVUFBVTtJQUNqQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sY0FBYyxHQUFHLElBQUEsMkJBQWEsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxJQUFJLGtCQUF1QyxDQUFDO0FBQzVDLFNBQVMsbUJBQW1CO0lBQzFCLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQzNDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUM7UUFDckQsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxHQUFRLEVB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
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVKQSxzQ0F5Q0M7QUFFRCxvQ0ErREM7QUFqUUQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBd0Q7QUFDeEQsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsSUFBQSwyQkFBYSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUss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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,55 +116,69 @@ 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
  }
67
160
  }
161
+ else {
162
+ moduleFilePath = getRequire().resolve(filepath);
163
+ }
164
+ }
165
+ else {
166
+ const cwd = process.cwd();
167
+ const paths = options?.paths ?? [cwd];
168
+ moduleFilePath = require.resolve(filepath, {
169
+ paths,
170
+ });
68
171
  }
69
- const cwd = process.cwd();
70
- const paths = options?.paths ?? [cwd];
71
- const moduleFilePath = getRequire().resolve(filepath, {
72
- paths,
73
- });
74
172
  debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
75
173
  return moduleFilePath;
76
174
  }
77
175
  export async function importModule(filepath, options) {
78
176
  const moduleFilePath = importResolve(filepath, options);
79
177
  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 {
178
+ if (isESM) {
94
179
  // esm
95
- debug('[importModule] await import start: %o', filepath);
96
180
  const fileUrl = pathToFileURL(moduleFilePath).toString();
181
+ debug('[importModule] await import start: %o', fileUrl);
97
182
  obj = await import(fileUrl);
98
183
  debug('[importModule] await import end: %o => %o', filepath, obj);
99
184
  // {
@@ -136,7 +221,20 @@ export async function importModule(filepath, options) {
136
221
  }
137
222
  }
138
223
  }
224
+ else {
225
+ // commonjs
226
+ obj = require(moduleFilePath);
227
+ debug('[importModule] require %o => %o', filepath, obj);
228
+ if (obj?.__esModule === true && 'default' in obj) {
229
+ // 兼容 cjs 模拟 esm 的导出格式
230
+ // {
231
+ // __esModule: true,
232
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
233
+ // }
234
+ obj = obj.default;
235
+ }
236
+ }
139
237
  debug('[importModule] return %o => %o', filepath, obj);
140
238
  return obj;
141
239
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBVzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxLQUFLLFdBQVcsQ0FBQztBQUU3QyxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQztRQUNyRCxLQUFLLENBQUMsMENBQTBDLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxD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
240
+ //# 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.2"
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.2",
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,33 +134,60 @@ 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
+ } else {
182
+ moduleFilePath = getRequire().resolve(filepath);
183
+ }
184
+ } else {
185
+ const cwd = process.cwd();
186
+ const paths = options?.paths ?? [ cwd ];
187
+ moduleFilePath = require.resolve(filepath, {
188
+ paths,
189
+ });
84
190
  }
85
- const cwd = process.cwd();
86
- const paths = options?.paths ?? [ cwd ];
87
- const moduleFilePath = getRequire().resolve(filepath, {
88
- paths,
89
- });
90
191
  debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
91
192
  return moduleFilePath;
92
193
  }
@@ -94,22 +195,10 @@ export function importResolve(filepath: string, options?: ImportResolveOptions)
94
195
  export async function importModule(filepath: string, options?: ImportModuleOptions) {
95
196
  const moduleFilePath = importResolve(filepath, options);
96
197
  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 {
198
+ if (isESM) {
110
199
  // esm
111
- debug('[importModule] await import start: %o', filepath);
112
200
  const fileUrl = pathToFileURL(moduleFilePath).toString();
201
+ debug('[importModule] await import start: %o', fileUrl);
113
202
  obj = await import(fileUrl);
114
203
  debug('[importModule] await import end: %o => %o', filepath, obj);
115
204
  // {
@@ -151,6 +240,18 @@ export async function importModule(filepath: string, options?: ImportModuleOptio
151
240
  obj = obj.default;
152
241
  }
153
242
  }
243
+ } else {
244
+ // commonjs
245
+ obj = require(moduleFilePath);
246
+ debug('[importModule] require %o => %o', filepath, obj);
247
+ if (obj?.__esModule === true && 'default' in obj) {
248
+ // 兼容 cjs 模拟 esm 的导出格式
249
+ // {
250
+ // __esModule: true,
251
+ // default: { fn: [Function: fn], foo: 'bar', one: 1 }
252
+ // }
253
+ obj = obj.default;
254
+ }
154
255
  }
155
256
  debug('[importModule] return %o => %o', filepath, obj);
156
257
  return obj;