Socket
Socket
Sign inDemoInstall

@salesforce/core

Package Overview
Dependencies
Maintainers
23
Versions
490
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.16.16 to 0.17.2

dist/lib/schemaPrinter.d.ts

11

dist/exported.d.ts

@@ -14,7 +14,12 @@ export { Aliases, AliasGroup } from './lib/config/aliases';

export { Messages } from './lib/messages';
export { Org, OrgMetaInfo } from './lib/org';
export { Org, OrgFields } from './lib/org';
export { Project, SfdxProjectJson } from './lib/project';
export { SchemaPrinter } from './lib/schemaPrinter';
export { SchemaValidator } from './lib/schemaValidator';
export { SfdxError, SfdxErrorConfig } from './lib/sfdxError';
export { AnyJson, JsonArray, JsonMap } from './lib/types';
export { SfdxUtil } from './lib/util';
export { AnyDictionary, AnyJson, Dictionary, JsonArray, JsonMap } from './lib/types';
export { SfdxTableOptions, UX } from './lib/ux';
import * as fs from './lib/util/fs';
import * as json from './lib/util/json';
import * as sfdc from './lib/util/sfdc';
export { fs, json, sfdc };

@@ -45,12 +45,22 @@ "use strict";

exports.Org = org_1.Org;
exports.OrgFields = org_1.OrgFields;
var project_1 = require("./lib/project");
exports.Project = project_1.Project;
exports.SfdxProjectJson = project_1.SfdxProjectJson;
var schemaPrinter_1 = require("./lib/schemaPrinter");
exports.SchemaPrinter = schemaPrinter_1.SchemaPrinter;
var schemaValidator_1 = require("./lib/schemaValidator");
exports.SchemaValidator = schemaValidator_1.SchemaValidator;
var sfdxError_1 = require("./lib/sfdxError");
exports.SfdxError = sfdxError_1.SfdxError;
exports.SfdxErrorConfig = sfdxError_1.SfdxErrorConfig;
var util_1 = require("./lib/util");
exports.SfdxUtil = util_1.SfdxUtil;
var ux_1 = require("./lib/ux");
exports.UX = ux_1.UX;
// Utility sub-modules
const fs = require("./lib/util/fs");
exports.fs = fs;
const json = require("./lib/util/json");
exports.json = json;
const sfdc = require("./lib/util/sfdc");
exports.sfdc = sfdc;
//# sourceMappingURL=exported.js.map

@@ -0,1 +1,18 @@

/**
* Options for OAuth2.
* @typedef OAuth2Options
* @property {string} authzServiceUrl
* @property {string} tokenServiceUrl
* @property {string} clientId
* @property {string} clientSecret
* @property {string} httpProxy
* @property {string} loginUrl
* @property {string} proxyUrl
* @property {string} redirectUri
* @property {string} refreshToken
* @property {string} revokeServiceUrl
* @property {string} authCode
* @property {string} privateKeyFile
* @see https://jsforce.github.io/jsforce/doc/OAuth2.html
*/
import { OAuth2Options } from 'jsforce';

@@ -26,3 +43,3 @@ export interface AuthFields {

sandbox = "https://test.salesforce.com",
production = "https://login.salesforce.com",
production = "https://login.salesforce.com"
}

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

getSfdxAuthUrl(): string;
private refreshFn(conn, callback);
private buildJwtConfig(options);
private buildRefreshTokenConfig(options);
private buildWebAuthConfig(options);
private refreshFn;
private buildJwtConfig;
private buildRefreshTokenConfig;
private buildWebAuthConfig;
private lookup;
}

@@ -62,5 +62,5 @@ "use strict";

const logger_1 = require("./logger");
const util_1 = require("./util");
const connection_1 = require("./connection");
const crypto_2 = require("./crypto");
const fs = require("./util/fs");
// Extend OAuth2 to add JWT Bearer Token Flow support.

