UNPKG

@mgrcto/angular-odata-v401

Version:

Odata Library for Angular made with Angular CLI

90 lines 16.4 kB
import { throwError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { DeleteOperation, GetOperation, PatchOperation, PostOperation, PutOperation } from './angularODataOperation'; import { ODataQuery } from './angularODataQuery'; import { ODataUtils } from './angularODataUtils'; export class ODataService { constructor(_typeName, _http, config) { this._typeName = _typeName; this._http = _http; this.config = config; this._entitiesUri = config.getEntitiesUri(_typeName); } get TypeName() { return this._typeName; } Get(key) { return new GetOperation(this._typeName, this.config, this._http, key); } Post(entity) { return new PostOperation(this._typeName, this.config, this._http, entity); } Patch(entity, key) { return new PatchOperation(this._typeName, this.config, this._http, key, entity); } Put(entity, key) { return new PutOperation(this._typeName, this.config, this._http, key, entity); } Delete(key) { return new DeleteOperation(this._typeName, this.config, this._http, key); } CustomAction(key, actionName, postdata) { const body = postdata ? JSON.stringify(postdata) : null; return this._http.post(`${this.getEntityUri(key)}/${actionName}`, body, this.config.customRequestOptions).pipe(map(resp => resp)); } CustomCollectionAction(actionName, postdata) { const body = postdata ? JSON.stringify(postdata) : null; return this._http.post(`${this._entitiesUri}/${actionName}`, body, this.config.customRequestOptions).pipe(map(resp => resp)); } CustomFunction(key, functionName, parameters) { if (parameters) { const params = ODataUtils.convertObjectToString(parameters); functionName = `${functionName}(${params})`; } else if (!functionName.endsWith(')') && !functionName.endsWith('()')) { functionName = `${functionName}()`; } return this._http.get(`${this.getEntityUri(key)}/${functionName}`, this.config.defaultRequestOptions).pipe(map(resp => resp)); } CustomCollectionFunction(functionName, parameters) { if (parameters) { const params = ODataUtils.convertObjectToString(parameters); functionName = `${functionName}(${params})`; } else if (!functionName.endsWith(')') && !functionName.endsWith('()')) { functionName = `${functionName}()`; } return this._http.get(`${this._entitiesUri}/${functionName}`, this.config.defaultRequestOptions).pipe(map(resp => resp)); } getNestedEntityService(key, typeName) { let nestedTypeName = `${this.config.getEntityPath(key, this._typeName)}/${typeName}`; return new ODataService(nestedTypeName, this._http, this.config); } ItemProperty(key, propertyName) { return this._http.get(`${this.getEntityUri(key)}/${propertyName}`, this.config.defaultRequestOptions) .pipe(map(r => r.body)); } Query() { return new ODataQuery(this.TypeName, this.config, this._http); } getEntityUri(key) { return this.config.getEntityUri(key, this._typeName); } handleResponse(entity) { return entity .pipe(map(this.extractData), catchError((err, caught) => { if (this.config.handleError) { this.config.handleError(err, caught); } return throwError(err); })); } extractData(res) { if (res.status < 200 || res.status >= 300) { throw new Error('Bad response status: ' + res.status); } const body = res.body; return body || {}; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhck9EYXRhU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEtdjQwMS9zcmMvbGliL29kYXRhL2FuZ3VsYXJPRGF0YVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sWUFBWTtJQUdyQixZQUFvQixTQUFpQixFQUFVLEtBQWlCLEVBQVUsTUFBMEI7UUFBaEYsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUNoRyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVE7UUFDZixPQUFPLElBQUksWUFBWSxDQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxJQUFJLENBQUksTUFBUztRQUNwQixPQUFPLElBQUksYUFBYSxDQUFJLElBQUksQ0FBQyxTQUFTLEVB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LEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVTLFlBQVksQ0FBQyxHQUFRO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVMsY0FBYyxDQUFZLE1BQTJDO1FBQzNFLE9BQU8sTUFBTTthQUNSLElBQUksQ0FDRCxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUNyQixVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsTUFBNkIsRUFBRSxFQUFFO1lBQ25ELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRU8sV0FBVyxDQUFZLEdBQTRCO1FBQ3ZELElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekQ7UUFDRCxNQUFNLElBQUksR0FBUSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IE9EYXRhQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYW5ndWxhck9EYXRhQ29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IERlbGV0ZU9wZXJhdGlvbiwgR2V0T3BlcmF0aW9uLCBQYXRjaE9wZXJhdGlvbiwgUG9zdE9wZXJhdGlvbiwgUHV0T3BlcmF0aW9uIH0gZnJvbSAnLi9hbmd1bGFyT0RhdGFPcGVyYXRpb24nO1xyXG5pbXBvcnQgeyBPRGF0YVF1ZXJ5IH0gZnJvbSAnLi9hbmd1bGFyT0RhdGFRdWVyeSc7XHJcbmltcG9ydCB7IE9EYXRhVXRpbHMgfSBmcm9tICcuL2FuZ3VsYXJPRGF0YVV0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPRGF0YVNlcnZpY2U8VD4ge1xyXG4gICAgcHJpdmF0ZSBfZW50aXRpZXNVcmk6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90eXBlTmFtZTogc3RyaW5nLCBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGNvbmZpZzogT0RhdGFDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXRpZXNVcmkgPSBjb25maWcuZ2V0RW50aXRpZXNVcmkoX3R5cGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXQoa2V5OiBhbnkpOiBHZXRPcGVyYXRpb248VD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgR2V0T3BlcmF0aW9uPFQ+KHRoaXMuX3R5cGVOYW1lLCB0aGlzLmNvbmZpZywgdGhpcy5faHR0cCwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgUG9zdDxUPihlbnRpdHk6IFQpOiBQb3N0T3BlcmF0aW9uPFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvc3RPcGVyYXRpb248VD4odGhpcy5fdHlwZU5hbWUsIHRoaXMuY29uZmlnLCB0aGlzLl9odHRwLCBlbnRpdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBQYXRjaDxUPihlbnRpdHk6IFQsIGtleTogYW55KTogUGF0Y2hPcGVyYXRpb248VD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUGF0Y2hPcGVyYXRpb248VD4odGhpcy5fdHlwZU5hbWUsIHRoaXMuY29uZmlnLCB0aGlzLl9odHRwLCBrZXksIGVudGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFB1dDxUPihlbnRpdHk6IFQsIGtleTogYW55KTogUHV0T3BlcmF0aW9uPFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFB1dE9wZXJhdGlvbjxUPih0aGlzLl90eXBlTmFtZSwgdGhpcy5jb25maWcsIHRoaXMuX2h0dHAsIGtleSwgZW50aXR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgRGVsZXRlKGtleTogYW55KTogRGVsZXRlT3BlcmF0aW9uPFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZU9wZXJhdGlvbjxUPih0aGlzLl90eXBlTmFtZSwgdGhpcy5jb25maWcsIHRoaXMuX2h0dHAsIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEN1c3RvbUFjdGlvbihrZXk6IGFueSwgYWN0aW9uTmFtZTogc3RyaW5nLCBwb3N0ZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBib2R5ID0gcG9zdGRhdGEgPyBKU09OLnN0cmluZ2lmeShwb3N0ZGF0YSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QoYCR7dGhpcy5nZXRFbnRpdHlVcmkoa2V5KX0vJHthY3Rpb25OYW1lfWAsIGJvZHksIHRoaXMuY29uZmlnLmN1c3RvbVJlcXVlc3RPcHRpb25zKS5waXBlKG1hcChyZXNwID0+IHJlc3ApKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQ3VzdG9tQ29sbGVjdGlvbkFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcsIHBvc3RkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBwb3N0ZGF0YSA/IEpTT04uc3RyaW5naWZ5KHBvc3RkYXRhKSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdChgJHt0aGlzLl9lbnRpdGllc1VyaX0vJHthY3Rpb25OYW1lfWAsIGJvZHksIHRoaXMuY29uZmlnLmN1c3RvbVJlcXVlc3RPcHRpb25zKS5waXBlKG1hcChyZXNwID0+IHJlc3ApKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQ3VzdG9tRnVuY3Rpb24oa2V5OiBhbnksIGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbWV0ZXJzPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IHN0cmluZyA9IE9EYXRhVXRpbHMuY29udmVydE9iamVjdFRvU3RyaW5nKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUgPSBgJHtmdW5jdGlvbk5hbWV9KCR7cGFyYW1zfSlgO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWZ1bmN0aW9uTmFtZS5lbmRzV2l0aCgnKScpICYmICFmdW5jdGlvbk5hbWUuZW5kc1dpdGgoJygpJykpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gYCR7ZnVuY3Rpb25OYW1lfSgpYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGAke3RoaXMuZ2V0RW50aXR5VXJpKGtleSl9LyR7ZnVuY3Rpb25OYW1lfWAsIHRoaXMuY29uZmlnLmRlZmF1bHRSZXF1ZXN0T3B0aW9ucykucGlwZShtYXAocmVzcCA9PiByZXNwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEN1c3RvbUNvbGxlY3Rpb25GdW5jdGlvbihmdW5jdGlvbk5hbWU6IHN0cmluZywgcGFyYW1ldGVycz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBzdHJpbmcgPSBPRGF0YVV0aWxzLmNvbnZlcnRPYmplY3RUb1N0cmluZyhwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gYCR7ZnVuY3Rpb25OYW1lfSgke3BhcmFtc30pYDtcclxuICAgICAgICB9IGVsc2UgaWYgKCFmdW5jdGlvbk5hbWUuZW5kc1dpdGgoJyknKSAmJiAhZnVuY3Rpb25OYW1lLmVuZHNXaXRoKCcoKScpKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGAke2Z1bmN0aW9uTmFtZX0oKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgJHt0aGlzLl9lbnRpdGllc1VyaX0vJHtmdW5jdGlvbk5hbWV9YCwgdGhpcy5jb25maWcuZGVmYXVsdFJlcXVlc3RPcHRpb25zKS5waXBlKG1hcChyZXNwID0+IHJlc3ApKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TmVzdGVkRW50aXR5U2VydmljZTxVPihrZXk6c3RyaW5nLHR5cGVOYW1lOnN0cmluZyk6T0RhdGFTZXJ2aWNlPFU+e1xyXG4gICAgICAgIGxldCBuZXN0ZWRUeXBlTmFtZSA9IGAke3RoaXMuY29uZmlnLmdldEVudGl0eVBhdGgoa2V5LHRoaXMuX3R5cGVOYW1lKX0vJHt0eXBlTmFtZX1gO1xyXG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFTZXJ2aWNlPFU+KG5lc3RlZFR5cGVOYW1lLHRoaXMuX2h0dHAsdGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBJdGVtUHJvcGVydHk8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxUPihgJHt0aGlzLmdldEVudGl0eVVyaShrZXkpfS8ke3Byb3BlcnR5TmFtZX1gLCB0aGlzLmNvbmZpZy5kZWZhdWx0UmVxdWVzdE9wdGlvbnMpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcChyID0+IHIuYm9keSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBRdWVyeSgpOiBPRGF0YVF1ZXJ5PFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhUXVlcnk8VD4odGhpcy5UeXBlTmFtZSwgdGhpcy5jb25maWcsIHRoaXMuX2h0dHApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRFbnRpdHlVcmkoa2V5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRFbnRpdHlVcmkoa2V5LCB0aGlzLl90eXBlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZVJlc3BvbnNlPFRSZXNwb25zZT4oZW50aXR5OiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUUmVzcG9uc2U+Pik6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIGVudGl0eVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCh0aGlzLmV4dHJhY3REYXRhKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8VFJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5oYW5kbGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5oYW5kbGVFcnJvcihlcnIsIGNhdWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXh0cmFjdERhdGE8VFJlc3BvbnNlPihyZXM6IEh0dHBSZXNwb25zZTxUUmVzcG9uc2U+KTogVFJlc3BvbnNlIHtcclxuICAgICAgICBpZiAocmVzLnN0YXR1cyA8IDIwMCB8fCByZXMuc3RhdHVzID49IDMwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCByZXNwb25zZSBzdGF0dXM6ICcgKyByZXMuc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYm9keTogYW55ID0gcmVzLmJvZHk7XHJcbiAgICAgICAgcmV0dXJuIGJvZHkgfHwge307XHJcbiAgICB9XHJcbn1cclxuIl19