Releases: albertogasparin/react-magnetic-di
Releases · albertogasparin/react-magnetic-di
v3.2.3
v3.2.2
Bug fix
- Avoid unused error
cause
to be garbage collected too early
v3.2.1
- Fix default export identifier missing with recent Babel update
v3.2.0
New features
- Add ability to mock (and auto-mock) modules via
jest.mock
Improvements
- Improve runtime performance by avoiding unnecessary arrays
v3.1.4
Bug fixes
- Fix computed properties being renamed and throwing errors
v3.1.3
Bug fixes
- Handle temporal deadzone for local variables shadowing parent function by @theKashey
v3.1.2
Bugfix
- Ensure global injectables are cleaned up on render error
v3.1.0
New features
- Added
global
prop toDiProvider
that allows alluse
replacements to be available during the lifetime of the provider - Added
global
option toinjectable(dep, mock, options)
that allows a replacement to be available during the lifetime of the provider
v3.0.1
Bugfix
- Fixed a bug when using Babel plugin in conjunction CommonJS babel transform, with multiple di locations not working
v3.0.0
New features
This new version of react-magnetic-di
comes with tons of goodies!
- Automatic injection. Until now,
di()
needed to be called in every function to enable injection and, moreover, it needed to contain all the values allowed for injection. It was a safe strategy but it was suboptimal. This version ofmagnetic-di
enables injection withoutdi()
- Support for injecting anywhere. While the pkg name is still referencing React, this version exposes
runWithDi
which enables replacement in any context - Injectable level targeting. With the new option
injectable(A,B, { target: C })
you can replace a dependency only in a particular function scope. - New ESLint rule
no-restricted-injectable
. Allows to warn/error about dangerous injectable patterns (eg on very commonly used dependencies)
Breaking changes
- No more
babel-plugin-macro
support, asdi()
is now implicit - Removed
exhaustive-inject
ESLint rule as no longer needed - Change in Babel configuration
Migration from v2
The most substantial change is the different Babel plugin configuration. To facilitate the migration, you can maintain the previous behaviour by excluding all files from auto injection:
// In your .babelrc / babel.config.js
// ... other stuff like presets
plugins: [
// ...
['react-magnetic-di/babel-plugin', { exclude: [/.*/], enabledEnvs: ['development', 'test'] }],
],
Then, you can start excluding less from auto injection, only leaving test and mock files (we recommend it, to reduce chances of loops due to injectables injecting themselves). In case you hit an issue with auto di, you can opt out in a specific function by adding the magic comment // di-ignore