kindagoose
Version:
Integrate Typegoose with NestJS!
44 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.modelFactory = void 0;
const typegoose_1 = require("@typegoose/typegoose");
const kindagoose_constants_1 = require("../constants/kindagoose.constants");
const get_model_token_1 = require("./get-model-token");
const modelFactory = (schema, connectionName) => {
return (connection, discoveryService, reflector, metadataScanner) => {
var _a;
const existingModel = (_a = discoveryService
.getProviders()
.find(provider => provider.token === (0, get_model_token_1.getModelToken)(schema.name, connectionName))) === null || _a === void 0 ? void 0 : _a.instance;
if (existingModel) {
return existingModel;
}
const providers = discoveryService.getProviders().filter(provider => provider.instance);
let tracker = null;
for (const provider of providers) {
const trackerMetadata = reflector.get(kindagoose_constants_1.EVENT_TRACKER_FOR_KEY, provider.instance.constructor);
if (trackerMetadata === schema.name) {
tracker = provider;
break;
}
}
const mongooseSchema = (0, typegoose_1.buildSchema)(schema);
if (tracker) {
const { instance } = tracker;
const methodNames = metadataScanner.getAllMethodNames(Object.getPrototypeOf(instance));
for (const methodName of methodNames) {
const propertyPreMetadata = reflector.get(kindagoose_constants_1.PRE_METADATA_KEY, instance[methodName]) || [];
const propertyPostMetadata = reflector.get(kindagoose_constants_1.POST_METADATA_KEY, instance[methodName]) || [];
for (const preEventName of propertyPreMetadata) {
mongooseSchema.pre(preEventName, instance[methodName].bind(instance));
}
for (const postEventName of propertyPostMetadata) {
mongooseSchema.post(postEventName, instance[methodName].bind(instance));
}
}
}
return (0, typegoose_1.addModelToTypegoose)(connection.model((0, typegoose_1.getName)(schema), mongooseSchema), schema);
};
};
exports.modelFactory = modelFactory;
//# sourceMappingURL=model-factory.js.map