83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import mongoose from "mongoose";
|
|
|
|
class LongSchema extends mongoose.SchemaType {
|
|
public $conditionalHandlers = {
|
|
$lt: this.handleSingle,
|
|
$lte: this.handleSingle,
|
|
$gt: this.handleSingle,
|
|
$gte: this.handleSingle,
|
|
$ne: this.handleSingle,
|
|
$in: this.handleArray,
|
|
$nin: this.handleArray,
|
|
$mod: this.handleArray,
|
|
$all: this.handleArray,
|
|
$bitsAnySet: this.handleArray,
|
|
$bitsAllSet: this.handleArray,
|
|
};
|
|
|
|
handleSingle(val: any) {
|
|
return this.cast(val, null, null, "handle");
|
|
}
|
|
|
|
handleArray(val: any) {
|
|
var self = this;
|
|
return val.map(function (m: any) {
|
|
return self.cast(m, null, null, "handle");
|
|
});
|
|
}
|
|
|
|
checkRequired(val: any) {
|
|
return null != val;
|
|
}
|
|
|
|
cast(val: any, scope?: any, init?: any, type?: string) {
|
|
if (null === val) return val;
|
|
if ("" === val) return null;
|
|
if (typeof val === "bigint") {
|
|
return mongoose.mongo.Long.fromString(val.toString());
|
|
}
|
|
|
|
if (val instanceof mongoose.mongo.Long) {
|
|
if (type === "handle" || init == false) return val;
|
|
return BigInt(val.toString());
|
|
}
|
|
if (val instanceof Number || "number" == typeof val) return BigInt(val);
|
|
if (!Array.isArray(val) && val.toString) return BigInt(val.toString());
|
|
|
|
// @ts-ignore
|
|
throw new SchemaType.CastError("Long", val);
|
|
}
|
|
|
|
castForQuery($conditional: string, value: any) {
|
|
var handler;
|
|
if (2 === arguments.length) {
|
|
// @ts-ignore
|
|
handler = this.$conditionalHandlers[$conditional];
|
|
if (!handler) {
|
|
throw new Error("Can't use " + $conditional + " with Long.");
|
|
}
|
|
return handler.call(this, value);
|
|
} else {
|
|
return this.cast($conditional, null, null, "query");
|
|
}
|
|
}
|
|
}
|
|
|
|
LongSchema.cast = mongoose.SchemaType.cast;
|
|
LongSchema.set = mongoose.SchemaType.set;
|
|
LongSchema.get = mongoose.SchemaType.get;
|
|
|
|
declare module "mongoose" {
|
|
namespace Types {
|
|
class Long extends mongoose.mongo.Long {}
|
|
}
|
|
namespace Schema {
|
|
namespace Types {
|
|
class Long extends LongSchema {}
|
|
}
|
|
}
|
|
}
|
|
|
|
mongoose.Schema.Types.Long = LongSchema;
|
|
mongoose.Types.Long = mongoose.mongo.Long;
|