Socket
Socket
Sign inDemoInstall

@rushstack/ts-command-line

Package Overview
Dependencies
Maintainers
3
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rushstack/ts-command-line - npm Package Compare versions

Comparing version 4.16.1 to 4.17.0

16

dist/ts-command-line.d.ts

@@ -250,3 +250,2 @@ /**

/* Excluded from this release type: _setValue */
/* Excluded from this release type: _disableShortName */
/* Excluded from this release type: _getSupplementaryNotes */

@@ -307,2 +306,4 @@ /**

private static _keyCounter;
/* Excluded from this release type: _ambiguousParameterParserKeysByName */
/* Excluded from this release type: _registeredParameterParserKeysByName */
private readonly _parameters;

@@ -312,5 +313,4 @@ private readonly _parametersByLongName;

private readonly _parameterGroupsByName;
private readonly _ambiguousParameterNamesByParserKey;
private _parametersRegistered;
private _parametersProcessed;
private _parametersHaveBeenRegistered;
private _parametersHaveBeenProcessed;
private _remainder;

@@ -492,6 +492,8 @@ /* Excluded from this release type: __constructor */

/* Excluded from this release type: _defineParameter */
/* Excluded from this release type: _defineAmbiguousParameter */
/* Excluded from this release type: _registerParameter */
private _registerAmbiguousParameter;
protected _registerAmbiguousParameter(name: string, parserKey: string): void;
private _generateKey;
private _getParameter;
private _throwParserExitError;
}

@@ -973,2 +975,4 @@

/* Excluded from this release type: _IRegisterDefinedParametersState */
/**

@@ -1018,2 +1022,3 @@ * The result containing the parsed paramter long name and scope. Returned when calling

private _scopedCommandLineParser;
private _subparserState;
/**

@@ -1031,2 +1036,3 @@ * The required group name to apply to all scoping parameters. At least one parameter

/* Excluded from this release type: _execute */
/* Excluded from this release type: _registerDefinedParameters */
/**

@@ -1033,0 +1039,0 @@ * {@inheritdoc CommandLineParameterProvider.onDefineParameters}

@@ -8,5 +8,5 @@ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.

"packageName": "@microsoft/api-extractor",
"packageVersion": "7.37.0"
"packageVersion": "7.37.1"
}
]
}

@@ -6,7 +6,7 @@ /**

*/
export { CommandLineAction, ICommandLineActionOptions } from './providers/CommandLineAction';
export { CommandLineAction, type ICommandLineActionOptions } from './providers/CommandLineAction';
export { DynamicCommandLineAction } from './providers/DynamicCommandLineAction';
export { ScopedCommandLineAction } from './providers/ScopedCommandLineAction';
export { AliasCommandLineAction, IAliasCommandLineActionOptions } from './providers/AliasCommandLineAction';
export { IBaseCommandLineDefinition, IBaseCommandLineDefinitionWithArgument, ICommandLineFlagDefinition, ICommandLineStringDefinition, ICommandLineStringListDefinition, ICommandLineIntegerDefinition, ICommandLineIntegerListDefinition, ICommandLineChoiceDefinition, ICommandLineChoiceListDefinition, ICommandLineRemainderDefinition } from './parameters/CommandLineDefinition';
export { AliasCommandLineAction, type IAliasCommandLineActionOptions } from './providers/AliasCommandLineAction';
export type { IBaseCommandLineDefinition, IBaseCommandLineDefinitionWithArgument, ICommandLineFlagDefinition, ICommandLineStringDefinition, ICommandLineStringListDefinition, ICommandLineIntegerDefinition, ICommandLineIntegerListDefinition, ICommandLineChoiceDefinition, ICommandLineChoiceListDefinition, ICommandLineRemainderDefinition } from './parameters/CommandLineDefinition';
export { CommandLineParameterKind, CommandLineParameter, CommandLineParameterWithArgument } from './parameters/BaseClasses';

@@ -21,4 +21,4 @@ export { CommandLineFlagParameter } from './parameters/CommandLineFlagParameter';

