ayrtonteshima / ead-api

API da plataforma de ensino a distância desenvolvida junto ao canal do YouTube Programador a Bordo
MIT License
196 stars 34 forks source link

Feat: ES6 modules syntax #22

Closed diegodario88 closed 4 years ago

diegodario88 commented 4 years ago

Ao refatorar para ESM nativo tive alguns problemas de compatibilidade com as bibliotecas já existentes. Com isso, ao buscar soluções para utilizar a sintaxe de import e outras novidades da linguagem como: • Nullish coalescinga ?? bOptional chaining: a?.b • Class fieldsclass C { x = 1; }. This includes static fields but not the #x private field syntax.Export namespace syntax: export * as a from 'a';Numeric separatorsconst n = 1_234;Optional catch bindingtry { doThing(); } catch { }.

Encontrei bastante material sobre a lib Sucrase, uma alternativa ao Babel que promete ser 20x mais rápida. O acoplamento é simples e a integração com o nodemon funciona muito bem, sem nenhum delay aparente ao transformar CJS para ESM, tendo como possibilidade vários transforms inclusive TypeScript, se caso ele for adotado ao projeto o Sucrase facilitaria a transição. Ava precisou de um complemento para enxergar os arquivos ESM, para isso foi adicionado a lib esm e a respectiva configuração ao package.json. Adicinei uma exceção à regra no-unused-expressions apenas para podermos usar "ShortCircuit" e "Ternary" em outros casos essa regra continua apontando erro. closes #19

programadorabordo commented 4 years ago

Faaala Diego!!

Brother, esse PR ficou muito grande. Veio com várias mudanças distintas no mesmo PR. Tem que quebrar ele em alguns.

Exemplo: 1 PR para testes; 1 PR para os imports, 1PR para os refactors; etc.

Vi que você aplicou destructuring nos imports mas alguns ficam ruim de leitura, exemplo:
import { set } from '../repositories/cache.repository';

Esse set depois fica sem sentido no arquivo, pelo nome não tem como saber que é de cache. No caso tem que por um apelido ou deixar o import normal mesmo para depois usar ele como 'método' cacheRepository.set, .exists, etc.

Você abriu a issue do ES modules, sugeria fazer um PR só com os ES modules sem a refatoração para destructuring e tal. Se for o caso de refatorar para destructuring, mandar em outro PR.

Vamos quebrar esse PR em alguns pra analisar e ir aceitando aos poucos :)