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
JavaScript
;
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