export { CommandLineRemainder } from './parameters/CommandLineRemainder';
export { CommandLineParameterProvider, IScopedLongNameParseResult, ICommandLineParserData as _ICommandLineParserData } from './providers/CommandLineParameterProvider';
export { ICommandLineParserOptions, CommandLineParser } from './providers/CommandLineParser';
export { CommandLineParameterProvider, type IScopedLongNameParseResult, type ICommandLineParserData as _ICommandLineParserData, type IRegisterDefinedParametersState as _IRegisterDefinedParametersState } from './providers/CommandLineParameterProvider';
export { CommandLineParser, type ICommandLineParserOptions } from './providers/CommandLineParser';
export { DynamicCommandLineParser } from './providers/DynamicCommandLineParser';

@@ -25,0 +25,0 @@ export { CommandLineConstants } from './Constants';

@@ -63,7 +63,2 @@ import type { SCOPING_PARAMETER_GROUP } from '../Constants';

/**
* Called internally by CommandLineParameterProvider._registerDefinedParameters()
* @internal
*/
_disableShortName(): void;
/**
* Returns additional text used by the help formatter.

@@ -70,0 +65,0 @@ * @internal

@@ -113,9 +113,2 @@ "use strict";

/**
* Called internally by CommandLineParameterProvider._registerDefinedParameters()
* @internal
*/
_disableShortName() {
this._shortNameValue = undefined;
}
/**
* Returns additional text used by the help formatter.

@@ -122,0 +115,0 @@ * @internal

import { CommandLineAction } from './CommandLineAction';
import type { ICommandLineParserData } from './CommandLineParameterProvider';
import type { ICommandLineParserData, IRegisterDefinedParametersState } from './CommandLineParameterProvider';
import type { ICommandLineParserOptions } from './CommandLineParser';

@@ -49,3 +49,3 @@ /**

/** @internal */
_registerDefinedParameters(): void;
_registerDefinedParameters(state: IRegisterDefinedParametersState): void;
/**

@@ -52,0 +52,0 @@ * This is called internally by CommandLineParser.execute()

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

/** @internal */
_registerDefinedParameters() {
_registerDefinedParameters(state) {
/* override */

@@ -112,4 +112,16 @@ // All parameters are going to be defined by the target action. Re-use the target action parameters

}
// Finally, register the parameters with the parser.
super._registerDefinedParameters();
// Finally, register the parameters with the parser. We need to make sure that the target action
// is registered, since we need to re-use its parameters, and ambiguous parameters are discovered
// during registration. This will no-op if the target action is already registered.
this.targetAction._registerDefinedParameters(state);
super._registerDefinedParameters(state);
// We need to re-map the ambiguous parameters after they are defined by calling
// super._registerDefinedParameters()
for (const [ambiguousParameterName, parserKey] of this._ambiguousParameterParserKeysByName) {
const targetParserKey = this.targetAction._ambiguousParameterParserKeysByName.get(ambiguousParameterName);
// If we have a mapping for the specified key, then use it. Otherwise, use the key as-is.
if (targetParserKey) {
this._parameterKeyMap.set(parserKey, targetParserKey);
}
}
}

@@ -116,0 +128,0 @@ /**

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

const CommandLineParameterProvider_1 = require("./CommandLineParameterProvider");
const CommandLineParserExitError_1 = require("./CommandLineParserExitError");
/**

@@ -47,2 +48,14 @@ * Example: "do-something"

});
// Monkey-patch the error handling for the action parser
this._argumentParser.exit = (status, message) => {
throw new CommandLineParserExitError_1.CommandLineParserExitError(status, message);
};
const originalArgumentParserErrorFn = this._argumentParser.error.bind(this._argumentParser);
this._argumentParser.error = (err) => {
// Ensure the ParserExitError bubbles up to the top without any special processing
if (err instanceof CommandLineParserExitError_1.CommandLineParserExitError) {
throw err;
}
originalArgumentParserErrorFn(err);
};
(_a = this.onDefineParameters) === null || _a === void 0 ? void 0 : _a.call(this);

@@ -49,0 +62,0 @@ }

@@ -31,2 +31,14 @@ import * as argparse from 'argparse';

/**
* An object containing the state of the
*
* @internal
*/
export interface IRegisterDefinedParametersState {
/**
* A set of all defined parameter names registered by parent {@link CommandLineParameterProvider}
* objects.
*/
parentParameterNames: Set<string>;
}
/**
* This is the argparse result data object

@@ -49,2 +61,6 @@ * @internal

private static _keyCounter;
/** @internal */
readonly _ambiguousParameterParserKeysByName: Map<string, string>;
/** @internal */
protected readonly _registeredParameterParserKeysByName: Map<string, string>;
private readonly _parameters;

