From 2eca39fe5cb341d7e6a910b5d611cd0f3df40861 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Wed, 11 Sep 2024 10:48:20 +0100 Subject: [PATCH] optional explicit modules --- addon/addon/index.js | 30 +++++++++++++++---- addon/index.d.ts | 1 + .../resolvers/classic/with-modues-test.js | 18 +++++++++++ 3 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 test-app/tests/unit/resolvers/classic/with-modues-test.js diff --git a/addon/addon/index.js b/addon/addon/index.js index e9270562..5348e5c2 100644 --- a/addon/addon/index.js +++ b/addon/addon/index.js @@ -1,10 +1,6 @@ import { dasherize, classify, underscore } from './string'; import classFactory from './utils/class-factory'; -if (typeof globalThis.requirejs.entries === 'undefined') { - globalThis.requirejs.entries = globalThis.requirejs._eak_seen; -} - export class ModuleRegistry { constructor(entries) { this._entries = entries || globalThis.requirejs.entries; @@ -58,10 +54,34 @@ export default class Resolver { this.nestedColocationComponentModuleName, ]; + static withModules(explicitModules) { + return class extends this { + static explicitModules = explicitModules; + }; + } + constructor(props) { Object.assign(this, props); if (!this._moduleRegistry) { - this._moduleRegistry = new ModuleRegistry(); + const explicitModules = this.constructor.explicitModules; + if (explicitModules) { + this._moduleRegistry = { + moduleNames() { + return Object.keys(explicitModules); + }, + has(name) { + return Boolean(explicitModules[name]); + }, + get(name) { + return explicitModules[name]; + }, + }; + } else { + if (typeof globalThis.requirejs.entries === 'undefined') { + globalThis.requirejs.entries = globalThis.requirejs._eak_seen; + } + this._moduleRegistry = new ModuleRegistry(); + } } this.pluralizedTypes = this.pluralizedTypes || Object.create(null); diff --git a/addon/index.d.ts b/addon/index.d.ts index 69479fc3..29eec247 100644 --- a/addon/index.d.ts +++ b/addon/index.d.ts @@ -2,6 +2,7 @@ import { Resolver as ResolverContract } from "@ember/owner"; export default class Resolver { static create(props: Record): InstanceType; + static withModules(modules: Record): this; } export default interface Resolver extends Required { pluralizedTypes: Record; diff --git a/test-app/tests/unit/resolvers/classic/with-modues-test.js b/test-app/tests/unit/resolvers/classic/with-modues-test.js new file mode 100644 index 00000000..990a0244 --- /dev/null +++ b/test-app/tests/unit/resolvers/classic/with-modues-test.js @@ -0,0 +1,18 @@ +/* eslint-disable no-console */ + +import { module, test } from 'qunit'; +import Resolver from 'ember-resolver'; + +module('ember-resolver withModules', function () { + test('explicit withModules', function (assert) { + let resolver = Resolver.withModules({ + 'alpha/components/hello': { + default: function () { + return 'it works'; + }, + }, + }).create({ namespace: { modulePrefix: 'alpha' } }); + + assert.strictEqual((0, resolver.resolve('component:hello'))(), 'it works'); + }); +});