UNPKG

coloquent-test2

Version:

Library for retrieving model objects from a JSON-API, with a fluent syntax inspired by Laravel Eloquent.

118 lines 4.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ClassFilterSpec_1 = require("./ClassFilterSpec"); var QueryParam_1 = require("./QueryParam"); var Query = /** @class */ (function () { function Query(jsonApiType, queriedRelationName) { if (queriedRelationName === void 0) { queriedRelationName = null; } this.jsonApiType = jsonApiType; this.queriedRelationName = queriedRelationName; this.include = []; this.filters = []; this.options = []; this.sort = []; } Query.prototype.addFilterParameters = function (searchParams) { for (var _i = 0, _a = this.filters; _i < _a.length; _i++) { var f = _a[_i]; if (f instanceof ClassFilterSpec_1.ClassFilterSpec) { var ff = f; searchParams.push(new QueryParam_1.QueryParam("filter[" + ff.getClass() + "][" + ff.getAttribute() + "]", ff.getValue())); } else { searchParams.push(new QueryParam_1.QueryParam("filter[" + f.getAttribute() + "]", f.getValue())); } } }; Query.prototype.addIncludeParameters = function (searchParams) { if (this.include.length > 0) { var p = ''; for (var _i = 0, _a = this.include; _i < _a.length; _i++) { var incl = _a[_i]; if (p !== '') { p += ','; } p += incl; } searchParams.push(new QueryParam_1.QueryParam('include', p)); } }; Query.prototype.addOptionsParameters = function (searchParams) { for (var _i = 0, _a = this.options; _i < _a.length; _i++) { var option = _a[_i]; searchParams.push(new QueryParam_1.QueryParam(option.getParameter(), option.getValue())); } }; Query.prototype.addPaginationParameters = function (searchParams) { for (var _i = 0, _a = this.paginationSpec.getPaginationParameters(); _i < _a.length; _i++) { var param = _a[_i]; searchParams.push(new QueryParam_1.QueryParam(param.name, param.value)); } }; Query.prototype.addSortParameters = function (searchParams) { if (this.sort.length > 0) { var p = ''; for (var _i = 0, _a = this.sort; _i < _a.length; _i++) { var sortSpec = _a[_i]; if (p !== '') { p += ','; } if (!sortSpec.getPositiveDirection()) { p += '-'; } p += sortSpec.getAttribute(); } searchParams.push(new QueryParam_1.QueryParam('sort', p)); } }; Query.prototype.toString = function () { var relationToFind = this.queriedRelationName ? '/' + this.queriedRelationName : ''; var idToFind = this.idToFind ? '/' + this.idToFind : ''; var searchParams = []; this.addFilterParameters(searchParams); this.addIncludeParameters(searchParams); this.addOptionsParameters(searchParams); this.addPaginationParameters(searchParams); this.addSortParameters(searchParams); var paramString = ''; for (var _i = 0, searchParams_1 = searchParams; _i < searchParams_1.length; _i++) { var searchParam = searchParams_1[_i]; if (paramString === '') { paramString += '?'; } else { paramString += '&'; } paramString += encodeURIComponent(searchParam.name) + '=' + encodeURIComponent(searchParam.value); } return this.jsonApiType + relationToFind + idToFind + paramString; }; Query.prototype.setIdToFind = function (idToFind) { this.idToFind = idToFind; }; Query.prototype.getPaginationSpec = function () { return this.paginationSpec; }; Query.prototype.setPaginationSpec = function (paginationSpec) { this.paginationSpec = paginationSpec; }; Query.prototype.addInclude = function (includeSpec) { this.include.push(includeSpec); }; Query.prototype.addFilter = function (filter) { this.filters.push(filter); }; Query.prototype.addSort = function (sort) { this.sort.push(sort); }; Query.prototype.addOption = function (option) { this.options.push(option); }; return Query; }()); exports.Query = Query; //# sourceMappingURL=Query.js.map