Skip to content

ember-cli/ember-strict-application-resolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

- import config from '<app-name>/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:

{ 
  [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:

// 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:

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:

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 guide for details.

License

This project is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •