UNPKG

@stormzx/sqlbuilder

Version:

A simple sql builder.

63 lines (45 loc) 1.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = _interopRequireDefault(require("lodash")); var _fragment = _interopRequireDefault(require("./fragment")); var _utils = require("../utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const NATURAL_NUMBER_PATTERN = /^\d+$/; class LimitFragment extends _fragment.default { #rows = null; #offset = 0; get priority() { return 800; } get sql() { return `limit ${this.#offset}, ${this.#rows}`; } get countSql() { return ''; } limit(offset, rows) { if (_lodash.default.isObject(offset)) { let pagination = offset; let page = pagination.page ?? 1; let size = (pagination.size || pagination.pageSize) ?? 10; if (!NATURAL_NUMBER_PATTERN.test(page) || !NATURAL_NUMBER_PATTERN.test(size)) { throw new Error('Invalid page or size'); } return this.limit((page - 1) * size, size); } if (rows == undefined) { rows = offset; offset = 0; } if (!NATURAL_NUMBER_PATTERN.test(offset) || !NATURAL_NUMBER_PATTERN.test(rows)) { throw new Error('offset and rows must be natural number'); } this.#rows = parseInt(rows); this.#offset = parseInt(offset); return this; } } exports.default = LimitFragment;