@eggjs/utils 4.1.0 → 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.
- package/dist/commonjs/import.js +161 -45
- package/dist/esm/import.js +162 -46
- package/dist/package.json +1 -1
- package/package.json +9 -6
- package/src/import.ts +168 -46
package/dist/commonjs/import.js
CHANGED
|
@@ -11,6 +11,9 @@ const node_url_1 = require("node:url");
|
|
|
11
11
|
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
|
+
const isESM = typeof require === 'undefined';
|
|
15
|
+
const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
|
|
16
|
+
const supportImportMetaResolve = nodeMajorVersion >= 18;
|
|
14
17
|
let _customRequire;
|
|
15
18
|
function getRequire() {
|
|
16
19
|
if (!_customRequire) {
|
|
@@ -23,66 +26,166 @@ function getRequire() {
|
|
|
23
26
|
}
|
|
24
27
|
return _customRequire;
|
|
25
28
|
}
|
|
26
|
-
let
|
|
29
|
+
let _supportTypeScript;
|
|
27
30
|
function isSupportTypeScript() {
|
|
28
|
-
if (
|
|
31
|
+
if (_supportTypeScript === undefined) {
|
|
29
32
|
const extensions = getRequire().extensions;
|
|
30
|
-
|
|
31
|
-
debug('[isSupportTypeScript] %o, extensions: %j',
|
|
33
|
+
_supportTypeScript = extensions['.ts'] !== undefined;
|
|
34
|
+
debug('[isSupportTypeScript] %o, extensions: %j', _supportTypeScript, Object.keys(extensions));
|
|
35
|
+
}
|
|
36
|
+
return _supportTypeScript;
|
|
37
|
+
}
|
|
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) {
|
|
78
|
+
// try to read pkg.main or pkg.module first
|
|
79
|
+
// "main": "./dist/commonjs/index.js",
|
|
80
|
+
// "module": "./dist/esm/index.js"
|
|
81
|
+
const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
|
|
82
|
+
if (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');
|
|
106
|
+
if (node_fs_1.default.existsSync(mainIndexFilePath)) {
|
|
107
|
+
debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
|
|
108
|
+
return mainIndexFilePath;
|
|
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;
|
|
118
|
+
}
|
|
119
|
+
// for the module under development
|
|
120
|
+
// "tshy": {
|
|
121
|
+
// "exports": {
|
|
122
|
+
// "./package.json": "./package.json",
|
|
123
|
+
// ".": "./src/index.ts"
|
|
124
|
+
// }
|
|
125
|
+
// }
|
|
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);
|
|
32
137
|
}
|
|
33
|
-
return supportTypeScript;
|
|
34
138
|
}
|
|
35
139
|
function importResolve(filepath, options) {
|
|
36
|
-
|
|
37
|
-
if (node_path_1.default.isAbsolute(filepath)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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);
|
|
55
166
|
}
|
|
56
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
|
+
});
|
|
57
178
|
}
|
|
58
|
-
const cwd = process.cwd();
|
|
59
|
-
const paths = options?.paths ?? [cwd];
|
|
60
|
-
const moduleFilePath = getRequire().resolve(filepath, {
|
|
61
|
-
paths,
|
|
62
|
-
});
|
|
63
179
|
debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
|
|
64
180
|
return moduleFilePath;
|
|
65
181
|
}
|
|
66
182
|
async function importModule(filepath, options) {
|
|
67
183
|
const moduleFilePath = importResolve(filepath, options);
|
|
68
184
|
let obj;
|
|
69
|
-
if (
|
|
70
|
-
// commonjs
|
|
71
|
-
obj = require(moduleFilePath);
|
|
72
|
-
debug('[importModule] require %o => %o', filepath, obj);
|
|
73
|
-
if (obj?.__esModule === true && 'default' in obj) {
|
|
74
|
-
// 兼容 cjs 模拟 esm 的导出格式
|
|
75
|
-
// {
|
|
76
|
-
// __esModule: true,
|
|
77
|
-
// default: { fn: [Function: fn], foo: 'bar', one: 1 }
|
|
78
|
-
// }
|
|
79
|
-
obj = obj.default;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
185
|
+
if (isESM) {
|
|
83
186
|
// esm
|
|
84
|
-
debug('[importModule] await import start: %o', filepath);
|
|
85
187
|
const fileUrl = (0, node_url_1.pathToFileURL)(moduleFilePath).toString();
|
|
188
|
+
debug('[importModule] await import start: %o', fileUrl);
|
|
86
189
|
obj = await import(fileUrl);
|
|
87
190
|
debug('[importModule] await import end: %o => %o', filepath, obj);
|
|
88
191
|
// {
|
|
@@ -125,7 +228,20 @@ async function importModule(filepath, options) {
|
|
|
125
228
|
}
|
|
126
229
|
}
|
|
127
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
|
+
}
|
|
128
244
|
debug('[importModule] return %o => %o', filepath, obj);
|
|
129
245
|
return obj;
|
|
130
246
|
}
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVKQSxzQ0F5Q0M7QUFFRCxvQ0ErREM7QUFqUUQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBd0Q7QUFDeEQsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsSUFBQSwyQkFBYSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUss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
|
package/dist/esm/import.js
CHANGED
|
@@ -1,9 +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
|
+
const isESM = typeof require === 'undefined';
|
|
8
|
+
const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
|
|
9
|
+
const supportImportMetaResolve = nodeMajorVersion >= 18;
|
|
7
10
|
let _customRequire;
|
|
8
11
|
function getRequire() {
|
|
9
12
|
if (!_customRequire) {
|
|
@@ -16,66 +19,166 @@ function getRequire() {
|
|
|
16
19
|
}
|
|
17
20
|
return _customRequire;
|
|
18
21
|
}
|
|
19
|
-
let
|
|
22
|
+
let _supportTypeScript;
|
|
20
23
|
function isSupportTypeScript() {
|
|
21
|
-
if (
|
|
24
|
+
if (_supportTypeScript === undefined) {
|
|
22
25
|
const extensions = getRequire().extensions;
|
|
23
|
-
|
|
24
|
-
debug('[isSupportTypeScript] %o, extensions: %j',
|
|
26
|
+
_supportTypeScript = extensions['.ts'] !== undefined;
|
|
27
|
+
debug('[isSupportTypeScript] %o, extensions: %j', _supportTypeScript, Object.keys(extensions));
|
|
28
|
+
}
|
|
29
|
+
return _supportTypeScript;
|
|
30
|
+
}
|
|
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) {
|
|
71
|
+
// try to read pkg.main or pkg.module first
|
|
72
|
+
// "main": "./dist/commonjs/index.js",
|
|
73
|
+
// "module": "./dist/esm/index.js"
|
|
74
|
+
const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
|
|
75
|
+
if (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');
|
|
99
|
+
if (fs.existsSync(mainIndexFilePath)) {
|
|
100
|
+
debug('[tryToResolveByDirnameFromPackage] %o, use index.cjs, pkg.type: %o', mainIndexFilePath, type);
|
|
101
|
+
return mainIndexFilePath;
|
|
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;
|
|
111
|
+
}
|
|
112
|
+
// for the module under development
|
|
113
|
+
// "tshy": {
|
|
114
|
+
// "exports": {
|
|
115
|
+
// "./package.json": "./package.json",
|
|
116
|
+
// ".": "./src/index.ts"
|
|
117
|
+
// }
|
|
118
|
+
// }
|
|
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);
|
|
25
130
|
}
|
|
26
|
-
return supportTypeScript;
|
|
27
131
|
}
|
|
28
132
|
export function importResolve(filepath, options) {
|
|
29
|
-
|
|
30
|
-
if (path.isAbsolute(filepath)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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);
|
|
48
159
|
}
|
|
49
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
|
+
});
|
|
50
171
|
}
|
|
51
|
-
const cwd = process.cwd();
|
|
52
|
-
const paths = options?.paths ?? [cwd];
|
|
53
|
-
const moduleFilePath = getRequire().resolve(filepath, {
|
|
54
|
-
paths,
|
|
55
|
-
});
|
|
56
172
|
debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
|
|
57
173
|
return moduleFilePath;
|
|
58
174
|
}
|
|
59
175
|
export async function importModule(filepath, options) {
|
|
60
176
|
const moduleFilePath = importResolve(filepath, options);
|
|
61
177
|
let obj;
|
|
62
|
-
if (
|
|
63
|
-
// commonjs
|
|
64
|
-
obj = require(moduleFilePath);
|
|
65
|
-
debug('[importModule] require %o => %o', filepath, obj);
|
|
66
|
-
if (obj?.__esModule === true && 'default' in obj) {
|
|
67
|
-
// 兼容 cjs 模拟 esm 的导出格式
|
|
68
|
-
// {
|
|
69
|
-
// __esModule: true,
|
|
70
|
-
// default: { fn: [Function: fn], foo: 'bar', one: 1 }
|
|
71
|
-
// }
|
|
72
|
-
obj = obj.default;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
178
|
+
if (isESM) {
|
|
76
179
|
// esm
|
|
77
|
-
debug('[importModule] await import start: %o', filepath);
|
|
78
180
|
const fileUrl = pathToFileURL(moduleFilePath).toString();
|
|
181
|
+
debug('[importModule] await import start: %o', fileUrl);
|
|
79
182
|
obj = await import(fileUrl);
|
|
80
183
|
debug('[importModule] await import end: %o => %o', filepath, obj);
|
|
81
184
|
// {
|
|
@@ -118,7 +221,20 @@ export async function importModule(filepath, options) {
|
|
|
118
221
|
}
|
|
119
222
|
}
|
|
120
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
|
+
}
|
|
121
237
|
debug('[importModule] return %o => %o', filepath, obj);
|
|
122
238
|
return obj;
|
|
123
239
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVB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
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/utils",
|
|
3
|
-
"version": "4.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
|
|
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": "
|
|
18
|
-
"
|
|
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,13 +1,11 @@
|
|
|
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
|
|
|
7
7
|
const debug = debuglog('@eggjs/utils/import');
|
|
8
8
|
|
|
9
|
-
let _customRequire: NodeRequire;
|
|
10
|
-
|
|
11
9
|
export interface ImportResolveOptions {
|
|
12
10
|
paths?: string[];
|
|
13
11
|
}
|
|
@@ -17,6 +15,11 @@ export interface ImportModuleOptions extends ImportResolveOptions {
|
|
|
17
15
|
importDefaultOnly?: boolean;
|
|
18
16
|
}
|
|
19
17
|
|
|
18
|
+
const isESM = typeof require === 'undefined';
|
|
19
|
+
const nodeMajorVersion = parseInt(process.versions.node.split('.', 1)[0], 10);
|
|
20
|
+
const supportImportMetaResolve = nodeMajorVersion >= 18;
|
|
21
|
+
|
|
22
|
+
let _customRequire: NodeRequire;
|
|
20
23
|
function getRequire() {
|
|
21
24
|
if (!_customRequire) {
|
|
22
25
|
if (typeof require !== 'undefined') {
|
|
@@ -28,44 +31,163 @@ function getRequire() {
|
|
|
28
31
|
return _customRequire;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
|
-
let
|
|
34
|
+
let _supportTypeScript: boolean | undefined;
|
|
32
35
|
function isSupportTypeScript() {
|
|
33
|
-
if (
|
|
36
|
+
if (_supportTypeScript === undefined) {
|
|
34
37
|
const extensions = getRequire().extensions;
|
|
35
|
-
|
|
36
|
-
debug('[isSupportTypeScript] %o, extensions: %j',
|
|
38
|
+
_supportTypeScript = extensions['.ts'] !== undefined;
|
|
39
|
+
debug('[isSupportTypeScript] %o, extensions: %j', _supportTypeScript, Object.keys(extensions));
|
|
40
|
+
}
|
|
41
|
+
return _supportTypeScript;
|
|
42
|
+
}
|
|
43
|
+
|
|
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 {
|
|
86
|
+
// try to read pkg.main or pkg.module first
|
|
87
|
+
// "main": "./dist/commonjs/index.js",
|
|
88
|
+
// "module": "./dist/esm/index.js"
|
|
89
|
+
const defaultMainFile = isESM ? pkg.module ?? pkg.main : pkg.main;
|
|
90
|
+
if (defaultMainFile) {
|
|
91
|
+
const mainIndexFilePath = path.join(dirname, defaultMainFile);
|
|
92
|
+
if (fs.existsSync(mainIndexFilePath)) {
|
|
93
|
+
debug('[tryToResolveByDirnameFromPackage] %o, use pkg.main or pkg.module: %o, isESM: %s',
|
|
94
|
+
mainIndexFilePath, defaultMainFile, isESM);
|
|
95
|
+
return mainIndexFilePath;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
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
|
+
|
|
130
|
+
// for the module under development
|
|
131
|
+
// "tshy": {
|
|
132
|
+
// "exports": {
|
|
133
|
+
// "./package.json": "./package.json",
|
|
134
|
+
// ".": "./src/index.ts"
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
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);
|
|
37
149
|
}
|
|
38
|
-
return supportTypeScript;
|
|
39
150
|
}
|
|
40
151
|
|
|
41
152
|
export function importResolve(filepath: string, options?: ImportResolveOptions) {
|
|
42
|
-
|
|
43
|
-
if (path.isAbsolute(filepath)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
debug('[importResolve] %o, options: %o => %o, use typescript', filepath, options, mainIndexFilePath);
|
|
58
|
-
return mainIndexFilePath;
|
|
59
|
-
}
|
|
60
|
-
debug('[importResolve] typescript file %o not exists', mainIndexFilePath);
|
|
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;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (!stat) {
|
|
164
|
+
moduleFilePath = tryToResolveFromFile(filepath);
|
|
165
|
+
if (moduleFilePath) {
|
|
166
|
+
debug('[importResolve] %o => %o', filepath, moduleFilePath);
|
|
167
|
+
return moduleFilePath;
|
|
61
168
|
}
|
|
62
169
|
}
|
|
63
170
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
+
});
|
|
190
|
+
}
|
|
69
191
|
debug('[importResolve] %o, options: %o => %o', filepath, options, moduleFilePath);
|
|
70
192
|
return moduleFilePath;
|
|
71
193
|
}
|
|
@@ -73,22 +195,10 @@ export function importResolve(filepath: string, options?: ImportResolveOptions)
|
|
|
73
195
|
export async function importModule(filepath: string, options?: ImportModuleOptions) {
|
|
74
196
|
const moduleFilePath = importResolve(filepath, options);
|
|
75
197
|
let obj: any;
|
|
76
|
-
if (
|
|
77
|
-
// commonjs
|
|
78
|
-
obj = require(moduleFilePath);
|
|
79
|
-
debug('[importModule] require %o => %o', filepath, obj);
|
|
80
|
-
if (obj?.__esModule === true && 'default' in obj) {
|
|
81
|
-
// 兼容 cjs 模拟 esm 的导出格式
|
|
82
|
-
// {
|
|
83
|
-
// __esModule: true,
|
|
84
|
-
// default: { fn: [Function: fn], foo: 'bar', one: 1 }
|
|
85
|
-
// }
|
|
86
|
-
obj = obj.default;
|
|
87
|
-
}
|
|
88
|
-
} else {
|
|
198
|
+
if (isESM) {
|
|
89
199
|
// esm
|
|
90
|
-
debug('[importModule] await import start: %o', filepath);
|
|
91
200
|
const fileUrl = pathToFileURL(moduleFilePath).toString();
|
|
201
|
+
debug('[importModule] await import start: %o', fileUrl);
|
|
92
202
|
obj = await import(fileUrl);
|
|
93
203
|
debug('[importModule] await import end: %o => %o', filepath, obj);
|
|
94
204
|
// {
|
|
@@ -130,6 +240,18 @@ export async function importModule(filepath: string, options?: ImportModuleOptio
|
|
|
130
240
|
obj = obj.default;
|
|
131
241
|
}
|
|
132
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
|
+
}
|
|
133
255
|
}
|
|
134
256
|
debug('[importModule] return %o => %o', filepath, obj);
|
|
135
257
|
return obj;
|