Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-hot-loader

Package Overview
Dependencies
Maintainers
6
Versions
180
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-hot-loader - npm Package Compare versions

Comparing version 4.12.21 to 4.13.0

13

CHANGELOG.md

@@ -5,2 +5,15 @@ # Changelog

## [4.13.0](https://github.com/gaearon/react-hot-loader/compare/v4.12.20...v4.13.0) (2020-09-22)
### Bug Fixes
* tailUpdate might be blocked by a PureComponent ([#1448](https://github.com/gaearon/react-hot-loader/issues/1448)) ([e44103a](https://github.com/gaearon/react-hot-loader/commit/e44103a))
* when module.hot is not truthy ([#1451](https://github.com/gaearon/react-hot-loader/issues/1451)) ([ec3447f](https://github.com/gaearon/react-hot-loader/commit/ec3447f))
### Features
* support React 17 ([#1557](https://github.com/gaearon/react-hot-loader/issues/1557)) ([c05396b](https://github.com/gaearon/react-hot-loader/commit/c05396b)), closes [#1425](https://github.com/gaearon/react-hot-loader/issues/1425)
### [4.12.21](https://github.com/gaearon/react-hot-loader/compare/v4.12.20...v4.12.21) (2020-04-30)

@@ -7,0 +20,0 @@

4

dist/webpack.development.js

@@ -56,2 +56,6 @@ 'use strict';

'17.0.0-rc1': ['function createFiberFromTypeAndProps(type, // React$ElementType\n' + 'key, pendingProps, owner, mode, lanes) {', 'function createFiberFromTypeAndProps(type, // React$ElementType\n' + 'key, pendingProps, owner, mode, lanes) {type = hotResolveType(type);'],
'17.0.0-rc1-compact': ['function createFiberFromTypeAndProps(type,// React$ElementType\n' + 'key,pendingProps,owner,mode,lanes){', 'function createFiberFromTypeAndProps(type,// React$ElementType\n' + 'key,pendingProps,owner,mode,lanes){type = hotResolveType(type);'],
'16.8-type': ['function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {', 'function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {type = hotResolveType(type);'],

@@ -58,0 +62,0 @@

2

dist/webpack.production.min.js

@@ -1,1 +0,1 @@

"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var sourceMap=_interopDefault(require("source-map")),fs=_interopDefault(require("fs")),path=_interopDefault(require("path")),loaderUtils=_interopDefault(require("loader-utils")),SourceMapGenerator=sourceMap.SourceMapGenerator;function makeIdentitySourceMap(e,t){var n=new SourceMapGenerator;return n.setSourceContent(t,e),e.split("\n").forEach(function(e,o){n.addMapping({source:t,original:{line:o+1,column:0},generated:{line:o+1,column:0}})}),n.toJSON()}var makeIdentitySourceMap_1=makeIdentitySourceMap,injectionStart={16.13:["isCompatibleFamilyForHotReloading(child, element)","hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type)"],"16.10":["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element)))","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],16.9:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type || (\n // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element)))","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],16.6:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type)","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],"16.6-compact":["if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:child.elementType===element.type)","if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:hotCompareElements(child.elementType,element.type, hotUpdateChild(child), child.type))"],16.4:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.type === element.type) {","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.type, element.type, hotUpdateChild(child), child.type)) {"],"16.4-compact":["if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:child.type===element.type)","if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:hotCompareElements(child.type,element.type, hotUpdateChild(child), child.type))"]},additional={"16.13-update":["isCompatibleFamilyForHotReloading(current, element)","hotCompareElements(current.elementType, element.type, hotUpdateChild(current), current.type)"],"16.10-update":["current$$1.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current$$1, element)))","(hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1), current$$1.type)))"],"16.9-update":["current$$1.elementType === element.type || (\n // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current$$1, element)))","(hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1), current$$1.type)))"],"16.6-update":["if (current$$1 !== null && current$$1.elementType === element.type) {","if (current$$1 !== null && hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1),current$$1.type)) {"],"16.6-update-compact":["if(current$$1!==null&&current$$1.elementType===element.type)","if(current$$1!==null&&hotCompareElements(current$$1.elementType,element.type,hotUpdateChild(current$$1),current$$1.type))"],"16.4-update":["if (current !== null && current.type === element.type) {","if (current !== null && hotCompareElements(current.type, element.type, hotUpdateChild(current),current.type)) {"],"16.4-update-compact":["if (current!== null&&current.type===element.type)","if (current!== null&&hotCompareElements(current.type,element.type,hotUpdateChild(current)))"],"16.8-type":["function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {","function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {type = hotResolveType(type);"],"16.8-type-compact":["function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,expirationTime){","function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,expirationTime){type = hotResolveType(type);"]},reactHotLoaderCode="\nvar hotUpdateChild = function (child) {\n return function (newType) {\n child.type = newType;\n if (child.alternate) {\n child.alternate.type = newType;\n }\n }\n};\nvar hotResolveType = function (type) {\n return type;\n};\nvar hotCompareElements = function (oldType, newType) {\n return oldType === newType\n};\nvar hotCleanupHooks = function () {\n if (typeof resetHooks !== 'undefined') {\n resetHooks();\n }\n}\n\nvar evalInReactContext = function (injection) {\n return eval(injection);\n};\nvar hotCleanup = hotCleanupHooks;\nvar hotRenderWithHooks = function (current, render) {\n hotCleanupHooks();\n\n if (typeof nextCurrentHook !== 'undefined' && typeof ReactCurrentDispatcher$1 !== 'undefined') {\n nextCurrentHook = current !== null ? current.memoizedState : null;\n if (typeof firstCurrentHook !== 'undefined') {\n firstCurrentHook = nextCurrentHook;\n }\n\n ReactCurrentDispatcher$1.current = nextCurrentHook === null ? HooksDispatcherOnMountInDEV : HooksDispatcherOnUpdateInDEV;\n }\n\n var rendered = render();\n\n hotCleanupHooks();\n\n return rendered;\n}\nvar setHotElementComparator = function (newComparator) {\n hotCompareElements = newComparator\n};\nvar setHotTypeResolver = function (newResolver) {\n hotResolveType = newResolver;\n};\n",CJS="\n"+reactHotLoaderCode+";\n\nvar ReactDOM = {\n evalInReactContext: evalInReactContext,\n hotCleanup: hotCleanup,\n hotRenderWithHooks: hotRenderWithHooks,\n setHotElementComparator: setHotElementComparator,\n setHotTypeResolver: setHotTypeResolver,\n",commonJSEnd=["var ReactDOM = {",CJS],commonJSEndCompact=["var ReactDOM={",CJS],ESM="\n"+reactHotLoaderCode+";\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\n\nexports.evalInReactContext= evalInReactContext,\nexports.hotCleanup= hotCleanup,\nexports.hotRenderWithHooks= hotRenderWithHooks,\nexports.setHotElementComparator= setHotElementComparator,\nexports.setHotTypeResolver= setHotTypeResolver,\n",esmEnd=["exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;",ESM],injectionEnd={16.13:esmEnd,"16.10":commonJSEnd,16.9:commonJSEnd,16.6:commonJSEnd,16.4:commonJSEnd,"16.6-compact":commonJSEndCompact,"16.4-compact":commonJSEndCompact},sign="/* 🔥 this is hot-loader/react-dom 🔥 */";function additionalTransform(e){for(var t in additional)e=e.split(additional[t][0]).join(additional[t][1]);return e}function transform(e){if(e.indexOf("reconcileSingleElement")<0)return e;if(e.indexOf(sign)>=0)return e;for(var t in injectionStart)if(e.indexOf(injectionStart[t][0])>0&&e.indexOf(injectionEnd[t][0])>0){var n=additionalTransform(e.replace(injectionStart[t][0],injectionStart[t][1]).replace(injectionEnd[t][0],injectionEnd[t][1]));return sign+"\n"+n+"\n"+sign}return e}var patch=transform,SourceNode=sourceMap.SourceNode,SourceMapConsumer=sourceMap.SourceMapConsumer,tagCommonJSExportsSource=null;function transform$1(e,t){var n=this.async();this.resourcePath;return n(null,e,t)}transform$1.patch=patch;var webpack=transform$1;exports.default=webpack;
"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var sourceMap=_interopDefault(require("source-map")),fs=_interopDefault(require("fs")),path=_interopDefault(require("path")),loaderUtils=_interopDefault(require("loader-utils")),SourceMapGenerator=sourceMap.SourceMapGenerator;function makeIdentitySourceMap(e,t){var n=new SourceMapGenerator;return n.setSourceContent(t,e),e.split("\n").forEach(function(e,o){n.addMapping({source:t,original:{line:o+1,column:0},generated:{line:o+1,column:0}})}),n.toJSON()}var makeIdentitySourceMap_1=makeIdentitySourceMap,injectionStart={16.13:["isCompatibleFamilyForHotReloading(child, element)","hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type)"],"16.10":["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element)))","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],16.9:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type || (\n // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element)))","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],16.6:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.elementType === element.type)","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.elementType, element.type, hotUpdateChild(child), child.type))"],"16.6-compact":["if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:child.elementType===element.type)","if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:hotCompareElements(child.elementType,element.type, hotUpdateChild(child), child.type))"],16.4:["if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.type === element.type) {","if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : hotCompareElements(child.type, element.type, hotUpdateChild(child), child.type)) {"],"16.4-compact":["if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:child.type===element.type)","if(child.tag===Fragment?element.type===REACT_FRAGMENT_TYPE:hotCompareElements(child.type,element.type, hotUpdateChild(child), child.type))"]},additional={"16.13-update":["isCompatibleFamilyForHotReloading(current, element)","hotCompareElements(current.elementType, element.type, hotUpdateChild(current), current.type)"],"16.10-update":["current$$1.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current$$1, element)))","(hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1), current$$1.type)))"],"16.9-update":["current$$1.elementType === element.type || (\n // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current$$1, element)))","(hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1), current$$1.type)))"],"16.6-update":["if (current$$1 !== null && current$$1.elementType === element.type) {","if (current$$1 !== null && hotCompareElements(current$$1.elementType, element.type, hotUpdateChild(current$$1),current$$1.type)) {"],"16.6-update-compact":["if(current$$1!==null&&current$$1.elementType===element.type)","if(current$$1!==null&&hotCompareElements(current$$1.elementType,element.type,hotUpdateChild(current$$1),current$$1.type))"],"16.4-update":["if (current !== null && current.type === element.type) {","if (current !== null && hotCompareElements(current.type, element.type, hotUpdateChild(current),current.type)) {"],"16.4-update-compact":["if (current!== null&&current.type===element.type)","if (current!== null&&hotCompareElements(current.type,element.type,hotUpdateChild(current)))"],"17.0.0-rc1":["function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, lanes) {","function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, lanes) {type = hotResolveType(type);"],"17.0.0-rc1-compact":["function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,lanes){","function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,lanes){type = hotResolveType(type);"],"16.8-type":["function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {","function createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {type = hotResolveType(type);"],"16.8-type-compact":["function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,expirationTime){","function createFiberFromTypeAndProps(type,// React$ElementType\nkey,pendingProps,owner,mode,expirationTime){type = hotResolveType(type);"]},reactHotLoaderCode="\nvar hotUpdateChild = function (child) {\n return function (newType) {\n child.type = newType;\n if (child.alternate) {\n child.alternate.type = newType;\n }\n }\n};\nvar hotResolveType = function (type) {\n return type;\n};\nvar hotCompareElements = function (oldType, newType) {\n return oldType === newType\n};\nvar hotCleanupHooks = function () {\n if (typeof resetHooks !== 'undefined') {\n resetHooks();\n }\n}\n\nvar evalInReactContext = function (injection) {\n return eval(injection);\n};\nvar hotCleanup = hotCleanupHooks;\nvar hotRenderWithHooks = function (current, render) {\n hotCleanupHooks();\n\n if (typeof nextCurrentHook !== 'undefined' && typeof ReactCurrentDispatcher$1 !== 'undefined') {\n nextCurrentHook = current !== null ? current.memoizedState : null;\n if (typeof firstCurrentHook !== 'undefined') {\n firstCurrentHook = nextCurrentHook;\n }\n\n ReactCurrentDispatcher$1.current = nextCurrentHook === null ? HooksDispatcherOnMountInDEV : HooksDispatcherOnUpdateInDEV;\n }\n\n var rendered = render();\n\n hotCleanupHooks();\n\n return rendered;\n}\nvar setHotElementComparator = function (newComparator) {\n hotCompareElements = newComparator\n};\nvar setHotTypeResolver = function (newResolver) {\n hotResolveType = newResolver;\n};\n",CJS="\n"+reactHotLoaderCode+";\n\nvar ReactDOM = {\n evalInReactContext: evalInReactContext,\n hotCleanup: hotCleanup,\n hotRenderWithHooks: hotRenderWithHooks,\n setHotElementComparator: setHotElementComparator,\n setHotTypeResolver: setHotTypeResolver,\n",commonJSEnd=["var ReactDOM = {",CJS],commonJSEndCompact=["var ReactDOM={",CJS],ESM="\n"+reactHotLoaderCode+";\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\n\nexports.evalInReactContext= evalInReactContext,\nexports.hotCleanup= hotCleanup,\nexports.hotRenderWithHooks= hotRenderWithHooks,\nexports.setHotElementComparator= setHotElementComparator,\nexports.setHotTypeResolver= setHotTypeResolver,\n",esmEnd=["exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;",ESM],injectionEnd={16.13:esmEnd,"16.10":commonJSEnd,16.9:commonJSEnd,16.6:commonJSEnd,16.4:commonJSEnd,"16.6-compact":commonJSEndCompact,"16.4-compact":commonJSEndCompact},sign="/* 🔥 this is hot-loader/react-dom 🔥 */";function additionalTransform(e){for(var t in additional)e=e.split(additional[t][0]).join(additional[t][1]);return e}function transform(e){if(e.indexOf("reconcileSingleElement")<0)return e;if(e.indexOf(sign)>=0)return e;for(var t in injectionStart)if(e.indexOf(injectionStart[t][0])>0&&e.indexOf(injectionEnd[t][0])>0){var n=additionalTransform(e.replace(injectionStart[t][0],injectionStart[t][1]).replace(injectionEnd[t][0],injectionEnd[t][1]));return sign+"\n"+n+"\n"+sign}return e}var patch=transform,SourceNode=sourceMap.SourceNode,SourceMapConsumer=sourceMap.SourceMapConsumer,tagCommonJSExportsSource=null;function transform$1(e,t){var n=this.async();this.resourcePath;return n(null,e,t)}transform$1.patch=patch;var webpack=transform$1;exports.default=webpack;
{
"name": "react-hot-loader",
"version": "4.12.21",
"version": "4.13.0",
"description": "Tweak React components in real time.",

@@ -57,2 +57,3 @@ "main": "index.js",

"@types/react": "16",
"@wojtekmaj/enzyme-adapter-react-17": "^0.1.1",
"babel-cli": "^6.7.5",

@@ -103,5 +104,5 @@ "babel-core": "^6.26.3",

"peerDependencies": {
"@types/react": "^15.0.0 || ^16.0.0",
"react": "^15.0.0 || ^16.0.0",
"react-dom": "^15.0.0 || ^16.0.0"
"@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 ",
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 ",
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 "
},

@@ -108,0 +109,0 @@ "peerDependenciesMeta": {

@@ -27,3 +27,3 @@ # React Hot Loader

* `parcel 2` - [supports Fast Refresh](https://github.com/facebook/react/issues/16604#issuecomment-556082893) since alpha 3.
* `webpack` - no support yet, use React-Hot-Loader
* `webpack` - [supports Fast Refresh](https://github.com/pmmmwh/react-refresh-webpack-plugin/) using a plugin.
* `other bundler` - no support yet, use React-Hot-Loader

@@ -182,9 +182,5 @@

* (that's the goal) React-Hot-Loader would not change the past, only update the present - no lifecycle event would be called on component update.
As a result - all the code changes, you may made among `componentWillUnmount` or `componentDidMount`, would be ignored for
already created components.
* (that's the goal) React-Hot-Loader would not change the past, only update the present - no lifecycle event would be called on component update. As a result, any code changes made to `componentWillUnmount` or `componentDidMount` would be ignored for already created components.
* (that's the goal) React-Hot-Loader would not update any object, including component `state`.
* (1%) React-Hot-Loader could not reply some changes you may made in components `constructors`. As long as
components would not be recreated - RHL have to _inject_ new data onto existing components, but there is no way to detect the actual change and the way reply it.
React-Hot-Loader knows what class method is, not how you created it. See [#1001](https://github.com/gaearon/react-hot-loader/issues/1001) for details.
* (1%) React-Hot-Loader may not apply some changes made to a component's `constructor`. Unless an existing component is recreated, RHL would typically _inject_ new data into that component, but there is no way to detect the actual change or the way it was applied, especially if the change was made to a function. This is because of the way React-Hot-Loader works - it knows what class functions are, not how they were created. See [#1001](https://github.com/gaearon/react-hot-loader/issues/1001) for details.

@@ -387,3 +383,3 @@ ## Recipes

> It is safe to enable this loader for all the files. But place it after babel-loader, if babel-loader is present.
> It is possible to enable this loader for all the files, but if you use `babel` plugin, you need to enable this loader for `react-dom` only. Place it after babel-loader, if babel-loader is present.

@@ -395,5 +391,6 @@ ```js

rules: [
// would only land a "hot-patch" to react-dom
{
test: /\.jsx?$/,
include: /node_modules/,
test: /\.js$/,
include: /node_modules\/react-dom/,
use: ['react-hot-loader/webpack'],

@@ -408,10 +405,9 @@ },

If you are using `babel-plugin` you might not need to apply `webpack-loader` to all the files, scoping it to `react-dom`
If you are not using `babel` plugin you might need to apply `webpack-loader` to all the files.
```js
// would only land a "hot-patch" to react-dom
{
test: /\.js$/,
include: /node_modules\/react-dom/,
use: ['react-hot-loader/webpack']
test: /\.jsx?$/,
include: /node_modules/,
use: ['react-hot-loader/webpack']
},

@@ -517,3 +513,3 @@ ```

> Not all components has a name. **In production displayName could not exists.**
> Not all components have a name. **In production displayName could not exists.**

@@ -520,0 +516,0 @@ ```js

@@ -20,9 +20,17 @@ if (process.env.NODE_ENV !== 'production') {

}
// remove self from a cache
delete cache[module.id];
// setup hot for caller
exports.hot = hot(parent);
} else {
fallbackHot();
}
// setup hot for caller
exports.hot = hot(parent);
} else {
// prod mode
fallbackHot();
}
function fallbackHot() {
exports.hot = function (a) {

@@ -29,0 +37,0 @@ return a;

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc