summaryrefslogtreecommitdiff
path: root/src/misc/cafy-id.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc/cafy-id.ts')
-rw-r--r--src/misc/cafy-id.ts33
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');
+ }
+}