Skip to content

Commit

Permalink
feat: add 4 rules about dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
EmmanuelDemey committed Sep 9, 2024
1 parent 2af6760 commit a7d07c9
Showing 1 changed file with 67 additions and 1 deletion.
68 changes: 67 additions & 1 deletion audit/apps/audit/src/checkers/sync/file-system-checker.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,75 @@
import { execSync } from 'node:child_process';
import { readFileSync } from 'node:fs';
import { string } from 'zod';

type Checker = (
parsers: { name: string; result: any }[]
) => { name: string; result: any } | undefined;

const checkIfDevOrProdDependenciesPresent = (
path: string[],
dependencyName: string,
devDependencies = false
) => {
const result = {};
path.map((path) => {
const r = JSON.parse(readFileSync(path).toString());
if (
Object.keys(
r[devDependencies ? 'devDependencies' : 'dependencies']
).includes(dependencyName)
)
result[path] = {
[dependencyName]:
r[devDependencies ? 'devDependencies' : 'dependencies'][
dependencyName
],
};
});
return result;
};

const checkIfDevDepenciesPresent = (path: string[], dependencyName: string) => {
return checkIfDevOrProdDependenciesPresent(path, dependencyName, true);
};

const checkIfDependenciesPresent = (path: string[], dependencyName: string) => {
return checkIfDevOrProdDependenciesPresent(path, dependencyName);
};

const generateDependenciesRule = (
packageName: string,
devDependencies = false
): Checker => {
return (parsers: { name: string; result: any }[]) => {
const packageManagerConfigurationFilePath = parsers.find(
(parser) => parser.name === 'packageManagerConfigurationFilePath'
);
if (!packageManagerConfigurationFilePath) {
return;
}

const result = checkIfDevOrProdDependenciesPresent(
packageManagerConfigurationFilePath.result,
packageName,
devDependencies
);

if (Object.keys(result).length === 0) {
return;
}

return { name: `has_${packageName}_dependency`, result };
};
};

const dependenciesCheck = [
generateDependenciesRule('moment'),
generateDependenciesRule('underscore'),
generateDependenciesRule('underscore'),
generateDependenciesRule('karma'),
];

const npmAudit = (parsers: { name: string; result: any }[]) => {
const packageManager = parsers.find(
(parser) => parser.name === 'packageManager'
Expand All @@ -26,7 +92,7 @@ const npmAudit = (parsers: { name: string; result: any }[]) => {
};

export class FileSystemChecker {
#checkers: Checker[] = [npmAudit];
#checkers: Checker[] = [npmAudit, ...dependenciesCheck];
constructor(private parsers: { name: string; result: any }[]) {}
check() {
return this.#checkers
Expand Down

0 comments on commit a7d07c9

Please sign in to comment.