From f5a1cb99e5d9303b1e12b8375fe0ec34d7ab6c89 Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Fri, 17 Nov 2023 23:22:08 -0800 Subject: [PATCH] [BUGFIX beta] Deprecate outlet `TemplateFactory` support Backport of #20577 --- .../-internals/glimmer/lib/syntax/outlet.ts | 32 ++++++++++++++++++- .../ember/tests/ember-test-helpers-test.js | 4 +++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/@ember/-internals/glimmer/lib/syntax/outlet.ts b/packages/@ember/-internals/glimmer/lib/syntax/outlet.ts index 682fac47a01..6cdf4de6b6a 100644 --- a/packages/@ember/-internals/glimmer/lib/syntax/outlet.ts +++ b/packages/@ember/-internals/glimmer/lib/syntax/outlet.ts @@ -1,5 +1,5 @@ import type { InternalOwner } from '@ember/-internals/owner'; -import { assert } from '@ember/debug'; +import { assert, deprecate } from '@ember/debug'; import { DEBUG } from '@glimmer/env'; import type { CapturedArguments, DynamicScope } from '@glimmer/interfaces'; import { CurriedType } from '@glimmer/interfaces'; @@ -124,6 +124,36 @@ function stateFor(ref: Reference, outlet: OutletState | undefined): OutletDefini // and is no longer considered supported if (isTemplateFactory(template)) { template = template(render.owner); + + if (DEBUG) { + let message = + 'The `template` property of `OutletState` should be a ' + + '`Template` rather than a `TemplateFactory`. This is known to be a ' + + "problem in older versions of `@ember/test-helpers`. If you haven't " + + 'done so already, try upgrading to the latest version.\n\n'; + + if (template.result === 'ok' && typeof template.moduleName === 'string') { + message += + 'The offending template has a moduleName `' + + template.moduleName + + '`, which might be helpful for identifying ' + + 'source of this issue.\n\n'; + } + + message += + 'Please note that `OutletState` is a private API in Ember.js ' + + "and not meant to be used outside of the framework's internal code."; + + deprecate(message, false, { + id: 'outlet-state-template-factory', + until: '5.9.0', + for: 'ember-source', + since: { + available: '5.5.0', + enabled: '5.5.0', + }, + }); + } } return { diff --git a/packages/ember/tests/ember-test-helpers-test.js b/packages/ember/tests/ember-test-helpers-test.js index f3e6ce6c747..92a5442399d 100644 --- a/packages/ember/tests/ember-test-helpers-test.js +++ b/packages/ember/tests/ember-test-helpers-test.js @@ -110,6 +110,10 @@ module('@ember/test-helpers emulation test', function () { module('setupRenderingContext', function (hooks) { hooks.beforeEach(async function () { + expectDeprecation( + /The `template` property of `OutletState` should be a `Template` rather than a `TemplateFactory`/ + ); + this.application = Application.create({ rootElement: '#qunit-fixture', autoboot: false,