From 3d82f78077e073e4995617bedea4dee2b6e85534 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Wed, 11 Sep 2024 10:48:13 +0100 Subject: [PATCH] Converting to plain library. --- addon/addon/container-debug-adapter.js | 103 --------------- addon/addon/features.js | 5 - addon/addon/index.js | 123 +++--------------- addon/app/container-debug-adapter.js | 1 - addon/config/environment.js | 5 - addon/package.json | 8 +- package-lock.json | 12 +- .../unit/container-debug-adapter-test.js | 105 --------------- .../unit/resolvers/classic/basic-test.js | 15 --- .../unit/resolvers/classic/logging-test.js | 51 -------- 10 files changed, 26 insertions(+), 402 deletions(-) delete mode 100644 addon/addon/container-debug-adapter.js delete mode 100644 addon/addon/features.js delete mode 100644 addon/app/container-debug-adapter.js delete mode 100644 addon/config/environment.js delete mode 100644 test-app/tests/unit/container-debug-adapter-test.js delete mode 100644 test-app/tests/unit/resolvers/classic/logging-test.js diff --git a/addon/addon/container-debug-adapter.js b/addon/addon/container-debug-adapter.js deleted file mode 100644 index dcf3eb5b..00000000 --- a/addon/addon/container-debug-adapter.js +++ /dev/null @@ -1,103 +0,0 @@ -import { A } from '@ember/array'; -import ContainerDebugAdapter from '@ember/debug/container-debug-adapter'; -import { ModuleRegistry } from './index'; -import { getOwner } from '@ember/application'; - -function getPod(type, key, prefix) { - let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$')); - if (match !== null) { - return match[1]; - } -} - -/* - * This module defines a subclass of Ember.ContainerDebugAdapter that adds - * support for resolving from modules. - * - */ - -/* eslint-disable ember/no-classic-classes */ -export default ContainerDebugAdapter.extend({ - _moduleRegistry: null, - - init() { - this._super(...arguments); - this.namespace = getOwner(this).lookup('application:main'); - - if (!this._moduleRegistry) { - this._moduleRegistry = new ModuleRegistry(); - } - }, - - /** - The container of the application being debugged. - This property will be injected - on creation. - - @property container - @default null - */ - - /** - The resolver instance of the application - being debugged. This property will be injected - on creation. - - @property resolver - @default null - */ - - /** - Returns true if it is possible to catalog a list of available - classes in the resolver for a given type. - - @method canCatalogEntriesByType - @param {string} type The type. e.g. "model", "controller", "route" - @return {boolean} whether a list is available for this type. - */ - canCatalogEntriesByType(type) { - if (type === 'model') { - return true; - } - return this._super(...arguments); - }, - - /** - Returns the available classes a given type. - - @method catalogEntriesByType - @param {string} type The type. e.g. "model", "controller", "route" - @return {Array} An array of classes. - */ - catalogEntriesByType(type) { - let moduleNames = this._moduleRegistry.moduleNames(); - let types = A(); - - let prefix = this.namespace.modulePrefix; - - for (let i = 0, l = moduleNames.length; i < l; i++) { - let key = moduleNames[i]; - - if (key.indexOf(type) !== -1) { - // Check if it's a pod module - let name = getPod(type, key, this.namespace.podModulePrefix || prefix); - if (!name) { - // Not pod - name = key.split(type + 's/').pop(); - - // Support for different prefix (such as ember-cli addons). - // Uncomment the code below when - // https://github.com/ember-cli/ember-resolver/pull/80 is merged. - - //let match = key.match('^/?(.+)/' + type); - //if (match && match[1] !== prefix) { - // Different prefix such as an addon - //name = match[1] + '@' + name; - //} - } - types.addObject(name); - } - } - return types; - }, -}); diff --git a/addon/addon/features.js b/addon/addon/features.js deleted file mode 100644 index 01b26ffc..00000000 --- a/addon/addon/features.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - * This is a stub file, it must be on disk b/c babel-plugin-debug-macros - * does not strip the module require when the transpiled variable usage is - * stripped. - */ diff --git a/addon/addon/index.js b/addon/addon/index.js index 01c52793..5be5d3fb 100644 --- a/addon/addon/index.js +++ b/addon/addon/index.js @@ -1,13 +1,8 @@ /* globals requirejs, require */ -import { assert, deprecate, warn } from '@ember/debug'; -import EmberObject from '@ember/object'; import { dasherize, classify, underscore } from './string'; -import { DEBUG } from '@glimmer/env'; import classFactory from './utils/class-factory'; -import { getOwner } from '@ember/owner'; - if (typeof requirejs.entries === 'undefined') { requirejs.entries = requirejs._eak_seen; } @@ -38,13 +33,17 @@ export class ModuleRegistry { * 2) is able to provide injections to classes that implement `extend` * (as is typical with Ember). */ -class Resolver extends EmberObject { +export default class Resolver { static moduleBasedResolver = true; moduleBasedResolver = true; _deprecatedPodModulePrefix = false; _normalizeCache = Object.create(null); + static create(props) { + return new this(props); + } + /** A listing of functions to test for moduleName's based on the provided `parsedName`. This allows easy customization of additional module based @@ -61,9 +60,8 @@ class Resolver extends EmberObject { this.nestedColocationComponentModuleName, ]; - constructor() { - super(...arguments); - + constructor(props) { + Object.assign(this, props); if (!this._moduleRegistry) { this._moduleRegistry = new ModuleRegistry(); } @@ -337,7 +335,7 @@ class Resolver extends EmberObject { return tmpPrefix; } - findModuleName(parsedName, loggingDisabled) { + findModuleName(parsedName) { let moduleNameLookupPatterns = this.moduleNameLookupPatterns; let moduleName; @@ -353,24 +351,20 @@ class Resolver extends EmberObject { // allow treat all dashed and all underscored as the same thing // supports components with dashes and other stuff with underscores. if (tmpModuleName) { - tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName); + tmpModuleName = this.chooseModuleName(tmpModuleName); } if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) { moduleName = tmpModuleName; } - if (!loggingDisabled) { - this._logLookup(moduleName, parsedName, tmpModuleName); - } - if (moduleName) { return moduleName; } } } - chooseModuleName(moduleName, parsedName) { + chooseModuleName(moduleName) { let underscoredModuleName = underscore(moduleName); if ( @@ -388,97 +382,6 @@ class Resolver extends EmberObject { } else if (this._moduleRegistry.has(underscoredModuleName)) { return underscoredModuleName; } - // workaround for dasherized partials: - // something/something/-something => something/something/_something - let partializedModuleName = moduleName.replace(/\/-([^/]*)$/, '/_$1'); - - if (this._moduleRegistry.has(partializedModuleName)) { - deprecate( - 'Modules should not contain underscores. ' + - 'Attempted to lookup "' + - moduleName + - '" which ' + - 'was not found. Please rename "' + - partializedModuleName + - '" ' + - 'to "' + - moduleName + - '" instead.', - false, - { - id: 'ember-resolver.underscored-modules', - until: '3.0.0', - for: 'ember-resolver', - since: '0.1.0', - } - ); - - return partializedModuleName; - } - - if (DEBUG) { - let isCamelCaseHelper = - parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName); - if (isCamelCaseHelper) { - this._camelCaseHelperWarnedNames = - this._camelCaseHelperWarnedNames || []; - let alreadyWarned = - this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1; - if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) { - this._camelCaseHelperWarnedNames.push(parsedName.fullName); - warn( - 'Attempted to lookup "' + - parsedName.fullName + - '" which ' + - 'was not found. In previous versions of ember-resolver, a bug would have ' + - 'caused the module at "' + - dasherize(moduleName) + - '" to be ' + - 'returned for this camel case helper name. This has been fixed. ' + - 'Use the dasherized name to resolve the module that would have been ' + - 'returned in previous versions.', - false, - { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' } - ); - } - } - } - } - - // used by Ember.DefaultResolver.prototype._logLookup - lookupDescription(fullName) { - let parsedName = this.parseName(fullName); - - let moduleName = this.findModuleName(parsedName, true); - - return moduleName; - } - - // only needed until 1.6.0-beta.2 can be required - _logLookup(found, parsedName, description) { - let owner = getOwner(this); - let env = owner?.resolveRegistration?.('config:environment'); - if (!env?.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) { - return; - } - - let padding; - let symbol = found ? '[✓]' : '[ ]'; - - if (parsedName.fullName.length > 60) { - padding = '.'; - } else { - padding = new Array(60 - parsedName.fullName.length).join('.'); - } - - if (!description) { - description = this.lookupDescription(parsedName); - } - - /* eslint-disable no-console */ - if (console && console.info) { - console.info(symbol, parsedName.fullName, padding, description); - } } knownForType(type) { @@ -545,4 +448,8 @@ class Resolver extends EmberObject { } } -export default Resolver; +function assert(message, check) { + if (!check) { + throw new Error(message); + } +} diff --git a/addon/app/container-debug-adapter.js b/addon/app/container-debug-adapter.js deleted file mode 100644 index 6aaf987b..00000000 --- a/addon/app/container-debug-adapter.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-resolver/container-debug-adapter'; diff --git a/addon/config/environment.js b/addon/config/environment.js deleted file mode 100644 index 331ab30d..00000000 --- a/addon/config/environment.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function (/* environment, appConfig */) { - return {}; -}; diff --git a/addon/package.json b/addon/package.json index fe7be281..a3d2672f 100644 --- a/addon/package.json +++ b/addon/package.json @@ -2,9 +2,7 @@ "name": "ember-resolver", "version": "12.0.1", "description": "The default modules based resolver for Ember CLI.", - "keywords": [ - "ember-addon" - ], + "keywords": [], "homepage": "https://github.com/ember-cli/ember-resolver#readme", "bugs": { "url": "https://github.com/ember-cli/ember-resolver/issues" @@ -42,6 +40,10 @@ "ember": { "edition": "octane" }, + "exports": { + ".": "./addon/index", + "./*": "./addon/*" + }, "volta": { "extends": "../package.json" } diff --git a/package-lock.json b/package-lock.json index e47974be..27722c43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "ember-resolver", - "version": "12.0.0", + "version": "12.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "12.0.0", + "version": "12.0.1", "workspaces": [ "addon", "test-app" @@ -29,7 +29,7 @@ }, "addon": { "name": "ember-resolver", - "version": "12.0.0", + "version": "12.0.1", "license": "MIT", "dependencies": { "ember-cli-babel": "^7.26.11" @@ -23629,7 +23629,7 @@ } }, "test-app": { - "version": "12.0.0", + "version": "12.0.1", "license": "MIT", "dependencies": { "@embroider/macros": "^1.16.2" @@ -23650,7 +23650,7 @@ "ember-disable-prototype-extensions": "^1.1.3", "ember-load-initializers": "^2.1.2", "ember-qunit": "^6.2.0", - "ember-resolver": "12.0.0", + "ember-resolver": "12.0.1", "ember-source": "~4.12.0", "ember-source-channel-url": "^3.0.0", "ember-try": "^2.0.0", @@ -40421,7 +40421,7 @@ "ember-disable-prototype-extensions": "^1.1.3", "ember-load-initializers": "^2.1.2", "ember-qunit": "^6.2.0", - "ember-resolver": "12.0.0", + "ember-resolver": "12.0.1", "ember-source": "~4.12.0", "ember-source-channel-url": "^3.0.0", "ember-try": "^2.0.0", diff --git a/test-app/tests/unit/container-debug-adapter-test.js b/test-app/tests/unit/container-debug-adapter-test.js deleted file mode 100644 index dc846158..00000000 --- a/test-app/tests/unit/container-debug-adapter-test.js +++ /dev/null @@ -1,105 +0,0 @@ -/* globals define, requirejs */ -import { setupTest } from 'ember-qunit'; -import { module, test } from 'qunit'; - -module('Container Debug Adapter Tests', function (hooks) { - setupTest(hooks); - - let containerDebugAdapter; - - let modulesToReset; - - function def(moduleName) { - define(moduleName, [], function () {}); - modulesToReset.push(moduleName); - } - - hooks.beforeEach(function () { - modulesToReset = []; - containerDebugAdapter = this.owner.lookup('container-debug-adapter:main'); - }); - - hooks.afterEach(function () { - modulesToReset.forEach((moduleName) => { - requirejs.unsee(moduleName); - delete requirejs.entries[moduleName]; - }); - }); - - test('can access Container Debug Adapter which can catalog typical entries by type', function (assert) { - assert.equal( - containerDebugAdapter.canCatalogEntriesByType('model'), - true, - 'canCatalogEntriesByType should return false for model' - ); - assert.equal( - containerDebugAdapter.canCatalogEntriesByType('template'), - false, - 'canCatalogEntriesByType should return false for template' - ); - assert.equal( - containerDebugAdapter.canCatalogEntriesByType('controller'), - true, - 'canCatalogEntriesByType should return true for controller' - ); - assert.equal( - containerDebugAdapter.canCatalogEntriesByType('route'), - true, - 'canCatalogEntriesByType should return true for route' - ); - assert.equal( - containerDebugAdapter.canCatalogEntriesByType('view'), - true, - 'canCatalogEntriesByType should return true for view' - ); - }); - - test('the default ContainerDebugAdapter catalogs controller entries', function (assert) { - def('test-app/controllers/foo'); - def('test-app/controllers/users/foo'); - - let controllers = containerDebugAdapter.catalogEntriesByType('controller'); - - assert.ok(controllers.includes('foo'), 'foo controller was discovered'); - assert.ok( - controllers.includes('users/foo'), - 'users/foo controller was discovered' - ); - }); - - test('Does not duplicate entries', function (assert) { - def('test-app/models/foo'); - def('test-app/more/models/foo'); - - let models = containerDebugAdapter.catalogEntriesByType('model'); - - assert.equal(models.length, 1, 'Only one is returned'); - assert.equal(models[0], 'foo', 'the name is correct'); - }); - - test('Pods support', function (assert) { - def('test-app/user/model'); - def('test-app/post/model'); - - let models = containerDebugAdapter.catalogEntriesByType('model'); - - assert.equal(models.length, 2, 'All models are found'); - assert.equal(models[0], 'user', 'the name is correct'); - assert.equal(models[1], 'post', 'the name is correct'); - }); - - test('Pods podModulePrefix support', function (assert) { - const app = this.owner.lookup('application:main'); - - app.podModulePrefix = 'my-prefix'; - - def('my-prefix/user/model'); - def('my-prefix/users/user/model'); - - let models = containerDebugAdapter.catalogEntriesByType('model'); - - assert.equal(models.length, 2, 'models discovered'); - assert.equal(models[0], 'user', 'the name is correct'); - assert.equal(models[1], 'users/user', 'the name is correct'); - }); -}); diff --git a/test-app/tests/unit/resolvers/classic/basic-test.js b/test-app/tests/unit/resolvers/classic/basic-test.js index a35b9bcc..858864d6 100644 --- a/test-app/tests/unit/resolvers/classic/basic-test.js +++ b/test-app/tests/unit/resolvers/classic/basic-test.js @@ -417,21 +417,6 @@ module('ember-resolver/resolvers/classic', function (hooks) { resolver.resolve('big-band:steve-miller-band'); }); - test('can lookup templates with mixed naming moduleName', function (assert) { - assert.expect(1); - - loader.define('appkit/bands/_steve-miller-band', [], function () { - assert.ok(true, 'underscored version looked up properly'); - - return 'whatever'; - }); - - resolver.resolve('band:-steve-miller-band'); - - // TODO: these helpers not not compatible with modern ember - // assert.expectDeprecation('Modules should not contain underscores. Attempted to lookup "appkit/bands/-steve-miller-band" which was not found. Please rename "appkit/bands/_steve-miller-band" to "appkit/bands/-steve-miller-band" instead.'); - }); - test('it provides eachForType which invokes the callback for each item found', function (assert) { function orange() {} loader.define('appkit/fruits/orange', [], function () { diff --git a/test-app/tests/unit/resolvers/classic/logging-test.js b/test-app/tests/unit/resolvers/classic/logging-test.js deleted file mode 100644 index ee29edae..00000000 --- a/test-app/tests/unit/resolvers/classic/logging-test.js +++ /dev/null @@ -1,51 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -import { setupResolver, resolver, loader } from './-setup-resolver'; - -let originalConsoleInfo, logCalls; - -module('Logging', function (hooks) { - setupTest(hooks); - - hooks.beforeEach(function () { - originalConsoleInfo = console ? console.info : null; - logCalls = []; - console.info = function (arg) { - logCalls.push(arg); - }; - setupResolver({ owner: this.owner }); - }); - - hooks.afterEach(function () { - if (originalConsoleInfo) { - console.info = originalConsoleInfo; - } - }); - - test('logs lookups when logging is enabled', function (assert) { - loader.define('appkit/fruits/orange', [], function () { - return 'is logged'; - }); - - let env = this.owner.resolveRegistration('config:environment'); - env.LOG_MODULE_RESOLVER = true; - - resolver.resolve('fruit:orange'); - - assert.ok(logCalls.length, 'should log lookup'); - }); - - test("doesn't log lookups if disabled", function (assert) { - loader.define('appkit/fruits/orange', [], function () { - return 'is not logged'; - }); - - let env = this.owner.resolveRegistration('config:environment'); - env.LOG_MODULE_RESOLVER = false; - - resolver.resolve('fruit:orange'); - - assert.equal(logCalls.length, 0, 'should not log lookup'); - }); -});