ember-load-initializers
Version:
A tiny add-on to autoload your initializer files in ember-cli.
69 lines (68 loc) • 2.41 kB
JavaScript
function resolveInitializer(modules, moduleName) {
let module = modules.load(moduleName);
if (!module) {
throw new Error(moduleName + ' must export an initializer.');
}
let initializer = module.default;
if (!initializer) {
throw new Error(moduleName + ' must have a default export');
}
if (!initializer.name) {
initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);
}
return initializer;
}
function registerInitializers(app, modules, moduleNames) {
for (let moduleName of moduleNames) {
app.initializer(resolveInitializer(modules, moduleName));
}
}
function registerInstanceInitializers(app, modules, moduleNames) {
for (let moduleName of moduleNames) {
app.instanceInitializer(resolveInitializer(modules, moduleName));
}
}
/**
* Configure your application as it boots
*/
export default function loadInitializers(app, prefix, explicitModules) {
var initializerPrefix = prefix + '/initializers/';
var instanceInitializerPrefix = prefix + '/instance-initializers/';
var initializers = [];
var instanceInitializers = [];
let modules;
if (explicitModules) {
modules = {
names() {
return Object.keys(explicitModules);
},
load(name) {
return explicitModules[name];
}
};
}
else {
modules = {
names() {
let requirejs = globalThis.requirejs;
if (!requirejs || !requirejs._eak_seen) {
throw new Error("No global AMD loader found. To use loadInitializers without a global AMD loader you must provide explicit modules");
}
return Object.keys(requirejs._eak_seen);
},
load(name) {
return globalThis.require(name, null, null, true);
}
};
}
for (let moduleName of modules.names()) {
if (moduleName.startsWith(initializerPrefix) && !moduleName.endsWith('-test')) {
initializers.push(moduleName);
}
else if (moduleName.startsWith(instanceInitializerPrefix) && !moduleName.endsWith('-test')) {
instanceInitializers.push(moduleName);
}
}
registerInitializers(app, modules, initializers);
registerInstanceInitializers(app, modules, instanceInitializers);
}