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

@isaac.frontend/testcafe-reporter-allure

Package Overview
Dependencies
Maintainers
8
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@isaac.frontend/testcafe-reporter-allure - npm Package Compare versions

Comparing version 1.1.0 to 1.1.1

50

CHANGELOG.md

@@ -6,2 +6,52 @@ # Changelog

### [1.1.1](https://github.com/isaaceindhoven/testcafe-reporter-allure/compare/v1.1.0...v1.1.1) (2021-04-30)
### ⚠ BREAKING CHANGES
* **node:** Drop v10 support
### Bug Fixes
* **steps:** validate testRunInfo ([ebef196](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/ebef196f92d6be34f2da61f33f4a439a7c0c644b))
### Refactors
* **config:** replace merge-anything with lodash ([88979e9](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/88979e9793a69a892972e774ec1a4deb01b541aa))
### Chores
* **deps:** fix npm vulnerabilities ([a4e161f](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/a4e161faa026be1e823b0f03957e80f3eef4c4c6))
* **deps:** update actions/setup-node action to v2 ([e4c7a57](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/e4c7a577d1859216e39f0404352ef0c898d92340))
* **deps:** update all dependencies ([56e8544](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/56e85448f847f3920b084995b0f911daebcdc240))
* **deps:** update all non-major dependencies ([eea9649](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/eea9649caabc7a3c84b827e5eb101c09e2f8f7af))
* **deps:** update all non-major dependencies ([e3f1b4a](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/e3f1b4a706239039a311312644422276d3806961))
* **deps:** update all non-major dependencies ([ed8be30](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/ed8be301ca91b92e0f7ff0ed570216af7cb4ad95))
* **deps:** update all non-major dependencies ([c07e2fc](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/c07e2fceddd6b2ce6df4507497c72f25fbb05a17))
* **deps:** update all non-major dependencies ([a4e2932](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/a4e2932909701e2245970a39806380bba7e9bd6b))
* **deps:** update all non-major dependencies ([25e0f75](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/25e0f7580918f318f58933d206d25a195ca45cda))
* **deps:** update all non-major dependencies ([a93af57](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/a93af570d5b0aaa61840c69b5bf6e983586f7831))
* **deps:** update all non-major dependencies ([3250d67](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/3250d6733d8aa80473bdfcc3ed1e5e94ac000a45))
* **deps:** update all non-major dependencies ([414cd0d](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/414cd0da6df19e4b3f93605c292f60033bb1e255))
* **deps:** update all non-major dependencies ([48f2b10](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/48f2b10e897d29c4dc7f77200039321fb360490f))
* **deps:** update all non-major dependencies ([25e3dab](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/25e3dab1be02e9cd5325d446e6a1ee555f1e0ef1))
* **deps:** update all non-major dependencies ([64567ef](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/64567ef4b0fca3c1593b5b4b85fb32a80e20a29e))
* **deps:** update all non-major dependencies ([1923679](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/192367995cad7f8bd68e9addd8af030cb9565fdb))
* **deps:** update all non-major dependencies ([29873e1](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/29873e14d1072ef2473fd9f0e99d5b026102312d))
* **deps:** update all non-major dependencies ([b3eff6f](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/b3eff6f5e3840b6912807111dcb8f8b2f0cf86d3))
* **deps:** update all non-major dependencies ([17c03d6](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/17c03d66b166987f9aab41d1507a54288320164a))
* **deps:** update all non-major dependencies ([268c3b5](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/268c3b541b602b2c7c6c931fad77c12b35e1655c))
* **deps:** update commitlint monorepo to v12 ([e130945](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/e130945b145891c90ebd9b739be0d6ab69f23884))
* **deps:** update dependency @rollup/plugin-typescript to v8 ([e6bc255](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/e6bc2551409b01046e0a6fd36bd11cc37ba57803))
* **deps:** update dependency eslint-config-prettier to v7 ([ceaaadc](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/ceaaadc83fb8e6f90dba6ac0d259c98718e70f00))
* **deps:** update dependency eslint-config-prettier to v8 ([50f9501](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/50f9501573393001f801d0def9c48c2e76633b10))
* **deps:** update dependency husky to v5 ([d06a5cf](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/d06a5cf9ed2f2f04b7b45c9f180ad152a4d4035c))
* **deps:** update dependency merge-anything to v4 ([143fc75](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/143fc75c6d7314e2d1031521dd830265dfdcbbcb))
* **deps:** update dependency semantic-release to v17.2.3 [security] ([c9606da](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/c9606dadface0e03212c65ca2142e2e65cdc67fc))
* **deps:** update node.js to v14.16.1 ([55ccceb](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/55cccebb44137359996fef4426b84e709f03cd1a))
* **node:** Drop v10 support ([535d6ff](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/535d6ff7ae3f8288683866a59733a2d2783d689a))
* **node:** update to 14, test on 12, 14 and 16 ([e8389ae](https://github.com/isaaceindhoven/testcafe-reporter-allure/commit/e8389aea1235bfc465ea0b0821e9b6d30b7d84c2))
## [1.1.0](https://github.com/isaaceindhoven/testcafe-reporter-allure/compare/v1.0.3...v1.1.0) (2020-10-30)

@@ -8,0 +58,0 @@

7

dist/index.d.ts
import { AllureConfig } from 'allure-js-commons';
import { TestRunInfo } from './testcafe/models';
export default function (): {
declare const _default: () => {
allureReporter: any;

@@ -8,7 +8,8 @@ allureConfig: any;

preloadConfig(allureConfig: AllureConfig): void;
reportTaskStart(startTime: Date, userAgents: string[], testCount: number): Promise<void>;
reportTaskStart(startTime: Date, userAgents: string[]): Promise<void>;
reportFixtureStart(name: string, path: string, meta: object): Promise<void>;
reportTestStart(name: string, meta: object): Promise<void>;
reportTestDone(name: string, testRunInfo: TestRunInfo, meta: object): Promise<void>;
reportTaskDone(endTime: Date, passed: number, warnings: string[], result: object): Promise<void>;
reportTaskDone(): Promise<void>;
};
export default _default;

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

var fs = require('fs');
var mergeAnything = require('merge-anything');
var lodash = require('lodash');
var path = require('path');

@@ -13,2 +13,24 @@ var rimraf = require('rimraf');

function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () {
return e[k];
}
});
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
var path__namespace = /*#__PURE__*/_interopNamespace(path);
var rimraf__default = /*#__PURE__*/_interopDefaultLegacy(rimraf);

@@ -136,3 +158,3 @@

/* eslint-disable-next-line import/no-dynamic-require,global-require */
customConfig = require(path.resolve(process.cwd(), configFile));
customConfig = require(path__namespace.resolve(process.cwd(), configFile));
}

