@xylabs/ts-scripts-yarn3 3.2.32 → 3.2.34

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.
@@ -35,9 +35,15 @@ var import_chalk = __toESM(require("chalk"));
35
35
  var import_depcheck = __toESM(require("depcheck"));
36
36
  var import_fs = require("fs");
37
37
  var import_lib = require("../../lib");
38
- const andStringArrays = (arrays) => {
39
- return arrays[0].filter((value) => arrays[1].includes(value));
40
- };
38
+ const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
39
+ const defaultIgnoreDevDeps = [
40
+ "@xylabs/ts-scripts-yarn3",
41
+ "@xylabs/tsconfig",
42
+ "@xylabs/tsconfig-dom",
43
+ "@xylabs/tsconfig-react",
44
+ "@xylabs/tsconfig-jest",
45
+ "typescript"
46
+ ];
41
47
  const reportUnused = (name, unused) => {
42
48
  if (unused.length) {
43
49
  const message = [import_chalk.default.yellow(`${unused.length} Unused ${name}`)];
@@ -46,7 +52,7 @@ const reportUnused = (name, unused) => {
46
52
  }
47
53
  };
48
54
  const reportMissing = (name, missing) => {
49
- if (missing.length) {
55
+ if (Object.keys(missing).length) {
50
56
  const message = [import_chalk.default.yellow(`${Object.entries(missing).length} Missing ${name}`)];
51
57
  Object.entries(missing).forEach(([key, value]) => {
52
58
  message.push(`${key}`);
@@ -67,65 +73,54 @@ const packageDeps = async () => {
67
73
  const error = ex;
68
74
  console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
69
75
  }
70
- const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
71
- const defaultIgnoreMatches = [
72
- "@xylabs/ts-scripts-yarn3",
73
- "@xylabs/tsconfig",
74
- "@xylabs/tsconfig-dom",
75
- "@xylabs/tsconfig-react",
76
- "@xylabs/tsconfig-jest",
77
- "typescript"
78
- ];
79
76
  const [srcUnused, allUnused] = await Promise.all([
80
77
  (0, import_depcheck.default)(`${pkg}/src`, {
81
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
78
+ ignoreMatches,
82
79
  ignorePatterns: ["*.stories.*", "*.spec.*", "spec", ...defaultIgnorePatterns],
83
80
  package: packageContent
84
81
  }),
85
82
  (0, import_depcheck.default)(`${pkg}/.`, {
86
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
83
+ ignoreMatches,
87
84
  ignorePatterns: [...defaultIgnorePatterns],
88
85
  package: packageContent,
89
86
  specials: [import_depcheck.special.eslint, import_depcheck.special.babel, import_depcheck.special.bin, import_depcheck.special.prettier, import_depcheck.special.jest, import_depcheck.special.mocha]
90
87
  })
91
88
  ]);
92
- const unused = {
93
- ...srcUnused,
94
- /* we only reports the unused devDeps if both src or other are not using it */
95
- devDependencies: andStringArrays([allUnused.devDependencies, srcUnused.devDependencies])
96
- };
89
+ const unusedDeps = srcUnused.dependencies;
90
+ const unusedDevDeps = allUnused.devDependencies;
91
+ const usedDeps = srcUnused.using;
92
+ const usedDevDeps = allUnused.using;
93
+ const { invalidDirs, invalidFiles } = allUnused;
97
94
  const declaredDeps = Object.keys(packageContent.dependencies ?? {});
98
95
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {});
99
- const missingDeps = Object.keys(srcUnused.using).filter(
100
- (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith("@types/") && !defaultIgnoreMatches.includes(key)
96
+ const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {});
97
+ const missingDeps = Object.keys(usedDeps).filter(
98
+ (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith("@types/")
101
99
  );
102
- const missingDepsObject = Object.entries(srcUnused.missing).reduce(
103
- (prev, [key, value]) => {
104
- if (missingDeps.includes(key)) {
105
- prev[key] = value;
106
- }
107
- return prev;
108
- },
109
- {}
100
+ const missingDevDeps = Object.keys(usedDevDeps).filter(
101
+ (key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key) && !defaultIgnoreDevDeps.includes(key)
110
102
  );
111
- const errorCount = unused.dependencies.length + unused.devDependencies.length + Object.entries(unused.invalidDirs).length + Object.entries(unused.invalidFiles).length + Object.entries(missingDepsObject).length;
103
+ const missingDepsObject = {};
104
+ missingDeps.forEach((key) => {
105
+ missingDepsObject[key] = srcUnused.missing[key];
106
+ });
107
+ const missingDevDepsObject = {};
108
+ missingDevDeps.forEach((key) => {
109
+ missingDevDepsObject[key] = allUnused.missing[key];
110
+ });
111
+ const errorCount = unusedDeps.length + unusedDevDeps.length + Object.entries(invalidDirs).length + Object.entries(invalidFiles).length + Object.entries(missingDepsObject).length;
112
112
  if (errorCount > 0) {
113
113
  console.log(`Deps [${pkgName}]`);
114
- console.log(`unused.dependencies: ${JSON.stringify(unused.dependencies)}`);
115
- console.log(`unused.devDependencies: ${JSON.stringify(unused.devDependencies)}`);
116
- console.log(`unused.invalidDirs: ${JSON.stringify(unused.invalidDirs)}`);
117
- console.log(`unused.invalidFiles: ${JSON.stringify(unused.invalidFiles)}`);
118
- console.log(`missingDepsObject: ${JSON.stringify(missingDepsObject)}`);
119
114
  } else {
120
115
  console.log(`Deps [${pkgName}] - Ok`);
121
116
  }
122
- reportUnused("dependencies", unused.dependencies);
123
- reportUnused("devDependencies", unused.devDependencies);
124
- if (Object.entries(unused.invalidDirs).length) {
125
- Object.entries(unused.invalidDirs).forEach(([key, value]) => console.warn(import_chalk.default.gray(`Invalid Dir: ${key}: ${value}`)));
117
+ reportUnused("dependencies", unusedDeps);
118
+ reportUnused("devDependencies", unusedDevDeps);
119
+ if (Object.entries(invalidDirs).length) {
120
+ Object.entries(invalidDirs).forEach(([key, value]) => console.warn(import_chalk.default.gray(`Invalid Dir: ${key}: ${value}`)));
126
121
  }
127
- if (Object.entries(unused.invalidFiles).length) {
128
- Object.entries(unused.invalidFiles).forEach(([key, value]) => console.warn(import_chalk.default.gray(`Invalid File: ${key}: ${value}`)));
122
+ if (Object.entries(invalidFiles).length) {
123
+ Object.entries(invalidFiles).forEach(([key, value]) => console.warn(import_chalk.default.gray(`Invalid File: ${key}: ${value}`)));
129
124
  }
130
125
  reportMissing("dependencies", missingDepsObject);
131
126
  reportMissing("devDependencies", allUnused.missing);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/package/deps.ts"],"sourcesContent":["/* eslint-disable max-statements */\nimport chalk from 'chalk'\nimport depcheck, { special } from 'depcheck'\nimport { existsSync, readFileSync } from 'fs'\n\nimport { checkResult } from '../../lib'\n\nconst andStringArrays = (arrays: [string[], string[]]): string[] => {\n return arrays[0].filter((value) => arrays[1].includes(value))\n}\n\nconst reportUnused = (name: string, unused: depcheck.Results['dependencies']) => {\n if (unused.length) {\n const message = [chalk.yellow(`${unused.length} Unused ${name}`)]\n unused.forEach((value) => message.push(chalk.gray(` ${value}`)))\n console.log(message.join('\\n'))\n }\n}\n\nconst reportMissing = (name: string, missing: depcheck.Results['missing']) => {\n if (missing.length) {\n const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)]\n Object.entries(missing).forEach(([key, value]) => {\n message.push(`${key}`)\n message.push(chalk.gray(` ${value.at(0)}`))\n })\n console.log(chalk.yellow(message.join('\\n')))\n }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD\n const pkgName = process.env.npm_package_name\n\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n\n const rawIgnore = existsSync(`${pkg}/.depcheckrc`)\n ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '\"ignores\":')\n : undefined\n let ignoreMatches: string[] = []\n try {\n ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []\n } catch (ex) {\n const error = ex as Error\n console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)\n }\n\n const defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']\n const defaultIgnoreMatches = [\n '@xylabs/ts-scripts-yarn3',\n '@xylabs/tsconfig',\n '@xylabs/tsconfig-dom',\n '@xylabs/tsconfig-react',\n '@xylabs/tsconfig-jest',\n 'typescript',\n ]\n\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],\n ignorePatterns: ['*.stories.*', '*.spec.*', 'spec', ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],\n ignorePatterns: [...defaultIgnorePatterns],\n package: packageContent,\n specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha],\n }),\n ])\n\n const unused: depcheck.Results = {\n ...srcUnused,\n /* we only reports the unused devDeps if both src or other are not using it */\n devDependencies: andStringArrays([allUnused.devDependencies, srcUnused.devDependencies]),\n }\n\n const declaredDeps = Object.keys(packageContent.dependencies ?? {})\n const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})\n\n const missingDeps = Object.keys(srcUnused.using).filter(\n (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/') && !defaultIgnoreMatches.includes(key),\n )\n\n const missingDepsObject = Object.entries(srcUnused.missing).reduce(\n (prev, [key, value]) => {\n if (missingDeps.includes(key)) {\n prev[key] = value\n }\n return prev\n },\n {} as Record<string, string[]>,\n )\n\n const errorCount =\n unused.dependencies.length +\n unused.devDependencies.length +\n Object.entries(unused.invalidDirs).length +\n Object.entries(unused.invalidFiles).length +\n Object.entries(missingDepsObject).length\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}]`)\n console.log(`unused.dependencies: ${JSON.stringify(unused.dependencies)}`)\n console.log(`unused.devDependencies: ${JSON.stringify(unused.devDependencies)}`)\n console.log(`unused.invalidDirs: ${JSON.stringify(unused.invalidDirs)}`)\n console.log(`unused.invalidFiles: ${JSON.stringify(unused.invalidFiles)}`)\n console.log(`missingDepsObject: ${JSON.stringify(missingDepsObject)}`)\n } else {\n console.log(`Deps [${pkgName}] - Ok`)\n }\n\n reportUnused('dependencies', unused.dependencies)\n reportUnused('devDependencies', unused.devDependencies)\n\n if (Object.entries(unused.invalidDirs).length) {\n Object.entries(unused.invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))\n }\n\n if (Object.entries(unused.invalidFiles).length) {\n Object.entries(unused.invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))\n }\n\n reportMissing('dependencies', missingDepsObject)\n reportMissing('devDependencies', allUnused.missing)\n\n checkResult(`Deps [${pkgName}]`, errorCount, 'warn', false)\n\n //returning 0 here since we never want deps to be fatal\n return 0\n}\n"],"mappings":"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","names":["chalk","depcheck"]}
1
+ {"version":3,"sources":["../../../src/actions/package/deps.ts"],"sourcesContent":["/* eslint-disable max-statements */\nimport chalk from 'chalk'\nimport depcheck, { special } from 'depcheck'\nimport { existsSync, readFileSync } from 'fs'\n\nimport { checkResult } from '../../lib'\n\nconst defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']\nconst defaultIgnoreDevDeps = [\n '@xylabs/ts-scripts-yarn3',\n '@xylabs/tsconfig',\n '@xylabs/tsconfig-dom',\n '@xylabs/tsconfig-react',\n '@xylabs/tsconfig-jest',\n 'typescript',\n]\n\nconst reportUnused = (name: string, unused: depcheck.Results['dependencies']) => {\n if (unused.length) {\n const message = [chalk.yellow(`${unused.length} Unused ${name}`)]\n unused.forEach((value) => message.push(chalk.gray(` ${value}`)))\n console.log(message.join('\\n'))\n }\n}\n\nconst reportMissing = (name: string, missing: depcheck.Results['missing']) => {\n if (Object.keys(missing).length) {\n const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)]\n Object.entries(missing).forEach(([key, value]) => {\n message.push(`${key}`)\n message.push(chalk.gray(` ${value.at(0)}`))\n })\n console.log(chalk.yellow(message.join('\\n')))\n }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD\n const pkgName = process.env.npm_package_name\n\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n\n const rawIgnore = existsSync(`${pkg}/.depcheckrc`)\n ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '\"ignores\":')\n : undefined\n let ignoreMatches: string[] = []\n try {\n ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []\n } catch (ex) {\n const error = ex as Error\n console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)\n }\n\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches: ignoreMatches,\n ignorePatterns: ['*.stories.*', '*.spec.*', 'spec', ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: ignoreMatches,\n ignorePatterns: [...defaultIgnorePatterns],\n package: packageContent,\n specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha],\n }),\n ])\n\n const unusedDeps = srcUnused.dependencies\n const unusedDevDeps = allUnused.devDependencies\n const usedDeps = srcUnused.using\n const usedDevDeps = allUnused.using\n\n const { invalidDirs, invalidFiles } = allUnused\n\n const declaredDeps = Object.keys(packageContent.dependencies ?? {})\n const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})\n const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {})\n\n const missingDeps = Object.keys(usedDeps).filter(\n (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/'),\n )\n\n const missingDevDeps = Object.keys(usedDevDeps).filter(\n (key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key) && !defaultIgnoreDevDeps.includes(key),\n )\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n missingDepsObject[key] = srcUnused.missing[key]\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n missingDevDepsObject[key] = allUnused.missing[key]\n })\n\n const errorCount =\n unusedDeps.length +\n unusedDevDeps.length +\n Object.entries(invalidDirs).length +\n Object.entries(invalidFiles).length +\n Object.entries(missingDepsObject).length\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}]`)\n } else {\n console.log(`Deps [${pkgName}] - Ok`)\n }\n\n reportUnused('dependencies', unusedDeps)\n reportUnused('devDependencies', unusedDevDeps)\n\n if (Object.entries(invalidDirs).length) {\n Object.entries(invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))\n }\n\n if (Object.entries(invalidFiles).length) {\n Object.entries(invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))\n }\n\n reportMissing('dependencies', missingDepsObject)\n reportMissing('devDependencies', allUnused.missing)\n\n checkResult(`Deps [${pkgName}]`, errorCount, 'warn', false)\n\n //returning 0 here since we never want deps to be fatal\n return 0\n}\n"],"mappings":"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","names":["chalk","depcheck"]}
@@ -2,9 +2,15 @@ import chalk from "chalk";
2
2
  import depcheck, { special } from "depcheck";
