/* istanbul ignore next */ module at { 'use strict'; /* tslint:disable:no-any */ type ResourceClass = angular.resource.IResourceClass; type ResourceArray = angular.resource.IResourceArray; type ResourceService = angular.resource.IResourceService; /* istanbul ignore next */ function combineResource(instance: any, model?: any): void { angular.extend(instance, new instance.$_Resource(model)); } /* istanbul ignore next */ export class Resource implements angular.resource.IResource { public static get: (params?: Object) => Resource; public static query: (params?: Object) => ResourceArray; public static remove: () => Resource; public static save: () => Resource; public static delete: () => Resource; public $get: (params?: Object) => angular.IPromise; public $query: (params?: Object) => angular.IPromise>; public $remove: (params?: Object) => angular.IPromise; public $save: (params?: Object) => angular.IPromise; public $delete: (params?: Object) => angular.IPromise; public $promise: angular.IPromise; public $resolved: boolean; public $cancelRequest: () => void; public toJSON: () => this; constructor(model?: any) { combineResource(this, model); } } /* istanbul ignore next */ export class ResourceWithUpdate extends Resource { public static update: () => ResourceWithUpdate; public $update: () => angular.IPromise; public $promise : angular.IPromise; constructor(model?: any) { super(model); } } export interface IResourceAnnotation { (moduleName: string, className: string): IClassAnnotationDecorator; } export function resource(moduleName: string, className: string): IClassAnnotationDecorator { return (target: any): void => { function resourceClassFactory($resource: ResourceService, ...args: any[]): any { const newResource: ResourceClass = $resource(target.url, target.params, target.actions, target.options); return attachInjects(angular.extend(newResource, angular.extend(target, newResource, { prototype: angular.extend(newResource.prototype, angular.extend(target.prototype, { /* tslint:disable:variable-name */ $_Resource: newResource /* tslint:enable:variable-name */ })) })), ...args); } resourceClassFactory.$inject = (['$resource']).concat(target.$inject /* istanbul ignore next */ || []); angular.module(moduleName).factory(className, resourceClassFactory); }; } /* tslint:enable:no-any */ }