@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.
- package/dist/commonjs/import.js +145 -43
- package/dist/esm/import.js +146 -44
- package/dist/package.json +1 -1
- package/package.json +9 -6
- package/src/import.ts +148 -42
package/dist/commonjs/import.js
CHANGED
|
@@ -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
|
|
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(
|
|
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('[
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
65
|
-
if (node_path_1.default.isAbsolute(filepath)
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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 (
|
|
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
|
|
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
|
-
|
|
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,
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVKQSxzQ0E2Q0M7QUFFRCxvQ0FnRUM7QUF0UUQseUNBQXFDO0FBQ3JDLDZDQUE0QztBQUM1Qyx1Q0FBd0Q7QUFDeEQsMERBQTZCO0FBQzdCLHNEQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFRLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQVc5QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5RSxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUV4RCxJQUFJLGNBQTJCLENBQUM7QUFDaEMsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsSUFBQSwyQkFBYSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDM0Msa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEtBQUss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
|
package/dist/esm/import.js
CHANGED
|
@@ -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
|
|
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(
|
|
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('[
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
58
|
-
if (path.isAbsolute(filepath)
|
|
59
|
-
const
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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 (
|
|
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
|
|
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
|
-
|
|
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,
|
|
244
|
+
//# 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.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
|
|
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,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
|
|
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(
|
|
91
|
+
const mainIndexFilePath = path.join(dirname, defaultMainFile);
|
|
49
92
|
if (fs.existsSync(mainIndexFilePath)) {
|
|
50
|
-
debug('[
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
74
|
-
if (path.isAbsolute(filepath)
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
86
|
-
|
|
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 (
|
|
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
|
|
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
|
}
|