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

@humany/utils

Package Overview
Dependencies
Maintainers
4
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@humany/utils - npm Package Compare versions

Comparing version 2.0.2 to 2.1.0

lib-esm/html-parent-contains.d.ts

12

lib-esm/append-class-names.js

@@ -1,7 +0,5 @@

var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};

@@ -52,3 +50,3 @@ import { Logger } from '.';

if (process.env.NODE_ENV !== 'production') {
Logger.warn.apply(Logger, __spreadArrays(['appendClassNames: arguments either have' +
Logger.warn.apply(Logger, __spreadArray(['appendClassNames: arguments either have' +
'to be a string or [boolean, ...string[]]. Passed args:'], args));

@@ -55,0 +53,0 @@ }

@@ -0,1 +1,2 @@

import { Container } from '@webprovisions/platform';
declare type Item = {

@@ -5,2 +6,3 @@ id: string;

title: string;
symbol?: any;
};

@@ -12,3 +14,4 @@ declare type ChildParentStructure = {

export declare const getCategoryTrailAsObjects: (trail: string[], categories: Item[]) => Map<string, Item>;
export declare const buildCategoryTrail: (routeName: string, categoryIds: string | string[], container: Container, dataType?: 'guide-categories' | 'contact-method-categories') => Promise<any[]>;
export {};
//# sourceMappingURL=category-trail.d.ts.map

@@ -0,2 +1,4 @@

import createParams from './create-params';
import { default as findCategoryById } from './find-category-by-id';
import formatUrl from './format-url';
function childParentStructure(items, structure, parent) {

@@ -40,1 +42,41 @@ if (structure === void 0) { structure = {}; }

};
export var buildCategoryTrail = function (routeName, categoryIds, container, dataType) {
if (dataType === void 0) { dataType = 'guide-categories'; }
return container.getAsync('dataClient').then(function (dataClient) {
return dataClient
.fetch(dataType, { expandCategories: 'descendants' })
.then(function (_a) {
var categories = _a.categories;
var buildTrail = function (id) {
var trail = categoryTrail(id, categories);
var objectTrail = getCategoryTrailAsObjects(trail, categories);
var result = [];
trail.forEach(function (categoryId) {
var category = objectTrail.get(categoryId);
if (category) {
result.push({
routeName: routeName,
title: category.title,
symbol: category.symbol,
id: category.id,
routeParams: dataType === 'contact-method-categories' ?
createParams({ contactCategory: category.id, uriName: formatUrl(category.title) }) :
createParams({ guideCategory: category.id, uriName: formatUrl(category.title) }),
});
}
});
return result;
};
if (Array.isArray(categoryIds)) {
return categoryIds.reduce(function (acc, id) {
var result = buildTrail(id);
if (result.length > 0) {
acc.push(result);
}
return acc;
}, []);
}
return buildTrail(categoryIds);
});
});
};

@@ -14,3 +14,3 @@ var __rest = (this && this.__rest) || function (s, e) {

if (args === void 0) { args = {}; }
var _a = args.phrase, phrase = _a === void 0 ? '' : _a, category = args.category, guideCategory = args.guideCategory, contactCategory = args.contactCategory, take = args.take, connectionKey = args.connectionKey, id = args.id, uriName = args.uriName, sorting = args.sorting, tag = args.tag, tagId = args.tagId, tagTitle = args.tagTitle, other = __rest(args, ["phrase", "category", "guideCategory", "contactCategory", "take", "connectionKey", "id", "uriName", "sorting", "tag", "tagId", "tagTitle"]);
var _a = args.phrase, phrase = _a === void 0 ? '' : _a, category = args.category, guideCategory = args.guideCategory, contactCategory = args.contactCategory, take = args.take, connectionKey = args.connectionKey, accordion = args.accordion, id = args.id, uriName = args.uriName, sorting = args.sorting, tag = args.tag, tagId = args.tagId, tagTitle = args.tagTitle, other = __rest(args, ["phrase", "category", "guideCategory", "contactCategory", "take", "connectionKey", "accordion", "id", "uriName", "sorting", "tag", "tagId", "tagTitle"]);
var params = {};

@@ -92,2 +92,5 @@ Object

}
if (typeof accordion === 'string' && accordion.length > 0) {
params.accordion = accordion;
}
if (typeof tag === 'string' && tag !== '0') {

@@ -94,0 +97,0 @@ params.tag = tag;

@@ -1,7 +0,5 @@

var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};

@@ -26,5 +24,5 @@ /**

if (typeof msgOrObj === 'string') {
return print.apply(void 0, __spreadArrays(["[humany] " + msgOrObj], args));
return print.apply(void 0, __spreadArray(["[humany] " + msgOrObj], args));
}
return print.apply(void 0, __spreadArrays([msgOrObj], args));
return print.apply(void 0, __spreadArray([msgOrObj], args));
};

@@ -101,3 +99,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.log], args));
return print.apply(void 0, __spreadArray([console.log], args));
};

@@ -112,3 +110,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.warn], args));
return print.apply(void 0, __spreadArray([console.warn], args));
};

@@ -123,3 +121,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.error], args));
return print.apply(void 0, __spreadArray([console.error], args));
};

@@ -134,3 +132,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.info], args));
return print.apply(void 0, __spreadArray([console.info], args));
};

@@ -137,0 +135,0 @@ return Logger;

@@ -5,3 +5,3 @@ export { default as camilize } from './camilize';

export { default as findCategoryById } from './find-category-by-id';
export { categoryTrail, getCategoryTrailAsObjects } from './category-trail';
export { categoryTrail, getCategoryTrailAsObjects, buildCategoryTrail } from './category-trail';
export { default as formatUrl } from './format-url';

@@ -24,2 +24,3 @@ export { default as uuid } from './uuid';

export { default as notifyDataLoaded } from './notify-data-loaded';
export { default as htmlParentContains } from './html-parent-contains';
//# sourceMappingURL=index.d.ts.map

@@ -5,3 +5,3 @@ export { default as camilize } from './camilize';

export { default as findCategoryById } from './find-category-by-id';
export { categoryTrail, getCategoryTrailAsObjects } from './category-trail';
export { categoryTrail, getCategoryTrailAsObjects, buildCategoryTrail } from './category-trail';
export { default as formatUrl } from './format-url';

@@ -24,1 +24,2 @@ export { default as uuid } from './uuid';

export { default as notifyDataLoaded } from './notify-data-loaded';
export { default as htmlParentContains } from './html-parent-contains';
"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleFunctionArgument = exports.append = exports.uniqueClassArray = void 0;
var _1 = require(".");

@@ -57,3 +56,3 @@ function uniqueClassArray(classNames) {

if (process.env.NODE_ENV !== 'production') {
_1.Logger.warn.apply(_1.Logger, __spreadArrays(['appendClassNames: arguments either have' +
_1.Logger.warn.apply(_1.Logger, __spreadArray(['appendClassNames: arguments either have' +
'to be a string or [boolean, ...string[]]. Passed args:'], args));

@@ -60,0 +59,0 @@ }

@@ -0,1 +1,2 @@

import { Container } from '@webprovisions/platform';
declare type Item = {

@@ -5,2 +6,3 @@ id: string;

title: string;
symbol?: any;
};

@@ -12,3 +14,4 @@ declare type ChildParentStructure = {

export declare const getCategoryTrailAsObjects: (trail: string[], categories: Item[]) => Map<string, Item>;
export declare const buildCategoryTrail: (routeName: string, categoryIds: string | string[], container: Container, dataType?: 'guide-categories' | 'contact-method-categories') => Promise<any[]>;
export {};
//# sourceMappingURL=category-trail.d.ts.map

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

Object.defineProperty(exports, "__esModule", { value: true });
exports.buildCategoryTrail = exports.getCategoryTrailAsObjects = exports.categoryTrail = void 0;
var create_params_1 = __importDefault(require("./create-params"));
var find_category_by_id_1 = __importDefault(require("./find-category-by-id"));
var format_url_1 = __importDefault(require("./format-url"));
function childParentStructure(items, structure, parent) {

@@ -38,3 +41,3 @@ if (structure === void 0) { structure = {}; }

exports.categoryTrail = categoryTrail;
exports.getCategoryTrailAsObjects = function (trail, categories) {
var getCategoryTrailAsObjects = function (trail, categories) {
if (typeof trail === 'undefined' || typeof categories === 'undefined') {

@@ -48,1 +51,43 @@ return new Map();

};
exports.getCategoryTrailAsObjects = getCategoryTrailAsObjects;
var buildCategoryTrail = function (routeName, categoryIds, container, dataType) {
if (dataType === void 0) { dataType = 'guide-categories'; }
return container.getAsync('dataClient').then(function (dataClient) {
return dataClient
.fetch(dataType, { expandCategories: 'descendants' })
.then(function (_a) {
var categories = _a.categories;
var buildTrail = function (id) {
var trail = categoryTrail(id, categories);
var objectTrail = exports.getCategoryTrailAsObjects(trail, categories);
var result = [];
trail.forEach(function (categoryId) {
var category = objectTrail.get(categoryId);
if (category) {
result.push({
routeName: routeName,
title: category.title,
symbol: category.symbol,
id: category.id,
routeParams: dataType === 'contact-method-categories' ?
create_params_1.default({ contactCategory: category.id, uriName: format_url_1.default(category.title) }) :
create_params_1.default({ guideCategory: category.id, uriName: format_url_1.default(category.title) }),
});
}
});
return result;
};
if (Array.isArray(categoryIds)) {
return categoryIds.reduce(function (acc, id) {
var result = buildTrail(id);
if (result.length > 0) {
acc.push(result);
}
return acc;
}, []);
}
return buildTrail(categoryIds);
});
});
};
exports.buildCategoryTrail = buildCategoryTrail;

@@ -16,3 +16,3 @@ "use strict";

if (args === void 0) { args = {}; }
var _a = args.phrase, phrase = _a === void 0 ? '' : _a, category = args.category, guideCategory = args.guideCategory, contactCategory = args.contactCategory, take = args.take, connectionKey = args.connectionKey, id = args.id, uriName = args.uriName, sorting = args.sorting, tag = args.tag, tagId = args.tagId, tagTitle = args.tagTitle, other = __rest(args, ["phrase", "category", "guideCategory", "contactCategory", "take", "connectionKey", "id", "uriName", "sorting", "tag", "tagId", "tagTitle"]);
var _a = args.phrase, phrase = _a === void 0 ? '' : _a, category = args.category, guideCategory = args.guideCategory, contactCategory = args.contactCategory, take = args.take, connectionKey = args.connectionKey, accordion = args.accordion, id = args.id, uriName = args.uriName, sorting = args.sorting, tag = args.tag, tagId = args.tagId, tagTitle = args.tagTitle, other = __rest(args, ["phrase", "category", "guideCategory", "contactCategory", "take", "connectionKey", "accordion", "id", "uriName", "sorting", "tag", "tagId", "tagTitle"]);
var params = {};

@@ -94,2 +94,5 @@ Object

}
if (typeof accordion === 'string' && accordion.length > 0) {
params.accordion = accordion;
}
if (typeof tag === 'string' && tag !== '0') {

@@ -96,0 +99,0 @@ params.tag = tag;

"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.debugLog = void 0;
/**

@@ -29,5 +28,5 @@ * Checks if process.env.NODE_ENV === 'production'

if (typeof msgOrObj === 'string') {
return print.apply(void 0, __spreadArrays(["[humany] " + msgOrObj], args));
return print.apply(void 0, __spreadArray(["[humany] " + msgOrObj], args));
}
return print.apply(void 0, __spreadArrays([msgOrObj], args));
return print.apply(void 0, __spreadArray([msgOrObj], args));
};

@@ -104,3 +103,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.log], args));
return print.apply(void 0, __spreadArray([console.log], args));
};

@@ -115,3 +114,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.warn], args));
return print.apply(void 0, __spreadArray([console.warn], args));
};

@@ -126,3 +125,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.error], args));
return print.apply(void 0, __spreadArray([console.error], args));
};

@@ -137,3 +136,3 @@ /**

}
return print.apply(void 0, __spreadArrays([console.info], args));
return print.apply(void 0, __spreadArray([console.info], args));
};

@@ -140,0 +139,0 @@ return Logger;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkForEmptyCategories = void 0;
function checkForEmptyCategories(items, v) {

@@ -4,0 +5,0 @@ if (v === void 0) { v = false; }

@@ -5,3 +5,3 @@ export { default as camilize } from './camilize';

export { default as findCategoryById } from './find-category-by-id';
export { categoryTrail, getCategoryTrailAsObjects } from './category-trail';
export { categoryTrail, getCategoryTrailAsObjects, buildCategoryTrail } from './category-trail';
export { default as formatUrl } from './format-url';

@@ -24,2 +24,3 @@ export { default as uuid } from './uuid';

export { default as notifyDataLoaded } from './notify-data-loaded';
export { default as htmlParentContains } from './html-parent-contains';
//# sourceMappingURL=index.d.ts.map
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.htmlParentContains = exports.notifyDataLoaded = exports.createBatch = exports.findAndActivateStoredWidgets = exports.shallowCompare = exports.deepClone = exports.removeNullAndUndefinedValues = exports.lock = exports.hash = exports.kebabCase = exports.Logger = exports.debugLog = exports.dataURItoBlob = exports.formatDate = exports.setCookie = exports.getCookie = exports.WaitFor = exports.uuid = exports.formatUrl = exports.buildCategoryTrail = exports.getCategoryTrailAsObjects = exports.categoryTrail = exports.findCategoryById = exports.appendClassNames = exports.createParams = exports.camilize = void 0;
var camilize_1 = require("./camilize");
exports.camilize = camilize_1.default;
Object.defineProperty(exports, "camilize", { enumerable: true, get: function () { return __importDefault(camilize_1).default; } });
var create_params_1 = require("./create-params");
exports.createParams = create_params_1.default;
Object.defineProperty(exports, "createParams", { enumerable: true, get: function () { return __importDefault(create_params_1).default; } });
var append_class_names_1 = require("./append-class-names");
exports.appendClassNames = append_class_names_1.default;
Object.defineProperty(exports, "appendClassNames", { enumerable: true, get: function () { return __importDefault(append_class_names_1).default; } });
var find_category_by_id_1 = require("./find-category-by-id");
exports.findCategoryById = find_category_by_id_1.default;
Object.defineProperty(exports, "findCategoryById", { enumerable: true, get: function () { return __importDefault(find_category_by_id_1).default; } });
var category_trail_1 = require("./category-trail");
exports.categoryTrail = category_trail_1.categoryTrail;
exports.getCategoryTrailAsObjects = category_trail_1.getCategoryTrailAsObjects;
Object.defineProperty(exports, "categoryTrail", { enumerable: true, get: function () { return category_trail_1.categoryTrail; } });
Object.defineProperty(exports, "getCategoryTrailAsObjects", { enumerable: true, get: function () { return category_trail_1.getCategoryTrailAsObjects; } });
Object.defineProperty(exports, "buildCategoryTrail", { enumerable: true, get: function () { return category_trail_1.buildCategoryTrail; } });
var format_url_1 = require("./format-url");
exports.formatUrl = format_url_1.default;
Object.defineProperty(exports, "formatUrl", { enumerable: true, get: function () { return __importDefault(format_url_1).default; } });
var uuid_1 = require("./uuid");
exports.uuid = uuid_1.default;
Object.defineProperty(exports, "uuid", { enumerable: true, get: function () { return __importDefault(uuid_1).default; } });
var wait_for_1 = require("./wait-for");
exports.WaitFor = wait_for_1.default;
Object.defineProperty(exports, "WaitFor", { enumerable: true, get: function () { return __importDefault(wait_for_1).default; } });
var get_cookie_1 = require("./get-cookie");
exports.getCookie = get_cookie_1.default;
Object.defineProperty(exports, "getCookie", { enumerable: true, get: function () { return __importDefault(get_cookie_1).default; } });
var set_cookie_1 = require("./set-cookie");
exports.setCookie = set_cookie_1.default;
Object.defineProperty(exports, "setCookie", { enumerable: true, get: function () { return __importDefault(set_cookie_1).default; } });
var format_date_1 = require("./format-date");
exports.formatDate = format_date_1.default;
Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return __importDefault(format_date_1).default; } });
var data_uri_to_blob_1 = require("./data-uri-to-blob");
exports.dataURItoBlob = data_uri_to_blob_1.default;
Object.defineProperty(exports, "dataURItoBlob", { enumerable: true, get: function () { return __importDefault(data_uri_to_blob_1).default; } });
var debug_1 = require("./debug");
exports.debugLog = debug_1.debugLog;
exports.Logger = debug_1.Logger;
Object.defineProperty(exports, "debugLog", { enumerable: true, get: function () { return debug_1.debugLog; } });
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return debug_1.Logger; } });
var kebab_case_1 = require("./kebab-case");
exports.kebabCase = kebab_case_1.default;
Object.defineProperty(exports, "kebabCase", { enumerable: true, get: function () { return __importDefault(kebab_case_1).default; } });
var hash_1 = require("./hash");
exports.hash = hash_1.default;
Object.defineProperty(exports, "hash", { enumerable: true, get: function () { return __importDefault(hash_1).default; } });
var lock_1 = require("./lock");
exports.lock = lock_1.default;
Object.defineProperty(exports, "lock", { enumerable: true, get: function () { return __importDefault(lock_1).default; } });
var remove_null_and_undefined_values_1 = require("./remove-null-and-undefined-values");
exports.removeNullAndUndefinedValues = remove_null_and_undefined_values_1.default;
Object.defineProperty(exports, "removeNullAndUndefinedValues", { enumerable: true, get: function () { return __importDefault(remove_null_and_undefined_values_1).default; } });
var deep_clone_1 = require("./deep-clone");
exports.deepClone = deep_clone_1.default;
Object.defineProperty(exports, "deepClone", { enumerable: true, get: function () { return __importDefault(deep_clone_1).default; } });
var shallow_compare_1 = require("./shallow-compare");
exports.shallowCompare = shallow_compare_1.default;
Object.defineProperty(exports, "shallowCompare", { enumerable: true, get: function () { return __importDefault(shallow_compare_1).default; } });
var find_and_activate_stored_widgets_1 = require("./find-and-activate-stored-widgets");
exports.findAndActivateStoredWidgets = find_and_activate_stored_widgets_1.default;
Object.defineProperty(exports, "findAndActivateStoredWidgets", { enumerable: true, get: function () { return __importDefault(find_and_activate_stored_widgets_1).default; } });
var batch_1 = require("./batch");
exports.createBatch = batch_1.default;
Object.defineProperty(exports, "createBatch", { enumerable: true, get: function () { return __importDefault(batch_1).default; } });
var notify_data_loaded_1 = require("./notify-data-loaded");
exports.notifyDataLoaded = notify_data_loaded_1.default;
Object.defineProperty(exports, "notifyDataLoaded", { enumerable: true, get: function () { return __importDefault(notify_data_loaded_1).default; } });
var html_parent_contains_1 = require("./html-parent-contains");
Object.defineProperty(exports, "htmlParentContains", { enumerable: true, get: function () { return __importDefault(html_parent_contains_1).default; } });

@@ -1,2 +0,2 @@

Copyright © 2020, Telia Company AB. All rights reserved.
Copyright © 2021, Telia Company AB. All rights reserved.

@@ -3,0 +3,0 @@ THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF

{
"name": "@humany/utils",
"version": "2.0.2",
"version": "2.1.0",
"description": "Internal utilities used by Humany-authored packages.",

@@ -30,3 +30,3 @@ "license": "SEE LICENSE IN LICENSE.txt",

"dependencies": {
"@webprovisions/platform": "^1.1.0"
"@webprovisions/platform": "^1.1.1"
},

@@ -39,3 +39,3 @@ "devDependencies": {

},
"gitHead": "1c2893a6d01ac4b5caa01e4e89b8caac76ff282c"
"gitHead": "95f3a0d4fda53e0b1075d897b58dc7acf96313ad"
}

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