diff options
Diffstat (limited to 'node_modules/empower-core')
-rw-r--r-- | node_modules/empower-core/CHANGELOG.md | 56 | ||||
-rw-r--r-- | node_modules/empower-core/MIT-LICENSE.txt | 20 | ||||
-rw-r--r-- | node_modules/empower-core/build/empower-core.js | 1092 | ||||
-rw-r--r-- | node_modules/empower-core/index.js | 79 | ||||
-rw-r--r-- | node_modules/empower-core/lib/decorate.js | 66 | ||||
-rw-r--r-- | node_modules/empower-core/lib/decorator.js | 165 | ||||
-rw-r--r-- | node_modules/empower-core/lib/default-options.js | 35 | ||||
-rw-r--r-- | node_modules/empower-core/lib/define-properties.js | 16 | ||||
-rw-r--r-- | node_modules/empower-core/package.json | 82 |
9 files changed, 1611 insertions, 0 deletions
diff --git a/node_modules/empower-core/CHANGELOG.md b/node_modules/empower-core/CHANGELOG.md new file mode 100644 index 000000000..e12cc0605 --- /dev/null +++ b/node_modules/empower-core/CHANGELOG.md @@ -0,0 +1,56 @@ +### [0.6.1](https://github.com/twada/empower-core/releases/tag/v0.6.1) (2016-06-05) + + + * remove xtend from dependencies ([3341ef8](https://github.com/twada/empower-core/commit/3341ef8868c41544c95a621e57d4cefa1ad71ee2)) + + +## [0.6.0](https://github.com/twada/empower-core/releases/tag/v0.6.0) (2016-05-29) + + +#### Features + + * update core-js to ^2.0.0 ([d152eef5](https://github.com/twada/empower-core/commit/d152eef51be1ba5c909ebe8394e24778ca4cf298)) + + +## [0.5.0](https://github.com/twada/empower-core/releases/tag/v0.5.0) (2016-01-21) + + +#### Features + + * [Allow prototype enhancements](https://github.com/twada/empower-core/pull/7) (by [@jamestalmage](https://github.com/jamestalmage)) + * [Performance improvements](https://github.com/twada/empower-core/pull/8) (by [@jamestalmage](https://github.com/jamestalmage)) + + +## [0.4.0](https://github.com/twada/empower-core/releases/tag/v0.4.0) (2016-01-10) + + +#### Features + + * [remove `_capt` and `_expr` from empower-core](https://github.com/twada/empower-core/pull/3) + + +## [0.3.0](https://github.com/twada/empower-core/releases/tag/v0.3.0) (2016-01-06) + + +#### Features + + * [Allow arbitrary data to be provided for a given pattern](https://github.com/twada/empower-core/pull/6) (by [@jamestalmage](https://github.com/jamestalmage)) + + +## [0.2.0](https://github.com/twada/empower-core/releases/tag/v0.2.0) (2015-12-13) + + +#### Features + + * [Track non-enhanced assertions](https://github.com/twada/empower-core/pull/2) (by [@jamestalmage](https://github.com/jamestalmage)) + + +## [0.1.0](https://github.com/twada/empower-core/releases/tag/v0.1.0) (2015-12-01) + + +#### Features + + * trying to extract core functionalities out ([60286bbf](https://github.com/twada/empower-core/commit/60286bbfae16ab9b6f0ff33a9de13cabd3c969d4)) + * just attach powerAssertContext, format it later ([319a4e9a](https://github.com/twada/empower-core/commit/319a4e9a1a64ff08fdeed17b243073d35ae6a18f)) + * add event handlers to options ([12bbf0d4](https://github.com/twada/empower-core/commit/12bbf0d44023340d9b6103b8df679ac2084f9ed2)) + * `modifyMessageBeforeAssert` option for compatibility ([c1ade361](https://github.com/twada/empower-core/commit/c1ade361ec4d26c9c05a8ee2c05155d0cea2c815)) diff --git a/node_modules/empower-core/MIT-LICENSE.txt b/node_modules/empower-core/MIT-LICENSE.txt new file mode 100644 index 000000000..b3f58e171 --- /dev/null +++ b/node_modules/empower-core/MIT-LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2013-2016 Takuto Wada, https://github.com/twada/empower-core + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/empower-core/build/empower-core.js b/node_modules/empower-core/build/empower-core.js new file mode 100644 index 000000000..bdd9431c6 --- /dev/null +++ b/node_modules/empower-core/build/empower-core.js @@ -0,0 +1,1092 @@ +/** + * Modules in this bundle + * @license + * + * empower-core: + * license: MIT (http://opensource.org/licenses/MIT) + * author: Takuto Wada <takuto.wada@gmail.com> + * contributors: James Talmage + * homepage: http://github.com/twada/empower-core + * version: 0.6.1 + * + * call-signature: + * license: MIT (http://opensource.org/licenses/MIT) + * author: James Talmage <james@talmage.io> + * maintainers: jamestalmage <james@talmage.io>, twada <takuto.wada@gmail.com> + * homepage: https://github.com/jamestalmage/call-signature#readme + * version: 0.0.2 + * + * core-js: + * license: MIT (http://opensource.org/licenses/MIT) + * maintainers: zloirock <zloirock@zloirock.ru> + * homepage: https://github.com/zloirock/core-js#readme + * version: 2.4.0 + * + * This header is generated by licensify (https://github.com/twada/licensify) + */ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.empowerCore = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw (f.code="MODULE_NOT_FOUND", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ +/** + * empower-core - Power Assert feature enhancer for assert function/object. + * + * https://github.com/twada/empower-core + * + * Copyright (c) 2013-2016 Takuto Wada + * Licensed under the MIT license. + * https://github.com/twada/empower-core/blob/master/MIT-LICENSE.txt + */ +var create = _dereq_('core-js/library/fn/object/create'); +var assign = _dereq_('core-js/library/fn/object/assign'); +var defaultOptions = _dereq_('./lib/default-options'); +var Decorator = _dereq_('./lib/decorator'); +var define = _dereq_('./lib/define-properties'); +var slice = Array.prototype.slice; + +/** + * Enhance Power Assert feature to assert function/object. + * @param assert target assert function or object to enhance + * @param options enhancement options + * @return enhanced assert function/object + */ +function empowerCore (assert, options) { + var typeOfAssert = (typeof assert); + var enhancedAssert; + if ((typeOfAssert !== 'object' && typeOfAssert !== 'function') || assert === null) { + throw new TypeError('empower-core argument should be a function or object.'); + } + if (isEmpowered(assert)) { + return assert; + } + switch (typeOfAssert) { + case 'function': + enhancedAssert = empowerAssertFunction(assert, options); + break; + case 'object': + enhancedAssert = empowerAssertObject(assert, options); + break; + default: + throw new Error('Cannot be here'); + } + define(enhancedAssert, { _empowered: true }); + return enhancedAssert; +} + +function empowerAssertObject (assertObject, options) { + var config = assign(defaultOptions(), options); + var target = config.destructive ? assertObject : create(assertObject); + var decorator = new Decorator(target, config); + return assign(target, decorator.enhancement()); +} + +function empowerAssertFunction (assertFunction, options) { + var config = assign(defaultOptions(), options); + if (config.destructive) { + throw new Error('cannot use destructive:true to function.'); + } + var decorator = new Decorator(assertFunction, config); + var enhancement = decorator.enhancement(); + var powerAssert; + if (typeof enhancement === 'function') { + powerAssert = function powerAssert () { + return enhancement.apply(null, slice.apply(arguments)); + }; + } else { + powerAssert = function powerAssert () { + return assertFunction.apply(null, slice.apply(arguments)); + }; + } + assign(powerAssert, assertFunction); + return assign(powerAssert, enhancement); +} + +function isEmpowered (assertObjectOrFunction) { + return assertObjectOrFunction._empowered; +} + +empowerCore.defaultOptions = defaultOptions; +module.exports = empowerCore; + +},{"./lib/decorator":3,"./lib/default-options":4,"./lib/define-properties":5,"core-js/library/fn/object/assign":11,"core-js/library/fn/object/create":12}],2:[function(_dereq_,module,exports){ +'use strict'; + +var some = _dereq_('core-js/library/fn/array/some'); +var map = _dereq_('core-js/library/fn/array/map'); + +function decorate (callSpec, decorator) { + var numArgsToCapture = callSpec.numArgsToCapture; + + return function decoratedAssert () { + var context, message, hasMessage = false; + + // see: https://github.com/twada/empower-core/pull/8#issue-127859465 + // see: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for(var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + if (numArgsToCapture === (args.length - 1)) { + message = args.pop(); + hasMessage = true; + } + + var invocation = { + thisObj: this, + values: args, + message: message, + hasMessage: hasMessage + }; + + if (some(args, isCaptured)) { + invocation.values = map(args.slice(0, numArgsToCapture), function (arg) { + if (isNotCaptured(arg)) { + return arg; + } + if (!context) { + context = { + source: arg.source, + args: [] + }; + } + context.args.push({ + value: arg.powerAssertContext.value, + events: arg.powerAssertContext.events + }); + return arg.powerAssertContext.value; + }); + + return decorator.concreteAssert(callSpec, invocation, context); + } else { + return decorator.concreteAssert(callSpec, invocation); + } + }; +} + +function isNotCaptured (value) { + return !isCaptured(value); +} + +function isCaptured (value) { + return (typeof value === 'object') && + (value !== null) && + (typeof value.powerAssertContext !== 'undefined'); +} + +module.exports = decorate; + +},{"core-js/library/fn/array/map":9,"core-js/library/fn/array/some":10}],3:[function(_dereq_,module,exports){ +'use strict'; + +var forEach = _dereq_('core-js/library/fn/array/for-each'); +var filter = _dereq_('core-js/library/fn/array/filter'); +var map = _dereq_('core-js/library/fn/array/map'); +var signature = _dereq_('call-signature'); +var decorate = _dereq_('./decorate'); +var keys = _dereq_('core-js/library/fn/object/keys'); + + +function Decorator (receiver, config) { + this.receiver = receiver; + this.config = config; + this.onError = config.onError; + this.onSuccess = config.onSuccess; + this.signatures = map(config.patterns, parse); + this.wrapOnlySignatures = map(config.wrapOnlyPatterns, parse); +} + +Decorator.prototype.enhancement = function () { + var that = this; + var container = this.container(); + var wrappedMethods = []; + + function attach(matcherSpec, enhanced) { + var matcher = matcherSpec.parsed; + var methodName = detectMethodName(matcher.callee); + if (typeof that.receiver[methodName] !== 'function' || wrappedMethods.indexOf(methodName) !== -1) { + return; + } + var callSpec = { + thisObj: that.receiver, + func: that.receiver[methodName], + numArgsToCapture: numberOfArgumentsToCapture(matcherSpec), + matcherSpec: matcherSpec, + enhanced: enhanced + }; + container[methodName] = callSpec.enhancedFunc = decorate(callSpec, that); + wrappedMethods.push(methodName); + } + + forEach(filter(this.signatures, methodCall), function (matcher) { + attach(matcher, true); + }); + + forEach(filter(this.wrapOnlySignatures, methodCall), function (matcher) { + attach(matcher, false); + }); + + return container; +}; + +Decorator.prototype.container = function () { + var basement = {}; + if (typeof this.receiver === 'function') { + var candidates = filter(this.signatures, functionCall); + var enhanced = true; + if (candidates.length === 0) { + enhanced = false; + candidates = filter(this.wrapOnlySignatures, functionCall); + } + if (candidates.length === 1) { + var callSpec = { + thisObj: null, + func: this.receiver, + numArgsToCapture: numberOfArgumentsToCapture(candidates[0]), + matcherSpec: candidates[0], + enhanced: enhanced + }; + basement = callSpec.enhancedFunc = decorate(callSpec, this); + } + } + return basement; +}; + +Decorator.prototype.concreteAssert = function (callSpec, invocation, context) { + var func = callSpec.func; + var thisObj = this.config.bindReceiver ? callSpec.thisObj : invocation.thisObj; + var enhanced = callSpec.enhanced; + var args = invocation.values; + var message = invocation.message; + var matcherSpec = callSpec.matcherSpec; + + if (context && typeof this.config.modifyMessageBeforeAssert === 'function') { + message = this.config.modifyMessageBeforeAssert({originalMessage: message, powerAssertContext: context}); + } + args = args.concat(message); + + var data = { + thisObj: invocation.thisObj, + assertionFunction: callSpec.enhancedFunc, + originalMessage: message, + defaultMessage: matcherSpec.defaultMessage, + matcherSpec: matcherSpec, + enhanced: enhanced, + args: args + }; + + if (context) { + data.powerAssertContext = context; + } + + return this._callFunc(func, thisObj, args, data); +}; + +// see: https://github.com/twada/empower-core/pull/8#issuecomment-173480982 +Decorator.prototype._callFunc = function (func, thisObj, args, data) { + var ret; + try { + ret = func.apply(thisObj, args); + } catch (e) { + data.assertionThrew = true; + data.error = e; + return this.onError.call(thisObj, data); + } + data.assertionThrew = false; + data.returnValue = ret; + return this.onSuccess.call(thisObj, data); +}; + +function numberOfArgumentsToCapture (matcherSpec) { + var matcher = matcherSpec.parsed; + var len = matcher.args.length; + var lastArg; + if (0 < len) { + lastArg = matcher.args[len - 1]; + if (lastArg.name === 'message' && lastArg.optional) { + len -= 1; + } + } + return len; +} + + +function detectMethodName (callee) { + if (callee.type === 'MemberExpression') { + return callee.member; + } + return null; +} + + +function functionCall (matcherSpec) { + return matcherSpec.parsed.callee.type === 'Identifier'; +} + + +function methodCall (matcherSpec) { + return matcherSpec.parsed.callee.type === 'MemberExpression'; +} + +function parse(matcherSpec) { + if (typeof matcherSpec === 'string') { + matcherSpec = {pattern: matcherSpec}; + } + var ret = {}; + forEach(keys(matcherSpec), function (key) { + ret[key] = matcherSpec[key]; + }); + ret.parsed = signature.parse(matcherSpec.pattern); + return ret; +} + + +module.exports = Decorator; + +},{"./decorate":2,"call-signature":6,"core-js/library/fn/array/filter":7,"core-js/library/fn/array/for-each":8,"core-js/library/fn/array/map":9,"core-js/library/fn/object/keys":14}],4:[function(_dereq_,module,exports){ +'use strict'; + +module.exports = function defaultOptions () { + return { + destructive: false, + bindReceiver: true, + onError: onError, + onSuccess: onSuccess, + patterns: [ + 'assert(value, [message])', + 'assert.ok(value, [message])', + 'assert.equal(actual, expected, [message])', + 'assert.notEqual(actual, expected, [message])', + 'assert.strictEqual(actual, expected, [message])', + 'assert.notStrictEqual(actual, expected, [message])', + 'assert.deepEqual(actual, expected, [message])', + 'assert.notDeepEqual(actual, expected, [message])', + 'assert.deepStrictEqual(actual, expected, [message])', + 'assert.notDeepStrictEqual(actual, expected, [message])' + ], + wrapOnlyPatterns: [] + }; +}; + +function onError (errorEvent) { + var e = errorEvent.error; + if (errorEvent.powerAssertContext && e.name === 'AssertionError') { + e.powerAssertContext = errorEvent.powerAssertContext; + } + throw e; +} + +function onSuccess(successEvent) { + return successEvent.returnValue; +} + +},{}],5:[function(_dereq_,module,exports){ +'use strict'; + +var defineProperty = _dereq_('core-js/library/fn/object/define-property'); +var forEach = _dereq_('core-js/library/fn/array/for-each'); +var keys = _dereq_('core-js/library/fn/object/keys'); + +module.exports = function defineProperties (obj, map) { + forEach(keys(map), function (name) { + defineProperty(obj, name, { + configurable: true, + enumerable: false, + value: map[name], + writable: true + }); + }); +}; + +},{"core-js/library/fn/array/for-each":8,"core-js/library/fn/object/define-property":13,"core-js/library/fn/object/keys":14}],6:[function(_dereq_,module,exports){ +'use strict'; +module.exports.parse = parse; +module.exports.generate = generate; + +// TODO(jamestalmage): Allow full range of identifier characters instead of just ASCII +// +// This will likely require a build step +// +// SPEC: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6 +// +// TOOLING: +// https://github.com/mathiasbynens/regenerate +// https://www.npmjs.com/package/regjsgen + +var regex = /^\s*(?:([A-Za-z$_][A-Za-z0-9$_]*)\s*\.)?\s*([A-Za-z$_][A-Za-z0-9$_]*)\s*\(\s*((?:[A-Za-z$_][A-Za-z0-9$_]*)|(?:\[\s*[A-Za-z$_][A-Za-z0-9$_]*\s*]))?((?:\s*,\s*(?:(?:[A-Za-z$_][A-Za-z0-9$_]*)|(?:\[\s*[A-Za-z$_][A-Za-z0-9$_]*\s*])))+)?\s*\)\s*$/; + +function parse(str) { + var match = regex.exec(str); + if (!match) { + return null; + } + + var callee; + if (match[1]) { + callee = { + type: 'MemberExpression', + object: match[1], + member: match[2] + }; + } else { + callee = { + type: 'Identifier', + name: match[2] + }; + } + + var args = match[4] || ''; + args = args.split(','); + if (match[3]) { + args[0] = match[3]; + } + var trimmed = []; + args.forEach(function (str) { + var optional = false; + str = str.replace(/\s+/g, ''); + if (!str.length) { + return; + } + if (str.charAt(0) === '[' && str.charAt(str.length - 1) === ']') { + optional = true; + str = str.substring(1, str.length - 1); + } + trimmed.push({ + name: str, + optional: optional + }); + }); + + return { + callee: callee, + args: trimmed + }; +} + +function generate(parsed) { + var callee; + if (parsed.callee.type === 'MemberExpression') { + callee = [ + parsed.callee.object, + '.', + parsed.callee.member + ]; + } else { + callee = [parsed.callee.name]; + } + return callee.concat([ + '(', + parsed.args.map(function (arg) { + return arg.optional ? '[' + arg.name + ']' : arg.name; + }).join(', '), + ')' + ]).join(''); +} + +},{}],7:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.array.filter'); +module.exports = _dereq_('../../modules/_core').Array.filter; +},{"../../modules/_core":22,"../../modules/es6.array.filter":59}],8:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.array.for-each'); +module.exports = _dereq_('../../modules/_core').Array.forEach; +},{"../../modules/_core":22,"../../modules/es6.array.for-each":60}],9:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.array.map'); +module.exports = _dereq_('../../modules/_core').Array.map; +},{"../../modules/_core":22,"../../modules/es6.array.map":61}],10:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.array.some'); +module.exports = _dereq_('../../modules/_core').Array.some; +},{"../../modules/_core":22,"../../modules/es6.array.some":62}],11:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.object.assign'); +module.exports = _dereq_('../../modules/_core').Object.assign; +},{"../../modules/_core":22,"../../modules/es6.object.assign":63}],12:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.object.create'); +var $Object = _dereq_('../../modules/_core').Object; +module.exports = function create(P, D){ + return $Object.create(P, D); +}; +},{"../../modules/_core":22,"../../modules/es6.object.create":64}],13:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.object.define-property'); +var $Object = _dereq_('../../modules/_core').Object; +module.exports = function defineProperty(it, key, desc){ + return $Object.defineProperty(it, key, desc); +}; +},{"../../modules/_core":22,"../../modules/es6.object.define-property":65}],14:[function(_dereq_,module,exports){ +_dereq_('../../modules/es6.object.keys'); +module.exports = _dereq_('../../modules/_core').Object.keys; +},{"../../modules/_core":22,"../../modules/es6.object.keys":66}],15:[function(_dereq_,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],16:[function(_dereq_,module,exports){ +var isObject = _dereq_('./_is-object'); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; +},{"./_is-object":37}],17:[function(_dereq_,module,exports){ +// false -> Array#indexOf +// true -> Array#includes +var toIObject = _dereq_('./_to-iobject') + , toLength = _dereq_('./_to-length') + , toIndex = _dereq_('./_to-index'); +module.exports = function(IS_INCLUDES){ + return function($this, el, fromIndex){ + var O = toIObject($this) + , length = toLength(O.length) + , index = toIndex(fromIndex, length) + , value; + // Array#includes uses SameValueZero equality algorithm + if(IS_INCLUDES && el != el)while(length > index){ + value = O[index++]; + if(value != value)return true; + // Array#toIndex ignores holes, Array#includes - not + } else for(;length > index; index++)if(IS_INCLUDES || index in O){ + if(O[index] === el)return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; +},{"./_to-index":51,"./_to-iobject":53,"./_to-length":54}],18:[function(_dereq_,module,exports){ +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = _dereq_('./_ctx') + , IObject = _dereq_('./_iobject') + , toObject = _dereq_('./_to-object') + , toLength = _dereq_('./_to-length') + , asc = _dereq_('./_array-species-create'); +module.exports = function(TYPE, $create){ + var IS_MAP = TYPE == 1 + , IS_FILTER = TYPE == 2 + , IS_SOME = TYPE == 3 + , IS_EVERY = TYPE == 4 + , IS_FIND_INDEX = TYPE == 6 + , NO_HOLES = TYPE == 5 || IS_FIND_INDEX + , create = $create || asc; + return function($this, callbackfn, that){ + var O = toObject($this) + , self = IObject(O) + , f = ctx(callbackfn, that, 3) + , length = toLength(self.length) + , index = 0 + , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined + , val, res; + for(;length > index; index++)if(NO_HOLES || index in self){ + val = self[index]; + res = f(val, index, O); + if(TYPE){ + if(IS_MAP)result[index] = res; // map + else if(res)switch(TYPE){ + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if(IS_EVERY)return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; +},{"./_array-species-create":20,"./_ctx":23,"./_iobject":35,"./_to-length":54,"./_to-object":55}],19:[function(_dereq_,module,exports){ +var isObject = _dereq_('./_is-object') + , isArray = _dereq_('./_is-array') + , SPECIES = _dereq_('./_wks')('species'); + +module.exports = function(original){ + var C; + if(isArray(original)){ + C = original.constructor; + // cross-realm fallback + if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined; + if(isObject(C)){ + C = C[SPECIES]; + if(C === null)C = undefined; + } + } return C === undefined ? Array : C; +}; +},{"./_is-array":36,"./_is-object":37,"./_wks":58}],20:[function(_dereq_,module,exports){ +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = _dereq_('./_array-species-constructor'); + +module.exports = function(original, length){ + return new (speciesConstructor(original))(length); +}; +},{"./_array-species-constructor":19}],21:[function(_dereq_,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],22:[function(_dereq_,module,exports){ +var core = module.exports = {version: '2.4.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],23:[function(_dereq_,module,exports){ +// optional / simple context binding +var aFunction = _dereq_('./_a-function'); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; +},{"./_a-function":15}],24:[function(_dereq_,module,exports){ +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; +}; +},{}],25:[function(_dereq_,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !_dereq_('./_fails')(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_fails":29}],26:[function(_dereq_,module,exports){ +var isObject = _dereq_('./_is-object') + , document = _dereq_('./_global').document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; +},{"./_global":30,"./_is-object":37}],27:[function(_dereq_,module,exports){ +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); +},{}],28:[function(_dereq_,module,exports){ +var global = _dereq_('./_global') + , core = _dereq_('./_core') + , ctx = _dereq_('./_ctx') + , hide = _dereq_('./_hide') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +},{"./_core":22,"./_ctx":23,"./_global":30,"./_hide":32}],29:[function(_dereq_,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],30:[function(_dereq_,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],31:[function(_dereq_,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function(it, key){ + return hasOwnProperty.call(it, key); +}; +},{}],32:[function(_dereq_,module,exports){ +var dP = _dereq_('./_object-dp') + , createDesc = _dereq_('./_property-desc'); +module.exports = _dereq_('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./_descriptors":25,"./_object-dp":40,"./_property-desc":47}],33:[function(_dereq_,module,exports){ +module.exports = _dereq_('./_global').document && document.documentElement; +},{"./_global":30}],34:[function(_dereq_,module,exports){ +module.exports = !_dereq_('./_descriptors') && !_dereq_('./_fails')(function(){ + return Object.defineProperty(_dereq_('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_descriptors":25,"./_dom-create":26,"./_fails":29}],35:[function(_dereq_,module,exports){ +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = _dereq_('./_cof'); +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); +}; +},{"./_cof":21}],36:[function(_dereq_,module,exports){ +// 7.2.2 IsArray(argument) +var cof = _dereq_('./_cof'); +module.exports = Array.isArray || function isArray(arg){ + return cof(arg) == 'Array'; +}; +},{"./_cof":21}],37:[function(_dereq_,module,exports){ +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; +},{}],38:[function(_dereq_,module,exports){ +'use strict'; +// 19.1.2.1 Object.assign(target, source, ...) +var getKeys = _dereq_('./_object-keys') + , gOPS = _dereq_('./_object-gops') + , pIE = _dereq_('./_object-pie') + , toObject = _dereq_('./_to-object') + , IObject = _dereq_('./_iobject') + , $assign = Object.assign; + +// should work with symbols and should have deterministic property order (V8 bug) +module.exports = !$assign || _dereq_('./_fails')(function(){ + var A = {} + , B = {} + , S = Symbol() + , K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function(k){ B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; +}) ? function assign(target, source){ // eslint-disable-line no-unused-vars + var T = toObject(target) + , aLen = arguments.length + , index = 1 + , getSymbols = gOPS.f + , isEnum = pIE.f; + while(aLen > index){ + var S = IObject(arguments[index++]) + , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) + , length = keys.length + , j = 0 + , key; + while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; + } return T; +} : $assign; +},{"./_fails":29,"./_iobject":35,"./_object-gops":42,"./_object-keys":44,"./_object-pie":45,"./_to-object":55}],39:[function(_dereq_,module,exports){ +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = _dereq_('./_an-object') + , dPs = _dereq_('./_object-dps') + , enumBugKeys = _dereq_('./_enum-bug-keys') + , IE_PROTO = _dereq_('./_shared-key')('IE_PROTO') + , Empty = function(){ /* empty */ } + , PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function(){ + // Thrash, waste and sodomy: IE GC bug + var iframe = _dereq_('./_dom-create')('iframe') + , i = enumBugKeys.length + , gt = '>' + , iframeDocument; + iframe.style.display = 'none'; + _dereq_('./_html').appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write('<script>document.F=Object</script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties){ + var result; + if(O !== null){ + Empty[PROTOTYPE] = anObject(O); + result = new Empty; + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; +},{"./_an-object":16,"./_dom-create":26,"./_enum-bug-keys":27,"./_html":33,"./_object-dps":41,"./_shared-key":48}],40:[function(_dereq_,module,exports){ +var anObject = _dereq_('./_an-object') + , IE8_DOM_DEFINE = _dereq_('./_ie8-dom-define') + , toPrimitive = _dereq_('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = _dereq_('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +},{"./_an-object":16,"./_descriptors":25,"./_ie8-dom-define":34,"./_to-primitive":56}],41:[function(_dereq_,module,exports){ +var dP = _dereq_('./_object-dp') + , anObject = _dereq_('./_an-object') + , getKeys = _dereq_('./_object-keys'); + +module.exports = _dereq_('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){ + anObject(O); + var keys = getKeys(Properties) + , length = keys.length + , i = 0 + , P; + while(length > i)dP.f(O, P = keys[i++], Properties[P]); + return O; +}; +},{"./_an-object":16,"./_descriptors":25,"./_object-dp":40,"./_object-keys":44}],42:[function(_dereq_,module,exports){ +exports.f = Object.getOwnPropertySymbols; +},{}],43:[function(_dereq_,module,exports){ +var has = _dereq_('./_has') + , toIObject = _dereq_('./_to-iobject') + , arrayIndexOf = _dereq_('./_array-includes')(false) + , IE_PROTO = _dereq_('./_shared-key')('IE_PROTO'); + +module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; +},{"./_array-includes":17,"./_has":31,"./_shared-key":48,"./_to-iobject":53}],44:[function(_dereq_,module,exports){ +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = _dereq_('./_object-keys-internal') + , enumBugKeys = _dereq_('./_enum-bug-keys'); + +module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); +}; +},{"./_enum-bug-keys":27,"./_object-keys-internal":43}],45:[function(_dereq_,module,exports){ +exports.f = {}.propertyIsEnumerable; +},{}],46:[function(_dereq_,module,exports){ +// most Object methods by ES6 should accept primitives +var $export = _dereq_('./_export') + , core = _dereq_('./_core') + , fails = _dereq_('./_fails'); +module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); +}; +},{"./_core":22,"./_export":28,"./_fails":29}],47:[function(_dereq_,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],48:[function(_dereq_,module,exports){ +var shared = _dereq_('./_shared')('keys') + , uid = _dereq_('./_uid'); +module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); +}; +},{"./_shared":49,"./_uid":57}],49:[function(_dereq_,module,exports){ +var global = _dereq_('./_global') + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); +module.exports = function(key){ + return store[key] || (store[key] = {}); +}; +},{"./_global":30}],50:[function(_dereq_,module,exports){ +var fails = _dereq_('./_fails'); + +module.exports = function(method, arg){ + return !!method && fails(function(){ + arg ? method.call(null, function(){}, 1) : method.call(null); + }); +}; +},{"./_fails":29}],51:[function(_dereq_,module,exports){ +var toInteger = _dereq_('./_to-integer') + , max = Math.max + , min = Math.min; +module.exports = function(index, length){ + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; +},{"./_to-integer":52}],52:[function(_dereq_,module,exports){ +// 7.1.4 ToInteger +var ceil = Math.ceil + , floor = Math.floor; +module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; +},{}],53:[function(_dereq_,module,exports){ +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = _dereq_('./_iobject') + , defined = _dereq_('./_defined'); +module.exports = function(it){ + return IObject(defined(it)); +}; +},{"./_defined":24,"./_iobject":35}],54:[function(_dereq_,module,exports){ +// 7.1.15 ToLength +var toInteger = _dereq_('./_to-integer') + , min = Math.min; +module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; +},{"./_to-integer":52}],55:[function(_dereq_,module,exports){ +// 7.1.13 ToObject(argument) +var defined = _dereq_('./_defined'); +module.exports = function(it){ + return Object(defined(it)); +}; +},{"./_defined":24}],56:[function(_dereq_,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = _dereq_('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; +},{"./_is-object":37}],57:[function(_dereq_,module,exports){ +var id = 0 + , px = Math.random(); +module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; +},{}],58:[function(_dereq_,module,exports){ +var store = _dereq_('./_shared')('wks') + , uid = _dereq_('./_uid') + , Symbol = _dereq_('./_global').Symbol + , USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function(name){ + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; +},{"./_global":30,"./_shared":49,"./_uid":57}],59:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_('./_export') + , $filter = _dereq_('./_array-methods')(2); + +$export($export.P + $export.F * !_dereq_('./_strict-method')([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */){ + return $filter(this, callbackfn, arguments[1]); + } +}); +},{"./_array-methods":18,"./_export":28,"./_strict-method":50}],60:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_('./_export') + , $forEach = _dereq_('./_array-methods')(0) + , STRICT = _dereq_('./_strict-method')([].forEach, true); + +$export($export.P + $export.F * !STRICT, 'Array', { + // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) + forEach: function forEach(callbackfn /* , thisArg */){ + return $forEach(this, callbackfn, arguments[1]); + } +}); +},{"./_array-methods":18,"./_export":28,"./_strict-method":50}],61:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_('./_export') + , $map = _dereq_('./_array-methods')(1); + +$export($export.P + $export.F * !_dereq_('./_strict-method')([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */){ + return $map(this, callbackfn, arguments[1]); + } +}); +},{"./_array-methods":18,"./_export":28,"./_strict-method":50}],62:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_('./_export') + , $some = _dereq_('./_array-methods')(3); + +$export($export.P + $export.F * !_dereq_('./_strict-method')([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */){ + return $some(this, callbackfn, arguments[1]); + } +}); +},{"./_array-methods":18,"./_export":28,"./_strict-method":50}],63:[function(_dereq_,module,exports){ +// 19.1.3.1 Object.assign(target, source) +var $export = _dereq_('./_export'); + +$export($export.S + $export.F, 'Object', {assign: _dereq_('./_object-assign')}); +},{"./_export":28,"./_object-assign":38}],64:[function(_dereq_,module,exports){ +var $export = _dereq_('./_export') +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +$export($export.S, 'Object', {create: _dereq_('./_object-create')}); +},{"./_export":28,"./_object-create":39}],65:[function(_dereq_,module,exports){ +var $export = _dereq_('./_export'); +// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) +$export($export.S + $export.F * !_dereq_('./_descriptors'), 'Object', {defineProperty: _dereq_('./_object-dp').f}); +},{"./_descriptors":25,"./_export":28,"./_object-dp":40}],66:[function(_dereq_,module,exports){ +// 19.1.2.14 Object.keys(O) +var toObject = _dereq_('./_to-object') + , $keys = _dereq_('./_object-keys'); + +_dereq_('./_object-sap')('keys', function(){ + return function keys(it){ + return $keys(toObject(it)); + }; +}); +},{"./_object-keys":44,"./_object-sap":46,"./_to-object":55}]},{},[1])(1) +});
\ No newline at end of file diff --git a/node_modules/empower-core/index.js b/node_modules/empower-core/index.js new file mode 100644 index 000000000..c72d327a0 --- /dev/null +++ b/node_modules/empower-core/index.js @@ -0,0 +1,79 @@ +/** + * empower-core - Power Assert feature enhancer for assert function/object. + * + * https://github.com/twada/empower-core + * + * Copyright (c) 2013-2016 Takuto Wada + * Licensed under the MIT license. + * https://github.com/twada/empower-core/blob/master/MIT-LICENSE.txt + */ +var create = require('core-js/library/fn/object/create'); +var assign = require('core-js/library/fn/object/assign'); +var defaultOptions = require('./lib/default-options'); +var Decorator = require('./lib/decorator'); +var define = require('./lib/define-properties'); +var slice = Array.prototype.slice; + +/** + * Enhance Power Assert feature to assert function/object. + * @param assert target assert function or object to enhance + * @param options enhancement options + * @return enhanced assert function/object + */ +function empowerCore (assert, options) { + var typeOfAssert = (typeof assert); + var enhancedAssert; + if ((typeOfAssert !== 'object' && typeOfAssert !== 'function') || assert === null) { + throw new TypeError('empower-core argument should be a function or object.'); + } + if (isEmpowered(assert)) { + return assert; + } + switch (typeOfAssert) { + case 'function': + enhancedAssert = empowerAssertFunction(assert, options); + break; + case 'object': + enhancedAssert = empowerAssertObject(assert, options); + break; + default: + throw new Error('Cannot be here'); + } + define(enhancedAssert, { _empowered: true }); + return enhancedAssert; +} + +function empowerAssertObject (assertObject, options) { + var config = assign(defaultOptions(), options); + var target = config.destructive ? assertObject : create(assertObject); + var decorator = new Decorator(target, config); + return assign(target, decorator.enhancement()); +} + +function empowerAssertFunction (assertFunction, options) { + var config = assign(defaultOptions(), options); + if (config.destructive) { + throw new Error('cannot use destructive:true to function.'); + } + var decorator = new Decorator(assertFunction, config); + var enhancement = decorator.enhancement(); + var powerAssert; + if (typeof enhancement === 'function') { + powerAssert = function powerAssert () { + return enhancement.apply(null, slice.apply(arguments)); + }; + } else { + powerAssert = function powerAssert () { + return assertFunction.apply(null, slice.apply(arguments)); + }; + } + assign(powerAssert, assertFunction); + return assign(powerAssert, enhancement); +} + +function isEmpowered (assertObjectOrFunction) { + return assertObjectOrFunction._empowered; +} + +empowerCore.defaultOptions = defaultOptions; +module.exports = empowerCore; diff --git a/node_modules/empower-core/lib/decorate.js b/node_modules/empower-core/lib/decorate.js new file mode 100644 index 000000000..2eb6f5f20 --- /dev/null +++ b/node_modules/empower-core/lib/decorate.js @@ -0,0 +1,66 @@ +'use strict'; + +var some = require('core-js/library/fn/array/some'); +var map = require('core-js/library/fn/array/map'); + +function decorate (callSpec, decorator) { + var numArgsToCapture = callSpec.numArgsToCapture; + + return function decoratedAssert () { + var context, message, hasMessage = false; + + // see: https://github.com/twada/empower-core/pull/8#issue-127859465 + // see: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for(var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + if (numArgsToCapture === (args.length - 1)) { + message = args.pop(); + hasMessage = true; + } + + var invocation = { + thisObj: this, + values: args, + message: message, + hasMessage: hasMessage + }; + + if (some(args, isCaptured)) { + invocation.values = map(args.slice(0, numArgsToCapture), function (arg) { + if (isNotCaptured(arg)) { + return arg; + } + if (!context) { + context = { + source: arg.source, + args: [] + }; + } + context.args.push({ + value: arg.powerAssertContext.value, + events: arg.powerAssertContext.events + }); + return arg.powerAssertContext.value; + }); + + return decorator.concreteAssert(callSpec, invocation, context); + } else { + return decorator.concreteAssert(callSpec, invocation); + } + }; +} + +function isNotCaptured (value) { + return !isCaptured(value); +} + +function isCaptured (value) { + return (typeof value === 'object') && + (value !== null) && + (typeof value.powerAssertContext !== 'undefined'); +} + +module.exports = decorate; diff --git a/node_modules/empower-core/lib/decorator.js b/node_modules/empower-core/lib/decorator.js new file mode 100644 index 000000000..678f47283 --- /dev/null +++ b/node_modules/empower-core/lib/decorator.js @@ -0,0 +1,165 @@ +'use strict'; + +var forEach = require('core-js/library/fn/array/for-each'); +var filter = require('core-js/library/fn/array/filter'); +var map = require('core-js/library/fn/array/map'); +var signature = require('call-signature'); +var decorate = require('./decorate'); +var keys = require('core-js/library/fn/object/keys'); + + +function Decorator (receiver, config) { + this.receiver = receiver; + this.config = config; + this.onError = config.onError; + this.onSuccess = config.onSuccess; + this.signatures = map(config.patterns, parse); + this.wrapOnlySignatures = map(config.wrapOnlyPatterns, parse); +} + +Decorator.prototype.enhancement = function () { + var that = this; + var container = this.container(); + var wrappedMethods = []; + + function attach(matcherSpec, enhanced) { + var matcher = matcherSpec.parsed; + var methodName = detectMethodName(matcher.callee); + if (typeof that.receiver[methodName] !== 'function' || wrappedMethods.indexOf(methodName) !== -1) { + return; + } + var callSpec = { + thisObj: that.receiver, + func: that.receiver[methodName], + numArgsToCapture: numberOfArgumentsToCapture(matcherSpec), + matcherSpec: matcherSpec, + enhanced: enhanced + }; + container[methodName] = callSpec.enhancedFunc = decorate(callSpec, that); + wrappedMethods.push(methodName); + } + + forEach(filter(this.signatures, methodCall), function (matcher) { + attach(matcher, true); + }); + + forEach(filter(this.wrapOnlySignatures, methodCall), function (matcher) { + attach(matcher, false); + }); + + return container; +}; + +Decorator.prototype.container = function () { + var basement = {}; + if (typeof this.receiver === 'function') { + var candidates = filter(this.signatures, functionCall); + var enhanced = true; + if (candidates.length === 0) { + enhanced = false; + candidates = filter(this.wrapOnlySignatures, functionCall); + } + if (candidates.length === 1) { + var callSpec = { + thisObj: null, + func: this.receiver, + numArgsToCapture: numberOfArgumentsToCapture(candidates[0]), + matcherSpec: candidates[0], + enhanced: enhanced + }; + basement = callSpec.enhancedFunc = decorate(callSpec, this); + } + } + return basement; +}; + +Decorator.prototype.concreteAssert = function (callSpec, invocation, context) { + var func = callSpec.func; + var thisObj = this.config.bindReceiver ? callSpec.thisObj : invocation.thisObj; + var enhanced = callSpec.enhanced; + var args = invocation.values; + var message = invocation.message; + var matcherSpec = callSpec.matcherSpec; + + if (context && typeof this.config.modifyMessageBeforeAssert === 'function') { + message = this.config.modifyMessageBeforeAssert({originalMessage: message, powerAssertContext: context}); + } + args = args.concat(message); + + var data = { + thisObj: invocation.thisObj, + assertionFunction: callSpec.enhancedFunc, + originalMessage: message, + defaultMessage: matcherSpec.defaultMessage, + matcherSpec: matcherSpec, + enhanced: enhanced, + args: args + }; + + if (context) { + data.powerAssertContext = context; + } + + return this._callFunc(func, thisObj, args, data); +}; + +// see: https://github.com/twada/empower-core/pull/8#issuecomment-173480982 +Decorator.prototype._callFunc = function (func, thisObj, args, data) { + var ret; + try { + ret = func.apply(thisObj, args); + } catch (e) { + data.assertionThrew = true; + data.error = e; + return this.onError.call(thisObj, data); + } + data.assertionThrew = false; + data.returnValue = ret; + return this.onSuccess.call(thisObj, data); +}; + +function numberOfArgumentsToCapture (matcherSpec) { + var matcher = matcherSpec.parsed; + var len = matcher.args.length; + var lastArg; + if (0 < len) { + lastArg = matcher.args[len - 1]; + if (lastArg.name === 'message' && lastArg.optional) { + len -= 1; + } + } + return len; +} + + +function detectMethodName (callee) { + if (callee.type === 'MemberExpression') { + return callee.member; + } + return null; +} + + +function functionCall (matcherSpec) { + return matcherSpec.parsed.callee.type === 'Identifier'; +} + + +function methodCall (matcherSpec) { + return matcherSpec.parsed.callee.type === 'MemberExpression'; +} + +function parse(matcherSpec) { + if (typeof matcherSpec === 'string') { + matcherSpec = {pattern: matcherSpec}; + } + var ret = {}; + forEach(keys(matcherSpec), function (key) { + ret[key] = matcherSpec[key]; + }); + ret.parsed = signature.parse(matcherSpec.pattern); + return ret; +} + + +module.exports = Decorator; diff --git a/node_modules/empower-core/lib/default-options.js b/node_modules/empower-core/lib/default-options.js new file mode 100644 index 000000000..77b0f5c05 --- /dev/null +++ b/node_modules/empower-core/lib/default-options.js @@ -0,0 +1,35 @@ +'use strict'; + +module.exports = function defaultOptions () { + return { + destructive: false, + bindReceiver: true, + onError: onError, + onSuccess: onSuccess, + patterns: [ + 'assert(value, [message])', + 'assert.ok(value, [message])', + 'assert.equal(actual, expected, [message])', + 'assert.notEqual(actual, expected, [message])', + 'assert.strictEqual(actual, expected, [message])', + 'assert.notStrictEqual(actual, expected, [message])', + 'assert.deepEqual(actual, expected, [message])', + 'assert.notDeepEqual(actual, expected, [message])', + 'assert.deepStrictEqual(actual, expected, [message])', + 'assert.notDeepStrictEqual(actual, expected, [message])' + ], + wrapOnlyPatterns: [] + }; +}; + +function onError (errorEvent) { + var e = errorEvent.error; + if (errorEvent.powerAssertContext && e.name === 'AssertionError') { + e.powerAssertContext = errorEvent.powerAssertContext; + } + throw e; +} + +function onSuccess(successEvent) { + return successEvent.returnValue; +} diff --git a/node_modules/empower-core/lib/define-properties.js b/node_modules/empower-core/lib/define-properties.js new file mode 100644 index 000000000..340c7f065 --- /dev/null +++ b/node_modules/empower-core/lib/define-properties.js @@ -0,0 +1,16 @@ +'use strict'; + +var defineProperty = require('core-js/library/fn/object/define-property'); +var forEach = require('core-js/library/fn/array/for-each'); +var keys = require('core-js/library/fn/object/keys'); + +module.exports = function defineProperties (obj, map) { + forEach(keys(map), function (name) { + defineProperty(obj, name, { + configurable: true, + enumerable: false, + value: map[name], + writable: true + }); + }); +}; diff --git a/node_modules/empower-core/package.json b/node_modules/empower-core/package.json new file mode 100644 index 000000000..bbc92230c --- /dev/null +++ b/node_modules/empower-core/package.json @@ -0,0 +1,82 @@ +{ + "name": "empower-core", + "description": "Power Assert feature enhancer for assert function/object", + "version": "0.6.1", + "author": { + "name": "Takuto Wada", + "email": "takuto.wada@gmail.com", + "url": "http://github.com/twada" + }, + "bugs": { + "url": "http://github.com/twada/empower-core/issues" + }, + "contributors": [ + { + "name": "James Talmage", + "url": "https://github.com/jamestalmage" + } + ], + "dependencies": { + "call-signature": "0.0.2", + "core-js": "^2.0.0" + }, + "devDependencies": { + "acorn": "^3.1.0", + "acorn-es7-plugin": "^1.0.14", + "babel-core": "^5.8.33", + "blanket": "^1.2.3", + "browserify": "^13.0.1", + "buster-assertions": "^0.10.4", + "del": "^2.2.0", + "escodegen": "^1.8.0", + "espower": "^1.2.1", + "gulp": "^3.9.1", + "gulp-derequire": "^2.1.0", + "gulp-dereserve": "^0.2.1", + "gulp-mocha": "^2.2.0", + "gulp-mocha-phantomjs": "^0.11.0", + "gulp-util": "^3.0.7", + "gulp-webserver": "^0.9.1", + "licensify": "^3.1.1", + "mocha": "^2.5.3", + "mocha-lcov-reporter": "^1.2.0", + "through2": "^2.0.1", + "vinyl-source-stream": "^1.1.0" + }, + "directories": { + "lib": "./lib" + }, + "files": [ + "CHANGELOG.md", + "MIT-LICENSE.txt", + "README.md", + "index.js", + "lib", + "build/empower-core.js", + "package.json" + ], + "homepage": "http://github.com/twada/empower-core", + "keywords": [ + "power-assert", + "assert", + "assertion", + "test", + "testing" + ], + "license": "MIT", + "main": "./index.js", + "repository": { + "type": "git", + "url": "http://github.com/twada/empower-core.git" + }, + "scripts": { + "preversion": "npm test", + "version": "npm run dist && git add -A build", + "bower": "bower install --config.interactive=false", + "dist": "npm prune && npm dedupe && gulp dist", + "test": "gulp test", + "unit": "gulp unit", + "watch": "gulp watch", + "coveralls": "gulp coverage && cat ./coverage.lcov | coveralls" + } +} |