![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
babel-plugin-globalize-symbols
Advanced tools
Transform Symbol() calls to add to the global registry.
Transform Symbol()
calls to add to the global Symbol registry.
Disclaimer: This is an experiment.
npm install --save-dev babel-plugin-globalize-symbols
Run:
babel --plugins globalize-symbols script.js
Or add the plugin to your .babelrc
configuration:
{
"plugins": ["globalize-symbols"]
}
This plugin will transform the following code:
const RED = Symbol('red');
into:
const RED = Symbol.for('' + 'red' + '540ddd7da3ec634279bbff574b040782');
where the hash is unique to the module the symbol is defined in.
Symbols are really cool but when you use the Symbol()
function to create them,
they have some issues:
To address this, we can use Symbol.for()
to create and retrieve Symbols from a
global registry. Every time you call it with the same argument, you'll get the
same symbol. These symbols can be serialized (using Symbol.keyFor
) and
deserialized (again, using Symbol.for
). But it places the onus back on the
developer to guarantee uniqueness, which is a big part of the reason why we were
using Symbols in the first place!
The point of this plugin is to help you create unique Symbols that don't suffer
from the normal problems. To accomplish this, it transforms Symbol()
calls
into Symbol.for()
calls, but adds a hash to the key that it derives from the
package and module in which it's defined. That means Symbol('red')
in
pkg/a.js
will always be the same as Symbol('red')
in pkg/a.js
—regardless
of the frame that loaded it or how many times the module was reloaded—but will
never be the same as Symbol('red')
in other/a.js
.
This project is an experiment and I'm still thinking about it. One drawback is
that it subtly changes the semantics of Symbol()
, which might result in
surprising behavior. It might be better to encourage authors to always use
Symbol.for()
with a free variable and use build time transforms to replace
that; for example Symbol.for('red' + __MODULE_HASH__)
.
FAQs
Transform Symbol() calls to add to the global registry.
We found that babel-plugin-globalize-symbols demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.