3
3
  import { existsSync, readFileSync } from "fs";
4
4
  import { checkResult } from "../../lib";
5
- const andStringArrays = (arrays) => {
6
- return arrays[0].filter((value) => arrays[1].includes(value));
7
- };
5
+ const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
6
+ const defaultIgnoreDevDeps = [
7
+ "@xylabs/ts-scripts-yarn3",
8
+ "@xylabs/tsconfig",
9
+ "@xylabs/tsconfig-dom",
10
+ "@xylabs/tsconfig-react",
11
+ "@xylabs/tsconfig-jest",
12
+ "typescript"
13
+ ];
8
14
  const reportUnused = (name, unused) => {
9
15
  if (unused.length) {
10
16
  const message = [chalk.yellow(`${unused.length} Unused ${name}`)];
@@ -13,7 +19,7 @@ const reportUnused = (name, unused) => {
13
19
  }
14
20
  };
15
21
  const reportMissing = (name, missing) => {
16
- if (missing.length) {
22
+ if (Object.keys(missing).length) {
17
23
  const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)];
18
24
  Object.entries(missing).forEach(([key, value]) => {
19
25
  message.push(`${key}`);
@@ -34,65 +40,54 @@ const packageDeps = async () => {
34
40
  const error = ex;
35
41
  console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
36
42
  }
37
- const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
38
- const defaultIgnoreMatches = [
39
- "@xylabs/ts-scripts-yarn3",
40
- "@xylabs/tsconfig",
41
- "@xylabs/tsconfig-dom",
42
- "@xylabs/tsconfig-react",
43
- "@xylabs/tsconfig-jest",
44
- "typescript"
45
- ];
46
43
  const [srcUnused, allUnused] = await Promise.all([
47
44
  depcheck(`${pkg}/src`, {
48
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
45
+ ignoreMatches,
49
46
  ignorePatterns: ["*.stories.*", "*.spec.*", "spec", ...defaultIgnorePatterns],
50
47
  package: packageContent
51
48
  }),
52
49
  depcheck(`${pkg}/.`, {
53
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
50
+ ignoreMatches,
54
51
  ignorePatterns: [...defaultIgnorePatterns],
55
52
  package: packageContent,
56
53
  specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha]
57
54
  })
58
55
  ]);
59
- const unused = {
60
- ...srcUnused,
61
- /* we only reports the unused devDeps if both src or other are not using it */
62
- devDependencies: andStringArrays([allUnused.devDependencies, srcUnused.devDependencies])
63
- };
56
+ const unusedDeps = srcUnused.dependencies;
57
+ const unusedDevDeps = allUnused.devDependencies;
58
+ const usedDeps = srcUnused.using;
59
+ const usedDevDeps = allUnused.using;
60
+ const { invalidDirs, invalidFiles } = allUnused;
64
61
  const declaredDeps = Object.keys(packageContent.dependencies ?? {});
65
62
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {});
66
- const missingDeps = Object.keys(srcUnused.using).filter(
67
- (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith("@types/") && !defaultIgnoreMatches.includes(key)
63
+ const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {});
64
+ const missingDeps = Object.keys(usedDeps).filter(
65
+ (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith("@types/")
68
66
  );
69
- const missingDepsObject = Object.entries(srcUnused.missing).reduce(
70
- (prev, [key, value]) => {
71
- if (missingDeps.includes(key)) {
72
- prev[key] = value;
73
- }
74
- return prev;
75
- },
76
- {}
67
+ const missingDevDeps = Object.keys(usedDevDeps).filter(
68
+ (key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key) && !defaultIgnoreDevDeps.includes(key)
77
69
  );
78
- const errorCount = unused.dependencies.length + unused.devDependencies.length + Object.entries(unused.invalidDirs).length + Object.entries(unused.invalidFiles).length + Object.entries(missingDepsObject).length;
70
+ const missingDepsObject = {};
71
+ missingDeps.forEach((key) => {
72
+ missingDepsObject[key] = srcUnused.missing[key];
73
+ });
74
+ const missingDevDepsObject = {};
75
+ missingDevDeps.forEach((key) => {
76
+ missingDevDepsObject[key] = allUnused.missing[key];
77
+ });
78
+ const errorCount = unusedDeps.length + unusedDevDeps.length + Object.entries(invalidDirs).length + Object.entries(invalidFiles).length + Object.entries(missingDepsObject).length;
79
79
  if (errorCount > 0) {
80
80
  console.log(`Deps [${pkgName}]`);
81
- console.log(`unused.dependencies: ${JSON.stringify(unused.dependencies)}`);
82
- console.log(`unused.devDependencies: ${JSON.stringify(unused.devDependencies)}`);
83
- console.log(`unused.invalidDirs: ${JSON.stringify(unused.invalidDirs)}`);
84
- console.log(`unused.invalidFiles: ${JSON.stringify(unused.invalidFiles)}`);
85
- console.log(`missingDepsObject: ${JSON.stringify(missingDepsObject)}`);
86
81
  } else {
87
82
  console.log(`Deps [${pkgName}] - Ok`);
88
83
  }
89
- reportUnused("dependencies", unused.dependencies);
90
- reportUnused("devDependencies", unused.devDependencies);
91
- if (Object.entries(unused.invalidDirs).length) {
92
- Object.entries(unused.invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)));
84
+ reportUnused("dependencies", unusedDeps);
85
+ reportUnused("devDependencies", unusedDevDeps);
86
+ if (Object.entries(invalidDirs).length) {
87
+ Object.entries(invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)));
93
88
  }
94
- if (Object.entries(unused.invalidFiles).length) {
95
- Object.entries(unused.invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)));
89
+ if (Object.entries(invalidFiles).length) {
90
+ Object.entries(invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)));
96
91
  }
