@ainc/fs 0.1.21 → 0.1.23

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.
Files changed (57) hide show
  1. package/bin/download.mjs +39 -3
  2. package/dist/cache.d.ts +16 -0
  3. package/dist/cache.js +24 -0
  4. package/dist/dict.d.ts +21 -0
  5. package/dist/dict.js +66 -0
  6. package/dist/downloadFile.js +21 -15
  7. package/dist/index.d.ts +37 -1
  8. package/dist/index.exports.json +34 -0
  9. package/dist/index.js +59 -3
  10. package/dist/isEsmModule.d.ts +18 -0
  11. package/dist/isEsmModule.js +63 -0
  12. package/dist/loadPackageDescription.d.ts +61 -0
  13. package/dist/loadPackageDescription.js +71 -0
  14. package/dist/loadTsConfig.d.ts +87 -0
  15. package/dist/loadTsConfig.js +219 -0
  16. package/dist/match.d.ts +30 -0
  17. package/dist/match.js +59 -0
  18. package/dist/resolveAlias.d.ts +25 -0
  19. package/dist/resolveAlias.js +82 -0
  20. package/dist/resolveDirect.d.ts +15 -0
  21. package/dist/resolveDirect.js +144 -0
  22. package/dist/resolveExports.d.ts +19 -0
  23. package/dist/resolveExports.js +54 -0
  24. package/dist/resolveImports.d.ts +21 -0
  25. package/dist/resolveImports.js +114 -0
  26. package/dist/resolveModuleDir.d.ts +12 -0
  27. package/dist/resolveModuleDir.js +67 -0
  28. package/dist/resolveModuleId.d.ts +6 -0
  29. package/dist/resolveModuleId.js +32 -0
  30. package/dist/resolvePath.d.ts +23 -0
  31. package/dist/resolvePath.js +86 -0
  32. package/dist/resolvePaths.d.ts +13 -0
  33. package/dist/resolvePaths.js +42 -0
  34. package/dist/split.d.ts +6 -0
  35. package/dist/split.js +24 -0
  36. package/dist/sys.d.ts +60 -0
  37. package/dist/sys.js +260 -0
  38. package/esm/cache.mjs +22 -0
  39. package/esm/dict.mjs +63 -0
  40. package/esm/downloadFile.mjs +21 -15
  41. package/esm/index.exports.json +34 -0
  42. package/esm/index.mjs +29 -1
  43. package/esm/isEsmModule.mjs +59 -0
  44. package/esm/loadPackageDescription.mjs +67 -0
  45. package/esm/loadTsConfig.mjs +215 -0
  46. package/esm/match.mjs +53 -0
  47. package/esm/resolveAlias.mjs +79 -0
  48. package/esm/resolveDirect.mjs +142 -0
  49. package/esm/resolveExports.mjs +51 -0
  50. package/esm/resolveImports.mjs +112 -0
  51. package/esm/resolveModuleDir.mjs +64 -0
  52. package/esm/resolveModuleId.mjs +30 -0
  53. package/esm/resolvePath.mjs +84 -0
  54. package/esm/resolvePaths.mjs +40 -0
  55. package/esm/split.mjs +22 -0
  56. package/esm/sys.mjs +258 -0
  57. package/package.json +4 -2
package/bin/download.mjs CHANGED
@@ -29,12 +29,48 @@ main();
29
29
  *****************************************
30
30
  */
