UNPKG

pip-services3-commons-nodex

Version:

Portable abstractions and patterns for Pip.Services in Node.js / ES2017

97 lines 3.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenizedPagingParams = void 0; /** @module data */ const AnyValueMap_1 = require("./AnyValueMap"); /** * Data transfer object to pass tokenized paging parameters for queries. * It can be used for complex paging scenarios, like paging across multiple databases * where the previous state is encoded in a token. The token is usually retrieved from * the previous response. The initial request shall go with token == <code>null</code> * * The page is defined by two parameters: * - the <code>token</code> token that defines a starting point for the search. * - the <code>take</code> parameter sets how many items to return in a page. * - additionally, the optional <code>total</code> parameter tells to return total number of items in the query. * * Remember: not all implementations support the <code>total</code> parameter * because its generation may lead to severe performance implications. * * ### Example ### * * let filter = FilterParams.fromTuples("type", "Type1"); * let paging = new TokenizedPagingParams(null, 100); * * myDataClient.getDataByFilter(filter, paging, (err, page) => {...}); */ class TokenizedPagingParams { /** * Creates a new instance and sets its values. * * @param token token that defines a starting point for the search. * @param take the number of items to return. * @param total true to return the total number of items. */ constructor(token = null, take = null, total = null) { this.token = token; this.take = take; this.total = !!total; // This is for correctly using PagingParams with gRPC. gRPC defaults to 0 when take is null, // so we have to set it back to null if we get 0 in the constructor. if (this.take == 0) { this.take = null; } } /** * Gets the number of items to return in a page. * * @param maxTake the maximum number of items to return. * @returns the number of items to return. */ getTake(maxTake) { if (this.take == null) return maxTake; if (this.take < 0) return 0; if (this.take > maxTake) return maxTake; return this.take; } /** * Converts specified value into TokenizedPagingParams. * * @param value value to be converted * @returns a newly created PagingParams. */ static fromValue(value) { if (value instanceof TokenizedPagingParams) { return value; } let map = AnyValueMap_1.AnyValueMap.fromValue(value); return TokenizedPagingParams.fromMap(map); } /** * Creates a new TokenizedPagingParams from a list of key-value pairs called tuples. * * @param tuples a list of values where odd elements are keys and the following even elements are values * @returns a newly created TokenizedPagingParams. */ static fromTuples(...tuples) { let map = AnyValueMap_1.AnyValueMap.fromTuplesArray(tuples); return TokenizedPagingParams.fromMap(map); } /** * Creates a new TokenizedPagingParams and sets it parameters from the specified map * * @param map a AnyValueMap or StringValueMap to initialize this TokenizedPagingParams * @returns a newly created PagingParams. */ static fromMap(map) { let token = map.getAsNullableString("token"); let take = map.getAsNullableInteger("take"); let total = map.getAsBooleanWithDefault("total", false); return new TokenizedPagingParams(token, take, total); } } exports.TokenizedPagingParams = TokenizedPagingParams; //# sourceMappingURL=TokenizedPagingParams.js.map