Skip to content

Commit 1181411

Browse files
committed
Extending withModules module to support dynamically added modules
1 parent 7adef61 commit 1181411

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

addon/addon/index.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export default class Resolver {
6363
constructor(props) {
6464
Object.assign(this, props);
6565
if (!this._moduleRegistry) {
66-
const explicitModules = this.constructor.explicitModules;
66+
let explicitModules = this.constructor.explicitModules;
6767
if (explicitModules) {
6868
this._moduleRegistry = {
6969
moduleNames() {
@@ -75,6 +75,9 @@ export default class Resolver {
7575
get(name) {
7676
return explicitModules[name];
7777
},
78+
addModules(modules) {
79+
explicitModules = Object.assign({}, explicitModules, modules);
80+
},
7881
};
7982
} else {
8083
if (typeof globalThis.requirejs.entries === 'undefined') {
@@ -204,6 +207,9 @@ export default class Resolver {
204207
}
205208

206209
resolve(fullName) {
210+
if (fullName === 'resolver:current') {
211+
return { create: () => this };
212+
}
207213
let parsedName = this.parseName(fullName);
208214
let resolveMethodName = parsedName.resolveMethodName;
209215
let resolved;
@@ -219,6 +225,15 @@ export default class Resolver {
219225
return resolved;
220226
}
221227

228+
addModules(modules) {
229+
if (!this._moduleRegistry.addModules) {
230+
throw new Error(
231+
`addModules is only supported when your Resolver has been configured to use static modules via Resolver.withModules()`
232+
);
233+
}
234+
this._moduleRegistry.addModules(modules);
235+
}
236+
222237
_normalize(fullName) {
223238
// A) Convert underscores to dashes
224239
// B) Convert camelCase to dash-case, except for components (their

addon/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export default class Resolver {
66
}
77
export default interface Resolver extends Required<ResolverContract> {
88
pluralizedTypes: Record<string, string>;
9+
addModules(modules: Record<string, unknown>): void;
910
}
1011

1112

test-app/tests/unit/resolvers/classic/with-modues-test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,31 @@ module('ember-resolver withModules', function () {
1515

1616
assert.strictEqual((0, resolver.resolve('component:hello'))(), 'it works');
1717
});
18+
19+
test('can resolve self', function (assert) {
20+
let resolver = Resolver.create({ namespace: { modulePrefix: 'alpha' } });
21+
assert.strictEqual(resolver, resolver.resolve('resolver:current').create());
22+
});
23+
24+
test('can addModules', function (assert) {
25+
let startingModules = {};
26+
let resolver = Resolver.withModules({}).create({
27+
namespace: { modulePrefix: 'alpha' },
28+
});
29+
30+
resolver.addModules({
31+
'alpha/components/hello': {
32+
default: function () {
33+
return 'it works';
34+
},
35+
},
36+
});
37+
38+
assert.strictEqual((0, resolver.resolve('component:hello'))(), 'it works');
39+
assert.deepEqual(
40+
[],
41+
Object.keys(startingModules),
42+
'did not mutate starting modules'
43+
);
44+
});
1845
});

0 commit comments

Comments
 (0)