@@ -262,3 +262,3 @@ class JwtOAuth2 extends jsforce_1.OAuth2 {

static async listAllAuthFiles() {
const globalFiles = await util_1.SfdxUtil.readdir(global_1.Global.DIR);
const globalFiles = await fs.readdir(global_1.Global.DIR);
const authFiles = globalFiles.filter((file) => file.match(AuthInfo.authFilenameFilterRegEx));

@@ -534,3 +534,3 @@ // Want to throw a clean error if no files are found.

async buildJwtConfig(options) {
const privateKeyContents = await util_1.SfdxUtil.readFile(options.privateKey, 'utf8');
const privateKeyContents = await fs.readFile(options.privateKey, 'utf8');
const audienceUrl = getJwtAudienceUrl(options);

@@ -560,7 +560,8 @@ const jwtToken = await jwt.sign({

try {
await dns.lookup(url_1.parse(_authFields.instance_url).hostname, null);
// Check if the url is resolvable. This can fail when my-domains have not been replicated.
await this.lookup(url_1.parse(_authFields.instance_url).hostname);
authFields.instanceUrl = _authFields.instance_url;
}
catch (err) {
this.logger.info(`Instance URL [${_authFields.instance_url}] is not available. DNS lookup failed.`);
this.logger.debug(`Instance URL [${_authFields.instance_url}] is not available. DNS lookup failed. Using loginUrl [${options.loginUrl}] instead. This may result in a "Destination URL not reset" error.`);
authFields.instanceUrl = options.loginUrl;

@@ -630,2 +631,15 @@ }

}
// See https://nodejs.org/api/dns.html#dns_dns_lookup_hostname_options_callback
async lookup(host) {
return new Promise((resolve, reject) => {
dns.lookup(host, (err, address, family) => {
if (err) {
reject(err);
}
else {
resolve({ address, family });
}
});
});
}
}

@@ -632,0 +646,0 @@ // The regular expression that filters files stored in $HOME/.sfdx

@@ -5,7 +5,7 @@ import { ConfigFile, ConfigOptions } from './configFile';

* Different groups of aliases. Currently only support orgs.
* @readonly
* @enum {string}
* @typedef AliasGroup
* @property {string} ORGS
*/
export declare enum AliasGroup {
'ORGS' = "orgs",
ORGS = "orgs"
}

@@ -27,3 +27,3 @@ /**

* // Shorthand to get an alias.
* const username: string = Aliases.fetch('myAlias');
* const username: string = await Aliases.fetch('myAlias');
* @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_cli_usernames_orgs.htm

@@ -67,3 +67,3 @@ */

* @example
* const aliases = Aliases.parseAndUpdate(['foo=bar', 'bar=baz'])
* const aliases = await Aliases.parseAndUpdate(['foo=bar', 'bar=baz'])
*/

@@ -70,0 +70,0 @@ static parseAndUpdate(aliasKeyAndValues: string[], group?: AliasGroup): Promise<object>;

@@ -14,4 +14,4 @@ "use strict";

* Different groups of aliases. Currently only support orgs.
* @readonly
* @enum {string}
* @typedef AliasGroup
* @property {string} ORGS
*/

@@ -37,3 +37,3 @@ var AliasGroup;

* // Shorthand to get an alias.
* const username: string = Aliases.fetch('myAlias');
* const username: string = await Aliases.fetch('myAlias');
* @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_cli_usernames_orgs.htm

@@ -87,3 +87,3 @@ */

* @example
* const aliases = Aliases.parseAndUpdate(['foo=bar', 'bar=baz'])
* const aliases = await Aliases.parseAndUpdate(['foo=bar', 'bar=baz'])
*/

@@ -90,0 +90,0 @@ static async parseAndUpdate(aliasKeyAndValues, group = AliasGroup.ORGS) {

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

/// <reference types="node" />
/**

@@ -11,2 +10,3 @@ * Options when creating the config file.

*/
/// <reference types="node" />
import { Stats as fsStats } from 'fs';

@@ -96,3 +96,3 @@ import { BaseConfigStore, ConfigContents } from './configStore';

* @returns {Promise<boolean>} `true` if the user has capabilities specified by perm.
* @see {@link SfdxUtil.access}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback|fs.access}
*/

@@ -127,3 +127,3 @@ access(perm: number): Promise<boolean>;

* @returns {Promise<fs.Stats>} stats The stats of the file.
* @see {@link SfdxUtil.stat}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_fstat_fd_callback|fs.stat}
*/

@@ -135,3 +135,3 @@ stat(): Promise<fsStats>;

* @returns {Promise<boolean>} True if the file was deleted, false otherwise.
* @see {@link SfdxUtil.unlink}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback|fs.unlink}
*/

@@ -138,0 +138,0 @@ unlink(): Promise<void>;

@@ -25,3 +25,5 @@ "use strict";

const os_1 = require("os");
const util_1 = require("../util");
const fs = require("../util/fs");
const internal_1 = require("../util/internal");
const json_1 = require("../util/json");
/**

@@ -77,3 +79,3 @@ * Represents a json config file used to manage settings and state. Global config

}
return isGlobal ? os_1.homedir() : await util_1.SfdxUtil.resolveProjectPath();
return isGlobal ? os_1.homedir() : await internal_1.resolveProjectPath();
}

@@ -131,7 +133,7 @@ /**

* @returns {Promise<boolean>} `true` if the user has capabilities specified by perm.
* @see {@link SfdxUtil.access}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback|fs.access}
*/
async access(perm) {
try {
await util_1.SfdxUtil.access(this.getPath(), perm);
await fs.access(this.getPath(), perm);
return true;

@@ -152,6 +154,3 @@ }

try {
const obj = await util_1.SfdxUtil.readJSON(this.getPath());
if (!lodash_1.isPlainObject(obj)) {
throw new sfdxError_1.SfdxError('UnexpectedJsonFileFormat');
}
const obj = await json_1.readJsonMap(this.getPath());
this.setContentsFromObject(obj);

@@ -182,4 +181,4 @@ return this.getContents();

}
await util_1.SfdxUtil.mkdirp(path_1.dirname(this.getPath()));
await util_1.SfdxUtil.writeJSON(this.getPath(), this.toObject());
await fs.mkdirp(path_1.dirname(this.getPath()));
await json_1.writeJson(this.getPath(), this.toObject());
return this.getContents();

@@ -199,6 +198,6 @@ }

* @returns {Promise<fs.Stats>} stats The stats of the file.
* @see {@link SfdxUtil.stat}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_fstat_fd_callback|fs.stat}
*/
async stat() {
return util_1.SfdxUtil.stat(this.getPath());
return fs.stat(this.getPath());
}

@@ -209,3 +208,3 @@ /**

* @returns {Promise<boolean>} True if the file was deleted, false otherwise.
* @see {@link SfdxUtil.unlink}
* @see {@link https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback|fs.unlink}
*/

