"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const key_model_const_1 = require("../impl/model/key-model.const");
const metadata_1 = require("./metadata");
function metadataForClass(modelClass) {
    return new metadata_1.Metadata(modelClass);
}
exports.metadataForClass = metadataForClass;
function metadataForModel(modelClass) {
    const modelMetadata = Reflect.getMetadata(key_model_const_1.KEY_MODEL, modelClass);
    if (!modelMetadata) {
        throw new Error(`make sure the @Model decorator is present on the model ${modelClass.name}`);
    }
    return modelMetadata;
}
exports.metadataForModel = metadataForModel;
/**
 *
 * @param {ModelConstructor<T>} modelClass
 * @param {keyof T} propertyKey Either the name of the property or the name of the
 * @returns {PropertyMetadata<T>}
 */
function metadataForProperty(modelClass, propertyKey) {
    if (modelClass) {
        const modelMetadata = Reflect.getMetadata(key_model_const_1.KEY_MODEL, modelClass);
        if (modelClass && !modelMetadata) {
            throw new Error(`make sure the @Model decorator was added to the given modelClass ${Object.hasOwnProperty('name') ? modelClass.name : modelClass}, was not able to find model metadata`);
        }
        if (modelMetadata.properties) {
            return (modelMetadata.properties.find(property => property.name === propertyKey || property.nameDb === propertyKey) ||
                null);
        }
    }
    return null;
}
exports.metadataForProperty = metadataForProperty;
//# sourceMappingURL=metadata-helper.js.map