@xylabs/ts-scripts-yarn3 3.2.39 → 3.2.40

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.
@@ -34,6 +34,7 @@ module.exports = __toCommonJS(deps_exports);
34
34
  var import_chalk = __toESM(require("chalk"));
35
35
  var import_depcheck = __toESM(require("depcheck"));
36
36
  var import_fs = require("fs");
37
+ var import_process = require("process");
37
38
  var import_lib = require("../../lib");
38
39
  const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
39
40
  const defaultIgnoreDevDeps = [
@@ -62,18 +63,8 @@ const reportMissing = (name, missing) => {
62
63
  console.log(import_chalk.default.yellow(message.join("\n")));
63
64
  }
64
65
  };
65
- const packageDeps = async () => {
66
- const pkg = process.env.INIT_CWD;
67
- const pkgName = process.env.npm_package_name;
66
+ const analyzeDeps = async (pkg, ignoreMatches) => {
68
67
  const packageContent = (0, import_fs.existsSync)(`${pkg}/package.json`) ? JSON.parse((0, import_fs.readFileSync)(`${pkg}/package.json`, { encoding: "utf8" })) : void 0;
69
- const rawIgnore = (0, import_fs.existsSync)(`${pkg}/.depcheckrc`) ? (0, import_fs.readFileSync)(`${pkg}/.depcheckrc`, { encoding: "utf8" }).replace("ignores:", '"ignores":') : void 0;
70
- let ignoreMatches = [];
71
- try {
72
- ignoreMatches = rawIgnore ? JSON.parse(`{${rawIgnore}}`).ignores : [];
73
- } catch (ex) {
74
- const error = ex;
75
- console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
76
- }
77
68
  const [srcUnused, allUnused] = await Promise.all([
78
69
  (0, import_depcheck.default)(`${pkg}/src`, {
79
70
  ignoreMatches,
@@ -91,7 +82,23 @@ const packageDeps = async () => {
91
82
  const unusedDevDeps = allUnused.devDependencies;
92
83
  const usedDeps = srcUnused.using;
93
84
  const usedDevDeps = allUnused.using;
85
+ const missing = { ...srcUnused.missing, ...allUnused.missing };
94
86
  const { invalidDirs, invalidFiles } = allUnused;
87
+ return { invalidDirs, invalidFiles, missing, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps };
88
+ };
89
+ const packageDeps = async () => {
90
+ const pkg = process.env.INIT_CWD ?? (0, import_process.cwd)();
91
+ const pkgName = process.env.npm_package_name;
92
+ const packageContent = (0, import_fs.existsSync)(`${pkg}/package.json`) ? JSON.parse((0, import_fs.readFileSync)(`${pkg}/package.json`, { encoding: "utf8" })) : void 0;
93
+ const rawIgnore = (0, import_fs.existsSync)(`${pkg}/.depcheckrc`) ? (0, import_fs.readFileSync)(`${pkg}/.depcheckrc`, { encoding: "utf8" }).replace("ignores:", '"ignores":') : void 0;
94
+ let ignoreMatches = [];
95
+ try {
96
+ ignoreMatches = rawIgnore ? JSON.parse(`{${rawIgnore}}`).ignores : [];
97
+ } catch (ex) {
98
+ const error = ex;
99
+ console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
100
+ }
101
+ const { invalidDirs, invalidFiles, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps, missing } = await analyzeDeps(pkg, ignoreMatches);
95
102
  const declaredDeps = Object.keys(packageContent.dependencies ?? {});
96
103
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {});
97
104
  const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {});
@@ -101,14 +108,14 @@ const packageDeps = async () => {
101
108
  const missingDevDeps = Object.keys(usedDevDeps).filter((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key));
102
109
  const missingDepsObject = {};
103
110
  missingDeps.forEach((key) => {
104
- if (srcUnused.missing[key]) {
105
- missingDepsObject[key] = srcUnused.missing[key];
111
+ if (missing[key]) {
112
+ missingDepsObject[key] = missing[key];
106
113
  }
107
114
  });
108
115
  const missingDevDepsObject = {};
109
116
  missingDevDeps.forEach((key) => {
110
- if (missingDevDepsObject[key]) {
111
- missingDevDepsObject[key] = allUnused.missing[key];
117
+ if (missing[key]) {
118
+ missingDevDepsObject[key] = missing[key];
112
119
  }
113
120
  });
114
121
  const errorCounts = [
@@ -116,8 +123,8 @@ const packageDeps = async () => {
116
123
  unusedDevDeps.length,
117
124
  Object.entries(invalidDirs).length,
118
125
  Object.entries(invalidFiles).length,
119
- Object.entries(missingDeps).length,
120
- Object.entries(missingDevDeps).length
126
+ Object.entries(missingDepsObject).length,
127
+ Object.entries(missingDevDepsObject).length
121
128
  ];
122
129
  const errorCount = errorCounts.reduce((prev, count) => prev + count, 0);
123
130
  if (errorCount > 0) {
@@ -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 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]\nconst defaultIgnoreDevPatterns = ['*.stories.*', '*.spec.*', 'spec', 'stories', 'tsconfig.json']\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,\n ignorePatterns: [...defaultIgnoreDevPatterns, ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...ignoreMatches, ...defaultIgnoreDevDeps],\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((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key))\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n if (srcUnused.missing[key]) {\n missingDepsObject[key] = srcUnused.missing[key]\n }\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n if (missingDevDepsObject[key]) {\n missingDevDepsObject[key] = allUnused.missing[key]\n }\n })\n\n const errorCounts = [\n unusedDeps.length,\n unusedDevDeps.length,\n Object.entries(invalidDirs).length,\n Object.entries(invalidFiles).length,\n Object.entries(missingDeps).length,\n Object.entries(missingDevDeps).length,\n ]\n\n const errorCount = errorCounts.reduce((prev, count) => prev + count, 0)\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}] = (${JSON.stringify(errorCounts)})`)\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', missingDevDepsObject)\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'\nimport { cwd } from 'process'\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]\nconst defaultIgnoreDevPatterns = ['*.stories.*', '*.spec.*', 'spec', 'stories', 'tsconfig.json']\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\nconst analyzeDeps = async (pkg: string, ignoreMatches: string[]) => {\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches,\n ignorePatterns: [...defaultIgnoreDevPatterns, ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...ignoreMatches, ...defaultIgnoreDevDeps],\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 const missing = { ...srcUnused.missing, ...allUnused.missing }\n const { invalidDirs, invalidFiles } = allUnused\n\n return { invalidDirs, invalidFiles, missing, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD ?? 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 { invalidDirs, invalidFiles, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps, missing } = await analyzeDeps(pkg, ignoreMatches)\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((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key))\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n if (missing[key]) {\n missingDepsObject[key] = missing[key]\n }\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n if (missing[key]) {\n missingDevDepsObject[key] = missing[key]\n }\n })\n\n const errorCounts = [\n unusedDeps.length,\n unusedDevDeps.length,\n Object.entries(invalidDirs).length,\n Object.entries(invalidFiles).length,\n Object.entries(missingDepsObject).length,\n Object.entries(missingDevDepsObject).length,\n ]\n\n const errorCount = errorCounts.reduce((prev, count) => prev + count, 0)\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}] = (${JSON.stringify(errorCounts)})`)\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', missingDevDepsObject)\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,sBAAkC;AAClC,gBAAyC;AACzC,qBAAoB;AAEpB,iBAA4B;AAE5B,MAAM,wBAAwB,CAAC,UAAU,QAAQ,MAAM,cAAc;AACrE,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,MAAM,2BAA2B,CAAC,eAAe,YAAY,QAAQ,WAAW,eAAe;AAE/F,MAAM,eAAe,CAAC,MAAc,WAA6C;AAC/E,MAAI,OAAO,QAAQ;AACjB,UAAM,UAAU,CAAC,aAAAA,QAAM,OAAO,GAAG,OAAO,MAAM,WAAW,IAAI,EAAE,CAAC;AAChE,WAAO,QAAQ,CAAC,UAAU,QAAQ,KAAK,aAAAA,QAAM,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;AAChE,YAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC;AAAA,EAChC;AACF;AAEA,MAAM,gBAAgB,CAAC,MAAc,YAAyC;AAC5E,MAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAC/B,UAAM,UAAU,CAAC,aAAAA,QAAM,OAAO,GAAG,OAAO,QAAQ,OAAO,EAAE,MAAM,YAAY,IAAI,EAAE,CAAC;AAClF,WAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChD,cAAQ,KAAK,GAAG,GAAG,EAAE;AACrB,cAAQ,KAAK,aAAAA,QAAM,KAAK,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AAAA,IAC7C,CAAC;AACD,YAAQ,IAAI,aAAAA,QAAM,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC;AAAA,EAC9C;AACF;AAEA,MAAM,cAAc,OAAO,KAAa,kBAA4B;AAClE,QAAM,qBAAiB,sBAAW,GAAG,GAAG,eAAe,IAAI,KAAK,UAAM,wBAAa,GAAG,GAAG,iBAAiB,EAAE,UAAU,OAAO,CAAC,CAAC,IAAI;AACnI,QAAM,CAAC,WAAW,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC/C,gBAAAC,SAAS,GAAG,GAAG,QAAQ;AAAA,MACrB;AAAA,MACA,gBAAgB,CAAC,GAAG,0BAA0B,GAAG,qBAAqB;AAAA,MACtE,SAAS;AAAA,IACX,CAAC;AAAA,QACD,gBAAAA,SAAS,GAAG,GAAG,MAAM;AAAA,MACnB,eAAe,CAAC,GAAG,eAAe,GAAG,oBAAoB;AAAA,MACzD,gBAAgB,CAAC,GAAG,qBAAqB;AAAA,MACzC,SAAS;AAAA,MACT,UAAU,CAAC,wBAAQ,QAAQ,wBAAQ,OAAO,wBAAQ,KAAK,wBAAQ,UAAU,wBAAQ,MAAM,wBAAQ,KAAK;AAAA,IACtG,CAAC;AAAA,EACH,CAAC;AAED,QAAM,aAAa,UAAU;AAC7B,QAAM,gBAAgB,UAAU;AAChC,QAAM,WAAW,UAAU;AAC3B,QAAM,cAAc,UAAU;AAC9B,QAAM,UAAU,EAAE,GAAG,UAAU,SAAS,GAAG,UAAU,QAAQ;AAC7D,QAAM,EAAE,aAAa,aAAa,IAAI;AAEtC,SAAO,EAAE,aAAa,cAAc,SAAS,YAAY,eAAe,UAAU,YAAY;AAChG;AAEO,MAAM,cAAc,YAAY;AACrC,QAAM,MAAM,QAAQ,IAAI,gBAAY,oBAAI;AACxC,QAAM,UAAU,QAAQ,IAAI;AAE5B,QAAM,qBAAiB,sBAAW,GAAG,GAAG,eAAe,IAAI,KAAK,UAAM,wBAAa,GAAG,GAAG,iBAAiB,EAAE,UAAU,OAAO,CAAC,CAAC,IAAI;AAEnI,QAAM,gBAAY,sBAAW,GAAG,GAAG,cAAc,QAC7C,wBAAa,GAAG,GAAG,gBAAgB,EAAE,UAAU,OAAO,CAAC,EAAE,QAAQ,YAAY,YAAY,IACzF;AACJ,MAAI,gBAA0B,CAAC;AAC/B,MAAI;AACF,oBAAgB,YAAa,KAAK,MAAM,IAAI,SAAS,GAAG,EAAE,UAAuB,CAAC;AAAA,EACpF,SAAS,IAAI;AACX,UAAM,QAAQ;AACd,YAAQ,IAAI,GAAG,OAAO,KAAK,MAAM,OAAO,kCAAkC,SAAS,GAAG;AAAA,EACxF;AAEA,QAAM,EAAE,aAAa,cAAc,YAAY,eAAe,UAAU,aAAa,QAAQ,IAAI,MAAM,YAAY,KAAK,aAAa;AAErI,QAAM,eAAe,OAAO,KAAK,eAAe,gBAAgB,CAAC,CAAC;AAClE,QAAM,mBAAmB,OAAO,KAAK,eAAe,oBAAoB,CAAC,CAAC;AAC1E,QAAM,kBAAkB,OAAO,KAAK,eAAe,mBAAmB,CAAC,CAAC;AAExE,QAAM,cAAc,OAAO,KAAK,QAAQ,EAAE;AAAA,IACxC,CAAC,QAAQ,CAAC,aAAa,SAAS,GAAG,KAAK,CAAC,iBAAiB,SAAS,GAAG,KAAK,CAAC,IAAI,WAAW,SAAS;AAAA,EACtG;AAEA,QAAM,iBAAiB,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,SAAS,GAAG,KAAK,CAAC,aAAa,SAAS,GAAG,CAAC;AAE7H,QAAM,oBAA8C,CAAC;AACrD,cAAY,QAAQ,CAAC,QAAQ;AAC3B,QAAI,QAAQ,GAAG,GAAG;AAChB,wBAAkB,GAAG,IAAI,QAAQ,GAAG;AAAA,IACtC;AAAA,EACF,CAAC;AAED,QAAM,uBAAiD,CAAC;AACxD,iBAAe,QAAQ,CAAC,QAAQ;AAC9B,QAAI,QAAQ,GAAG,GAAG;AAChB,2BAAqB,GAAG,IAAI,QAAQ,GAAG;AAAA,IACzC;AAAA,EACF,CAAC;AAED,QAAM,cAAc;AAAA,IAClB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,OAAO,QAAQ,WAAW,EAAE;AAAA,IAC5B,OAAO,QAAQ,YAAY,EAAE;AAAA,IAC7B,OAAO,QAAQ,iBAAiB,EAAE;AAAA,IAClC,OAAO,QAAQ,oBAAoB,EAAE;AAAA,EACvC;AAEA,QAAM,aAAa,YAAY,OAAO,CAAC,MAAM,UAAU,OAAO,OAAO,CAAC;AAEtE,MAAI,aAAa,GAAG;AAClB,YAAQ,IAAI,SAAS,OAAO,QAAQ,KAAK,UAAU,WAAW,CAAC,GAAG;AAAA,EACpE,OAAO;AACL,YAAQ,IAAI,SAAS,OAAO,QAAQ;AAAA,EACtC;AAEA,eAAa,gBAAgB,UAAU;AACvC,eAAa,mBAAmB,aAAa;AAE7C,MAAI,OAAO,QAAQ,WAAW,EAAE,QAAQ;AACtC,WAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,QAAQ,KAAK,aAAAD,QAAM,KAAK,gBAAgB,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;AAAA,EACjH;AAEA,MAAI,OAAO,QAAQ,YAAY,EAAE,QAAQ;AACvC,WAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,QAAQ,KAAK,aAAAA,QAAM,KAAK,iBAAiB,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;AAAA,EACnH;AAEA,gBAAc,gBAAgB,iBAAiB;AAC/C,gBAAc,mBAAmB,oBAAoB;AAErD,8BAAY,SAAS,OAAO,KAAK,YAAY,QAAQ,KAAK;AAG1D,SAAO;AACT;","names":["chalk","depcheck"]}
@@ -1,6 +1,7 @@
1
1
  import chalk from "chalk";
2
2
  import depcheck, { special } from "depcheck";
3
3
  import { existsSync, readFileSync } from "fs";
4
+ import { cwd } from "process";
4
5
  import { checkResult } from "../../lib";
5
6
  const defaultIgnorePatterns = ["*.d.ts", "dist", ".*", "node_modules"];
6
7
  const defaultIgnoreDevDeps = [
@@ -29,18 +30,8 @@ const reportMissing = (name, missing) => {
29
30
  console.log(chalk.yellow(message.join("\n")));
30
31
  }
31
32
  };
32
- const packageDeps = async () => {
33
- const pkg = process.env.INIT_CWD;
34
- const pkgName = process.env.npm_package_name;
33
+ const analyzeDeps = async (pkg, ignoreMatches) => {
35
34
  const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: "utf8" })) : void 0;
36
- const rawIgnore = existsSync(`${pkg}/.depcheckrc`) ? readFileSync(`${pkg}/.depcheckrc`, { encoding: "utf8" }).replace("ignores:", '"ignores":') : void 0;
37
- let ignoreMatches = [];
38
- try {
39
- ignoreMatches = rawIgnore ? JSON.parse(`{${rawIgnore}}`).ignores : [];
40
- } catch (ex) {
41
- const error = ex;
42
- console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
43
- }
44
35
  const [srcUnused, allUnused] = await Promise.all([
45
36
  depcheck(`${pkg}/src`, {
46
37
  ignoreMatches,
@@ -58,7 +49,23 @@ const packageDeps = async () => {
58
49
  const unusedDevDeps = allUnused.devDependencies;
59
50
  const usedDeps = srcUnused.using;
60
51
  const usedDevDeps = allUnused.using;
52
+ const missing = { ...srcUnused.missing, ...allUnused.missing };
61
53
  const { invalidDirs, invalidFiles } = allUnused;
54
+ return { invalidDirs, invalidFiles, missing, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps };
55
+ };
56
+ const packageDeps = async () => {
57
+ const pkg = process.env.INIT_CWD ?? cwd();
58
+ const pkgName = process.env.npm_package_name;
59
+ const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: "utf8" })) : void 0;
60
+ const rawIgnore = existsSync(`${pkg}/.depcheckrc`) ? readFileSync(`${pkg}/.depcheckrc`, { encoding: "utf8" }).replace("ignores:", '"ignores":') : void 0;
61
+ let ignoreMatches = [];
62
+ try {
63
+ ignoreMatches = rawIgnore ? JSON.parse(`{${rawIgnore}}`).ignores : [];
64
+ } catch (ex) {
65
+ const error = ex;
66
+ console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`);
67
+ }
68
+ const { invalidDirs, invalidFiles, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps, missing } = await analyzeDeps(pkg, ignoreMatches);
62
69
  const declaredDeps = Object.keys(packageContent.dependencies ?? {});
63
70
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {});
64
71
  const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {});
@@ -68,14 +75,14 @@ const packageDeps = async () => {
68
75
  const missingDevDeps = Object.keys(usedDevDeps).filter((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key));
69
76
  const missingDepsObject = {};
70
77
  missingDeps.forEach((key) => {
71
- if (srcUnused.missing[key]) {
72
- missingDepsObject[key] = srcUnused.missing[key];
78
+ if (missing[key]) {
79
+ missingDepsObject[key] = missing[key];
73
80
  }
74
81
  });
75
82
  const missingDevDepsObject = {};
76
83
  missingDevDeps.forEach((key) => {
77
- if (missingDevDepsObject[key]) {
78
- missingDevDepsObject[key] = allUnused.missing[key];
84
+ if (missing[key]) {
85
+ missingDevDepsObject[key] = missing[key];
79
86
  }
80
87
  });
81
88
  const errorCounts = [
@@ -83,8 +90,8 @@ const packageDeps = async () => {
83
90
  unusedDevDeps.length,
84
91
  Object.entries(invalidDirs).length,
85
92
  Object.entries(invalidFiles).length,
86
- Object.entries(missingDeps).length,
87
- Object.entries(missingDevDeps).length
93
+ Object.entries(missingDepsObject).length,
94
+ Object.entries(missingDevDepsObject).length
88
95
  ];
89
96
  const errorCount = errorCounts.reduce((prev, count) => prev + count, 0);
90
97
  if (errorCount > 0) {
@@ -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 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]\nconst defaultIgnoreDevPatterns = ['*.stories.*', '*.spec.*', 'spec', 'stories', 'tsconfig.json']\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,\n ignorePatterns: [...defaultIgnoreDevPatterns, ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...ignoreMatches, ...defaultIgnoreDevDeps],\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((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key))\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n if (srcUnused.missing[key]) {\n missingDepsObject[key] = srcUnused.missing[key]\n }\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n if (missingDevDepsObject[key]) {\n missingDevDepsObject[key] = allUnused.missing[key]\n }\n })\n\n const errorCounts = [\n unusedDeps.length,\n unusedDevDeps.length,\n Object.entries(invalidDirs).length,\n Object.entries(invalidFiles).length,\n Object.entries(missingDeps).length,\n Object.entries(missingDevDeps).length,\n ]\n\n const errorCount = errorCounts.reduce((prev, count) => prev + count, 0)\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}] = (${JSON.stringify(errorCounts)})`)\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', missingDevDepsObject)\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'\nimport { cwd } from 'process'\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]\nconst defaultIgnoreDevPatterns = ['*.stories.*', '*.spec.*', 'spec', 'stories', 'tsconfig.json']\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\nconst analyzeDeps = async (pkg: string, ignoreMatches: string[]) => {\n const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined\n const [srcUnused, allUnused] = await Promise.all([\n depcheck(`${pkg}/src`, {\n ignoreMatches,\n ignorePatterns: [...defaultIgnoreDevPatterns, ...defaultIgnorePatterns],\n package: packageContent,\n }),\n depcheck(`${pkg}/.`, {\n ignoreMatches: [...ignoreMatches, ...defaultIgnoreDevDeps],\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 const missing = { ...srcUnused.missing, ...allUnused.missing }\n const { invalidDirs, invalidFiles } = allUnused\n\n return { invalidDirs, invalidFiles, missing, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps }\n}\n\nexport const packageDeps = async () => {\n const pkg = process.env.INIT_CWD ?? 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 { invalidDirs, invalidFiles, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps, missing } = await analyzeDeps(pkg, ignoreMatches)\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((key) => !declaredDevDeps.includes(key) && !declaredDeps.includes(key))\n\n const missingDepsObject: Record<string, string[]> = {}\n missingDeps.forEach((key) => {\n if (missing[key]) {\n missingDepsObject[key] = missing[key]\n }\n })\n\n const missingDevDepsObject: Record<string, string[]> = {}\n missingDevDeps.forEach((key) => {\n if (missing[key]) {\n missingDevDepsObject[key] = missing[key]\n }\n })\n\n const errorCounts = [\n unusedDeps.length,\n unusedDevDeps.length,\n Object.entries(invalidDirs).length,\n Object.entries(invalidFiles).length,\n Object.entries(missingDepsObject).length,\n Object.entries(missingDevDepsObject).length,\n ]\n\n const errorCount = errorCounts.reduce((prev, count) => prev + count, 0)\n\n if (errorCount > 0) {\n console.log(`Deps [${pkgName}] = (${JSON.stringify(errorCounts)})`)\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', missingDevDepsObject)\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.39",
67
+ "@xylabs/tsconfig": "~3.2.40",
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.39",
116
- "@xylabs/tsconfig": "~3.2.39",
115
+ "@xylabs/eslint-config": "~3.2.40",
116
+ "@xylabs/tsconfig": "~3.2.40",
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.39",
172
+ "version": "3.2.40",
173
173
  "type": "commonjs"
174
174
  }
@@ -2,6 +2,7 @@
2
2
  import chalk from 'chalk'
3
3
  import depcheck, { special } from 'depcheck'
4
4
  import { existsSync, readFileSync } from 'fs'
5
+ import { cwd } from 'process'
5
6
 
6
7
  import { checkResult } from '../../lib'
7
8
 
@@ -35,23 +36,8 @@ const reportMissing = (name: string, missing: depcheck.Results['missing']) => {
35
36
  }
36
37
  }
37
38
 
38
- export const packageDeps = async () => {
39
- const pkg = process.env.INIT_CWD
40
- const pkgName = process.env.npm_package_name
41
-
39
+ const analyzeDeps = async (pkg: string, ignoreMatches: string[]) => {
42
40
  const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined
43
-
44
- const rawIgnore = existsSync(`${pkg}/.depcheckrc`)
45
- ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '"ignores":')
46
- : undefined
47
- let ignoreMatches: string[] = []
48
- try {
49
- ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []
50
- } catch (ex) {
51
- const error = ex as Error
52
- console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)
53
- }
54
-
55
41
  const [srcUnused, allUnused] = await Promise.all([
56
42
  depcheck(`${pkg}/src`, {
57
43
  ignoreMatches,
@@ -70,9 +56,31 @@ export const packageDeps = async () => {
70
56
  const unusedDevDeps = allUnused.devDependencies
71
57
  const usedDeps = srcUnused.using
72
58
  const usedDevDeps = allUnused.using
73
-
59
+ const missing = { ...srcUnused.missing, ...allUnused.missing }
74
60
  const { invalidDirs, invalidFiles } = allUnused
75
61
 
62
+ return { invalidDirs, invalidFiles, missing, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps }
63
+ }
64
+
65
+ export const packageDeps = async () => {
66
+ const pkg = process.env.INIT_CWD ?? cwd()
67
+ const pkgName = process.env.npm_package_name
68
+
69
+ const packageContent = existsSync(`${pkg}/package.json`) ? JSON.parse(readFileSync(`${pkg}/package.json`, { encoding: 'utf8' })) : undefined
70
+
71
+ const rawIgnore = existsSync(`${pkg}/.depcheckrc`)
72
+ ? readFileSync(`${pkg}/.depcheckrc`, { encoding: 'utf8' }).replace('ignores:', '"ignores":')
73
+ : undefined
74
+ let ignoreMatches: string[] = []
75
+ try {
76
+ ignoreMatches = rawIgnore ? (JSON.parse(`{${rawIgnore}}`).ignores as string[]) : []
77
+ } catch (ex) {
78
+ const error = ex as Error
79
+ console.log(`${pkgName} [${error.message}] Failed to parse .depcheckrc [${rawIgnore}]`)
80
+ }
81
+
82
+ const { invalidDirs, invalidFiles, unusedDeps, unusedDevDeps, usedDeps, usedDevDeps, missing } = await analyzeDeps(pkg, ignoreMatches)
83
+
76
84
  const declaredDeps = Object.keys(packageContent.dependencies ?? {})
77
85
  const declaredPeerDeps = Object.keys(packageContent.peerDependencies ?? {})
78
86
  const declaredDevDeps = Object.keys(packageContent.devDependencies ?? {})
@@ -85,15 +93,15 @@ export const packageDeps = async () => {
85
93
 
86
94
  const missingDepsObject: Record<string, string[]> = {}
87
95
  missingDeps.forEach((key) => {
88
- if (srcUnused.missing[key]) {
89
- missingDepsObject[key] = srcUnused.missing[key]
96
+ if (missing[key]) {
97
+ missingDepsObject[key] = missing[key]
90
98
  }
91
99
  })
92
100
 
93
101
  const missingDevDepsObject: Record<string, string[]> = {}
94
102
  missingDevDeps.forEach((key) => {
95
- if (missingDevDepsObject[key]) {
96
- missingDevDepsObject[key] = allUnused.missing[key]
103
+ if (missing[key]) {
104
+ missingDevDepsObject[key] = missing[key]
97
105
  }
98
106
  })
99
107
 
@@ -102,8 +110,8 @@ export const packageDeps = async () => {
102
110
  unusedDevDeps.length,
103
111
  Object.entries(invalidDirs).length,
104
112
  Object.entries(invalidFiles).length,
105
- Object.entries(missingDeps).length,
106
- Object.entries(missingDevDeps).length,
113
+ Object.entries(missingDepsObject).length,
114
+ Object.entries(missingDevDepsObject).length,
107
115
  ]
108
116
 
109
117
  const errorCount = errorCounts.reduce((prev, count) => prev + count, 0)