Update dependencies, build, and testing for Ink.
Review Request #14645 — Created Oct. 20, 2025 and updated
This change accomplishes several tasks towards unifying our JavaScript
build infrastructure and supported more modern node.js environments:
- Replace many specific dependencies with a new dependency on
@beanbag/js-buildkit. - Eliminate unused or obsolete dependencies.
- Base
tsconfig.jsonon our shared config. - Copy our customized
@types/backboneinto this source tree, rather
than referencing it fromnode_modules. I'm working on upstreaming
these changes so we don't have to ship our own at all. - Ship types as both
index.d.tsandindex.d.mts. - Update to Storybook 10.
- Update to ESLint 9.
This includes a few changes specifically related to Storybook:
- We no longer need to manually inject axe-playwright into the page,
since the a11y tests are now handled automatically. - Fixed the text-color assignment in theme.css, since there's actually
nothing called--ink-p-text-color. - Pinned the version of
@types/reactbecause@types/mdxuses older
names for things even when@mdx/reactseems fine.
Plus a few changes relating to fixing unit tests:
- Use
@babel/registerfor transpiling during jasmine testing rather
thants-node. It seems like thets-nodeone was broken on modern
node environments, and using babel instead keeps our unit tests
running in a much closer mode to how the code is built for packaging.
This required some massaging of our babel configuration to allow
slightly different plugin configurations between dev and test. - Import
MenuItemsRadioGroupastype MenuItemsRadioGroupin
menuItemModel.ts in order to prevent a circular dependency. - Use
this.constructorfor static member access insideMenuView, so
unit tests and the class itself aren't looking at different versions
of static members.
- Did a build.
- Ran unit tests.
- Ran storybook.
- Used this is a workspace with other packages that depend on it.
| Summary | ID |
|---|---|
| trtpqsmzywpuxzwoulstvmtyvnkkrwqz |
| Description | From | Last Updated |
|---|---|---|
|
This was intentionally set to help ensure tests weren't conflicting with each other in unexpected ways. |
|
- Change Summary:
-
- Resolve
@tabler/iconsto a real filesystem path wherever thenode_modulesdirectory lives. - Fix order of types/defaults in exports.
- Resolve
- Commits:
-
Summary ID nmnwwtolqqoksyvuzssvvksvsymlpxqz nmnwwtolqqoksyvuzssvvksvsymlpxqz
Checks run (2 succeeded)
- Change Summary:
-
Update eslint config for new plugin layout.
- Commits:
-
Summary ID nmnwwtolqqoksyvuzssvvksvsymlpxqz nmnwwtolqqoksyvuzssvvksvsymlpxqz
Checks run (2 succeeded)
- Change Summary:
-
- Merged with /r/14629/
- Updated to use the brand new Storybook 10
- Description:
-
This change accomplishes several tasks towards unifying our JavaScript
build infrastructure and supported more modern node.js environments: - Replace many specific dependencies with a new dependency on
@beanbag/js-buildkit.
- Eliminate unused or obsolete dependencies.
- Base
tsconfig.jsonon our shared config.
- Copy our customized
@types/backboneinto this source tree, rather
than referencing it fromnode_modules. I'm working on upstreaming
these changes so we don't have to ship our own at all.
- Ship types as both
index.d.tsandindex.d.mts.
~ - Update to ESLint 9.
~ - Update to Storybook 10.
+ - Update to ESLint 9.
+ + This includes a few changes specifically related to Storybook:
+ + - We no longer need to manually inject axe-playwright into the page,
since the a11y tests are now handled automatically.
+ - Fixed the text-color assignment in theme.css, since there's actually
nothing called--ink-p-text-color.
+ - Pinned the version of
@types/reactbecause@types/mdxuses older
names for things even when@mdx/reactseems fine.
Plus a few changes relating to fixing unit tests:
- Use
@babel/registerfor transpiling during jasmine testing rather
thants-node. It seems like thets-nodeone was broken on modern
node environments, and using babel instead keeps our unit tests
running in a much closer mode to how the code is built for packaging.
This required some massaging of our babel configuration to allow
slightly different plugin configurations between dev and test.
- Import
MenuItemsRadioGroupastype MenuItemsRadioGroupin
menuItemModel.ts in order to prevent a circular dependency.
- Use
this.constructorfor static member access insideMenuView, so
unit tests and the class itself aren't looking at different versions
of static members.
- Replace many specific dependencies with a new dependency on
- Commits:
-
Summary ID nmnwwtolqqoksyvuzssvvksvsymlpxqz trtpqsmzywpuxzwoulstvmtyvnkkrwqz
Checks run (2 succeeded)
-
This change does a whole lot of unrelated things (e.g., the menu/constructor fixes aren't related to the type fixes, the unit test fixes, etc). It's pretty hard to review correctly.
The main thing I want to be 100% sure of is that a build from before and after this change effectively looks the same. Some TypeScript options were removed, presumably due to newer defaults, but I don't want any surprises.
-
This was intentionally set to help ensure tests weren't conflicting with each other in unexpected ways.