Created
March 20, 2019 09:50
-
-
Save eps1lon/2b4bf276775318897b2d1f34cf638c59 to your computer and use it in GitHub Desktop.
runs link for packages in Material-UI workspace
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fse = require('fs-extra'); | |
const globCallback = require('glob'); | |
const { flatten } = require('lodash'); | |
const path = require('path'); | |
const childProcess = require('child_process'); | |
const { promisify } = require('util'); | |
const exec = promisify(childProcess.exec); | |
const glob = promisify(globCallback); | |
/** | |
* config related to Material-UI workspace | |
*/ | |
const workspaceHost = { | |
getPublishPath(packagePath) { | |
return path.join(packagePath, 'build'); | |
}, | |
ignorePackages: ['@material-ui/codemod'], | |
loadPackageJson(packageRoot) { | |
return fse.readJSON(path.join(packageRoot, 'package.json')); | |
}, | |
rootPath: path.join(__dirname, '../'), | |
}; | |
async function loadPackagePaths() { | |
const workspacePackageJson = await workspaceHost.loadPackageJson(workspaceHost.rootPath); | |
return flatten( | |
await Promise.all(workspacePackageJson.workspaces.map(packagePattern => glob(packagePattern))), | |
); | |
} | |
async function loadPackages() { | |
const packagePaths = await loadPackagePaths(); | |
return Promise.all( | |
packagePaths.map(async packagePath => { | |
const packageJson = await workspaceHost.loadPackageJson(packagePath); | |
return { | |
json: packageJson, | |
path: packagePath, | |
}; | |
}), | |
); | |
} | |
async function yarn(command, packagePath) { | |
return exec(`yarn ${command}`, { cwd: path.join(packagePath, 'build') }); | |
} | |
async function run() { | |
const [command] = process.argv.slice(2); | |
const packages = (await loadPackages()).filter( | |
pkg => !pkg.json.private && !workspaceHost.ignorePackages.includes(pkg.json.name), | |
); | |
return Promise.all( | |
packages.map(pkg => { | |
console.log(`executing '${command}' for ${pkg.json.name}`); | |
return yarn(command, pkg.path).catch(error => { | |
error.message = `Failed to ${command} ${pkg.json.name}: \n${error.message}`; | |
throw error; | |
}); | |
}), | |
); | |
} | |
run().catch(err => { | |
console.error(err); | |
process.exit(1); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment