Add comprehensive development roadmap via GitHub Issues
Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
66
frontend/node_modules/chai/lib/chai.js
generated
vendored
Normal file
66
frontend/node_modules/chai/lib/chai.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
/*!
|
||||
* chai
|
||||
* Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import * as util from './chai/utils/index.js';
|
||||
import {AssertionError} from 'assertion-error';
|
||||
import {config} from './chai/config.js';
|
||||
import './chai/core/assertions.js';
|
||||
import {expect} from './chai/interface/expect.js';
|
||||
import {Assertion} from './chai/assertion.js';
|
||||
import * as should from './chai/interface/should.js';
|
||||
import {assert} from './chai/interface/assert.js';
|
||||
|
||||
const used = [];
|
||||
|
||||
// Assertion Error
|
||||
export {AssertionError};
|
||||
|
||||
/**
|
||||
* # .use(function)
|
||||
*
|
||||
* Provides a way to extend the internals of Chai.
|
||||
*
|
||||
* @param {Function} fn
|
||||
* @returns {this} for chaining
|
||||
* @public
|
||||
*/
|
||||
export function use(fn) {
|
||||
const exports = {
|
||||
use,
|
||||
AssertionError,
|
||||
util,
|
||||
config,
|
||||
expect,
|
||||
assert,
|
||||
Assertion,
|
||||
...should
|
||||
};
|
||||
|
||||
if (!~used.indexOf(fn)) {
|
||||
fn(exports, util);
|
||||
used.push(fn);
|
||||
}
|
||||
|
||||
return exports;
|
||||
}
|
||||
|
||||
// Utility Functions
|
||||
export {util};
|
||||
|
||||
// Configuration
|
||||
export {config};
|
||||
|
||||
// Primary `Assertion` prototype
|
||||
export * from './chai/assertion.js';
|
||||
|
||||
// Expect interface
|
||||
export * from './chai/interface/expect.js';
|
||||
|
||||
// Should interface
|
||||
export * from './chai/interface/should.js';
|
||||
|
||||
// Assert interface
|
||||
export * from './chai/interface/assert.js';
|
||||
204
frontend/node_modules/chai/lib/chai/assertion.js
generated
vendored
Normal file
204
frontend/node_modules/chai/lib/chai/assertion.js
generated
vendored
Normal file
@@ -0,0 +1,204 @@
|
||||
/*!
|
||||
* chai
|
||||
* http://chaijs.com
|
||||
* Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {config} from './config.js';
|
||||
import {AssertionError} from 'assertion-error';
|
||||
import * as util from './utils/index.js';
|
||||
|
||||
export class Assertion {
|
||||
/** @type {{}} */
|
||||
__flags = {};
|
||||
|
||||
/**
|
||||
* Creates object for chaining.
|
||||
* `Assertion` objects contain metadata in the form of flags. Three flags can
|
||||
* be assigned during instantiation by passing arguments to this constructor:
|
||||
*
|
||||
* - `object`: This flag contains the target of the assertion. For example, in
|
||||
* the assertion `expect(numKittens).to.equal(7);`, the `object` flag will
|
||||
* contain `numKittens` so that the `equal` assertion can reference it when
|
||||
* needed.
|
||||
*
|
||||
* - `message`: This flag contains an optional custom error message to be
|
||||
* prepended to the error message that's generated by the assertion when it
|
||||
* fails.
|
||||
*
|
||||
* - `ssfi`: This flag stands for "start stack function indicator". It
|
||||
* contains a function reference that serves as the starting point for
|
||||
* removing frames from the stack trace of the error that's created by the
|
||||
* assertion when it fails. The goal is to provide a cleaner stack trace to
|
||||
* end users by removing Chai's internal functions. Note that it only works
|
||||
* in environments that support `Error.captureStackTrace`, and only when
|
||||
* `Chai.config.includeStack` hasn't been set to `false`.
|
||||
*
|
||||
* - `lockSsfi`: This flag controls whether or not the given `ssfi` flag
|
||||
* should retain its current value, even as assertions are chained off of
|
||||
* this object. This is usually set to `true` when creating a new assertion
|
||||
* from within another assertion. It's also temporarily set to `true` before
|
||||
* an overwritten assertion gets called by the overwriting assertion.
|
||||
*
|
||||
* - `eql`: This flag contains the deepEqual function to be used by the assertion.
|
||||
*
|
||||
* @param {unknown} obj target of the assertion
|
||||
* @param {string} [msg] (optional) custom error message
|
||||
* @param {Function} [ssfi] (optional) starting point for removing stack frames
|
||||
* @param {boolean} [lockSsfi] (optional) whether or not the ssfi flag is locked
|
||||
*/
|
||||
constructor(obj, msg, ssfi, lockSsfi) {
|
||||
util.flag(this, 'ssfi', ssfi || Assertion);
|
||||
util.flag(this, 'lockSsfi', lockSsfi);
|
||||
util.flag(this, 'object', obj);
|
||||
util.flag(this, 'message', msg);
|
||||
util.flag(this, 'eql', config.deepEqual || util.eql);
|
||||
|
||||
return util.proxify(this);
|
||||
}
|
||||
|
||||
/** @returns {boolean} */
|
||||
static get includeStack() {
|
||||
console.warn(
|
||||
'Assertion.includeStack is deprecated, use chai.config.includeStack instead.'
|
||||
);
|
||||
return config.includeStack;
|
||||
}
|
||||
|
||||
/** @param {boolean} value */
|
||||
static set includeStack(value) {
|
||||
console.warn(
|
||||
'Assertion.includeStack is deprecated, use chai.config.includeStack instead.'
|
||||
);
|
||||
config.includeStack = value;
|
||||
}
|
||||
|
||||
/** @returns {boolean} */
|
||||
static get showDiff() {
|
||||
console.warn(
|
||||
'Assertion.showDiff is deprecated, use chai.config.showDiff instead.'
|
||||
);
|
||||
return config.showDiff;
|
||||
}
|
||||
|
||||
/** @param {boolean} value */
|
||||
static set showDiff(value) {
|
||||
console.warn(
|
||||
'Assertion.showDiff is deprecated, use chai.config.showDiff instead.'
|
||||
);
|
||||
config.showDiff = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
*/
|
||||
static addProperty(name, fn) {
|
||||
util.addProperty(this.prototype, name, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
*/
|
||||
static addMethod(name, fn) {
|
||||
util.addMethod(this.prototype, name, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
* @param {Function} chainingBehavior
|
||||
*/
|
||||
static addChainableMethod(name, fn, chainingBehavior) {
|
||||
util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
*/
|
||||
static overwriteProperty(name, fn) {
|
||||
util.overwriteProperty(this.prototype, name, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
*/
|
||||
static overwriteMethod(name, fn) {
|
||||
util.overwriteMethod(this.prototype, name, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @param {Function} fn
|
||||
* @param {Function} chainingBehavior
|
||||
*/
|
||||
static overwriteChainableMethod(name, fn, chainingBehavior) {
|
||||
util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
|
||||
}
|
||||
|
||||
/**
|
||||
* ### .assert(expression, message, negateMessage, expected, actual, showDiff)
|
||||
*
|
||||
* Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
|
||||
*
|
||||
* @name assert
|
||||
* @param {unknown} _expr to be tested
|
||||
* @param {string | Function} msg or function that returns message to display if expression fails
|
||||
* @param {string | Function} _negateMsg or function that returns negatedMessage to display if negated expression fails
|
||||
* @param {unknown} expected value (remember to check for negation)
|
||||
* @param {unknown} _actual (optional) will default to `this.obj`
|
||||
* @param {boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails
|
||||
* @returns {void}
|
||||
*/
|
||||
assert(_expr, msg, _negateMsg, expected, _actual, showDiff) {
|
||||
const ok = util.test(this, arguments);
|
||||
if (false !== showDiff) showDiff = true;
|
||||
if (undefined === expected && undefined === _actual) showDiff = false;
|
||||
if (true !== config.showDiff) showDiff = false;
|
||||
|
||||
if (!ok) {
|
||||
msg = util.getMessage(this, arguments);
|
||||
const actual = util.getActual(this, arguments);
|
||||
/** @type {Record<PropertyKey, unknown>} */
|
||||
const assertionErrorObjectProperties = {
|
||||
actual: actual,
|
||||
expected: expected,
|
||||
showDiff: showDiff
|
||||
};
|
||||
|
||||
const operator = util.getOperator(this, arguments);
|
||||
if (operator) {
|
||||
assertionErrorObjectProperties.operator = operator;
|
||||
}
|
||||
|
||||
throw new AssertionError(
|
||||
msg,
|
||||
assertionErrorObjectProperties,
|
||||
// @ts-expect-error Not sure what to do about these types yet
|
||||
config.includeStack ? this.assert : util.flag(this, 'ssfi')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Quick reference to stored `actual` value for plugin developers.
|
||||
*
|
||||
* @returns {unknown}
|
||||
*/
|
||||
get _obj() {
|
||||
return util.flag(this, 'object');
|
||||
}
|
||||
|
||||
/**
|
||||
* Quick reference to stored `actual` value for plugin developers.
|
||||
*
|
||||
* @param {unknown} val
|
||||
*/
|
||||
set _obj(val) {
|
||||
util.flag(this, 'object', val);
|
||||
}
|
||||
}
|
||||
112
frontend/node_modules/chai/lib/chai/config.js
generated
vendored
Normal file
112
frontend/node_modules/chai/lib/chai/config.js
generated
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
export const config = {
|
||||
/**
|
||||
* ### config.includeStack
|
||||
*
|
||||
* User configurable property, influences whether stack trace
|
||||
* is included in Assertion error message. Default of false
|
||||
* suppresses stack trace in the error message.
|
||||
*
|
||||
* chai.config.includeStack = true; // enable stack on error
|
||||
*
|
||||
* @param {boolean}
|
||||
* @public
|
||||
*/
|
||||
includeStack: false,
|
||||
|
||||
/**
|
||||
* ### config.showDiff
|
||||
*
|
||||
* User configurable property, influences whether or not
|
||||
* the `showDiff` flag should be included in the thrown
|
||||
* AssertionErrors. `false` will always be `false`; `true`
|
||||
* will be true when the assertion has requested a diff
|
||||
* be shown.
|
||||
*
|
||||
* @param {boolean}
|
||||
* @public
|
||||
*/
|
||||
showDiff: true,
|
||||
|
||||
/**
|
||||
* ### config.truncateThreshold
|
||||
*
|
||||
* User configurable property, sets length threshold for actual and
|
||||
* expected values in assertion errors. If this threshold is exceeded, for
|
||||
* example for large data structures, the value is replaced with something
|
||||
* like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.
|
||||
*
|
||||
* Set it to zero if you want to disable truncating altogether.
|
||||
*
|
||||
* This is especially userful when doing assertions on arrays: having this
|
||||
* set to a reasonable large value makes the failure messages readily
|
||||
* inspectable.
|
||||
*
|
||||
* chai.config.truncateThreshold = 0; // disable truncating
|
||||
*
|
||||
* @param {number}
|
||||
* @public
|
||||
*/
|
||||
truncateThreshold: 40,
|
||||
|
||||
/**
|
||||
* ### config.useProxy
|
||||
*
|
||||
* User configurable property, defines if chai will use a Proxy to throw
|
||||
* an error when a non-existent property is read, which protects users
|
||||
* from typos when using property-based assertions.
|
||||
*
|
||||
* Set it to false if you want to disable this feature.
|
||||
*
|
||||
* chai.config.useProxy = false; // disable use of Proxy
|
||||
*
|
||||
* This feature is automatically disabled regardless of this config value
|
||||
* in environments that don't support proxies.
|
||||
*
|
||||
* @param {boolean}
|
||||
* @public
|
||||
*/
|
||||
useProxy: true,
|
||||
|
||||
/**
|
||||
* ### config.proxyExcludedKeys
|
||||
*
|
||||
* User configurable property, defines which properties should be ignored
|
||||
* instead of throwing an error if they do not exist on the assertion.
|
||||
* This is only applied if the environment Chai is running in supports proxies and
|
||||
* if the `useProxy` configuration setting is enabled.
|
||||
* By default, `then` and `inspect` will not throw an error if they do not exist on the
|
||||
* assertion object because the `.inspect` property is read by `util.inspect` (for example, when
|
||||
* using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.
|
||||
*
|
||||
* // By default these keys will not throw an error if they do not exist on the assertion object
|
||||
* chai.config.proxyExcludedKeys = ['then', 'inspect'];
|
||||
*
|
||||
* @param {Array}
|
||||
* @public
|
||||
*/
|
||||
proxyExcludedKeys: ['then', 'catch', 'inspect', 'toJSON'],
|
||||
|
||||
/**
|
||||
* ### config.deepEqual
|
||||
*
|
||||
* User configurable property, defines which a custom function to use for deepEqual
|
||||
* comparisons.
|
||||
* By default, the function used is the one from the `deep-eql` package without custom comparator.
|
||||
*
|
||||
* // use a custom comparator
|
||||
* chai.config.deepEqual = (expected, actual) => {
|
||||
* return chai.util.eql(expected, actual, {
|
||||
* comparator: (expected, actual) => {
|
||||
* // for non number comparison, use the default behavior
|
||||
* if(typeof expected !== 'number') return null;
|
||||
* // allow a difference of 10 between compared numbers
|
||||
* return typeof actual === 'number' && Math.abs(actual - expected) < 10
|
||||
* }
|
||||
* })
|
||||
* };
|
||||
*
|
||||
* @param {Function}
|
||||
* @public
|
||||
*/
|
||||
deepEqual: null
|
||||
};
|
||||
4156
frontend/node_modules/chai/lib/chai/core/assertions.js
generated
vendored
Normal file
4156
frontend/node_modules/chai/lib/chai/core/assertions.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3228
frontend/node_modules/chai/lib/chai/interface/assert.js
generated
vendored
Normal file
3228
frontend/node_modules/chai/lib/chai/interface/assert.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
59
frontend/node_modules/chai/lib/chai/interface/expect.js
generated
vendored
Normal file
59
frontend/node_modules/chai/lib/chai/interface/expect.js
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
/*!
|
||||
* chai
|
||||
* Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import * as chai from '../../../index.js';
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {AssertionError} from 'assertion-error';
|
||||
|
||||
/**
|
||||
* @param {unknown} val
|
||||
* @param {string} message
|
||||
* @returns {Assertion}
|
||||
*/
|
||||
function expect(val, message) {
|
||||
return new Assertion(val, message);
|
||||
}
|
||||
|
||||
export {expect};
|
||||
|
||||
/**
|
||||
* ### .fail([message])
|
||||
* ### .fail(actual, expected, [message], [operator])
|
||||
*
|
||||
* Throw a failure.
|
||||
*
|
||||
* expect.fail();
|
||||
* expect.fail("custom error message");
|
||||
* expect.fail(1, 2);
|
||||
* expect.fail(1, 2, "custom error message");
|
||||
* expect.fail(1, 2, "custom error message", ">");
|
||||
* expect.fail(1, 2, undefined, ">");
|
||||
*
|
||||
* @name fail
|
||||
* @param {unknown} actual
|
||||
* @param {unknown} expected
|
||||
* @param {string} message
|
||||
* @param {string} operator
|
||||
* @namespace expect
|
||||
* @public
|
||||
*/
|
||||
expect.fail = function (actual, expected, message, operator) {
|
||||
if (arguments.length < 2) {
|
||||
message = actual;
|
||||
actual = undefined;
|
||||
}
|
||||
|
||||
message = message || 'expect.fail()';
|
||||
throw new AssertionError(
|
||||
message,
|
||||
{
|
||||
actual: actual,
|
||||
expected: expected,
|
||||
operator: operator
|
||||
},
|
||||
chai.expect.fail
|
||||
);
|
||||
};
|
||||
227
frontend/node_modules/chai/lib/chai/interface/should.js
generated
vendored
Normal file
227
frontend/node_modules/chai/lib/chai/interface/should.js
generated
vendored
Normal file
@@ -0,0 +1,227 @@
|
||||
/*!
|
||||
* chai
|
||||
* Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {AssertionError} from 'assertion-error';
|
||||
|
||||
/**
|
||||
* @returns {void}
|
||||
*/
|
||||
function loadShould() {
|
||||
// explicitly define this method as function as to have it's name to include as `ssfi`
|
||||
/**
|
||||
* @returns {Assertion}
|
||||
*/
|
||||
function shouldGetter() {
|
||||
if (
|
||||
this instanceof String ||
|
||||
this instanceof Number ||
|
||||
this instanceof Boolean ||
|
||||
(typeof Symbol === 'function' && this instanceof Symbol) ||
|
||||
(typeof BigInt === 'function' && this instanceof BigInt)
|
||||
) {
|
||||
return new Assertion(this.valueOf(), null, shouldGetter);
|
||||
}
|
||||
return new Assertion(this, null, shouldGetter);
|
||||
}
|
||||
/**
|
||||
* @param {unknown} value
|
||||
*/
|
||||
function shouldSetter(value) {
|
||||
// See https://github.com/chaijs/chai/issues/86: this makes
|
||||
// `whatever.should = someValue` actually set `someValue`, which is
|
||||
// especially useful for `global.should = require('chai').should()`.
|
||||
//
|
||||
// Note that we have to use [[DefineProperty]] instead of [[Put]]
|
||||
// since otherwise we would trigger this very setter!
|
||||
Object.defineProperty(this, 'should', {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
}
|
||||
// modify Object.prototype to have `should`
|
||||
Object.defineProperty(Object.prototype, 'should', {
|
||||
set: shouldSetter,
|
||||
get: shouldGetter,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
let should = {};
|
||||
|
||||
/**
|
||||
* ### .fail([message])
|
||||
* ### .fail(actual, expected, [message], [operator])
|
||||
*
|
||||
* Throw a failure.
|
||||
*
|
||||
* should.fail();
|
||||
* should.fail("custom error message");
|
||||
* should.fail(1, 2);
|
||||
* should.fail(1, 2, "custom error message");
|
||||
* should.fail(1, 2, "custom error message", ">");
|
||||
* should.fail(1, 2, undefined, ">");
|
||||
*
|
||||
* @name fail
|
||||
* @param {unknown} actual
|
||||
* @param {unknown} expected
|
||||
* @param {string} message
|
||||
* @param {string} operator
|
||||
* @namespace BDD
|
||||
* @public
|
||||
*/
|
||||
should.fail = function (actual, expected, message, operator) {
|
||||
if (arguments.length < 2) {
|
||||
message = actual;
|
||||
actual = undefined;
|
||||
}
|
||||
|
||||
message = message || 'should.fail()';
|
||||
throw new AssertionError(
|
||||
message,
|
||||
{
|
||||
actual: actual,
|
||||
expected: expected,
|
||||
operator: operator
|
||||
},
|
||||
should.fail
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* ### .equal(actual, expected, [message])
|
||||
*
|
||||
* Asserts non-strict equality (`==`) of `actual` and `expected`.
|
||||
*
|
||||
* should.equal(3, '3', '== coerces values to strings');
|
||||
*
|
||||
* @name equal
|
||||
* @param {unknown} actual
|
||||
* @param {unknown} expected
|
||||
* @param {string} message
|
||||
* @namespace Should
|
||||
* @public
|
||||
*/
|
||||
should.equal = function (actual, expected, message) {
|
||||
new Assertion(actual, message).to.equal(expected);
|
||||
};
|
||||
|
||||
/**
|
||||
* ### .throw(function, [constructor/string/regexp], [string/regexp], [message])
|
||||
*
|
||||
* Asserts that `function` will throw an error that is an instance of
|
||||
* `constructor`, or alternately that it will throw an error with message
|
||||
* matching `regexp`.
|
||||
*
|
||||
* should.throw(fn, 'function throws a reference error');
|
||||
* should.throw(fn, /function throws a reference error/);
|
||||
* should.throw(fn, ReferenceError);
|
||||
* should.throw(fn, ReferenceError, 'function throws a reference error');
|
||||
* should.throw(fn, ReferenceError, /function throws a reference error/);
|
||||
*
|
||||
* @name throw
|
||||
* @alias Throw
|
||||
* @param {Function} fn
|
||||
* @param {Error} errt
|
||||
* @param {RegExp} errs
|
||||
* @param {string} msg
|
||||
* @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
|
||||
* @namespace Should
|
||||
* @public
|
||||
*/
|
||||
should.Throw = function (fn, errt, errs, msg) {
|
||||
new Assertion(fn, msg).to.Throw(errt, errs);
|
||||
};
|
||||
|
||||
/**
|
||||
* ### .exist
|
||||
*
|
||||
* Asserts that the target is neither `null` nor `undefined`.
|
||||
*
|
||||
* var foo = 'hi';
|
||||
* should.exist(foo, 'foo exists');
|
||||
*
|
||||
* @param {unknown} val
|
||||
* @param {string} msg
|
||||
* @name exist
|
||||
* @namespace Should
|
||||
* @public
|
||||
*/
|
||||
should.exist = function (val, msg) {
|
||||
new Assertion(val, msg).to.exist;
|
||||
};
|
||||
|
||||
// negation
|
||||
should.not = {};
|
||||
|
||||
/**
|
||||
* ### .not.equal(actual, expected, [message])
|
||||
*
|
||||
* Asserts non-strict inequality (`!=`) of `actual` and `expected`.
|
||||
*
|
||||
* should.not.equal(3, 4, 'these numbers are not equal');
|
||||
*
|
||||
* @name not.equal
|
||||
* @param {unknown} actual
|
||||
* @param {unknown} expected
|
||||
* @param {string} msg
|
||||
* @namespace Should
|
||||
* @public
|
||||
*/
|
||||
should.not.equal = function (actual, expected, msg) {
|
||||
new Assertion(actual, msg).to.not.equal(expected);
|
||||
};
|
||||
|
||||
/**
|
||||
* ### .throw(function, [constructor/regexp], [message])
|
||||
*
|
||||
* Asserts that `function` will _not_ throw an error that is an instance of
|
||||
* `constructor`, or alternately that it will not throw an error with message
|
||||
* matching `regexp`.
|
||||
*
|
||||
* should.not.throw(fn, Error, 'function does not throw');
|
||||
*
|
||||
* @name not.throw
|
||||
* @alias not.Throw
|
||||
* @param {Function} fn
|
||||
* @param {Error} errt
|
||||
* @param {RegExp} errs
|
||||
* @param {string} msg
|
||||
* @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
|
||||
* @namespace Should
|
||||
* @public
|
||||
*/
|
||||
should.not.Throw = function (fn, errt, errs, msg) {
|
||||
new Assertion(fn, msg).to.not.Throw(errt, errs);
|
||||
};
|
||||
|
||||
/**
|
||||
* ### .not.exist
|
||||
*
|
||||
* Asserts that the target is neither `null` nor `undefined`.
|
||||
*
|
||||
* var bar = null;
|
||||
* should.not.exist(bar, 'bar does not exist');
|
||||
*
|
||||
* @namespace Should
|
||||
* @name not.exist
|
||||
* @param {unknown} val
|
||||
* @param {string} msg
|
||||
* @public
|
||||
*/
|
||||
should.not.exist = function (val, msg) {
|
||||
new Assertion(val, msg).to.not.exist;
|
||||
};
|
||||
|
||||
should['throw'] = should['Throw'];
|
||||
should.not['throw'] = should.not['Throw'];
|
||||
|
||||
return should;
|
||||
}
|
||||
|
||||
export const should = loadShould;
|
||||
export const Should = loadShould;
|
||||
146
frontend/node_modules/chai/lib/chai/utils/addChainableMethod.js
generated
vendored
Normal file
146
frontend/node_modules/chai/lib/chai/utils/addChainableMethod.js
generated
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
/*!
|
||||
* Chai - addChainingMethod utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {addLengthGuard} from './addLengthGuard.js';
|
||||
import {flag} from './flag.js';
|
||||
import {proxify} from './proxify.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
|
||||
/**
|
||||
* Module variables
|
||||
*/
|
||||
|
||||
// Check whether `Object.setPrototypeOf` is supported
|
||||
let canSetPrototype = typeof Object.setPrototypeOf === 'function';
|
||||
|
||||
// Without `Object.setPrototypeOf` support, this module will need to add properties to a function.
|
||||
// However, some of functions' own props are not configurable and should be skipped.
|
||||
let testFn = function () {};
|
||||
let excludeNames = Object.getOwnPropertyNames(testFn).filter(function (name) {
|
||||
let propDesc = Object.getOwnPropertyDescriptor(testFn, name);
|
||||
|
||||
// Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties,
|
||||
// but then returns `undefined` as the property descriptor for `callee`. As a
|
||||
// workaround, we perform an otherwise unnecessary type-check for `propDesc`,
|
||||
// and then filter it out if it's not an object as it should be.
|
||||
if (typeof propDesc !== 'object') return true;
|
||||
|
||||
return !propDesc.configurable;
|
||||
});
|
||||
|
||||
// Cache `Function` properties
|
||||
let call = Function.prototype.call,
|
||||
apply = Function.prototype.apply;
|
||||
|
||||
/**
|
||||
* ### .addChainableMethod(ctx, name, method, chainingBehavior)
|
||||
*
|
||||
* Adds a method to an object, such that the method can also be chained.
|
||||
*
|
||||
* utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
|
||||
* var obj = utils.flag(this, 'object');
|
||||
* new chai.Assertion(obj).to.be.equal(str);
|
||||
* });
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
|
||||
*
|
||||
* The result can then be used as both a method assertion, executing both `method` and
|
||||
* `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
|
||||
*
|
||||
* expect(fooStr).to.be.foo('bar');
|
||||
* expect(fooStr).to.be.foo.equal('foo');
|
||||
*
|
||||
* @param {object} ctx object to which the method is added
|
||||
* @param {string} name of method to add
|
||||
* @param {Function} method function to be used for `name`, when called
|
||||
* @param {Function} chainingBehavior function to be called every time the property is accessed
|
||||
* @namespace Utils
|
||||
* @name addChainableMethod
|
||||
* @public
|
||||
*/
|
||||
export function addChainableMethod(ctx, name, method, chainingBehavior) {
|
||||
if (typeof chainingBehavior !== 'function') {
|
||||
chainingBehavior = function () {};
|
||||
}
|
||||
|
||||
let chainableBehavior = {
|
||||
method: method,
|
||||
chainingBehavior: chainingBehavior
|
||||
};
|
||||
|
||||
// save the methods so we can overwrite them later, if we need to.
|
||||
if (!ctx.__methods) {
|
||||
ctx.__methods = {};
|
||||
}
|
||||
ctx.__methods[name] = chainableBehavior;
|
||||
|
||||
Object.defineProperty(ctx, name, {
|
||||
get: function chainableMethodGetter() {
|
||||
chainableBehavior.chainingBehavior.call(this);
|
||||
|
||||
let chainableMethodWrapper = function () {
|
||||
// Setting the `ssfi` flag to `chainableMethodWrapper` causes this
|
||||
// function to be the starting point for removing implementation
|
||||
// frames from the stack trace of a failed assertion.
|
||||
//
|
||||
// However, we only want to use this function as the starting point if
|
||||
// the `lockSsfi` flag isn't set.
|
||||
//
|
||||
// If the `lockSsfi` flag is set, then this assertion is being
|
||||
// invoked from inside of another assertion. In this case, the `ssfi`
|
||||
// flag has already been set by the outer assertion.
|
||||
//
|
||||
// Note that overwriting a chainable method merely replaces the saved
|
||||
// methods in `ctx.__methods` instead of completely replacing the
|
||||
// overwritten assertion. Therefore, an overwriting assertion won't
|
||||
// set the `ssfi` or `lockSsfi` flags.
|
||||
if (!flag(this, 'lockSsfi')) {
|
||||
flag(this, 'ssfi', chainableMethodWrapper);
|
||||
}
|
||||
|
||||
let result = chainableBehavior.method.apply(this, arguments);
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
};
|
||||
|
||||
addLengthGuard(chainableMethodWrapper, name, true);
|
||||
|
||||
// Use `Object.setPrototypeOf` if available
|
||||
if (canSetPrototype) {
|
||||
// Inherit all properties from the object by replacing the `Function` prototype
|
||||
let prototype = Object.create(this);
|
||||
// Restore the `call` and `apply` methods from `Function`
|
||||
prototype.call = call;
|
||||
prototype.apply = apply;
|
||||
Object.setPrototypeOf(chainableMethodWrapper, prototype);
|
||||
}
|
||||
// Otherwise, redefine all properties (slow!)
|
||||
else {
|
||||
let asserterNames = Object.getOwnPropertyNames(ctx);
|
||||
asserterNames.forEach(function (asserterName) {
|
||||
if (excludeNames.indexOf(asserterName) !== -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
let pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
|
||||
Object.defineProperty(chainableMethodWrapper, asserterName, pd);
|
||||
});
|
||||
}
|
||||
|
||||
transferFlags(this, chainableMethodWrapper);
|
||||
return proxify(chainableMethodWrapper);
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
73
frontend/node_modules/chai/lib/chai/utils/addLengthGuard.js
generated
vendored
Normal file
73
frontend/node_modules/chai/lib/chai/utils/addLengthGuard.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
const fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length');
|
||||
|
||||
/*!
|
||||
* Chai - addLengthGuard utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .addLengthGuard(fn, assertionName, isChainable)
|
||||
*
|
||||
* Define `length` as a getter on the given uninvoked method assertion. The
|
||||
* getter acts as a guard against chaining `length` directly off of an uninvoked
|
||||
* method assertion, which is a problem because it references `function`'s
|
||||
* built-in `length` property instead of Chai's `length` assertion. When the
|
||||
* getter catches the user making this mistake, it throws an error with a
|
||||
* helpful message.
|
||||
*
|
||||
* There are two ways in which this mistake can be made. The first way is by
|
||||
* chaining the `length` assertion directly off of an uninvoked chainable
|
||||
* method. In this case, Chai suggests that the user use `lengthOf` instead. The
|
||||
* second way is by chaining the `length` assertion directly off of an uninvoked
|
||||
* non-chainable method. Non-chainable methods must be invoked prior to
|
||||
* chaining. In this case, Chai suggests that the user consult the docs for the
|
||||
* given assertion.
|
||||
*
|
||||
* If the `length` property of functions is unconfigurable, then return `fn`
|
||||
* without modification.
|
||||
*
|
||||
* Note that in ES6, the function's `length` property is configurable, so once
|
||||
* support for legacy environments is dropped, Chai's `length` property can
|
||||
* replace the built-in function's `length` property, and this length guard will
|
||||
* no longer be necessary. In the mean time, maintaining consistency across all
|
||||
* environments is the priority.
|
||||
*
|
||||
* @param {Function} fn
|
||||
* @param {string} assertionName
|
||||
* @param {boolean} isChainable
|
||||
* @returns {unknown}
|
||||
* @namespace Utils
|
||||
* @name addLengthGuard
|
||||
*/
|
||||
export function addLengthGuard(fn, assertionName, isChainable) {
|
||||
if (!fnLengthDesc.configurable) return fn;
|
||||
|
||||
Object.defineProperty(fn, 'length', {
|
||||
get: function () {
|
||||
if (isChainable) {
|
||||
throw Error(
|
||||
'Invalid Chai property: ' +
|
||||
assertionName +
|
||||
'.length. Due' +
|
||||
' to a compatibility issue, "length" cannot directly follow "' +
|
||||
assertionName +
|
||||
'". Use "' +
|
||||
assertionName +
|
||||
'.lengthOf" instead.'
|
||||
);
|
||||
}
|
||||
|
||||
throw Error(
|
||||
'Invalid Chai property: ' +
|
||||
assertionName +
|
||||
'.length. See' +
|
||||
' docs for proper usage of "' +
|
||||
assertionName +
|
||||
'".'
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
return fn;
|
||||
}
|
||||
66
frontend/node_modules/chai/lib/chai/utils/addMethod.js
generated
vendored
Normal file
66
frontend/node_modules/chai/lib/chai/utils/addMethod.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
/*!
|
||||
* Chai - addMethod utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {addLengthGuard} from './addLengthGuard.js';
|
||||
import {flag} from './flag.js';
|
||||
import {proxify} from './proxify.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
import {Assertion} from '../assertion.js';
|
||||
|
||||
/**
|
||||
* ### .addMethod(ctx, name, method)
|
||||
*
|
||||
* Adds a method to the prototype of an object.
|
||||
*
|
||||
* utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
|
||||
* var obj = utils.flag(this, 'object');
|
||||
* new chai.Assertion(obj).to.be.equal(str);
|
||||
* });
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.addMethod('foo', fn);
|
||||
*
|
||||
* Then can be used as any other assertion.
|
||||
*
|
||||
* expect(fooStr).to.be.foo('bar');
|
||||
*
|
||||
* @param {object} ctx object to which the method is added
|
||||
* @param {string} name of method to add
|
||||
* @param {Function} method function to be used for name
|
||||
* @namespace Utils
|
||||
* @name addMethod
|
||||
* @public
|
||||
*/
|
||||
export function addMethod(ctx, name, method) {
|
||||
let methodWrapper = function () {
|
||||
// Setting the `ssfi` flag to `methodWrapper` causes this function to be the
|
||||
// starting point for removing implementation frames from the stack trace of
|
||||
// a failed assertion.
|
||||
//
|
||||
// However, we only want to use this function as the starting point if the
|
||||
// `lockSsfi` flag isn't set.
|
||||
//
|
||||
// If the `lockSsfi` flag is set, then either this assertion has been
|
||||
// overwritten by another assertion, or this assertion is being invoked from
|
||||
// inside of another assertion. In the first case, the `ssfi` flag has
|
||||
// already been set by the overwriting assertion. In the second case, the
|
||||
// `ssfi` flag has already been set by the outer assertion.
|
||||
if (!flag(this, 'lockSsfi')) {
|
||||
flag(this, 'ssfi', methodWrapper);
|
||||
}
|
||||
|
||||
let result = method.apply(this, arguments);
|
||||
if (result !== undefined) return result;
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
};
|
||||
|
||||
addLengthGuard(methodWrapper, name, false);
|
||||
ctx[name] = proxify(methodWrapper, name);
|
||||
}
|
||||
70
frontend/node_modules/chai/lib/chai/utils/addProperty.js
generated
vendored
Normal file
70
frontend/node_modules/chai/lib/chai/utils/addProperty.js
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
/*!
|
||||
* Chai - addProperty utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {flag} from './flag.js';
|
||||
import {isProxyEnabled} from './isProxyEnabled.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
|
||||
/**
|
||||
* ### .addProperty(ctx, name, getter)
|
||||
*
|
||||
* Adds a property to the prototype of an object.
|
||||
*
|
||||
* utils.addProperty(chai.Assertion.prototype, 'foo', function () {
|
||||
* var obj = utils.flag(this, 'object');
|
||||
* new chai.Assertion(obj).to.be.instanceof(Foo);
|
||||
* });
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.addProperty('foo', fn);
|
||||
*
|
||||
* Then can be used as any other assertion.
|
||||
*
|
||||
* expect(myFoo).to.be.foo;
|
||||
*
|
||||
* @param {object} ctx object to which the property is added
|
||||
* @param {string} name of property to add
|
||||
* @param {Function} getter function to be used for name
|
||||
* @namespace Utils
|
||||
* @name addProperty
|
||||
* @public
|
||||
*/
|
||||
export function addProperty(ctx, name, getter) {
|
||||
getter = getter === undefined ? function () {} : getter;
|
||||
|
||||
Object.defineProperty(ctx, name, {
|
||||
get: function propertyGetter() {
|
||||
// Setting the `ssfi` flag to `propertyGetter` causes this function to
|
||||
// be the starting point for removing implementation frames from the
|
||||
// stack trace of a failed assertion.
|
||||
//
|
||||
// However, we only want to use this function as the starting point if
|
||||
// the `lockSsfi` flag isn't set and proxy protection is disabled.
|
||||
//
|
||||
// If the `lockSsfi` flag is set, then either this assertion has been
|
||||
// overwritten by another assertion, or this assertion is being invoked
|
||||
// from inside of another assertion. In the first case, the `ssfi` flag
|
||||
// has already been set by the overwriting assertion. In the second
|
||||
// case, the `ssfi` flag has already been set by the outer assertion.
|
||||
//
|
||||
// If proxy protection is enabled, then the `ssfi` flag has already been
|
||||
// set by the proxy getter.
|
||||
if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {
|
||||
flag(this, 'ssfi', propertyGetter);
|
||||
}
|
||||
|
||||
let result = getter.call(this);
|
||||
if (result !== undefined) return result;
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
26
frontend/node_modules/chai/lib/chai/utils/compareByInspect.js
generated
vendored
Normal file
26
frontend/node_modules/chai/lib/chai/utils/compareByInspect.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
/*!
|
||||
* Chai - compareByInspect utility
|
||||
* Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {inspect} from './inspect.js';
|
||||
|
||||
/**
|
||||
* ### .compareByInspect(mixed, mixed)
|
||||
*
|
||||
* To be used as a compareFunction with Array.prototype.sort. Compares elements
|
||||
* using inspect instead of default behavior of using toString so that Symbols
|
||||
* and objects with irregular/missing toString can still be sorted without a
|
||||
* TypeError.
|
||||
*
|
||||
* @param {unknown} a first element to compare
|
||||
* @param {unknown} b second element to compare
|
||||
* @returns {number} -1 if 'a' should come before 'b'; otherwise 1
|
||||
* @name compareByInspect
|
||||
* @namespace Utils
|
||||
* @public
|
||||
*/
|
||||
export function compareByInspect(a, b) {
|
||||
return inspect(a) < inspect(b) ? -1 : 1;
|
||||
}
|
||||
58
frontend/node_modules/chai/lib/chai/utils/expectTypes.js
generated
vendored
Normal file
58
frontend/node_modules/chai/lib/chai/utils/expectTypes.js
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
/*!
|
||||
* Chai - expectTypes utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {AssertionError} from 'assertion-error';
|
||||
import {flag} from './flag.js';
|
||||
import {type} from './type-detect.js';
|
||||
|
||||
/**
|
||||
* ### .expectTypes(obj, types)
|
||||
*
|
||||
* Ensures that the object being tested against is of a valid type.
|
||||
*
|
||||
* utils.expectTypes(this, ['array', 'object', 'string']);
|
||||
*
|
||||
* @param {unknown} obj constructed Assertion
|
||||
* @param {Array} types A list of allowed types for this assertion
|
||||
* @namespace Utils
|
||||
* @name expectTypes
|
||||
* @public
|
||||
*/
|
||||
export function expectTypes(obj, types) {
|
||||
let flagMsg = flag(obj, 'message');
|
||||
let ssfi = flag(obj, 'ssfi');
|
||||
|
||||
flagMsg = flagMsg ? flagMsg + ': ' : '';
|
||||
|
||||
obj = flag(obj, 'object');
|
||||
types = types.map(function (t) {
|
||||
return t.toLowerCase();
|
||||
});
|
||||
types.sort();
|
||||
|
||||
// Transforms ['lorem', 'ipsum'] into 'a lorem, or an ipsum'
|
||||
let str = types
|
||||
.map(function (t, index) {
|
||||
let art = ~['a', 'e', 'i', 'o', 'u'].indexOf(t.charAt(0)) ? 'an' : 'a';
|
||||
let or = types.length > 1 && index === types.length - 1 ? 'or ' : '';
|
||||
return or + art + ' ' + t;
|
||||
})
|
||||
.join(', ');
|
||||
|
||||
let objType = type(obj).toLowerCase();
|
||||
|
||||
if (
|
||||
!types.some(function (expected) {
|
||||
return objType === expected;
|
||||
})
|
||||
) {
|
||||
throw new AssertionError(
|
||||
flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given',
|
||||
undefined,
|
||||
ssfi
|
||||
);
|
||||
}
|
||||
}
|
||||
34
frontend/node_modules/chai/lib/chai/utils/flag.js
generated
vendored
Normal file
34
frontend/node_modules/chai/lib/chai/utils/flag.js
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
/*!
|
||||
* Chai - flag utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .flag(object, key, [value])
|
||||
*
|
||||
* Get or set a flag value on an object. If a
|
||||
* value is provided it will be set, else it will
|
||||
* return the currently set value or `undefined` if
|
||||
* the value is not set.
|
||||
*
|
||||
* utils.flag(this, 'foo', 'bar'); // setter
|
||||
* utils.flag(this, 'foo'); // getter, returns `bar`
|
||||
*
|
||||
* @template {{__flags?: {[key: PropertyKey]: unknown}}} T
|
||||
* @param {T} obj object constructed Assertion
|
||||
* @param {string} key
|
||||
* @param {unknown} [value]
|
||||
* @namespace Utils
|
||||
* @name flag
|
||||
* @returns {unknown | undefined}
|
||||
* @private
|
||||
*/
|
||||
export function flag(obj, key, value) {
|
||||
let flags = obj.__flags || (obj.__flags = Object.create(null));
|
||||
if (arguments.length === 3) {
|
||||
flags[key] = value;
|
||||
} else {
|
||||
return flags[key];
|
||||
}
|
||||
}
|
||||
20
frontend/node_modules/chai/lib/chai/utils/getActual.js
generated
vendored
Normal file
20
frontend/node_modules/chai/lib/chai/utils/getActual.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
/*!
|
||||
* Chai - getActual utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .getActual(object, [actual])
|
||||
*
|
||||
* Returns the `actual` value for an Assertion.
|
||||
*
|
||||
* @param {object} obj object (constructed Assertion)
|
||||
* @param {unknown} args chai.Assertion.prototype.assert arguments
|
||||
* @returns {unknown}
|
||||
* @namespace Utils
|
||||
* @name getActual
|
||||
*/
|
||||
export function getActual(obj, args) {
|
||||
return args.length > 4 ? args[4] : obj._obj;
|
||||
}
|
||||
52
frontend/node_modules/chai/lib/chai/utils/getMessage.js
generated
vendored
Normal file
52
frontend/node_modules/chai/lib/chai/utils/getMessage.js
generated
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
/*!
|
||||
* Chai - message composition utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {flag} from './flag.js';
|
||||
import {getActual} from './getActual.js';
|
||||
import {objDisplay} from './objDisplay.js';
|
||||
|
||||
/**
|
||||
* ### .getMessage(object, message, negateMessage)
|
||||
*
|
||||
* Construct the error message based on flags
|
||||
* and template tags. Template tags will return
|
||||
* a stringified inspection of the object referenced.
|
||||
*
|
||||
* Message template tags:
|
||||
* - `#{this}` current asserted object
|
||||
* - `#{act}` actual value
|
||||
* - `#{exp}` expected value
|
||||
*
|
||||
* @param {object} obj object (constructed Assertion)
|
||||
* @param {IArguments} args chai.Assertion.prototype.assert arguments
|
||||
* @returns {string}
|
||||
* @namespace Utils
|
||||
* @name getMessage
|
||||
* @public
|
||||
*/
|
||||
export function getMessage(obj, args) {
|
||||
let negate = flag(obj, 'negate');
|
||||
let val = flag(obj, 'object');
|
||||
let expected = args[3];
|
||||
let actual = getActual(obj, args);
|
||||
let msg = negate ? args[2] : args[1];
|
||||
let flagMsg = flag(obj, 'message');
|
||||
|
||||
if (typeof msg === 'function') msg = msg();
|
||||
msg = msg || '';
|
||||
msg = msg
|
||||
.replace(/#\{this\}/g, function () {
|
||||
return objDisplay(val);
|
||||
})
|
||||
.replace(/#\{act\}/g, function () {
|
||||
return objDisplay(actual);
|
||||
})
|
||||
.replace(/#\{exp\}/g, function () {
|
||||
return objDisplay(expected);
|
||||
});
|
||||
|
||||
return flagMsg ? flagMsg + ': ' + msg : msg;
|
||||
}
|
||||
58
frontend/node_modules/chai/lib/chai/utils/getOperator.js
generated
vendored
Normal file
58
frontend/node_modules/chai/lib/chai/utils/getOperator.js
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
import {flag} from './flag.js';
|
||||
import {type} from './type-detect.js';
|
||||
|
||||
/**
|
||||
* @param {unknown} obj
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isObjectType(obj) {
|
||||
let objectType = type(obj);
|
||||
let objectTypes = ['Array', 'Object', 'Function'];
|
||||
|
||||
return objectTypes.indexOf(objectType) !== -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ### .getOperator(message)
|
||||
*
|
||||
* Extract the operator from error message.
|
||||
* Operator defined is based on below link
|
||||
* https://nodejs.org/api/assert.html#assert_assert.
|
||||
*
|
||||
* Returns the `operator` or `undefined` value for an Assertion.
|
||||
*
|
||||
* @param {object} obj object (constructed Assertion)
|
||||
* @param {unknown} args chai.Assertion.prototype.assert arguments
|
||||
* @returns {unknown}
|
||||
* @namespace Utils
|
||||
* @name getOperator
|
||||
* @public
|
||||
*/
|
||||
export function getOperator(obj, args) {
|
||||
let operator = flag(obj, 'operator');
|
||||
let negate = flag(obj, 'negate');
|
||||
let expected = args[3];
|
||||
let msg = negate ? args[2] : args[1];
|
||||
|
||||
if (operator) {
|
||||
return operator;
|
||||
}
|
||||
|
||||
if (typeof msg === 'function') msg = msg();
|
||||
|
||||
msg = msg || '';
|
||||
if (!msg) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (/\shave\s/.test(msg)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let isObject = isObjectType(expected);
|
||||
if (/\snot\s/.test(msg)) {
|
||||
return isObject ? 'notDeepStrictEqual' : 'notStrictEqual';
|
||||
}
|
||||
|
||||
return isObject ? 'deepStrictEqual' : 'strictEqual';
|
||||
}
|
||||
24
frontend/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js
generated
vendored
Normal file
24
frontend/node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/*!
|
||||
* Chai - getOwnEnumerableProperties utility
|
||||
* Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {getOwnEnumerablePropertySymbols} from './getOwnEnumerablePropertySymbols.js';
|
||||
|
||||
/**
|
||||
* ### .getOwnEnumerableProperties(object)
|
||||
*
|
||||
* This allows the retrieval of directly-owned enumerable property names and
|
||||
* symbols of an object. This function is necessary because Object.keys only
|
||||
* returns enumerable property names, not enumerable property symbols.
|
||||
*
|
||||
* @param {object} obj
|
||||
* @returns {Array}
|
||||
* @namespace Utils
|
||||
* @name getOwnEnumerableProperties
|
||||
* @public
|
||||
*/
|
||||
export function getOwnEnumerableProperties(obj) {
|
||||
return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));
|
||||
}
|
||||
26
frontend/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js
generated
vendored
Normal file
26
frontend/node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
/*!
|
||||
* Chai - getOwnEnumerablePropertySymbols utility
|
||||
* Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .getOwnEnumerablePropertySymbols(object)
|
||||
*
|
||||
* This allows the retrieval of directly-owned enumerable property symbols of an
|
||||
* object. This function is necessary because Object.getOwnPropertySymbols
|
||||
* returns both enumerable and non-enumerable property symbols.
|
||||
*
|
||||
* @param {object} obj
|
||||
* @returns {Array}
|
||||
* @namespace Utils
|
||||
* @name getOwnEnumerablePropertySymbols
|
||||
* @public
|
||||
*/
|
||||
export function getOwnEnumerablePropertySymbols(obj) {
|
||||
if (typeof Object.getOwnPropertySymbols !== 'function') return [];
|
||||
|
||||
return Object.getOwnPropertySymbols(obj).filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(obj, sym).enumerable;
|
||||
});
|
||||
}
|
||||
38
frontend/node_modules/chai/lib/chai/utils/getProperties.js
generated
vendored
Normal file
38
frontend/node_modules/chai/lib/chai/utils/getProperties.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
/*!
|
||||
* Chai - getProperties utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .getProperties(object)
|
||||
*
|
||||
* This allows the retrieval of property names of an object, enumerable or not,
|
||||
* inherited or not.
|
||||
*
|
||||
* @param {object} object
|
||||
* @returns {Array}
|
||||
* @namespace Utils
|
||||
* @name getProperties
|
||||
* @public
|
||||
*/
|
||||
export function getProperties(object) {
|
||||
let result = Object.getOwnPropertyNames(object);
|
||||
|
||||
/**
|
||||
* @param {unknown} property
|
||||
*/
|
||||
function addProperty(property) {
|
||||
if (result.indexOf(property) === -1) {
|
||||
result.push(property);
|
||||
}
|
||||
}
|
||||
|
||||
let proto = Object.getPrototypeOf(object);
|
||||
while (proto !== null) {
|
||||
Object.getOwnPropertyNames(proto).forEach(addProperty);
|
||||
proto = Object.getPrototypeOf(proto);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
118
frontend/node_modules/chai/lib/chai/utils/index.js
generated
vendored
Normal file
118
frontend/node_modules/chai/lib/chai/utils/index.js
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
/*!
|
||||
* chai
|
||||
* Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
// Dependencies that are used for multiple exports are required here only once
|
||||
import * as checkError from 'check-error';
|
||||
|
||||
// test utility
|
||||
export {test} from './test.js';
|
||||
|
||||
// type utility
|
||||
import {type} from './type-detect.js';
|
||||
export {type};
|
||||
|
||||
// expectTypes utility
|
||||
export {expectTypes} from './expectTypes.js';
|
||||
|
||||
// message utility
|
||||
export {getMessage} from './getMessage.js';
|
||||
|
||||
// actual utility
|
||||
export {getActual} from './getActual.js';
|
||||
|
||||
// Inspect util
|
||||
export {inspect} from './inspect.js';
|
||||
|
||||
// Object Display util
|
||||
export {objDisplay} from './objDisplay.js';
|
||||
|
||||
// Flag utility
|
||||
export {flag} from './flag.js';
|
||||
|
||||
// Flag transferring utility
|
||||
export {transferFlags} from './transferFlags.js';
|
||||
|
||||
// Deep equal utility
|
||||
export {default as eql} from 'deep-eql';
|
||||
|
||||
// Deep path info
|
||||
export {getPathInfo, hasProperty} from 'pathval';
|
||||
|
||||
/**
|
||||
* Function name
|
||||
*
|
||||
* @param {Function} fn
|
||||
* @returns {string}
|
||||
*/
|
||||
export function getName(fn) {
|
||||
return fn.name;
|
||||
}
|
||||
|
||||
// add Property
|
||||
export {addProperty} from './addProperty.js';
|
||||
|
||||
// add Method
|
||||
export {addMethod} from './addMethod.js';
|
||||
|
||||
// overwrite Property
|
||||
export {overwriteProperty} from './overwriteProperty.js';
|
||||
|
||||
// overwrite Method
|
||||
export {overwriteMethod} from './overwriteMethod.js';
|
||||
|
||||
// Add a chainable method
|
||||
export {addChainableMethod} from './addChainableMethod.js';
|
||||
|
||||
// Overwrite chainable method
|
||||
export {overwriteChainableMethod} from './overwriteChainableMethod.js';
|
||||
|
||||
// Compare by inspect method
|
||||
export {compareByInspect} from './compareByInspect.js';
|
||||
|
||||
// Get own enumerable property symbols method
|
||||
export {getOwnEnumerablePropertySymbols} from './getOwnEnumerablePropertySymbols.js';
|
||||
|
||||
// Get own enumerable properties method
|
||||
export {getOwnEnumerableProperties} from './getOwnEnumerableProperties.js';
|
||||
|
||||
// Checks error against a given set of criteria
|
||||
export {checkError};
|
||||
|
||||
// Proxify util
|
||||
export {proxify} from './proxify.js';
|
||||
|
||||
// addLengthGuard util
|
||||
export {addLengthGuard} from './addLengthGuard.js';
|
||||
|
||||
// isProxyEnabled helper
|
||||
export {isProxyEnabled} from './isProxyEnabled.js';
|
||||
|
||||
// isNaN method
|
||||
export {isNaN} from './isNaN.js';
|
||||
|
||||
// getOperator method
|
||||
export {getOperator} from './getOperator.js';
|
||||
|
||||
/**
|
||||
* Determines if an object is a `RegExp`
|
||||
* This is used since `instanceof` will not work in virtual contexts
|
||||
*
|
||||
* @param {*} obj Object to test
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isRegExp(obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object RegExp]';
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if an object is numeric or not
|
||||
*
|
||||
* @param {unknown} obj Object to test
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isNumeric(obj) {
|
||||
return ['Number', 'BigInt'].includes(type(obj));
|
||||
}
|
||||
31
frontend/node_modules/chai/lib/chai/utils/inspect.js
generated
vendored
Normal file
31
frontend/node_modules/chai/lib/chai/utils/inspect.js
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
// This is (almost) directly from Node.js utils
|
||||
// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
|
||||
|
||||
import {inspect as _inspect} from 'loupe';
|
||||
import {config} from '../config.js';
|
||||
|
||||
/**
|
||||
* ### .inspect(obj, [showHidden], [depth], [colors])
|
||||
*
|
||||
* Echoes the value of a value. Tries to print the value out
|
||||
* in the best way possible given the different types.
|
||||
*
|
||||
* @param {object} obj The object to print out.
|
||||
* @param {boolean} showHidden Flag that shows hidden (not enumerable)
|
||||
* properties of objects. Default is false.
|
||||
* @param {number} depth Depth in which to descend in object. Default is 2.
|
||||
* @param {boolean} colors Flag to turn on ANSI escape codes to color the
|
||||
* output. Default is false (no coloring).
|
||||
* @returns {string}
|
||||
* @namespace Utils
|
||||
* @name inspect
|
||||
*/
|
||||
export function inspect(obj, showHidden, depth, colors) {
|
||||
let options = {
|
||||
colors: colors,
|
||||
depth: typeof depth === 'undefined' ? 2 : depth,
|
||||
showHidden: showHidden,
|
||||
truncate: config.truncateThreshold ? config.truncateThreshold : Infinity
|
||||
};
|
||||
return _inspect(obj, options);
|
||||
}
|
||||
7
frontend/node_modules/chai/lib/chai/utils/isNaN.js
generated
vendored
Normal file
7
frontend/node_modules/chai/lib/chai/utils/isNaN.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* Chai - isNaN utility
|
||||
* Copyright(c) 2012-2015 Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
export const isNaN = Number.isNaN;
|
||||
26
frontend/node_modules/chai/lib/chai/utils/isProxyEnabled.js
generated
vendored
Normal file
26
frontend/node_modules/chai/lib/chai/utils/isProxyEnabled.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import {config} from '../config.js';
|
||||
|
||||
/*!
|
||||
* Chai - isProxyEnabled helper
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .isProxyEnabled()
|
||||
*
|
||||
* Helper function to check if Chai's proxy protection feature is enabled. If
|
||||
* proxies are unsupported or disabled via the user's Chai config, then return
|
||||
* false. Otherwise, return true.
|
||||
*
|
||||
* @namespace Utils
|
||||
* @name isProxyEnabled
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isProxyEnabled() {
|
||||
return (
|
||||
config.useProxy &&
|
||||
typeof Proxy !== 'undefined' &&
|
||||
typeof Reflect !== 'undefined'
|
||||
);
|
||||
}
|
||||
47
frontend/node_modules/chai/lib/chai/utils/objDisplay.js
generated
vendored
Normal file
47
frontend/node_modules/chai/lib/chai/utils/objDisplay.js
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
/*!
|
||||
* Chai - flag utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {inspect} from './inspect.js';
|
||||
import {config} from '../config.js';
|
||||
|
||||
/**
|
||||
* ### .objDisplay(object)
|
||||
*
|
||||
* Determines if an object or an array matches
|
||||
* criteria to be inspected in-line for error
|
||||
* messages or should be truncated.
|
||||
*
|
||||
* @param {unknown} obj javascript object to inspect
|
||||
* @returns {string} stringified object
|
||||
* @name objDisplay
|
||||
* @namespace Utils
|
||||
* @public
|
||||
*/
|
||||
export function objDisplay(obj) {
|
||||
let str = inspect(obj),
|
||||
type = Object.prototype.toString.call(obj);
|
||||
|
||||
if (config.truncateThreshold && str.length >= config.truncateThreshold) {
|
||||
if (type === '[object Function]') {
|
||||
return !obj.name || obj.name === ''
|
||||
? '[Function]'
|
||||
: '[Function: ' + obj.name + ']';
|
||||
} else if (type === '[object Array]') {
|
||||
return '[ Array(' + obj.length + ') ]';
|
||||
} else if (type === '[object Object]') {
|
||||
let keys = Object.keys(obj),
|
||||
kstr =
|
||||
keys.length > 2
|
||||
? keys.splice(0, 2).join(', ') + ', ...'
|
||||
: keys.join(', ');
|
||||
return '{ Object (' + kstr + ') }';
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
69
frontend/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
generated
vendored
Normal file
69
frontend/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
/*!
|
||||
* Chai - overwriteChainableMethod utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
|
||||
/**
|
||||
* ### .overwriteChainableMethod(ctx, name, method, chainingBehavior)
|
||||
*
|
||||
* Overwrites an already existing chainable method
|
||||
* and provides access to the previous function or
|
||||
* property. Must return functions to be used for
|
||||
* name.
|
||||
*
|
||||
* utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',
|
||||
* function (_super) {
|
||||
* }
|
||||
* , function (_super) {
|
||||
* }
|
||||
* );
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.overwriteChainableMethod('foo', fn, fn);
|
||||
*
|
||||
* Then can be used as any other assertion.
|
||||
*
|
||||
* expect(myFoo).to.have.lengthOf(3);
|
||||
* expect(myFoo).to.have.lengthOf.above(3);
|
||||
*
|
||||
* @param {object} ctx object whose method / property is to be overwritten
|
||||
* @param {string} name of method / property to overwrite
|
||||
* @param {Function} method function that returns a function to be used for name
|
||||
* @param {Function} chainingBehavior function that returns a function to be used for property
|
||||
* @namespace Utils
|
||||
* @name overwriteChainableMethod
|
||||
* @public
|
||||
*/
|
||||
export function overwriteChainableMethod(ctx, name, method, chainingBehavior) {
|
||||
let chainableBehavior = ctx.__methods[name];
|
||||
|
||||
let _chainingBehavior = chainableBehavior.chainingBehavior;
|
||||
chainableBehavior.chainingBehavior =
|
||||
function overwritingChainableMethodGetter() {
|
||||
let result = chainingBehavior(_chainingBehavior).call(this);
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
};
|
||||
|
||||
let _method = chainableBehavior.method;
|
||||
chainableBehavior.method = function overwritingChainableMethodWrapper() {
|
||||
let result = method(_method).apply(this, arguments);
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
};
|
||||
}
|
||||
90
frontend/node_modules/chai/lib/chai/utils/overwriteMethod.js
generated
vendored
Normal file
90
frontend/node_modules/chai/lib/chai/utils/overwriteMethod.js
generated
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
/*!
|
||||
* Chai - overwriteMethod utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {addLengthGuard} from './addLengthGuard.js';
|
||||
import {flag} from './flag.js';
|
||||
import {proxify} from './proxify.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
|
||||
/**
|
||||
* ### .overwriteMethod(ctx, name, fn)
|
||||
*
|
||||
* Overwrites an already existing method and provides
|
||||
* access to previous function. Must return function
|
||||
* to be used for name.
|
||||
*
|
||||
* utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
|
||||
* return function (str) {
|
||||
* var obj = utils.flag(this, 'object');
|
||||
* if (obj instanceof Foo) {
|
||||
* new chai.Assertion(obj.value).to.equal(str);
|
||||
* } else {
|
||||
* _super.apply(this, arguments);
|
||||
* }
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.overwriteMethod('foo', fn);
|
||||
*
|
||||
* Then can be used as any other assertion.
|
||||
*
|
||||
* expect(myFoo).to.equal('bar');
|
||||
*
|
||||
* @param {object} ctx object whose method is to be overwritten
|
||||
* @param {string} name of method to overwrite
|
||||
* @param {Function} method function that returns a function to be used for name
|
||||
* @namespace Utils
|
||||
* @name overwriteMethod
|
||||
* @public
|
||||
*/
|
||||
export function overwriteMethod(ctx, name, method) {
|
||||
let _method = ctx[name],
|
||||
_super = function () {
|
||||
throw new Error(name + ' is not a function');
|
||||
};
|
||||
|
||||
if (_method && 'function' === typeof _method) _super = _method;
|
||||
|
||||
let overwritingMethodWrapper = function () {
|
||||
// Setting the `ssfi` flag to `overwritingMethodWrapper` causes this
|
||||
// function to be the starting point for removing implementation frames from
|
||||
// the stack trace of a failed assertion.
|
||||
//
|
||||
// However, we only want to use this function as the starting point if the
|
||||
// `lockSsfi` flag isn't set.
|
||||
//
|
||||
// If the `lockSsfi` flag is set, then either this assertion has been
|
||||
// overwritten by another assertion, or this assertion is being invoked from
|
||||
// inside of another assertion. In the first case, the `ssfi` flag has
|
||||
// already been set by the overwriting assertion. In the second case, the
|
||||
// `ssfi` flag has already been set by the outer assertion.
|
||||
if (!flag(this, 'lockSsfi')) {
|
||||
flag(this, 'ssfi', overwritingMethodWrapper);
|
||||
}
|
||||
|
||||
// Setting the `lockSsfi` flag to `true` prevents the overwritten assertion
|
||||
// from changing the `ssfi` flag. By this point, the `ssfi` flag is already
|
||||
// set to the correct starting point for this assertion.
|
||||
let origLockSsfi = flag(this, 'lockSsfi');
|
||||
flag(this, 'lockSsfi', true);
|
||||
let result = method(_super).apply(this, arguments);
|
||||
flag(this, 'lockSsfi', origLockSsfi);
|
||||
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
};
|
||||
|
||||
addLengthGuard(overwritingMethodWrapper, name, false);
|
||||
ctx[name] = proxify(overwritingMethodWrapper, name);
|
||||
}
|
||||
89
frontend/node_modules/chai/lib/chai/utils/overwriteProperty.js
generated
vendored
Normal file
89
frontend/node_modules/chai/lib/chai/utils/overwriteProperty.js
generated
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
/*!
|
||||
* Chai - overwriteProperty utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {Assertion} from '../assertion.js';
|
||||
import {flag} from './flag.js';
|
||||
import {isProxyEnabled} from './isProxyEnabled.js';
|
||||
import {transferFlags} from './transferFlags.js';
|
||||
|
||||
/**
|
||||
* ### .overwriteProperty(ctx, name, fn)
|
||||
*
|
||||
* Overwrites an already existing property getter and provides
|
||||
* access to previous value. Must return function to use as getter.
|
||||
*
|
||||
* utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
|
||||
* return function () {
|
||||
* var obj = utils.flag(this, 'object');
|
||||
* if (obj instanceof Foo) {
|
||||
* new chai.Assertion(obj.name).to.equal('bar');
|
||||
* } else {
|
||||
* _super.call(this);
|
||||
* }
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* Can also be accessed directly from `chai.Assertion`.
|
||||
*
|
||||
* chai.Assertion.overwriteProperty('foo', fn);
|
||||
*
|
||||
* Then can be used as any other assertion.
|
||||
*
|
||||
* expect(myFoo).to.be.ok;
|
||||
*
|
||||
* @param {object} ctx object whose property is to be overwritten
|
||||
* @param {string} name of property to overwrite
|
||||
* @param {Function} getter function that returns a getter function to be used for name
|
||||
* @namespace Utils
|
||||
* @name overwriteProperty
|
||||
* @public
|
||||
*/
|
||||
export function overwriteProperty(ctx, name, getter) {
|
||||
let _get = Object.getOwnPropertyDescriptor(ctx, name),
|
||||
_super = function () {};
|
||||
|
||||
if (_get && 'function' === typeof _get.get) _super = _get.get;
|
||||
|
||||
Object.defineProperty(ctx, name, {
|
||||
get: function overwritingPropertyGetter() {
|
||||
// Setting the `ssfi` flag to `overwritingPropertyGetter` causes this
|
||||
// function to be the starting point for removing implementation frames
|
||||
// from the stack trace of a failed assertion.
|
||||
//
|
||||
// However, we only want to use this function as the starting point if
|
||||
// the `lockSsfi` flag isn't set and proxy protection is disabled.
|
||||
//
|
||||
// If the `lockSsfi` flag is set, then either this assertion has been
|
||||
// overwritten by another assertion, or this assertion is being invoked
|
||||
// from inside of another assertion. In the first case, the `ssfi` flag
|
||||
// has already been set by the overwriting assertion. In the second
|
||||
// case, the `ssfi` flag has already been set by the outer assertion.
|
||||
//
|
||||
// If proxy protection is enabled, then the `ssfi` flag has already been
|
||||
// set by the proxy getter.
|
||||
if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {
|
||||
flag(this, 'ssfi', overwritingPropertyGetter);
|
||||
}
|
||||
|
||||
// Setting the `lockSsfi` flag to `true` prevents the overwritten
|
||||
// assertion from changing the `ssfi` flag. By this point, the `ssfi`
|
||||
// flag is already set to the correct starting point for this assertion.
|
||||
let origLockSsfi = flag(this, 'lockSsfi');
|
||||
flag(this, 'lockSsfi', true);
|
||||
let result = getter(_super).call(this);
|
||||
flag(this, 'lockSsfi', origLockSsfi);
|
||||
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
|
||||
let newAssertion = new Assertion();
|
||||
transferFlags(this, newAssertion);
|
||||
return newAssertion;
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
158
frontend/node_modules/chai/lib/chai/utils/proxify.js
generated
vendored
Normal file
158
frontend/node_modules/chai/lib/chai/utils/proxify.js
generated
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
import {config} from '../config.js';
|
||||
import {flag} from './flag.js';
|
||||
import {getProperties} from './getProperties.js';
|
||||
import {isProxyEnabled} from './isProxyEnabled.js';
|
||||
|
||||
/*!
|
||||
* Chai - proxify utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/** @type {PropertyKey[]} */
|
||||
const builtins = ['__flags', '__methods', '_obj', 'assert'];
|
||||
|
||||
/**
|
||||
* ### .proxify(object)
|
||||
*
|
||||
* Return a proxy of given object that throws an error when a non-existent
|
||||
* property is read. By default, the root cause is assumed to be a misspelled
|
||||
* property, and thus an attempt is made to offer a reasonable suggestion from
|
||||
* the list of existing properties. However, if a nonChainableMethodName is
|
||||
* provided, then the root cause is instead a failure to invoke a non-chainable
|
||||
* method prior to reading the non-existent property.
|
||||
*
|
||||
* If proxies are unsupported or disabled via the user's Chai config, then
|
||||
* return object without modification.
|
||||
*
|
||||
* @namespace Utils
|
||||
* @template {object} T
|
||||
* @param {T} obj
|
||||
* @param {string} [nonChainableMethodName]
|
||||
* @returns {T}
|
||||
*/
|
||||
export function proxify(obj, nonChainableMethodName) {
|
||||
if (!isProxyEnabled()) return obj;
|
||||
|
||||
return new Proxy(obj, {
|
||||
get: function proxyGetter(target, property) {
|
||||
// This check is here because we should not throw errors on Symbol properties
|
||||
// such as `Symbol.toStringTag`.
|
||||
// The values for which an error should be thrown can be configured using
|
||||
// the `config.proxyExcludedKeys` setting.
|
||||
if (
|
||||
typeof property === 'string' &&
|
||||
config.proxyExcludedKeys.indexOf(property) === -1 &&
|
||||
!Reflect.has(target, property)
|
||||
) {
|
||||
// Special message for invalid property access of non-chainable methods.
|
||||
if (nonChainableMethodName) {
|
||||
throw Error(
|
||||
'Invalid Chai property: ' +
|
||||
nonChainableMethodName +
|
||||
'.' +
|
||||
property +
|
||||
'. See docs for proper usage of "' +
|
||||
nonChainableMethodName +
|
||||
'".'
|
||||
);
|
||||
}
|
||||
|
||||
// If the property is reasonably close to an existing Chai property,
|
||||
// suggest that property to the user. Only suggest properties with a
|
||||
// distance less than 4.
|
||||
let suggestion = null;
|
||||
let suggestionDistance = 4;
|
||||
getProperties(target).forEach(function (prop) {
|
||||
if (
|
||||
// we actually mean to check `Object.prototype` here
|
||||
// eslint-disable-next-line no-prototype-builtins
|
||||
!Object.prototype.hasOwnProperty(prop) &&
|
||||
builtins.indexOf(prop) === -1
|
||||
) {
|
||||
let dist = stringDistanceCapped(property, prop, suggestionDistance);
|
||||
if (dist < suggestionDistance) {
|
||||
suggestion = prop;
|
||||
suggestionDistance = dist;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (suggestion !== null) {
|
||||
throw Error(
|
||||
'Invalid Chai property: ' +
|
||||
property +
|
||||
'. Did you mean "' +
|
||||
suggestion +
|
||||
'"?'
|
||||
);
|
||||
} else {
|
||||
throw Error('Invalid Chai property: ' + property);
|
||||
}
|
||||
}
|
||||
|
||||
// Use this proxy getter as the starting point for removing implementation
|
||||
// frames from the stack trace of a failed assertion. For property
|
||||
// assertions, this prevents the proxy getter from showing up in the stack
|
||||
// trace since it's invoked before the property getter. For method and
|
||||
// chainable method assertions, this flag will end up getting changed to
|
||||
// the method wrapper, which is good since this frame will no longer be in
|
||||
// the stack once the method is invoked. Note that Chai builtin assertion
|
||||
// properties such as `__flags` are skipped since this is only meant to
|
||||
// capture the starting point of an assertion. This step is also skipped
|
||||
// if the `lockSsfi` flag is set, thus indicating that this assertion is
|
||||
// being called from within another assertion. In that case, the `ssfi`
|
||||
// flag is already set to the outer assertion's starting point.
|
||||
if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) {
|
||||
flag(target, 'ssfi', proxyGetter);
|
||||
}
|
||||
|
||||
return Reflect.get(target, property);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* # stringDistanceCapped(strA, strB, cap)
|
||||
* Return the Levenshtein distance between two strings, but no more than cap.
|
||||
*
|
||||
* @param {string} strA
|
||||
* @param {string} strB
|
||||
* @param {number} cap
|
||||
* @returns {number} min(string distance between strA and strB, cap)
|
||||
* @private
|
||||
*/
|
||||
function stringDistanceCapped(strA, strB, cap) {
|
||||
if (Math.abs(strA.length - strB.length) >= cap) {
|
||||
return cap;
|
||||
}
|
||||
|
||||
let memo = [];
|
||||
// `memo` is a two-dimensional array containing distances.
|
||||
// memo[i][j] is the distance between strA.slice(0, i) and
|
||||
// strB.slice(0, j).
|
||||
for (let i = 0; i <= strA.length; i++) {
|
||||
memo[i] = Array(strB.length + 1).fill(0);
|
||||
memo[i][0] = i;
|
||||
}
|
||||
for (let j = 0; j < strB.length; j++) {
|
||||
memo[0][j] = j;
|
||||
}
|
||||
|
||||
for (let i = 1; i <= strA.length; i++) {
|
||||
let ch = strA.charCodeAt(i - 1);
|
||||
for (let j = 1; j <= strB.length; j++) {
|
||||
if (Math.abs(i - j) >= cap) {
|
||||
memo[i][j] = cap;
|
||||
continue;
|
||||
}
|
||||
memo[i][j] = Math.min(
|
||||
memo[i - 1][j] + 1,
|
||||
memo[i][j - 1] + 1,
|
||||
memo[i - 1][j - 1] + (ch === strB.charCodeAt(j - 1) ? 0 : 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return memo[strA.length][strB.length];
|
||||
}
|
||||
24
frontend/node_modules/chai/lib/chai/utils/test.js
generated
vendored
Normal file
24
frontend/node_modules/chai/lib/chai/utils/test.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/*!
|
||||
* Chai - test utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
import {flag} from './flag.js';
|
||||
|
||||
/**
|
||||
* ### .test(object, expression)
|
||||
*
|
||||
* Test an object for expression.
|
||||
*
|
||||
* @param {object} obj (constructed Assertion)
|
||||
* @param {unknown} args
|
||||
* @returns {unknown}
|
||||
* @namespace Utils
|
||||
* @name test
|
||||
*/
|
||||
export function test(obj, args) {
|
||||
let negate = flag(obj, 'negate'),
|
||||
expr = args[0];
|
||||
return negate ? !expr : expr;
|
||||
}
|
||||
48
frontend/node_modules/chai/lib/chai/utils/transferFlags.js
generated
vendored
Normal file
48
frontend/node_modules/chai/lib/chai/utils/transferFlags.js
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
/*!
|
||||
* Chai - transferFlags utility
|
||||
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* ### .transferFlags(assertion, object, includeAll = true)
|
||||
*
|
||||
* Transfer all the flags for `assertion` to `object`. If
|
||||
* `includeAll` is set to `false`, then the base Chai
|
||||
* assertion flags (namely `object`, `ssfi`, `lockSsfi`,
|
||||
* and `message`) will not be transferred.
|
||||
*
|
||||
* var newAssertion = new Assertion();
|
||||
* utils.transferFlags(assertion, newAssertion);
|
||||
*
|
||||
* var anotherAssertion = new Assertion(myObj);
|
||||
* utils.transferFlags(assertion, anotherAssertion, false);
|
||||
*
|
||||
* @param {import('../assertion.js').Assertion} assertion the assertion to transfer the flags from
|
||||
* @param {object} object the object to transfer the flags to; usually a new assertion
|
||||
* @param {boolean} includeAll
|
||||
* @namespace Utils
|
||||
* @name transferFlags
|
||||
* @private
|
||||
*/
|
||||
export function transferFlags(assertion, object, includeAll) {
|
||||
let flags = assertion.__flags || (assertion.__flags = Object.create(null));
|
||||
|
||||
if (!object.__flags) {
|
||||
object.__flags = Object.create(null);
|
||||
}
|
||||
|
||||
includeAll = arguments.length === 3 ? includeAll : true;
|
||||
|
||||
for (let flag in flags) {
|
||||
if (
|
||||
includeAll ||
|
||||
(flag !== 'object' &&
|
||||
flag !== 'ssfi' &&
|
||||
flag !== 'lockSsfi' &&
|
||||
flag != 'message')
|
||||
) {
|
||||
object.__flags[flag] = flags[flag];
|
||||
}
|
||||
}
|
||||
}
|
||||
20
frontend/node_modules/chai/lib/chai/utils/type-detect.js
generated
vendored
Normal file
20
frontend/node_modules/chai/lib/chai/utils/type-detect.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* @param {unknown} obj
|
||||
* @returns {string}
|
||||
*/
|
||||
export function type(obj) {
|
||||
if (typeof obj === 'undefined') {
|
||||
return 'undefined';
|
||||
}
|
||||
|
||||
if (obj === null) {
|
||||
return 'null';
|
||||
}
|
||||
|
||||
const stringTag = obj[Symbol.toStringTag];
|
||||
if (typeof stringTag === 'string') {
|
||||
return stringTag;
|
||||
}
|
||||
const type = Object.prototype.toString.call(obj).slice(8, -1);
|
||||
return type;
|
||||
}
|
||||
Reference in New Issue
Block a user