@@ -146,3 +168,3 @@ catch (error) {

var customConfig = loadCustomConfig(defaultReporterConfig.REPORTER_CONFIG_FILE);
var mergedConfig = mergeAnything.merge(defaultReporterConfig, customConfig);
var mergedConfig = lodash.defaultsDeep(defaultReporterConfig, customConfig);
return mergedConfig;

@@ -158,3 +180,3 @@ }

var reporterConfig = loadReporterConfig();
var reporterConfig$4 = loadReporterConfig();
var TestStep = /** @class */ (function () {

@@ -172,3 +194,3 @@ function TestStep(name, screenshotAmount) {

else {
this.name = reporterConfig.LABEL.DEFAULT_STEP_NAME;
this.name = reporterConfig$4.LABEL.DEFAULT_STEP_NAME;
}

@@ -216,3 +238,3 @@ }

var reporterConfig$1 = loadReporterConfig();
var reporterConfig$3 = loadReporterConfig();
var Metadata = /** @class */ (function () {

@@ -280,3 +302,3 @@ function Metadata(meta, test) {

// If no severity is given, set the default severity
test.addLabel(allureJsCommons.LabelName.SEVERITY, reporterConfig$1.META.SEVERITY);
test.addLabel(allureJsCommons.LabelName.SEVERITY, reporterConfig$3.META.SEVERITY);
}

@@ -309,3 +331,3 @@ // Tests can be added to multiple suites at the same time.

if (this.issue) {
test.addLink("" + reporterConfig$1.META.ISSUE_URL + this.issue, reporterConfig$1.LABEL.ISSUE + ": " + this.issue, allureJsCommons.LinkType.ISSUE);
test.addLink("" + reporterConfig$3.META.ISSUE_URL + this.issue, reporterConfig$3.LABEL.ISSUE + ": " + this.issue, allureJsCommons.LinkType.ISSUE);
}

@@ -320,3 +342,3 @@ if (this.description) {

// However currenly allure-js-commons does not seem to support flaky tests.
test.addParameter(reporterConfig$1.LABEL.FLAKY, this.flaky.toString());
test.addParameter(reporterConfig$3.LABEL.FLAKY, this.flaky.toString());
}

@@ -526,3 +548,3 @@ Array.from(this.otherMeta.entries()).map(function (entry) {

var allureStep = test.startStep(testStep.name);
if (testStep.screenshotAmount && testStep.screenshotAmount > 0) {
if (testRunInfo && testStep.screenshotAmount && testStep.screenshotAmount > 0) {
for (var j = 0; j < testStep.screenshotAmount; j += 1) {

@@ -556,3 +578,3 @@ var screenshot = testRunInfo.screenshots[screenshotIndex];

AllureReporter.prototype.addScreenshotAttachment = function (test, screenshot) {
if (screenshot.screenshotPath && fs.existsSync(screenshot.screenshotPath)) {
if (screenshot.screenshotPath && fs__namespace.existsSync(screenshot.screenshotPath)) {
var screenshotName = void 0;

@@ -569,3 +591,3 @@ if (screenshot.takenOnFail) {

}
var img = fs.readFileSync(screenshot.screenshotPath);
var img = fs__namespace.readFileSync(screenshot.screenshotPath);
var file = this.runtime.writeAttachment(img, allureJsCommons.ContentType.PNG);

@@ -630,3 +652,3 @@ test.addAttachment(screenshotName, allureJsCommons.ContentType.PNG, file);

var reporterConfig$3 = loadReporterConfig();
var reporterConfig$1 = loadReporterConfig();
function deleteFolderContents(dataPath) {

@@ -652,4 +674,4 @@ return __awaiter(this, void 0, void 0, function () {

case 0:
if (!reporterConfig$3.CLEAN_RESULT_DIR) return [3 /*break*/, 2];
return [4 /*yield*/, deleteFolderContents(path.resolve(process.cwd(), reporterConfig$3.RESULT_DIR))];
if (!reporterConfig$1.CLEAN_RESULT_DIR) return [3 /*break*/, 2];
return [4 /*yield*/, deleteFolderContents(path__namespace.resolve(process.cwd(), reporterConfig$1.RESULT_DIR))];
case 1:

@@ -659,4 +681,4 @@ _a.sent();

case 2:
if (!reporterConfig$3.CLEAN_REPORT_DIR) return [3 /*break*/, 4];
return [4 /*yield*/, deleteFolderContents(path.resolve(process.cwd(), reporterConfig$3.REPORT_DIR))];
if (!reporterConfig$1.CLEAN_REPORT_DIR) return [3 /*break*/, 4];
return [4 /*yield*/, deleteFolderContents(path__namespace.resolve(process.cwd(), reporterConfig$1.REPORT_DIR))];
case 3:

@@ -666,4 +688,4 @@ _a.sent();

case 4:
if (!reporterConfig$3.CLEAN_SCREENSHOT_DIR) return [3 /*break*/, 6];
return [4 /*yield*/, deleteFolderContents(path.resolve(process.cwd(), reporterConfig$3.SCREENSHOT_DIR))];
if (!reporterConfig$1.CLEAN_SCREENSHOT_DIR) return [3 /*break*/, 6];
return [4 /*yield*/, deleteFolderContents(path__namespace.resolve(process.cwd(), reporterConfig$1.SCREENSHOT_DIR))];
case 5:

@@ -678,5 +700,5 @@ _a.sent();

var reporterConfig$4 = loadReporterConfig();
var reporterConfig = loadReporterConfig();
function log(reporter, text) {
if (reporterConfig$4.ENABLE_LOGGING) {
if (reporterConfig.ENABLE_LOGGING) {
reporter.write(text).newline();

@@ -686,72 +708,70 @@ }

function index () {
return {
allureReporter: null,
allureConfig: null,
/* Used to get the reporter for unittesting itself. */
getReporter: function () {
return this;
},
preloadConfig: function (allureConfig) {
this.allureConfig = allureConfig;
},
reportTaskStart: function (startTime, userAgents, testCount) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
log(this, 'Starting Task');
this.allureReporter = new AllureReporter(this.allureConfig, userAgents);
// Clean the previous allure results
return [4 /*yield*/, cleanAllureFolders()];
case 1:
// Clean the previous allure results
_a.sent();
return [2 /*return*/];
}
});
var index = (function () { return ({
allureReporter: null,
allureConfig: null,
/* Used to get the reporter for unittesting itself. */
getReporter: function () {
return this;
},
preloadConfig: function (allureConfig) {
this.allureConfig = allureConfig;
},
reportTaskStart: function (startTime, userAgents) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
log(this, 'Starting Task');
this.allureReporter = new AllureReporter(this.allureConfig, userAgents);
// Clean the previous allure results
return [4 /*yield*/, cleanAllureFolders()];
case 1:
// Clean the previous allure results
_a.sent();
return [2 /*return*/];
}
});
},
reportFixtureStart: function (name, path, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Starting Fixture: " + name);
// End the previous group because testcafe does not trigger the reporter when a fixture ends.
this.allureReporter.endGroup();
this.allureReporter.startGroup(name, meta);
return [2 /*return*/];
});
});
},
reportFixtureStart: function (name, path, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Starting Fixture: " + name);
// End the previous group because testcafe does not trigger the reporter when a fixture ends.
this.allureReporter.endGroup();
this.allureReporter.startGroup(name, meta);
return [2 /*return*/];
});
},
reportTestStart: function (name, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Starting Test: " + name);
this.allureReporter.startTest(name, meta);
return [2 /*return*/];
});
});
},
reportTestStart: function (name, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Starting Test: " + name);
this.allureReporter.startTest(name, meta);
return [2 /*return*/];
});
},
reportTestDone: function (name, testRunInfo, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Ending Test: " + name);
this.allureReporter.endTest(name, testRunInfo, meta);
return [2 /*return*/];
});
});
},
reportTestDone: function (name, testRunInfo, meta) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, "Ending Test: " + name);
this.allureReporter.endTest(name, testRunInfo, meta);
return [2 /*return*/];
});
},
reportTaskDone: function (endTime, passed, warnings, result) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, 'Ending Task');
this.allureReporter.endGroup();
this.allureReporter.setGlobals();
return [2 /*return*/];
});
});
},
reportTaskDone: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
log(this, 'Ending Task');
this.allureReporter.endGroup();
this.allureReporter.setGlobals();
return [2 /*return*/];
});
},
};
}
});
},
}); });
module.exports = index;

