Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot]
78e6a2bad0 Bump diff from 3.4.0 to 3.5.0
Bumps [diff](https://github.com/kpdecker/jsdiff) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/kpdecker/jsdiff/releases)
- [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v3.4.0...v3.5.0)

Signed-off-by: dependabot[bot] <support@github.com>
2019-11-09 07:02:37 +00:00
21 changed files with 74 additions and 344 deletions

View File

@@ -1,6 +1,6 @@
# Row selection # Row selection
`react-bootstrap-table2` supports the row selection feature. By passing prop `selectRow` to enable row selection. When you enable this feature, `react-bootstrap-table2` will prepend a new selection column. `react-bootstrap-table2` supports the row selection feature. By passing prop `selectRow` to enable row selection. When you enable this feature, `react-bootstrap-table2` will prepend a new selection column.
## Required ## Required
* [mode (**required**)](#mode) * [mode (**required**)](#mode)
@@ -11,8 +11,6 @@
* [classes)](#classes) * [classes)](#classes)
* [bgColor](#bgColor) * [bgColor](#bgColor)
* [nonSelectable)](#nonSelectable) * [nonSelectable)](#nonSelectable)
* [nonSelectableStyle](#nonSelectableStyle)
* [nonSelectableClasses](#nonSelectableClasses)
* [clickToSelect)](#clickToSelect) * [clickToSelect)](#clickToSelect)
* [clickToExpand)](#clickToExpand) * [clickToExpand)](#clickToExpand)
* [clickToEdit](#clickToEdit) * [clickToEdit](#clickToEdit)
@@ -141,54 +139,6 @@ const selectRow = {
}; };
``` ```
### <a name='nonSelectableStyle'>selectRow.nonSelectableStyle - [Object | Function]</a>
This prop allow you to customize the non selectable rows. `selectRow.nonSelectableStyle` accepts an style object
and a callback function for more flexible customization.
### Style Object
```js
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableStyle: { backgroundColor: 'gray' }
};
```
### Callback Function
```js
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableStyle: (row, rowIndex) => { return ...; }
};
```
### <a name='nonSelectableClasses'>selectRow.nonSelectableClasses - [String | Function]</a>
This prop allow you to set a custom class for the non selectable rows, or use a callback function for more
flexible customization
### String
```js
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableClasses: 'my-class'
};
```
### Callback Function
```js
const selectRow = {
mode: 'checkbox',
nonSelectable: [1, 3 ,5],
nonSelectableClasses: (row, rowIndex) => { return ...; }
};
```
### <a name='clickToSelect'>selectRow.clickToSelect - [Bool]</a> ### <a name='clickToSelect'>selectRow.clickToSelect - [Bool]</a>
Allow user to select row by clicking on the row. Allow user to select row by clicking on the row.
@@ -199,7 +149,7 @@ const selectRow = {
}; };
``` ```
> Note: When you also enable [cellEdit](./cell-edit.md), the `selectRow.clickToSelect` will deactivate the functionality of cell editing > Note: When you also enable [cellEdit](./cell-edit.md), the `selectRow.clickToSelect` will deactivate the functionality of cell editing
> If you want to click on row to select row and edit cell simultaneously, you are suppose to enable [`selectRow.clickToEdit`](#clickToEdit) > If you want to click on row to select row and edit cell simultaneously, you are suppose to enable [`selectRow.clickToEdit`](#clickToEdit)
### <a name='clickToExpand'>selectRow.clickToExpand - [Bool]</a> ### <a name='clickToExpand'>selectRow.clickToExpand - [Bool]</a>
@@ -357,7 +307,7 @@ const selectRow = {
mode: 'checkbox', mode: 'checkbox',
onSelectAll: (isSelect, rows, e) => { onSelectAll: (isSelect, rows, e) => {
if (isSelect && SOME_CONDITION) { if (isSelect && SOME_CONDITION) {
return [1, 3, 4]; // finally, key 1, 3, 4 will being selected return [1, 3, 4]; // finally, key 1, 3, 4 will being selected
} }
} }
}; };

View File

@@ -71,23 +71,6 @@ const columns = [{
/> />
`; `;
const selectRow = {
mode: 'checkbox',
clickToSelect: true
};
const expandRow = {
renderer: row => (
<div>
<p>{ `This Expand row is belong to rowKey ${row.id}` }</p>
<p>You can render anything here, also you can add additional data on every row object</p>
<p>expandRow.renderer callback will pass the origin row object to you</p>
</div>
),
showExpandColumn: true,
expandColumnPosition: 'right'
};
export default () => ( export default () => (
<div> <div>
<BootstrapTable <BootstrapTable
@@ -96,8 +79,6 @@ export default () => (
columns={ columns } columns={ columns }
filter={ filterFactory() } filter={ filterFactory() }
filterPosition="top" filterPosition="top"
expandRow={ expandRow }
selectRow={ selectRow }
/> />
<Code>{ sourceCode1 }</Code> <Code>{ sourceCode1 }</Code>
<BootstrapTable <BootstrapTable
@@ -106,8 +87,6 @@ export default () => (
columns={ columns } columns={ columns }
filter={ filterFactory() } filter={ filterFactory() }
filterPosition="bottom" filterPosition="bottom"
expandRow={ expandRow }
selectRow={ selectRow }
/> />
<Code>{ sourceCode2 }</Code> <Code>{ sourceCode2 }</Code>
</div> </div>

View File

@@ -1,61 +0,0 @@
import React from 'react';
import BootstrapTable from 'react-bootstrap-table-next';
import Code from 'components/common/code-block';
import { productsGenerator } from 'utils/common';
const products = productsGenerator();
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
nonSelectable: [0, 2, 4],
nonSelectableClasses: 'row-index-bigger-than-2101'
};
const sourceCode = `\
import BootstrapTable from 'react-bootstrap-table-next';
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
nonSelectable: [0, 2, 4],
nonSelectableClasses: 'row-index-bigger-than-2101'
};
<BootstrapTable
keyField='id'
data={ products }
columns={ columns }
selectRow={ selectRow }
/>
`;
export default () => (
<div>
<BootstrapTable keyField="id" data={ products } columns={ columns } selectRow={ selectRow } />
<Code>{ sourceCode }</Code>
</div>
);

View File

@@ -1,61 +0,0 @@
import React from 'react';
import BootstrapTable from 'react-bootstrap-table-next';
import Code from 'components/common/code-block';
import { productsGenerator } from 'utils/common';
const products = productsGenerator();
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
nonSelectable: [0, 2, 4],
nonSelectableStyle: { backgroundColor: 'gray' }
};
const sourceCode = `\
import BootstrapTable from 'react-bootstrap-table-next';
const columns = [{
dataField: 'id',
text: 'Product ID'
}, {
dataField: 'name',
text: 'Product Name'
}, {
dataField: 'price',
text: 'Product Price'
}];
const selectRow = {
mode: 'checkbox',
clickToSelect: true,
nonSelectable: [0, 2, 4],
nonSelectableStyle: { backgroundColor: 'gray' }
};
<BootstrapTable
keyField='id'
data={ products }
columns={ columns }
selectRow={ selectRow }
/>
`;
export default () => (
<div>
<BootstrapTable keyField="id" data={ products } columns={ columns } selectRow={ selectRow } />
<Code>{ sourceCode }</Code>
</div>
);

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-bootstrap-table2-example", "name": "react-bootstrap-table2-example",
"version": "1.0.35", "version": "1.0.32",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"private": true, "private": true,

View File

@@ -152,8 +152,6 @@ import HeaderStyleTable from 'examples/row-selection/header-style';
import HideSelectAllTable from 'examples/row-selection/hide-select-all'; import HideSelectAllTable from 'examples/row-selection/hide-select-all';
import CustomSelectionTable from 'examples/row-selection/custom-selection'; import CustomSelectionTable from 'examples/row-selection/custom-selection';
import NonSelectableRowsTable from 'examples/row-selection/non-selectable-rows'; import NonSelectableRowsTable from 'examples/row-selection/non-selectable-rows';
import NonSelectableRowsStyleTable from 'examples/row-selection/non-selectable-rows-style';
import NonSelectableRowsClassTable from 'examples/row-selection/non-selectable-rows-class';
import SelectionBgColorTable from 'examples/row-selection/selection-bgcolor'; import SelectionBgColorTable from 'examples/row-selection/selection-bgcolor';
import SelectionHooks from 'examples/row-selection/selection-hooks'; import SelectionHooks from 'examples/row-selection/selection-hooks';
import HideSelectionColumnTable from 'examples/row-selection/hide-selection-column'; import HideSelectionColumnTable from 'examples/row-selection/hide-selection-column';
@@ -412,8 +410,6 @@ storiesOf('Row Selection', module)
.add('Custom Selection', () => <CustomSelectionTable />) .add('Custom Selection', () => <CustomSelectionTable />)
.add('Selection Background Color', () => <SelectionBgColorTable />) .add('Selection Background Color', () => <SelectionBgColorTable />)
.add('Not Selectabled Rows', () => <NonSelectableRowsTable />) .add('Not Selectabled Rows', () => <NonSelectableRowsTable />)
.add('Not Selectabled Rows Style', () => <NonSelectableRowsStyleTable />)
.add('Not Selectabled Rows Class', () => <NonSelectableRowsClassTable />)
.add('Selection Hooks', () => <SelectionHooks />) .add('Selection Hooks', () => <SelectionHooks />)
.add('Hide Selection Column', () => <HideSelectionColumnTable />) .add('Hide Selection Column', () => <HideSelectionColumnTable />)
.add('Custom Selection Column Style', () => <SelectionColumnStyleTable />) .add('Custom Selection Column Style', () => <SelectionColumnStyleTable />)

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-bootstrap-table2-filter", "name": "react-bootstrap-table2-filter",
"version": "1.3.0", "version": "1.2.0",
"description": "it's a column filter addon for react-bootstrap-table2", "description": "it's a column filter addon for react-bootstrap-table2",
"main": "./lib/index.js", "main": "./lib/index.js",
"repository": { "repository": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-bootstrap-table-next", "name": "react-bootstrap-table-next",
"version": "3.3.2", "version": "3.2.1",
"description": "Next generation of react-bootstrap-table", "description": "Next generation of react-bootstrap-table",
"main": "./lib/index.js", "main": "./lib/index.js",
"repository": { "repository": {

View File

@@ -111,8 +111,6 @@ class BootstrapTable extends PropsBaseResolver(Component) {
currFilters={ this.props.currFilters } currFilters={ this.props.currFilters }
filterPosition={ this.props.filterPosition } filterPosition={ this.props.filterPosition }
onExternalFilter={ this.props.onExternalFilter } onExternalFilter={ this.props.onExternalFilter }
selectRow={ selectRow }
expandRow={ expandRow }
/> />
)} )}
<Body <Body
@@ -184,8 +182,6 @@ BootstrapTable.propTypes = {
style: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), style: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),
classes: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), classes: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
nonSelectable: PropTypes.array, nonSelectable: PropTypes.array,
nonSelectableStyle: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
nonSelectableClasses: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
bgColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), bgColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
hideSelectColumn: PropTypes.bool, hideSelectColumn: PropTypes.bool,
selectionRenderer: PropTypes.func, selectionRenderer: PropTypes.func,

View File

@@ -4,7 +4,6 @@ import PropTypes from 'prop-types';
import FiltersCell from './filters-cell'; import FiltersCell from './filters-cell';
import Const from './const'; import Const from './const';
import RowTemplate from './row/row-template';
const Filters = (props) => { const Filters = (props) => {
const { const {
@@ -13,33 +12,27 @@ const Filters = (props) => {
currFilters, currFilters,
filterPosition, filterPosition,
onExternalFilter, onExternalFilter,
className, className
selectRow,
expandRow
} = props; } = props;
function renderContent() { const filterColumns = [];
const filterColumns = []; let showFiltersRow = false;
let showFiltersRow = false;
columns.forEach((column, i) => { columns.forEach((column, i) => {
filterColumns.push(<FiltersCell filterColumns.push(<FiltersCell
index={ i } index={ i }
key={ column.dataField } column={ column }
column={ column } currFilters={ currFilters }
currFilters={ currFilters } onExternalFilter={ onExternalFilter }
onExternalFilter={ onExternalFilter } onFilter={ onFilter }
onFilter={ onFilter } />);
/>);
if (column.filterRenderer || column.filter) { if (column.filterRenderer || column.filter) {
if (!showFiltersRow) { if (!showFiltersRow) {
showFiltersRow = true; showFiltersRow = true;
}
} }
}); }
return filterColumns; });
}
return ( return (
<tbody <tbody
@@ -51,12 +44,7 @@ const Filters = (props) => {
: 'table-footer-group' : 'table-footer-group'
} } } }
> >
<RowTemplate <tr>{filterColumns}</tr>
renderContent={ renderContent }
selectRow={ selectRow }
expandRow={ expandRow }
cellEl="td"
/>
</tbody> </tbody>
); );
}; };
@@ -71,9 +59,7 @@ Filters.propTypes = {
]), ]),
currFilters: PropTypes.object, currFilters: PropTypes.object,
onExternalFilter: PropTypes.func, onExternalFilter: PropTypes.func,
className: PropTypes.string, className: PropTypes.string
selectRow: PropTypes.object,
expandRow: PropTypes.object
}; };
Filters.defaultProps = { Filters.defaultProps = {

View File

@@ -2,41 +2,57 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import RowTemplate from './row/row-template'; import Const from './const';
import FooterCell from './footer-cell'; import FooterCell from './footer-cell';
import _ from './utils'; import _ from './utils';
const Footer = (props) => { const Footer = (props) => {
const { data, className, columns, selectRow, expandRow } = props; const { data, className, columns, selectRow, expandRow } = props;
const SelectionFooterCellComp = () => <th />;
const ExpansionFooterCellComp = () => <th />;
function renderContent() { const isRenderFunctionColumnInLeft = (
return columns.map((column, i) => { position = Const.INDICATOR_POSITION_LEFT
if (column.footer === undefined || column.footer === null) { ) => position === Const.INDICATOR_POSITION_LEFT;
return false;
}
const columnData = _.pluck(data, column.dataField); const childrens = columns.map((column, i) => {
if (column.footer === undefined || column.footer === null) {
return false;
}
return ( const columnData = _.pluck(data, column.dataField);
<FooterCell
index={ i } return (
key={ column.dataField } <FooterCell
column={ column } index={ i }
columnData={ columnData } key={ column.dataField }
/> column={ column }
); columnData={ columnData }
}); />
);
});
if (selectRow && selectRow.hideSelectColumn !== true) {
if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) {
childrens.unshift(<SelectionFooterCellComp key="selection" />);
} else {
childrens.push(<SelectionFooterCellComp key="selection" />);
}
}
if (expandRow.showExpandColumn) {
if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) {
childrens.unshift(<ExpansionFooterCellComp key="expansion" />);
} else {
childrens.push(<ExpansionFooterCellComp key="expansion" />);
}
} }
return ( return (
<tfoot> <tfoot>
<RowTemplate <tr className={ className }>
renderContent={ renderContent } { childrens }
selectRow={ selectRow } </tr>
expandRow={ expandRow }
className={ className }
cellEl="th"
/>
</tfoot> </tfoot>
); );
}; };

