UNPKG

@candrewsintegralblue/snyk

Version:

snyk library and cli utility

588 lines (530 loc) 16.7 kB
exports.id = 726; exports.ids = [726]; exports.modules = { /***/ 94378: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { try { var util = __webpack_require__(73837); /* istanbul ignore next */ if (typeof util.inherits !== 'function') throw ''; module.exports = util.inherits; } catch (e) { /* istanbul ignore next */ module.exports = __webpack_require__(35717); } /***/ }), /***/ 35717: /***/ ((module) => { if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }) } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } } /***/ }), /***/ 5800: /***/ ((module) => { /** * lodash (Custom Build) <https://lodash.com/> * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors <https://jquery.org/> * Released under MIT license <https://lodash.com/license> * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]'; /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** Built-in value references. */ var Symbol = root.Symbol, propertyIsEnumerable = objectProto.propertyIsEnumerable, spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array ? array.length : 0; return length ? baseFlatten(array, 1) : []; } /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ function isArguments(value) { // Safari 8.1 makes `arguments.callee` enumerable in strict mode. return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); } /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 8-9 which returns 'object' for typed array and other constructors. var tag = isObject(value) ? objectToString.call(value) : ''; return tag == funcTag || tag == genTag; } /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return !!value && (type == 'object' || type == 'function'); } /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return !!value && typeof value == 'object'; } module.exports = flatten; /***/ }), /***/ 70919: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FlagError = void 0; const process_command_args_1 = __webpack_require__(52369); const legacyError = __webpack_require__(79407); const drift_1 = __webpack_require__(26445); const errors_1 = __webpack_require__(55191); const get_iac_org_settings_1 = __webpack_require__(11693); const assert_iac_options_flag_1 = __webpack_require__(33111); const config_1 = __webpack_require__(25425); const analytics_1 = __webpack_require__(41519); const analytics = __webpack_require__(82744); const policy_1 = __webpack_require__(32615); const driftctl_1 = __webpack_require__(3659); const types_1 = __webpack_require__(94820); const error_utils_1 = __webpack_require__(36401); const error_catalog_nodejs_public_1 = __webpack_require__(88404); class FlagError extends errors_1.CustomError { constructor(flag) { const msg = `Unsupported flag "${flag}" provided. Run snyk iac describe --help for supported flags`; super(msg); this.code = types_1.IaCErrorCodes.FlagError; this.strCode = (0, error_utils_1.getErrorStringCode)(this.code); this.userMessage = msg; this.errorCatalog = new error_catalog_nodejs_public_1.CLI.InvalidFlagOptionError(''); } } exports.FlagError = FlagError; exports["default"] = async (...args) => { var _a, _b; const { options } = (0, process_command_args_1.processCommandArgs)(...args); // Ensure that this describe command can only be runned when using `snyk iac describe` // Avoid `snyk describe` direct usage if (options.iac != true) { return legacyError('describe'); } if (options['only-managed']) { return Promise.reject(new FlagError('only-managed')); } // Ensure that we are allowed to run that command // by checking the entitlement const orgPublicId = (_a = options.org) !== null && _a !== void 0 ? _a : config_1.default.org; const iacOrgSettings = await (0, get_iac_org_settings_1.getIacOrgSettings)(orgPublicId); if (!((_b = iacOrgSettings.entitlements) === null || _b === void 0 ? void 0 : _b.iacDrift)) { throw new assert_iac_options_flag_1.UnsupportedEntitlementCommandError('drift', 'iacDrift'); } const policy = await (0, policy_1.findAndLoadPolicy)(process.cwd(), 'iac', options); const driftIgnore = (0, drift_1.driftignoreFromPolicy)(policy); try { const describe = await (0, driftctl_1.runDriftCTL)({ options: { ...options, kind: 'describe' }, driftIgnore: driftIgnore, }); process.exitCode = describe.code; analytics.add('is-iac-drift', true); analytics.add('iac-drift-exit-code', describe.code); if (describe.code === driftctl_1.DCTL_EXIT_CODES.EXIT_ERROR) { throw new Error(); } // Parse analysis JSON and add to analytics const analysis = (0, drift_1.parseDriftAnalysisResults)(describe.stdout); (0, analytics_1.addIacDriftAnalytics)(analysis, options); const output = await (0, drift_1.processAnalysis)(options, describe); process.stdout.write(output); } catch (e) { return Promise.reject(e); } }; /***/ }), /***/ 8820: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.findAndLoadPolicy = void 0; const snykPolicyLib = __webpack_require__(13284); const debugModule = __webpack_require__(15158); const _1 = __webpack_require__(32615); const analytics = __webpack_require__(82744); const debug = debugModule('snyk'); async function findAndLoadPolicy(root, scanType, options, pkg, scannedProjectFolder) { const isDocker = scanType === 'docker'; const isNodeProject = ['npm', 'yarn', 'pnpm'].includes(scanType); // monitor let policyLocations = [ options['policy-path'] || scannedProjectFolder || root, ]; if (isDocker) { policyLocations = policyLocations.filter((loc) => loc !== root); } else if (isNodeProject) { // TODO: pluckPolicies expects a package.json object to // find and apply policies in node_modules // TODO: fix these types, this is a hack and is not correct policyLocations = policyLocations.concat((0, _1.pluckPolicies)(pkg)); } debug('Potential policy locations found:', policyLocations); analytics.add('policies', policyLocations.length); analytics.add('policyLocations', policyLocations); if (policyLocations.length === 0) { return; } let policy; try { policy = await snykPolicyLib.load(policyLocations, options); } catch (err) { // note: inline catch, to handle error from .load // if the .snyk file wasn't found, it is fine if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') { throw err; } } return policy; } exports.findAndLoadPolicy = findAndLoadPolicy; /***/ }), /***/ 32615: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.findAndLoadPolicy = exports.pluckPolicies = void 0; var pluck_policies_1 = __webpack_require__(68247); Object.defineProperty(exports, "pluckPolicies", ({ enumerable: true, get: function () { return pluck_policies_1.pluckPolicies; } })); var find_and_load_policy_1 = __webpack_require__(8820); Object.defineProperty(exports, "findAndLoadPolicy", ({ enumerable: true, get: function () { return find_and_load_policy_1.findAndLoadPolicy; } })); /***/ }), /***/ 68247: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.pluckPolicies = void 0; const flatten = __webpack_require__(5800); function pluckPolicies(pkg) { if (!pkg) { return []; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: broken type if (pkg.snyk) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: broken type return pkg.snyk; } if (!pkg.dependencies) { return []; } return flatten(Object.keys(pkg.dependencies) .map((name) => pluckPolicies(pkg.dependencies[name])) .filter(Boolean)); } exports.pluckPolicies = pluckPolicies; /***/ }) }; ; //# sourceMappingURL=726.index.js.map