UNPKG

patch-resource

Version:

JSON Patch extension for Angular's ngResource module

44 lines (33 loc) 1.42 kB
const observers = []; function patchResourceService($resource) { return function (host = '', params = {}, extensions = {}, ...rest) { let resource; if (extensions.patch) throw new Error('PatchResource: "Patch" is already extended with an action'); extensions.patch = { method: 'PATCH', transformRequest: function (resourceObject) { const obj = observers.filter((_obj) => _obj.resourceObject === resourceObject)[0]; let patch; if (!obj) throw new Error('No JSON Patch observer available for $patch'); patch = window.jsonpatch.generate(obj.observer); return window.angular.toJson(patch); }, }; resource = $resource(host, params, extensions, ...rest); resource.__get = resource.get; resource.get = function () { const resourceObject = this.__get.apply(this, arguments); resourceObject.$promise.then(function () { observers.push({ resourceObject: resourceObject, observer: window.jsonpatch.observe(resourceObject), }); }); return resourceObject; }; return resource; }; } window.angular .module('patchResource', ['ngResource']) .service('$patchResource', ['$resource', patchResourceService]);