diff options
Diffstat (limited to 'src/misc/cafy-id.ts')
| -rw-r--r-- | src/misc/cafy-id.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/misc/cafy-id.ts b/src/misc/cafy-id.ts new file mode 100644 index 0000000000..f3e1f5251b --- /dev/null +++ b/src/misc/cafy-id.ts @@ -0,0 +1,33 @@ +import * as mongo from 'mongodb'; +import { Context } from 'cafy'; + +export const isAnId = (x: any) => mongo.ObjectID.isValid(x); +export const isNotAnId = (x: any) => !isAnId(x); + +/** + * ID + */ +export default class ID extends Context<mongo.ObjectID> { + constructor() { + super(); + + this.transform = v => { + if (isAnId(v) && !mongo.ObjectID.prototype.isPrototypeOf(v)) { + return new mongo.ObjectID(v); + } else { + return v; + } + }; + + this.push(v => { + if (!mongo.ObjectID.prototype.isPrototypeOf(v) && isNotAnId(v)) { + return new Error('must-be-an-id'); + } + return true; + }); + } + + public getType() { + return super.getType('string'); + } +} |