ここ数年、Ember の従来の .extend({ ... }) 構文から、class extends Foo {...} のようなネイティブクラス構文への移行を進めてきました。
従来の構文は技術的にはまだサポートされていますが、IDE や Prettier 3.0 を含む最新の JavaScript ツールは、従来のオブジェクトリテラルベースの構文でのデコレータをサポートしていません。推奨されるリンティング設定の最新バージョンでは、従来の構文を使用すると次のようなエラーが表示されます。
ESLint: error Native JS classes should be used instead of classic classes ember/no-classic-classes
Prettier: SyntaxError: Decorators cannot be used to decorate object literal properties
そのため、まだ更新していない場合は、テーマやプラグインのコードを新しい構文に更新する時期が来ています。更新する必要があるのは、主に新しいクラス定義と modifyClass の呼び出しの 2 つです。
クラス定義
作業の多くは ember-native-class-codemod を使用して行うことができます。テーマ/プラグイン リポジトリの中から、次を実行します。
NO_TELEMETRY=true npx ember-native-class-codemod@4.1.1 --no-classic-decorator **/*.js
これにより、ファイルが処理され、新しいネイティブクラス構文に変換されます。場合によっては、手動で介入するように求められます。コードの変更は常に確認してください。完璧ではありません。
多くのテーマ/プラグインを更新する必要がある場合は、mass-pr スクリプト が役立つかもしれません。
modifyClass の呼び出し
modifyClass の呼び出し内でデコレータを使用している場合は、新しいネイティブクラスベースの構文を使用する必要があります。詳細については、ドキュメント を参照してください。これらの変更を行う際は、記載されている制限事項を念頭に置いてください。