Skip to content

Instantly share code, notes, and snippets.

@samrocksc
Last active April 4, 2020 10:16
Show Gist options
  • Select an option

  • Save samrocksc/8afdeb5f40dcc982f06e585eca19e245 to your computer and use it in GitHub Desktop.

Select an option

Save samrocksc/8afdeb5f40dcc982f06e585eca19e245 to your computer and use it in GitHub Desktop.

Revisions

  1. samrocksc revised this gist Apr 4, 2020. 1 changed file with 29 additions and 24 deletions.
    53 changes: 29 additions & 24 deletions unpackLerna.js
    Original file line number Diff line number Diff line change
    @@ -1,25 +1,27 @@
    const { readFileSync, readdirSync } = require('fs');
    const fsx = require('fs-extra');
    const { promisify } = require('util');
    const lernaConfig = require('./lerna.json');

    /**
    * grabs the lerna config, and then does a deep search of all packages and hard copies
    * the node_modules that need to be
    */
    const main = async () => {
    const lernaRead = readFileSync(`${__dirname}/lerna.json`);
    const lernaConfig = JSON.parse(lernaRead.toString());
    const packageSubDir = lernaConfig.packages.map((package) => {
    const noStar = package.replace('/*', '');
    const noSlash = noStar.replace('//', '');
    return noSlash;
    });
    const packagesMap = packageSubDir
    .map((location) => {
    const packageList = readdirSync(`${location}`);
    const locationMaps = packageList.map((packageName) => {
    return `${location}/${packageName}`;
    });
    return locationMaps;
    })
    // striping all the directory commands
    const packageSubDir = lernaConfig.packages.map((package) =>
    package.replace('/*', '').replace('//', ''),
    );
    // grabs packages directory array and flattens it
    const packagesDir = packageSubDir
    .map((location) =>
    readdirSync(`${location}`).map(
    (packageName) => `${location}/${packageName}`,
    ),
    )
    .flat();
    const packageJsonMap = packagesMap.map((packageLocation) => {
    // Grabs each of the lerna package's package.json and returns it with its location
    const packageJsonMap = packagesDir.map((packageLocation) => {
    const stringedJson = readFileSync(
    `${__dirname}/${packageLocation}/package.json`,
    ).toString();
    @@ -28,35 +30,38 @@ const main = async () => {
    content: JSON.parse(stringedJson),
    };
    });
    // gets the package names and lists and their file location
    const packageNameList = packageJsonMap.map((packageJson) => ({
    name: packageJson.content.name,
    location: packageJson.location,
    }));
    // checks for dependencies that need to be hard copied and returns what and where to copy to
    const packagesToUpdate = packageJsonMap
    .map((packageJson) => {
    // checks the deps of each package if any local lerna packages need to be pushed to it.
    const deps = packageNameList.map((packageName) => {
    if (
    Object.keys(packageJson.content.dependencies).includes(
    packageName.name,
    )
    ) {
    return {
    copy: packageName.location,
    to: `${__dirname}/${packageJson.location}/${packageName.name}`,
    copy: `${__dirname}/${packageName.location}`,
    to: `${__dirname}/${packageJson.location}/node_modules/${packageName.name}`,
    };
    }
    });
    return deps;
    return deps; // returns friendly copy/to format
    })
    .flat()
    .filter((dep) => dep !== undefined);
    .flat() // flattens the array
    .filter((dep) => dep !== undefined); // removes all undefined
    const fileCopyArray = packagesToUpdate.map(async (packageToUpdate) => {
    console.log('packageToUpdate', packageToUpdate);
    const { copy, to } = packageToUpdate;
    try {
    await fsx.copy(copy, to);
    await fsx.remove(to); // removes the symlink
    await fsx.copy(copy, to); // copies code into node_modules
    } catch (e) {
    throw e;
    throw e; // pray this doesn't happen
    }
    });
    Promise.all(fileCopyArray);
  2. samrocksc renamed this gist Apr 3, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. samrocksc revised this gist Apr 3, 2020. 1 changed file with 31 additions and 16 deletions.
    47 changes: 31 additions & 16 deletions lernaUplift.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,5 @@
    const { readFileSync, readdirSync } = require('fs');
    const fsx = require('fs-extra');
    const { promisify } = require('util');

    const main = async () => {
    @@ -9,14 +10,16 @@ const main = async () => {
    const noSlash = noStar.replace('//', '');
    return noSlash;
    });
    const packagesMap = packageSubDir.map((location) => {
    const packageList = readdirSync(`${location}`);
    const locationMaps = packageList.map((packageName) => {
    return `${location}/${packageName}`;
    });
    return locationMaps;
    });
    const packageJsonMap = packagesMap.flat().map((packageLocation) => {
    const packagesMap = packageSubDir
    .map((location) => {
    const packageList = readdirSync(`${location}`);
    const locationMaps = packageList.map((packageName) => {
    return `${location}/${packageName}`;
    });
    return locationMaps;
    })
    .flat();
    const packageJsonMap = packagesMap.map((packageLocation) => {
    const stringedJson = readFileSync(
    `${__dirname}/${packageLocation}/package.json`,
    ).toString();
    @@ -25,26 +28,38 @@ const main = async () => {
    content: JSON.parse(stringedJson),
    };
    });
    const packageNameList = packageJsonMap.map(
    (packageJson) => packageJson.content.name,
    );
    const packageToUpdate = packageJsonMap
    const packageNameList = packageJsonMap.map((packageJson) => ({
    name: packageJson.content.name,
    location: packageJson.location,
    }));
    const packagesToUpdate = packageJsonMap
    .map((packageJson) => {
    const deps = packageNameList.map((packageName) => {
    if (
    Object.keys(packageJson.content.dependencies).includes(packageName)
    Object.keys(packageJson.content.dependencies).includes(
    packageName.name,
    )
    ) {
    return {
    copy: packageName,
    to: packageJson.location,
    copy: packageName.location,
    to: `${__dirname}/${packageJson.location}/${packageName.name}`,
    };
    }
    });
    return deps;
    })
    .flat()
    .filter((dep) => dep !== undefined);
    console.log('packagestoUpdate', packageToUpdate);
    const fileCopyArray = packagesToUpdate.map(async (packageToUpdate) => {
    console.log('packageToUpdate', packageToUpdate);
    const { copy, to } = packageToUpdate;
    try {
    await fsx.copy(copy, to);
    } catch (e) {
    throw e;
    }
    });
    Promise.all(fileCopyArray);
    };

    main();
  4. samrocksc revised this gist Apr 3, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions lernaUplift.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    ddirSync } = require('fs');
    const { readFileSync, readdirSync } = require('fs');
    const { promisify } = require('util');

    const main = async () => {
    @@ -18,7 +18,7 @@ const main = async () => {
    });
    const packageJsonMap = packagesMap.flat().map((packageLocation) => {
    const stringedJson = readFileSync(
    `./${packageLocation}/package.json`,
    `${__dirname}/${packageLocation}/package.json`,
    ).toString();
    return {
    location: packageLocation,
  5. samrocksc renamed this gist Apr 3, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  6. samrocksc created this gist Apr 3, 2020.
    50 changes: 50 additions & 0 deletions Lerna Uplift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    ddirSync } = require('fs');
    const { promisify } = require('util');

    const main = async () => {
    const lernaRead = readFileSync(`${__dirname}/lerna.json`);
    const lernaConfig = JSON.parse(lernaRead.toString());
    const packageSubDir = lernaConfig.packages.map((package) => {
    const noStar = package.replace('/*', '');
    const noSlash = noStar.replace('//', '');
    return noSlash;
    });
    const packagesMap = packageSubDir.map((location) => {
    const packageList = readdirSync(`${location}`);
    const locationMaps = packageList.map((packageName) => {
    return `${location}/${packageName}`;
    });
    return locationMaps;
    });
    const packageJsonMap = packagesMap.flat().map((packageLocation) => {
    const stringedJson = readFileSync(
    `./${packageLocation}/package.json`,
    ).toString();
    return {
    location: packageLocation,
    content: JSON.parse(stringedJson),
    };
    });
    const packageNameList = packageJsonMap.map(
    (packageJson) => packageJson.content.name,
    );
    const packageToUpdate = packageJsonMap
    .map((packageJson) => {
    const deps = packageNameList.map((packageName) => {
    if (
    Object.keys(packageJson.content.dependencies).includes(packageName)
    ) {
    return {
    copy: packageName,
    to: packageJson.location,
    };
    }
    });
    return deps;
    })
    .flat()
    .filter((dep) => dep !== undefined);
    console.log('packagestoUpdate', packageToUpdate);
    };

    main();