@aomex/internal-file-import 0.0.27 → 1.0.1

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/CHANGELOG.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # @aomex/internal-file-import
2
2
 
3
- ## 0.0.27
3
+ ## 1.0.1
4
4
 
5
- ### Patch Changes
5
+ ## 1.0.0
6
6
 
7
- - [`0776719`](https://github.com/aomex/aomex/commit/077671963401f1dafb5b03722899452d45df13fc) Thanks [@geekact](https://github.com/geekact)! - refactor: 文件搜索转移到新的包@aomex/internal-file-import
7
+ ### Minor Changes
8
+
9
+ - [`11103a2`](https://github.com/aomex/aomex/commit/11103a2aff4e081754c56b0ff18fa5130ca252e8) Thanks [@geekact](https://github.com/geekact)! - 重新制作
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 geekact
3
+ Copyright (c) 2023-2024 geekact
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @aomex/internal-file-import
2
+
3
+ aomex内部文件匹配库
4
+
5
+ ## pathToFiles
6
+
7
+ 返回类型:`string[]`
8
+
9
+ 根据路径匹配出(子)目录下的所有js文件,文件后缀:`js,ts,mjs,mts`
10
+
11
+ ## getFileValues
12
+
13
+ 返回类型:`T[]`
14
+
15
+ 动态导入给定的文件,获得导出的所有值并去重
package/dist/index.d.ts CHANGED
@@ -1,19 +1,13 @@
1
- interface Options {
1
+ interface GlobPathFullOptions {
2
2
  pattern: string[];
3
3
  ignore?: string[];
4
4
  dot?: boolean;
5
- /**
6
- * 忽略 **node_modules** 文件夹。默认值:`true`
7
- */
8
- ignoreNodeModules?: boolean;
9
- /**
10
- * 忽略所有 **.d.{ts,mts,cts}** 类型声明文件。默认值:`true`
11
- */
12
- ignoreDTS?: boolean;
13
5
  }
14
- type PathToFileOptions = string | string[] | Options | Options[];
15
- declare const pathToFiles: (paths: PathToFileOptions) => Promise<string[]>;
6
+ type GlobPathOptions = string | string[] | GlobPathFullOptions | GlobPathFullOptions[];
7
+ declare const normalizeGlobPath: (paths: GlobPathOptions) => GlobPathFullOptions[];
16
8
 
17
- declare const fileToModules: <T extends unknown>(files: string[], filter?: ((item?: T | undefined) => boolean) | undefined) => Promise<T[]>;
9
+ declare const pathToFiles: (paths: GlobPathOptions) => Promise<string[]>;
18
10
 
19
- export { PathToFileOptions, fileToModules, pathToFiles };
11
+ declare const getFileValues: <T extends unknown>(files: string[], filterValues?: (item?: unknown) => boolean) => Promise<T[]>;
12
+
13
+ export { type GlobPathFullOptions, type GlobPathOptions, getFileValues, normalizeGlobPath, pathToFiles };
package/dist/index.js CHANGED
@@ -1,14 +1,32 @@
1
- // src/path-to-files.ts
1
+ // src/path-to-file.ts
2
2
  import path from "node:path";
3
3
  import { stat } from "node:fs/promises";
4
4
  import { glob, hasMagic } from "glob";
5
+
6
+ // src/normalize-glob-path.ts
7
+ var normalizeGlobPath = (paths) => {
8
+ if (typeof paths === "string") {
9
+ return [{ pattern: [paths] }];
10
+ }
11
+ if (Array.isArray(paths)) {
12
+ if (!paths.length)
13
+ return [];
14
+ return isStringArray(paths) ? [{ pattern: paths }] : paths;
15
+ }
16
+ return [paths];
17
+ };
18
+ var isStringArray = (data) => {
19
+ return typeof data[0] === "string";
20
+ };
21
+
22
+ // src/path-to-file.ts
5
23
  var pathToFiles = async (paths) => {
6
- const opts = normalizeSearchPath(paths);
24
+ const opts = normalizeGlobPath(paths);
7
25
  const files = await Promise.all(
8
26
  opts.map((opt) => {
9
27
  const { dot, pattern: patterns } = opt;
10
28
  const ignore = (opt.ignore || []).slice();
11
- ignore.push("**/node_modules/**", "**/*.d.{ts,mts,cts}");
29
+ ignore.push("**/node_modules/**/**", "**/*.d.{ts,mts}");
12
30
  const options = {
13
31
  nodir: true,
14
32
  dot,
@@ -20,7 +38,7 @@ var pathToFiles = async (paths) => {
20
38
  return Promise.all(
21
39
  patterns.map(async (pattern) => {
22
40
  if (!path.isAbsolute(pattern)) {
23
- pattern = path.posix.resolve(pattern);
41
+ pattern = path.resolve(pattern);
24
42
  }
25
43
  pattern = pattern.replace(/\\/g, path.posix.sep);
26
44
  if (!hasMagic(pattern, { magicalBraces: true })) {
@@ -36,39 +54,25 @@ var pathToFiles = async (paths) => {
36
54
  );
37
55
  return [...new Set(files.flat(2))].sort();
38
56
  };
39
- var normalizeSearchPath = (paths) => {
40
- if (typeof paths === "string") {
41
- return [{ pattern: [paths] }];
42
- }
43
- if (Array.isArray(paths)) {
44
- if (!paths.length)
45
- return [];
46
- return isStringArray(paths) ? [{ pattern: paths }] : paths;
47
- }
48
- return [paths];
49
- };
50
- var isStringArray = (data) => {
51
- return typeof data[0] === "string";
52
- };
53
57
 
54
- // src/file-to-modules.ts
55
- import { pathToFileURL } from "node:url";
56
- var fileToModules = async (files, filter) => {
57
- const total = /* @__PURE__ */ new Set();
58
+ // src/get-file-values.ts
59
+ var getFileValues = async (files, filterValues) => {
60
+ const totalFiles = /* @__PURE__ */ new Set();
58
61
  await Promise.all(
59
62
  files.map(async (file) => {
60
- const modules = await import(pathToFileURL(file).toString());
63
+ const modules = await import(file);
61
64
  if (typeof modules === "object") {
62
65
  Object.values(modules).forEach((item) => {
63
- total.add(item);
66
+ totalFiles.add(item);
64
67
  });
65
68
  }
66
69
  })
67
70
  );
68
- return filter ? [...total].filter(filter) : [...total];
71
+ return filterValues ? [...totalFiles].filter(filterValues) : [...totalFiles];
69
72
  };
70
73
  export {
71
- fileToModules,
74
+ getFileValues,
75
+ normalizeGlobPath,
72
76
  pathToFiles
73
77
  };
74
78
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/path-to-files.ts","../src/file-to-modules.ts"],"sourcesContent":["import path from 'node:path';\nimport { stat } from 'node:fs/promises';\nimport { glob, type GlobOptionsWithFileTypesFalse, hasMagic } from 'glob';\n\ninterface Options {\n pattern: string[];\n ignore?: string[];\n dot?: boolean;\n /**\n * 忽略 **node_modules** 文件夹。默认值:`true`\n */\n ignoreNodeModules?: boolean;\n /**\n * 忽略所有 **.d.{ts,mts,cts}** 类型声明文件。默认值:`true`\n */\n ignoreDTS?: boolean;\n}\n\nexport type PathToFileOptions = string | string[] | Options | Options[];\n\nexport const pathToFiles = async (\n paths: PathToFileOptions,\n): Promise<string[]> => {\n const opts = normalizeSearchPath(paths);\n\n const files = await Promise.all(\n opts.map((opt) => {\n const { dot, pattern: patterns } = opt;\n const ignore = (opt.ignore || []).slice();\n // FIXME: 即使不被ignore,也只能搜索到 node_modules/abc/xyz.js 这一层级的文件,再往下的子目录就被忽略了。\n ignore.push('**/node_modules/**', '**/*.d.{ts,mts,cts}');\n\n const options: GlobOptionsWithFileTypesFalse = {\n nodir: true,\n dot,\n ignore,\n absolute: true,\n withFileTypes: false,\n maxDepth: Infinity,\n };\n\n return Promise.all(\n patterns.map(async (pattern) => {\n if (!path.isAbsolute(pattern)) {\n pattern = path.posix.resolve(pattern);\n }\n\n /**\n * 在windows系统默认使用反斜杠`\\`拼接路径,但是glob只支持正斜杠`/`.\n * @link https://github.com/isaacs/node-glob#windows\n */\n pattern = pattern.replace(/\\\\/g, path.posix.sep);\n\n /**\n * glob.hasMagic 不支持带反斜杠(\\)的路径。从glob@9.0.0起,花括号不再是魔术路径\n * @see https://github.com/isaacs/node-glob/issues/496\n */\n if (!hasMagic(pattern, { magicalBraces: true })) {\n const stats = await stat(pattern);\n if (!stats.isFile()) {\n pattern = path.posix.join(pattern, '**', '*.{ts,js,mts,mjs}');\n }\n }\n\n return glob(pattern, options);\n }),\n );\n }),\n );\n\n return [...new Set(files.flat(2))].sort();\n};\n\nconst normalizeSearchPath = (paths: PathToFileOptions): Options[] => {\n if (typeof paths === 'string') {\n return [{ pattern: [paths] }];\n }\n\n if (Array.isArray(paths)) {\n if (!paths.length) return [];\n return isStringArray(paths) ? [{ pattern: paths }] : paths;\n }\n\n return [paths];\n};\n\nconst isStringArray = (data: string[] | Options[]): data is string[] => {\n return typeof data[0] === 'string';\n};\n","import { pathToFileURL } from 'node:url';\n\nexport const fileToModules = async <T extends unknown>(\n files: string[],\n filter?: (item?: T) => boolean,\n): Promise<T[]> => {\n const total = new Set<T>();\n await Promise.all(\n files.map(async (file) => {\n const modules = await import(pathToFileURL(file).toString());\n if (typeof modules === 'object') {\n Object.values(modules).forEach((item) => {\n total.add(item as any);\n });\n }\n }),\n );\n return filter ? [...total].filter(filter) : [...total];\n};\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,SAAS,YAAY;AACrB,SAAS,MAA0C,gBAAgB;AAkB5D,IAAM,cAAc,OACzB,UACsB;AACtB,QAAM,OAAO,oBAAoB,KAAK;AAEtC,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,KAAK,IAAI,CAAC,QAAQ;AAChB,YAAM,EAAE,KAAK,SAAS,SAAS,IAAI;AACnC,YAAM,UAAU,IAAI,UAAU,CAAC,GAAG,MAAM;AAExC,aAAO,KAAK,sBAAsB,qBAAqB;AAEvD,YAAM,UAAyC;AAAA,QAC7C,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,MACZ;AAEA,aAAO,QAAQ;AAAA,QACb,SAAS,IAAI,OAAO,YAAY;AAC9B,cAAI,CAAC,KAAK,WAAW,OAAO,GAAG;AAC7B,sBAAU,KAAK,MAAM,QAAQ,OAAO;AAAA,UACtC;AAMA,oBAAU,QAAQ,QAAQ,OAAO,KAAK,MAAM,GAAG;AAM/C,cAAI,CAAC,SAAS,SAAS,EAAE,eAAe,KAAK,CAAC,GAAG;AAC/C,kBAAM,QAAQ,MAAM,KAAK,OAAO;AAChC,gBAAI,CAAC,MAAM,OAAO,GAAG;AACnB,wBAAU,KAAK,MAAM,KAAK,SAAS,MAAM,mBAAmB;AAAA,YAC9D;AAAA,UACF;AAEA,iBAAO,KAAK,SAAS,OAAO;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK;AAC1C;AAEA,IAAM,sBAAsB,CAAC,UAAwC;AACnE,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AAAA,EAC9B;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,CAAC,MAAM;AAAQ,aAAO,CAAC;AAC3B,WAAO,cAAc,KAAK,IAAI,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI;AAAA,EACvD;AAEA,SAAO,CAAC,KAAK;AACf;AAEA,IAAM,gBAAgB,CAAC,SAAiD;AACtE,SAAO,OAAO,KAAK,CAAC,MAAM;AAC5B;;;ACxFA,SAAS,qBAAqB;AAEvB,IAAM,gBAAgB,OAC3B,OACA,WACiB;AACjB,QAAM,QAAQ,oBAAI,IAAO;AACzB,QAAM,QAAQ;AAAA,IACZ,MAAM,IAAI,OAAO,SAAS;AACxB,YAAM,UAAU,MAAM,OAAO,cAAc,IAAI,EAAE,SAAS;AAC1D,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,OAAO,OAAO,EAAE,QAAQ,CAAC,SAAS;AACvC,gBAAM,IAAI,IAAW;AAAA,QACvB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,SAAS,CAAC,GAAG,KAAK,EAAE,OAAO,MAAM,IAAI,CAAC,GAAG,KAAK;AACvD;","names":[]}
1
+ {"version":3,"sources":["../src/path-to-file.ts","../src/normalize-glob-path.ts","../src/get-file-values.ts"],"sourcesContent":["import path from 'node:path';\nimport { stat } from 'node:fs/promises';\nimport { glob, type GlobOptionsWithFileTypesFalse, hasMagic } from 'glob';\nimport { normalizeGlobPath, type GlobPathOptions } from './normalize-glob-path';\n\nexport const pathToFiles = async (paths: GlobPathOptions): Promise<string[]> => {\n const opts = normalizeGlobPath(paths);\n\n const files = await Promise.all(\n opts.map((opt) => {\n const { dot, pattern: patterns } = opt;\n const ignore = (opt.ignore || []).slice();\n ignore.push('**/node_modules/**/**', '**/*.d.{ts,mts}');\n\n const options: GlobOptionsWithFileTypesFalse = {\n nodir: true,\n dot,\n ignore,\n absolute: true,\n withFileTypes: false,\n maxDepth: Infinity,\n };\n\n return Promise.all(\n patterns.map(async (pattern) => {\n if (!path.isAbsolute(pattern)) {\n pattern = path.resolve(pattern);\n }\n\n /**\n * 在windows系统默认使用反斜杠`\\`拼接路径,但是glob只支持正斜杠`/`.\n * @link https://github.com/isaacs/node-glob#windows\n */\n pattern = pattern.replace(/\\\\/g, path.posix.sep);\n\n /**\n * glob.hasMagic 不支持带反斜杠(\\)的路径。从glob@9.0.0起,花括号不再是魔术路径\n * @see https://github.com/isaacs/node-glob/issues/496\n */\n if (!hasMagic(pattern, { magicalBraces: true })) {\n const stats = await stat(pattern);\n if (!stats.isFile()) {\n pattern = path.posix.join(pattern, '**', '*.{ts,js,mts,mjs}');\n }\n }\n\n return glob(pattern, options);\n }),\n );\n }),\n );\n\n return [...new Set(files.flat(2))].sort();\n};\n","export interface GlobPathFullOptions {\n pattern: string[];\n ignore?: string[];\n dot?: boolean;\n}\n\nexport type GlobPathOptions =\n | string\n | string[]\n | GlobPathFullOptions\n | GlobPathFullOptions[];\n\nexport const normalizeGlobPath = (paths: GlobPathOptions): GlobPathFullOptions[] => {\n if (typeof paths === 'string') {\n return [{ pattern: [paths] }];\n }\n\n if (Array.isArray(paths)) {\n if (!paths.length) return [];\n return isStringArray(paths) ? [{ pattern: paths }] : paths;\n }\n\n return [paths];\n};\n\nconst isStringArray = (data: string[] | GlobPathFullOptions[]): data is string[] => {\n return typeof data[0] === 'string';\n};\n","export const getFileValues = async <T extends unknown>(\n files: string[],\n filterValues?: (item?: unknown) => boolean,\n): Promise<T[]> => {\n const totalFiles = new Set<T>();\n await Promise.all(\n files.map(async (file) => {\n const modules = await import(file);\n if (typeof modules === 'object') {\n Object.values(modules).forEach((item) => {\n totalFiles.add(item as any);\n });\n }\n }),\n );\n return filterValues ? [...totalFiles].filter(filterValues) : [...totalFiles];\n};\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,SAAS,YAAY;AACrB,SAAS,MAA0C,gBAAgB;;;ACU5D,IAAM,oBAAoB,CAAC,UAAkD;AAClF,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AAAA,EAC9B;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,CAAC,MAAM;AAAQ,aAAO,CAAC;AAC3B,WAAO,cAAc,KAAK,IAAI,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI;AAAA,EACvD;AAEA,SAAO,CAAC,KAAK;AACf;AAEA,IAAM,gBAAgB,CAAC,SAA6D;AAClF,SAAO,OAAO,KAAK,CAAC,MAAM;AAC5B;;;ADtBO,IAAM,cAAc,OAAO,UAA8C;AAC9E,QAAM,OAAO,kBAAkB,KAAK;AAEpC,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,KAAK,IAAI,CAAC,QAAQ;AAChB,YAAM,EAAE,KAAK,SAAS,SAAS,IAAI;AACnC,YAAM,UAAU,IAAI,UAAU,CAAC,GAAG,MAAM;AACxC,aAAO,KAAK,yBAAyB,iBAAiB;AAEtD,YAAM,UAAyC;AAAA,QAC7C,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,MACZ;AAEA,aAAO,QAAQ;AAAA,QACb,SAAS,IAAI,OAAO,YAAY;AAC9B,cAAI,CAAC,KAAK,WAAW,OAAO,GAAG;AAC7B,sBAAU,KAAK,QAAQ,OAAO;AAAA,UAChC;AAMA,oBAAU,QAAQ,QAAQ,OAAO,KAAK,MAAM,GAAG;AAM/C,cAAI,CAAC,SAAS,SAAS,EAAE,eAAe,KAAK,CAAC,GAAG;AAC/C,kBAAM,QAAQ,MAAM,KAAK,OAAO;AAChC,gBAAI,CAAC,MAAM,OAAO,GAAG;AACnB,wBAAU,KAAK,MAAM,KAAK,SAAS,MAAM,mBAAmB;AAAA,YAC9D;AAAA,UACF;AAEA,iBAAO,KAAK,SAAS,OAAO;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK;AAC1C;;;AErDO,IAAM,gBAAgB,OAC3B,OACA,iBACiB;AACjB,QAAM,aAAa,oBAAI,IAAO;AAC9B,QAAM,QAAQ;AAAA,IACZ,MAAM,IAAI,OAAO,SAAS;AACxB,YAAM,UAAU,MAAM,OAAO;AAC7B,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,OAAO,OAAO,EAAE,QAAQ,CAAC,SAAS;AACvC,qBAAW,IAAI,IAAW;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,eAAe,CAAC,GAAG,UAAU,EAAE,OAAO,YAAY,IAAI,CAAC,GAAG,UAAU;AAC7E;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aomex/internal-file-import",
3
- "version": "0.0.27",
4
- "description": "ESM文件转换为模块",
3
+ "version": "1.0.1",
4
+ "description": "aomex根据文件路径导入模块",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -28,7 +28,5 @@
28
28
  "dependencies": {
29
29
  "glob": "^10.3.10"
30
30
  },
31
- "scripts": {
32
- "test": "vitest"
33
- }
31
+ "scripts": {}
34
32
  }