lvl++
class StarRatingDefinition extends DorfFieldDefinition<number> { /*...*/ }
class StarRatingMetadata extends DorfFieldMetadata<number, StarRatingDefinition> { /*...*/ }
class StarRatingComponent extends AbstractDorfFieldComponent<number, StarRatingMetadata> { /*...*/ }
// @DorfForm()
export function DorfForm(options?: IDorfFormOptions) { return function <D extends Function>(targetConstructor: D) { Object .defineProperties(targetConstructor.prototype, { /* props */ }); } }
import { Input } from '@angular/core';
export function DorfObjectInput() { return function (targetProto: any, propName: string) { Input()(targetProto, propName); targetProto.dorfObjectInForm = propName; }; }
@View
i @Component
// @Component on the subclass
export abstract class AbstractDorfFieldComponent<T,
M extends DorfFieldMetadata<T, IDorfFieldDefinition<T>>> {
@Input()
metadata: M;
/* ... */
}
export type InputType = 'color' | 'date' | 'datetime' | 'email' | /* ... */;
export interface IDorfInputDefinition<T> extends IDorfFieldDefinition<T> {
type: InputType;
}
setDomainObjValue: (val: DomObj[keyof DomObj]) => { obj[propertyName] = val; }
// order is defined as order?: number;
get order(): number | undefined { return this.definition.order; }
dorf/config
karma
ts
webpack
"test": "karma start config/karma/conf.js"
webpackConfig = require('../webpack/tests')
Prio | Co | Jak |
---|---|---|
1 | Widoczność na npmjs.com | Częste update'y (utrzymywanie) |
2 | Ładne README | Przykłady online, quick win |
3 | Dokumentacja | Istniejąca, widoczna na wszelki wypadek |
4 | Przykłady do ściągnięcia | Od razu w repo |
5 | Czysty kod źródłowy | Najmniej istotne, ale np. ułatwiające dokumentowanie |