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

@expo/config-plugins

Package Overview
Dependencies
Maintainers
23
Versions
167
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@expo/config-plugins - npm Package Compare versions

Comparing version 4.1.1 to 4.1.2

build/android/BuildProperties.d.ts

4

build/android/index.d.ts
import * as AllowBackup from './AllowBackup';
import * as BuildProperties from './BuildProperties';
import * as Colors from './Colors';

@@ -7,3 +8,2 @@ import * as EasBuild from './EasBuild';

import * as IntentFilters from './IntentFilters';
import * as JsEngine from './JsEngine';
import * as Manifest from './Manifest';

@@ -26,2 +26,2 @@ import * as Name from './Name';

export { Manifest, Colors, Paths, Permissions, Properties, Resources, Scheme, Strings, Styles };
export { AllowBackup, EasBuild, GoogleMapsApiKey, GoogleServices, IntentFilters, Name, Orientation, Package, PrimaryColor, StatusBar, Updates, Version, JsEngine, WindowSoftInputMode, };
export { AllowBackup, BuildProperties, EasBuild, GoogleMapsApiKey, GoogleServices, IntentFilters, Name, Orientation, Package, PrimaryColor, StatusBar, Updates, Version, WindowSoftInputMode, };

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

});
exports.WindowSoftInputMode = exports.Version = exports.Updates = exports.Styles = exports.Strings = exports.StatusBar = exports.Scheme = exports.Resources = exports.Properties = exports.PrimaryColor = exports.Permissions = exports.Paths = exports.Package = exports.Orientation = exports.Name = exports.Manifest = exports.JsEngine = exports.IntentFilters = exports.GoogleServices = exports.GoogleMapsApiKey = exports.EasBuild = exports.Colors = exports.AllowBackup = void 0;
exports.WindowSoftInputMode = exports.Version = exports.Updates = exports.Styles = exports.Strings = exports.StatusBar = exports.Scheme = exports.Resources = exports.Properties = exports.PrimaryColor = exports.Permissions = exports.Paths = exports.Package = exports.Orientation = exports.Name = exports.Manifest = exports.IntentFilters = exports.GoogleServices = exports.GoogleMapsApiKey = exports.EasBuild = exports.Colors = exports.BuildProperties = exports.AllowBackup = void 0;

@@ -26,2 +26,19 @@ function AllowBackup() {

function BuildProperties() {
const data = _interopRequireWildcard(require("./BuildProperties"));
BuildProperties = function () {
return data;
};
return data;
}
Object.defineProperty(exports, "BuildProperties", {
enumerable: true,
get: function () {
return BuildProperties();
}
});
function Colors() {

@@ -112,19 +129,2 @@ const data = _interopRequireWildcard(require("./Colors"));

function JsEngine() {
const data = _interopRequireWildcard(require("./JsEngine"));
JsEngine = function () {
return data;
};
return data;
}
Object.defineProperty(exports, "JsEngine", {
enumerable: true,
get: function () {
return JsEngine();
}
});
function Manifest() {

@@ -131,0 +131,0 @@ const data = _interopRequireWildcard(require("./Manifest"));

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

}
} catch (e) {
} catch {
debug(`Error updating "${filepath}" for type "${type}"`);

@@ -284,0 +284,0 @@ }

@@ -63,3 +63,8 @@ "use strict";

if (type === _Target().TargetType.APPLICATION) {
if (type === _Target().TargetType.WATCH) {
osType = 'watchOS';
} else if ( // (apps) com.apple.product-type.application
// (app clips) com.apple.product-type.application.on-demand-install-capable
// NOTE(EvanBacon): This matches against `watchOS` as well so we check for watch first.
type.startsWith(_Target().TargetType.APPLICATION)) {
// Attempt to resolve the platform SDK for each target so we can filter devices.

@@ -85,4 +90,2 @@ const xcConfigurationList = project.hash.project.objects.XCConfigurationList[target.buildConfigurationList];

}
} else if (type === _Target().TargetType.WATCH) {
osType = 'watchOS';
}

@@ -89,0 +92,0 @@

@@ -5,2 +5,6 @@ import { ExpoConfig } from '@expo/config-types';

export declare function setAssociatedDomains(config: ExpoConfig, { 'com.apple.developer.associated-domains': _, ...entitlementsPlist }: JSONObject): JSONObject;
export declare function getEntitlementsPath(projectRoot: string): string;
export declare function getEntitlementsPath(projectRoot: string, { targetName, buildConfiguration, }?: {
targetName?: string;
buildConfiguration?: string;
}): string | null;
export declare function ensureApplicationTargetEntitlementsFileConfigured(projectRoot: string): void;

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

});
exports.ensureApplicationTargetEntitlementsFileConfigured = ensureApplicationTargetEntitlementsFileConfigured;
exports.getEntitlementsPath = getEntitlementsPath;