@@ -54,5 +70,4 @@ private readonly _parametersByLongName;

private readonly _parameterGroupsByName;
private readonly _ambiguousParameterNamesByParserKey;
private _parametersRegistered;
private _parametersProcessed;
private _parametersHaveBeenRegistered;
private _parametersHaveBeenProcessed;
private _remainder;

@@ -227,3 +242,3 @@ /** @internal */

/** @internal */
_registerDefinedParameters(): void;
_registerDefinedParameters(state: IRegisterDefinedParametersState): void;
/**

@@ -244,7 +259,10 @@ * The child class should implement this hook to define its command-line parameters,

/** @internal */
protected _registerParameter(parameter: CommandLineParameter, useScopedLongName: boolean): void;
private _registerAmbiguousParameter;
protected _defineAmbiguousParameter(name: string): string;
/** @internal */
protected _registerParameter(parameter: CommandLineParameter, useScopedLongName: boolean, ignoreShortName: boolean): void;
protected _registerAmbiguousParameter(name: string, parserKey: string): void;
private _generateKey;
private _getParameter;
private _throwParserExitError;
}
//# sourceMappingURL=CommandLineParameterProvider.d.ts.map

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

const Constants_1 = require("../Constants");
const CommandLineParserExitError_1 = require("./CommandLineParserExitError");
const SCOPE_GROUP_NAME = 'scope';

@@ -58,5 +59,6 @@ const LONG_NAME_GROUP_NAME = 'longName';

this._parameterGroupsByName = new Map();
this._ambiguousParameterNamesByParserKey = new Map();
this._parametersRegistered = false;
this._parametersProcessed = false;
this._ambiguousParameterParserKeysByName = new Map();
this._registeredParameterParserKeysByName = new Map();
this._parametersHaveBeenRegistered = false;
this._parametersHaveBeenProcessed = false;
}

