Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/lodash/mixin.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

74 lines (68 sloc)
2.18 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var arrayEach = require('./_arrayEach'), | |
arrayPush = require('./_arrayPush'), | |
baseFunctions = require('./_baseFunctions'), | |
copyArray = require('./_copyArray'), | |
isFunction = require('./isFunction'), | |
isObject = require('./isObject'), | |
keys = require('./keys'); | |
/** | |
* Adds all own enumerable string keyed function properties of a source | |
* object to the destination object. If `object` is a function, then methods | |
* are added to its prototype as well. | |
* | |
* **Note:** Use `_.runInContext` to create a pristine `lodash` function to | |
* avoid conflicts caused by modifying the original. | |
* | |
* @static | |
* @since 0.1.0 | |
* @memberOf _ | |
* @category Util | |
* @param {Function|Object} [object=lodash] The destination object. | |
* @param {Object} source The object of functions to add. | |
* @param {Object} [options={}] The options object. | |
* @param {boolean} [options.chain=true] Specify whether mixins are chainable. | |
* @returns {Function|Object} Returns `object`. | |
* @example | |
* | |
* function vowels(string) { | |
* return _.filter(string, function(v) { | |
* return /[aeiou]/i.test(v); | |
* }); | |
* } | |
* | |
* _.mixin({ 'vowels': vowels }); | |
* _.vowels('fred'); | |
* // => ['e'] | |
* | |
* _('fred').vowels().value(); | |
* // => ['e'] | |
* | |
* _.mixin({ 'vowels': vowels }, { 'chain': false }); | |
* _('fred').vowels(); | |
* // => ['e'] | |
*/ | |
function mixin(object, source, options) { | |
var props = keys(source), | |
methodNames = baseFunctions(source, props); | |
var chain = !(isObject(options) && 'chain' in options) || !!options.chain, | |
isFunc = isFunction(object); | |
arrayEach(methodNames, function(methodName) { | |
var func = source[methodName]; | |
object[methodName] = func; | |
if (isFunc) { | |
object.prototype[methodName] = function() { | |
var chainAll = this.__chain__; | |
if (chain || chainAll) { | |
var result = object(this.__wrapped__), | |
actions = result.__actions__ = copyArray(this.__actions__); | |
actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); | |
result.__chain__ = chainAll; | |
return result; | |
} | |
return func.apply(object, arrayPush([this.value()], arguments)); | |
}; | |
} | |
}); | |
return object; | |
} | |
module.exports = mixin; |