Skip to content

[SCF-2416] [Part 6] Upgrade addon dependencies off ember-cli-babel 7 - #21

Open
Gaurav0 wants to merge 11 commits into
gaurav/chore/SCF-2416-part-5-replace-on-helper-and-ref-bucketfrom
gaurav/chore/SCF-2416-part-6-upgrade-addon-deps
Open

Gaurav0 wants to merge 11 commits into
gaurav/chore/SCF-2416-part-5-replace-on-helper-and-ref-bucketfrom
gaurav/chore/SCF-2416-part-6-upgrade-addon-deps

Conversation

@Gaurav0

@Gaurav0 Gaurav0 commented Nov 5, 2026 •

Copy link
Copy Markdown

Summary

Upgrades the remaining runtime addon dependencies to releases without ember-cli-babel 7, and puts Ember 4.12 back in CI.

  • ember-resolver ^11.0.1 and ember-cli-app-version ^6.0.1 (dummy app). They were the last @ember/string importers besides ember-style-modifier.
  • ember-style-modifier ^4.6.0, a v2 addon with no @ember/string import and no deprecated modifier API. {{style}} usage is unchanged.
  • Ember 4.12 is back in the CI matrix. Nothing in the tree imports @ember/string any more, which is what failed every test on 4.12.
  • ember-modifier 4 in the dummy app, deduplicated to a single 4.3.0. The peer range stays ^3.2.7 || ^4.0.0.
  • ember-popper-modifier ^4.1.1. Apps on ember-modifier 3 get a nested 4.x copy for popper.
  • @ember/render-modifiers ^4.0.0, a v2 addon. The pre-3.22 capabilities deprecation no longer fires, so its ignore entry is removed.
  • ember-render-helpers ^2.0.0. Its helpers only have suffixed names, so the 4 helper-form call sites move to {{did-insert-helper}} and {{did-update-helper}}. Not ^3, which requires Node 22.
  • ember-concurrency ^3.1.1 || ^4.0.0. Fresh installs get 4.x, and apps pinned to 3.x (e.g. for ember-power-select 6) stay in range. A new ember-concurrency-v3 scenario keeps 3.x tested.
  • @ember-decorators/component and @ember-decorators/object 7 replace the ember-decorators meta package. ember-auto-import only resolves packages ember-bootstrap lists directly.
  • tracked-toolbox ^3.0.0. Only @dedupeTracked is used, and it is unchanged.
  • New ember-modifier-v3 and glimmer-component-v2 scenarios cover the other end of each peer range. glimmer-component-v2 runs on Ember 4.12.

+57/−25 lines, not counting yarn.lock.

Breaking changes (5.0.0 release notes)

  • Apps that used the unsuffixed {{did-insert}}/{{did-update}}/{{will-destroy}} helpers through ember-bootstrap's dependency on ember-render-helpers need to depend on ember-render-helpers themselves. The modifiers of the same names come from @ember/render-modifiers and are unaffected.

Stack

Part of the SCF-2416 work (ember-bootstrap 5.0.0), split from scf-2416-rework for easier review. This is part 6 of 9. Stacked on Part 5: its base is gaurav/chore/SCF-2416-part-5-replace-on-helper-and-ref-bucket, so the diff only shows this part. Merge in order.

Part PR Title
1 #16 Drop Ember 3.28 and 4.4, bump to 5.0.0
2 #17 Upgrade test and lint tooling (ESLint 8, Prettier 3, ember-try 3, stylelint)
3 #18 Upgrade build dependencies and drop polyfills
4 #19 Require Node 20 and switch @embroider/util to a fork
5 #20 Replace ember-on-helper and ember-ref-bucket
6 this PR Upgrade addon dependencies off ember-cli-babel 7
7 #22 Keep Bootstrap 3 and subclassing, drop their deprecations
8 #23 ember-cli-update to the 5.4 addon blueprint
9 #24 Force and refresh remaining vulnerable dependencies

Review notes

