emberjs/ember.js · error · Error
The API deprecated by ${options.id} was removed in ember-sou
Error message
The API deprecated by ${options.id} was removed in ember-source ${options.until}. The message was: ${message}. Please see ${options.url} for more details. What it means
deprecateUntil throws when the deprecation being reported has already passed its removal version (isRemoved true) in ember-source. Ember hard-errors instead of warning so that code relying on removed APIs is unmistakable.
Source
Thrown at packages/@ember/-internals/deprecations/index.ts:152
url: 'https://deprecations.emberjs.com/id/deprecate-evented',
}),
DEPRECATE_MIXINS: deprecation({
id: 'deprecate-mixins',
for: 'ember-source',
since: { available: '7.4.0' },
until: '8.0.0',
url: 'https://deprecations.emberjs.com/id/deprecate-mixins',
}),
};
export function deprecateUntil(message: string, deprecation: DeprecationObject) {
const { options } = deprecation;
assert(
'deprecateUntil must only be called for ember-source',
Boolean(options.for === 'ember-source')
);
if (deprecation.isRemoved) {
throw new Error(
`The API deprecated by ${options.id} was removed in ember-source ${options.until}. The message was: ${message}. Please see ${options.url} for more details.`
);
}
deprecate(message, deprecation.test, options);
}
View on GitHub (pinned to 26f97246a8)
Solutions
- Stop using the removed API named in the message (id + url explain the replacement)
- Update the addon producing the deprecation to a version compatible with your ember-source
- If you own the deprecateUntil call, bump/remove the deprecation entry since isRemoved is now true
Example fix
// before
Evented.extend({ didInsertElement() { this.trigger('initialized'); } });
// after
// use the replacement API from the deprecation url (e.g. modifiers/lifecycle hooks without Evented) Defensive patterns
Strategy: try-catch
Validate before calling
// check your ember-source version against the deprecation's `until`
import { VERSION } from '@ember/version';
if (compare(VERSION, '5.0.0') >= 0) stopUsingRemovedApi(); Try / catch
try { eventedApi(); } catch (e) { if (String(e.message).startsWith('The API deprecated by') && e.message.includes('was removed')) migrateToReplacement(); else throw e; } Prevention
- Act on deprecation warnings before the until version
- Keep addons updated in lockstep with ember-source
- Audit deprecation ids in CI (silence none permanently)
- Read the deprecation url for the documented replacement
When it happens
Trigger: Calling any still-live code path wired to a removed deprecation id — e.g. evented API calls (eventedOn/eventedOne/eventedTrigger/eventedOff) or addons calling deprecateUntil with an id/until that has been reached.
Common situations: Upgrading ember-source past an addon's supported version; pinning code that used a deprecated evented mixin API; addon not updated when the deprecation's until version arrived.
Related errors
- A resolved helper cannot be passed as a named argument as th
- deprecation override for ${id} not found
- ${formatMessage(message)}
- Cannot call `.lookup('${fullName}')` after the owner has bee
- Cannot call `.factoryFor('${fullName}')` after the owner has
AI-assisted analysis of emberjs/ember.js@26f97246a8 (2026-09-01).
Data as JSON: /api/errors/c4fed32bfed5d65c.
Report an issue: GitHub.