View File

@@ -1,13 +1,7 @@
export default ExtendBase => export default ExtendBase =>
class ColumnResolver extends ExtendBase { class ColumnResolver extends ExtendBase {
visibleColumnSize(includeSelectColumn = true) { visibleColumnSize(includeSelectColumn = true) {
let columnLen; let columnLen = this.props.columns.filter(c => !c.hidden).length;
if (this.props.columnToggle && this.props.columnToggle.toggles) {
const columns = this.props.columnToggle.toggles;
columnLen = Object.keys(columns).filter(name => columns[name]).length;
} else {
columnLen = this.props.columns.filter(c => !c.hidden).length;
}
if (!includeSelectColumn) return columnLen; if (!includeSelectColumn) return columnLen;
if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) { if (this.props.selectRow && !this.props.selectRow.hideSelectColumn) {
columnLen += 1; columnLen += 1;

View File

@@ -44,7 +44,7 @@ export default class ExpandCell extends Component {
if (tabIndex !== -1) attrs.tabIndex = tabIndex; if (tabIndex !== -1) attrs.tabIndex = tabIndex;
return ( return (
<td className="expand-cell" onClick={ this.handleClick } { ...attrs }> <td onClick={ this.handleClick } { ...attrs }>
{ {
expandColumnRenderer ? expandColumnRenderer({ expandColumnRenderer ? expandColumnRenderer({
expandable, expandable,

View File

@@ -28,7 +28,7 @@ export default class ExpansionHeaderCell extends Component {
}; };
return ( return (
<th className="expand-cell-header" data-row-selection { ...attrs }> <th data-row-selection { ...attrs }>
{ {
expandHeaderColumnRenderer ? expandHeaderColumnRenderer ?
expandHeaderColumnRenderer({ isAnyExpands }) : expandHeaderColumnRenderer({ isAnyExpands }) :

View File

@@ -9,7 +9,6 @@ export default (Component) => {
const key = props.value; const key = props.value;
const selected = _.contains(selectRow.selected, key); const selected = _.contains(selectRow.selected, key);
const selectable = !selectRow.nonSelectable || !_.contains(selectRow.nonSelectable, key); const selectable = !selectRow.nonSelectable || !_.contains(selectRow.nonSelectable, key);
const notSelectable = _.contains(selectRow.nonSelectable, key);
let { let {
style, style,
@@ -39,22 +38,6 @@ export default (Component) => {
} }
} }
if (notSelectable) {
const notSelectableStyle = _.isFunction(selectRow.nonSelectableStyle)
? selectRow.nonSelectableStyle(props.row, props.rowIndex)
: selectRow.nonSelectableStyle;
const notSelectableClasses = _.isFunction(selectRow.nonSelectableClasses)
? selectRow.nonSelectableClasses(props.row, props.rowIndex)
: selectRow.nonSelectableClasses;
style = {
...style,
...notSelectableStyle
};
className = cs(className, notSelectableClasses) || undefined;
}
return ( return (
<Component <Component
{ ...props } { ...props }

View File

@@ -86,7 +86,7 @@ export default class SelectionCell extends Component {
<BootstrapContext.Consumer> <BootstrapContext.Consumer>
{ {
({ bootstrap4 }) => ( ({ bootstrap4 }) => (
<td className="selection-cell" onClick={ this.handleClick } { ...attrs }> <td onClick={ this.handleClick } { ...attrs }>
{ {
selectionRenderer ? selectionRenderer({ selectionRenderer ? selectionRenderer({
mode: inputType, mode: inputType,

View File

@@ -112,7 +112,7 @@ export default class SelectionHeaderCell extends Component {
); );
} }
return ( return (
<th className="selection-cell-header" data-row-selection { ...attrs }>{ content }</th> <th data-row-selection { ...attrs }>{ content }</th>
); );
} }
} }

View File

@@ -1,48 +0,0 @@
/* eslint react/require-default-props: 0 */
import React from 'react';
import PropTypes from 'prop-types';
import Const from '../const';
const RowTemplate = (props) => {
const {
renderContent,
selectRow,
expandRow,
cellEl,
...rest
} = props;
const isRenderFunctionColumnInLeft = (
position = Const.INDICATOR_POSITION_LEFT
) => position === Const.INDICATOR_POSITION_LEFT;
const childrens = renderContent() || [];
if (selectRow && selectRow.hideSelectColumn !== true) {
if (isRenderFunctionColumnInLeft(selectRow.selectColumnPosition)) {
childrens.unshift(React.createElement(cellEl, { key: 'selection' }));
} else {
childrens.push(React.createElement(cellEl, { key: 'selection' }));
}
}
if (expandRow.showExpandColumn) {
if (isRenderFunctionColumnInLeft(expandRow.expandColumnPosition)) {
childrens.unshift(React.createElement(cellEl, { key: 'expansion' }));
} else {
childrens.push(React.createElement(cellEl, { key: 'expansion' }));
}
}
return <tr { ...rest }>{ childrens }</tr>;
};
RowTemplate.propTypes = {
renderContent: PropTypes.func.isRequired,
cellEl: PropTypes.string.isRequired,
selectRow: PropTypes.object,
expandRow: PropTypes.object
};
export default RowTemplate;

View File

@@ -48,7 +48,7 @@ describe('Footer', () => {
describe('simplest footer', () => { describe('simplest footer', () => {
beforeEach(() => { beforeEach(() => {
wrapper = render( wrapper = shallow(
<Footer <Footer
data={ data } data={ data }
columns={ columns } columns={ columns }
@@ -61,7 +61,7 @@ describe('Footer', () => {
it('should render successfully', () => { it('should render successfully', () => {
expect(wrapper.length).toBe(1); expect(wrapper.length).toBe(1);
expect(wrapper.find('tr').length).toBe(1); expect(wrapper.find('tr').length).toBe(1);
expect(wrapper.find('th').length).toBe(columns.length); expect(wrapper.find(FooterCell).length).toBe(columns.length);
}); });
}); });
@@ -86,7 +86,7 @@ describe('Footer', () => {
}); });
}); });
describe('when selectRow prop is enable', () => { describe('when selecrRow prop is enable', () => {
beforeEach(() => { beforeEach(() => {
wrapper = render( wrapper = render(
<Footer <Footer

View File

@@ -2,7 +2,6 @@
exports[`<SelectionCell /> render should render component correctly 1`] = ` exports[`<SelectionCell /> render should render component correctly 1`] = `
<td <td
className="selection-cell"
onClick={[Function]} onClick={[Function]}
> >
<input <input

View File

@@ -2494,8 +2494,9 @@ detect-node@^2.0.3:
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
diff@^3.1.0, diff@^3.2.0: diff@^3.1.0, diff@^3.2.0:
version "3.4.0" version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
diffie-hellman@^5.0.0: diffie-hellman@^5.0.0:
version "5.0.2" version "5.0.2"