UNPKG

angular-odata

Version:

Client side OData typescript library for Angular

87 lines 11.9 kB
import { map } from 'rxjs/operators'; import { $ID, $REF, ODATA_ID } from '../../constants'; import { PathSegment } from '../../types'; import { ODataResource } from '../resource'; export class ODataReferenceResource extends ODataResource { //#region Factory static factory(api, { segments }) { segments.add(PathSegment.reference, $REF); return new ODataReferenceResource(api, { segments }); } clone() { return super.clone(); } //#endregion //#region Requests post(target, options) { return super.post({ [ODATA_ID]: target.endpointUrl({ params: false }) }, options); } put(target, options) { return super.put({ [ODATA_ID]: target.endpointUrl({ params: false }) }, options); } delete({ etag, target, ...options } = {}) { if (target) { options.params = { [$ID]: target.endpointUrl({ params: false }) }; } return super.delete({ etag, ...options }); } //#endregion //#region Shortcuts for collections /** * Add the given target to the collection. * @param target The target resource * @param options Options for the request * @returns Observable of the response */ add(target, options) { return this.post(target, options); } /** * Remove the given target from the collection. * @param target The target resource * @param options Options for the request * @returns Observable of the response */ remove(target, options) { return this.delete({ target, ...options }); } //#region //#region Shortcuts for single /** * Set the reference to the given target. * @param target The target resource * @param options Options for the request * @returns Observable of the response */ set(target, options) { return this.put(target, options); } /** * Unset the reference to the given target. * @param options Options for the request. * @returns Observable of the response */ unset(options) { return this.delete(options); } fetch(options = {}) { return this.get(options); } /** * Fetch the entity * @param options Options for the request * @returns The entity */ fetchEntity(options = {}) { return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity }) => entity)); } /** * Fetch entities * @param options Options for the request * @returns The entities */ fetchEntities(options = {}) { return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities }) => entities)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVM1QyxNQUFNLE9BQU8sc0JBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQUUsUUFBUSxFQUFtQztRQUU3QyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLHNCQUFzQixDQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVRLEtBQUs7UUFDWixPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQStCLENBQUM7SUFDcEQsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDQyxJQUFJLENBQ3JCLE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQ3JELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVrQixHQUFHLENBQ3BCLE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FDZCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQ3JELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVrQixNQUFNLENBQUMsRUFDeEIsSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLE9BQU8sS0FJTyxFQUFFO1FBQ25CLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1DQUFtQztJQUNuQzs7Ozs7T0FLRztJQUNILEdBQUcsQ0FDRCxNQUFnQyxFQUNoQyxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixNQUFpQyxFQUNqQyxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxTQUFTO0lBRVQsOEJBQThCO0lBQzlCOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUNELE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBc0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFtQkQsS0FBSyxDQUNILFVBR00sRUFBRTtRQUVSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FDVCxVQUVJLEVBQUU7UUFFTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQ1gsVUFFSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDaEMsQ0FBQztJQUNKLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7ICRJRCwgJFJFRiwgT0RBVEFfSUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnQsIFF1ZXJ5T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMgfSBmcm9tICcuLi9wYXRoJztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlJztcbmltcG9ydCB7IE9EYXRhRW50aXR5UmVzb3VyY2UgfSBmcm9tICcuL2VudGl0eSc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzT3B0aW9ucyxcbiAgT0RhdGFFbnRpdHlPcHRpb25zLFxuICBPRGF0YU9wdGlvbnMsXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVJlZmVyZW5jZVJlc291cmNlPFQ+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxUPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFA+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAgeyBzZWdtZW50cyB9OiB7IHNlZ21lbnRzOiBPRGF0YVBhdGhTZWdtZW50cyB9LFxuICApIHtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnQucmVmZXJlbmNlLCAkUkVGKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUmVmZXJlbmNlUmVzb3VyY2U8UD4oYXBpLCB7IHNlZ21lbnRzIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xvbmUoKTogT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxUPiB7XG4gICAgcmV0dXJuIHN1cGVyLmNsb25lKCkgYXMgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxUPjtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBvc3QoXG4gICAgdGFyZ2V0OiBPRGF0YUVudGl0eVJlc291cmNlPGFueT4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucG9zdChcbiAgICAgIHsgW09EQVRBX0lEXTogdGFyZ2V0LmVuZHBvaW50VXJsKHsgcGFyYW1zOiBmYWxzZSB9KSB9LFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHB1dChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBzdXBlci5wdXQoXG4gICAgICB7IFtPREFUQV9JRF06IHRhcmdldC5lbmRwb2ludFVybCh7IHBhcmFtczogZmFsc2UgfSkgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkZWxldGUoe1xuICAgIGV0YWcsXG4gICAgdGFyZ2V0LFxuICAgIC4uLm9wdGlvbnNcbiAgfToge1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgdGFyZ2V0PzogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+O1xuICB9ICYgT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIG9wdGlvbnMucGFyYW1zID0geyBbJElEXTogdGFyZ2V0LmVuZHBvaW50VXJsKHsgcGFyYW1zOiBmYWxzZSB9KSB9O1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHsgZXRhZywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gU2hvcnRjdXRzIGZvciBjb2xsZWN0aW9uc1xuICAvKipcbiAgICogQWRkIHRoZSBnaXZlbiB0YXJnZXQgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCByZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgYWRkKFxuICAgIHRhcmdldDogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucG9zdCh0YXJnZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZ2l2ZW4gdGFyZ2V0IGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCByZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIHRhcmdldD86IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZSh7IHRhcmdldCwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuICAvLyNyZWdpb25cblxuICAvLyNyZWdpb24gU2hvcnRjdXRzIGZvciBzaW5nbGVcbiAgLyoqXG4gICAqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiB0YXJnZXQuXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCByZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgc2V0KFxuICAgIHRhcmdldDogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHV0KHRhcmdldCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVW5zZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgZ2l2ZW4gdGFyZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzcG9uc2VcbiAgICovXG4gIHVuc2V0KG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZShvcHRpb25zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRmV0Y2hcbiAgLyoqXG4gICAqIEZldGNoIGVudGl0eSAvIGVudGl0aWVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm4gQW4gb2JzZXJ2YWJsZSBvZiB0aGUgZW50aXR5IG9yIGVudGl0aWVzIHdpdGggYW5ub3RhdGlvbnNcbiAgICovXG4gIGZldGNoKFxuICAgIG9wdGlvbnM/OiBPRGF0YUVudGl0eU9wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PjtcbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFQ+PjtcbiAgZmV0Y2goXG4gICAgb3B0aW9uczogT0RhdGFFbnRpdHlPcHRpb25zICZcbiAgICAgIE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXR5XG4gICAqL1xuICBmZXRjaEVudGl0eShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHkgfSkgPT4gZW50aXR5KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGVudGl0aWVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBlbnRpdGllc1xuICAgKi9cbiAgZmV0Y2hFbnRpdGllcyhcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8VFtdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXRpZXMgfSkgPT4gZW50aXRpZXMpLFxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=