Each commit is one dependency, with its breaking changes checked in the commit message. Code changes are limited to the render-helper renames (bs-modal, bs-popover, bs-tooltip) and the @ember-decorators/* imports.

Testing

Run on this branch with Node 20.19.6: yarn install --frozen-lockfile passes, yarn lint reports 0 errors (the same 150 warnings as scf_master), and ember test (Ember 4.8, the default) has 550 passed, 9 skipped and 0 failed. No new tests. CI covers the ember-try matrix.

🤖 Generated with Claude Code

Gaurav0 and others added 11 commits November 5, 2026 09:02
… to ^6.0.1

On Ember 4.12, importing @ember/string without having the package in
the project raises the ember-string.add-package deprecation, and
setupNoDeprecations turns it into a test failure. ember-bootstrap no
longer imports it, but the dummy app's ember-resolver 8.1.0 and
ember-cli-app-version 4.0.0 still do. Resolver 11 embeds the string
utils it needs, and app-version 6 no longer imports @ember/string.

Both are 5.4 addon blueprint versions. ember-resolver was held back
with ember-qunit and @ember/test-helpers until after the
ember-cli-update, but only ember-qunit 7+ actually needs ember-cli 5;
resolver 11 works on ember-cli 3.28 and needs ember-source ^4.8.3.
Its breaking changes (no Ember 3.x, no resolvers/classic path, no
container-debug-adapter initializer) don't affect the dummy app.

The remaining @ember/string importer is ember-style-modifier 0.7.0,
upgraded next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-style-modifier 0.7.0 depends on ember-cli-babel 7, imports
dasherize from @ember/string (deprecated on Ember 4.12 unless the app
installs @ember/string), and uses the class-based ember-modifier API
that ember-modifier 3.2.7 deprecates.

4.6.0 is a v2 addon that has none of those, and it accepts
ember-modifier ^3.2.7 || ^4.0.0, matching ember-bootstrap's peer
range. {{style}} keeps the same positional-hash and named-argument
forms, so templates are unchanged. The ember-modifier deprecation
warnings the dummy app's test run used to print are gone.

It was the last package in the dummy app's tree importing
@ember/string.

4.6.0 declares engines.pnpm, which yarn v1 reports as a warning only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-lts-4.12 was commented out of the CI matrix because Ember 4.12
deprecates importing @ember/string when the app doesn't install it
(emberjs/ember.js#20377), and setupNoDeprecations fails every test on
it. Nothing in the dummy app's tree imports @ember/string any more:
ember-bootstrap's own import went with @ember/string, and the last
importers were ember-resolver 8, ember-cli-app-version 4 and
ember-style-modifier 0.7.

The scenario also drops its `env: { FAIL_ON_DEPRECATION: false }`,
which was added for that deprecation but never read by anything.

Partners runs Ember 4.12. Locally, BOOTSTRAPVERSION=4 ember try:one
ember-lts-4.12 runs 554 tests with 0 failures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-modifier is a peer dependency with the range ^3.2.7 || ^4.0.0,
so this only moves the dummy app's own copy: the devDependency goes to
^4.3.0 and the "ember-modifier": "^3.2.7" resolution, which forced
every requester onto 3.2.7, is removed.

The lockfile is deduplicated to a single ember-modifier 4.3.0, so
ember-bootstrap's track* modifiers, ember-style-modifier and
ember-popper-modifier all run against 4.x here. 3.2.7's ember-cli-babel
7 and ember-cli-typescript 5 subtree is gone with it.

ember-bootstrap only uses the function-based modifier() API, which v4
keeps, so no code changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-popper-modifier 3.0.0 depends on ember-cli-babel 7. 4.x is on
ember-cli-babel 8, and its breaking changes are all ones 5.0.0 already
meets: Ember >= 4.8, ember-modifier 4 (it depends on ^4.0.0 itself, so
apps that stay on ember-modifier 3 get a nested 4.x copy for popper)
and no classic optional features.

{{popper-tooltip}} takes the same positional reference element and
options, so templates are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ember/render-modifiers 2.1.0 depends on ember-cli-babel 7 and
ember-modifier-manager-polyfill, which in turn pulls in another
ember-cli-babel 7 and ember-cli-version-checker 2. 4.0.0 is a v2 addon
that depends only on @embroider/addon-shim.

{{did-insert}}, {{did-update}} and {{will-destroy}} keep the same
arguments and timing; the managers now declare 3.22 capabilities, so
the "modifier manager capabilities prior to 3.22" deprecation that
setupNoDeprecations ignored no longer fires and the ignore entry is
removed.

4.0.0's README lists Ember 4.12 as its minimum, but it declares no
ember-source peer, and the full suite passes on Ember 4.8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-render-helpers was pinned to exactly 0.2.0 because 0.2.1
deprecated the {{did-insert}}/{{did-update}}/{{will-destroy}} helper
names, which clash with the @ember/render-modifiers modifiers of the
same names. 0.2.0 depends on ember-cli-babel 7.

2.0.0 is a v2 addon with only the suffixed names, so the four
helper-form call sites move to {{did-insert-helper}} and
{{did-update-helper}} (bs-modal, bs-popover, bs-tooltip). The helpers'
behaviour is unchanged: did-insert-helper still runs once on first
compute, did-update-helper skips the first compute, and both call the
callback with (positional, named). The modifier-form {{did-insert}} and
{{did-update}} on elements still come from @ember/render-modifiers.

Not ^3: it requires Node 22. 2.0.0 accepts Node 20.

Apps that used the unsuffixed helper names through ember-bootstrap's
dependency need to depend on ember-render-helpers themselves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-concurrency was still declared as ^2.1.2. 2.x and 3.x depend on
ember-cli-babel 7; 4.x is a v2 addon without it, so fresh installs now
get 4.x (4.0.6 here). Apps that pin 3.x for their own code or for
ember-power-select 6, like partners, stay in range instead of
overriding it.

bs-carousel is the only user, with task(function* () {}) plus
.restartable()/.drop(), which 4.x still supports. 4.0.0's one breaking
change, registering the async-arrow Babel transform, only applies to
async-arrow tasks. Not ^5: 5.0.0 removes task(function* () {}) and the
decorator APIs.

A new ember-concurrency-v3 ember-try scenario, run in CI on Bootstrap
3, keeps the 3.x path tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd @ember-decorators/object 7

ember-decorators 6 and its @ember-decorators/* packages depend on
ember-cli-babel 7. 7.0.0 turns all of them into v2 addons, and the
ember-decorators meta package no longer makes the individual packages
available to its importers (ember-decorators#511). ember-auto-import
only resolves imports of packages that ember-bootstrap itself lists,
so the 29 tagName imports from @ember-decorators/component and the 3
observes imports from @ember-decorators/object need those packages as
direct dependencies.

Both decorators keep the same API, so no code changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tracked-toolbox 1.3.0 depends on ember-cli-babel 7 and
ember-cache-primitive-polyfill (another ember-cli-babel 7). 2.0.0
converted it to a v2 addon and 3.0.0 dropped the polyfill, which Ember
4.8 doesn't need.

ember-bootstrap only uses @dedupeTracked (bs-form/element), which
neither major changed. The breaking changes were the removed localCopy
memo-function variant, Node versions and the polyfill.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-modifier and @glimmer/component are peer dependencies with
ranges wider than what the dummy app installs, so two scenarios cover
the other end of each, and CI runs them:

- ember-modifier-v3 (Bootstrap 3): ember-modifier ^3.2.7, which is
  what partners runs. The track* modifiers and ember-style-modifier
  resolve 3.2.7, while ember-popper-modifier 4 keeps its own 4.x copy.
  setupNoDeprecations turns ember-modifier 3's function-based-options
  deprecation into a failure, so this also checks { eager: false }.
- glimmer-component-v2 (Bootstrap 4): @glimmer/component ^2.0.0, which
  the peer range allows. 2.x imports @ember/owner, which needs Ember
  4.10, so this scenario runs on Ember 4.12; Ember 4.8 apps stay on
  @glimmer/component 1.x.

ember-concurrency-v3 already landed with the ember-concurrency range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant