first-npm-package-nicule
Version:
This isi first npm package
29 lines (24 loc) • 1.19 kB
text/typescript
import { makePropDecorator } from '../../google-decorator-factories';
import { Type } from '@angular/core';
import { BindDecorator } from '../bind.decorator';
import { ReflectiveModelBinderFactory, ReflectiveQueryMatcherFactory } from '../../services';
export interface BindEntitiesDecorator {
<T>(queryType: Type<T>): any;
new <T>(queryType: Type<T>): any;
}
export const Entities: BindEntitiesDecorator = makePropDecorator('BindEntity', <T>(queryType: Type<T>) => {
return ({
binding: {
priority: 1,
bind: (({ entities = [] }, fieldName, injector) => {
const modelBinderProvider = injector.get(ReflectiveModelBinderFactory);
const queryMatcherFactory = injector.get(ReflectiveQueryMatcherFactory);
const modelBinder = modelBinderProvider.make(queryType);
const queryMatcher = queryMatcherFactory.make(queryType);
return entities
.filter(hypermedia => queryMatcher.matches(hypermedia))
.map(hypermedia => modelBinder.bind(hypermedia));
})
} as BindDecorator
}) as any;
});