aboutsummaryrefslogtreecommitdiff
path: root/node_modules/empower-core/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/empower-core/index.js')
-rw-r--r--node_modules/empower-core/index.js79
1 files changed, 79 insertions, 0 deletions
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;