Skip to content

Commit

Permalink
[FEATURE modernized-built-in-components] Start adding deprecations
Browse files Browse the repository at this point in the history
This implements some of the deprecations proposed in [RFC #671][1].
The deprecations are gated behind the feature flag so they won't be
visible until the RFC is merged and the feature is enabled.

[1]: emberjs/rfcs#671
  • Loading branch information
chancancode committed Oct 5, 2020
1 parent 4b58d27 commit 8c3c1d7
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 10 deletions.
44 changes: 39 additions & 5 deletions packages/ember/index.js
Expand Up @@ -15,6 +15,7 @@ import {
EMBER_GLIMMER_SET_COMPONENT_TEMPLATE,
EMBER_CACHE_API,
EMBER_DESTROYABLES,
EMBER_MODERNIZED_BUILT_IN_COMPONENTS,
} from '@ember/canary-features';
import * as EmberDebug from '@ember/debug';
import { assert, captureRenderTree, deprecate } from '@ember/debug';
Expand Down Expand Up @@ -554,10 +555,44 @@ Object.defineProperty(Ember, 'BOOTED', {
Ember.Component = Component;
Helper.helper = helper;
Ember.Helper = Helper;
Ember.Checkbox = Checkbox;
Ember.TextField = TextField;
Ember.TextArea = TextArea;
Ember.LinkComponent = LinkComponent;
if (EMBER_MODERNIZED_BUILT_IN_COMPONENTS) {
[
['Checkbox', '@ember/component/checkbox', Checkbox],
['TextField', '@ember/component/text-field', TextField],
['TextArea', '@ember/component/text-area', TextArea],
['LinkComponent', '@ember/routing/link-component', LinkComponent],
['TextSupport', '@ember/-internals/views', views.TextSupport],
].forEach(([name, path, value]) => {
Object.defineProperty(Ember, name, {
get() {
deprecate(
`Using Ember.${name} or importing from '${path}' has been deprecated, install the ` +
`\`ember-legacy-built-in-components\` addon and use \`import { ${name} } from ` +
`'ember-legacy-built-in-components';\` instead`,
false,
{
id: 'ember.legacy-built-in-components',
until: '4.0.0',
}
);

return value;
},

configurable: true,
enumerable: true,
});

// Expose a non-deprecated version for tests and the ember-legacy-built-in-components addon
Ember[`_Legacy${name}`] = value;
});
} else {
Ember.Checkbox = Checkbox;
Ember.TextField = TextField;
Ember.TextArea = TextArea;
Ember.LinkComponent = LinkComponent;
Ember.TextSupport = views.TextSupport;
}
Ember._setComponentManager = setComponentManager;
Ember._componentManagerCapabilities = capabilities;
Ember._setModifierManager = setModifierManager;
Expand Down Expand Up @@ -652,7 +687,6 @@ Ember.ViewUtils = {
getChildViews: views.getChildViews,
isSerializationFirstNode: isSerializationFirstNode,
};
Ember.TextSupport = views.TextSupport;
Ember.ComponentLookup = views.ComponentLookup;
Ember.EventDispatcher = views.EventDispatcher;

Expand Down
53 changes: 48 additions & 5 deletions packages/ember/tests/reexports_test.js
@@ -1,9 +1,11 @@
import Ember from '../index';
import require from 'require';
import {
FEATURES,
EMBER_GLIMMER_HELPER_MANAGER,
EMBER_GLIMMER_INVOKE_HELPER,
EMBER_GLIMMER_SET_COMPONENT_TEMPLATE,
EMBER_MODERNIZED_BUILT_IN_COMPONENTS,
} from '@ember/canary-features';
import { confirmExport } from 'internal-test-helpers';
import { moduleFor, AbstractTestCase } from 'internal-test-helpers';
Expand All @@ -26,6 +28,47 @@ moduleFor(
});
}

['@feature(EMBER_MODERNIZED_BUILT_IN_COMPONENTS) deprecated built-in components'](assert) {
[
['Checkbox', '@ember/component/checkbox', '@ember/-internals/glimmer'],
['TextField', '@ember/component/text-field', '@ember/-internals/glimmer'],
['TextArea', '@ember/component/text-area', '@ember/-internals/glimmer'],
['LinkComponent', '@ember/routing/link-component', '@ember/-internals/glimmer'],
['TextSupport', '@ember/-internals/views', '@ember/-internals/views'],
].forEach(([name, publicPath, privatePath]) => {
// loosely based on confirmExport
try {
let module = require(privatePath);
let value = module[name];

assert.ok(
Object.prototype.hasOwnProperty.call(Ember, name),
`the ${name} property exists on the Ember global`
);

assert.strictEqual(
Ember[`_Legacy${name}`],
value,
`Ember._Legacy${name} has the correct value and does not trigger a deprecation`
);

expectDeprecation(() => {
assert.strictEqual(
Ember[name],
value,
`Ember.${name} has the correct value triggers a deprecation`
);
}, `Using Ember.${name} or importing from '${publicPath}' has been deprecated, install the \`ember-legacy-built-in-components\` addon and use \`import { ${name} } from 'ember-legacy-built-in-components';\` instead`);
} catch (error) {
assert.pushResult({
result: false,
message: `An error occurred while testing ${name} is exported from ${privatePath}.`,
source: error,
});
}
});
}

['@test Ember.String.isHTMLSafe exports correctly'](assert) {
confirmExport(Ember, assert, 'String.isHTMLSafe', '@ember/-internals/glimmer', 'isHTMLSafe');
}
Expand Down Expand Up @@ -203,18 +246,18 @@ let allExports = [
['ViewUtils.getRootViews', '@ember/-internals/views', 'getRootViews'],
['ViewUtils.getChildViews', '@ember/-internals/views', 'getChildViews'],
['ViewUtils.isSerializationFirstNode', '@ember/-internals/glimmer', 'isSerializationFirstNode'],
['TextSupport', '@ember/-internals/views'],
EMBER_MODERNIZED_BUILT_IN_COMPONENTS ? null : ['TextSupport', '@ember/-internals/views'],
['ComponentLookup', '@ember/-internals/views'],
['EventDispatcher', '@ember/-internals/views'],

// @ember/-internals/glimmer
['Component', '@ember/-internals/glimmer', 'Component'],
['Helper', '@ember/-internals/glimmer', 'Helper'],
['Helper.helper', '@ember/-internals/glimmer', 'helper'],
['Checkbox', '@ember/-internals/glimmer', 'Checkbox'],
['LinkComponent', '@ember/-internals/glimmer', 'LinkComponent'],
['TextArea', '@ember/-internals/glimmer', 'TextArea'],
['TextField', '@ember/-internals/glimmer', 'TextField'],
EMBER_MODERNIZED_BUILT_IN_COMPONENTS ? null : ['Checkbox', '@ember/-internals/glimmer'],
EMBER_MODERNIZED_BUILT_IN_COMPONENTS ? null : ['LinkComponent', '@ember/-internals/glimmer'],
EMBER_MODERNIZED_BUILT_IN_COMPONENTS ? null : ['TextArea', '@ember/-internals/glimmer'],
EMBER_MODERNIZED_BUILT_IN_COMPONENTS ? null : ['TextField', '@ember/-internals/glimmer'],
['TEMPLATES', '@ember/-internals/glimmer', { get: 'getTemplates', set: 'setTemplates' }],
['Handlebars.template', '@ember/-internals/glimmer', 'template'],
['HTMLBars.template', '@ember/-internals/glimmer', 'template'],
Expand Down

0 comments on commit 8c3c1d7

Please sign in to comment.