@@ -73,3 +75,3 @@ /**

get parametersProcessed() {
return this._parametersProcessed;
return this._parametersHaveBeenProcessed;
}

@@ -269,3 +271,6 @@ /**

renderHelpText() {
this._registerDefinedParameters();
const initialState = {
parentParameterNames: new Set()
};
this._registerDefinedParameters(initialState);
return this._getArgumentParser().formatHelp();

@@ -277,3 +282,6 @@ }

renderUsageText() {
this._registerDefinedParameters();
const initialState = {
parentParameterNames: new Set()
};
this._registerDefinedParameters(initialState);
return this._getArgumentParser().formatUsage();

@@ -321,4 +329,4 @@ }

/** @internal */
_registerDefinedParameters() {
if (this._parametersRegistered) {
_registerDefinedParameters(state) {
if (this._parametersHaveBeenRegistered) {
// We prevent new parameters from being defined after the first call to _registerDefinedParameters,

@@ -328,12 +336,11 @@ // so we can already ensure that all parameters were registered.

}
this._parametersRegistered = true;
const ambiguousParameterNames = new Set();
// First, loop through all parameters with short names. If there are any duplicates, disable the short names
// since we can't prefix scopes to short names in order to deduplicate them. The duplicate short names will
// be reported as errors if the user attempts to use them.
const parametersWithDuplicateShortNames = new Set();
for (const [shortName, shortNameParameters] of this._parametersByShortName.entries()) {
if (shortNameParameters.length > 1) {
for (const parameter of shortNameParameters) {
ambiguousParameterNames.add(shortName);
parameter._disableShortName();
this._defineAmbiguousParameter(shortName);
parametersWithDuplicateShortNames.add(parameter);
}

@@ -353,12 +360,24 @@ }

}
ambiguousParameterNames.add(parameter.longName);
this._defineAmbiguousParameter(parameter.longName);
}
this._registerParameter(parameter, useScopedLongName);
const ignoreShortName = parametersWithDuplicateShortNames.has(parameter);
this._registerParameter(parameter, useScopedLongName, ignoreShortName);
}
}
// Register silent parameters for the ambiguous short names and long names to ensure that users are made
// aware that the provided argument is ambiguous.
for (const ambiguousParameterName of ambiguousParameterNames) {
this._registerAmbiguousParameter(ambiguousParameterName);
// Register the existing parameters as ambiguous parameters. These are generally provided by the
// parent action.
const { parentParameterNames } = state;
for (const parentParameterName of parentParameterNames) {
this._defineAmbiguousParameter(parentParameterName);
}
// We also need to loop through the defined ambiguous parameters and register them. These will be reported
// as errors if the user attempts to use them.
for (const [ambiguousParameterName, parserKey] of this._ambiguousParameterParserKeysByName) {
// Only register the ambiguous parameter if it hasn't already been registered. We will still handle these
// already-registered parameters as ambiguous, but by avoiding registering again, we will defer errors
// until the user actually attempts to use the parameter.
if (!this._registeredParameterParserKeysByName.has(ambiguousParameterName)) {
this._registerAmbiguousParameter(ambiguousParameterName, parserKey);
}
}
// Need to add the remainder parameter last

@@ -373,14 +392,20 @@ if (this._remainder) {

}
this._parametersHaveBeenRegistered = true;
}
/** @internal */
_processParsedData(parserOptions, data) {
if (!this._parametersRegistered) {
if (!this._parametersHaveBeenRegistered) {
throw new Error('Parameters have not been registered');
}
if (this._parametersProcessed) {
if (this._parametersHaveBeenProcessed) {
throw new Error('Command Line Parser Data was already processed');
}
// Search for any ambiguous parameters and throw an error if any are found
for (const [parserKey, parameterName] of this._ambiguousParameterNamesByParserKey) {
for (const [parameterName, parserKey] of this._ambiguousParameterParserKeysByName) {
if (data[parserKey]) {
// When the parser key matches the actually registered parameter, we know that this is an ambiguous
// parameter sourced from the parent action or tool
if (this._registeredParameterParserKeysByName.get(parameterName) === parserKey) {
this._throwParserExitError(parserOptions, data, 1, `Ambiguous option: "${parameterName}".`);
}
// Determine if the ambiguous parameter is a short name or a long name, since the process of finding

@@ -414,6 +439,4 @@ // the non-ambiguous name is different for each.

// short name, ex.
// Error: The short parameter name "-p" is ambiguous. It could refer to any of the following
// parameters: "--param1", "--param2"
throw new Error(`The short parameter name "${parameterName}" is ambiguous. It could refer to any of ` +
`the following parameters: "${nonAmbiguousLongNames.join('", "')}"`);
// Error: Ambiguous option "-p" could match "--param1", "--param2"
this._throwParserExitError(parserOptions, data, 1, `Ambiguous option: "${parameterName}" could match ${nonAmbiguousLongNames.join(', ')}.`);
}

@@ -432,9 +455,7 @@ const duplicateLongNameParameters = this._parametersByLongName.get(parameterName);

// ambiguous long name, ex.
// Error: The parameter name "--param" is ambiguous. It could refer to any of the following
// parameters: "--scope1:param", "--scope2:param"
throw new Error(`The parameter name "${parameterName}" is ambiguous. It could refer to any of ` +
`the following parameters: "${nonAmbiguousLongNames.join('", "')}"`);
// Error: Ambiguous option: "--param" could match --scope1:param, --scope2:param
this._throwParserExitError(parserOptions, data, 1, `Ambiguous option: "${parameterName}" could match ${nonAmbiguousLongNames.join(', ')}.`);
}
// This shouldn't happen, but we also shouldn't allow the user to use the ambiguous parameter
throw new Error(`The parameter name "${parameterName}" is ambiguous.`);
this._throwParserExitError(parserOptions, data, 1, `Ambiguous option: "${parameterName}".`);
}

@@ -450,7 +471,7 @@ }

}
this._parametersProcessed = true;
this._parametersHaveBeenProcessed = true;
}
/** @internal */
_defineParameter(parameter) {
if (this._parametersRegistered) {
if (this._parametersHaveBeenRegistered) {
throw new Error('Parameters have already been registered for this provider');

@@ -479,6 +500,21 @@ }

/** @internal */
_registerParameter(parameter, useScopedLongName) {
_defineAmbiguousParameter(name) {
if (this._parametersHaveBeenRegistered) {
throw new Error('Parameters have already been registered for this provider');
}
// Only generate a new parser key if the ambiguous parameter hasn't been defined yet,
// either as an existing parameter or as another ambiguous parameter
let existingParserKey = this._registeredParameterParserKeysByName.get(name) ||
this._ambiguousParameterParserKeysByName.get(name);
if (!existingParserKey) {
existingParserKey = this._generateKey();
}
this._ambiguousParameterParserKeysByName.set(name, existingParserKey);
return existingParserKey;
}
/** @internal */
_registerParameter(parameter, useScopedLongName, ignoreShortName) {
var _a;
const names = [];
if (parameter.shortName) {
if (parameter.shortName && !ignoreShortName) {
names.push(parameter.shortName);

@@ -568,6 +604,8 @@ }

}
// Register the parameter names so that we can detect ambiguous parameters
for (const name of [...names, ...(parameter.undocumentedSynonyms || [])]) {
this._registeredParameterParserKeysByName.set(name, parameter._parserKey);
}
}
_registerAmbiguousParameter(name) {
const parserKey = this._generateKey();
this._ambiguousParameterNamesByParserKey.set(parserKey, name);
_registerAmbiguousParameter(name, parserKey) {
this._getArgumentParser().addArgument(name, {

@@ -610,2 +648,12 @@ dest: parserKey,

}
_throwParserExitError(parserOptions, data, errorCode, message) {
// Write out the usage text to make it easier for the user to find the correct parameter name
const targetActionName = data.aliasAction || data.action || '';
const errorPrefix = `Error: ${parserOptions.toolFilename}` +
// Handle aliases, actions, and actionless parameter providers
`${targetActionName ? ' ' : ''}${targetActionName}: error: `;
// eslint-disable-next-line no-console
console.log(this.renderUsageText());
throw new CommandLineParserExitError_1.CommandLineParserExitError(errorCode, `${errorPrefix}${message.trimStart().trimEnd()}\n`);
}
}

@@ -612,0 +660,0 @@ CommandLineParameterProvider._keyCounter = 0;

import type * as argparse from 'argparse';
import type { CommandLineAction } from './CommandLineAction';
import { CommandLineParameterProvider } from './CommandLineParameterProvider';
import { CommandLineParameterProvider, type IRegisterDefinedParametersState } from './CommandLineParameterProvider';
/**

@@ -94,3 +94,3 @@ * Options for the {@link CommandLineParser} constructor.

/** @internal */
_registerDefinedParameters(): void;
_registerDefinedParameters(state: IRegisterDefinedParametersState): void;
private _validateDefinitions;

@@ -97,0 +97,0 @@ /**

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

// Register the parameters before we print help or parse the CLI
this._registerDefinedParameters();
const initialState = {
parentParameterNames: new Set()
};
this._registerDefinedParameters(initialState);
if (!args) {

@@ -186,3 +189,3 @@ // 0=node.exe, 1=script name

(_b = this.selectedAction) === null || _b === void 0 ? void 0 : _b._processParsedData(this._options, data);
return this.onExecute();
await this.onExecute();
}

@@ -204,6 +207,12 @@ catch (err) {

/** @internal */
_registerDefinedParameters() {
super._registerDefinedParameters();
_registerDefinedParameters(state) {
super._registerDefinedParameters(state);
const { parentParameterNames } = state;
const updatedParentParameterNames = new Set([
...parentParameterNames,
...this._registeredParameterParserKeysByName.keys()
]);
const parentState = Object.assign(Object.assign({}, state), { parentParameterNames: updatedParentParameterNames });
for (const action of this._actions) {
action._registerDefinedParameters();
action._registerDefinedParameters(parentState);
}

@@ -210,0 +219,0 @@ }

@@ -5,3 +5,3 @@ import { SCOPING_PARAMETER_GROUP } from '../Constants';

import type { CommandLineParameter } from '../parameters/BaseClasses';
import type { CommandLineParameterProvider, ICommandLineParserData } from './CommandLineParameterProvider';
import type { CommandLineParameterProvider, ICommandLineParserData, IRegisterDefinedParametersState } from './CommandLineParameterProvider';
/**

@@ -33,2 +33,3 @@ * Represents a sub-command that is part of the CommandLineParser command-line.

private _scopedCommandLineParser;
private _subparserState;
/**

@@ -54,2 +55,4 @@ * The required group name to apply to all scoping parameters. At least one parameter

_execute(): Promise<void>;
/** @internal */
_registerDefinedParameters(state: IRegisterDefinedParametersState): void;
/**

@@ -56,0 +59,0 @@ * {@inheritdoc CommandLineParameterProvider.onDefineParameters}

@@ -43,2 +43,7 @@ "use strict";

}
_registerDefinedParameters(state) {
// Since we are in a separate parser, we need to register the parameters using the state
// from the parent parser.
super._registerDefinedParameters(this._internalOptions.registerDefinedParametersState);
}
async onExecute() {

@@ -96,6 +101,11 @@ // override

super._processParsedData(parserOptions, data);
// This should never happen because the super method should throw if parameters haven't been registered,
// but guard against this just in-case.
if (this._subparserState === undefined) {
throw new Error('Parameters have not been registered');
}
this._unscopedParserOptions = parserOptions;
// Generate the scoped parser using the parent parser information. We can only create this after we
// have parsed the data, since the parameter values are used during construction.
this._scopedCommandLineParser = new InternalScopedCommandLineParser(Object.assign(Object.assign({}, parserOptions), { actionOptions: this._options, aliasAction: data.aliasAction, aliasDocumentation: data.aliasDocumentation, unscopedActionParameters: this.parameters, onDefineScopedParameters: this.onDefineScopedParameters.bind(this) }));
this._scopedCommandLineParser = new InternalScopedCommandLineParser(Object.assign(Object.assign({}, parserOptions), { actionOptions: this._options, aliasAction: data.aliasAction, aliasDocumentation: data.aliasDocumentation, unscopedActionParameters: this.parameters, registerDefinedParametersState: this._subparserState, onDefineScopedParameters: this.onDefineScopedParameters.bind(this) }));
}

@@ -119,5 +129,2 @@ /**

if (this.remainder.values[0] !== '--') {
// Imitate argparse behavior and log out usage text before throwing.
// eslint-disable-next-line no-console
console.log(this.renderUsageText());
throw new CommandLineParserExitError_1.CommandLineParserExitError(

@@ -127,4 +134,4 @@ // argparse sets exit code 2 for invalid arguments

// model the message off of the built-in "unrecognized arguments" message
`${this._unscopedParserOptions.toolFilename} ${this.actionName}: error: Unrecognized ` +
`arguments: ${this.remainder.values[0]}.`);
`${this.renderUsageText()}\n${this._unscopedParserOptions.toolFilename} ${this.actionName}: ` +
`error: Unrecognized arguments: ${this.remainder.values[0]}.\n`);
}

@@ -144,2 +151,12 @@ for (const scopedArg of this.remainder.values.slice(1)) {

}
/** @internal */
_registerDefinedParameters(state) {
super._registerDefinedParameters(state);
const { parentParameterNames } = state;
const updatedParentParameterNames = new Set([
...parentParameterNames,
...this._registeredParameterParserKeysByName.keys()
]);
this._subparserState = Object.assign(Object.assign({}, state), { parentParameterNames: updatedParentParameterNames });
}
/**

@@ -146,0 +163,0 @@ * {@inheritdoc CommandLineParameterProvider.onDefineParameters}

{
"name": "@rushstack/ts-command-line",
"version": "4.16.1",
"version": "4.17.0",
"description": "An object-oriented command-line parser for TypeScript",

@@ -20,4 +20,4 @@ "repository": {

"devDependencies": {
"@rushstack/heft": "0.59.0",
"@rushstack/heft-node-rig": "2.2.23",
"@rushstack/heft": "0.62.0",
"@rushstack/heft-node-rig": "2.3.2",
"@types/heft-jest": "1.0.1",

@@ -24,0 +24,0 @@ "@types/node": "18.17.15",

@@ -0,0 +0,0 @@ # ts-command-line

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

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