97
92
  reportMissing("dependencies", missingDepsObject);
98
93
  reportMissing("devDependencies", allUnused.missing);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/package/deps.ts"],"sourcesContent":["/* eslint-disable max-statements */\nimport chalk from 'chalk'\nimport depcheck, { special } from 'depcheck'\nimport { existsSync, readFileSync } from 'fs'\n\nimport { checkResult } from '../../lib'\n\nconst andStringArrays = (arrays: [string[], string[]]): string[] => {\n return arrays[0].filter((value) => arrays[1].includes(value))\n}\n\nconst reportUnused = (name: string, unused: depcheck.Results['dependencies']) => {\n if (unused.length) {\n const message = [chalk.yellow(`${unused.length} Unused ${name}`)]\n unused.forEach((value) => message.push(chalk.gray(` ${value}`)))\n console.log(message.join('\\n'))\n }\n}\n\nconst reportMissing = (name: string, missing: depcheck.Results['missing']) => {\n if (missing.length) {\n const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)]\n Object.entries(missing).forEach(([key, value]) => {\n message.push(`${key}`)\n message.push(chalk.gray(` ${value.at(0)}`))\n })\n console.log(chalk.yellow(message.join('\\n')))\n }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD\n const pkgName = process.env.npm_package_name\n\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n\n const rawIgnore = existsSync(`${pkg}/.depcheckrc`)\n ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '\"ignores\":')\n : undefined\n let ignoreMatches: string[] = []\n try {\n ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []\n } catch (ex) {\n const error = ex as Error\n console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)\n }\n\n const defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']\n const defaultIgnoreMatches = [\n '@xylabs/ts-scripts-yarn3',\n '@xylabs/tsconfig',\n '@xylabs/tsconfig-dom',\n '@xylabs/tsconfig-react',\n '@xylabs/tsconfig-jest',\n 'typescript',\n ]\n\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],\n ignorePatterns: ['*.stories.*', '*.spec.*', 'spec', ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],\n ignorePatterns: [...defaultIgnorePatterns],\n package: packageContent,\n specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha],\n }),\n ])\n\n const unused: depcheck.Results = {\n ...srcUnused,\n /* we only reports the unused devDeps if both src or other are not using it */\n devDependencies: andStringArrays([allUnused.devDependencies, srcUnused.devDependencies]),\n }\n\n const declaredDeps = Object.keys(packageContent.dependencies ?? {})\n const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})\n\n const missingDeps = Object.keys(srcUnused.using).filter(\n (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/') && !defaultIgnoreMatches.includes(key),\n )\n\n const missingDepsObject = Object.entries(srcUnused.missing).reduce(\n (prev, [key, value]) => {\n if (missingDeps.includes(key)) {\n prev[key] = value\n }\n return prev\n },\n {} as Record<string, string[]>,\n )\n\n const errorCount =\n unused.dependencies.length +\n unused.devDependencies.length +\n Object.entries(unused.invalidDirs).length +\n Object.entries(unused.invalidFiles).length +\n Object.entries(missingDepsObject).length\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}]`)\n console.log(`unused.dependencies: ${JSON.stringify(unused.dependencies)}`)\n console.log(`unused.devDependencies: ${JSON.stringify(unused.devDependencies)}`)\n console.log(`unused.invalidDirs: ${JSON.stringify(unused.invalidDirs)}`)\n console.log(`unused.invalidFiles: ${JSON.stringify(unused.invalidFiles)}`)\n console.log(`missingDepsObject: ${JSON.stringify(missingDepsObject)}`)\n } else {\n console.log(`Deps [${pkgName}] - Ok`)\n }\n\n reportUnused('dependencies', unused.dependencies)\n reportUnused('devDependencies', unused.devDependencies)\n\n if (Object.entries(unused.invalidDirs).length) {\n Object.entries(unused.invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))\n }\n\n if (Object.entries(unused.invalidFiles).length) {\n Object.entries(unused.invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))\n }\n\n reportMissing('dependencies', missingDepsObject)\n reportMissing('devDependencies', allUnused.missing)\n\n checkResult(`Deps [${pkgName}]`, errorCount, 'warn', false)\n\n //returning 0 here since we never want deps to be fatal\n return 0\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/actions/package/deps.ts"],"sourcesContent":["/* eslint-disable max-statements */\nimport chalk from 'chalk'\nimport depcheck, { special } from 'depcheck'\nimport { existsSync, readFileSync } from 'fs'\n\nimport { checkResult } from '../../lib'\n\nconst defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']\nconst defaultIgnoreDevDeps = [\n '@xylabs/ts-scripts-yarn3',\n '@xylabs/tsconfig',\n '@xylabs/tsconfig-dom',\n '@xylabs/tsconfig-react',\n '@xylabs/tsconfig-jest',\n 'typescript',\n]\n\nconst reportUnused = (name: string, unused: depcheck.Results['dependencies']) => {\n if (unused.length) {\n const message = [chalk.yellow(`${unused.length} Unused ${name}`)]\n unused.forEach((value) => message.push(chalk.gray(` ${value}`)))\n console.log(message.join('\\n'))\n }\n}\n\nconst reportMissing = (name: string, missing: depcheck.Results['missing']) => {\n if (Object.keys(missing).length) {\n const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)]\n Object.entries(missing).forEach(([key, value]) => {\n message.push(`${key}`)\n message.push(chalk.gray(` ${value.at(0)}`))\n })\n console.log(chalk.yellow(message.join('\\n')))\n }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD\n const pkgName = process.env.npm_package_name\n\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n\n const rawIgnore = existsSync(`${pkg}/.depcheckrc`)\n ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '\"ignores\":')\n : undefined\n let ignoreMatches: string[] = []\n try {\n ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []\n } catch (ex) {\n const error = ex as Error\n console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)\n }\n\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches: ignoreMatches,\n ignorePatterns: ['*.stories.*', '*.spec.*', 'spec', ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: ignoreMatches,\n ignorePatterns: [...defaultIgnorePatterns],\n package: packageContent,\n specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha],\n }),\n ])\n\n const unusedDeps = srcUnused.dependencies\n const unusedDevDeps = allUnused.devDependencies\n const usedDeps = srcUnused.using\n const usedDevDeps = allUnused.using\n\n const { invalidDirs, invalidFiles } = allUnused\n\n const declaredDeps = Object.keys(packageContent.dependencies ?? {})\n const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})\n const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {})\n\n const missingDeps = Object.keys(usedDeps).filter(\n (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/'),\n )\n\n const missingDevDeps = Object.keys(usedDevDeps).filter(\n (key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key) && !defaultIgnoreDevDeps.includes(key),\n )\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n missingDepsObject[key] = srcUnused.missing[key]\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n missingDevDepsObject[key] = allUnused.missing[key]\n })\n\n const errorCount =\n unusedDeps.length +\n unusedDevDeps.length +\n Object.entries(invalidDirs).length +\n Object.entries(invalidFiles).length +\n Object.entries(missingDepsObject).length\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}]`)\n } else {\n console.log(`Deps [${pkgName}] - Ok`)\n }\n\n reportUnused('dependencies', unusedDeps)\n reportUnused('devDependencies', unusedDevDeps)\n\n if (Object.entries(invalidDirs).length) {\n Object.entries(invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))\n }\n\n if (Object.entries(invalidFiles).length) {\n Object.entries(invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))\n }\n\n reportMissing('dependencies', missingDepsObject)\n reportMissing('devDependencies', allUnused.missing)\n\n checkResult(`Deps [${pkgName}]`, errorCount, 'warn', false)\n\n //returning 0 here since we never want deps to be fatal\n return 0\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -64,7 +64,7 @@
