UNPKG

@gooddata/gooddata-js

Version:
63 lines (62 loc) 2.88 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var json_stable_stringify_1 = __importDefault(require("json-stable-stringify")); var execute_afm_1 = require("../../execution/execute-afm"); var DataSource = /** @class */ (function () { function DataSource(execFactory, afm, fingerprint, responseFactory, resultFactory) { this.execFactory = execFactory; this.afm = afm; this.fingerprint = fingerprint; this.responseFactory = responseFactory; this.resultFactory = resultFactory; this.executionPromises = {}; } DataSource.prototype.getData = function (resultSpec) { return this.execFactory(resultSpec); }; DataSource.prototype.getPage = function (resultSpec, limit, offset) { var _this = this; if (limit === void 0) { limit = []; } if (offset === void 0) { offset = []; } var resultSpecFingerprint = json_stable_stringify_1.default(resultSpec); if (!this.responseFactory) { throw new Error("Missing responseFactory!"); } if (!this.executionPromises[resultSpecFingerprint]) { this.executionPromises[resultSpecFingerprint] = this.responseFactory(resultSpec); } return this.executionPromises[resultSpecFingerprint].then(function (executionResponse) { if (!_this.resultFactory) { throw new Error("Missing resultFactory!"); } var safeOffset = offset.map(function (offsetItem) { if (offsetItem === void 0) { offsetItem = 0; } return offsetItem; }); var safeLimit = limit.map(function (limitItem) { if (limitItem === void 0) { limitItem = execute_afm_1.DEFAULT_LIMIT; } var safeLimitItem = Math.min(limitItem, execute_afm_1.DEFAULT_LIMIT); if (safeLimitItem < limitItem) { // tslint:disable-next-line:no-console console.warn("The maximum limit per page is " + execute_afm_1.DEFAULT_LIMIT); } return safeLimitItem; }); return _this.resultFactory(executionResponse.links.executionResult, safeLimit, safeOffset).then(function (executionResult) { return ({ executionResult: executionResult, executionResponse: executionResponse, }); }); }); }; DataSource.prototype.getAfm = function () { return this.afm; }; DataSource.prototype.getFingerprint = function () { return this.fingerprint ? this.fingerprint : json_stable_stringify_1.default(this.afm); }; return DataSource; }()); exports.DataSource = DataSource;