New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

espower-source

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

espower-source - npm Package Compare versions

Comparing version 0.7.0 to 0.7.1

8

index.js

@@ -8,3 +8,3 @@ /**

* Licensed under the MIT license.
* https://raw.github.com/twada/espower-source/master/MIT-LICENSE.txt
* https://github.com/twada/espower-source/blob/master/MIT-LICENSE.txt
*/

@@ -15,3 +15,3 @@ var espower = require('espower'),

merge = require('lodash.merge'),
sourceMap = require('convert-source-map');
convert = require('convert-source-map');

@@ -34,4 +34,4 @@ function espowerSourceToSource(jsCode, filepath, options) {

code = escodegenOutput.code; // Generated source code
map = sourceMap.fromJSON(escodegenOutput.map);
map.setProperty('sources', [filepath]);
map = convert.fromJSON(escodegenOutput.map.toString());
map.sourcemap.sourcesContent = [jsCode];
return code + '\n' + map.toComment() + '\n';

@@ -38,0 +38,0 @@ }

{
"name": "espower-source",
"version": "0.7.0",
"version": "0.7.1",
"description": "Power Assert instrumentor from source to source, with source-map",

@@ -36,3 +36,3 @@ "keywords": [

"espower": "~0.7.0",
"esprima": "~1.2.0",
"esprima": "~1.2.1",
"escodegen": "~1.3.2",

@@ -43,5 +43,5 @@ "convert-source-map": "~0.3.3",

"devDependencies": {
"expect.js": "~0.3.1",
"jshint": "~2.5.0",
"mocha": "~1.18.2"
"mocha": "~1.19.0",
"source-map": "~0.1.33"
},

@@ -55,5 +55,5 @@ "engines": {

"type": "MIT",
"url": "https://raw.github.com/twada/espower-source/master/MIT-LICENSE.txt"
"url": "https://github.com/twada/espower-source/blob/master/MIT-LICENSE.txt"
}
]
}

@@ -34,2 +34,2 @@ espower-source

