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

datagrid

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

datagrid - npm Package Compare versions

Comparing version 0.4.6 to 0.5.0

4

declaration/core/index.d.ts

@@ -17,4 +17,4 @@ /**

export interface DataGridOptions {
th?: (column: ColumnObj, index: number) => string | Node;
td?: (column: ColumnObj, row: Row, columnIndex: number, rowIndex: number) => string | Node;
th?: (column: ColumnObj, index: number, th: HTMLTableHeaderCellElement) => string | Node | undefined;
td?: (column: ColumnObj, row: Row, td: HTMLTableDataCellElement, columnIndex: number, rowIndex: number) => string | Node | undefined;
parent?: BaseGrid;

@@ -21,0 +21,0 @@ sortBlock?: SortBlock;

@@ -8,2 +8,3 @@ import * as g from '../../core';

new (...args: any[]): {
fixedHeaderWrapper: HTMLDivElement;
fixedTHead: HTMLTableSectionElement;

@@ -10,0 +11,0 @@ fixedTheadRow: HTMLTableRowElement;

/*!
* datagrid v0.4.6
* datagrid v0.5.0
* https://github.com/lmk123/datagrid

@@ -34,3 +34,3 @@ * Released under the MIT License.

__$styleInject(".datagrid{position:relative}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);
__$styleInject(".datagrid{position:relative;overflow:hidden}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);

@@ -72,2 +72,4 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;

function fillNode(node, content) {
if (content === undefined)
{ return; }
if (content instanceof Node) {

@@ -135,3 +137,3 @@ node.appendChild(content);

var th = document.createElement('th');
fillNode(th, this$1.options.th(column, index));
fillNode(th, this$1.options.th(column, index, th));
this$1.emit('after th render', th, column, index);

@@ -157,4 +159,4 @@ fragment.appendChild(th);

var td = document.createElement('td');
fillNode(td, this$1.options.td(column, row, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, rowIndex, columnIndex);
fillNode(td, this$1.options.td(column, row, td, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, td, rowIndex, columnIndex);
tr.appendChild(td);

@@ -215,11 +217,2 @@ });

// https://caniuse.com/#feat=requestanimationframe
var raf = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
// @ts-ignore
window.mozRequestAnimationFrame ||
function (cb) {
setTimeout(cb, 1000 / 60);
};
/** 默认情况下使用 join 将参数转换成一个字符串作为唯一的缓存键 */

