Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/identifier / src / stateTreeIdentifier.ts
Size: Mime:
import { fliphash, stringify } from 'chain-able-boost'
import {
  IDENTIFIER_REFERENCE_REGISTRY,
  IDENTIFIER_STRING_REGISTRY,
} from './IDENTIFIER_REGISTRY'
import { uuid } from './uuid'

// eslint-disable-next-line
function concatIdentifier(obj): string {
  let identifier = ''
  if (obj.userid) {
    identifier += obj.userid
  } else if (obj.orderid) {
    identifier += obj.orderid
  } else if (obj.identifier) {
    identifier += obj.identifier
  } else if (obj.cardid) {
    identifier += obj.cardid
  } else if (obj.itemid) {
    identifier += obj.itemid
  } else if (obj.skuid) {
    identifier += obj.skuid
  } else if (obj.addressid) {
    identifier += obj.addressid
  } else if (obj.id) {
    identifier += obj.id
  }
  return identifier
}

// eslint-disable-next-line
function stateTreeIdentifier(obj = {}, old?: Object) {
  if (obj.__identifier) {
    return obj.__identifier
  }
  const identifier = concatIdentifier(old || obj)
  if (identifier !== '') {
    return identifier
  }

  if (IDENTIFIER_STRING_REGISTRY.has(obj)) {
    return IDENTIFIER_STRING_REGISTRY.get(obj)
  }

  const string = stringify(obj)

  if (IDENTIFIER_REFERENCE_REGISTRY.has(string)) {
    return IDENTIFIER_REFERENCE_REGISTRY.get(string)
  }

  const unique = uuid() + string
  const hashstring = '__' + fliphash(unique)
  IDENTIFIER_REFERENCE_REGISTRY.set(string, hashstring)
  IDENTIFIER_STRING_REGISTRY.set(obj, hashstring)
  return hashstring
}

export { stateTreeIdentifier }
export default stateTreeIdentifier