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

draft-js

Package Overview
Dependencies
Maintainers
4
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

draft-js - npm Package Compare versions

Comparing version 0.10.1 to 0.10.2

lib/DraftFeatureFlags-core.js

29

CHANGELOG.md

@@ -7,2 +7,31 @@ # Changelog

## 0.10.2
### Added
* Added support for `aria-controls` in draft.js ([@jessebeach](https://github.com/jessebeach) in [7f0cab28](https://github.com/facebook/draft-js/commit/7f0cab28386ec4bde8ec6289377bff9e53cd019b))
### Changed
* Change `aria-owns` to `aria-controls` in draft.js. ([@jessebeach](https://github.com/jessebeach) in [7f0cab28](https://github.com/facebook/draft-js/commit/7f0cab28386ec4bde8ec6289377bff9e53cd019b))
* Deprecates support of `ariaOwns` and `ariaOwneeID` props.
* Deprecate use of `ariaHasPopup` prop in draft.js. `ariaExpanded` should be used instead if an input is showing a dropdown with options.([@jessebeach](https://github.com/jessebeach) in [744e9b4e](https://github.com/facebook/draft-js/commit/744e9b4eb4810797a93c66591fea6f9cac533b4b))
* Pasting an `img` no longer inserts the `src` by default; now inserts image emoji if no decorator is used. ([@aadsm](https://github.com/aadsm) in [0b22d713](https://github.com/facebook/draft-js/commit/0b22d713d556ccc4820850099ad6231493b3f7aa) and [@flarnie](https://github.com/flarnie) in [1378](https://github.com/facebook/draft-js/pull/1378))
### Fixed
* Fix issue where selection state was not cleared on blur and refocus of the
editor. ([@sophiebits](https://github.com/sophiebits) in
[19b9b1c5](https://github.com/facebook/draft-js/commit/19b9b1c5007bcb3a4111ea31f8d9a8cda629a1ff))
* Fix issue where pasting code into code block defaulted to plain text, and
styles were dropped from pasted blocks in general.
([@bumbu](https://github.com/bumbu) in
[e8d10112](https://github.com/facebook/draft-js/commit/e8d101121fb9dd9203a46d899124a7be4b0b2936))
* Fix issue where Flow was not running with some 'import' statements ([@flarnie](https://github.com/flarnie) & [@yuku-t](https://github.com/yuku-t) in [#1263](https://github.com/facebook/draft-js/pull/1262))
* Fix bug where Draft threw when two keys were pressed at same time in React 16 async mode ([@sophiebits](https://github.com/sophiebits) in [1c6a49b8](https://github.com/facebook/draft-js/commit/1c6a49b8801183fe0c29458626c0b5dbe1238e59))
* Fix recent Chrome bug where tab causes error ([@sophiebits](https://github.com/sophiebits) in [5863399a](https://github.com/facebook/draft-js/commit/5863399a3a1bcbbe9b090249504a70496a7af7cc))
* Fix "Refs must have owner" error when multiple copies of React are used ([@mks11](https://github.com/mks11) in [#925](https://github.com/facebook/draft-js/pull/925))
* Fix issue where AT could treat 'return' as submit in Draft ([@jessebeach](https://github.com/jessebeach) in [#1295](https://github.com/facebook/draft-js/pull/1295))
* Don't allow `aria-expanded` to be true unless the aria role is combobox ([@jessebeach](https://github.com/jessebeach) in [3494d45d](https://github.com/facebook/draft-js/commit/3494d45d32b64d6e82e4b3e8fcade6a2b5c6bd46))
* Fix pesky "This Selection object doesn't have any Ranges" bug ([@sophiebits](https://github.com/sophiebits) in [96688e10](https://github.com/facebook/draft-js/commit/96688e10b22a778c76e03009da4b9f3d05eba5f7) and [036e3a84](https://github.com/facebook/draft-js/commit/036e3a848e3593c97f4c3011e1ddc045e128a7af))
* Fix bug where pasting `img` with large data URL source could crash editor ([@aadsm](https://github.com/aadsm) in [0b22d713](https://github.com/facebook/draft-js/commit/0b22d713d556ccc4820850099ad6231493b3f7aa))
## 0.10.1

@@ -9,0 +38,0 @@

6

lib/AtomicBlockUtils.js

@@ -21,4 +21,4 @@ /**

var EditorState = require('./EditorState');
var Immutable = require('immutable');
var SelectionState = require('./SelectionState');
var Immutable = require('immutable');

@@ -28,4 +28,4 @@ var generateRandomKey = require('./generateRandomKey');

var List = Immutable.List;
var Repeat = Immutable.Repeat;
var List = Immutable.List,
Repeat = Immutable.Repeat;

@@ -32,0 +32,0 @@

@@ -20,5 +20,5 @@ /**

var List = Immutable.List;
var Repeat = Immutable.Repeat;
var Record = Immutable.Record;
var List = Immutable.List,
Repeat = Immutable.Repeat,
Record = Immutable.Record;

@@ -25,0 +25,0 @@

@@ -22,11 +22,11 @@ /**

var _require = require('immutable');
var _require = require('immutable'),
Map = _require.Map,
OrderedSet = _require.OrderedSet,
Record = _require.Record;
var Map = _require.Map;
var OrderedSet = _require.OrderedSet;
var Record = _require.Record;
// Immutable.map is typed such that the value for every key in the map
// must be the same type
var EMPTY_SET = OrderedSet();

@@ -33,0 +33,0 @@

@@ -25,6 +25,6 @@ /**

var List = Immutable.List;
var Map = Immutable.Map;
var OrderedSet = Immutable.OrderedSet;
var Record = Immutable.Record;
var List = Immutable.List,
Map = Immutable.Map,
OrderedSet = Immutable.OrderedSet,
Record = Immutable.Record;

@@ -31,0 +31,0 @@

@@ -32,5 +32,5 @@ /**

var List = Immutable.List;
var Record = Immutable.Record;
var Repeat = Immutable.Repeat;
var List = Immutable.List,
Record = Immutable.Record,
Repeat = Immutable.Repeat;

@@ -175,3 +175,3 @@

ContentState.createFromText = function createFromText(text) {
var delimiter = arguments.length <= 1 || arguments[1] === undefined ? /\r\n?|\n/g : arguments[1];
var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : /\r\n?|\n/g;

@@ -178,0 +178,0 @@ var strings = text.split(delimiter);

@@ -18,7 +18,5 @@ /**

var _require = require('immutable');
var _require = require('immutable'),
Map = _require.Map;
var Map = _require.Map;
var ContentStateInlineStyle = {

@@ -25,0 +23,0 @@ add: function add(contentState, selectionState, inlineStyle) {

@@ -21,2 +21,6 @@ /**

var Immutable = require('immutable');
var _require = require('immutable'),
Set = _require.Set;
var URI = require('fbjs/lib/URI');

@@ -30,9 +34,6 @@

var _require = require('immutable');
var List = Immutable.List,
OrderedSet = Immutable.OrderedSet;
var Set = _require.Set;
var List = Immutable.List;
var OrderedSet = Immutable.OrderedSet;
var NBSP = '&nbsp;';

@@ -127,3 +128,3 @@ var SPACE = ' ';

var unstyledElement = blockRenderMap.get('unstyled').element;
var tags = new Set([]);
var tags = Set([]);

@@ -181,33 +182,31 @@ blockRenderMap.forEach(function (draftBlock) {

} else if (node instanceof HTMLElement) {
(function () {
var htmlElement = node;
currentStyle = currentStyle.withMutations(function (style) {
var fontWeight = htmlElement.style.fontWeight;
var fontStyle = htmlElement.style.fontStyle;
var textDecoration = htmlElement.style.textDecoration;
var htmlElement = node;
currentStyle = currentStyle.withMutations(function (style) {
var fontWeight = htmlElement.style.fontWeight;
var fontStyle = htmlElement.style.fontStyle;
var textDecoration = htmlElement.style.textDecoration;
if (boldValues.indexOf(fontWeight) >= 0) {
style.add('BOLD');
} else if (notBoldValues.indexOf(fontWeight) >= 0) {
style.remove('BOLD');
}
if (boldValues.indexOf(fontWeight) >= 0) {
style.add('BOLD');
} else if (notBoldValues.indexOf(fontWeight) >= 0) {
style.remove('BOLD');
}
if (fontStyle === 'italic') {
style.add('ITALIC');
} else if (fontStyle === 'normal') {
style.remove('ITALIC');
}
if (fontStyle === 'italic') {
style.add('ITALIC');
} else if (fontStyle === 'normal') {
style.remove('ITALIC');
}
if (textDecoration === 'underline') {
style.add('UNDERLINE');
}
if (textDecoration === 'line-through') {
style.add('STRIKETHROUGH');
}
if (textDecoration === 'none') {
style.remove('UNDERLINE');
style.remove('STRIKETHROUGH');
}
}).toOrderedSet();
})();
if (textDecoration === 'underline') {
style.add('UNDERLINE');
}
if (textDecoration === 'line-through') {
style.add('STRIKETHROUGH');
}
if (textDecoration === 'none') {
style.remove('UNDERLINE');
style.remove('STRIKETHROUGH');
}
}).toOrderedSet();
}

@@ -311,18 +310,20 @@ return currentStyle;

if (nodeName === 'img' && node instanceof HTMLImageElement && node.attributes.getNamedItem('src') && node.attributes.getNamedItem('src').value) {
(function () {
var image = node;
var entityConfig = {};
var image = node;
var entityConfig = {};
imgAttr.forEach(function (attr) {
var imageAttribute = image.getAttribute(attr);
if (imageAttribute) {
entityConfig[attr] = imageAttribute;
}
});
var imageURI = new URI(entityConfig.src).toString();
node.textContent = imageURI; // Output src if no decorator
imgAttr.forEach(function (attr) {
var imageAttribute = image.getAttribute(attr);
if (imageAttribute) {
entityConfig[attr] = imageAttribute;
}
});
// Forcing this node to have children because otherwise no entity will be
// created for this node.
// The child text node cannot just have a space or return as content -
// we strip those out.
// See https://github.com/facebook/draft-js/issues/231 for some context.
node.textContent = '\uD83D\uDCF7';
// TODO: update this when we remove DraftEntity entirely
inEntity = DraftEntity.__create('IMAGE', 'MUTABLE', entityConfig || {});
})();
// TODO: update this when we remove DraftEntity entirely
inEntity = DraftEntity.__create('IMAGE', 'MUTABLE', entityConfig || {});
}

@@ -385,8 +386,6 @@

var _genFragment = genFragment(newEntityMap, child, inlineStyle, lastList, inBlock, blockTags, depth, blockRenderMap, entityId || inEntity);
var _genFragment = genFragment(newEntityMap, child, inlineStyle, lastList, inBlock, blockTags, depth, blockRenderMap, entityId || inEntity),
generatedChunk = _genFragment.chunk,
maybeUpdatedEntityMap = _genFragment.entityMap;
var generatedChunk = _genFragment.chunk;
var maybeUpdatedEntityMap = _genFragment.entityMap;
newChunk = generatedChunk;

@@ -434,9 +433,9 @@ newEntityMap = maybeUpdatedEntityMap;

var _genFragment2 = genFragment(entityMap, safeBody, OrderedSet(), 'ul', null, workingBlocks, -1, blockRenderMap);
var _genFragment2 = genFragment(entityMap, safeBody, OrderedSet(), 'ul', null, workingBlocks, -1, blockRenderMap),
chunk = _genFragment2.chunk,
newEntityMap = _genFragment2.entityMap;
var chunk = _genFragment2.chunk;
var newEntityMap = _genFragment2.entityMap;
// join with previous block to prevent weirdness on paste
if (chunk.text.indexOf('\r') === 0) {

@@ -475,4 +474,4 @@ chunk = {

function convertFromHTMLtoContentBlocks(html) {
var DOMBuilder = arguments.length <= 1 || arguments[1] === undefined ? getSafeBodyFromHTML : arguments[1];
var blockRenderMap = arguments.length <= 2 || arguments[2] === undefined ? DefaultDraftBlockRenderMap : arguments[2];
var DOMBuilder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getSafeBodyFromHTML;
var blockRenderMap = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DefaultDraftBlockRenderMap;

@@ -490,4 +489,4 @@ // Be ABSOLUTELY SURE that the dom builder you pass here won't execute

var chunk = chunkData.chunk;
var newEntityMap = chunkData.entityMap;
var chunk = chunkData.chunk,
newEntityMap = chunkData.entityMap;

@@ -494,0 +493,0 @@

@@ -22,2 +22,3 @@ /**

var DraftEntity = require('./DraftEntity');
var Immutable = require('immutable');

@@ -28,3 +29,2 @@ var createCharacterList = require('./createCharacterList');

var generateRandomKey = require('./generateRandomKey');
var Immutable = require('immutable');

@@ -35,4 +35,4 @@ var Map = Immutable.Map;

function convertFromRawToDraftState(rawState) {
var blocks = rawState.blocks;
var entityMap = rawState.entityMap;
var blocks = rawState.blocks,
entityMap = rawState.entityMap;

@@ -45,5 +45,5 @@

var encodedEntity = entityMap[storageKey];
var type = encodedEntity.type;
var mutability = encodedEntity.mutability;
var data = encodedEntity.data;
var type = encodedEntity.type,
mutability = encodedEntity.mutability,
data = encodedEntity.data;

@@ -55,9 +55,9 @@ var newKey = DraftEntity.__create(type, mutability, data || {});

var contentBlocks = blocks.map(function (block) {
var key = block.key;
var type = block.type;
var text = block.text;
var depth = block.depth;
var inlineStyleRanges = block.inlineStyleRanges;
var entityRanges = block.entityRanges;
var data = block.data;
var key = block.key,
type = block.type,
text = block.text,
depth = block.depth,
inlineStyleRanges = block.inlineStyleRanges,
entityRanges = block.entityRanges,
data = block.data;

@@ -64,0 +64,0 @@ key = key || generateRandomKey();

@@ -16,7 +16,7 @@ /**

var _require = require('immutable'),
OrderedSet = _require.OrderedSet;
var UnicodeUtils = require('fbjs/lib/UnicodeUtils');
var _require = require('immutable');
var OrderedSet = _require.OrderedSet;
var substr = UnicodeUtils.substr;

@@ -23,0 +23,0 @@

@@ -15,6 +15,5 @@ /**

var _require = require('immutable');
var _require = require('immutable'),
Map = _require.Map;
var Map = _require.Map;
var React = require('react');

@@ -21,0 +20,0 @@

@@ -10,2 +10,3 @@ /**

* @providesModule Draft
*
*/

@@ -12,0 +13,0 @@

@@ -34,3 +34,2 @@ /**

var DraftEditorPlaceholder = require('./DraftEditorPlaceholder.react');
var EditorState = require('./EditorState');

@@ -47,3 +46,2 @@ var React = require('react');

var getDefaultKeyBinding = require('./getDefaultKeyBinding');
var getScrollPosition = require('fbjs/lib/getScrollPosition');

@@ -89,2 +87,3 @@ var invariant = require('fbjs/lib/invariant');

_this._latestEditorState = props.editorState;
_this._latestCommittedEditorState = props.editorState;

@@ -161,8 +160,14 @@ _this._onBeforeInput = _this._buildHandler('onBeforeInput');

if (this._showPlaceholder()) {
return React.createElement(DraftEditorPlaceholder, {
text: nullthrows(this.props.placeholder),
editorState: this.props.editorState,
textAlignment: this.props.textAlignment,
accessibilityID: this._placeholderAccessibilityID
});
return (
/* $FlowFixMe(>=0.53.0 site=www,mobile) This comment suppresses an
* error when upgrading Flow's support for React. Common errors found
* when upgrading Flow's React support are documented at
* https://fburl.com/eq7bs81w */
React.createElement(DraftEditorPlaceholder, {
text: nullthrows(this.props.placeholder),
editorState: this.props.editorState,
textAlignment: this.props.textAlignment,
accessibilityID: this._placeholderAccessibilityID
})
);
}

@@ -173,5 +178,5 @@ return null;

DraftEditor.prototype.render = function render() {
var _props = this.props;
var readOnly = _props.readOnly;
var textAlignment = _props.textAlignment;
var _props = this.props,
readOnly = _props.readOnly,
textAlignment = _props.textAlignment;

@@ -191,2 +196,7 @@ var rootClass = cx({

// The aria-expanded and aria-haspopup properties should only be rendered
// for a combobox.
var ariaRole = this.props.role || 'textbox';
var ariaExpanded = ariaRole === 'combobox' ? !!this.props.ariaExpanded : null;
return React.createElement(

@@ -206,7 +216,7 @@ 'div',

'aria-autocomplete': readOnly ? null : this.props.ariaAutoComplete,
'aria-controls': readOnly ? null : this.props.ariaControls,
'aria-describedby': this._showPlaceholder() ? this._placeholderAccessibilityID : null,
'aria-expanded': readOnly ? null : this.props.ariaExpanded,
'aria-haspopup': readOnly ? null : this.props.ariaHasPopup,
'aria-expanded': readOnly ? null : ariaExpanded,
'aria-label': this.props.ariaLabel,
'aria-owns': readOnly ? null : this.props.ariaOwneeID,
'aria-multiline': this.props.ariaMultiline,
autoCapitalize: this.props.autoCapitalize,

@@ -246,3 +256,3 @@ autoComplete: this.props.autoComplete,

ref: 'editor',
role: readOnly ? null : this.props.role || 'textbox',
role: readOnly ? null : ariaRole,
spellCheck: allowSpellCheck && this.props.spellCheck,

@@ -299,2 +309,3 @@ style: contentStyle,

this._blockSelectEvents = false;
this._latestCommittedEditorState = this.props.editorState;
};

@@ -307,7 +318,5 @@

*
* Forcing focus causes the browser to scroll to the top of the editor, which
* may be undesirable when the editor is taller than the viewport. To solve
* this, either use a specified scroll position (in cases like `cut` behavior
* where it should be restored to a known position) or store the current
* scroll state and put it back in place after focus has been forced.
* We attempt to preserve scroll position when focusing. You can also pass
* a specified scroll position (for cases like `cut` behavior where it should
* be restored to a known position).
*/

@@ -324,10 +333,10 @@

var _ref = scrollPosition || getScrollPosition(scrollParent);
var _ref = scrollPosition || getScrollPosition(scrollParent),
x = _ref.x,
y = _ref.y;
var x = _ref.x;
var y = _ref.y;
!(editorNode instanceof HTMLElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'editorNode is not an HTMLElement') : invariant(false) : void 0;
editorNode.focus();
// Restore scroll position
if (scrollParent === window) {

@@ -334,0 +343,0 @@ window.scrollTo(x, y);

@@ -31,3 +31,2 @@ /**

var Scroll = require('fbjs/lib/Scroll');
var Style = require('fbjs/lib/Style');

@@ -126,15 +125,21 @@ var UnicodeBidi = require('fbjs/lib/UnicodeBidi');

var end = leaf.get('end');
return React.createElement(DraftEditorLeaf, {
key: offsetKey,
offsetKey: offsetKey,
block: block,
start: start,
selection: hasSelection ? _this2.props.selection : undefined,
forceSelection: _this2.props.forceSelection,
text: text.slice(start, end),
styleSet: block.getInlineStyleAt(start),
customStyleMap: _this2.props.customStyleMap,
customStyleFn: _this2.props.customStyleFn,
isLast: ii === lastLeafSet && jj === lastLeaf
});
return (
/* $FlowFixMe(>=0.53.0 site=www,mobile) This comment suppresses an
* error when upgrading Flow's support for React. Common errors found
* when upgrading Flow's React support are documented at
* https://fburl.com/eq7bs81w */
React.createElement(DraftEditorLeaf, {
key: offsetKey,
offsetKey: offsetKey,
block: block,
start: start,
selection: hasSelection ? _this2.props.selection : undefined,
forceSelection: _this2.props.forceSelection,
text: text.slice(start, end),
styleSet: block.getInlineStyleAt(start),
customStyleMap: _this2.props.customStyleMap,
customStyleFn: _this2.props.customStyleFn,
isLast: ii === lastLeafSet && jj === lastLeaf
})
);
}).toArray();

@@ -181,5 +186,9 @@

DraftEditorBlock.prototype.render = function render() {
var _props = this.props;
var direction = _props.direction;
var offsetKey = _props.offsetKey;
/* $FlowFixMe(>=0.53.0 site=www,mobile) This comment suppresses an error
* when upgrading Flow's support for React. Common errors found when
* upgrading Flow's React support are documented at
* https://fburl.com/eq7bs81w */
var _props = this.props,
direction = _props.direction,
offsetKey = _props.offsetKey;

@@ -186,0 +195,0 @@ var className = cx({

@@ -91,8 +91,8 @@ /**

DraftEditorContents.prototype.render = function render() {
var _props = this.props;
var blockRenderMap = _props.blockRenderMap;
var blockRendererFn = _props.blockRendererFn;
var customStyleMap = _props.customStyleMap;
var customStyleFn = _props.customStyleFn;
var editorState = _props.editorState;
var _props = this.props,
blockRenderMap = _props.blockRenderMap,
blockRendererFn = _props.blockRendererFn,
customStyleMap = _props.customStyleMap,
customStyleFn = _props.customStyleFn,
editorState = _props.editorState;

@@ -148,3 +148,3 @@

var _Element = configForType.element || blockRenderMap.get('unstyled').element;
var Element = configForType.element || blockRenderMap.get('unstyled').element;

@@ -156,3 +156,3 @@ var depth = _block.getDepth();

// counters manually.
if (_Element === 'li') {
if (Element === 'li') {
var shouldResetCount = lastWrapperTemplate !== wrapperTemplate || currentDepth === null || depth > currentDepth;

@@ -166,2 +166,6 @@ className = joinClasses(className, getListItemClasses(blockType, depth, shouldResetCount, direction));

'data-block': true,
/* $FlowFixMe(>=0.53.0 site=www,mobile) This comment suppresses an
* error when upgrading Flow's support for React. Common errors found
* when upgrading Flow's React support are documented at
* https://fburl.com/eq7bs81w */
'data-editor': this.props.editorKey,

@@ -178,3 +182,8 @@ 'data-offset-key': offsetKey,

var child = React.createElement(_Element, childProps, React.createElement(Component, componentProps));
var child = React.createElement(Element, childProps,
/* $FlowFixMe(>=0.53.0 site=www,mobile) This comment suppresses an
* error when upgrading Flow's support for React. Common errors found
* when upgrading Flow's React support are documented at
* https://fburl.com/eq7bs81w */
React.createElement(Component, componentProps));

@@ -181,0 +190,0 @@ processedBlocks.push({

@@ -23,6 +23,5 @@ /**

var getUpdatedSelectionState = require('./getUpdatedSelectionState');
var isEventHandled = require('./isEventHandled');
var nullthrows = require('fbjs/lib/nullthrows');
var isEventHandled = require('./isEventHandled');
/**

@@ -29,0 +28,0 @@ * Get a SelectionState for the supplied mouse event.

@@ -68,6 +68,6 @@ /**

var _props = this.props;
var block = _props.block;
var start = _props.start;
var text = _props.text;
var _props = this.props,
block = _props.block,
start = _props.start,
text = _props.text;

@@ -128,7 +128,7 @@ var blockKey = block.getKey();

var _props2 = this.props;
var customStyleMap = _props2.customStyleMap;
var customStyleFn = _props2.customStyleFn;
var offsetKey = _props2.offsetKey;
var styleSet = _props2.styleSet;
var _props2 = this.props,
customStyleMap = _props2.customStyleMap,
customStyleFn = _props2.customStyleFn,
offsetKey = _props2.offsetKey,
styleSet = _props2.styleSet;

@@ -135,0 +135,0 @@ var styleObj = styleSet.reduce(function (map, styleName) {

@@ -166,3 +166,3 @@ 'use strict';

var instance = instances.get(key);
!!!instance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unknown DraftEntity key.') : invariant(false) : void 0;
!!!instance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unknown DraftEntity key: %s.', key) : invariant(false) : void 0;
return instance;

@@ -169,0 +169,0 @@ },

@@ -15,7 +15,4 @@ /**

var DraftFeatureFlags = {
draft_killswitch_allow_nontextnodes: false,
draft_segmented_entities_behavior: false
};
var DraftFeatureFlags = require('./DraftFeatureFlags-core');
module.exports = DraftFeatureFlags;

@@ -23,8 +23,7 @@ /**

decode: function decode(offsetKey) {
var _offsetKey$split = offsetKey.split(KEY_DELIMITER);
var _offsetKey$split = offsetKey.split(KEY_DELIMITER),
blockKey = _offsetKey$split[0],
decoratorKey = _offsetKey$split[1],
leafKey = _offsetKey$split[2];
var blockKey = _offsetKey$split[0];
var decoratorKey = _offsetKey$split[1];
var leafKey = _offsetKey$split[2];
return {

@@ -31,0 +30,0 @@ blockKey: blockKey,

@@ -25,4 +25,4 @@ /**

var List = Immutable.List;
var Repeat = Immutable.Repeat;
var List = Immutable.List,
Repeat = Immutable.Repeat;

@@ -34,3 +34,3 @@

},
processText: function processText(textBlocks, character) {
processText: function processText(textBlocks, character, type) {
return textBlocks.map(function (textLine) {

@@ -40,3 +40,3 @@ textLine = sanitizeDraftText(textLine);

key: generateRandomKey(),
type: 'unstyled',
type: type,
text: textLine,

@@ -43,0 +43,0 @@ characterList: List(Repeat(character, textLine.length))

@@ -21,2 +21,3 @@ /**

var getEntityKeyForSelection = require('./getEntityKeyForSelection');
var isEventHandled = require('./isEventHandled');
var isSelectionAtLeafStart = require('./isSelectionAtLeafStart');

@@ -26,4 +27,2 @@ var nullthrows = require('fbjs/lib/nullthrows');

var isEventHandled = require('./isEventHandled');
// When nothing is focused, Firefox regards two characters, `'` and `/`, as

@@ -92,2 +91,3 @@ // commands that should open and focus the "quickfind" search bar. This should

var selection = editorState.getSelection();
var anchorKey = selection.getAnchorKey();

@@ -100,6 +100,39 @@ if (!selection.isCollapsed()) {

var mayAllowNative = !isSelectionAtLeafStart(editorState);
var newEditorState = replaceText(editorState, chars, editorState.getCurrentInlineStyle(), getEntityKeyForSelection(editorState.getCurrentContent(), editorState.getSelection()));
if (!mayAllowNative) {
// Bunch of different cases follow where we need to prevent native insertion.
var mustPreventNative = false;
if (!mustPreventNative) {
// Browsers tend to insert text in weird places in the DOM when typing at
// the start of a leaf, so we'll handle it ourselves.
mustPreventNative = isSelectionAtLeafStart(editor._latestCommittedEditorState);
}
if (!mustPreventNative) {
// Chrome will also split up a node into two pieces if it contains a Tab
// char, for no explicable reason. Seemingly caused by this commit:
// https://chromium.googlesource.com/chromium/src/+/013ac5eaf3%5E%21/
var nativeSelection = global.getSelection();
// Selection is necessarily collapsed at this point due to earlier check.
if (nativeSelection.anchorNode !== null && nativeSelection.anchorNode.nodeType === Node.TEXT_NODE) {
// See isTabHTMLSpanElement in chromium EditingUtilities.cpp.
var parentNode = nativeSelection.anchorNode.parentNode;
mustPreventNative = parentNode.nodeName === 'SPAN' && parentNode.firstChild.nodeType === Node.TEXT_NODE && parentNode.firstChild.nodeValue.indexOf('\t') !== -1;
}
}
if (!mustPreventNative) {
// Check the old and new "fingerprints" of the current block to determine
// whether this insertion requires any addition or removal of text nodes,
// in which case we would prevent the native character insertion.
var originalFingerprint = BlockTree.getFingerprint(editorState.getBlockTree(anchorKey));
var newFingerprint = BlockTree.getFingerprint(newEditorState.getBlockTree(anchorKey));
mustPreventNative = originalFingerprint !== newFingerprint;
}
if (!mustPreventNative) {
mustPreventNative = mustPreventDefaultForCharacter(chars);
}
if (!mustPreventNative) {
mustPreventNative = nullthrows(newEditorState.getDirectionMap()).get(anchorKey) !== nullthrows(editorState.getDirectionMap()).get(anchorKey);
}
if (mustPreventNative) {
e.preventDefault();

@@ -110,32 +143,19 @@ editor.update(newEditorState);

var anchorKey = selection.getAnchorKey();
var anchorTree = editorState.getBlockTree(anchorKey);
// Check the old and new "fingerprints" of the current block to determine
// whether this insertion requires any addition or removal of text nodes,
// in which case we would prevent the native character insertion.
var originalFingerprint = BlockTree.getFingerprint(anchorTree);
var newFingerprint = BlockTree.getFingerprint(newEditorState.getBlockTree(anchorKey));
if (mustPreventDefaultForCharacter(chars) || originalFingerprint !== newFingerprint || nullthrows(newEditorState.getDirectionMap()).get(anchorKey) !== nullthrows(editorState.getDirectionMap()).get(anchorKey)) {
e.preventDefault();
editor.update(newEditorState);
} else {
newEditorState = EditorState.set(newEditorState, {
nativelyRenderedContent: newEditorState.getCurrentContent()
});
// The native event is allowed to occur. To allow user onChange handlers to
// change the inserted text, we wait until the text is actually inserted
// before we actually update our state. That way when we rerender, the text
// we see in the DOM will already have been inserted properly.
editor._pendingStateFromBeforeInput = newEditorState;
setImmediate(function () {
if (editor._pendingStateFromBeforeInput !== undefined) {
editor.update(editor._pendingStateFromBeforeInput);
editor._pendingStateFromBeforeInput = undefined;
}
});
}
// We made it all the way! Let the browser do its thing and insert the char.
newEditorState = EditorState.set(newEditorState, {
nativelyRenderedContent: newEditorState.getCurrentContent()
});
// The native event is allowed to occur. To allow user onChange handlers to
// change the inserted text, we wait until the text is actually inserted
// before we actually update our state. That way when we rerender, the text
// we see in the DOM will already have been inserted properly.
editor._pendingStateFromBeforeInput = newEditorState;
setImmediate(function () {
if (editor._pendingStateFromBeforeInput !== undefined) {
editor.update(editor._pendingStateFromBeforeInput);
editor._pendingStateFromBeforeInput = undefined;
}
});
}
module.exports = editOnBeforeInput;

@@ -16,17 +16,21 @@ /**

var EditorState = require('./EditorState');
var UserAgent = require('fbjs/lib/UserAgent');
var containsNode = require('fbjs/lib/containsNode');
var getActiveElement = require('fbjs/lib/getActiveElement');
var isWebKit = UserAgent.isEngine('WebKit');
function editOnBlur(editor, e) {
// Webkit has a bug in which blurring a contenteditable by clicking on
// other active elements will trigger the `blur` event but will not remove
// the DOM selection from the contenteditable. We therefore force the
// issue to be certain, checking whether the active element is `body`
// to force it when blurring occurs within the window (as opposed to
// clicking to another tab or window).
if (isWebKit && getActiveElement() === document.body) {
global.getSelection().removeAllRanges();
// In a contentEditable element, when you select a range and then click
// another active element, this does trigger a `blur` event but will not
// remove the DOM selection from the contenteditable.
// This is consistent across all browsers, but we prefer that the editor
// behave like a textarea, where a `blur` event clears the DOM selection.
// We therefore force the issue to be certain, checking whether the active
// element is `body` to force it when blurring occurs within the window (as
// opposed to clicking to another tab or window).
if (getActiveElement() === document.body) {
var _selection = global.getSelection();
var editorNode = editor.refs.editor;
if (_selection.rangeCount === 1 && containsNode(editorNode, _selection.anchorNode) && containsNode(editorNode, _selection.focusNode)) {
_selection.removeAllRanges();
}
}

@@ -33,0 +37,0 @@

@@ -43,10 +43,9 @@ /**

// after the editor regains control of the DOM.
// $FlowFixMe e.target should be an instanceof Node
var scrollParent = Style.getScrollParent(e.target);
var _getScrollPosition = getScrollPosition(scrollParent);
var _getScrollPosition = getScrollPosition(scrollParent),
x = _getScrollPosition.x,
y = _getScrollPosition.y;
var x = _getScrollPosition.x;
var y = _getScrollPosition.y;
var fragment = getFragmentFromSelection(editorState);

@@ -53,0 +52,0 @@ editor.setClipboard(fragment);

@@ -16,2 +16,3 @@ /**

var EditorState = require('./EditorState');
var UserAgent = require('fbjs/lib/UserAgent');

@@ -34,5 +35,13 @@ function editOnFocus(editor, e) {

// old cursor position. See https://crbug.com/540004.
editor.update(EditorState.forceSelection(editorState, selection));
// But it looks like this is fixed in Chrome 60.0.3081.0.
// Other browsers also don't have this bug, so we prefer to acceptSelection
// when possible, to ensure that unfocusing and refocusing a Draft editor
// doesn't preserve the selection, matching how textareas work.
if (UserAgent.isBrowser('Chrome < 60.0.3081.0')) {
editor.update(EditorState.forceSelection(editorState, selection));
} else {
editor.update(EditorState.acceptSelection(editorState, selection));
}
}
module.exports = editOnFocus;

@@ -48,4 +48,4 @@ /**

var anchorNode = domSelection.anchorNode;
var isCollapsed = domSelection.isCollapsed;
var anchorNode = domSelection.anchorNode,
isCollapsed = domSelection.isCollapsed;

@@ -84,14 +84,11 @@ var isNotTextNode = anchorNode.nodeType !== Node.TEXT_NODE;

var _DraftOffsetKey$decod = DraftOffsetKey.decode(offsetKey);
var _DraftOffsetKey$decod = DraftOffsetKey.decode(offsetKey),
blockKey = _DraftOffsetKey$decod.blockKey,
decoratorKey = _DraftOffsetKey$decod.decoratorKey,
leafKey = _DraftOffsetKey$decod.leafKey;
var blockKey = _DraftOffsetKey$decod.blockKey;
var decoratorKey = _DraftOffsetKey$decod.decoratorKey;
var leafKey = _DraftOffsetKey$decod.leafKey;
var _editorState$getBlock = editorState.getBlockTree(blockKey).getIn([decoratorKey, 'leaves', leafKey]),
start = _editorState$getBlock.start,
end = _editorState$getBlock.end;
var _editorState$getBlock = editorState.getBlockTree(blockKey).getIn([decoratorKey, 'leaves', leafKey]);
var start = _editorState$getBlock.start;
var end = _editorState$getBlock.end;
var content = editorState.getCurrentContent();

@@ -111,2 +108,6 @@ var block = content.getBlockForKey(blockKey);

if (domText === modelText) {
// This can be buggy for some Android keyboards because they don't fire
// standard onkeydown/pressed events and only fired editOnInput
// so domText is already changed by the browser and ends up being equal
// to modelText unexpectedly
return;

@@ -113,0 +114,0 @@ }

@@ -22,2 +22,3 @@ /**

var isEventHandled = require('./isEventHandled');
var keyCommandBackspaceToStartOfLine = require('./keyCommandBackspaceToStartOfLine');

@@ -27,11 +28,9 @@ var keyCommandBackspaceWord = require('./keyCommandBackspaceWord');

var keyCommandInsertNewline = require('./keyCommandInsertNewline');
var keyCommandMoveSelectionToEndOfBlock = require('./keyCommandMoveSelectionToEndOfBlock');
var keyCommandMoveSelectionToStartOfBlock = require('./keyCommandMoveSelectionToStartOfBlock');
var keyCommandPlainBackspace = require('./keyCommandPlainBackspace');
var keyCommandPlainDelete = require('./keyCommandPlainDelete');
var keyCommandMoveSelectionToEndOfBlock = require('./keyCommandMoveSelectionToEndOfBlock');
var keyCommandMoveSelectionToStartOfBlock = require('./keyCommandMoveSelectionToStartOfBlock');
var keyCommandTransposeCharacters = require('./keyCommandTransposeCharacters');
var keyCommandUndo = require('./keyCommandUndo');
var isEventHandled = require('./isEventHandled');
var isOptionKeyCommand = KeyBindingUtil.isOptionKeyCommand;

@@ -38,0 +37,0 @@

@@ -21,2 +21,3 @@ /**

var EditorState = require('./EditorState');
var RichTextEditorUtil = require('./RichTextEditorUtil');

@@ -58,4 +59,5 @@ var getEntityKeyForSelection = require('./getEntityKeyForSelection');

});
var currentBlockType = RichTextEditorUtil.getCurrentBlockType(editorState);
var text = DraftPasteProcessor.processText(blocks, character);
var text = DraftPasteProcessor.processText(blocks, character, currentBlockType);
var fragment = BlockMapBuilder.createFromArray(text);

@@ -118,4 +120,4 @@

if (htmlFragment) {
var contentBlocks = htmlFragment.contentBlocks;
var entityMap = htmlFragment.entityMap;
var contentBlocks = htmlFragment.contentBlocks,
entityMap = htmlFragment.entityMap;

@@ -141,4 +143,6 @@ if (contentBlocks) {

var textFragment = DraftPasteProcessor.processText(textBlocks, character);
var currentBlockType = RichTextEditorUtil.getCurrentBlockType(editorState);
var textFragment = DraftPasteProcessor.processText(textBlocks, character, currentBlockType);
var textMap = BlockMapBuilder.createFromArray(textFragment);

@@ -145,0 +149,0 @@ editor.update(insertFragment(editor._latestEditorState, textMap));

@@ -27,5 +27,5 @@ /**

var OrderedSet = Immutable.OrderedSet;
var Record = Immutable.Record;
var Stack = Immutable.Stack;
var OrderedSet = Immutable.OrderedSet,
Record = Immutable.Record,
Stack = Immutable.Stack;

@@ -68,4 +68,4 @@

EditorState.create = function create(config) {
var currentContent = config.currentContent;
var decorator = config.decorator;
var currentContent = config.currentContent,
decorator = config.decorator;

@@ -72,0 +72,0 @@ var recordConfig = _extends({}, config, {

@@ -28,4 +28,4 @@ /**

var hasCommandModifier = KeyBindingUtil.hasCommandModifier;
var isCtrlKeyCommand = KeyBindingUtil.isCtrlKeyCommand;
var hasCommandModifier = KeyBindingUtil.hasCommandModifier,
isCtrlKeyCommand = KeyBindingUtil.isCtrlKeyCommand;

@@ -32,0 +32,0 @@

@@ -25,4 +25,4 @@ /**

var BOLD = SampleDraftInlineStyle.BOLD;
var ITALIC = SampleDraftInlineStyle.ITALIC;
var BOLD = SampleDraftInlineStyle.BOLD,
ITALIC = SampleDraftInlineStyle.ITALIC;

@@ -29,0 +29,0 @@ var ENTITY_KEY = '123';

@@ -15,2 +15,4 @@ /**

var invariant = require('fbjs/lib/invariant');
var TEXT_CLIPPING_REGEX = /\.textClipping$/;

@@ -68,3 +70,5 @@

reader.onload = function () {
callback(reader.result);
var result = reader.result;
!(typeof result === 'string') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'We should be calling "FileReader.readAsText" which returns a string') : invariant(false) : void 0;
callback(result);
};

@@ -71,0 +75,0 @@ reader.onerror = function () {

@@ -31,6 +31,6 @@ /**

var boundingRect = getRangeBoundingClientRect(range);
var top = boundingRect.top;
var right = boundingRect.right;
var bottom = boundingRect.bottom;
var left = boundingRect.left;
var top = boundingRect.top,
right = boundingRect.right,
bottom = boundingRect.bottom,
left = boundingRect.left;

@@ -37,0 +37,0 @@ // When a re-render leads to a node being removed, the DOM selection will

@@ -83,7 +83,6 @@ /**

if (entity.getMutability() !== 'MUTABLE') {
var _getRemovalRange = getRemovalRange(chars, entityAfterCursor, offset);
var _getRemovalRange = getRemovalRange(chars, entityAfterCursor, offset),
start = _getRemovalRange.start,
end = _getRemovalRange.end;
var start = _getRemovalRange.start;
var end = _getRemovalRange.end;
var current;

@@ -90,0 +89,0 @@ while (start < end) {

@@ -276,5 +276,5 @@ /**

/**
* When a collapsed cursor is at the start of an empty styled block, allow
* certain key commands (newline, backspace) to simply change the
* style of the block instead of the default behavior.
* When a collapsed cursor is at the start of an empty styled block,
* changes block to 'unstyled'. Returns null if block or selection does not
* meet that criteria.
*/

@@ -281,0 +281,0 @@ tryToRemoveBlockStyle: function tryToRemoveBlockStyle(editorState) {

@@ -15,7 +15,5 @@ /**

var _require = require('immutable');
var _require = require('immutable'),
OrderedSet = _require.OrderedSet;
var OrderedSet = _require.OrderedSet;
module.exports = {

@@ -22,0 +20,0 @@ BOLD: OrderedSet.of('BOLD'),

@@ -11,2 +11,3 @@ /**

* @typechecks
* @format
*

@@ -18,2 +19,3 @@ */

var DraftJsDebugLogging = require('./DraftJsDebugLogging');
var containsNode = require('fbjs/lib/containsNode');

@@ -23,3 +25,3 @@ var getActiveElement = require('fbjs/lib/getActiveElement');

function getAnonymizedDOM(node) {
function getAnonymizedDOM(node, getNodeLabels) {
if (!node) {

@@ -29,3 +31,3 @@ return '[empty]';

var anonymized = anonymizeText(node);
var anonymized = anonymizeTextWithin(node, getNodeLabels);
if (anonymized.nodeType === Node.TEXT_NODE) {

@@ -36,15 +38,20 @@ return anonymized.textContent;

!(anonymized instanceof Element) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Node must be an Element if it is not a text node.') : invariant(false) : void 0;
return anonymized.innerHTML;
return anonymized.outerHTML;
}
function anonymizeText(node) {
function anonymizeTextWithin(node, getNodeLabels) {
var labels = getNodeLabels !== undefined ? getNodeLabels(node) : [];
if (node.nodeType === Node.TEXT_NODE) {
var length = node.textContent.length;
return document.createTextNode('[text ' + length + ']');
return document.createTextNode('[text ' + length + (labels.length ? ' | ' + labels.join(', ') : '') + ']');
}
var clone = node.cloneNode();
if (clone.nodeType === 1 && labels.length) {
clone.setAttribute('data-labels', labels.join(', '));
}
var childNodes = node.childNodes;
for (var ii = 0; ii < childNodes.length; ii++) {
clone.appendChild(anonymizeText(childNodes[ii]));
clone.appendChild(anonymizeTextWithin(childNodes[ii], getNodeLabels));
}

@@ -55,3 +62,3 @@

function getAnonymizedEditorDOM(node) {
function getAnonymizedEditorDOM(node, getNodeLabels) {
// grabbing the DOM content of the Draft editor

@@ -62,3 +69,3 @@ var currentNode = node;

// found the Draft editor container
return getAnonymizedDOM(currentNode);
return getAnonymizedDOM(currentNode, getNodeLabels);
} else {

@@ -164,3 +171,4 @@ currentNode = currentNode.parentNode;

function addFocusToSelection(selection, node, offset, selectionState) {
if (selection.extend && containsNode(getActiveElement(), node)) {
var activeElement = getActiveElement();
if (selection.extend && containsNode(activeElement, node)) {
// If `extend` is called while another element has focus, an error is

@@ -181,3 +189,40 @@ // thrown. We therefore disable `extend` if the active element is somewhere

}
selection.extend(node, offset);
// logging to catch bug that is being reported in t18110632
var nodeWasFocus = node === selection.focusNode;
try {
selection.extend(node, offset);
} catch (e) {
DraftJsDebugLogging.logSelectionStateFailure({
anonymizedDom: getAnonymizedEditorDOM(node, function (n) {
var labels = [];
if (n === activeElement) {
labels.push('active element');
}
if (n === selection.anchorNode) {
labels.push('selection anchor node');
}
if (n === selection.focusNode) {
labels.push('selection focus node');
}
return labels;
}),
extraParams: JSON.stringify({
activeElementName: activeElement ? activeElement.nodeName : null,
nodeIsFocus: node === selection.focusNode,
nodeWasFocus: nodeWasFocus,
selectionRangeCount: selection.rangeCount,
selectionAnchorNodeName: selection.anchorNode ? selection.anchorNode.nodeName : null,
selectionAnchorOffset: selection.anchorOffset,
selectionFocusNodeName: selection.focusNode ? selection.focusNode.nodeName : null,
selectionFocusOffset: selection.focusOffset,
message: e ? '' + e : null,
offset: offset
}, null, 2),
selectionState: JSON.stringify(selectionState.toJS(), null, 2)
});
// allow the error to be thrown -
// better than continuing in a broken state
throw e;
}
} else {

@@ -184,0 +229,0 @@ // IE doesn't support extend. This will mean no backward selection.

{
"name": "draft-js",
"description": "A React framework for building text editors.",
"version": "0.10.1",
"version": "0.10.2",
"keywords": [

@@ -33,3 +33,3 @@ "draftjs",

"dependencies": {
"fbjs": "^0.8.7",
"fbjs": "^0.8.12",
"immutable": "~3.7.4",

@@ -44,3 +44,3 @@ "object-assign": "^4.1.0"

"babel-core": "^6.8.0",
"babel-eslint": "^6.1.2",
"babel-eslint": "^7.2.3",
"babel-preset-fbjs": "^2.1.0",

@@ -50,9 +50,11 @@ "del": "^2.2.0",

"es6-shim": "^0.34.4",
"eslint": "^3.0.1",
"eslint-config-fbjs": "^1.1.0",
"eslint-plugin-babel": "^3.3.0",
"eslint": "^4.2.0",
"eslint-config-fbjs": "^2.0.0",
"eslint-plugin-babel": "^4.1.1",
"eslint-plugin-flowtype": "^2.17.1",
"eslint-plugin-react": "^5.2.2",
"fbjs-scripts": "^0.7.0",
"flow-bin": "^0.42.0",
"eslint-plugin-jsx-a11y": "^6.0.2",
"eslint-plugin-react": "^7.3.0",
"eslint-plugin-relay": "^0.0.8",
"fbjs-scripts": "^0.8.0",
"flow-bin": "^0.53.1",
"gulp": "^3.9.0",

@@ -79,3 +81,3 @@ "gulp-babel": "^6.1.2",

"devEngines": {
"node": "4.x || 6.x",
"node": "6.x",
"npm": "2.x || 3.x"

@@ -82,0 +84,0 @@ },

Sorry, the diff of this file is not supported yet

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

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

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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