UNPKG

2.41 kBJavaScriptView Raw
1function resolveInitializer(modules, moduleName) {
2 let module = modules.load(moduleName);
3 if (!module) {
4 throw new Error(moduleName + ' must export an initializer.');
5 }
6 let initializer = module.default;
7 if (!initializer) {
8 throw new Error(moduleName + ' must have a default export');
9 }
10 if (!initializer.name) {
11 initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);
12 }
13 return initializer;
14}
15function registerInitializers(app, modules, moduleNames) {
16 for (let moduleName of moduleNames) {
17 app.initializer(resolveInitializer(modules, moduleName));
18 }
19}
20function registerInstanceInitializers(app, modules, moduleNames) {
21 for (let moduleName of moduleNames) {
22 app.instanceInitializer(resolveInitializer(modules, moduleName));
23 }
24}
25/**
26 * Configure your application as it boots
27 */
28export default function loadInitializers(app, prefix, explicitModules) {
29 var initializerPrefix = prefix + '/initializers/';
30 var instanceInitializerPrefix = prefix + '/instance-initializers/';
31 var initializers = [];
32 var instanceInitializers = [];
33 let modules;
34 if (explicitModules) {
35 modules = {
36 names() {
37 return Object.keys(explicitModules);
38 },
39 load(name) {
40 return explicitModules[name];
41 }
42 };
43 }
44 else {
45 modules = {
46 names() {
47 let requirejs = globalThis.requirejs;
48 if (!requirejs || !requirejs._eak_seen) {
49 throw new Error("No global AMD loader found. To use loadInitializers without a global AMD loader you must provide explicit modules");
50 }
51 return Object.keys(requirejs._eak_seen);
52 },
53 load(name) {
54 return globalThis.require(name, null, null, true);
55 }
56 };
57 }
58 for (let moduleName of modules.names()) {
59 if (moduleName.startsWith(initializerPrefix) && !moduleName.endsWith('-test')) {
60 initializers.push(moduleName);
61 }
62 else if (moduleName.startsWith(instanceInitializerPrefix) && !moduleName.endsWith('-test')) {
63 instanceInitializers.push(moduleName);
64 }
65 }
66 registerInitializers(app, modules, initializers);
67 registerInstanceInitializers(app, modules, instanceInitializers);
68}