aboutsummaryrefslogtreecommitdiff
path: root/src/checkable.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-27 15:05:41 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-27 15:05:41 +0200
commit41f152b80ac10de22f330ec240196db484a8a479 (patch)
treec6725b0c37307ea8af04cff60150b83278aa648a /src/checkable.ts
parentf9e1ad0624c4b76df45a689aff5d39bb74f80183 (diff)
simplify Checkable.Class annotation and allow extra fields in /keys response
Diffstat (limited to 'src/checkable.ts')
-rw-r--r--src/checkable.ts70
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;
+ }
}