1 | function 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 | }
|
15 | function registerInitializers(app, modules, moduleNames) {
|
16 | for (let moduleName of moduleNames) {
|
17 | app.initializer(resolveInitializer(modules, moduleName));
|
18 | }
|
19 | }
|
20 | function registerInstanceInitializers(app, modules, moduleNames) {
|
21 | for (let moduleName of moduleNames) {
|
22 | app.instanceInitializer(resolveInitializer(modules, moduleName));
|
23 | }
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 | export 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 | }
|