@@ -6,5 +6,27 @@ 'use strict';

var allureJsCommons = require('allure-js-commons');
var mergeAnything = require('merge-anything');
var lodash = require('lodash');
var path = require('path');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () {
return e[k];
}
});
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var path__namespace = /*#__PURE__*/_interopNamespace(path);
/*! *****************************************************************************

@@ -88,3 +110,3 @@ Copyright (c) Microsoft Corporation.

};
var defaultCategoriesConfig = [
[
{

@@ -119,3 +141,3 @@ name: 'Ignored tests',

/* eslint-disable-next-line import/no-dynamic-require,global-require */
customConfig = require(path.resolve(process.cwd(), configFile));
customConfig = require(path__namespace.resolve(process.cwd(), configFile));
}

@@ -129,7 +151,7 @@ catch (error) {

var customConfig = loadCustomConfig(defaultReporterConfig.REPORTER_CONFIG_FILE);
var mergedConfig = mergeAnything.merge(defaultReporterConfig, customConfig);
var mergedConfig = lodash.defaultsDeep(defaultReporterConfig, customConfig);
return mergedConfig;
}
var reporterConfig = loadReporterConfig();
var reporterConfig$1 = loadReporterConfig();
var TestStep = /** @class */ (function () {

@@ -147,3 +169,3 @@ function TestStep(name, screenshotAmount) {

else {
this.name = reporterConfig.LABEL.DEFAULT_STEP_NAME;
this.name = reporterConfig$1.LABEL.DEFAULT_STEP_NAME;
}

@@ -193,3 +215,3 @@ }

testStep = new TestStep(name);
if (reporterConfig.ENABLE_SCREENSHOTS) {
if (reporterConfig$1.ENABLE_SCREENSHOTS) {
stepPromise = stepPromise.takeScreenshot();

@@ -204,3 +226,3 @@ testStep.registerScreenshot();

var reporterConfig$1 = loadReporterConfig();
var reporterConfig = loadReporterConfig();

@@ -213,3 +235,3 @@ Object.defineProperty(exports, 'Severity', {

});
exports.reporterConfig = reporterConfig$1;
exports.reporterConfig = reporterConfig;
exports.step = step;
{
"name": "@isaac.frontend/testcafe-reporter-allure",
"version": "1.1.0",
"version": "1.1.1",
"author": "ISAAC E-commerce Solutions BV",
"license": "MIT",
"description": "An Allure reporter plugin for TestCafé. Used to generate test reports for e2e-tests.",
"engines": {
"node": ">=12"
},
"keywords": [

@@ -29,3 +32,2 @@ "testcafé",

"test:unit:watch": "jest --config=jest.config.js --watch",
"pretest:e2e": "npm run build",
"test:e2e": "node tests/runner.js",

@@ -46,41 +48,41 @@ "test:e2e:allure": "npm run test:e2e && npm run allure",

"allure-js-commons": "^2.0.0-beta.8",
"merge-anything": "^3.0.3",
"lodash": "^4.17.21",
"rimraf": "^3.0.2",
"uuid": "^8.3.1"
"uuid": "^8.3.2"
},
"devDependencies": {
"@commitlint/cli": "11.0.0",
"@commitlint/config-conventional": "11.0.0",
"@rollup/plugin-typescript": "6.1.0",
"@commitlint/cli": "^12.1.1",
"@commitlint/config-conventional": "^12.1.1",
"@rollup/plugin-typescript": "^8.2.1",
"@semantic-release/changelog": "5.0.1",
"@semantic-release/commit-analyzer": "8.0.1",
"@semantic-release/git": "9.0.0",
"@semantic-release/npm": "7.0.6",
"@semantic-release/release-notes-generator": "9.0.1",
"@types/jest": "26.0.15",
"@semantic-release/npm": "^7.1.1",
"@semantic-release/release-notes-generator": "^9.0.2",
"@types/jest": "^26.0.23",
"@types/rimraf": "3.0.0",
"@types/uuid": "8.3.0",
"@typescript-eslint/eslint-plugin": "4.6.0",
"@typescript-eslint/parser": "4.6.0",
"allure-commandline": "2.13.0",
"@typescript-eslint/eslint-plugin": "^4.22.0",
"@typescript-eslint/parser": "^4.22.0",
"allure-commandline": "2.13.8",
"callsite-record": "4.1.3",
"eslint": "7.12.1",
"eslint-config-airbnb-typescript": "12.0.0",
"eslint-config-prettier": "6.15.0",
"eslint": "^7.25.0",
"eslint-config-airbnb-typescript": "12.3.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jest": "24.1.0",
"eslint-plugin-prettier": "3.1.4",
"husky": "4.3.0",
"jest": "26.6.1",
"lint-staged": "10.5.0",
"normalize-newline": "3.0.0",
"prettier": "2.1.2",
"rollup": "2.32.1",
"rollup-plugin-typescript2": "0.28.0",
"semantic-release": "17.2.2",
"testcafe": "1.9.4",
"ts-jest": "26.4.3",
"typescript": "4.0.5",
"vuepress": "1.7.1"
"eslint-plugin-jest": "^24.3.6",
"eslint-plugin-prettier": "^3.4.0",
"husky": "^6.0.0",
"jest": "26.6.3",
"lint-staged": "10.5.4",
"normalize-newline": "^3.0.0",
"prettier": "2.2.1",
"rollup": "^2.46.0",
"rollup-plugin-typescript2": "0.30.0",
"semantic-release": "^17.4.2",
"testcafe": "^1.14.0",
"ts-jest": "^26.5.5",
"typescript": "^4.2.4",
"vuepress": "1.8.2"
}
}
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