{"version":3,"file":"breeze-client-adapter-model-library-backing-store.mjs","sources":["../../src/adapter-model-library-backing-store.ts","../../src/breeze-client-adapter-model-library-backing-store.ts"],"sourcesContent":["import * as breeze from 'breeze-client';\r\n\r\nlet core = breeze.core;\r\n\r\nexport class ModelLibraryBackingStoreAdapter implements breeze.ModelLibraryAdapter {\r\n  name: string;\r\n\r\n  constructor() {\r\n    this.name = \"backingStore\";\r\n  }\r\n\r\n  static register(config?: breeze.BreezeConfig) {\r\n    config = config || breeze.config;\r\n    config.registerAdapter(\"modelLibrary\", ModelLibraryBackingStoreAdapter);\r\n    return config.initializeAdapterInstance(\"modelLibrary\", \"backingStore\", true) as ModelLibraryBackingStoreAdapter;\r\n  }\r\n\r\n  initialize() {\r\n  }\r\n\r\n  getTrackablePropertyNames(entity: breeze.Entity) {\r\n    let names: string[] = [];\r\n    for (let p in entity) {\r\n      if (p === \"entityAspect\" || p === \"entityType\") continue;\r\n      if (p === \"_$typeName\" || p === \"_pendingSets\" || p === \"_backingStore\") continue;\r\n      let val = entity[p];\r\n      if (!core.isFunction(val)) {\r\n        names.push(p);\r\n      }\r\n    }\r\n    return names;\r\n  }\r\n\r\n  // This method is called during Metadata initialization\r\n  initializeEntityPrototype(proto: any) {\r\n\r\n    proto.getProperty = function (propertyName: string) {\r\n      return this[propertyName];\r\n    };\r\n\r\n    proto.setProperty = function (propertyName: string, value: any) {\r\n      //if (!this._backingStore.hasOwnProperty(propertyName)) {\r\n      //    throw new Error(\"Unknown property name:\" + propertyName);\r\n      //}\r\n      this[propertyName] = value;\r\n      // allow setProperty chaining.\r\n      return this;\r\n    };\r\n\r\n    movePropDefsToProto(proto);\r\n  }\r\n\r\n  // This method is called when an EntityAspect is first created - this will occur as part of the entityType.createEntity call.\r\n  // which can be called either directly or via standard query materialization\r\n\r\n  // entity is either an entity or a complexObject\r\n  startTracking(entity: breeze.StructuralObject, proto: any) {\r\n    // can't touch the normal property sets within this method - access the backingStore directly instead.\r\n    let bs = movePropsToBackingStore(entity);\r\n\r\n    // assign default values to the entity\r\n    let stype = breeze.EntityAspect.isEntity(entity) ? entity.entityType : entity.complexType;\r\n    stype.getProperties().forEach(function (prop) {\r\n\r\n      let propName = prop.name;\r\n      let val = entity[propName];\r\n\r\n      if (prop instanceof breeze.DataProperty) {\r\n        if (prop.isComplexProperty) {\r\n          if (prop.isScalar) {\r\n            val = (prop.dataType as breeze.ComplexType)._createInstanceCore(entity, prop);\r\n          } else {\r\n            val = breeze.makeComplexArray([], entity, prop);\r\n          }\r\n        } else if (!prop.isScalar) {\r\n          val = breeze.makePrimitiveArray([], entity, prop);\r\n        } else if (val === undefined) {\r\n          val = prop.defaultValue;\r\n        }\r\n\r\n      } else if (prop.isNavigationProperty) {\r\n        if (val !== undefined && val !== null) {\r\n          throw new Error(\"Cannot assign a navigation property in an entity ctor.: \" + propName);\r\n        }\r\n        if (prop.isScalar) {\r\n          // TODO: change this to nullstob later.\r\n          val = null;\r\n        } else {\r\n          val = breeze.makeRelationArray([], entity as breeze.Entity, prop);\r\n        }\r\n      } else {\r\n        throw new Error(\"unknown property: \" + propName);\r\n      }\r\n      // can't touch the normal property sets within this method (IE9 Bug) - so we access the backingStore directly instead.\r\n      // otherwise we could just do\r\n      // entity[propName] = val\r\n      // after all of the interception logic had been injected.\r\n      if ((prop as breeze.DataProperty).isSettable || prop.isNavigationProperty) {\r\n        bs[propName] = val;\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nbreeze.config.registerAdapter(\"modelLibrary\", ModelLibraryBackingStoreAdapter);\r\n\r\n// private methods\r\n\r\n// This method is called during Metadata initialization to correctly \"wrap\" properties.\r\nfunction movePropDefsToProto(proto: any) {\r\n  let stype = (proto.entityType || proto.complexType) as breeze.StructuralType;\r\n  let extra = stype._extra;\r\n\r\n  let alreadyWrapped = extra.alreadyWrappedProps || {};\r\n\r\n  stype.getProperties().forEach(function (prop) {\r\n    let propName = prop.name;\r\n    // we only want to wrap props that haven't already been wrapped\r\n    if (alreadyWrapped[propName]) return;\r\n\r\n    // If property is already defined on the prototype then wrap it in another propertyDescriptor.\r\n    // otherwise create a propDescriptor for it.\r\n    let descr: any;\r\n    if (propName in proto) {\r\n      descr = wrapPropDescription(proto, prop);\r\n    } else {\r\n      descr = makePropDescription(proto, prop);\r\n    }\r\n    // descr will be null for a wrapped descr that is not configurable\r\n    if (descr != null) {\r\n      Object.defineProperty(proto, propName, descr);\r\n    }\r\n    alreadyWrapped[propName] = true;\r\n  });\r\n  extra.alreadyWrappedProps = alreadyWrapped;\r\n}\r\n\r\n// This method is called when an instance is first created via materialization or createEntity.\r\n// this method cannot be called while a 'defineProperty' accessor is executing\r\n// because of IE bug mentioned above.\r\n\r\nfunction movePropsToBackingStore(instance: any) {\r\n\r\n  let bs = getBackingStore(instance);\r\n  let proto = Object.getPrototypeOf(instance);\r\n  let stype = (proto.entityType || proto.complexType) as breeze.StructuralType;\r\n  stype.getProperties().forEach(function (prop) {\r\n    let propName = prop.name;\r\n    if (prop.isUnmapped) {\r\n      // insure that any unmapped properties that were added after entityType\r\n      // was first created are wrapped with a property descriptor.\r\n      if (!core.getPropertyDescriptor(proto, propName)) {\r\n        let descr = makePropDescription(proto, prop);\r\n        Object.defineProperty(proto, propName, descr);\r\n      }\r\n    }\r\n    if (!instance.hasOwnProperty(propName)) return;\r\n    // pulls off the value, removes the instance property and then rewrites it via ES5 accessor\r\n    let value = instance[propName];\r\n    delete instance[propName];\r\n    instance[propName] = value;\r\n  });\r\n  return bs;\r\n}\r\n\r\nfunction makePropDescription(proto: any, property: breeze.EntityProperty) {\r\n  let propName = property.name;\r\n  let pendingStores = proto._pendingBackingStores;\r\n  if (!pendingStores) {\r\n    pendingStores = [];\r\n    proto._pendingBackingStores = pendingStores;\r\n  }\r\n  let descr = {\r\n    get: function () {\r\n      let bs = this._backingStore || getBackingStore(this);\r\n      return bs[propName];\r\n    },\r\n    set: function (value: any) {\r\n      // IE9 cannot touch instance._backingStore here\r\n      let bs = this._backingStore || getPendingBackingStore(this);\r\n      let accessorFn = getAccessorFn(bs, propName);\r\n      this._$interceptor(property, value, accessorFn);\r\n    },\r\n    enumerable: true,\r\n    configurable: true\r\n  };\r\n\r\n  (descr.set as any).rawSet = function (value: any) {\r\n    let bs = this._backingStore || getPendingBackingStore(this);\r\n    let accessorFn = getAccessorFn(bs, propName);\r\n    accessorFn(value);\r\n  };\r\n  return descr;\r\n\r\n}\r\n\r\nfunction getAccessorFn(bs: {}, propName: string): any {\r\n  return function () {\r\n    if (arguments.length === 0) {\r\n      return bs[propName];\r\n    } else {\r\n      bs[propName] = arguments[0];\r\n      return undefined;\r\n    }\r\n  };\r\n}\r\n\r\nfunction wrapPropDescription(proto: any, property: breeze.EntityProperty): any {\r\n  if (!proto.hasOwnProperty(property.name)) {\r\n    let nextProto = Object.getPrototypeOf(proto);\r\n    return wrapPropDescription(nextProto, property);\r\n  }\r\n\r\n  let propDescr = Object.getOwnPropertyDescriptor(proto, property.name);\r\n  if (!propDescr) return undefined;\r\n  // if not configurable; we can't touch it - so leave.\r\n  if (!propDescr.configurable) return undefined;\r\n  // if a data descriptor - don't change it - this is basically a static property - i.e. defined on every instance of the type with the same value.\r\n  if (propDescr.value) return undefined;\r\n  // if a read only property descriptor - no need to change it.\r\n  if (!propDescr.set) return undefined;\r\n\r\n  let localAccessorFn = function (entity: any) {\r\n    return function () {\r\n      if (!propDescr) return undefined;\r\n      if (arguments.length === 0) {\r\n        return propDescr.get!.bind(entity)();\r\n      } else {\r\n        let set = propDescr.set;\r\n        let rawSet = (set as any).rawSet || set;\r\n        rawSet.bind(entity)(arguments[0]);\r\n        return undefined;\r\n      }\r\n    };\r\n  };\r\n\r\n  let newDescr = {\r\n    get: function () {\r\n      if (!propDescr) return undefined;\r\n      return propDescr.get!.bind(this)();\r\n    },\r\n    set: function (value: any) {\r\n      this._$interceptor(property, value, localAccessorFn(this));\r\n    },\r\n    enumerable: propDescr.enumerable,\r\n    configurable: true\r\n  };\r\n  (newDescr.set as any).rawSet = propDescr.set;\r\n  return newDescr;\r\n}\r\n\r\n\r\nfunction getBackingStore(instance: any) {\r\n  let proto = Object.getPrototypeOf(instance);\r\n  processPendingStores(proto);\r\n  let bs = instance._backingStore;\r\n  if (!bs) {\r\n    bs = {};\r\n    instance._backingStore = bs;\r\n  }\r\n  return bs;\r\n}\r\n\r\n// workaround for IE9 bug where instance properties cannot be changed when executing a property 'set' method.\r\nfunction getPendingBackingStore(instance: any) {\r\n  let proto = Object.getPrototypeOf(instance);\r\n  let pendingStores = proto._pendingBackingStores;\r\n  let pending = core.arrayFirst(pendingStores, function (pending) {\r\n    return pending.entity === instance;\r\n  });\r\n  if (pending) return (pending as any).backingStore;\r\n  let bs = {};\r\n  pendingStores.push({ entity: instance, backingStore: bs });\r\n  return bs;\r\n}\r\n\r\nfunction processPendingStores(proto: any) {\r\n  let pendingStores = proto._pendingBackingStores;\r\n  if (pendingStores) {\r\n    pendingStores.forEach(function (pending: any) {\r\n      pending.entity._backingStore = pending.backingStore;\r\n    });\r\n    pendingStores.length = 0;\r\n  }\r\n}\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './adapter-model-library-backing-store';\n"],"names":[],"mappings":"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"}