Skip to content

Instantly share code, notes, and snippets.

@mathiasgheno
Created June 10, 2022 18:31
Show Gist options
  • Save mathiasgheno/5db7281465deafe4bbd8411ac9b1b8f5 to your computer and use it in GitHub Desktop.
Save mathiasgheno/5db7281465deafe4bbd8411ac9b1b8f5 to your computer and use it in GitHub Desktop.
import 'zx/globals'
/**
* @description
*
* Relação Projeto x Dependências Units.
* No fim o array de dependências Units será usado para gerar um comando de install para todos.
*
*/
const relacaoMapper = {
"@project-a/ui": [
'@shared/components',
'@shared/utils'
],
};
const getProjetos = () => Object.keys(relacaoMapper);
const getDependencias = (projeto) => relacaoMapper[projeto];
const adicionarNpmLatest = (dependencias) => dependencias.map(dependencia => `${dependencia}@latest`);
const agruparComandos = (dependencias) => dependencias.join(' ');
const gerarComandoLerna = (comandosAgrupados) => (projeto) => () => $`lerna exec --scope ${projeto} -- npm install ${comandosAgrupados}`;
/**
* @description
*
* Vai retornar o comando de atualização em apenas um comando. Exemplo: `npm install A B C`.
* O comando será encapsulado por lerna exec e tmb pelo $ do zx.
* Essa função usa uma abordagem funcional para que no futuro possa ser usado o pipeline operator.
*
* @param projeto
* @returns {function(): *}
*/
const gerarComandoUnico = (projeto) => (
gerarComandoLerna(
agruparComandos(
adicionarNpmLatest(
getDependencias(
projeto
)
)
)
)(projeto)
)
async function* comandoGenerator(projeto) {
const comando = gerarComandoUnico(projeto);
argv['--quiet']
? yield await quiet(comando())
: yield await comando();
}
async function main() {
const projetos = getProjetos();
for (let projeto of projetos) {
console.log(chalk.blue(`Atualizando dependências do projeto ${projeto}. Aguarde...`));
for await (let retorno of comandoGenerator(projeto)) {
console.log(chalk.blue(`Atualizada as dependências do ${projeto} com sucesso`));
}
}
}
main().catch(e => {
chalk.red(`
Ocorreu um erro ao tentar atualizar as dependências Units para os projetos do repositório.
Você pode executar o script com o parametro --quiet igual a false, isso irá te dar mais logs.
Veja o erro abaixo.
`);
console.error(e);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment