Spaces:
Sleeping
Sleeping
| /*! | |
| Copyright 2013 Lovell Fuller and others. | |
| SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| /** | |
| * Is this value defined and not null? | |
| * @private | |
| */ | |
| const defined = (val) => typeof val !== 'undefined' && val !== null; | |
| /** | |
| * Is this value an object? | |
| * @private | |
| */ | |
| const object = (val) => typeof val === 'object'; | |
| /** | |
| * Is this value a plain object? | |
| * @private | |
| */ | |
| const plainObject = (val) => Object.prototype.toString.call(val) === '[object Object]'; | |
| /** | |
| * Is this value a function? | |
| * @private | |
| */ | |
| const fn = (val) => typeof val === 'function'; | |
| /** | |
| * Is this value a boolean? | |
| * @private | |
| */ | |
| const bool = (val) => typeof val === 'boolean'; | |
| /** | |
| * Is this value a Buffer object? | |
| * @private | |
| */ | |
| const buffer = (val) => val instanceof Buffer; | |
| /** | |
| * Is this value a typed array object?. E.g. Uint8Array or Uint8ClampedArray? | |
| * @private | |
| */ | |
| const typedArray = (val) => { | |
| if (defined(val)) { | |
| switch (val.constructor) { | |
| case Uint8Array: | |
| case Uint8ClampedArray: | |
| case Int8Array: | |
| case Uint16Array: | |
| case Int16Array: | |
| case Uint32Array: | |
| case Int32Array: | |
| case Float32Array: | |
| case Float64Array: | |
| return true; | |
| } | |
| } | |
| return false; | |
| }; | |
| /** | |
| * Is this value an ArrayBuffer object? | |
| * @private | |
| */ | |
| const arrayBuffer = (val) => val instanceof ArrayBuffer; | |
| /** | |
| * Is this value a non-empty string? | |
| * @private | |
| */ | |
| const string = (val) => typeof val === 'string' && val.length > 0; | |
| /** | |
| * Is this value a real number? | |
| * @private | |
| */ | |
| const number = (val) => typeof val === 'number' && !Number.isNaN(val); | |
| /** | |
| * Is this value an integer? | |
| * @private | |
| */ | |
| const integer = (val) => Number.isInteger(val); | |
| /** | |
| * Is this value within an inclusive given range? | |
| * @private | |
| */ | |
| const inRange = (val, min, max) => val >= min && val <= max; | |
| /** | |
| * Is this value within the elements of an array? | |
| * @private | |
| */ | |
| const inArray = (val, list) => list.includes(val); | |
| /** | |
| * Create an Error with a message relating to an invalid parameter. | |
| * | |
| * @param {string} name - parameter name. | |
| * @param {string} expected - description of the type/value/range expected. | |
| * @param {*} actual - the value received. | |
| * @returns {Error} Containing the formatted message. | |
| * @private | |
| */ | |
| const invalidParameterError = (name, expected, actual) => new Error( | |
| `Expected ${expected} for ${name} but received ${actual} of type ${typeof actual}` | |
| ); | |
| /** | |
| * Ensures an Error from C++ contains a JS stack. | |
| * | |
| * @param {Error} native - Error with message from C++. | |
| * @param {Error} context - Error with stack from JS. | |
| * @returns {Error} Error with message and stack. | |
| * @private | |
| */ | |
| const nativeError = (native, context) => { | |
| context.message = native.message; | |
| return context; | |
| }; | |
| module.exports = { | |
| defined, | |
| object, | |
| plainObject, | |
| fn, | |
| bool, | |
| buffer, | |
| typedArray, | |
| arrayBuffer, | |
| string, | |
| number, | |
| integer, | |
| inRange, | |
| inArray, | |
| invalidParameterError, | |
| nativeError | |
| }; | |