text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  var _1 = require("../../");
  /**
   * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have
   * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage
   * entity1 and entity2 ids. This is owner side of the relationship.
   */
  function ManyToMany(typeFunction, inverseSideOrOptions, options) {
      // normalize parameters
      var inverseSideProperty;
      if (typeof inverseSideOrOptions === "object") {
          options = inverseSideOrOptions;
      }
      else {
          inverseSideProperty = inverseSideOrOptions;
      }
      return function (object, propertyName) {
          if (!options)
              options = {};
          // now try to determine it its lazy relation
          var isLazy = options.lazy === true;
          if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination
              var reflectedType = Reflect.getMetadata("design:type", object, propertyName);
              if (reflectedType && typeof reflectedType.name === "string" && reflectedType.name.toLowerCase() === "promise")
                  isLazy = true;
          }
          _1.getMetadataArgsStorage().relations.push({
              target: object.constructor,
              propertyName: propertyName,
              // propertyType: reflectedType,
              relationType: "many-to-many",
              isLazy: isLazy,
              type: typeFunction,
              inverseSideProperty: inverseSideProperty,
              options: options
          });
      };
  }
  exports.ManyToMany = ManyToMany;
  
  //# sourceMappingURL=ManyToMany.js.map
  