diff --git a/index.js b/index.js index e144e76..9d17079 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ 'use strict'; const SilentError = require('silent-error'); +const chalk = require('chalk'); const FEATURES = require('./features'); const getConfigPath = require('./utils').getConfigPath; @@ -65,7 +66,19 @@ module.exports = { isFeatureEnabled(name) { let value = this._features[name]; - return value !== undefined ? value : FEATURES[name].default; + if (value !== undefined) { + return value; + } + let feature = FEATURES[name]; + if (feature === undefined) { + console.warn( + chalk.yellow( + `Warning: Unknown feature "${name}" passed to isFeatureEnabled` + ) + ); + return null; + } + return feature.default; }, isFeatureExplicitlySet(name) { diff --git a/package-lock.json b/package-lock.json index 1adbfe9..a0a53a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ember/optional-features", - "version": "2.0.0", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ember/optional-features", - "version": "2.0.0", + "version": "2.3.0", "license": "MIT", "dependencies": { "chalk": "^4.1.2", diff --git a/tests/optional-features-test.js b/tests/optional-features-test.js index 7744178..a054a40 100644 --- a/tests/optional-features-test.js +++ b/tests/optional-features-test.js @@ -150,6 +150,29 @@ QUnit.module('@ember/optional-features', (hooks) => { ); }); + QUnit.test( + 'it warns and returns null for unknown feature in isFeatureEnabled', + (assert) => { + let addon = buildAddon({}); + let originalWarn = console.warn; + let warningMessage = null; + console.warn = (msg) => { + warningMessage = msg; + }; + try { + let result = addon.isFeatureEnabled('unknown-feature'); + assert.strictEqual(result, null, 'Expecting null for unknown feature'); + assert.ok( + warningMessage && + warningMessage.includes('Unknown feature "unknown-feature"'), + 'Should warn about unknown feature' + ); + } finally { + console.warn = originalWarn; + } + } + ); + QUnit.test( 'it can query the features with `isFeatureExplicitlySet`', (assert) => {