diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-27 15:05:41 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-27 15:05:41 +0200 |
commit | 41f152b80ac10de22f330ec240196db484a8a479 (patch) | |
tree | c6725b0c37307ea8af04cff60150b83278aa648a /src/checkable.ts | |
parent | f9e1ad0624c4b76df45a689aff5d39bb74f80183 (diff) |
simplify Checkable.Class annotation and allow extra fields in /keys response
Diffstat (limited to 'src/checkable.ts')
-rw-r--r-- | src/checkable.ts | 70 |
1 files changed, 21 insertions, 49 deletions
diff --git a/src/checkable.ts b/src/checkable.ts index 6bfaea013..24eebc713 100644 --- a/src/checkable.ts +++ b/src/checkable.ts @@ -206,55 +206,27 @@ export namespace Checkable { * This annotation adds the implementation of the `checked` * static method. */ - export function Class(target: any) { - target.checked = (v: any) => { - return checkValue(v, { - propertyKey: "(root)", - type: target, - checker: checkValue - }, ["(root)"]); - }; - return target; - } - - /** - * A checker for a class (see [[Class]) that allows - * extra properties to exist on the JSON object being validated. - */ - export function ClassWithExtra(target: any) { - target.checked = (v: any) => { - return checkValue(v, { - propertyKey: "(root)", - type: target, - extraAllowed: true, - checker: checkValue - }, ["(root)"]); - }; - return target; - } - - - /** - * A validator for a class that can have an additional validate - * method. The validate method is a member method of type `() => void` - * that throws an exception on invalidation errors. - */ - export function ClassWithValidator(target: any) { - target.checked = (v: any) => { - let cv = checkValue(v, { - propertyKey: "(root)", - type: target, - checker: checkValue - }, ["(root)"]); - let instance = new target(); - if (typeof instance.validate !== "function") { - throw Error("invalid Checkable annotion: validate method required"); - } - // May throw exception - instance.validate.call(cv); - return cv; - }; - return target; + export function Class(opts: {extra?: boolean, validate?: boolean} = {}) { + return (target: any) => { + target.checked = (v: any) => { + let cv = checkValue(v, { + propertyKey: "(root)", + type: target, + extraAllowed: !!opts.extra, + checker: checkValue + }, ["(root)"]); + if (opts.validate) { + let instance = new target(); + if (typeof instance.validate !== "function") { + throw Error("invalid Checkable annotion: validate method required"); + } + // May throw exception + instance.validate.call(cv); + } + return cv; + }; + return target; + } } |