Skip to content

Commit 2eca39f

Browse files
committed
optional explicit modules
1 parent a51d352 commit 2eca39f

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

addon/addon/index.js

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import { dasherize, classify, underscore } from './string';
22
import classFactory from './utils/class-factory';
33

4-
if (typeof globalThis.requirejs.entries === 'undefined') {
5-
globalThis.requirejs.entries = globalThis.requirejs._eak_seen;
6-
}
7-
84
export class ModuleRegistry {
95
constructor(entries) {
106
this._entries = entries || globalThis.requirejs.entries;
@@ -58,10 +54,34 @@ export default class Resolver {
5854
this.nestedColocationComponentModuleName,
5955
];
6056

57+
static withModules(explicitModules) {
58+
return class extends this {
59+
static explicitModules = explicitModules;
60+
};
61+
}
62+
6163
constructor(props) {
6264
Object.assign(this, props);
6365
if (!this._moduleRegistry) {
64-
this._moduleRegistry = new ModuleRegistry();
66+
const explicitModules = this.constructor.explicitModules;
67+
if (explicitModules) {
68+
this._moduleRegistry = {
69+
moduleNames() {
70+
return Object.keys(explicitModules);
71+
},
72+
has(name) {
73+
return Boolean(explicitModules[name]);
74+
},
75+
get(name) {
76+
return explicitModules[name];
77+
},
78+
};
79+
} else {
80+
if (typeof globalThis.requirejs.entries === 'undefined') {
81+
globalThis.requirejs.entries = globalThis.requirejs._eak_seen;
82+
}
83+
this._moduleRegistry = new ModuleRegistry();
84+
}
6585
}
6686

6787
this.pluralizedTypes = this.pluralizedTypes || Object.create(null);

addon/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Resolver as ResolverContract } from "@ember/owner";
22

33
export default class Resolver {
44
static create(props: Record<string, unknown>): InstanceType<this>;
5+
static withModules(modules: Record<string, unknown>): this;
56
}
67
export default interface Resolver extends Required<ResolverContract> {
78
pluralizedTypes: Record<string, string>;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* eslint-disable no-console */
2+
3+
import { module, test } from 'qunit';
4+
import Resolver from 'ember-resolver';
5+
6+
module('ember-resolver withModules', function () {
7+
test('explicit withModules', function (assert) {
8+
let resolver = Resolver.withModules({
9+
'alpha/components/hello': {
10+
default: function () {
11+
return 'it works';
12+
},
13+
},
14+
}).create({ namespace: { modulePrefix: 'alpha' } });
15+
16+
assert.strictEqual((0, resolver.resolve('component:hello'))(), 'it works');
17+
});
18+
});

0 commit comments

Comments
 (0)