https://github.com/ember-cli/ember-strict-application-resolver
https://github.com/ember-cli/ember-strict-application-resolver
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/ember-cli/ember-strict-application-resolver
- Owner: ember-cli
- License: mit
- Created: 2025-07-27T18:26:05.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-10-06T15:07:10.000Z (6 months ago)
- Last Synced: 2025-10-06T17:19:24.717Z (6 months ago)
- Language: JavaScript
- Size: 219 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ember-strict-application-resolver
A polyfill implementation of the upcoming default strict resolver built in to Ember.
## Installation
```
npm add ember-strict-application-resolver
```
## Usage
In your app.js or app.ts, or wherever you configure your application
```diff
- import config from '/config/environment';
- import EmberApp from '@ember/application';
- import EmberResolver from 'ember-resolver';
+ import EmberApp from 'ember-strict-application-resolver';
class YouApp extends EmberApp {
- modulePrefix = config.modulePrefix;
- podModulePrefix = config.podModulePrefix;
- Resolver = EmberResolver.withModules({
- [`${config.modulePrefix}/router`]: { default: Router },
- [`${config.modulePrefix}/services/manual`]: { default: Manual },
- });
+ modules = {
+ './router': { default: Router },
+ './services/manual': { default: SomeService },
+ './services/manual-shorthand': SomeOtherService,
+
+ // now import.meta.glob just works
+ ...import.meta.glob('./services/**/*', { eager: true }),
+ ...import.meta.glob('./routes/*', { eager: true }),
+ ...import.meta.glob('./templates/**/*', { eager: true }),
+ };
}
```
The type of `modules` is:
```ts
{
[modulePath: string]:
| ExportableType
| { [exportName: string]: ExportableType };
};
```
### `buildRegistry`
Libraries may declare `ember-strict-application-resolver` as a `dependencies` entry, and then import from `./build-registry` - to provide helpers for packages all the library's services and other things that need to be in the registry (such as from the library's dependencies as well)
For example:
```js
// in src/registry.ts (or js)
import { buildRegistry } from 'ember-strict-application-resolver/build-registry';
import TheService from 'from-dependency/services/the-service';
export default buildRegistry({
...import.meta.glob('./services/*', { eager: true }),
'./services/the-service': { default: TheService },
});
```
Then consumers of your library would either splat this into their `modules` object:
```js
import libraryRegistry from 'your-library/registry';
// ...
modules = {
// if the app is using ember-strict-application-resolver
...libraryRegistry(),
// or if using ember-resolver
...libraryRegistry('name-of-app'),
}
```
Or consuming libraries would propagate the configuration for their consumers:
```js
import { buildRegistry } from 'ember-strict-application-resolver/build-registry';
import libraryRegistry from 'your-library/registry';
export default buildRegistry({
...import.meta.glob('./services/*', { eager: true }),
// No argument should be passed here
...libraryRegistry(),
});
```
## Contributing
See the [Contributing](CONTRIBUTING.md) guide for details.
## License
This project is licensed under the [MIT License](LICENSE.md).