UNPKG

@jmespath-community/jmespath

Version:

Typescript implementation of the JMESPath Community specification

144 lines 4.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mod = exports.div = exports.divide = exports.mul = exports.sub = exports.add = exports.ensureNumbers = exports.ensurePositiveInteger = exports.ensureInteger = exports.isAlphaNum = exports.isNum = exports.isAlpha = exports.isFalse = exports.strictDeepEqual = exports.isObject = void 0; const isObject = (obj) => { return obj !== null && Object.prototype.toString.call(obj) === '[object Object]'; }; exports.isObject = isObject; const strictDeepEqual = (first, second) => { if (first === second) { return true; } if (typeof first !== typeof second) { return false; } if (Array.isArray(first) && Array.isArray(second)) { if (first.length !== second.length) { return false; } for (let i = 0; i < first.length; i += 1) { if (!(0, exports.strictDeepEqual)(first[i], second[i])) { return false; } } return true; } if ((0, exports.isObject)(first) && (0, exports.isObject)(second)) { const firstEntries = Object.entries(first); const secondKeys = new Set(Object.keys(second)); if (firstEntries.length !== secondKeys.size) { return false; } for (const [key, value] of firstEntries) { if (!(0, exports.strictDeepEqual)(value, second[key])) { return false; } secondKeys.delete(key); } return secondKeys.size === 0; } return false; }; exports.strictDeepEqual = strictDeepEqual; const isFalse = (obj) => { if (typeof obj === 'object') { if (obj === null) { return true; } if (Array.isArray(obj)) { return obj.length === 0; } // eslint-disable-next-line @typescript-eslint/naming-convention for (const _key in obj) { return false; } return true; } return !(typeof obj === 'number' || obj); }; exports.isFalse = isFalse; const isAlpha = (ch) => { // tslint:disable-next-line: strict-comparisons return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_'; }; exports.isAlpha = isAlpha; const isNum = (ch) => { // tslint:disable-next-line: strict-comparisons return (ch >= '0' && ch <= '9') || ch === '-'; }; exports.isNum = isNum; const isAlphaNum = (ch) => { // tslint:disable-next-line: strict-comparisons return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || ch === '_'; }; exports.isAlphaNum = isAlphaNum; const ensureInteger = (value) => { if (!(typeof value === 'number') || Math.floor(value) !== value) { throw new Error('invalid-value: expecting an integer.'); } return value; }; exports.ensureInteger = ensureInteger; const ensurePositiveInteger = (value) => { if (!(typeof value === 'number') || value < 0 || Math.floor(value) !== value) { throw new Error('invalid-value: expecting a non-negative integer.'); } return value; }; exports.ensurePositiveInteger = ensurePositiveInteger; const ensureNumbers = (...operands) => { for (let i = 0; i < operands.length; i++) { if (operands[i] === null || operands[i] === undefined) { throw new Error('not-a-number: undefined'); } if (typeof operands[i] !== 'number') { throw new Error('not-a-number'); } } }; exports.ensureNumbers = ensureNumbers; const notZero = (n) => { n = +n; // coerce to number if (!n) { // matches -0, +0, NaN throw new Error('not-a-number: divide by zero'); } return n; }; const add = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = left + right; return result; }; exports.add = add; const sub = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = left - right; return result; }; exports.sub = sub; const mul = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = left * right; return result; }; exports.mul = mul; const divide = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = left / notZero(right); return result; }; exports.divide = divide; const div = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = Math.floor(left / notZero(right)); return result; }; exports.div = div; const mod = (left, right) => { (0, exports.ensureNumbers)(left, right); const result = left % right; return result; }; exports.mod = mod; //# sourceMappingURL=index.js.map