UNPKG

refql

Version:

A Node.js and Deno library for composing and running SQL queries.

147 lines (146 loc) 4.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.nullable = nullable; exports.eq = eq; exports.isNull = isNull; exports.like = like; exports.whereIn = whereIn; exports.ord = ord; exports.dir = dir; exports.omit = omit; exports.logic = logic; const Eq_1 = __importDefault(require("../RQLTag/Eq")); const In_1 = __importDefault(require("../RQLTag/In")); const IsNull_1 = __importDefault(require("../RQLTag/IsNull")); const Like_1 = __importDefault(require("../RQLTag/Like")); const Logic_1 = __importDefault(require("../RQLTag/Logic")); const Ord_1 = __importDefault(require("../RQLTag/Ord")); const OrderBy_1 = __importDefault(require("../RQLTag/OrderBy")); const RQLNode_1 = require("../RQLTag/RQLNode"); const Raw_1 = __importDefault(require("../SQLTag/Raw")); const consts_1 = require("../common/consts"); const copyObj_1 = __importDefault(require("../common/copyObj")); const PropType_1 = require("./PropType"); const type = "refql/Prop"; const prototype = Object.assign({}, RQLNode_1.rqlNodePrototype, PropType_1.propTypePrototype, { constructor: Prop, [consts_1.refqlType]: type, arrayOf: nullable, nullable, eq: eq(), notEq: eq(true), isNull: isNull(), notIsNull: isNull(true), like: like(true), notLike: like(true, true), iLike: like(), notILike: like(false, true), in: whereIn(), notIn: whereIn(true), gt: ord(">"), gte: ord(">="), lt: ord("<"), lte: ord("<="), asc: dir(), desc: dir(true), omit, hasDefault, or: logic("or"), and: logic("and"), interpret }); function Prop(as, col) { let prop = Object.create(prototype); prop.as = as; prop.col = col; prop.operations = []; prop.isOmitted = false; prop.hasDefaultValue = false; return prop; } function nullable() { return (0, copyObj_1.default)(this); } function eq(notEq) { return function (run) { const prop = (0, copyObj_1.default)(this); const eqOp = (0, Eq_1.default)(run, notEq); prop.operations = prop.operations.concat(eqOp); return prop; }; } function isNull(notIsNull) { return function () { const prop = (0, copyObj_1.default)(this); const nullOp = (0, IsNull_1.default)(notIsNull); prop.operations = prop.operations.concat(nullOp); return prop; }; } function like(caseSensitive, notLike) { return function (run) { const prop = (0, copyObj_1.default)(this); const likeOp = (0, Like_1.default)(run, caseSensitive, notLike); prop.operations = prop.operations.concat(likeOp); return prop; }; } function whereIn(notIn) { return function (run) { const prop = (0, copyObj_1.default)(this); const inOp = (0, In_1.default)(run, notIn); prop.operations = prop.operations.concat(inOp); return prop; }; } function ord(operator) { return function (run) { const prop = (0, copyObj_1.default)(this); const ordOp = (0, Ord_1.default)(run, operator); prop.operations = prop.operations.concat(ordOp); return prop; }; } function dir(descending) { return function () { const prop = (0, copyObj_1.default)(this); const orderByOp = (0, OrderBy_1.default)(descending); prop.operations = prop.operations.concat(orderByOp); return prop; }; } function omit() { let prop = (0, copyObj_1.default)(this); prop.isOmitted = true; return prop; } function logic(operator) { return function (run) { if (this.operations.length === 0) { throw new Error(`"${operator}" called on Prop without operations`); } const prop = (0, copyObj_1.default)(this); const logicOp = (0, Logic_1.default)(run, operator); prop.operations = prop.operations.concat(logicOp); return prop; }; } function hasDefault() { let prop = (0, copyObj_1.default)(this); prop.hasDefaultValue = true; return prop; } function interpret() { const { tableName, col, as } = this; if (tableName) { return (0, Raw_1.default)(`${tableName}.${col || as}`); } return (0, Raw_1.default)(col || as); } Prop.isProp = function (x) { return x != null && x[consts_1.refqlType] === type; }; exports.default = Prop;