diff --git a/packages/netlify-cms-core/src/lib/__tests__/registry.spec.js b/packages/netlify-cms-core/src/lib/__tests__/registry.spec.js index 92d8a83c..6e8f5690 100644 --- a/packages/netlify-cms-core/src/lib/__tests__/registry.spec.js +++ b/packages/netlify-cms-core/src/lib/__tests__/registry.spec.js @@ -147,4 +147,26 @@ describe('registry', () => { }); }); }); + + describe('getWidget', () => { + it('should throw on missing widget', () => { + const { getWidget } = require('../registry'); + + expect(() => getWidget('Unknown')).toThrow( + new Error( + `Could not find widget 'Unknown'. Please make sure the widget name is configured correctly or register it via 'registerwidget'.`, + ), + ); + }); + + it('should throw on missing widget and suggest lowercase name', () => { + const { getWidget, registerWidget } = require('../registry'); + + registerWidget('string', {}); + + expect(() => getWidget('String')).toThrow( + new Error(`Could not find widget 'String'. Did you mean 'string'?`), + ); + }); + }); }); diff --git a/packages/netlify-cms-core/src/lib/registry.js b/packages/netlify-cms-core/src/lib/registry.js index 53ee4bb8..eed8c150 100644 --- a/packages/netlify-cms-core/src/lib/registry.js +++ b/packages/netlify-cms-core/src/lib/registry.js @@ -113,7 +113,16 @@ export function registerWidget(name, control, preview) { } } export function getWidget(name) { - return registry.widgets[name]; + const widget = registry.widgets[name]; + if (!widget) { + const nameLowerCase = name.toLowerCase(); + const hasLowerCase = !!registry.widgets[nameLowerCase]; + const message = hasLowerCase + ? `Could not find widget '${name}'. Did you mean '${nameLowerCase}'?` + : `Could not find widget '${name}'. Please make sure the widget name is configured correctly or register it via 'registerwidget'.`; + throw new Error(message); + } + return widget; } export function getWidgets() { return produce(Object.entries(registry.widgets), draft => {