Skip to content

Instantly share code, notes, and snippets.

@n1ru4l
Last active March 11, 2021 23:00
Show Gist options
  • Select an option

  • Save n1ru4l/70e496d743e4530692400a816dbbf6f6 to your computer and use it in GitHub Desktop.

Select an option

Save n1ru4l/70e496d743e4530692400a816dbbf6f6 to your computer and use it in GitHub Desktop.

Revisions

  1. n1ru4l revised this gist Dec 3, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion find-version-range-conflicts.ts
    Original file line number Diff line number Diff line change
    @@ -3,7 +3,7 @@
    * version ranges across packages inside a mono repository.
    */
    import fs from "fs";
    import glob from "glob"; // yarn add -W -E -D [email protected]
    import glob from "glob"; // yarn add -W -E -E -D [email protected]
    import { promisify } from "util";

    const globP = promisify(glob);
  2. n1ru4l revised this gist Dec 3, 2020. No changes.
  3. n1ru4l created this gist Dec 3, 2020.
    47 changes: 47 additions & 0 deletions find-version-range-conflicts.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    /**
    * This is a simple script for detecting conflicting
    * version ranges across packages inside a mono repository.
    */
    import fs from "fs";
    import glob from "glob"; // yarn add -W -E -D [email protected]
    import { promisify } from "util";

    const globP = promisify(glob);

    const main = async () => {
    const filePaths = await globP("**/package.json", {
    root: process.cwd(),
    ignore: ["**/node_modules/**", "**/dist/**"],
    });

    const moduleMap = new Map<string, Set<string>>();
    const gatherDependencies = (record: { [key: string]: string }) => {
    for (const [packageName, version] of Object.entries(record)) {
    let moduleVersions = moduleMap.get(packageName);
    if (moduleVersions === undefined) {
    const newSet = new Set<string>();
    moduleMap.set(packageName, newSet);
    moduleVersions = newSet;
    }
    moduleVersions.add(version);
    }
    };
    for (const filePath of filePaths) {
    const obj = JSON.parse(fs.readFileSync(filePath, "utf-8"));
    if (obj.dependencies) {
    gatherDependencies(obj.dependencies);
    }
    if (obj.devDependencies) {
    gatherDependencies(obj.devDependencies);
    }
    }

    for (const [packageName, versions] of moduleMap.entries()) {
    if (versions.size <= 1) {
    continue;
    }
    console.log(`${packageName}`, Array.from(versions).join(", "));
    }
    };

    main();