31
31
  async function main() {
32
- const [path, url] = process.argv.slice(2);
33
- if (!path || !url) {
32
+ const args = process.argv.slice(2);
33
+ if (!args.length) {
34
34
  return;
35
35
  }
36
36
 
37
+ // 下载多个文件
38
+ if (isURL(args[0])) {
39
+ return Promise.all(args.map(url => downloadFile(resolvePath(url), url)));
40
+ }
41
+
37
42
  // 下载文件
38
- await downloadFile(path, url);
43
+ if (isURL(args[1])) {
44
+ await downloadFile(args[0], args[1]);
45
+ }
46
+ }
47
+
48
+
49
+ /**
50
+ *****************************************
51
+ * 判断是否为 URL
52
+ *****************************************
53
+ * @param {string} url
54
+ */
55
+ function isURL(url) {
56
+ if (url) {
57
+ return url.startsWith('http://') || url.startsWith('https://');
58
+ }
59
+ }
60
+
61
+
62
+ /**
63
+ *****************************************
64
+ * 解析下载路径
65
+ *****************************************
66
+ * @param {string} url
67
+ */
68
+ function resolvePath(url) {
69
+ const idx = url.lastIndexOf('/');
70
+ if (idx !== -1) {
71
+ return '.' + url.slice(idx);
72
+ } else {
73
+ return Math.random().toString(16).slice(2);
74
+ }
39
75
  }
40
76
 
@@ -0,0 +1,16 @@
1
+ /**
2
+ *****************************************
3
+ * 缓存
4
+ *****************************************
5
+ */
6
+ export interface Cache<T, P> {
7
+ set(id: T, handler: (id: T) => P): P;
8
+ get(id: T, handler: (id: T) => P): P;
9
+ }
10
+ /**
11
+ *****************************************
12
+ * 创建缓存
13
+ *****************************************
14
+ */
15
+ export declare function cache<T, P>(map?: Map<T, P>): Cache<T, P>;
16
+ export declare function cache<T extends object, P>(map: WeakMap<T, P>): Cache<T, P>;
package/dist/cache.js ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ *****************************************
3
+ * Created by edonet@163.com
4
+ * Created on 2026-03-19 12:43:17
5
+ *****************************************
6
+ */
7
+ 'use strict';
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.cache = cache;
10
+ function cache(map) {
11
+ const cached = map || new Map();
12
+ // 获取缓存
13
+ function get(id, handler) {
14
+ return cached.has(id) ? cached.get(id) : set(id, handler);
15
+ }
16
+ // 更新缓存
17
+ function set(id, handler) {
18
+ const result = handler(id);
19
+ cached.set(id, result);
20
+ return result;
21
+ }
22
+ // 返回结果
23
+ return { set, get };
24
+ }
package/dist/dict.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ *****************************************
3
+ * 字典对象
4
+ *****************************************
5
+ */
6
+ export declare class Dict<T> {
7
+ /** 键值映射 */
8
+ private data;
9
+ /** 键列表 */
10
+ private keys;
11
+ /** 添加映射 */
12
+ set(key: string, value: T): this;
13
+ /** 获取值 */
14
+ get(key: string): T | undefined;
15
+ /** 遍历 */
16
+ map<P>(handler: (key: string, value: T) => P): Dict<P>;
17
+ /** 排序 */
18
+ sort(handler: (a: string, b: string) => number): this;
19
+ /** 匹配对象 */
20
+ match<P>(handler: (value: T, key: string) => P | undefined): P | undefined;
21
+ }
package/dist/dict.js ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ *****************************************
3
+ * Created by edonet@163.com
4
+ * Created on 2025-06-11 22:56:35
5
+ *****************************************
6
+ */
7
+ 'use strict';
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.Dict = void 0;
10
+ /**
11
+ *****************************************
12
+ * 字典对象
13
+ *****************************************
14
+ */
15
+ class Dict {
16
+ constructor() {
17
+ /** 键值映射 */
18
+ this.data = {};
19
+ /** 键列表 */
20
+ this.keys = [];
21
+ }
22
+ /** 添加映射 */
23
+ set(key, value) {
24
+ if (!Object.prototype.hasOwnProperty.call(this.data, key)) {
25
+ this.keys.push(key);
26
+ }
27
+ // 更新值
28
+ this.data[key] = value;
29
+ // 返回自身
30
+ return this;
31
+ }
32
+ /** 获取值 */
33
+ get(key) {
34
+ return this.data[key];
35
+ }
36
+ /** 遍历 */
37
+ map(handler) {
38
+ const dict = new Dict();
39
+ // 遍历映射
40
+ this.keys.forEach(key => {
41
+ dict.set(key, handler(key, this.data[key]));
42
+ });
43
+ // 返回结果
44
+ return dict;
45
+ }
46
+ /** 排序 */
47
+ sort(handler) {
48
+ this.keys.sort(handler);
49
+ return this;
50
+ }
51
+ /** 匹配对象 */
52
+ match(handler) {
53
+ const keys = this.keys;
54
+ const data = this.data;
55
+ const size = keys.length;
56
+ // 遍历匹配
57
+ for (let i = 0; i < size; i++) {
58
+ const key = keys[i];
59
+ const result = handler(data[key], key);
60
+ if (result !== undefined) {
61
+ return result;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ exports.Dict = Dict;
@@ -28,11 +28,10 @@ async function downloadFile(dest, url) {
28
28
  if (size < total) {
29
29
  print(` -> ${((size / total) * 100).toFixed(2)}% (${format(size)}/${format(total)})`);
30
30
  }
31
- else {
32
- print('[download]: done');
33
- }
34
31
  },
35
32
  });
33
+ // 下载完成
34
+ print('[download]: done', true);
36
35
  }
37
36
  /**
38
37
  *****************************************
@@ -54,6 +53,16 @@ function format(bytes) {
54
53
  // 返回默认
55
54
  return `${(bytes / limit).toFixed(2)} TB`;
56
55
  }
56
+ /**
57
+ *****************************************
58
+ * 上移一行并清除该行内容
59
+ * a. 移动光标上移一行:\x1B[1A
60
+ * b. 清除当前行:\x1B[2K
61
+ * c. 移动光标到行首:\x1B[0G
62
+ *****************************************
63
+ */
64
+ const clearCurrentLine = '\x1B[0G\x1B[2K';
65
+ const clearPreviousLine = '\x1B[1A\x1B[2K';
57
66
  /**
58
67
  *****************************************
59
68
  * 进度条
@@ -61,23 +70,20 @@ function format(bytes) {
61
70
  */
62
71
  function stdout() {
63
72
  let progressContent = '';
64
- let progressSize = 0;
65
73
  let progressTime = 0;
66
- return function print(content) {
74
+ return function print(content, flush) {
67
75
  const now = Date.now();
68
- if (content === progressContent || now - progressTime < 1000) {
76
+ if ((content === progressContent || now - progressTime < 600) && !flush) {
69
77
  return;
70
78
  }
71
- const size = content.length;
72
- const diff = progressSize - size;
79
+ // 清除内容
80
+ if (progressContent) {
81
+ process.stdout.write(clearCurrentLine);
82
+ process.stdout.write(clearPreviousLine);
83
+ }
84
+ // 更新内容
73
85
  progressContent = content;
74
86
  progressTime = now;
75
- progressSize = size;
76
- if (diff > 0) {
77
- process.stdout.write(`\r${content}${' '.repeat(diff)}`);
78
- }
79
- else {
80
- process.stdout.write(`\r${content}`);
81
- }
87
+ process.stdout.write(content + '\n');
82
88
  };
83
89
  }
package/dist/index.d.ts CHANGED
@@ -1,3 +1,27 @@
1
+ /**
2
+ *****************************************
3
+ * 导出类型
4
+ *****************************************
5
+ */
6
+ export type { PackageConfig, PackageDescription, TargetDescription } from './loadPackageDescription';
7
+ export type { TsConfigDescription, TsConfig, CompilerOptions, WatchOptions } from './loadTsConfig';
8
+ export type { FileSystem } from './sys';
9
+ /**
10
+ *****************************************
11
+ * 文件系统
12
+ *****************************************
13
+ */
14
+ export { sys } from './sys';
15
+ /**
16
+ *****************************************
17
+ * 导出工具
18
+ *****************************************
19
+ */
20
+ export { unary, noop, nil, match } from './match';
21
+ export { split } from './split';
22
+ export { cache } from './cache';
23
+ export { retry } from './retry';
24
+ export { Dict } from './dict';
1
25
  /**
2
26
  *****************************************
3
27
  * 导出接口
@@ -6,8 +30,8 @@
6
30
  export { resolve, join, isAbsolute } from 'node:path';
7
31
  export { relative, isRelative } from './relative';
8
32
  export { dirname } from './dirname';
33
+ export { isEsmModule, isEsmFile, isEsmPackage } from './isEsmModule';
9
34
  export { stat, isDir, isFile } from './stat';
10
- export { resolveFile } from './resolveFile';
11
35
  export { readFile } from './readFile';
12
36
  export { writeFile } from './writeFile';
13
37
  export { copy } from './copy';
@@ -17,3 +41,15 @@ export { md5 } from './md5';
17
41
  export { json, jsonc } from './jsonc';
18
42
  export { findUp } from './findUp';
19
43
  export { download } from './download';
44
+ export { downloadFile } from './downloadFile';
45
+ export { loadPackageDescription, resolvePackageDescription } from './loadPackageDescription';
46
+ export { loadTsConfig, loadCompilerOptions, resolveTsConfig } from './loadTsConfig';
47
+ export { resolveAlias, resolveDict } from './resolveAlias';
48
+ export { resolvePaths } from './resolvePaths';
49
+ export { resolvePath } from './resolvePath';
50
+ export { resolveFile } from './resolveFile';
51
+ export { resolveDirect } from './resolveDirect';
52
+ export { resolveImports } from './resolveImports';
53
+ export { resolveExports } from './resolveExports';
54
+ export { resolveModuleDir, resolveModuleDirs } from './resolveModuleDir';
55
+ export { resolveModuleId } from './resolveModuleId';
@@ -0,0 +1,34 @@
1
+ [
2
+ {"path": "./sys", "names": ["sys"]},
3
+ {"path": "./match", "names": ["unary", "noop", "nil", "match"]},
4
+ {"path": "./split", "names": ["split"]},
5
+ {"path": "./cache", "names": ["cache"]},
6
+ {"path": "./retry", "names": ["retry"]},
7
+ {"path": "./dict", "names": ["Dict"]},
8
+ {"path": "node:path", "names": ["resolve", "join", "isAbsolute"]},
9
+ {"path": "./relative", "names": ["relative", "isRelative"]},
10
+ {"path": "./dirname", "names": ["dirname"]},
11
+ {"path": "./isEsmModule", "names": ["isEsmModule", "isEsmFile", "isEsmPackage"]},
12
+ {"path": "./stat", "names": ["stat", "isDir", "isFile"]},
13
+ {"path": "./readFile", "names": ["readFile"]},
14
+ {"path": "./writeFile", "names": ["writeFile"]},
15
+ {"path": "./copy", "names": ["copy"]},
16
+ {"path": "./rm", "names": ["rm"]},
17
+ {"path": "./lookup", "names": ["lookup"]},
18
+ {"path": "./md5", "names": ["md5"]},
19
+ {"path": "./jsonc", "names": ["json", "jsonc"]},
20
+ {"path": "./findUp", "names": ["findUp"]},
21
+ {"path": "./download", "names": ["download"]},
22
+ {"path": "./downloadFile", "names": ["downloadFile"]},
23
+ {"path": "./loadPackageDescription", "names": ["loadPackageDescription", "resolvePackageDescription"]},
24
+ {"path": "./loadTsConfig", "names": ["loadTsConfig", "loadCompilerOptions", "resolveTsConfig"]},
25
+ {"path": "./resolveAlias", "names": ["resolveAlias", "resolveDict"]},
26
+ {"path": "./resolvePaths", "names": ["resolvePaths"]},
27
+ {"path": "./resolvePath", "names": ["resolvePath"]},
28
+ {"path": "./resolveFile", "names": ["resolveFile"]},
29
+ {"path": "./resolveDirect", "names": ["resolveDirect"]},
30
+ {"path": "./resolveImports", "names": ["resolveImports"]},
31
+ {"path": "./resolveExports", "names": ["resolveExports"]},
32
+ {"path": "./resolveModuleDir", "names": ["resolveModuleDir", "resolveModuleDirs"]},
33
+ {"path": "./resolveModuleId", "names": ["resolveModuleId"]}
34
+ ]
package/dist/index.js CHANGED
@@ -6,7 +6,32 @@
6
6
  */
7
7
  'use strict';
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.download = exports.findUp = exports.jsonc = exports.json = exports.md5 = exports.lookup = exports.rm = exports.copy = exports.writeFile = exports.readFile = exports.resolveFile = exports.isFile = exports.isDir = exports.stat = exports.dirname = exports.isRelative = exports.relative = exports.isAbsolute = exports.join = exports.resolve = void 0;
9
+ exports.resolveModuleId = exports.resolveModuleDirs = exports.resolveModuleDir = exports.resolveExports = exports.resolveImports = exports.resolveDirect = exports.resolveFile = exports.resolvePath = exports.resolvePaths = exports.resolveDict = exports.resolveAlias = exports.resolveTsConfig = exports.loadCompilerOptions = exports.loadTsConfig = exports.resolvePackageDescription = exports.loadPackageDescription = exports.downloadFile = exports.download = exports.findUp = exports.jsonc = exports.json = exports.md5 = exports.lookup = exports.rm = exports.copy = exports.writeFile = exports.readFile = exports.isFile = exports.isDir = exports.stat = exports.isEsmPackage = exports.isEsmFile = exports.isEsmModule = exports.dirname = exports.isRelative = exports.relative = exports.isAbsolute = exports.join = exports.resolve = exports.Dict = exports.retry = exports.cache = exports.split = exports.match = exports.nil = exports.noop = exports.unary = exports.sys = void 0;
10
+ /**
11
+ *****************************************
12
+ * 文件系统
13
+ *****************************************
14
+ */
15
+ var sys_1 = require("./sys");
16
+ Object.defineProperty(exports, "sys", { enumerable: true, get: function () { return sys_1.sys; } });
17
+ /**
18
+ *****************************************
19
+ * 导出工具
20
+ *****************************************
21
+ */
22
+ var match_1 = require("./match");
23
+ Object.defineProperty(exports, "unary", { enumerable: true, get: function () { return match_1.unary; } });
24
+ Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return match_1.noop; } });
25
+ Object.defineProperty(exports, "nil", { enumerable: true, get: function () { return match_1.nil; } });
26
+ Object.defineProperty(exports, "match", { enumerable: true, get: function () { return match_1.match; } });
27
+ var split_1 = require("./split");
28
+ Object.defineProperty(exports, "split", { enumerable: true, get: function () { return split_1.split; } });
29
+ var cache_1 = require("./cache");
30
+ Object.defineProperty(exports, "cache", { enumerable: true, get: function () { return cache_1.cache; } });
31
+ var retry_1 = require("./retry");
32
+ Object.defineProperty(exports, "retry", { enumerable: true, get: function () { return retry_1.retry; } });
33
+ var dict_1 = require("./dict");
34
+ Object.defineProperty(exports, "Dict", { enumerable: true, get: function () { return dict_1.Dict; } });
10
35
  /**
11
36
  *****************************************
12
37
  * 导出接口
@@ -21,12 +46,14 @@ Object.defineProperty(exports, "relative", { enumerable: true, get: function ()
21
46
  Object.defineProperty(exports, "isRelative", { enumerable: true, get: function () { return relative_1.isRelative; } });
22
47
  var dirname_1 = require("./dirname");
23
48
  Object.defineProperty(exports, "dirname", { enumerable: true, get: function () { return dirname_1.dirname; } });
49
+ var isEsmModule_1 = require("./isEsmModule");
50
+ Object.defineProperty(exports, "isEsmModule", { enumerable: true, get: function () { return isEsmModule_1.isEsmModule; } });
51
+ Object.defineProperty(exports, "isEsmFile", { enumerable: true, get: function () { return isEsmModule_1.isEsmFile; } });
52
+ Object.defineProperty(exports, "isEsmPackage", { enumerable: true, get: function () { return isEsmModule_1.isEsmPackage; } });
24
53
  var stat_1 = require("./stat");
25
54
  Object.defineProperty(exports, "stat", { enumerable: true, get: function () { return stat_1.stat; } });
26
55
  Object.defineProperty(exports, "isDir", { enumerable: true, get: function () { return stat_1.isDir; } });
27
56
  Object.defineProperty(exports, "isFile", { enumerable: true, get: function () { return stat_1.isFile; } });
28
- var resolveFile_1 = require("./resolveFile");
29
- Object.defineProperty(exports, "resolveFile", { enumerable: true, get: function () { return resolveFile_1.resolveFile; } });
30
57
  var readFile_1 = require("./readFile");
31
58
  Object.defineProperty(exports, "readFile", { enumerable: true, get: function () { return readFile_1.readFile; } });
32
59
  var writeFile_1 = require("./writeFile");
@@ -46,3 +73,32 @@ var findUp_1 = require("./findUp");
46
73
  Object.defineProperty(exports, "findUp", { enumerable: true, get: function () { return findUp_1.findUp; } });
47
74
  var download_1 = require("./download");
48
75
  Object.defineProperty(exports, "download", { enumerable: true, get: function () { return download_1.download; } });
76
+ var downloadFile_1 = require("./downloadFile");
77
+ Object.defineProperty(exports, "downloadFile", { enumerable: true, get: function () { return downloadFile_1.downloadFile; } });
78
+ var loadPackageDescription_1 = require("./loadPackageDescription");
79
+ Object.defineProperty(exports, "loadPackageDescription", { enumerable: true, get: function () { return loadPackageDescription_1.loadPackageDescription; } });
80
+ Object.defineProperty(exports, "resolvePackageDescription", { enumerable: true, get: function () { return loadPackageDescription_1.resolvePackageDescription; } });
81
+ var loadTsConfig_1 = require("./loadTsConfig");
82
+ Object.defineProperty(exports, "loadTsConfig", { enumerable: true, get: function () { return loadTsConfig_1.loadTsConfig; } });
83
+ Object.defineProperty(exports, "loadCompilerOptions", { enumerable: true, get: function () { return loadTsConfig_1.loadCompilerOptions; } });
84
+ Object.defineProperty(exports, "resolveTsConfig", { enumerable: true, get: function () { return loadTsConfig_1.resolveTsConfig; } });
85
+ var resolveAlias_1 = require("./resolveAlias");
86
+ Object.defineProperty(exports, "resolveAlias", { enumerable: true, get: function () { return resolveAlias_1.resolveAlias; } });
87
+ Object.defineProperty(exports, "resolveDict", { enumerable: true, get: function () { return resolveAlias_1.resolveDict; } });
88
+ var resolvePaths_1 = require("./resolvePaths");
89
+ Object.defineProperty(exports, "resolvePaths", { enumerable: true, get: function () { return resolvePaths_1.resolvePaths; } });
90
+ var resolvePath_1 = require("./resolvePath");
91
+ Object.defineProperty(exports, "resolvePath", { enumerable: true, get: function () { return resolvePath_1.resolvePath; } });
92
+ var resolveFile_1 = require("./resolveFile");
93
+ Object.defineProperty(exports, "resolveFile", { enumerable: true, get: function () { return resolveFile_1.resolveFile; } });
94
+ var resolveDirect_1 = require("./resolveDirect");
95
+ Object.defineProperty(exports, "resolveDirect", { enumerable: true, get: function () { return resolveDirect_1.resolveDirect; } });
96
+ var resolveImports_1 = require("./resolveImports");
97
+ Object.defineProperty(exports, "resolveImports", { enumerable: true, get: function () { return resolveImports_1.resolveImports; } });
98
+ var resolveExports_1 = require("./resolveExports");
99
+ Object.defineProperty(exports, "resolveExports", { enumerable: true, get: function () { return resolveExports_1.resolveExports; } });
100
+ var resolveModuleDir_1 = require("./resolveModuleDir");
101
+ Object.defineProperty(exports, "resolveModuleDir", { enumerable: true, get: function () { return resolveModuleDir_1.resolveModuleDir; } });
102
+ Object.defineProperty(exports, "resolveModuleDirs", { enumerable: true, get: function () { return resolveModuleDir_1.resolveModuleDirs; } });
103
+ var resolveModuleId_1 = require("./resolveModuleId");
104
+ Object.defineProperty(exports, "resolveModuleId", { enumerable: true, get: function () { return resolveModuleId_1.resolveModuleId; } });
@@ -0,0 +1,18 @@
1
+ /**
2
+ *****************************************
3
+ * 判断是否为 ESM 模块
4
+ *****************************************
5
+ */
6
+ export declare function isEsmModule(filename: string, dir?: string): boolean;
7
+ /**
8
+ *****************************************
9
+ * 判断是否为 ESM 模块
10
+ *****************************************
11
+ */
12
+ export declare function isEsmPackage(dir: string): boolean;
13
+ /**
14
+ *****************************************
15
+ * 判断为 ESM 文件
16
+ *****************************************
17
+ */
18
+ export declare function isEsmFile(filename: string): boolean | undefined;
@@ -0,0 +1,63 @@
1
+ /**
2
+ *****************************************
3
+ * Created by edonet@163.com
4
+ * Created on 2026-03-18 20:14:00
5
+ *****************************************
6
+ */
7
+ 'use strict';
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isEsmModule = isEsmModule;
10
+ exports.isEsmPackage = isEsmPackage;
11
+ exports.isEsmFile = isEsmFile;
12
+ /**
13
+ *****************************************
14
+ * 加载依赖
15
+ *****************************************
16
+ */
17
+ const node_path_1 = require("node:path");
18
+ const loadPackageDescription_1 = require("./loadPackageDescription");
19
+ /**
20
+ *****************************************
21
+ * 判断是否为 ESM 模块
22
+ *****************************************
23
+ */
24
+ function isEsmModule(filename, dir = (0, node_path_1.dirname)(filename)) {
25
+ const result = isEsmFile(filename);
26
+ // 文件扩展名未匹配成功时,解析文件所在包的配置
27
+ if (result === undefined) {
28
+ return isEsmPackage(dir);
29
+ }
30
+ else {
31
+ return result;
32
+ }
33
+ }
34
+ /**
35
+ *****************************************
36
+ * 判断是否为 ESM 模块
37
+ *****************************************
38
+ */
39
+ function isEsmPackage(dir) {
40
+ const pkg = (0, loadPackageDescription_1.loadPackageDescription)(dir);
41
+ if (pkg && pkg.type === 'module') {
42
+ return true;
43
+ }
44
+ else {
45
+ return false;
46
+ }
47
+ }
48
+ /**
49
+ *****************************************
50
+ * 判断为 ESM 文件
51
+ *****************************************
52
+ */
53
+ function isEsmFile(filename) {
54
+ const ext = (0, node_path_1.extname)(filename);
55
+ // 判断 mjs 模块
56
+ if (['.mjs', '.mts', '.mjsx', '.mtsx'].includes(ext)) {
57
+ return true;
58
+ }
59
+ // 判断 cjs 模块
60
+ if (['.cjs', '.cts', '.cjsx', '.ctsx'].includes(ext)) {
61
+ return false;
62
+ }
63
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ *****************************************
3
+ * 重定向描述
4
+ *****************************************
5
+ */
6
+ export interface TargetDescription {
7
+ [key: string]: null | string | TargetDescription | (null | string | TargetDescription)[];
8
+ }
9
+ /**
10
+ *****************************************
11
+ * 包描述
12
+ *****************************************
13
+ */
14
+ export interface PackageDescription {
15
+ name?: string;
16
+ version?: string;
17
+ description?: string;
18
+ type?: string;
19
+ types?: string;
20
+ main?: string;
21
+ imports?: TargetDescription;
22
+ exports?: null | string | string[] | TargetDescription;
23
+ files?: string[];
24
+ bin?: string | Record<string, string>;
25
+ scripts?: Record<string, string>;
26
+ repository?: string;
27
+ author?: string;
28
+ license?: string;
29
+ publishConfig?: Record<string, string | boolean | number>;
30
+ dependencies?: Record<string, string>;
31
+ devDependencies?: Record<string, string>;
32
+ peerDependencies?: Record<string, string>;
33
+ }
34
+ /**
35
+ *****************************************
36
+ * 包配置
37
+ *****************************************
38
+ */
39
+ export interface PackageConfig {
40
+ dir: string;
41
+ path: string;
42
+ config?: PackageDescription;
43
+ }
44
+ /**
45
+ *****************************************
46
+ * 加载包描述
47
+ *****************************************
48
+ */
49
+ export declare function loadPackageDescription(from?: string): PackageDescription | undefined;
50
+ /**
51
+ *****************************************
52
+ * 读取包描述
53
+ *****************************************
54
+ */
55
+ export declare function readPackageDescription(dir: string): PackageDescription | undefined;
56
+ /**
57
+ *****************************************
58
+ * 解析包配置
59
+ *****************************************
60
+ */
61
+ export declare function resolvePackageDescription(from?: string): PackageConfig | undefined;
@@ -0,0 +1,71 @@
1
+ /**
2
+ *****************************************
3
+ * Created by edonet@163.com
4
+ * Created on 2023-12-02 11:43:57
5
+ *****************************************
6
+ */
7
+ 'use strict';
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.loadPackageDescription = loadPackageDescription;
10
+ exports.readPackageDescription = readPackageDescription;
11
+ exports.resolvePackageDescription = resolvePackageDescription;
12
+ /**
13
+ *****************************************
14
+ * 加载依赖
15
+ *****************************************
16
+ */
17
+ const node_path_1 = require("node:path");
18
+ const stat_1 = require("./stat");
19
+ const lookup_1 = require("./lookup");
20
+ const jsonc_1 = require("./jsonc");
21
+ const readFile_1 = require("./readFile");
22
+ /**
23
+ *****************************************
24
+ * 加载包描述
25
+ *****************************************
26
+ */
27
+ function loadPackageDescription(from) {
28
+ const data = resolvePackageDescription(from);
29
+ // 返回配置
30
+ if (data) {
31
+ return data.config;
32
+ }
33
+ }
34
+ /**
35
+ *****************************************
36
+ * 读取包描述
37
+ *****************************************
38
+ */
39
+ function readPackageDescription(dir) {
40
+ const data = resolvePackageDescription(dir);
41
+ // 返回配置
42
+ if (data && data.path.startsWith(dir)) {
43
+ return data.config;
44
+ }
45
+ }
46
+ /**
47
+ *****************************************
48
+ * 缓存
49
+ *****************************************
50
+ */
51
+ const cache = new Map();
52
+ const moduleDir = node_path_1.sep + 'node_modules';
53
+ /**
54
+ *****************************************
55
+ * 解析包配置
56
+ *****************************************
57
+ */
58
+ function resolvePackageDescription(from) {
59
+ return (0, lookup_1.lookup)('package.json', {
60
+ from,
61
+ cache,
62
+ resolve(path, dir) {
63
+ if ((0, stat_1.isFile)(path)) {
64
+ return { dir, path, config: (0, jsonc_1.json)((0, readFile_1.readFile)(path)) };
65
+ }
66
+ if (dir.endsWith(moduleDir)) {
67
+ return { dir, path };
68
+ }
69
+ },
70
+ });
71
+ }