Skip to content

[SCF-2416] [Part 4] Require Node 20 and switch @embroider/util to a fork - #19

Open
Gaurav0 wants to merge 3 commits into
gaurav/chore/SCF-2416-part-3-build-depsfrom
gaurav/chore/SCF-2416-part-4-node-20-embroider-util-fork
Open

Gaurav0 wants to merge 3 commits into
gaurav/chore/SCF-2416-part-3-build-depsfrom
gaurav/chore/SCF-2416-part-4-node-20-embroider-util-fork

Conversation

@Gaurav0

@Gaurav0 Gaurav0 commented Nov 5, 2026 •

Copy link
Copy Markdown

Summary

Removes the last ember-cli-babel 7 path through @embroider/util. Upstream won't release util again.

  • ember-element-helper ^0.8.7, a v2 addon that no longer depends on @embroider/util. Same API.
  • Node 20 required. The util fork's dependency tree doesn't install on Node 18 with yarn v1 (pkg-entry-points 1.1.2, mktemp 2.x). engines.node, the README and CI move to Node 20, and the pkg-entry-points 1.1.1 resolution is dropped.
  • @embroider/util comes from Gaurav0/embroider-util#v1.13.5-scf.1. It's a fork of 1.13.5 whose only changes are in package.json: ember-cli-babel ^8.3.2, @embroider/macros >=1.19.7 <1.21.0, and Node >= 20.
    • The runtime files are byte-identical to 1.13.0–1.13.5, and it keeps the @embroider/util name. Embroider trusts ensure-safe-component by that name, so no templates change.
    • Unwrapping ensure-safe-component isn't an option for a v1 addon: Embroider would reject the 25 currying sites with "Unsafe dynamic component".
  • @embroider/macros moves to >=1.19.7 <1.21.0.
    • 1.18.1 fixed the lazy importSync that util relies on.
    • 1.19.7 is the first release that allows ember-cli-babel 8.
    • 1.21.0 became a v2 addon, which we're not taking yet.
    • A ~1.20.7 resolution keeps the dummy app on the same macros version consumers get.
  • New BsModal tests pass a curried (component "...") and a component class as @headerComponent and @bodyComponent.

+76/−11 lines, not counting yarn.lock.

Breaking changes (5.0.0 release notes)

  • Requires Node 20.
  • ember-bootstrap now has a git dependency, so installs fetch the util fork from GitHub. The fork moves to SeeClickFix/embroider-util before 5.0.0 is tagged.
  • Apps need @embroider/macros >= 1.18.1. Apps whose lockfile is older should run yarn upgrade @embroider/macros.

Stack

Part of the SCF-2416 work (ember-bootstrap 5.0.0), split from scf-2416-rework for easier review. This is part 4 of 9. Stacked on Part 3: its base is gaurav/chore/SCF-2416-part-3-build-deps, 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 this PR Require Node 20 and switch @embroider/util to a fork
5 #20 Replace ember-on-helper and ember-ref-bucket
6 #21 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

The fork is the main decision to review. The fork commit's message explains why it's needed and what was ruled out.

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 538 passed, 9 skipped and 0 failed. +4 BsModal tests. CI covers the ember-try matrix.

🤖 Generated with Claude Code

Gaurav0 and others added 3 commits November 5, 2026 09:02
0.8.7 is a v2 addon that no longer depends on @embroider/util. The
element helper's API is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The SeeClickFix @embroider/util fork requires Node >= 20, and its
dependency tree doesn't install on Node 18 with yarn v1:
pkg-entry-points 1.1.2 needs Node >= 20.19.5, and every mktemp 2.x
needs Node 20.

engines.node and the README move to Node 20, and CI runs on Node 20.

The pkg-entry-points 1.1.1 resolution only existed to keep installs
working on Node 16/18, so it's dropped and the lockfile moves to 1.1.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@embroider/util 1.13.1-1.13.5 depend on ember-cli-babel 7, which
pulls tmp 0.0.x and @babel/runtime 7.12 into every consumer install.
1.13.0 used ember-cli-babel 8, but 1.13.1 reverted that only to keep
Node 12 working, and util won't be released again upstream.

@embroider/util now comes from Gaurav0/embroider-util#v1.13.5-scf.1,
a fork of 1.13.5 whose only changes are in package.json:
ember-cli-babel ^8.3.2, @embroider/macros >=1.19.7 <1.21.0 and Node
>= 20. Its runtime files are byte-identical to 1.13.0-1.13.5, and it
keeps the @embroider/util name, so the ensure-safe-component helper
that Embroider trusts by name is unchanged and no templates change.
The fork moves to SeeClickFix/embroider-util before 5.0.0 is tagged.

Unwrapping ensure-safe-component instead isn't an option for a v1
addon: Embroider's compat resolver only accepts (component (X ...))
when X is component or ensure-safe-component, so the 25 currying
sites would fail with "Unsafe dynamic component".

@embroider/macros moves from ^1.8.3 to >=1.19.7 <1.21.0 and stays in
dependencies, since ember-cli only finds child addons there.
- 1.18.1 fixed lazy importSync, which util relies on.
- 1.19.7 is the first release that allows ember-cli-babel 8.
- 1.21.0 turned macros into a v2 addon, which we're not taking yet.

A ~1.20.7 resolution keeps dev dependencies from pulling a second
1.21.x copy, so the dummy app runs the macros version consumers get.

New BsModal tests pass a curried (component "...") and a component
class as @headerComponent (a currying site, onClose still reaches the
custom header) and @bodyComponent (a plain site).

Release notes: apps need @embroider/macros >= 1.18.1. Apps whose
lockfile is older should run `yarn upgrade @embroider/macros`.
ember-bootstrap now has a git dependency, so installs fetch the fork
from GitHub.

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