UNPKG

io.parrots

Version:

Parrots.io App

127 lines (126 loc) 17.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Headers, RequestOptions, RequestMethod } from '@angular/http'; import { AbstractServerResource } from 'com.phloxui'; const /** @type {?} */ BASE_PATH = "./json"; export class JSONResource extends AbstractServerResource { /** * @param {?} connectionMgr * @param {?=} basePath */ constructor(connectionMgr, basePath) { super(connectionMgr); this.basePath = BASE_PATH; this.schemaCached = {}; this.defaultHeaders = new Headers(); if (basePath !== null && basePath !== undefined && basePath !== '') { this.basePath = basePath; } } /** * @param {?} className * @return {?} */ getSchema(className) { if (className === null || typeof className !== 'string' || className === '') { return Promise.resolve(null); } if (this.schemaCached[className] !== null && typeof this.schemaCached[className] !== 'undefined') { return Promise.resolve(this.schemaCached[className]); } return new Promise((resolve, reject) => { // cache only default load let /** @type {?} */ path = this.basePath + "/" + className + "/schema"; let /** @type {?} */ headers = new Headers(this.defaultHeaders.toJSON()); let /** @type {?} */ requestOptions = new RequestOptions({ method: RequestMethod.Get, headers: headers }); let /** @type {?} */ prom = this.connectionMgr.getWithHttpInfo(path, requestOptions); prom.then((response) => { let /** @type {?} */ jsonSchemaResult = null; if (response !== null && typeof response !== 'undefined') { jsonSchemaResult = response.json(); if (jsonSchemaResult !== null && typeof jsonSchemaResult !== 'undefined') { // cache result this.schemaCached[className] = jsonSchemaResult; } } resolve(jsonSchemaResult); }, (errorResult) => { reject(errorResult); }); }).catch((error) => { return Promise.reject(error); }); } /** * @param {?} className * @param {?} ignoreNull * @param {?} ignoreEmpty * @param {?} ignorePropRegex * @param {?} includePropsFields * @return {?} */ getSchemaWithConfigs(className, ignoreNull, ignoreEmpty, ignorePropRegex, includePropsFields) { if (className === null || typeof className !== 'string' || className === '') { return Promise.resolve(null); } return new Promise((resolve, reject) => { // cache only default load let /** @type {?} */ path = this.basePath + "/" + className + "/schema"; let /** @type {?} */ pathParam = ""; if (ignoreNull !== null && typeof ignoreNull !== 'undefined') { pathParam += "ignoreNull=" + (ignoreNull ? "true" : "false") + "&"; } if (ignoreEmpty !== null && typeof ignoreEmpty !== 'undefined') { pathParam += "ignoreEmpty=" + (ignoreEmpty ? "true" : "false") + "&"; } if (ignorePropRegex !== null && typeof ignorePropRegex !== 'undefined' && ignorePropRegex !== '') { pathParam += "ignorePropRegex=" + ignorePropRegex + "&"; } if (includePropsFields !== null && typeof includePropsFields !== 'undefined') { let /** @type {?} */ nameAppendStmt = ""; for (let /** @type {?} */ name of includePropsFields) { nameAppendStmt += name + ","; } if (nameAppendStmt !== '') { nameAppendStmt = nameAppendStmt.slice(0, nameAppendStmt.length - 1); pathParam += "includePropsFields=" + nameAppendStmt + "&"; } } if (pathParam !== "") { pathParam = pathParam.slice(0, pathParam.length - 1); path += "?" + pathParam; } let /** @type {?} */ headers = new Headers(this.defaultHeaders.toJSON()); let /** @type {?} */ requestOptions = new RequestOptions({ method: RequestMethod.Get, headers: headers }); let /** @type {?} */ prom = this.connectionMgr.getWithHttpInfo(path, requestOptions); prom.then((response) => { let /** @type {?} */ jsonSchemaResult = null; if (response !== null && typeof response !== 'undefined') { jsonSchemaResult = response.json(); } resolve(jsonSchemaResult); }, (errorResult) => { reject(errorResult); }); }).catch((error) => { return Promise.reject(error); }); } } function JSONResource_tsickle_Closure_declarations() { /** @type {?} */ JSONResource.prototype.schemaCached; /** @type {?} */ JSONResource.prototype.basePath; /** @type {?} */ JSONResource.prototype.defaultHeaders; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSlNPTlJlc291cmNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaW8ucGFycm90cy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZS9yZXNvdXJjZS9KU09OUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBa0IsT0FBTyxFQUFFLGNBQWMsRUFBNEQsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUtyRCx1QkFBTSxTQUFTLEdBQVcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sbUJBQW9CLFNBQVEsc0JBQXNCOzs7OztJQU10RCxZQUFZLGFBQWlDLEVBQUUsUUFBaUI7UUFDOUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUpGLFNBQVM7UUFNNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXBDLEVBQUUsQ0FBQSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUEsQ0FBQztZQUNqRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUMxQjtLQUNGOzs7OztJQUVNLFNBQVMsQ0FBQyxTQUFpQjtRQUNoQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUVELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxXQUFXLENBQUMs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LE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztZQUVILHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMxQixxQkFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7Z0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDekQsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwQztnQkFFRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMzQixFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNyQixDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUIsQ0FBQyxDQUFDOztDQUVOIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cCwgUmVzcG9uc2UsIEhlYWRlcnMsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9uc0FyZ3MsIFVSTFNlYXJjaFBhcmFtcywgUmVzcG9uc2VDb250ZW50VHlwZSwgUmVxdWVzdE1ldGhvZCB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1hbmFnZXIgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBKc29uU2NoZW1hIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgQWJzdHJhY3RTZXJ2ZXJSZXNvdXJjZSB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IElDb25uZWN0aW9uTWFuYWdlciB9IGZyb20gJ2NvbS5waGxveHVpJztcblxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XG5cbmNvbnN0IEJBU0VfUEFUSDogc3RyaW5nID0gXCIuL2pzb25cIjtcblxuZXhwb3J0IGNsYXNzIEpTT05SZXNvdXJjZSBleHRlbmRzIEFic3RyYWN0U2VydmVyUmVzb3VyY2Uge1xuXG4gIHByaXZhdGUgc2NoZW1hQ2FjaGVkOiBhbnk7IC8vIE1hcDxTdHJpbmdbY2xhc3NOYW1lXSwgSnNvblNjaGVtYT5cbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gQkFTRV9QQVRIO1xuICBwdWJsaWMgZGVmYXVsdEhlYWRlcnM6IEhlYWRlcnM7XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbk1ncjogSUNvbm5lY3Rpb25NYW5hZ2VyLCBiYXNlUGF0aD86IHN0cmluZykge1xuICAgIHN1cGVyKGNvbm5lY3Rpb25NZ3IpO1xuXG4gICAgdGhpcy5zY2hlbWFDYWNoZWQgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRIZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcblxuICAgIGlmKGJhc2VQYXRoICE9PSBudWxsICYmIGJhc2VQYXRoICE9PSB1bmRlZmluZWQgJiYgYmFzZVBhdGggIT09ICcnKXtcbiAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2NoZW1hKGNsYXNzTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmIChjbGFzc05hbWUgPT09IG51bGwgfHwgdHlwZW9mIGNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgY2xhc3NOYW1lID09PSAnJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zY2hlbWFDYWNoZWRbY2xhc3NOYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBjYWNoZSBvbmx5IGRlZmF1bHQgbG9hZFxuICAgICAgbGV0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgXCIvXCIgKyBjbGFzc05hbWUgKyBcIi9zY2hlbWFcIjtcblxuICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh0aGlzLmRlZmF1bHRIZWFkZXJzLnRvSlNPTigpKTtcblxuICAgICAgbGV0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9uc0FyZ3MgPSBuZXcgUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICBtZXRob2Q6IFJlcXVlc3RNZXRob2QuR2V0LFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXG4gICAgICB9KTtcblxuICAgICAgbGV0IHByb20gPSB0aGlzLmNvbm5lY3Rpb25NZ3IuZ2V0V2l0aEh0dHBJbmZvKHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgIHByb20udGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBsZXQganNvblNjaGVtYVJlc3VsdDogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSBudWxsICYmIHR5cGVvZiByZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBqc29uU2NoZW1hUmVzdWx0ID0gcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICAgICAgaWYgKGpzb25TY2hlbWFSZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIGpzb25TY2hlbWFSZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBjYWNoZSByZXN1bHRcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ2FjaGVkW2NsYXNzTmFtZV0gPSBqc29uU2NoZW1hUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoanNvblNjaGVtYVJlc3VsdCk7XG4gICAgICB9LCAoZXJyb3JSZXN1bHQpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTY2hlbWFXaXRoQ29uZmlncyhjbGFzc05hbWU6IHN0cmluZywgaWdub3JlTnVsbDogYm9vbGVhbiwgaWdub3JlRW1wdHk6IGJvb2xlYW4sIGlnbm9yZVByb3BSZWdleDogc3RyaW5nLCBpbmNsdWRlUHJvcHNGaWVsZHM6IFN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmIChjbGFzc05hbWUgPT09IG51bGwgfHwgdHlwZW9mIGNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgY2xhc3NOYW1lID09PSAnJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8UmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNhY2hlIG9ubHkgZGVmYXVsdCBsb2FkXG4gICAgICBsZXQgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyBcIi9cIiArIGNsYXNzTmFtZSArIFwiL3NjaGVtYVwiO1xuXG4gICAgICBsZXQgcGF0aFBhcmFtID0gXCJcIjtcbiAgICAgIGlmIChpZ25vcmVOdWxsICE9PSBudWxsICYmIHR5cGVvZiBpZ25vcmVOdWxsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwYXRoUGFyYW0gKz0gXCJpZ25vcmVOdWxsPVwiICsgKGlnbm9yZU51bGwgPyBcInRydWVcIiA6IFwiZmFsc2VcIikgKyBcIiZcIjtcbiAgICAgIH1cbiAgICAgIGlmIChpZ25vcmVFbXB0eSAhPT0gbnVsbCAmJiB0eXBlb2YgaWdub3JlRW1wdHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhdGhQYXJhbSArPSBcImlnbm9yZUVtcHR5PVwiICsgKGlnbm9yZUVtcHR5ID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpICsgXCImXCI7XG4gICAgICB9XG4gICAgICBpZiAoaWdub3JlUHJvcFJlZ2V4ICE9PSBudWxsICYmIHR5cGVvZiBpZ25vcmVQcm9wUmVnZXggIT09ICd1bmRlZmluZWQnICYmIGlnbm9yZVByb3BSZWdleCAhPT0gJycpIHtcbiAgICAgICAgcGF0aFBhcmFtICs9IFwiaWdub3JlUHJvcFJlZ2V4PVwiICsgaWdub3JlUHJvcFJlZ2V4ICsgXCImXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZVByb3BzRmllbGRzICE9PSBudWxsICYmIHR5cGVvZiBpbmNsdWRlUHJvcHNGaWVsZHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBuYW1lQXBwZW5kU3RtdCA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgaW5jbHVkZVByb3BzRmllbGRzKSB7XG4gICAgICAgICAgbmFtZUFwcGVuZFN0bXQgKz0gbmFtZSArIFwiLFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWVBcHBlbmRTdG10ICE9PSAnJykge1xuICAgICAgICAgIG5hbWVBcHBlbmRTdG10ID0gbmFtZUFwcGVuZFN0bXQuc2xpY2UoMCwgbmFtZUFwcGVuZFN0bXQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgcGF0aFBhcmFtICs9IFwiaW5jbHVkZVByb3BzRmllbGRzPVwiICsgbmFtZUFwcGVuZFN0bXQgKyBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFBhcmFtICE9PSBcIlwiKSB7XG4gICAgICAgIHBhdGhQYXJhbSA9IHBhdGhQYXJhbS5zbGljZSgwLCBwYXRoUGFyYW0ubGVuZ3RoIC0gMSk7XG4gICAgICAgIHBhdGggKz0gXCI/XCIgKyBwYXRoUGFyYW07XG4gICAgICB9XG5cbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnModGhpcy5kZWZhdWx0SGVhZGVycy50b0pTT04oKSk7XG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zQXJncyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgIG1ldGhvZDogUmVxdWVzdE1ldGhvZC5HZXQsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcHJvbSA9IHRoaXMuY29ubmVjdGlvbk1nci5nZXRXaXRoSHR0cEluZm8ocGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgcHJvbS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGxldCBqc29uU2NoZW1hUmVzdWx0OiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgdHlwZW9mIHJlc3BvbnNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpzb25TY2hlbWFSZXN1bHQgPSByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGpzb25TY2hlbWFSZXN1bHQpO1xuICAgICAgfSwgKGVycm9yUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvclJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==