src/model.js
function hasOneSet(desc, v, sync) {
  var name  = desc.name, k = `__${name}`, prev = this[k], inv = desc.inverse;

  checkAssociatedType(desc, v);

  this[k] = v;

  if (sync && inv && prev) { prev._inverseRemoved(inv, this); }
  if (sync && inv && v) { v._inverseAdded(inv, this); }

  if (prev) { prev.unproxy(this, name); }
  if (v) { v.proxy(this, name); }
}
function hasOneSet(desc, v, sync) {
  var name  = desc.name, k = `__${name}`, prev = this[k], inv = desc.inverse;

  checkAssociatedType(desc, v);

  this[k] = v;

  if (sync && inv && prev) { prev._inverseRemoved(inv, this); }
  if (sync && inv && v) { v._inverseAdded(inv, this); }

  if (prev) { prev.unproxy(this, name); }
  if (v) { v.proxy(this, name); }
}
Internal: Sets the given object on a `hasOne` property.  desc - An association descriptor. v    - The value to set. sync - Set to true to notify the inverse side of the association so that it can update itself.  Returns nothing. Throws `Error` if the given object isn't of the type specified in the association descriptor.