---------------------------------------
Licensed under the [MIT](https://raw.github.com/twada/espower-source/master/MIT-LICENSE.txt) license.
Licensed under the [MIT](https://github.com/twada/espower-source/blob/master/MIT-LICENSE.txt) license.

@@ -26,2 +26,2 @@ var empower = require('empower'), formatter = require('power-assert-formatter'), busterAssertions = require('buster-assertions'), refute = empower(busterAssertions.refute, formatter(), {

}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvY3VzdG9taXplZC5qcyJdLCJuYW1lcyI6WyJlbXBvd2VyIiwicmVxdWlyZSIsImZvcm1hdHRlciIsImJ1c3RlckFzc2VydGlvbnMiLCJyZWZ1dGUiLCJ0YXJnZXRNZXRob2RzIiwib25lQXJnIiwidHdvQXJncyIsInRydXRoeSIsImZhbHN5IiwiX2V4cHIiLCJfY2FwdCIsImNvbnRlbnQiLCJmaWxlcGF0aCIsImxpbmUiLCJpc051bGwiLCJzYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFBLEdBQVVDLE9BQUEsQ0FBUSxTQUFSLENBQWQsRUFDSUMsU0FBQSxHQUFZRCxPQUFBLENBQVEsd0JBQVIsQ0FEaEIsRUFFSUUsZ0JBQUEsR0FBbUJGLE9BQUEsQ0FBUSxtQkFBUixDQUZ2QixFQUdJRyxNQUFBLEdBQVNKLE9BQUEsQ0FBUUcsZ0JBQUEsQ0FBaUJDLE1BQXpCLEVBQWlDRixTQUFBLEVBQWpDLEVBQThDO0FBQUEsUUFBRUcsYUFBQSxFQUFlO0FBQUEsWUFBRUMsTUFBQSxFQUFRLENBQUMsUUFBRCxDQUFWO0FBQUEsWUFBc0JDLE9BQUEsRUFBUyxDQUFDLE1BQUQsQ0FBL0I7QUFBQSxTQUFqQjtBQUFBLEtBQTlDLENBSGIsRUFJSUMsTUFBQSxHQUFTLE1BSmIsRUFLSUMsS0FBQSxHQUFRLE9BTFo7QUFNQUwsTUFBQSxDQUFPQSxNQUFBLENBQUFNLEtBQUEsQ0FBQU4sTUFBQSxDQUFBTyxLQUFBLENBQUFILE1BQUE7QUFBQSxJQUFBSSxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLElBQUE7QUFBQSxFQUFQLEVBTkE7QUFPQVYsTUFBQSxDQUFPVyxNQUFQLENBQWNYLE1BQUEsQ0FBQU0sS0FBQSxDQUFBTixNQUFBLENBQUFPLEtBQUEsQ0FBQUYsS0FBQTtBQUFBLElBQUFHLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQWQsRUFQQTtBQVFBVixNQUFBLENBQU9ZLElBQVAsQ0FBWVosTUFBQSxDQUFBTSxLQUFBLENBQUFOLE1BQUEsQ0FBQU8sS0FBQSxDQUFBSCxNQUFBO0FBQUEsSUFBQUksT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxJQUFBO0FBQUEsRUFBWixFQUFvQlYsTUFBQSxDQUFBTSxLQUFBLENBQUFOLE1BQUEsQ0FBQU8sS0FBQSxDQUFBRixLQUFBO0FBQUEsSUFBQUcsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxJQUFBO0FBQUEsRUFBcEIifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvY3VzdG9taXplZC5qcyJdLCJuYW1lcyI6WyJlbXBvd2VyIiwicmVxdWlyZSIsImZvcm1hdHRlciIsImJ1c3RlckFzc2VydGlvbnMiLCJyZWZ1dGUiLCJ0YXJnZXRNZXRob2RzIiwib25lQXJnIiwidHdvQXJncyIsInRydXRoeSIsImZhbHN5IiwiX2V4cHIiLCJfY2FwdCIsImNvbnRlbnQiLCJmaWxlcGF0aCIsImxpbmUiLCJpc051bGwiLCJzYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxPQUFBLEdBQVVDLE9BQUEsQ0FBUSxTQUFSLENBQWQsRUFDSUMsU0FBQSxHQUFZRCxPQUFBLENBQVEsd0JBQVIsQ0FEaEIsRUFFSUUsZ0JBQUEsR0FBbUJGLE9BQUEsQ0FBUSxtQkFBUixDQUZ2QixFQUdJRyxNQUFBLEdBQVNKLE9BQUEsQ0FBUUcsZ0JBQUEsQ0FBaUJDLE1BQXpCLEVBQWlDRixTQUFBLEVBQWpDLEVBQThDO0FBQUEsUUFBRUcsYUFBQSxFQUFlO0FBQUEsWUFBRUMsTUFBQSxFQUFRLENBQUMsUUFBRCxDQUFWO0FBQUEsWUFBc0JDLE9BQUEsRUFBUyxDQUFDLE1BQUQsQ0FBL0I7QUFBQSxTQUFqQjtBQUFBLEtBQTlDLENBSGIsRUFJSUMsTUFBQSxHQUFTLE1BSmIsRUFLSUMsS0FBQSxHQUFRLE9BTFo7QUFNQUwsTUFBQSxDQUFPQSxNQUFBLENBQUFNLEtBQUEsQ0FBQU4sTUFBQSxDQUFBTyxLQUFBLENBQUFILE1BQUE7QUFBQSxJQUFBSSxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLElBQUE7QUFBQSxFQUFQLEVBTkE7QUFPQVYsTUFBQSxDQUFPVyxNQUFQLENBQWNYLE1BQUEsQ0FBQU0sS0FBQSxDQUFBTixNQUFBLENBQUFPLEtBQUEsQ0FBQUYsS0FBQTtBQUFBLElBQUFHLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQWQsRUFQQTtBQVFBVixNQUFBLENBQU9ZLElBQVAsQ0FBWVosTUFBQSxDQUFBTSxLQUFBLENBQUFOLE1BQUEsQ0FBQU8sS0FBQSxDQUFBSCxNQUFBO0FBQUEsSUFBQUksT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxJQUFBO0FBQUEsRUFBWixFQUFvQlYsTUFBQSxDQUFBTSxLQUFBLENBQUFOLE1BQUEsQ0FBQU8sS0FBQSxDQUFBRixLQUFBO0FBQUEsSUFBQUcsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxJQUFBO0FBQUEsRUFBcEIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZW1wb3dlciA9IHJlcXVpcmUoJ2VtcG93ZXInKSxcbiAgICBmb3JtYXR0ZXIgPSByZXF1aXJlKCdwb3dlci1hc3NlcnQtZm9ybWF0dGVyJyksXG4gICAgYnVzdGVyQXNzZXJ0aW9ucyA9IHJlcXVpcmUoXCJidXN0ZXItYXNzZXJ0aW9uc1wiKSxcbiAgICByZWZ1dGUgPSBlbXBvd2VyKGJ1c3RlckFzc2VydGlvbnMucmVmdXRlLCBmb3JtYXR0ZXIoKSwgeyB0YXJnZXRNZXRob2RzOiB7IG9uZUFyZzogWydpc051bGwnXSwgdHdvQXJnczogWydzYW1lJ10gfSB9KSxcbiAgICB0cnV0aHkgPSAndHJ1ZScsXG4gICAgZmFsc3kgPSAnZmFsc2UnO1xucmVmdXRlKHRydXRoeSk7XG5yZWZ1dGUuaXNOdWxsKGZhbHN5KTtcbnJlZnV0ZS5zYW1lKHRydXRoeSwgZmFsc3kpO1xuIl19

@@ -16,2 +16,2 @@ var assert = require('power-assert'), truthy = 'true', falsy = 'false';

}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvZXhhbXBsZS5qcyJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZXF1aXJlIiwidHJ1dGh5IiwiZmFsc3kiLCJfZXhwciIsIl9jYXB0IiwiY29udGVudCIsImZpbGVwYXRoIiwibGluZSIsImVxdWFsIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxNQUFBLEdBQVNDLE9BQUEsQ0FBUSxjQUFSLENBQWIsRUFDSUMsTUFBQSxHQUFTLE1BRGIsRUFFSUMsS0FBQSxHQUFRLE9BRlo7QUFHQUgsTUFBQSxDQUFPQSxNQUFBLENBQUFJLEtBQUEsQ0FBQUosTUFBQSxDQUFBSyxLQUFBLENBQUFGLEtBQUE7QUFBQSxJQUFBRyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLElBQUE7QUFBQSxFQUFQLEVBSEE7QUFJQVIsTUFBQSxDQUFPUyxLQUFQLENBQWFULE1BQUEsQ0FBQUksS0FBQSxDQUFBSixNQUFBLENBQUFLLEtBQUEsQ0FBQUgsTUFBQTtBQUFBLElBQUFJLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQWIsRUFBcUJSLE1BQUEsQ0FBQUksS0FBQSxDQUFBSixNQUFBLENBQUFLLEtBQUEsQ0FBQUYsS0FBQTtBQUFBLElBQUFHLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQXJCIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZml4dHVyZXMvZXhhbXBsZS5qcyJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZXF1aXJlIiwidHJ1dGh5IiwiZmFsc3kiLCJfZXhwciIsIl9jYXB0IiwiY29udGVudCIsImZpbGVwYXRoIiwibGluZSIsImVxdWFsIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxNQUFBLEdBQVNDLE9BQUEsQ0FBUSxjQUFSLENBQWIsRUFDSUMsTUFBQSxHQUFTLE1BRGIsRUFFSUMsS0FBQSxHQUFRLE9BRlo7QUFHQUgsTUFBQSxDQUFPQSxNQUFBLENBQUFJLEtBQUEsQ0FBQUosTUFBQSxDQUFBSyxLQUFBLENBQUFGLEtBQUE7QUFBQSxJQUFBRyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLElBQUE7QUFBQSxFQUFQLEVBSEE7QUFJQVIsTUFBQSxDQUFPUyxLQUFQLENBQWFULE1BQUEsQ0FBQUksS0FBQSxDQUFBSixNQUFBLENBQUFLLEtBQUEsQ0FBQUgsTUFBQTtBQUFBLElBQUFJLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQWIsRUFBcUJSLE1BQUEsQ0FBQUksS0FBQSxDQUFBSixNQUFBLENBQUFLLEtBQUEsQ0FBQUYsS0FBQTtBQUFBLElBQUFHLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsSUFBQTtBQUFBLEVBQXJCIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFzc2VydCA9IHJlcXVpcmUoJ3Bvd2VyLWFzc2VydCcpLFxuICAgIHRydXRoeSA9ICd0cnVlJyxcbiAgICBmYWxzeSA9ICdmYWxzZSc7XG5hc3NlcnQoZmFsc3kpO1xuYXNzZXJ0LmVxdWFsKHRydXRoeSwgZmFsc3kpO1xuIl19
var sourceToSource = require('..'),
sourceMap = require('source-map'),
convert = require('convert-source-map'),
fs = require('fs'),
expect = require('expect.js');
assert = require('assert');
describe('with default options', function() {
beforeEach(function () {
var path = 'test/fixtures/example.js',
jsCode = fs.readFileSync(path, 'utf8');
this.output = sourceToSource(jsCode, path);
this.path = 'test/fixtures/example.js';
this.input = fs.readFileSync(this.path, 'utf8'),
this.output = sourceToSource(this.input, this.path);
this.map = convert.fromSource(this.output).toObject();
this.expected = fs.readFileSync('test/expected/example.js', 'utf8');
});
it('should return a string', function() {
expect(this.output).to.be.a('string');
assert.equal(typeof this.output, 'string');
});
it('should transform source', function() {
var expected = fs.readFileSync('test/expected/example.js', 'utf8');
expect(this.output).to.be(expected);
assert.equal(this.output, this.expected);
});
describe('generated sourceMap', function() {
testSourceMapCommonAttributes();
it('names', function () {
assert.deepEqual(this.map.names, ["assert","require","truthy","falsy","_expr","_capt","content","filepath","line","equal"]);
});
it('mappings', function () {
assert.equal(this.map.mappings, 'AAAA,IAAIA,MAAA,GAASC,OAAA,CAAQ,cAAR,CAAb,EACIC,MAAA,GAAS,MADb,EAEIC,KAAA,GAAQ,OAFZ;AAGAH,MAAA,CAAOA,MAAA,CAAAI,KAAA,CAAAJ,MAAA,CAAAK,KAAA,CAAAF,KAAA;AAAA,IAAAG,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAAP,EAHA;AAIAR,MAAA,CAAOS,KAAP,CAAaT,MAAA,CAAAI,KAAA,CAAAJ,MAAA,CAAAK,KAAA,CAAAH,MAAA;AAAA,IAAAI,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAAb,EAAqBR,MAAA,CAAAI,KAAA,CAAAJ,MAAA,CAAAK,KAAA,CAAAF,KAAA;AAAA,IAAAG,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAArB');
});
});
describe('consuming generated sourceMap', function () {
beforeEach(function () {
this.consumer = new sourceMap.SourceMapConsumer(this.map);
var mappings = [];
this.consumer.eachMapping(function (mapping) {
mappings.push(mapping);
});
this.mappings = mappings;
});
it('mapping count', function () {
assert.equal(this.mappings.length, 86);
});
it('mapping with names', function () {
var withNames = this.mappings.filter(function (mapping) { return mapping.name; });
assert.equal(withNames.length, 31);
});
it('originalPosition', function () {
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:4}),
{source:'test/fixtures/example.js',line:1,column:4,name:'assert'});
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:38}),
{source:'test/fixtures/example.js',line:2,column:4,name:'truthy'});
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:55}),
{source:'test/fixtures/example.js',line:3,column:4,name:'falsy'});
assert.deepEqual(this.consumer.originalPositionFor({line:7,column:7}),
{source:'test/fixtures/example.js',line:5,column:7,name:'equal'});
});
});
});
describe('with customized options', function() {
beforeEach(function () {
var path = 'test/fixtures/customized.js',
jsCode = fs.readFileSync(path, 'utf8');
this.output = sourceToSource(jsCode, path, {
this.path = 'test/fixtures/customized.js';
this.input = fs.readFileSync(this.path, 'utf8'),
this.output = sourceToSource(this.input, this.path, {
powerAssertVariableName: 'refute',

@@ -37,12 +79,76 @@ targetMethods: {

});
this.map = convert.fromSource(this.output).toObject();
this.expected = fs.readFileSync('test/expected/customized.js', 'utf8');
});
it('should return a string', function() {
expect(this.output).to.be.a('string');
assert.equal(typeof this.output, 'string');
});
it('should transform source', function() {
var expected = fs.readFileSync('test/expected/customized.js', 'utf8');
expect(this.output).to.be(expected);
assert.equal(this.output, this.expected);
});
describe('generated sourceMap', function() {
testSourceMapCommonAttributes();
it('names', function () {
assert.deepEqual(this.map.names, ["empower","require","formatter","busterAssertions","refute","targetMethods","oneArg","twoArgs","truthy","falsy","_expr","_capt","content","filepath","line","isNull","same"]);
});
it('mappings', function () {
assert.equal(this.map.mappings, 'AAAA,IAAIA,OAAA,GAAUC,OAAA,CAAQ,SAAR,CAAd,EACIC,SAAA,GAAYD,OAAA,CAAQ,wBAAR,CADhB,EAEIE,gBAAA,GAAmBF,OAAA,CAAQ,mBAAR,CAFvB,EAGIG,MAAA,GAASJ,OAAA,CAAQG,gBAAA,CAAiBC,MAAzB,EAAiCF,SAAA,EAAjC,EAA8C;AAAA,QAAEG,aAAA,EAAe;AAAA,YAAEC,MAAA,EAAQ,CAAC,QAAD,CAAV;AAAA,YAAsBC,OAAA,EAAS,CAAC,MAAD,CAA/B;AAAA,SAAjB;AAAA,KAA9C,CAHb,EAIIC,MAAA,GAAS,MAJb,EAKIC,KAAA,GAAQ,OALZ;AAMAL,MAAA,CAAOA,MAAA,CAAAM,KAAA,CAAAN,MAAA,CAAAO,KAAA,CAAAH,MAAA;AAAA,IAAAI,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAAP,EANA;AAOAV,MAAA,CAAOW,MAAP,CAAcX,MAAA,CAAAM,KAAA,CAAAN,MAAA,CAAAO,KAAA,CAAAF,KAAA;AAAA,IAAAG,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAAd,EAPA;AAQAV,MAAA,CAAOY,IAAP,CAAYZ,MAAA,CAAAM,KAAA,CAAAN,MAAA,CAAAO,KAAA,CAAAH,MAAA;AAAA,IAAAI,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAAZ,EAAoBV,MAAA,CAAAM,KAAA,CAAAN,MAAA,CAAAO,KAAA,CAAAF,KAAA;AAAA,IAAAG,OAAA;AAAA,IAAAC,QAAA;AAAA,IAAAC,IAAA;AAAA,EAApB');
});
});
describe('consuming generated sourceMap', function () {
beforeEach(function () {
this.consumer = new sourceMap.SourceMapConsumer(this.map);
var mappings = [];
this.consumer.eachMapping(function (mapping) {
mappings.push(mapping);
});
this.mappings = mappings;
});
it('mapping count', function () {
assert.equal(this.mappings.length, 161);
});
it('mapping with names', function () {
var withNames = this.mappings.filter(function (mapping) { return mapping.name; });
assert.equal(withNames.length, 53);
});
it('originalPosition', function () {
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:34}),
{source:'test/fixtures/customized.js',line:2,column:4,name:'formatter'});
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:81}),
{source:'test/fixtures/customized.js',line:3,column:4,name:'busterAssertions'});
assert.deepEqual(this.consumer.originalPositionFor({line:1,column:130}),
{source:'test/fixtures/customized.js',line:4,column:4,name:'refute'});
assert.deepEqual(this.consumer.originalPositionFor({line:6,column:8}),
{source:'test/fixtures/customized.js',line:5,column:4,name:'truthy'});
assert.deepEqual(this.consumer.originalPositionFor({line:6,column:25}),
{source:'test/fixtures/customized.js',line:6,column:4,name:'falsy'});
assert.deepEqual(this.consumer.originalPositionFor({line:12,column:7}),
{source:'test/fixtures/customized.js',line:8,column:7,name:'isNull'});
assert.deepEqual(this.consumer.originalPositionFor({line:17,column:7}),
{source:'test/fixtures/customized.js',line:9,column:7,name:'same'});
});
});
});
function testSourceMapCommonAttributes() {
it('version', function () {
assert.equal(this.map.version, 3);
});
it('sources', function () {
assert.deepEqual(this.map.sources, [this.path]);
});
it('sourceRoot', function () {
assert(this.map.sourceRoot === undefined);
});
it('sourcesContent', function () {
assert.deepEqual(this.map.sourcesContent, [this.input]);
});
it('file', function () {
assert(this.map.file === undefined);
});
}
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