UNPKG

kindagoose

Version:
44 lines 2.33 kB
"use strict"; 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