64
64
  "@types/yargs": "^17.0.32",
65
65
  "@typescript-eslint/eslint-plugin": "^6.18.0",
66
66
  "@typescript-eslint/parser": "^6.18.0",
67
- "@xylabs/tsconfig": "~3.2.32",
67
+ "@xylabs/tsconfig": "~3.2.34",
68
68
  "async-mutex": "^0.4.0",
69
69
  "chalk": "^4.1.2",
70
70
  "cosmiconfig": "^8.3.6",
@@ -112,8 +112,8 @@
112
112
  "@types/license-checker": "^25.0.6",
113
113
  "@types/lodash": "^4.14.202",
114
114
  "@types/parse-git-config": "^3.0.4",
115
- "@xylabs/eslint-config": "~3.2.32",
116
- "@xylabs/tsconfig": "~3.2.32",
115
+ "@xylabs/eslint-config": "~3.2.34",
116
+ "@xylabs/tsconfig": "~3.2.34",
117
117
  "publint": "^0.2.7",
118
118
  "typescript": "^5.3.3"
119
119
  },
@@ -169,6 +169,6 @@
169
169
  "package-clean": "echo Not cleaning..."
170
170
  },
171
171
  "sideEffects": false,
172
- "version": "3.2.32",
172
+ "version": "3.2.34",
173
173
  "type": "commonjs"
