Skip to content

Instantly share code, notes, and snippets.

@gordonkristan
Last active August 29, 2015 14:04
Show Gist options
  • Save gordonkristan/16af62604df5fc260a84 to your computer and use it in GitHub Desktop.
Save gordonkristan/16af62604df5fc260a84 to your computer and use it in GitHub Desktop.
Ember ES6 Module Resolver
let camelizeModuleName = (moduleName) => moduleName.replace(/\//g, '_').camelize();
let findModule = (resolvedName) => {
let moduleNames = window.getModuleNames();
for (let name of moduleNames) {
if (camelizeModuleName(name) === resolvedName) {
return window.require(name);
}
}
return undefined;
};
export default Em.DefaultResolver.extend({
resolveOther(parsed) {
var resolved = undefined;
switch (parsed.type.underscore()) {
case 'adapter':
resolved = this.resolveAdapter(parsed);
break;
case 'type':
resolved = this.resolveAttributeType(parsed);
break;
case 'component':
resolved = this.resolveComponent(parsed);
break;
case 'mixin':
resolved = this.resolveMixin(parsed);
break;
case 'serializer':
resolved = this.resolveSerializer(parsed);
break;
}
if (!resolved) {
resolved = this._super(parsed);
}
return resolved;
},
resolveAdapter(parsed) {
return window.require(`persistence/adapters/${parsed.name.underscore()}`);
},
resolveAttributeType(parsed) {
return window.require(`persistence/attribute_types/${parsed.name.underscore()}`);
},
resolveComponent(parsed) {
return window.require(`components/${parsed.name.underscore()}`);
},
resolveController(parsed) {
return window.findModule(`controllers${parsed.name.capitalize()}`);
},
resolveMixin(parsed) {
return window.require(`mixins/${parsed.name.underscore()}`);
},
resolveModel(parsed) {
return window.require(`persistence/models/${parsed.name.underscore()}`);
},
resolveRoute(parsed) {
return window.findModule(`routes${parsed.name.capitalize()}`);
},
resolveSerializer(parsed) {
return window.require(`persistence/serializers/${parsed.name.underscore()}`);
},
resolveView(parsed) {
return window.findModule(`views${parsed.name.capitalize()}`);
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment