UNPKG

sequelize

Version:

Sequelize is a promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server, Amazon Redshift and Snowflake’s Data Cloud. It features solid transaction support, relations, eager and lazy loading, read replication and more.

75 lines (74 loc) 2.14 kB
"use strict"; const _ = require("lodash"); function stringifyRangeBound(bound) { if (bound === null) { return ""; } if (bound === Infinity || bound === -Infinity) { return bound.toString().toLowerCase(); } return JSON.stringify(bound); } function parseRangeBound(bound, parseType) { if (!bound) { return null; } if (bound === "infinity") { return Infinity; } if (bound === "-infinity") { return -Infinity; } return parseType(bound); } function stringify(data) { if (data === null) return null; if (!Array.isArray(data)) throw new Error("range must be an array"); if (!data.length) return "empty"; if (data.length !== 2) throw new Error("range array length must be 0 (empty) or 2 (lower and upper bounds)"); if (Object.prototype.hasOwnProperty.call(data, "inclusive")) { if (data.inclusive === false) data.inclusive = [false, false]; else if (!data.inclusive) data.inclusive = [true, false]; else if (data.inclusive === true) data.inclusive = [true, true]; } else { data.inclusive = [true, false]; } _.each(data, (value, index) => { if (_.isObject(value)) { if (Object.prototype.hasOwnProperty.call(value, "inclusive")) data.inclusive[index] = !!value.inclusive; if (Object.prototype.hasOwnProperty.call(value, "value")) data[index] = value.value; } }); const lowerBound = stringifyRangeBound(data[0]); const upperBound = stringifyRangeBound(data[1]); return `${(data.inclusive[0] ? "[" : "(") + lowerBound},${upperBound}${data.inclusive[1] ? "]" : ")"}`; } exports.stringify = stringify; function parse(value, parser) { if (value === null) return null; if (value === "empty") { return []; } let result = value.substring(1, value.length - 1).split(",", 2); if (result.length !== 2) return value; result = result.map((item, index) => { return { value: parseRangeBound(item, parser), inclusive: index === 0 ? value[0] === "[" : value[value.length - 1] === "]" }; }); return result; } exports.parse = parse; //# sourceMappingURL=range.js.map