-
-
Save mathiasgheno/5db7281465deafe4bbd8411ac9b1b8f5 to your computer and use it in GitHub Desktop.
This file contains 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
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