@@ -215,3 +214,3 @@ async unlink() {

if (exists) {
return await util_1.SfdxUtil.unlink(this.getPath());
return await fs.unlink(this.getPath());
}

@@ -218,0 +217,0 @@ throw new sfdxError_1.SfdxError(`Target file doesn't exist. path: ${this.getPath()}`, 'TargetFileNotFound');

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

/**
* Options when creating the config file. Extends {@link ConfigOptions}.
* @typedef {object} ConfigGroupOptions
* @extends ConfigOptions
* @property {string} defaultGroup The default group for properties to go into.
*/
import { ConfigValue, ConfigEntry, ConfigContents } from './configStore';

@@ -2,0 +8,0 @@ import { ConfigFile, ConfigOptions } from './configFile';

@@ -1,9 +0,31 @@

import { JsonMap } from '../types';
/**
* Copyright (c) 2016, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*
* Note: These have to go here for jsdoc
*/
/**
* The allowed types stored in a config store.
* @typedef {(string | boolean | object)} ConfigValue
*/
export declare type ConfigValue = string | number | boolean | object;
/**
* The type of entries in a config store defined by the key and value type of {@link ConfigContents}.
* @typedef {object} ConfigEntry
* @property {string} key
* @property {ConfigValue} value
*/
/**
* The type of content a config stores.
* @typedef {Map<string, ConfigValue>} ConfigContents
*/
import { JsonMap, AnyJson } from '../types';
/**
* The allowed types stored in a config store.
*/
export declare type ConfigValue = AnyJson | object;
/**
* The type of entries in a config store defined by the key and value type of {@link ConfigContents}.
*/
export declare type ConfigEntry = [string, ConfigValue];

@@ -10,0 +32,0 @@ /**

@@ -11,4 +11,4 @@ "use strict";

const lodash_1 = require("lodash");
const util_1 = require("../util");
const path_1 = require("path");
const fs = require("../util/fs");
/**

@@ -39,4 +39,4 @@ * Represent a key chain config backed by a json file.

}
await util_1.SfdxUtil.mkdirp(path_1.dirname(this.getPath()));
await util_1.SfdxUtil.writeFile(this.getPath(), JSON.stringify(this.getContents(), null, 4), { mode: '600' });
await fs.mkdirp(path_1.dirname(this.getPath()));
await fs.writeFile(this.getPath(), JSON.stringify(this.getContents(), null, 4), { mode: '600' });
return this.getContents();

@@ -43,0 +43,0 @@ }

@@ -0,1 +1,22 @@

/**
* Contains meta information about sfdx config properties.
* @typedef {object} ConfigPropertyMeta
* @property {string} key The config property name.
* @property {input} value Reference to the config data input validation.
* @property {boolean} hidden True if the property should be indirectly hidden from the user.
* @property {boolean} encrypted True if the property values should be stored encrypted.
*/
/**
* Contains meta information about sfdx config properties.
* @typedef {object} ConfigPropertyMetaInput
* @property {function} validator Test if the input value is valid.
* @property {string} failedMessage The message to return in the error if the validation fails.
*/
/**
* Supported Org Default Types.
* @typedef {object} ORG_DEFAULT
* @property {string} DEVHUB Default developer hub username.
* @property {string} USERNAME Default username.
* @property {function} list `() => string[]` List the Org defaults.
*/
import { ConfigContents, ConfigValue } from './configStore';

@@ -33,3 +54,3 @@ import { ConfigFile, ConfigOptions } from './configFile';

*/
validator: (value) => {};
validator: (value: any) => {};
/**

@@ -132,3 +153,3 @@ * The message to return in the error if the validation fails.

*/
private initCrypto();
private initCrypto;
/**

@@ -138,3 +159,3 @@ * Closes the crypto dependency. Crypto should be close after it's used and no longer needed.

*/
private clearCrypto();
private clearCrypto;
/**

@@ -145,3 +166,3 @@ * Get an individual property config.

*/
private getPropertyConfig(propertyName);
private getPropertyConfig;
/**

@@ -152,8 +173,4 @@ * Encrypts and content properties that have a encryption attribute.

*/
private cryptProperties(encrypt);
private cryptProperties;
}
/**
* Supported Org Default Types.
* @type {object}
*/
export declare const ORG_DEFAULT: {

@@ -160,0 +177,0 @@ DEVHUB: string;

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

*/
/**
* Supported Org Default Types.
* @typedef {object} ORG_DEFAULT
* @property {string} DEVHUB Default developer hub username.
* @property {string} USERNAME Default username.
* @property {function} list `() => string[]` List the Org defaults.
*/
Object.defineProperty(exports, "__esModule", { value: true });

@@ -27,5 +34,5 @@ const _ = require("lodash");

const configFile_1 = require("./configFile");
const util_1 = require("../util");
const sfdxError_1 = require("../sfdxError");
const crypto_1 = require("../crypto");
const sfdc_1 = require("../util/sfdc");
const SFDX_CONFIG_FILE_NAME = 'sfdx-config.json';

@@ -69,3 +76,3 @@ /**

// If a value is provided validate it otherwise no value is unset.
validator: (value) => _.isNil(value) || util_1.SfdxUtil.isSalesforceDomain(value),
validator: (value) => _.isNil(value) || sfdc_1.isSalesforceDomain(value),
failedMessage: SfdxConfig.messages.getMessage('InvalidInstanceUrl')

@@ -79,3 +86,3 @@ }

// If a value is provided validate it otherwise no value is unset.
validator: util_1.SfdxUtil.validateApiVersion,
validator: sfdc_1.validateApiVersion,
failedMessage: SfdxConfig.messages.getMessage('InvalidApiVersion')

@@ -256,15 +263,5 @@ }

exports.SfdxConfig = SfdxConfig;
/**
* Supported Org Default Types.
* @type {object}
*/
exports.ORG_DEFAULT = {
/** {string} Default Developer Hub Username */
DEVHUB: SfdxConfig.DEFAULT_DEV_HUB_USERNAME,
/** {string} Default Username */
USERNAME: SfdxConfig.DEFAULT_USERNAME,
/**
* List the Org defaults.
* @returns {string[]} List of default orgs.
*/
list() {

@@ -271,0 +268,0 @@ return [exports.ORG_DEFAULT.DEVHUB, exports.ORG_DEFAULT.USERNAME];

@@ -0,1 +1,19 @@

/**
* An enum of all possible locations for a config value.
* @typedef LOCATIONS
* @property {string} GLOBAL Represents the global config.
* @property {string} LOCAL Represents the local project config.
* @property {string} ENVIRONMENT Represents environment variables.
*/
/**
* Information about a config property.
* @typedef ConfigInfo
* @property {string} key The config key.
* @property {string | boolean} value The config value.
* @property {LOCATIONS} location The location of the config property.
* @property {string} path The path of the config value.
* @property {function} isLocal `() => boolean` Location is `LOCATIONS.LOCAL`.
* @property {function} isGlobal `() => boolean` Location is `LOCATIONS.GLOBAL`.
* @property {function} isEnvVar `() => boolean` Location is `LOCATIONS.ENVIRONMENT`.
*/
import { SfdxConfig } from './sfdxConfig';

@@ -5,3 +23,3 @@ export declare const enum LOCATIONS {

LOCAL = "Local",
ENVIRONMENT = "Environment",
ENVIRONMENT = "Environment"
}

@@ -160,3 +178,3 @@ /**

*/
private loadProperties();
private loadProperties;
/**

@@ -167,3 +185,3 @@ * Set the resolved config object.

*/
private setConfig(config);
private setConfig;
/**

@@ -174,3 +192,3 @@ * Set the local config object.

*/
private setLocalConfig(config);
private setLocalConfig;
/**

@@ -181,3 +199,3 @@ * Set the global config object.

*/
private setGlobalConfig(config);
private setGlobalConfig;
/**

@@ -188,3 +206,3 @@ * Get the allowed properties.

*/
private getAllowedProperties();
private getAllowedProperties;
/**

@@ -195,3 +213,3 @@ * Set the allowed properties.

*/
private setAllowedProperties(properties);
private setAllowedProperties;
/**

@@ -202,3 +220,3 @@ * Sets the env variables.

*/
private setEnvVars(envVars);
private setEnvVars;
}

@@ -14,4 +14,4 @@ "use strict";

const jsforce_2 = require("jsforce");
const util_1 = require("./util");
const sfdxError_1 = require("./sfdxError");
const sfdc_1 = require("./util/sfdc");
/**

@@ -137,3 +137,3 @@ * The 'async' in our request override replaces the jsforce promise with the node promise, then returns it back to

setApiVersion(version) {
if (!util_1.SfdxUtil.validateApiVersion(version)) {
if (!sfdc_1.validateApiVersion(version)) {
throw new sfdxError_1.SfdxError(`Invalid API version ${version}. Expecting format "[1-9][0-9].0", i.e. 42.0`, 'IncorrectAPIVersion');

@@ -140,0 +140,0 @@ }

export declare class Crypto {
private keyChain;
private keyChain?;
static create(): Promise<Crypto>;

@@ -30,3 +30,3 @@ private messages;

close(): void;
private getKeyChain(platform);
private getKeyChain;
}

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

* @type {{get: KeychainPromises.get, set: KeychainPromises.set}}
* @private
*/

@@ -27,0 +28,0 @@ const keychainPromises = {

@@ -16,3 +16,3 @@ /**

DEMO = "demo",
TEST = "test",
TEST = "test"
}

@@ -19,0 +19,0 @@ /**

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

const path = require("path");
const util_1 = require("./util");
const fs = require("./util/fs");
/**

@@ -55,3 +55,3 @@ * Represents an environment mode. Supports `production`, `development`, `demo`, and `test`

dirPath = dirPath ? path.join(Global.DIR, dirPath) : Global.DIR;
await util_1.SfdxUtil.mkdirp(dirPath, util_1.SfdxUtil.DEFAULT_USER_DIR_MODE);
await fs.mkdirp(dirPath, fs.DEFAULT_USER_DIR_MODE);
}

@@ -58,0 +58,0 @@ }

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

Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("./util");
const keyChainImpl_1 = require("./keyChainImpl");
const logger_1 = require("./logger");
const sfdxError_1 = require("./sfdxError");
const internal_1 = require("./util/internal");
/**

@@ -23,3 +23,3 @@ * Gets the os level keychain impl.

logger.debug(`platform: ${platform}`);
const useGenericUnixKeychainVar = util_1.SfdxUtil.isEnvVarTruthy('SFDX_USE_GENERIC_UNIX_KEYCHAIN');
const useGenericUnixKeychainVar = internal_1.isEnvVarTruthy('SFDX_USE_GENERIC_UNIX_KEYCHAIN');
const shouldUseGenericUnixKeychain = !!useGenericUnixKeychainVar && useGenericUnixKeychainVar;

@@ -26,0 +26,0 @@ if (/^win/.test(platform)) {

@@ -35,3 +35,3 @@ /**

setPassword(opts: any, fn: any): Promise<any>;
protected isValidFileAccess(cb: (val?) => Promise<void>): Promise<void>;
protected isValidFileAccess(cb: (val?: any) => Promise<void>): Promise<void>;
}

@@ -42,3 +42,3 @@ /**

export declare class GenericUnixKeychainAccess extends GenericKeychainAccess {
protected isValidFileAccess(cb: (val?) => Promise<void>): Promise<void>;
protected isValidFileAccess(cb: (val?: any) => Promise<void>): Promise<void>;
}

@@ -45,0 +45,0 @@ /**

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

const _ = require("lodash");
const fs = require("fs");
const nodeFs = require("fs");
const os = require("os");

@@ -16,6 +16,6 @@ const path = require("path");

const sfdxError_1 = require("./sfdxError");
const util_1 = require("./util");
const global_1 = require("./global");
const keychainConfig_1 = require("./config/keychainConfig");
const configFile_1 = require("./config/configFile");
const fs = require("./util/fs");
/* tslint:disable: no-bitwise */

@@ -26,2 +26,3 @@ const GET_PASSWORD_RETRY_COUNT = 3;

* @param optionsArray CLI command args.
* @private
*/

@@ -351,3 +352,3 @@ function _optionsToString(optionsArray) {

const root = await configFile_1.ConfigFile.resolveRootFolder(true);
await util_1.SfdxUtil.access(path.join(root, global_1.Global.STATE_FOLDER), fs.constants.R_OK | fs.constants.X_OK | fs.constants.W_OK);
await fs.access(path.join(root, global_1.Global.STATE_FOLDER), fs.constants.R_OK | fs.constants.X_OK | fs.constants.W_OK);
await cb(null);

@@ -400,6 +401,6 @@ }

generic_windows: new GenericWindowsKeychainAccess(),
darwin: new KeychainAccess(_darwinImpl, fs),
linux: new KeychainAccess(_linuxImpl, fs),
darwin: new KeychainAccess(_darwinImpl, nodeFs),
linux: new KeychainAccess(_linuxImpl, nodeFs),
validateProgram: _validateProgram
};
//# sourceMappingURL=keyChainImpl.js.map

@@ -22,3 +22,3 @@ /// <reference types="node" />

ERROR = 50,
FATAL = 60,
FATAL = 60
}

@@ -78,3 +78,3 @@ export interface LoggerStream {

*/
static readonly LEVEL_NAMES: string[];
static readonly LEVEL_NAMES: any[];
/**

@@ -206,3 +206,3 @@ * Gets the root logger with the default level and file stream.

*/
addFilter(filter: (...args) => any[]): void;
addFilter(filter: (...args: any[]) => any[]): void;
/**

@@ -273,5 +273,5 @@ * Close the logger, including any streams, and remove all listeners.

fatal(...args: any[]): Logger;
private applyFilters(logLevel, ...args);
private applyFilters;
private uncaughtExceptionHandler;
private exitHandler;
}

@@ -80,5 +80,5 @@ "use strict";

*/
const fs = require("fs");
const os = require("os");
const path = require("path");
const stream_1 = require("stream");
const EventEmitter = require("events");

@@ -88,4 +88,5 @@ const Bunyan = require("bunyan-sfdx-no-dtrace");

const global_1 = require("./global");
const util_1 = require("./util");
const sfdxError_1 = require("./sfdxError");
const createDebugUtil = require("debug");
const fs = require("./util/fs");
var LoggerLevel;

@@ -179,2 +180,26 @@ (function (LoggerLevel) {

}
// The debug library does this for you, but no point setting up the stream if it isn't there
if (process.env.DEBUG) {
const debuggers = {};
debuggers['core'] = createDebugUtil(`${this.rootLogger.getName()}:core`);
this.rootLogger.addStream({
name: 'debug',
stream: new stream_1.Writable({
write: (chunk, encoding, next) => {
const json = JSON.parse(chunk.toString());
let debuggerName = 'core';
if (json['log']) {
debuggerName = json['log'];
if (!debuggers[debuggerName]) {
debuggers[debuggerName] = createDebugUtil(`${this.rootLogger.getName()}:${debuggerName}`);
}
}
debuggers[debuggerName](`${LoggerLevel[json.level]} ${json.msg}`);
next();
}
}),
// Consume all levels
level: 0
});
}
return this.rootLogger;

@@ -236,7 +261,7 @@ }

// Check if we have write access to the log file (i.e., we created it already)
await util_1.SfdxUtil.access(logFile, fs.constants.W_OK);
await fs.access(logFile, fs.constants.W_OK);
}
catch (err1) {
try {
await util_1.SfdxUtil.mkdirp(path.dirname(logFile), { mode: util_1.SfdxUtil.DEFAULT_USER_DIR_MODE });
await fs.mkdirp(path.dirname(logFile), { mode: fs.DEFAULT_USER_DIR_MODE });
}

@@ -247,3 +272,3 @@ catch (err2) {

try {
await util_1.SfdxUtil.writeFile(logFile, '', { mode: util_1.SfdxUtil.DEFAULT_USER_FILE_MODE });
await fs.writeFile(logFile, '', { mode: fs.DEFAULT_USER_FILE_MODE });
}

@@ -367,3 +392,3 @@ catch (err3) {

if (stream.type === 'file') {
content += await util_1.SfdxUtil.readFile(stream.path, 'utf8');
content += await fs.readFile(stream.path, 'utf8');
}

@@ -370,0 +395,0 @@ });

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

/// <reference types="node" />
import * as fs from 'fs';
import { AnyJson } from './types';
/**

@@ -15,5 +14,5 @@ * The core message framework manages messages and allows them to be accessible by

* In the beginning of your app or file, add the loader functions to be used later. If using
* json files in a root messages directory (`<moduleRoot>/messages`), load the entire directory
* automatically with {@link Messages.importMessagesDirectory}. Message files must be in `.json`
* with **only** top level key-value pairs. The values support
* json or js files in a root messages directory (`<moduleRoot>/messages`), load the entire directory
* automatically with {@link Messages.importMessagesDirectory}. Message files must be in `.json` or `.js`
* that exports a json object with **only** top level key-value pairs. The values support
* [util.format](https://nodejs.org/api/util.html#util_util_format_format_args) style strings

@@ -49,3 +48,3 @@ * that apply the tokens passed into {@link Message.getMessage}

private messages;
static _readFile: typeof fs.readFileSync;
static _readFile: (filePath: string) => AnyJson;
/**

@@ -89,3 +88,3 @@ * Get the locale. This will always return 'en_US' but will return the

/**
* Import all json files in a messages directory. Use the file name as the bundle key when
* Import all json and js files in a messages directory. Use the file name as the bundle key when
* {@link Messages.loadMessages} is called. By default, we're assuming the moduleDirectoryPart is a

@@ -92,0 +91,0 @@ * typescript project and will truncate to root path (where the package.json file is). If your messages

@@ -39,5 +39,5 @@ "use strict";

* In the beginning of your app or file, add the loader functions to be used later. If using
* json files in a root messages directory (`<moduleRoot>/messages`), load the entire directory
* automatically with {@link Messages.importMessagesDirectory}. Message files must be in `.json`
* with **only** top level key-value pairs. The values support
* json or js files in a root messages directory (`<moduleRoot>/messages`), load the entire directory
* automatically with {@link Messages.importMessagesDirectory}. Message files must be in `.json` or `.js`
* that exports a json object with **only** top level key-value pairs. The values support
* [util.format](https://nodejs.org/api/util.html#util_util_format_format_args) style strings

@@ -119,6 +119,6 @@ * that apply the tokens passed into {@link Message.getMessage}

return (locale) => {
const fileContents = this._readFile(filePath, 'utf8');
// If the file is empty throw an error that is clearer than "Unexpected end of JSON input",
// which is what JSON.parse throws.
if (!fileContents || _.isEmpty(_.trim(fileContents))) {
// Anything can be returned by a js file, so stringify the results to ensure valid json is returned.
const fileContents = JSON.stringify(this._readFile(filePath));
// If the file is empty, JSON.stringify will turn it into "" which will validate on parse, so throw.
if (!fileContents || fileContents === 'null' || fileContents === '""') {
const error = new Error(`Invalid message file: ${filePath}. No content.`);

@@ -131,2 +131,6 @@ error.name = 'SfdxError';

json = JSON.parse(fileContents);
if (!_.isObject(json)) {
// Bubble up
throw new Error(`Unexpected token. Found returned content type '${typeof json}'.`);
}
}

@@ -157,6 +161,6 @@ catch (err) {

static importMessageFile(packageName, filePath) {
if (path.extname(filePath) !== '.json') {
throw new Error(`Only json message files are allowed, not ${path.extname(filePath)}`);
if (path.extname(filePath) !== '.json' && path.extname(filePath) !== '.js') {
throw new Error(`Only json and js message files are allowed, not ${path.extname(filePath)}`);
}
const bundleName = path.basename(filePath, '.json');
const bundleName = path.basename(filePath, path.extname(filePath));
if (!this.isCached(packageName, bundleName)) {

@@ -167,3 +171,3 @@ this.setLoaderFunction(packageName, bundleName, Messages.generateFileLoaderFunction(bundleName, filePath));

/**
* Import all json files in a messages directory. Use the file name as the bundle key when
* Import all json and js files in a messages directory. Use the file name as the bundle key when
* {@link Messages.loadMessages} is called. By default, we're assuming the moduleDirectoryPart is a

@@ -185,2 +189,5 @@ * typescript project and will truncate to root path (where the package.json file is). If your messages

let projectRoot = moduleDirectoryPath;
if (!path.isAbsolute(moduleDirectoryPath)) {
throw new Error('Invalid module path. Relative URLs are not allowed.');
}
while (projectRoot.length >= 0) {

@@ -203,6 +210,6 @@ try {

try {
packageName = JSON.parse(this._readFile(`${moduleMessagesDirPath}${path.sep}package.json`, 'utf8')).name;
packageName = this._readFile(path.join(moduleMessagesDirPath, 'package.json')).name;
}
catch (err) {
const error = new Error(`Invalid or missing package.json file at ${moduleMessagesDirPath}. If not using a package.json, pass in a packageName.\n${err.message}`);
const error = new Error(`Invalid or missing package.json file at '${moduleMessagesDirPath}'. If not using a package.json, pass in a packageName.\n${err.message}`);
error.name = 'MissingPackageName';

@@ -272,5 +279,7 @@ throw error;

}
// Internal readFile. Exposed for unit testing. Do not use sfdxUtil.readFile as messages.js
// Internal readFile. Exposed for unit testing. Do not use util/fs.readFile as messages.js
// should have no internal dependencies.
Messages._readFile = fs.readFileSync;
Messages._readFile = (filePath) => {
return require(filePath);
};
// It would be AWESOME to use Map<Key, Message> but js does an object instance comparison and doesn't let you

@@ -277,0 +286,0 @@ // override valueOf or equals for the === operator, which map uses. So, Use Map<String, Message>

@@ -5,2 +5,3 @@ import { Connection } from './connection';

import { OrgUsersConfig } from './config/orgUsersConfig';
import { AnyJson, Dictionary } from './types';
export declare enum OrgStatus {

@@ -10,20 +11,14 @@ ACTIVE = "ACTIVE",

UNKNOWN = "UNKNOWN",
MISSING = "MISSING",
MISSING = "MISSING"
}
/**
* Additional information tracked for an org beyond what's provided by the local auth information.
*/
export interface OrgMetaInfo {
/**
* The auth info used for the org connection
*/
info: AuthInfo;
/**
* If true the dev hub configuration is missing
*/
devHubMissing?: boolean;
/**
* True if this org has expired.
*/
expired?: boolean;
export declare enum OrgFields {
ALIAS = "alias",
CREATED = "created",
CREATED_ORG_INSTANCE = "createdOrgInstance",
DEV_HUB_USERNAME = "devHubUsername",
INSTANCE_URL = "instanceUrl",
IS_DEV_HUB = "isDevHub",
LOGIN_URL = "loginUrl",
ORG_ID = "orgId",
STATUS = "status"
}

@@ -162,7 +157,17 @@ /**

/**
* Returns meta information about this org.
* @returns {OrgMetaInfo}
* Returns an org field. Returns undefined if the field is not set or invalid.
* @returns {AnyJson}
*/
getMetaInfo(): OrgMetaInfo;
getField(key: OrgFields): AnyJson;
/**
* Returns a map of requested fields.
* @returns {Dictionary<AnyJson>}
*/
getFields(keys: OrgFields[]): Dictionary<AnyJson>;
/**
* Returns the org connection's auth info
* @returns {AuthInfo}
*/
getAuthInfo(): AuthInfo;
/**
* Returns the JSForce connection for the org.

@@ -179,3 +184,3 @@ * @returns {Connection}

*/
private setConnection(connection);
private setConnection;
}

@@ -10,2 +10,14 @@ "use strict";

/**
* Org Fields.
* @typedef OrgFields
* @property {string} ALIAS The org alias.
* @property {string} CREATED_ORG_INSTANCE The Salesforce instance the org was created on. e.g. `cs42`.
* @property {string} DEV_HUB_USERNAME The username of the dev hub org that created this org. Only populated for scratch orgs.
* @property {string} INSTANCE_URL The full url of the instance the org lives on.
* @property {string} IS_DEV_HUB Is the current org a dev hub org. e.g. They have access to the `ScratchOrgInfo` object.
* @property {string} LOGIN_URL The login url of the org. e.g. `https://login.salesforce.com` or `https://test.salesforce.com`.
* @property {string} ORG_ID The org ID.
* @property {string} STATUS The `OrgStatus` of the org.
*/
/**
* Scratch Org status.

@@ -27,5 +39,6 @@ * @typedef OrgStatus

const global_1 = require("./global");
const util_1 = require("./util");
const orgUsersConfig_1 = require("./config/orgUsersConfig");
const sfdxError_1 = require("./sfdxError");
const sfdc_1 = require("./util/sfdc");
const fs = require("./util/fs");
var OrgStatus;

@@ -38,2 +51,29 @@ (function (OrgStatus) {

})(OrgStatus = exports.OrgStatus || (exports.OrgStatus = {}));
// A subset of fields from AuthInfoFields and properties that are specific to Org,
// and properties that are defined on Org itself.
var OrgFields;
(function (OrgFields) {
// From AuthInfo
OrgFields["ALIAS"] = "alias";
OrgFields["CREATED"] = "created";
OrgFields["CREATED_ORG_INSTANCE"] = "createdOrgInstance";
OrgFields["DEV_HUB_USERNAME"] = "devHubUsername";
OrgFields["INSTANCE_URL"] = "instanceUrl";
OrgFields["IS_DEV_HUB"] = "isDevHub";
OrgFields["LOGIN_URL"] = "loginUrl";
OrgFields["ORG_ID"] = "orgId";
// From Org
OrgFields["STATUS"] = "status";
// Should it be on org? Leave it off for now, as it might
// be confusing to the consumer what this actually is.
// USERNAMES = 'usernames',
// Keep separation of concerns. I think these should be on a "user" that belongs to the org.
// Org can have a list of user objects that belong to it? Should connection be on user and org.getConnection()
// gets the orgs current user for the process? Maybe we just want to keep with the Org only model for
// the end of time?
// USER_ID = 'userId',
// USERNAME = 'username',
// PASSWORD = 'password',
// USER_PROFILE_NAME = 'userProfileName'
})(OrgFields = exports.OrgFields || (exports.OrgFields = {}));
const _manageDelete = function (cb, dirPath, throwWhenRemoveFails) {

@@ -138,3 +178,3 @@ return cb().catch((e) => {

}
return _manageDelete.call(this, async () => await util_1.SfdxUtil.remove(dataPath), dataPath, throwWhenRemoveFails);
return _manageDelete.call(this, async () => await fs.remove(dataPath), dataPath, throwWhenRemoveFails);
}

@@ -165,3 +205,3 @@ async retrieveOrgUsersConfig() {

let orgForUser;
if (username === this.getConnection().getAuthInfo().getFields().username) {
if (username === this.getUsername()) {
orgForUser = this;

@@ -199,3 +239,3 @@ }

const thisOrgAuthConfig = this.getConnection().getAuthInfo().getFields();
const trimmedId = util_1.SfdxUtil.trimTo15(thisOrgAuthConfig.orgId);
const trimmedId = sfdc_1.trimTo15(thisOrgAuthConfig.orgId);
const DEV_HUB_SOQL = `SELECT CreatedDate,Edition,ExpirationDate FROM ActiveScratchOrg WHERE ScratchOrg=\'${trimmedId}\'`;

@@ -222,8 +262,7 @@ let results;

async getDevHubOrg() {
const orgData = this.getMetaInfo();
if (this.isDevHubOrg()) {
return Promise.resolve(this);
}
else if (orgData.info.getFields().devHubUsername) {
return Org.create(await connection_1.Connection.create(await authInfo_1.AuthInfo.create(orgData.info.getFields().devHubUsername)));
else if (this.getField(OrgFields.DEV_HUB_USERNAME)) {
return Org.create(await connection_1.Connection.create(await authInfo_1.AuthInfo.create(this.getField(OrgFields.DEV_HUB_USERNAME))));
}

@@ -236,3 +275,3 @@ }

isDevHubOrg() {
return this.getConnection().getAuthInfo().getFields().isDevHub;
return this.getField(OrgFields.IS_DEV_HUB);
}

@@ -259,3 +298,3 @@ /**

const contents = await config.read();
const thisUsername = this.getConnection().getAuthInfo().getFields().username;
const thisUsername = this.getUsername();
const usernames = contents.get('usernames') || [thisUsername];

@@ -290,3 +329,3 @@ return Promise.all(usernames.map((username) => {

let shouldUpdate = false;
const thisUsername = this.getConnection().getAuthInfo().getFields().username;
const thisUsername = this.getUsername();
if (!usernames.includes(thisUsername)) {

@@ -339,3 +378,3 @@ usernames.push(thisUsername);

getUsername() {
return this.getMetaInfo().info.getFields().username;
return this.getAuthInfo().getUsername();
}

@@ -347,3 +386,3 @@ /**

getOrgId() {
return this.getMetaInfo().info.getFields().orgId;
return this.getField(OrgFields.ORG_ID);
}

@@ -358,11 +397,23 @@ /**

/**
* Returns meta information about this org.
* @returns {OrgMetaInfo}
* Returns an org field. Returns undefined if the field is not set or invalid.
* @returns {AnyJson}
*/
getMetaInfo() {
return {
info: this.getConnection().getAuthInfo()
};
getField(key) {
return this[key] || this.getAuthInfo().getFields()[key];
}
/**
* Returns a map of requested fields.
* @returns {Dictionary<AnyJson>}
*/
getFields(keys) {
return keys.reduce((map, key) => { map[key] = this.getField(key); return map; }, {});
}
/**
* Returns the org connection's auth info
* @returns {AuthInfo}
*/
getAuthInfo() {
return this.getConnection().getAuthInfo();
}
/**
* Returns the JSForce connection for the org.

@@ -369,0 +420,0 @@ * @returns {Connection}

@@ -22,4 +22,4 @@ import { ConfigContents } from './config/configStore';

static getFileName(): string;
static getDefaultOptions(isGlobal?: boolean, filename?: string): ConfigOptions;
read(throwOnNotFound?: boolean): Promise<ConfigContents>;
static getDefaultOptions(isGlobal?: boolean): ConfigOptions;
read(): Promise<ConfigContents>;
}

@@ -44,2 +44,12 @@ /**

static resolve(path?: string): Promise<Project>;
/**
* Performs an upward directory search for an sfdx project file.
*
* @param {string} [dir=process.cwd()] The directory path to start traversing from.
* @returns {Promise<string>} The absolute path to the project.
* @throws {SfdxError} **`{name: 'InvalidProjectWorkspace'}`** If the current folder is not located in a workspace.
* @see fs.traverseForFile
* @see {@link https://nodejs.org/api/process.html#process_process_cwd|process.cwd()}
*/
static resolveProjectPath(dir: string): Promise<string>;
private projectConfig;

@@ -46,0 +56,0 @@ private sfdxProjectJson;

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

const sfdxError_1 = require("./sfdxError");
const util_1 = require("./util");
const internal_1 = require("./util/internal");
const json_1 = require("./util/json");
/**

@@ -34,5 +35,5 @@ * The sfdx-project.json config object. This file determines if a folder is a valid sfdx project.

static getFileName() {
return util_1.SfdxUtil.SFDX_PROJECT_JSON;
return internal_1.SFDX_PROJECT_JSON;
}
static getDefaultOptions(isGlobal = false, filename) {
static getDefaultOptions(isGlobal = false) {
const options = super.getDefaultOptions(isGlobal);

@@ -42,6 +43,6 @@ options.isState = false;

}
async read(throwOnNotFound = false) {
async read() {
const contents = await super.read();
// Verify that the configObject does not have upper case keys; throw if it does. Must be heads down camelcase.
const upperCaseKey = util_1.SfdxUtil.findUpperCaseKeys(contents);
// Verify that the configObject does not have upper case keys; throw if it does. Must be heads down camel case.
const upperCaseKey = json_1.findUpperCaseKeys(this.toObject());
if (upperCaseKey) {

@@ -80,5 +81,17 @@ throw sfdxError_1.SfdxError.create('@salesforce/core', 'core', 'InvalidJsonCasing', [upperCaseKey, this.getPath()]);

static async resolve(path) {
return new Project(await util_1.SfdxUtil.resolveProjectPath(path));
return new Project(await this.resolveProjectPath(path));
}
/**
* Performs an upward directory search for an sfdx project file.
*
* @param {string} [dir=process.cwd()] The directory path to start traversing from.
* @returns {Promise<string>} The absolute path to the project.
* @throws {SfdxError} **`{name: 'InvalidProjectWorkspace'}`** If the current folder is not located in a workspace.
* @see fs.traverseForFile
* @see {@link https://nodejs.org/api/process.html#process_process_cwd|process.cwd()}
*/
static async resolveProjectPath(dir) {
return internal_1.resolveProjectPath(dir);
}
/**
* Returns the project path.

@@ -85,0 +98,0 @@ * @returns {string}

/**
* An object with arbitrary string-indexed values of a generic type.
*
* @typedef {Object<string, T>} Dictionary<T>
*/
/**
* An object with arbitrary string-indexed values of any type.
*
* @typedef {Dictionary<any>} AnyDictionary
*/
/**
* Any valid JSON value.

@@ -9,3 +19,3 @@ *

*
* @typedef {Object<string, AnyJson>} JsonMap
* @typedef {Dictionary<AnyJson>} JsonMap
*/

@@ -17,2 +27,6 @@ /**

*/
export interface Dictionary<T> {
[key: string]: T;
}
export declare type AnyDictionary = Dictionary<any>;
export declare type AnyJson = boolean | number | string | null | JsonArray | JsonMap;

@@ -19,0 +33,0 @@ export interface JsonMap {

"use strict";
/*
* Copyright (c) 2018, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/
/**
* An object with arbitrary string-indexed values of a generic type.
*
* @typedef {Object<string, T>} Dictionary<T>
*/
/**
* An object with arbitrary string-indexed values of any type.
*
* @typedef {Dictionary<any>} AnyDictionary
*/
/**
* Any valid JSON value.

@@ -10,3 +26,3 @@ *

*
* @typedef {Object<string, AnyJson>} JsonMap
* @typedef {Dictionary<AnyJson>} JsonMap
*/

@@ -13,0 +29,0 @@ /**

@@ -146,6 +146,6 @@ /**

* @param {object[]} rows The rows of data to be output in table format.
* @param {Partial<SfdxTableOptions>} options The {@link SfdxTableOptions} to use for formatting.
* @param {SfdxTableOptions} options The {@link SfdxTableOptions} to use for formatting.
* @returns {UX}
*/
table(rows: any[], options?: Partial<SfdxTableOptions>): UX;
table(rows: any[], options?: SfdxTableOptions): UX;
/**

@@ -182,3 +182,3 @@ * Logs at `INFO` level and conditionally writes to `stdout` in a styled object format if

*/
export declare type SfdxTableOptions = TableOptions | string[];
export declare type SfdxTableOptions = Partial<TableOptions> | string[];
/**

@@ -185,0 +185,0 @@ * A deprecation warning message configuration type. A typical instance can pass `name`,

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

* @param {object[]} rows The rows of data to be output in table format.
* @param {Partial<SfdxTableOptions>} options The {@link SfdxTableOptions} to use for formatting.
* @param {SfdxTableOptions} options The {@link SfdxTableOptions} to use for formatting.
* @returns {UX}

@@ -224,4 +224,4 @@ */

if (this.isOutputEnabled) {
options = (_.isArray(options) ? { columns: options } : options);
const columns = _.get(options, 'columns');
const tableOptions = _.isArray(options) ? { columns: options } : options;
const columns = _.get(tableOptions, 'columns');
if (columns) {

@@ -241,5 +241,5 @@ const _columns = [];

});
options.columns = _columns;
tableOptions.columns = _columns;
}
this.cli.table(rows, options);
this.cli.table(rows, tableOptions);
}

@@ -246,0 +246,0 @@ // Log after table output as log filtering mutates data.

@@ -109,2 +109,2 @@ import { Logger } from '../lib/logger';

*/
export declare const testSetup: (sandbox?: any) => TestContext;
export declare const testSetup: (sinon?: any) => TestContext;

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

*/
exports.testSetup = lodash_1.once((sandbox) => {
if (!sandbox) {
exports.testSetup = lodash_1.once((sinon) => {
if (!sinon) {
try {
sandbox = require('sinon').sandbox;
sinon = require('sinon');
}

@@ -118,3 +118,3 @@ catch (e) {

// Create a global sinon sandbox and a test logger instance for use within tests.
const defaultSandbox = sandbox.create();
const defaultSandbox = sinon.createSandbox();
const testContext = {

@@ -124,5 +124,5 @@ SANDBOX: defaultSandbox,

DEFAULT: defaultSandbox,
CONFIG: sandbox.create(),
CRYPTO: sandbox.create(),
CONNECTION: sandbox.create()
CONFIG: sinon.createSandbox(),
CRYPTO: sinon.createSandbox(),
CONNECTION: sinon.createSandbox()
},

@@ -129,0 +129,0 @@ TEST_LOGGER: new logger_1.Logger({ name: 'SFDX_Core_Test_Logger' }).useMemoryLogging(),

{
"name": "@salesforce/core",
"version": "0.16.16",
"version": "0.17.2",
"description": "Core libraries to interact with SFDX projects, orgs, and APIs.",

@@ -39,2 +39,4 @@ "main": "dist/exported",

"cli-ux": "3.3.25",
"debug": "3.1.0",
"jsen": "0.6.6",
"jsforce": "1.8.4",

@@ -46,9 +48,12 @@ "jsonwebtoken": "7.0.0",

"devDependencies": {
"@types/jsforce": "1.8.12",
"@salesforce/dev-config": "1.0.4",
"@types/chai": "4.0.4",
"@types/jsen": "0.0.19",
"@types/jsforce": "1.8.12",
"@types/lodash": "4.14.88",
"@types/mkdirp": "0.5.2",
"@types/mocha": "2.2.42",
"@types/node": "8.0.25",
"@types/shelljs": "0.7.8",
"@types/sinon": "4.3.2",
"chai": "4.1.1",

@@ -60,6 +65,6 @@ "docdash": "0.4.0",

"shelljs": "0.8.1",
"sinon": "3.2.1",
"sinon": "5.0.7",
"source-map-support": "^0.5.3",
"ts-node": "4.1.0",
"typescript": "2.6.2",
"typescript": "2.9.1",
"xunit-file": "1.0.0"

@@ -66,0 +71,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

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc