@noahnu/unused-files 0.2.0 → 0.2.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/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  <!-- MONOWEAVE:BELOW -->
4
4
 
5
+ ## @noahnu/unused-files (v0.2.2) <a name="0.2.2"></a>
6
+
7
+ Filter out files based on source directories.
8
+
9
+
10
+
11
+ ## @noahnu/unused-files (v0.2.1) <a name="0.2.1"></a>
12
+
13
+ Respect ignorePatterns for visiting files.
14
+
15
+
16
+
5
17
  ## @noahnu/unused-files (v0.2.0) <a name="0.2.0"></a>
6
18
 
7
19
  Support custom resolvers.
package/lib/api/index.js CHANGED
@@ -32,6 +32,7 @@ async function findUnusedFiles({ entryFiles, ignorePatterns = ['**/node_modules'
32
32
  resolvers,
33
33
  depth,
34
34
  visited: visitedFiles,
35
+ ignorePatterns,
35
36
  })) {
36
37
  let resolvedDependency = dependency;
37
38
  if (files.has(dependency)) {
@@ -49,12 +50,14 @@ async function findUnusedFiles({ entryFiles, ignorePatterns = ['**/node_modules'
49
50
  unvisitedFiles.delete(resolvedDependency);
50
51
  }
51
52
  }
53
+ const unused = Array.from(unvisitedFiles.intersection(files))
54
+ .map((abspath) => node_path_1.default.relative(cwd, abspath))
55
+ .sort();
56
+ const used = Array.from(visitedFiles.intersection(files))
57
+ .map((abspath) => node_path_1.default.relative(cwd, abspath))
58
+ .sort();
52
59
  return {
53
- unused: Array.from(unvisitedFiles)
54
- .map((abspath) => node_path_1.default.relative(cwd, abspath))
55
- .sort(),
56
- used: Array.from(visitedFiles)
57
- .map((abspath) => node_path_1.default.relative(cwd, abspath))
58
- .sort(),
60
+ unused,
61
+ used,
59
62
  };
60
63
  }
@@ -1,8 +1,9 @@
1
1
  import { type Resolver } from './types';
2
- export declare function walkDependencyTree(source: string, { resolvers, visited, depth, }?: {
2
+ export declare function walkDependencyTree(source: string, { resolvers, visited, depth, ignorePatterns, }?: {
3
3
  resolvers?: Resolver[];
4
4
  visited?: Set<string>;
5
5
  depth?: number;
6
+ ignorePatterns?: string[];
6
7
  }): AsyncGenerator<{
7
8
  source: string;
8
9
  dependency: string;
@@ -8,15 +8,18 @@ const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
10
10
  const debug_1 = __importDefault(require("debug"));
11
+ const micromatch_1 = __importDefault(require("micromatch"));
11
12
  const debug = (0, debug_1.default)('unused-files:parse');
12
13
  const DEFAULT_DEPTH_LIMIT = -1; // no depth limit
13
14
  const VALID_EXTENSIONS = new Set(['ts', 'tsx', 'mts', 'cts', 'js', 'jsx', 'mjs', 'cjs']);
14
- async function* walkDependencyTree(source, { resolvers, visited, depth = DEFAULT_DEPTH_LIMIT, } = {}) {
15
+ async function* walkDependencyTree(source, { resolvers, visited, depth = DEFAULT_DEPTH_LIMIT, ignorePatterns, } = {}) {
15
16
  const ext = node_path_1.default.extname(source).substring(1);
16
17
  if (!VALID_EXTENSIONS.has(ext)) {
17
18
  debug(`${source}: Unknown file extension '${ext}' [skipping]`);
18
19
  return;
19
20
  }
21
+ // Convert to realpath if possible
22
+ source = await node_fs_1.default.promises.realpath(source).catch(() => source);
20
23
  const visitedSet = visited ?? new Set();
21
24
  if (visitedSet.has(source))
22
25
  return;
@@ -89,12 +92,16 @@ async function* walkDependencyTree(source, { resolvers, visited, depth = DEFAULT
89
92
  for (const importFrom of Array.from(importFroms)) {
90
93
  const absPath = await resolveToAbsPath(importFrom);
91
94
  if (absPath) {
95
+ if (ignorePatterns && micromatch_1.default.isMatch(absPath, ignorePatterns)) {
96
+ continue;
97
+ }
92
98
  yield { dependency: absPath, source };
93
99
  if (depth === -1 || depth > 0) {
94
100
  yield* walkDependencyTree(absPath, {
95
101
  resolvers,
96
102
  visited: visitedSet,
97
103
  depth: depth === -1 ? depth : depth - 1,
104
+ ignorePatterns,
98
105
  });
99
106
  }
100
107
  }
package/lib/command.js CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.BaseCommand = void 0;
27
37
  const clipanion_1 = require("clipanion");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noahnu/unused-files",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/noahnu/nodejs-tools.git",
@@ -35,13 +35,15 @@
35
35
  "clipanion": "^4.0.0-rc.4",
36
36
  "debug": "^4.3.7",
37
37
  "fast-glob": "^3.3.2",
38
+ "micromatch": "^4.0.8",
38
39
  "typanion": "^3.14.0"
39
40
  },
40
41
  "devDependencies": {
41
42
  "@jest/globals": "^29.7.0",
42
43
  "@noahnu/internal-test-utils": "0.0.0",
44
+ "@types/micromatch": "^4.0.9",
43
45
  "@types/node": "^22.9.0",
44
- "typescript": "^5.6.3"
46
+ "typescript": "^5.7.2"
45
47
  },
46
48
  "types": "./lib/api/index.d.ts"
47
49
  }