@@ -51,6 +52,6 @@ exports.setAssociatedDomains = setAssociatedDomains;

function _fs2() {
const data = require("../utils/fs");
function _Target() {
const data = require("./Target");
_fs2 = function () {
_Target = function () {
return data;

@@ -62,6 +63,6 @@ };

function Paths() {
const data = _interopRequireWildcard(require("./Paths"));
function _Xcodeproj() {
const data = require("./utils/Xcodeproj");
Paths = function () {
_Xcodeproj = function () {
return data;

@@ -73,6 +74,6 @@ };

function _Xcodeproj() {
const data = require("./utils/Xcodeproj");
function _string() {
const data = require("./utils/string");
_Xcodeproj = function () {
_string = function () {
return data;

@@ -84,6 +85,2 @@ };

function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -109,39 +106,53 @@

function getEntitlementsPath(projectRoot) {
const paths = Paths().getAllEntitlementsPaths(projectRoot);
let targetPath = null;
/**
* Add file to pbxproj under CODE_SIGN_ENTITLEMENTS
*/
function getEntitlementsPath(projectRoot, {
targetName,
buildConfiguration = 'Release'
} = {}) {
const project = (0, _Xcodeproj().getPbxproj)(projectRoot);
const xcBuildConfiguration = (0, _Target().getXCBuildConfigurationFromPbxproj)(project, {
targetName,
buildConfiguration
});
if (!xcBuildConfiguration) {
return null;
}
const entitlementsPath = getEntitlementsPathFromBuildConfiguration(projectRoot, xcBuildConfiguration);
return entitlementsPath && _fs().default.existsSync(entitlementsPath) ? entitlementsPath : null;
}
function getEntitlementsPathFromBuildConfiguration(projectRoot, xcBuildConfiguration) {
var _xcBuildConfiguration;
const entitlementsPathRaw = xcBuildConfiguration === null || xcBuildConfiguration === void 0 ? void 0 : (_xcBuildConfiguration = xcBuildConfiguration.buildSettings) === null || _xcBuildConfiguration === void 0 ? void 0 : _xcBuildConfiguration.CODE_SIGN_ENTITLEMENTS;
if (entitlementsPathRaw) {
return _path().default.normalize(_path().default.join(projectRoot, 'ios', (0, _string().trimQuotes)(entitlementsPathRaw)));
} else {
return null;
}
}
function ensureApplicationTargetEntitlementsFileConfigured(projectRoot) {
const project = (0, _Xcodeproj().getPbxproj)(projectRoot);
const projectName = (0, _Xcodeproj().getProjectName)(projectRoot);
const productName = (0, _Xcodeproj().getProductName)(project); // Use posix formatted path, even on Windows
const productName = (0, _Xcodeproj().getProductName)(project);
const [, applicationTarget] = (0, _Target().findFirstNativeTarget)(project);
const buildConfigurations = (0, _Xcodeproj().getBuildConfigurationsForListId)(project, applicationTarget.buildConfigurationList);
let hasChangesToWrite = false;
const entitlementsRelativePath = (0, _slash().default)(_path().default.join(projectName, `${productName}.entitlements`));
const entitlementsPath = (0, _slash().default)(_path().default.normalize(_path().default.join(projectRoot, 'ios', entitlementsRelativePath)));
const pathsToDelete = [];
for (const [, xcBuildConfiguration] of buildConfigurations) {
const oldEntitlementPath = getEntitlementsPathFromBuildConfiguration(projectRoot, xcBuildConfiguration);
while (paths.length) {
const last = (0, _slash().default)(_path().default.normalize(paths.pop()));
if (last !== entitlementsPath) {
pathsToDelete.push(last);
} else {
targetPath = last;
if (oldEntitlementPath && _fs().default.existsSync(oldEntitlementPath)) {
return;
}
} // Create a new entitlements file
hasChangesToWrite = true; // Use posix formatted path, even on Windows
if (!targetPath) {
targetPath = entitlementsPath; // Use the default template
const entitlementsRelativePath = (0, _slash().default)(_path().default.join(projectName, `${productName}.entitlements`));
let template = ENTITLEMENTS_TEMPLATE; // If an old entitlements file exists, copy it's contents into the new file.
const entitlementsPath = _path().default.normalize(_path().default.join(projectRoot, 'ios', entitlementsRelativePath));
if (pathsToDelete.length) {
// Get the last entitlements file and use it as the template
const last = pathsToDelete[pathsToDelete.length - 1];
template = _fs().default.readFileSync(last, 'utf8');
}
_fs().default.mkdirSync(_path().default.dirname(entitlementsPath), {

@@ -151,23 +162,11 @@ recursive: true

_fs().default.writeFileSync(entitlementsPath, template);
if (!_fs().default.existsSync(entitlementsPath)) {
_fs().default.writeFileSync(entitlementsPath, ENTITLEMENTS_TEMPLATE);
}
Object.entries(project.pbxXCBuildConfigurationSection()).filter(_Xcodeproj().isNotComment).filter(_Xcodeproj().isBuildConfig).filter(_Xcodeproj().isNotTestHost).forEach(({
1: {
buildSettings
}
}) => {
buildSettings.CODE_SIGN_ENTITLEMENTS = `"${entitlementsRelativePath}"`;
});
xcBuildConfiguration.buildSettings.CODE_SIGN_ENTITLEMENTS = entitlementsRelativePath;
}
if (hasChangesToWrite) {
_fs().default.writeFileSync(project.filepath, project.writeSync());
} // Clean up others
deleteEntitlementsFiles(pathsToDelete);
return entitlementsPath;
}
function deleteEntitlementsFiles(entitlementsPaths) {
for (const path of entitlementsPaths) {
(0, _fs2().removeFile)(path);
}

@@ -174,0 +173,0 @@ }

import * as Bitcode from './Bitcode';
import * as BuildProperties from './BuildProperties';
import * as BuildScheme from './BuildScheme';

@@ -8,3 +9,2 @@ import * as BundleIdentifier from './BundleIdentifier';

import { ExpoPlist, InfoPlist } from './IosConfig.types';
import * as JsEngine from './JsEngine';
import * as Locales from './Locales';

@@ -27,2 +27,2 @@ import * as Maps from './Maps';

export { InfoPlist, ExpoPlist, Entitlements, Paths, Permissions, XcodeUtils };
export { Bitcode, BundleIdentifier, BuildScheme, DeviceFamily, Google, Maps, Locales, JsEngine, Name, Orientation, ProvisioningProfile, RequiresFullScreen, Scheme, Swift, Target, Updates, UsesNonExemptEncryption, Version, XcodeProjectFile, };
export { Bitcode, BundleIdentifier, BuildProperties, BuildScheme, DeviceFamily, Google, Maps, Locales, Name, Orientation, ProvisioningProfile, RequiresFullScreen, Scheme, Swift, Target, Updates, UsesNonExemptEncryption, Version, XcodeProjectFile, };

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

});
exports.Entitlements = exports.DeviceFamily = exports.BundleIdentifier = exports.BuildScheme = exports.Bitcode = void 0;
exports.Entitlements = exports.DeviceFamily = exports.BundleIdentifier = exports.BuildScheme = exports.BuildProperties = exports.Bitcode = void 0;
Object.defineProperty(exports, "ExpoPlist", {

@@ -21,3 +21,3 @@ enumerable: true,

});
exports.XcodeUtils = exports.XcodeProjectFile = exports.Version = exports.UsesNonExemptEncryption = exports.Updates = exports.Target = exports.Swift = exports.Scheme = exports.RequiresFullScreen = exports.ProvisioningProfile = exports.Permissions = exports.Paths = exports.Orientation = exports.Name = exports.Maps = exports.Locales = exports.JsEngine = void 0;
exports.XcodeUtils = exports.XcodeProjectFile = exports.Version = exports.UsesNonExemptEncryption = exports.Updates = exports.Target = exports.Swift = exports.Scheme = exports.RequiresFullScreen = exports.ProvisioningProfile = exports.Permissions = exports.Paths = exports.Orientation = exports.Name = exports.Maps = exports.Locales = void 0;

@@ -41,2 +41,19 @@ function Bitcode() {

function BuildProperties() {
const data = _interopRequireWildcard(require("./BuildProperties"));
BuildProperties = function () {
return data;
};
return data;
}
Object.defineProperty(exports, "BuildProperties", {
enumerable: true,
get: function () {
return BuildProperties();
}
});
function BuildScheme() {

@@ -137,19 +154,2 @@ const data = _interopRequireWildcard(require("./BuildScheme"));

function JsEngine() {
const data = _interopRequireWildcard(require("./JsEngine"));
JsEngine = function () {
return data;
};
return data;
}
Object.defineProperty(exports, "JsEngine", {
enumerable: true,
get: function () {
return JsEngine();
}
});
function Locales() {

@@ -156,0 +156,0 @@ const data = _interopRequireWildcard(require("./Locales"));

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

locales[lang] = await _jsonFile().default.readAsync((0, _path().join)(projectRoot, localeJsonPath));
} catch (e) {
} catch {
// Add a warning when a json file cannot be parsed.

@@ -154,0 +154,0 @@ (0, _warnings().addWarningIOS)(`locales.${lang}`, `Failed to parse JSON of locale file for language: ${lang}`, 'https://docs.expo.dev/distribution/app-stores/#localizing-your-ios-app');

@@ -31,5 +31,3 @@ interface ProjectFile<L extends string = string> {

/**
* Get the entitlements file path if it exists.
*
* @param projectRoot
* @deprecated: use Entitlements.getEntitlementsPath instead
*/

@@ -36,0 +34,0 @@ export declare function getEntitlementsPath(projectRoot: string): string | null;

@@ -75,2 +75,12 @@ "use strict";

function Entitlements() {
const data = _interopRequireWildcard(require("./Entitlements"));
Entitlements = function () {
return data;
};
return data;
}
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

@@ -315,5 +325,3 @@

/**
* Get the entitlements file path if it exists.
*
* @param projectRoot
* @deprecated: use Entitlements.getEntitlementsPath instead
*/

@@ -323,15 +331,3 @@

function getEntitlementsPath(projectRoot) {
const [using, ...extra] = getAllEntitlementsPaths(projectRoot);
if (extra.length) {
warnMultipleFiles({
tag: 'entitlements',
fileName: '*.entitlements',
projectRoot,
using,
extra
});
}
return using !== null && using !== void 0 ? using : null;
return Entitlements().getEntitlementsPath(projectRoot);
}

@@ -338,0 +334,0 @@

@@ -7,2 +7,3 @@ import { PBXNativeTarget, XCBuildConfiguration, XcodeProject } from 'xcode';

WATCH = "com.apple.product-type.application.watchapp",
APP_CLIP = "com.apple.product-type.application.on-demand-install-capable",
STICKER_PACK_EXTENSION = "com.apple.product-type.app-extension.messages-sticker-pack",

@@ -9,0 +10,0 @@ OTHER = "other"

@@ -52,2 +52,3 @@ "use strict";

TargetType["WATCH"] = "com.apple.product-type.application.watchapp";
TargetType["APP_CLIP"] = "com.apple.product-type.application.on-demand-install-capable";
TargetType["STICKER_PACK_EXTENSION"] = "com.apple.product-type.app-extension.messages-sticker-pack";

@@ -113,4 +114,13 @@ TargetType["OTHER"] = "other";

const targets = getNativeTargets(project);
const applicationTargets = targets.filter(([, target]) => isTargetOfType(target, TargetType.APPLICATION) || isTargetOfType(target, TargetType.EXTENSION) || isTargetOfType(target, TargetType.WATCH) || isTargetOfType(target, TargetType.STICKER_PACK_EXTENSION));
const signableTargetTypes = [TargetType.APPLICATION, TargetType.APP_CLIP, TargetType.EXTENSION, TargetType.WATCH, TargetType.STICKER_PACK_EXTENSION];
const applicationTargets = targets.filter(([, target]) => {
for (const targetType of signableTargetTypes) {
if (isTargetOfType(target, targetType)) {
return true;
}
}
return false;
});
if (applicationTargets.length === 0) {

@@ -117,0 +127,0 @@ throw new Error(`Could not find any signable targets in project.pbxproj`);

@@ -17,3 +17,3 @@ import { ExpoConfig } from '@expo/config-types';

*/
export declare function addResourceFileToGroup({ filepath, groupName, isBuildFile, project, verbose, }: {
export declare function addResourceFileToGroup({ filepath, groupName, isBuildFile, project, verbose, targetUuid, }: {
filepath: string;

@@ -24,2 +24,3 @@ groupName: string;

verbose?: boolean;
targetUuid?: string;
}): XcodeProject;

@@ -26,0 +27,0 @@ /**

@@ -173,3 +173,4 @@ "use strict";

project,
verbose
verbose,
targetUuid
}) {

@@ -181,2 +182,3 @@ return addFileToGroupAndLink({

verbose,
targetUuid,

@@ -216,2 +218,3 @@ addFileToProject({

verbose,
targetUuid,

@@ -218,0 +221,0 @@ addFileToProject({

import type { ExpoConfig } from '@expo/config-types';
import type { JSONObject, JSONValue } from '@expo/json-file';
import type { JSONObject } from '@expo/json-file';
import type { XcodeProject } from 'xcode';

@@ -64,3 +64,3 @@ import type { ConfigPlugin, Mod } from '../Plugin.types';

*/
export declare const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>>;
export declare const withPodfileProperties: ConfigPlugin<Mod<Record<string, string>>>;
export {};

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

function _fs() {
const data = require("fs");
const data = _interopRequireWildcard(require("fs"));

@@ -80,2 +80,12 @@ _fs = function () {

function _Entitlements() {
const data = require("../ios/Entitlements");
_Entitlements = function () {
return data;
};
return data;
}
function _Xcodeproj() {

@@ -141,2 +151,6 @@ const data = require("../ios/utils/Xcodeproj");

function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -380,4 +394,6 @@

try {
// Fallback on glob...
return await _ios().Entitlements.getEntitlementsPath(config.modRequest.projectRoot);
var _Entitlements$getEnti;
(0, _Entitlements().ensureApplicationTargetEntitlementsFileConfigured)(config.modRequest.projectRoot);
return (_Entitlements$getEnti = _ios().Entitlements.getEntitlementsPath(config.modRequest.projectRoot)) !== null && _Entitlements$getEnti !== void 0 ? _Entitlements$getEnti : '';
} catch (error) {

@@ -397,5 +413,9 @@ if (config.modRequest.introspect) {

try {
const contents = await readFile(filePath, 'utf8');
(0, _assert().default)(contents, 'Entitlements plist is empty');
modResults = _plist().default.parse(contents);
if (_fs().default.existsSync(filePath)) {
const contents = await readFile(filePath, 'utf8');
(0, _assert().default)(contents, 'Entitlements plist is empty');
modResults = _plist().default.parse(contents);
} else {
modResults = getEntitlementsPlistTemplate();
}
} catch (error) {

@@ -454,3 +474,3 @@ // Throw errors in introspection mode.

results = await _jsonFile().default.readAsync(filePath);
} catch (e) {}
} catch {}

@@ -457,0 +477,0 @@ return results;

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

return _fs().default.statSync(file).isFile();
} catch (e) {
} catch {
return false;

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

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

return _semver().default.gte(exp.sdkVersion, sdkVersion);
} catch (e) {
} catch {
throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);

@@ -49,3 +49,3 @@ }

return _semver().default.lte(exp.sdkVersion, sdkVersion);
} catch (e) {
} catch {
throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);

@@ -52,0 +52,0 @@ }

{
"name": "@expo/config-plugins",
"version": "4.1.1",
"version": "4.1.2",
"description": "A library for Expo config plugins",

@@ -36,3 +36,3 @@ "main": "build/index.js",

"@expo/config-types": "^44.0.0",
"@expo/json-file": "8.2.35",
"@expo/json-file": "8.2.36",
"@expo/plist": "0.0.18",

@@ -39,0 +39,0 @@ "@expo/sdk-runtime-versions": "^1.0.0",

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