'use strict'; var array = require('./array-704ca50e.cjs'); var object = require('./object-fecf6a7b.cjs'); /** * Common functions and function call helpers. * * @module function */ /** * Calls all functions in `fs` with args. Only throws after all functions were called. * * @param {Array} fs * @param {Array} args */ const callAll = (fs, args, i = 0) => { try { for (; i < fs.length; i++) { fs[i](...args); } } finally { if (i < fs.length) { callAll(fs, args, i + 1); } } }; const nop = () => {}; /** * @template T * @param {function():T} f * @return {T} */ const apply = f => f(); /** * @template A * * @param {A} a * @return {A} */ const id = a => a; /** * @template T * * @param {T} a * @param {T} b * @return {boolean} */ const equalityStrict = (a, b) => a === b; /** * @template T * * @param {Array|object} a * @param {Array|object} b * @return {boolean} */ const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b)))); /* c8 ignore start */ /** * @param {any} a * @param {any} b * @return {boolean} */ const equalityDeep = (a, b) => { if (a == null || b == null) { return equalityStrict(a, b) } if (a.constructor !== b.constructor) { return false } if (a === b) { return true } switch (a.constructor) { case ArrayBuffer: a = new Uint8Array(a); b = new Uint8Array(b); // eslint-disable-next-line no-fallthrough case Uint8Array: { if (a.byteLength !== b.byteLength) { return false } for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false } } break } case Set: { if (a.size !== b.size) { return false } for (const value of a) { if (!b.has(value)) { return false } } break } case Map: { if (a.size !== b.size) { return false } for (const key of a.keys()) { if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) { return false } } break } case Object: if (object.length(a) !== object.length(b)) { return false } for (const key in a) { if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) { return false } } break case Array: if (a.length !== b.length) { return false } for (let i = 0; i < a.length; i++) { if (!equalityDeep(a[i], b[i])) { return false } } break default: return false } return true }; /** * @template V * @template {V} OPTS * * @param {V} value * @param {Array} options */ // @ts-ignore const isOneOf = (value, options) => options.includes(value); /* c8 ignore stop */ const isArray = array.isArray; /** * @param {any} s * @return {s is String} */ const isString = (s) => s && s.constructor === String; /** * @param {any} n * @return {n is Number} */ const isNumber = n => n != null && n.constructor === Number; /** * @template {abstract new (...args: any) => any} TYPE * @param {any} n * @param {TYPE} T * @return {n is InstanceType} */ const is = (n, T) => n && n.constructor === T; /** * @template {abstract new (...args: any) => any} TYPE * @param {TYPE} T */ const isTemplate = (T) => /** * @param {any} n * @return {n is InstanceType} **/ n => n && n.constructor === T; var _function = /*#__PURE__*/Object.freeze({ __proto__: null, callAll: callAll, nop: nop, apply: apply, id: id, equalityStrict: equalityStrict, equalityFlat: equalityFlat, equalityDeep: equalityDeep, isOneOf: isOneOf, isArray: isArray, isString: isString, isNumber: isNumber, is: is, isTemplate: isTemplate }); exports._function = _function; exports.apply = apply; exports.callAll = callAll; exports.equalityDeep = equalityDeep; exports.equalityFlat = equalityFlat; exports.equalityStrict = equalityStrict; exports.id = id; exports.is = is; exports.isArray = isArray; exports.isNumber = isNumber; exports.isOneOf = isOneOf; exports.isString = isString; exports.isTemplate = isTemplate; exports.nop = nop; //# sourceMappingURL=function-314fdc56.cjs.map