@@ -280,4 +273,5 @@ function generate(args) {

__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;right:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
// import { raf } from '../../utils/raf-throttle'
var fixedHeader = function (Base) {

@@ -290,2 +284,3 @@ return (function (Base) {

Base.apply(this, args);
this.fixedHeaderWrapper = document.createElement('div');
this.fixedTHead = document.createElement('thead');

@@ -299,8 +294,6 @@ this.fixedTheadRow = document.createElement('tr');

ui.thead.style.visibility = 'hidden';
// 创建一个包含表头的 div,通过 CSS 固定在滚动区域上方
var fixedHeaderWrapper = document.createElement('div');
fixedHeaderWrapper.className = 'fixed-header';
// 创建一个仅包含 thead 的表格作为固定表头
// 使用 colgroup 保持原本的表格与固定表头的单元格宽度一致
var ref$1 = this;
var fixedHeaderWrapper = ref$1.fixedHeaderWrapper;
var fixedHeaderTable = ref$1.fixedHeaderTable;

@@ -310,2 +303,3 @@ var colGroup = ref$1.colGroup;

var fixedTheadRow = ref$1.fixedTheadRow;
fixedHeaderWrapper.className = 'fixed-header';
ui.fixedThead = fixedTHead;

@@ -350,5 +344,11 @@ ui.fixedTheadRow = fixedTheadRow;

this.colGroup.innerHTML = Array.prototype.reduce.call(theadRow.children, function (result, th) {
// 这里不能用 clientWidth,偶尔会有 1px 的偏差
return (result += "<col width=\"" + (th.offsetWidth) + "\">");
}, '');
this.fixedHeaderTable.style.width = table.offsetWidth + 'px';
// 保证主表格的固定表头始终露出右侧的竖向滚动条
if (!this.parent) {
this.fixedHeaderWrapper.style.width =
this.ui.scrollContainer.clientWidth + 'px';
}
// 同步表头的高度

@@ -359,11 +359,5 @@ this.fixedTheadRow.style.height = theadRow.offsetHeight + 'px';

anonymous.prototype.setData = function setData (data) {
var this$1 = this;
Base.prototype.setData.call(this, data);
this.fixedTheadRow.innerHTML = this.ui.theadRow.innerHTML;
// 需要等到 fixedTable 中的 syncFixedWidth 更新完之后再同步宽度,
// 不然会出现 header 宽度不一致的问题
raf(function () {
this$1.syncFixedHeader();
});
this.syncFixedHeader();
};

@@ -496,2 +490,3 @@ anonymous.prototype.destroy = function destroy () {

fixedTable.fixedColumns = count;
this.syncFixedWidth(place);
fixedTable.setData({

@@ -504,3 +499,2 @@ columns: place === 'left'

fixedTable.el.style.display = '';
this.syncFixedWidth(place);
};

@@ -538,2 +532,11 @@ /**

fixedTable.ui.colgroup.innerHTML = colHtml;
var ref$1 = this.ui;
var scrollContainer = ref$1.scrollContainer;
// 将固定表格的高度设为主表格的内容高度,这样做是为了露出主表格的横向滚动条
fixedTable.el.style.height = scrollContainer.clientHeight + 'px';
// 将右侧固定表格的右偏移值设为主表格的竖向滚动条的宽度以露出主表格的竖向滚动条
if (place === 'right') {
fixedTable.el.style.right =
scrollContainer.offsetWidth - scrollContainer.clientWidth + 'px';
}
// 目前的做法是根据表格内容平铺表格,不会导致换行,所以暂时注释掉同步高度的代码

@@ -743,2 +746,3 @@ // 同步表头的高度

Base.apply(this, args);
this.selectionIndex = -1;
if (!this.parent) {

@@ -795,4 +799,6 @@ var ref = this;

// 刷新表格前重置选中状态
this.selectionIndex = -1;
this.emit('select', -1);
if (this.selectionIndex !== -1) {
this.selectionIndex = -1;
this.emit('select', -1);
}
Base.prototype.setData.call(this, data);

@@ -799,0 +805,0 @@ };

/*!
* datagrid v0.4.6
* datagrid v0.5.0
* https://github.com/lmk123/datagrid

@@ -28,3 +28,3 @@ * Released under the MIT License.

__$styleInject(".datagrid{position:relative}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);
__$styleInject(".datagrid{position:relative;overflow:hidden}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);

@@ -66,2 +66,4 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;

function fillNode(node, content) {
if (content === undefined)
{ return; }
if (content instanceof Node) {

@@ -129,3 +131,3 @@ node.appendChild(content);

var th = document.createElement('th');
fillNode(th, this$1.options.th(column, index));
fillNode(th, this$1.options.th(column, index, th));
this$1.emit('after th render', th, column, index);

@@ -151,4 +153,4 @@ fragment.appendChild(th);

var td = document.createElement('td');
fillNode(td, this$1.options.td(column, row, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, rowIndex, columnIndex);
fillNode(td, this$1.options.td(column, row, td, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, td, rowIndex, columnIndex);
tr.appendChild(td);

@@ -209,11 +211,2 @@ });

// https://caniuse.com/#feat=requestanimationframe
var raf = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
// @ts-ignore
window.mozRequestAnimationFrame ||
function (cb) {
setTimeout(cb, 1000 / 60);
};
/** 默认情况下使用 join 将参数转换成一个字符串作为唯一的缓存键 */

@@ -274,4 +267,5 @@ function generate(args) {

__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;right:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
// import { raf } from '../../utils/raf-throttle'
var fixedHeader = function (Base) {

@@ -284,2 +278,3 @@ return (function (Base) {

Base.apply(this, args);
this.fixedHeaderWrapper = document.createElement('div');
this.fixedTHead = document.createElement('thead');

@@ -293,8 +288,6 @@ this.fixedTheadRow = document.createElement('tr');

ui.thead.style.visibility = 'hidden';
// 创建一个包含表头的 div,通过 CSS 固定在滚动区域上方
var fixedHeaderWrapper = document.createElement('div');
fixedHeaderWrapper.className = 'fixed-header';
// 创建一个仅包含 thead 的表格作为固定表头
// 使用 colgroup 保持原本的表格与固定表头的单元格宽度一致
var ref$1 = this;
var fixedHeaderWrapper = ref$1.fixedHeaderWrapper;
var fixedHeaderTable = ref$1.fixedHeaderTable;

@@ -304,2 +297,3 @@ var colGroup = ref$1.colGroup;

var fixedTheadRow = ref$1.fixedTheadRow;
fixedHeaderWrapper.className = 'fixed-header';
ui.fixedThead = fixedTHead;

@@ -344,5 +338,11 @@ ui.fixedTheadRow = fixedTheadRow;

this.colGroup.innerHTML = Array.prototype.reduce.call(theadRow.children, function (result, th) {
// 这里不能用 clientWidth,偶尔会有 1px 的偏差
return (result += "<col width=\"" + (th.offsetWidth) + "\">");
}, '');
this.fixedHeaderTable.style.width = table.offsetWidth + 'px';
// 保证主表格的固定表头始终露出右侧的竖向滚动条
if (!this.parent) {
this.fixedHeaderWrapper.style.width =
this.ui.scrollContainer.clientWidth + 'px';
}
// 同步表头的高度

@@ -353,11 +353,5 @@ this.fixedTheadRow.style.height = theadRow.offsetHeight + 'px';

anonymous.prototype.setData = function setData (data) {
var this$1 = this;
Base.prototype.setData.call(this, data);
this.fixedTheadRow.innerHTML = this.ui.theadRow.innerHTML;
// 需要等到 fixedTable 中的 syncFixedWidth 更新完之后再同步宽度,
// 不然会出现 header 宽度不一致的问题
raf(function () {
this$1.syncFixedHeader();
});
this.syncFixedHeader();
};

@@ -490,2 +484,3 @@ anonymous.prototype.destroy = function destroy () {

fixedTable.fixedColumns = count;
this.syncFixedWidth(place);
fixedTable.setData({

@@ -498,3 +493,2 @@ columns: place === 'left'

fixedTable.el.style.display = '';
this.syncFixedWidth(place);
};

@@ -532,2 +526,11 @@ /**

fixedTable.ui.colgroup.innerHTML = colHtml;
var ref$1 = this.ui;
var scrollContainer = ref$1.scrollContainer;
// 将固定表格的高度设为主表格的内容高度,这样做是为了露出主表格的横向滚动条
fixedTable.el.style.height = scrollContainer.clientHeight + 'px';
// 将右侧固定表格的右偏移值设为主表格的竖向滚动条的宽度以露出主表格的竖向滚动条
if (place === 'right') {
fixedTable.el.style.right =
scrollContainer.offsetWidth - scrollContainer.clientWidth + 'px';
}
// 目前的做法是根据表格内容平铺表格,不会导致换行,所以暂时注释掉同步高度的代码

@@ -737,2 +740,3 @@ // 同步表头的高度

Base.apply(this, args);
this.selectionIndex = -1;
if (!this.parent) {

@@ -789,4 +793,6 @@ var ref = this;

// 刷新表格前重置选中状态
this.selectionIndex = -1;
this.emit('select', -1);
if (this.selectionIndex !== -1) {
this.selectionIndex = -1;
this.emit('select', -1);
}
Base.prototype.setData.call(this, data);

@@ -793,0 +799,0 @@ };

/*!
* datagrid v0.4.6
* datagrid v0.5.0
* https://github.com/lmk123/datagrid

@@ -83,3 +83,3 @@ * Released under the MIT License.

__$styleInject(".datagrid{position:relative}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);
__$styleInject(".datagrid{position:relative;overflow:hidden}.datagrid .modal{display:none;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fff}.datagrid.show-modal .modal{display:-webkit-box;display:-ms-flexbox;display:flex}.datagrid .scroll-container{height:100%;overflow:scroll}.datagrid table{min-width:100%;border-collapse:collapse;border-spacing:0}.datagrid td{word-wrap:break-word;word-break:break-all}",undefined);

@@ -121,2 +121,4 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;

function fillNode(node, content) {
if (content === undefined)
{ return; }
if (content instanceof Node) {

@@ -184,3 +186,3 @@ node.appendChild(content);

var th = document.createElement('th');
fillNode(th, this$1.options.th(column, index));
fillNode(th, this$1.options.th(column, index, th));
this$1.emit('after th render', th, column, index);

@@ -206,4 +208,4 @@ fragment.appendChild(th);

var td = document.createElement('td');
fillNode(td, this$1.options.td(column, row, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, rowIndex, columnIndex);
fillNode(td, this$1.options.td(column, row, td, columnIndex, rowIndex));
this$1.emit('after td render', td, column, row, td, rowIndex, columnIndex);
tr.appendChild(td);

@@ -264,11 +266,2 @@ });

// https://caniuse.com/#feat=requestanimationframe
var raf = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
// @ts-ignore
window.mozRequestAnimationFrame ||
function (cb) {
setTimeout(cb, 1000 / 60);
};
/** 默认情况下使用 join 将参数转换成一个字符串作为唯一的缓存键 */

@@ -329,4 +322,5 @@ function generate(args) {

__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;right:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
__$styleInject(".datagrid .fixed-header{position:absolute;top:0;left:0;background-color:#fff;overflow:hidden}.datagrid .fixed-header table{will-change:transform}",undefined);
// import { raf } from '../../utils/raf-throttle'
var fixedHeader = function (Base) {

@@ -339,2 +333,3 @@ return (function (Base) {

Base.apply(this, args);
this.fixedHeaderWrapper = document.createElement('div');
this.fixedTHead = document.createElement('thead');

@@ -348,8 +343,6 @@ this.fixedTheadRow = document.createElement('tr');

ui.thead.style.visibility = 'hidden';
// 创建一个包含表头的 div,通过 CSS 固定在滚动区域上方
var fixedHeaderWrapper = document.createElement('div');
fixedHeaderWrapper.className = 'fixed-header';
// 创建一个仅包含 thead 的表格作为固定表头
// 使用 colgroup 保持原本的表格与固定表头的单元格宽度一致
var ref$1 = this;
var fixedHeaderWrapper = ref$1.fixedHeaderWrapper;
var fixedHeaderTable = ref$1.fixedHeaderTable;

@@ -359,2 +352,3 @@ var colGroup = ref$1.colGroup;

var fixedTheadRow = ref$1.fixedTheadRow;
fixedHeaderWrapper.className = 'fixed-header';
ui.fixedThead = fixedTHead;

@@ -399,5 +393,11 @@ ui.fixedTheadRow = fixedTheadRow;

this.colGroup.innerHTML = Array.prototype.reduce.call(theadRow.children, function (result, th) {
// 这里不能用 clientWidth,偶尔会有 1px 的偏差
return (result += "<col width=\"" + (th.offsetWidth) + "\">");
}, '');
this.fixedHeaderTable.style.width = table.offsetWidth + 'px';
// 保证主表格的固定表头始终露出右侧的竖向滚动条
if (!this.parent) {
this.fixedHeaderWrapper.style.width =
this.ui.scrollContainer.clientWidth + 'px';
}
// 同步表头的高度

@@ -408,11 +408,5 @@ this.fixedTheadRow.style.height = theadRow.offsetHeight + 'px';

anonymous.prototype.setData = function setData (data) {
var this$1 = this;
Base.prototype.setData.call(this, data);
this.fixedTheadRow.innerHTML = this.ui.theadRow.innerHTML;
// 需要等到 fixedTable 中的 syncFixedWidth 更新完之后再同步宽度,
// 不然会出现 header 宽度不一致的问题
raf(function () {
this$1.syncFixedHeader();
});
this.syncFixedHeader();
};

@@ -545,2 +539,3 @@ anonymous.prototype.destroy = function destroy () {

fixedTable.fixedColumns = count;
this.syncFixedWidth(place);
fixedTable.setData({

@@ -553,3 +548,2 @@ columns: place === 'left'

fixedTable.el.style.display = '';
this.syncFixedWidth(place);
};

@@ -587,2 +581,11 @@ /**

fixedTable.ui.colgroup.innerHTML = colHtml;
var ref$1 = this.ui;
var scrollContainer = ref$1.scrollContainer;
// 将固定表格的高度设为主表格的内容高度,这样做是为了露出主表格的横向滚动条
fixedTable.el.style.height = scrollContainer.clientHeight + 'px';
// 将右侧固定表格的右偏移值设为主表格的竖向滚动条的宽度以露出主表格的竖向滚动条
if (place === 'right') {
fixedTable.el.style.right =
scrollContainer.offsetWidth - scrollContainer.clientWidth + 'px';
}
// 目前的做法是根据表格内容平铺表格,不会导致换行,所以暂时注释掉同步高度的代码

@@ -792,2 +795,3 @@ // 同步表头的高度

Base.apply(this, args);
this.selectionIndex = -1;
if (!this.parent) {

@@ -844,4 +848,6 @@ var ref = this;

// 刷新表格前重置选中状态
this.selectionIndex = -1;
this.emit('select', -1);
if (this.selectionIndex !== -1) {
this.selectionIndex = -1;
this.emit('select', -1);
}
Base.prototype.setData.call(this, data);

@@ -848,0 +854,0 @@ };

{
"name": "datagrid",
"version": "0.4.6",
"version": "0.5.0",
"description": "插件式表格组件。",

@@ -5,0 +5,0 @@ "repository": {

@@ -95,4 +95,4 @@ # DataGrid [![NPM Version](https://img.shields.io/npm/v/datagrid.svg?style=flat-square)](https://www.npmjs.com/package/datagrid)

* `th`:表格中的 `<th>` 元素的渲染函数。第一个参数是一个 `Column` 对象(详细介绍见下文),第二个参数是这个 Column 对象的索引号。可以返回一段 HTML 字符串,或者一个 `Node`,也可以返回一个包含多个元素的 `DocumentFragment`。默认返回 `Column` 对象中的 `key` 属性的值。
* `td`:表格中的 `<td>`元素的渲染函数。第一个参数是一个 `Column` 对象(详细介绍见下文),第二个参数是一个 `Row` 对象,第三个是 `Column` 对象的索引号,第四个是 `Row` 对象的索引号。可以返回一段 HTML 字符串,或者一个 `Node`,也可以返回一个包含多个元素的 `DocumentFragment`。默认返回 `Row` 对象中对应 `Column.key` 的值。
* `th`:表格中的 `<th>` 元素的渲染函数。第一个参数是一个 `Column` 对象(详细介绍见下文),第二个参数是这个 Column 对象的索引号。可以返回一段 HTML 字符串,或者一个 `Node`,也可以返回一个包含多个元素的 `DocumentFragment`。第三个参数是当前渲染的 `<th>` 元素,方便直接操作此元素的 `title` 等属性,当然你也可以通过这个元素直接设置内容。默认返回 `Column` 对象中的 `key` 属性的值。
* `td`:表格中的 `<td>`元素的渲染函数。第一个参数是一个 `Column` 对象(详细介绍见下文),第二个参数是一个 `Row` 对象,第三个参数是当前渲染的 `<td>` 元素,方便直接操作此元素的 `title` 等属性,当然你也可以通过这个元素直接设置内容。第四个是 `Column` 对象的索引号,第五个是 `Row` 对象的索引号。可以返回一段 HTML 字符串,或者一个 `Node`,也可以返回一个包含多个元素的 `DocumentFragment`。默认返回 `Row` 对象中对应 `Column.key` 的值。

@@ -220,4 +220,10 @@ 内置插件可能会添加其他一些设置项,后面介绍内置插件时会详细说明。

sort 插件给 BaseGrid 添加了一个方法:
#### setSort([columnIndex: number, order: number])
设置当前表格的选中状态指示标志。如果要清空指示标志不需要传入任何参数。
## 许可
MIT

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