diff --git a/packages/ember/index.js b/packages/ember/index.js index 9a5c4cce448..24dff7aeccf 100644 --- a/packages/ember/index.js +++ b/packages/ember/index.js @@ -651,8 +651,36 @@ if (ENV.EXTEND_PROTOTYPES.String) { return htmlSafe(this); }; } -Ember.String.htmlSafe = htmlSafe; -Ember.String.isHTMLSafe = isHTMLSafe; +const deprecateImportFromString = function ( + name, + message = `Importing ${name} from '@ember/string' is deprecated. Please import ${name} from '@ember/template' instead.` +) { + deprecate(message, false, { + id: 'ember-string.htmlsafe-ishtmlsafe', + for: 'ember-source', + since: { + enabled: '3.25', + }, + until: '4.0.0', + url: 'https://deprecations.emberjs.com/v3.x/#toc_ember-string-htmlsafe-ishtmlsafe', + }); +}; +Object.defineProperty(Ember.String, 'htmlSafe', { + enumerable: true, + configurable: true, + get() { + deprecateImportFromString('htmlSafe'); + return htmlSafe; + }, +}); +Object.defineProperty(Ember.String, 'isHTMLSafe', { + enumerable: true, + configurable: true, + get() { + deprecateImportFromString('isHTMLSafe'); + return isHTMLSafe; + }, +}); /** Global hash of shared templates. This will automatically be populated diff --git a/packages/ember/tests/reexports_test.js b/packages/ember/tests/reexports_test.js index 55e67962571..9e072eac926 100644 --- a/packages/ember/tests/reexports_test.js +++ b/packages/ember/tests/reexports_test.js @@ -68,8 +68,28 @@ moduleFor( }); } - ['@test Ember.String.isHTMLSafe exports correctly'](assert) { - confirmExport(Ember, assert, 'String.isHTMLSafe', '@ember/-internals/glimmer', 'isHTMLSafe'); + ['@test Ember.String.htmlSafe exports correctly (but deprecated)'](assert) { + let glimmer = require('@ember/-internals/glimmer'); + expectDeprecation(() => { + assert.equal( + Ember.String.htmlSafe, + glimmer.htmlSafe, + 'Ember.String.htmlSafe is exported correctly' + ); + }, /Importing htmlSafe from '@ember\/string' is deprecated/); + assert.notEqual(glimmer.htmlSafe, undefined, 'Ember.String.htmlSafe is not `undefined`'); + } + + ['@test Ember.String.isHTMLSafe exports correctly (but deprecated)'](assert) { + let glimmer = require('@ember/-internals/glimmer'); + expectDeprecation(() => { + assert.equal( + Ember.String.isHTMLSafe, + glimmer.isHTMLSafe, + 'Ember.String.isHTMLSafe is exported correctly' + ); + }, /Importing isHTMLSafe from '@ember\/string' is deprecated/); + assert.notEqual(glimmer.isHTMLSafe, undefined, 'Ember.String.isHTMLSafe is not `undefined`'); } ['@test Ember.EXTEND_PROTOTYPES is present (but deprecated)'](assert) { @@ -270,7 +290,6 @@ let allExports = [ ['Handlebars.template', '@ember/-internals/glimmer', 'template'], ['HTMLBars.template', '@ember/-internals/glimmer', 'template'], ['Handlebars.Utils.escapeExpression', '@ember/-internals/glimmer', 'escapeExpression'], - ['String.htmlSafe', '@ember/-internals/glimmer', 'htmlSafe'], ['_setComponentManager', '@ember/-internals/glimmer', 'setComponentManager'], ['_componentManagerCapabilities', '@glimmer/manager', 'componentCapabilities'], ['_setComponentTemplate', '@glimmer/manager', 'setComponentTemplate'],