diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ec6ae6..d413921 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,6 +68,7 @@ jobs: - ember-lts-4.12 - ember-lts-5.4 - ember-lts-5.8 + - ember-resolver-12 - ember-release - ember-beta - ember-canary diff --git a/README.md b/README.md index 0e966d5..0abce5e 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,38 @@ Install this addon via ember-cli: ember install ember-can ``` +After installation you will need to add the following import to your app.js or app.ts: + +```js +import { extendResolver } from 'ember-can'; +``` + +Next, replace `Resolver = Resolver;` with: + +```js +Resolver = extendResolver(Resolver); +``` + +Without this update, the app will encounter an error where it cannot find your abilities. + +After these changes your app file should look something like: +```js +import Application from '@ember/application'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from 'my-app/config/environment'; +import { extendResolver } from 'ember-can'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = extendResolver(Resolver); +} + +loadInitializers(App, config.modulePrefix); +``` + + ## Compatibility * Ember.js v3.28 or above diff --git a/ember-can/package.json b/ember-can/package.json index bdb1fec..b24880e 100644 --- a/ember-can/package.json +++ b/ember-can/package.json @@ -91,7 +91,7 @@ "babel-plugin-ember-template-compilation": "^2.2.5", "concurrently": "^8.2.2", "ember-inflector": "^5.0.1", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.0.1", "ember-source": "^5.8.0", "ember-template-lint": "^6.0.0", "eslint": "^8.56.0", @@ -121,7 +121,6 @@ "app-js": { "./helpers/can.js": "./dist/_app_/helpers/can.js", "./helpers/cannot.js": "./dist/_app_/helpers/cannot.js", - "./initializers/setup-ember-can.js": "./dist/_app_/initializers/setup-ember-can.js", "./services/abilities.js": "./dist/_app_/services/abilities.js" } }, diff --git a/ember-can/rollup.config.mjs b/ember-can/rollup.config.mjs index 2efaac2..80c5f04 100644 --- a/ember-can/rollup.config.mjs +++ b/ember-can/rollup.config.mjs @@ -21,7 +21,6 @@ export default { // is aligned to the config here. // See https://github.com/embroider-build/embroider/blob/main/docs/v2-faq.md#how-can-i-define-the-public-exports-of-my-addon addon.publicEntrypoints([ - 'initializers/**/*.js', 'index.js', 'ability.ts', 'helpers/**/*.js', @@ -31,11 +30,7 @@ export default { // These are the modules that should get reexported into the traditional // "app" tree. Things in here should also be in publicEntrypoints above, but // not everything in publicEntrypoints necessarily needs to go here. - addon.appReexports([ - 'helpers/**/*.js', - 'initializers/**/*.js', - 'services/**/*.js', - ]), + addon.appReexports(['helpers/**/*.js', 'services/**/*.js']), // Follow the V2 Addon rules about dependencies. Your code can import from // `dependencies` and `peerDependencies` as well as standard Ember-provided diff --git a/ember-can/src/-private/resolver.ts b/ember-can/src/-private/resolver.ts new file mode 100644 index 0000000..b56116f --- /dev/null +++ b/ember-can/src/-private/resolver.ts @@ -0,0 +1,12 @@ +import type Resolver from 'ember-resolver'; + +export default function extendResolver( + resolver: typeof Resolver, +): typeof Resolver { + return class EmberCanResolver extends resolver { + pluralizedTypes: Record = { + ...this.pluralizedTypes, + ability: 'abilities', + }; + }; +} diff --git a/ember-can/src/index.ts b/ember-can/src/index.ts index 2962295..87b55ed 100644 --- a/ember-can/src/index.ts +++ b/ember-can/src/index.ts @@ -1,3 +1,4 @@ import Ability from './ability.ts'; +import extendResolver from './-private/resolver.ts'; -export { Ability }; +export { Ability, extendResolver }; diff --git a/ember-can/src/initializers/setup-ember-can.js b/ember-can/src/initializers/setup-ember-can.js deleted file mode 100644 index c94d232..0000000 --- a/ember-can/src/initializers/setup-ember-can.js +++ /dev/null @@ -1,14 +0,0 @@ -import Resolver from 'ember-resolver'; - -Resolver.reopen({ - init() { - this._super(); - this.pluralizedTypes = { - ...this.pluralizedTypes, - ability: 'abilities', - }; - }, -}); - -export function initialize() {} -export default { initialize }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d179ca..3390b07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -154,8 +154,8 @@ importers: specifier: ^5.0.1 version: 5.0.1(@babel/core@7.25.2) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.8.0) + specifier: ^13.0.1 + version: 13.0.1(ember-source@5.8.0) ember-source: specifier: ^5.8.0 version: 5.8.0(@babel/core@7.25.2)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.93.0) @@ -368,8 +368,8 @@ importers: specifier: ^8.0.2 version: 8.1.0(@ember/test-helpers@3.3.1)(@glint/template@1.4.0)(ember-source@5.8.0)(qunit@2.21.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.8.0) + specifier: ^13.0.1 + version: 13.0.1(ember-source@5.8.0) ember-source: specifier: ~5.8.0 version: 5.8.0(@babel/core@7.25.2)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.93.0) @@ -1912,7 +1912,7 @@ packages: ember-source: ^4.0.0 || ^5.0.0 dependencies: '@ember/test-waiters': 3.1.0 - '@embroider/macros': 1.16.5(@glint/template@1.4.0) + '@embroider/macros': 1.16.6(@glint/template@1.4.0) '@simple-dom/interface': 1.4.0 broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 @@ -2032,6 +2032,28 @@ packages: - supports-color dev: true + /@embroider/macros@1.16.6(@glint/template@1.4.0): + resolution: {integrity: sha512-aSdRetg0vY3c70G/3K85fOSlGtDzSV4ozwF9qD8ToQB+4RLZusxwItnctWEa+MKkhAYB6rbFiQ+bhFwEnaEazg==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@glint/template': ^1.0.0 + peerDependenciesMeta: + '@glint/template': + optional: true + dependencies: + '@embroider/shared-internals': 2.6.3 + '@glint/template': 1.4.0 + assert-never: 1.3.0 + babel-import-util: 2.1.1 + ember-cli-babel: 7.26.11 + find-up: 5.0.0 + lodash: 4.17.21 + resolve: 1.22.8 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + dev: true + /@embroider/shared-internals@2.6.2: resolution: {integrity: sha512-jL3Bjn8C73AUBlTex+VixP7YmqvPNN/BZFB85odTstzLFOuR8y2mmGiuWbq17qNuFyoxc6xtndMnAeqwCXBNkA==} engines: {node: 12.* || 14.* || >= 16} @@ -2049,6 +2071,24 @@ packages: transitivePeerDependencies: - supports-color + /@embroider/shared-internals@2.6.3: + resolution: {integrity: sha512-wyFQNSqN+RZWg5ckqsk0Qfun433aEd70L6sc16sY4FFf/AzDnolmc0t3eR7lkdyxltYSrO5eqkFN7hW7l/glaw==} + engines: {node: 12.* || 14.* || >= 16} + dependencies: + babel-import-util: 2.1.1 + debug: 4.3.6 + ember-rfc176-data: 0.3.18 + fs-extra: 9.1.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + minimatch: 3.1.2 + resolve-package-path: 4.0.3 + semver: 7.6.3 + typescript-memoize: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@embroider/test-setup@4.0.0: resolution: {integrity: sha512-1S3Ebk0CEh3XDqD93AWSwQZBCk+oGv03gtkaGgdgyXGIR7jrVyDgEnEuslN/hJ0cuU8TqhiXrzHMw7bJwIGhWw==} engines: {node: 12.* || 14.* || >= 16} @@ -3248,28 +3288,6 @@ packages: '@types/ms': 0.7.34 dev: true - /@types/ember@4.0.11: - resolution: {integrity: sha512-v7VIex0YILK8fP87LkIfzeeYKNnu74+xwf6U56v6MUDDGfSs9q/6NCxiUfwkxD+z5nQiUcwvfKVokX8qzZFRLw==} - dependencies: - '@types/ember__application': 4.0.11(@babel/core@7.25.2) - '@types/ember__array': 4.0.10 - '@types/ember__component': 4.0.22 - '@types/ember__controller': 4.0.12 - '@types/ember__debug': 4.0.8 - '@types/ember__engine': 4.0.11 - '@types/ember__error': 4.0.6 - '@types/ember__object': 4.0.12(@babel/core@7.25.2) - '@types/ember__polyfills': 4.0.6 - '@types/ember__routing': 4.0.22 - '@types/ember__runloop': 4.0.10 - '@types/ember__service': 4.0.9 - '@types/ember__string': 3.16.3 - '@types/ember__template': 4.0.7 - '@types/ember__test': 4.0.6(@babel/core@7.25.2) - '@types/ember__utils': 4.0.7 - '@types/rsvp': 4.0.9 - dev: true - /@types/ember@4.0.11(@babel/core@7.25.2): resolution: {integrity: sha512-v7VIex0YILK8fP87LkIfzeeYKNnu74+xwf6U56v6MUDDGfSs9q/6NCxiUfwkxD+z5nQiUcwvfKVokX8qzZFRLw==} dependencies: @@ -3309,13 +3327,6 @@ packages: - supports-color dev: true - /@types/ember__array@4.0.10: - resolution: {integrity: sha512-UrhDbopLI3jB0MqV14y8yji2IuPNmeDrtT1PRYJL4CThLHrRkfeYyFvxqvrxWxn0wXKjbbjfH1gOe7BU57QrLQ==} - dependencies: - '@types/ember': 4.0.11 - '@types/ember__object': 4.0.12 - dev: true - /@types/ember__array@4.0.10(@babel/core@7.25.2): resolution: {integrity: sha512-UrhDbopLI3jB0MqV14y8yji2IuPNmeDrtT1PRYJL4CThLHrRkfeYyFvxqvrxWxn0wXKjbbjfH1gOe7BU57QrLQ==} dependencies: @@ -3326,13 +3337,6 @@ packages: - supports-color dev: true - /@types/ember__component@4.0.22: - resolution: {integrity: sha512-m72EtmBN/RxOChXqRsyOg4RR5+AiB4LQ8s1CEKNYAfvANt18m4hjqxtA7QZYLTq2ZjEVJGpdMsrdDuONWjwRSQ==} - dependencies: - '@types/ember': 4.0.11 - '@types/ember__object': 4.0.12 - dev: true - /@types/ember__component@4.0.22(@babel/core@7.25.2): resolution: {integrity: sha512-m72EtmBN/RxOChXqRsyOg4RR5+AiB4LQ8s1CEKNYAfvANt18m4hjqxtA7QZYLTq2ZjEVJGpdMsrdDuONWjwRSQ==} dependencies: @@ -3343,12 +3347,6 @@ packages: - supports-color dev: true - /@types/ember__controller@4.0.12: - resolution: {integrity: sha512-80rdnSC0UJBqoUX5/vkQcM2xkRdTPTvY0dPXEfY5cC5OZITbcSeRo5qa7ZGhgNBfH6XYyh55Lo/b811LwU3N9w==} - dependencies: - '@types/ember__object': 4.0.12 - dev: true - /@types/ember__controller@4.0.12(@babel/core@7.25.2): resolution: {integrity: sha512-80rdnSC0UJBqoUX5/vkQcM2xkRdTPTvY0dPXEfY5cC5OZITbcSeRo5qa7ZGhgNBfH6XYyh55Lo/b811LwU3N9w==} dependencies: @@ -3358,13 +3356,6 @@ packages: - supports-color dev: true - /@types/ember__debug@4.0.8: - resolution: {integrity: sha512-9wF7STmDHDsUxSjyCq2lpMq/03QOPkBQMGJnV8yOBnVZxB6f+FJH/kxaCprdMkUe7iwAPNEC2zrFFx1tzH75Kg==} - dependencies: - '@types/ember__object': 4.0.12 - '@types/ember__owner': 4.0.9 - dev: true - /@types/ember__debug@4.0.8(@babel/core@7.25.2): resolution: {integrity: sha512-9wF7STmDHDsUxSjyCq2lpMq/03QOPkBQMGJnV8yOBnVZxB6f+FJH/kxaCprdMkUe7iwAPNEC2zrFFx1tzH75Kg==} dependencies: @@ -3379,13 +3370,6 @@ packages: resolution: {integrity: sha512-spJyZxpvecssbXkaOQYcbnlWgb+TasFaKrgAYVbykZY6saMwUdMOGDDoW6uP/y/+A8Jj/fUIatPWJLepeSfgww==} dev: true - /@types/ember__engine@4.0.11: - resolution: {integrity: sha512-ryR4Q1Xm3kQ3Ap58w10CxV3+vb3hs1cJqi7UZ5IlSdLRql7AbpS6hIjxSQ3EQ4zadeeJ6/D8JJcSwqR7eX3PFA==} - dependencies: - '@types/ember__object': 4.0.12 - '@types/ember__owner': 4.0.9 - dev: true - /@types/ember__engine@4.0.11(@babel/core@7.25.2): resolution: {integrity: sha512-ryR4Q1Xm3kQ3Ap58w10CxV3+vb3hs1cJqi7UZ5IlSdLRql7AbpS6hIjxSQ3EQ4zadeeJ6/D8JJcSwqR7eX3PFA==} dependencies: @@ -3421,13 +3405,6 @@ packages: - supports-color dev: true - /@types/ember__object@4.0.12: - resolution: {integrity: sha512-ZEpikPjZ02m1QCBiTPTayMJwVwF4UBlHlGDoScRB3IP/SUS1O5mmn1/CnSQDxzzF3ctfmhNuTZzVBBc1Y8OC1A==} - dependencies: - '@types/ember': 4.0.11 - '@types/rsvp': 4.0.9 - dev: true - /@types/ember__object@4.0.12(@babel/core@7.25.2): resolution: {integrity: sha512-ZEpikPjZ02m1QCBiTPTayMJwVwF4UBlHlGDoScRB3IP/SUS1O5mmn1/CnSQDxzzF3ctfmhNuTZzVBBc1Y8OC1A==} dependencies: @@ -3446,33 +3423,18 @@ packages: resolution: {integrity: sha512-hbds3Qv+oVm/QKIaY1E6atvrCoJTH/MPSl4swOhX6P0RiMB2fOfFCrFSD1mP1KrU1LqpHJ2Rzs7XLe53SWVzgw==} dev: true - /@types/ember__routing@4.0.22: - resolution: {integrity: sha512-qLk9Vd2GMxdlGmX9xbzg4Farths+AQGzYDH901Wo2Nsre+Cwv1Tk1rbCiay2V3ICYZYufytdWT6V++DISF3nvw==} - dependencies: - '@types/ember': 4.0.11 - '@types/ember__controller': 4.0.12 - '@types/ember__object': 4.0.12 - '@types/ember__service': 4.0.9 - dev: true - /@types/ember__routing@4.0.22(@babel/core@7.25.2): resolution: {integrity: sha512-qLk9Vd2GMxdlGmX9xbzg4Farths+AQGzYDH901Wo2Nsre+Cwv1Tk1rbCiay2V3ICYZYufytdWT6V++DISF3nvw==} dependencies: '@types/ember': 4.0.11(@babel/core@7.25.2) - '@types/ember__controller': 4.0.12 + '@types/ember__controller': 4.0.12(@babel/core@7.25.2) '@types/ember__object': 4.0.12(@babel/core@7.25.2) - '@types/ember__service': 4.0.9 + '@types/ember__service': 4.0.9(@babel/core@7.25.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__runloop@4.0.10: - resolution: {integrity: sha512-9MZfOJBXuUP7RqLjovmzy1yY2xKTxVpqHMapqy6QJ8mjAekRmq9IJ+ni2zJ5CWftyb3Lqu3Eks05CL7fnbhcJA==} - dependencies: - '@types/ember': 4.0.11 - dev: true - /@types/ember__runloop@4.0.10(@babel/core@7.25.2): resolution: {integrity: sha512-9MZfOJBXuUP7RqLjovmzy1yY2xKTxVpqHMapqy6QJ8mjAekRmq9IJ+ni2zJ5CWftyb3Lqu3Eks05CL7fnbhcJA==} dependencies: @@ -3482,12 +3444,6 @@ packages: - supports-color dev: true - /@types/ember__service@4.0.9: - resolution: {integrity: sha512-DrepocL/4hH5YxbDWbxEKMDcAchBPSGGa4g+LEINW1Po81RmSdKw5GZV4UO0mvRWgkdu3EbWUxbTzB4gmbDSeQ==} - dependencies: - '@types/ember__object': 4.0.12 - dev: true - /@types/ember__service@4.0.9(@babel/core@7.25.2): resolution: {integrity: sha512-DrepocL/4hH5YxbDWbxEKMDcAchBPSGGa4g+LEINW1Po81RmSdKw5GZV4UO0mvRWgkdu3EbWUxbTzB4gmbDSeQ==} dependencies: @@ -3516,12 +3472,6 @@ packages: - supports-color dev: true - /@types/ember__utils@4.0.7: - resolution: {integrity: sha512-qQPBeWRyIPigKnZ68POlkqI5e6XA78Q4G3xHo687wQTcEtfoL/iZyPC4hn70mdijcZq8Hjch2Y3E5yhsEMzK+g==} - dependencies: - '@types/ember': 4.0.11 - dev: true - /@types/ember__utils@4.0.7(@babel/core@7.25.2): resolution: {integrity: sha512-qQPBeWRyIPigKnZ68POlkqI5e6XA78Q4G3xHo687wQTcEtfoL/iZyPC4hn70mdijcZq8Hjch2Y3E5yhsEMzK+g==} dependencies: @@ -6595,7 +6545,7 @@ packages: '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.25.2) '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) '@babel/preset-env': 7.25.3(@babel/core@7.25.2) - '@embroider/macros': 1.16.5(@glint/template@1.4.0) + '@embroider/macros': 1.16.6(@glint/template@1.4.0) '@embroider/shared-internals': 2.6.2 babel-loader: 8.3.0(@babel/core@7.25.2)(webpack@5.93.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 @@ -7234,7 +7184,7 @@ packages: dependencies: '@ember/test-helpers': 3.3.1(@babel/core@7.25.2)(@glint/template@1.4.0)(ember-source@5.8.0)(webpack@5.93.0) '@embroider/addon-shim': 1.8.9 - '@embroider/macros': 1.16.5(@glint/template@1.4.0) + '@embroider/macros': 1.16.6(@glint/template@1.4.0) ember-cli-test-loader: 3.1.0 ember-source: 5.8.0(@babel/core@7.25.2)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.93.0) qunit: 2.21.1 @@ -7244,8 +7194,8 @@ packages: - supports-color dev: true - /ember-resolver@12.0.1(ember-source@5.8.0): - resolution: {integrity: sha512-U+ZBdbEHMhmvcZly1xhZKwqeH5/igjT93p9bbD6x+mQVg7hm4jrsQA4jsxHu3BqgL5MmqOVx0gtAuYEWV1x2MQ==} + /ember-resolver@13.0.1(ember-source@5.8.0): + resolution: {integrity: sha512-+F0lX8P9pBwE1hf8PMhe7ftT3f9PQSQwIXPN1qc9Aiij5V/GDVTdd+j4+CSj6tCHlf6ylADGxs4c6mofs/sDvQ==} engines: {node: 14.* || 16.* || >= 18} peerDependencies: ember-source: ^4.12.0 || >= 5.0.0 @@ -11874,7 +11824,7 @@ packages: ky: 1.5.0 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.2 + semver: 7.6.3 dev: true /package-json@6.5.0: diff --git a/test-app/app/app.ts b/test-app/app/app.ts index 1ba9342..9adb7a4 100644 --- a/test-app/app/app.ts +++ b/test-app/app/app.ts @@ -2,11 +2,12 @@ import Application from '@ember/application'; import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; import config from 'test-app/config/environment'; +import { extendResolver } from 'ember-can'; export default class App extends Application { modulePrefix = config.modulePrefix; podModulePrefix = config.podModulePrefix; - Resolver = Resolver; + Resolver = extendResolver(Resolver); } loadInitializers(App, config.modulePrefix); diff --git a/test-app/config/ember-try.js b/test-app/config/ember-try.js index 768503b..c70f8a1 100644 --- a/test-app/config/ember-try.js +++ b/test-app/config/ember-try.js @@ -61,6 +61,15 @@ module.exports = async function () { }, }, }, + { + name: 'ember-resolver-12', + npm: { + devDependencies: { + 'ember-source': '~5.8.0', + 'ember-resolver': '^12.0.0', + }, + }, + }, { name: 'ember-release', npm: { diff --git a/test-app/package.json b/test-app/package.json index a1eecdc..7cf3018 100644 --- a/test-app/package.json +++ b/test-app/package.json @@ -79,7 +79,7 @@ "ember-modifier": "^4.1.0", "ember-page-title": "^8.2.3", "ember-qunit": "^8.0.2", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.0.1", "ember-source": "~5.8.0", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^6.0.0",