docs: function model(options = {}) {
      let isDirty = false;
      return function decorateModel(target) {
          // Function to add META to the model
          function addMetaProperty() {
              const modelOfObject = new target();
              if (options.audit === undefined) {
                  options.audit = false;
              }
              if (!(options.audit === true ||
                  options.audit === false ||
                  options.audit === "server")) {
                  console.log(`You set the audit property to "${options.audit}" which is invalid. Valid properties are true, false, and "server". The audit property will be set to false for now.`);
                  options.audit = false;
              }
              const meta = Object.assign({}, options, { isProperty: property_store_1.isProperty(modelOfObject) }, { property: property_store_1.getModelProperty(modelOfObject) }, { properties: property_store_1.getProperties(modelOfObject) }, { isRelationship: relationship_store_1.isRelationship(modelOfObject) }, { relationship: relationship_store_1.getModelRelationship(modelOfObject) }, { relationships: relationship_store_1.getRelationships(modelOfObject) }, { dbIndexes: indexing_1.getDbIndexes(modelOfObject) }, { pushKeys: decorator_1.getPushKeys(modelOfObject) }, { dbOffset: options.dbOffset ? options.dbOffset : "" }, { audit: options.audit ? options.audit : false }, { plural: options.plural }, {
                  localPostfix: options.localPostfix === undefined ? "all" : options.localPostfix
              }, {
                  localModelName: options.localModelName === undefined
                      ? modelOfObject.constructor.name.slice(0, 1).toLowerCase() +
                          modelOfObject.constructor.name.slice(1)
                      : options.localModelName
              }, { isDirty });
              ModelMeta_1.addModelMeta(target.constructor.name.toLowerCase(), meta);
              Object.defineProperty(target.prototype, "META", {
                  get() {
                      return meta;
                  },
                  set(prop) {
                      if (typeof prop === "object" && prop.isDirty !== undefined) {
                          isDirty = prop.isDirty;
                      }
                      else {
                          throw new Error("The META properties should only be set with the @model decorator at design time!");
                      }
                  },
                  configurable: false,
                  enumerable: false
              });
              return target;
          }
          // copy prototype so intanceof operator still works
          addMetaProperty.prototype = target.prototype;
          // return new constructor (will override original)
          return addMetaProperty();
      };
  }