Mudando para a sintaxe de classe nativa do JS em temas e plugins

Nos últimos anos, temos nos afastado da sintaxe legada .extend({ ... }) do Ember e caminhado em direção à sintaxe de classe nativa como class extends Foo {...}.

Embora a sintaxe legada ainda seja tecnicamente suportada, as ferramentas modernas de JS, incluindo IDEs e o Prettier 3.0, não suportam decoradores em sintaxes legadas baseadas em literais de objeto. Na versão mais recente de nossa configuração de linting recomendada, você verá esses erros ao usar a sintaxe legada:

ESLint: error As classes JS nativas devem ser usadas em vez de classes clássicas ember/no-classic-classes

Prettier: SyntaxError: Decorators cannot be used to decorate object literal properties

Portanto, se você ainda não o fez, é hora de atualizar o código do seu tema e plugin para a nova sintaxe. Há duas coisas principais a serem atualizadas: novas definições de classe e chamadas modifyClass.

Definições de classe

Grande parte do trabalho pode ser feita usando o ember-native-class-codemod. Dentro do repositório do seu tema/plugin, execute:

NO_TELEMETRY=true npx ember-native-class-codemod@4.1.1 --no-classic-decorator **/*.js

Isso percorrerá seus arquivos e os transformará para a nova sintaxe de classe nativa. Às vezes, ele solicitará que você intervenha manualmente. Sempre revise as alterações de código que ele faz - não é perfeito.

Se você tiver muitos temas/plugins para atualizar, pode se interessar por nosso script de PR em massa.

Chamadas modifyClass

Se você usa decoradores dentro de chamadas modifyClass, então precisa usar a nova sintaxe baseada em classe nativa. Para mais informações sobre isso, confira a documentação. Ao fazer essas alterações, por favor, tenha em mente as limitações documentadas.

10 curtidas

O erro que recebi e que me fez querer encontrar este tópico foi discutido em Prettier reclama que @discourseComputed não pode ser usado para decorar propriedades literais

SyntaxError: Decorators cannot be used to decorate object literal properties. (9:3)

EDIT: OH. Está bem aqui no texto, mas juro que a busca não encontrou, e a IA me enviou para o meu tópico de um ano atrás.

E, infelizmente, embora a mágica tenha funcionado em meus controladores e rotas, não parece ter corrigido meus componentes.

1 curtida