174
174
  }
@@ -5,9 +5,15 @@ import { existsSync, readFileSync } from 'fs'
5
5
 
6
6
  import { checkResult } from '../../lib'
7
7
 
8
- const andStringArrays = (arrays: [string[], string[]]): string[] => {
9
- return arrays[0].filter((value) => arrays[1].includes(value))
10
- }
8
+ const defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']
9
+ const defaultIgnoreDevDeps = [
10
+ '@xylabs/ts-scripts-yarn3',
11
+ '@xylabs/tsconfig',
12
+ '@xylabs/tsconfig-dom',
13
+ '@xylabs/tsconfig-react',
14
+ '@xylabs/tsconfig-jest',
15
+ 'typescript',
16
+ ]
11
17
 
12
18
  const reportUnused = (name: string, unused: depcheck.Results['dependencies']) => {
13
19
  if (unused.length) {
@@ -18,7 +24,7 @@ const reportUnused = (name: string, unused: depcheck.Results['dependencies']) =>
18
24
  }
19
25
 
20
26
  const reportMissing = (name: string, missing: depcheck.Results['missing']) => {
21
- if (missing.length) {
27
+ if (Object.keys(missing).length) {
22
28
  const message = [chalk.yellow(`${Object.entries(missing).length} Missing ${name}`)]
23
29
  Object.entries(missing).forEach(([key, value]) => {
24
30
  message.push(`${key}`)
@@ -45,80 +51,71 @@ export const packageDeps = async () => {
45
51
  console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)
46
52
  }
47
53
 
48
- const defaultIgnorePatterns = ['*.d.ts', 'dist', '.*', 'node_modules']
49
- const defaultIgnoreMatches = [
50
- '@xylabs/ts-scripts-yarn3',
51
- '@xylabs/tsconfig',
52
- '@xylabs/tsconfig-dom',
53
- '@xylabs/tsconfig-react',
54
- '@xylabs/tsconfig-jest',
55
- 'typescript',
56
- ]
57
-
58
54
  const [srcUnused, allUnused] = await Promise.all([
59
55
  depcheck(`${pkg}/src`, {
60
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
56
+ ignoreMatches: ignoreMatches,
61
57
  ignorePatterns: ['*.stories.*', '*.spec.*', 'spec', ...defaultIgnorePatterns],
62
58
  package: packageContent,
63
59
  }),
64
60
  depcheck(`${pkg}/.`, {
65
- ignoreMatches: [...defaultIgnoreMatches, ...ignoreMatches],
61
+ ignoreMatches: ignoreMatches,
66
62
  ignorePatterns: [...defaultIgnorePatterns],
67
63
  package: packageContent,
68
64
  specials: [special.eslint, special.babel, special.bin, special.prettier, special.jest, special.mocha],
69
65
  }),
70
66
  ])
71
67
 
72
- const unused: depcheck.Results = {
73
- ...srcUnused,
74
- /* we only reports the unused devDeps if both src or other are not using it */
75
- devDependencies: andStringArrays([allUnused.devDependencies, srcUnused.devDependencies]),
76
- }
68
+ const unusedDeps = srcUnused.dependencies
69
+ const unusedDevDeps = allUnused.devDependencies
70
+ const usedDeps = srcUnused.using
71
+ const usedDevDeps = allUnused.using
72
+
73
+ const { invalidDirs, invalidFiles } = allUnused
77
74
 
78
75
  const declaredDeps = Object.keys(packageContent.dependencies ?? {})
79
76
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})
77
+ const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {})
80
78
 
81
- const missingDeps = Object.keys(srcUnused.using).filter(
82
- (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/') && !defaultIgnoreMatches.includes(key),
79
+ const missingDeps = Object.keys(usedDeps).filter(
80
+ (key) => !declaredDeps.includes(key) && !declaredPeerDeps.includes(key) && !key.startsWith('@types/'),
83
81
  )
84
82
 
85
- const missingDepsObject = Object.entries(srcUnused.missing).reduce(
86
- (prev, [key, value]) => {
87
- if (missingDeps.includes(key)) {
88
- prev[key] = value
89
- }
90
- return prev
91
- },
92
- {} as Record<string, string[]>,
83
+ const missingDevDeps = Object.keys(usedDevDeps).filter(
84
+ (key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key) && !defaultIgnoreDevDeps.includes(key),
93
85
  )
94
86
 
87
+ const missingDepsObject: Record<string, string[]> = {}
88
+ missingDeps.forEach((key) => {
89
+ missingDepsObject[key] = srcUnused.missing[key]
90
+ })
91
+
92
+ const missingDevDepsObject: Record<string, string[]> = {}
93
+ missingDevDeps.forEach((key) => {
94
+ missingDevDepsObject[key] = allUnused.missing[key]
95
+ })
96
+
95
97
  const errorCount =
96
- unused.dependencies.length +
97
- unused.devDependencies.length +
98
- Object.entries(unused.invalidDirs).length +
99
- Object.entries(unused.invalidFiles).length +
98
+ unusedDeps.length +
99
+ unusedDevDeps.length +
100
+ Object.entries(invalidDirs).length +
101
+ Object.entries(invalidFiles).length +
100
102
  Object.entries(missingDepsObject).length
101
103
 
102
104
  if (errorCount > 0) {
103
105
  console.log(`Deps [${pkgName}]`)
104
- console.log(`unused.dependencies: ${JSON.stringify(unused.dependencies)}`)
105
- console.log(`unused.devDependencies: ${JSON.stringify(unused.devDependencies)}`)
106
- console.log(`unused.invalidDirs: ${JSON.stringify(unused.invalidDirs)}`)
107
- console.log(`unused.invalidFiles: ${JSON.stringify(unused.invalidFiles)}`)
108
- console.log(`missingDepsObject: ${JSON.stringify(missingDepsObject)}`)
109
106
  } else {
110
107
  console.log(`Deps [${pkgName}] - Ok`)
111
108
  }
112
109
 
113
- reportUnused('dependencies', unused.dependencies)
114
- reportUnused('devDependencies', unused.devDependencies)
110
+ reportUnused('dependencies', unusedDeps)
111
+ reportUnused('devDependencies', unusedDevDeps)
115
112
 
116
- if (Object.entries(unused.invalidDirs).length) {
117
- Object.entries(unused.invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))
113
+ if (Object.entries(invalidDirs).length) {
114
+ Object.entries(invalidDirs).forEach(([key, value]) => console.warn(chalk.gray(`Invalid Dir: ${key}: ${value}`)))
118
115
  }
119
116
 
120
- if (Object.entries(unused.invalidFiles).length) {
121
- Object.entries(unused.invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))
117
+ if (Object.entries(invalidFiles).length) {
118
+ Object.entries(invalidFiles).forEach(([key, value]) => console.warn(chalk.gray(`Invalid File: ${key}: ${value}`)))
122
119
  }
123
120
 
124
121
  reportMissing('dependencies', missingDepsObject)