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.