Code coverage report for upstream/lib/dialects/postgres/hstore.js

Statements: 3.45% (1 / 29)      Branches: 0% (0 / 16)      Functions: 0% (0 / 6)      Lines: 3.45% (1 / 29)     

All files » upstream/lib/dialects/postgres/ » hstore.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 611                                                                                                                        
module.exports = {
  stringifyPart: function(part) {
    switch(typeof part) {
      case 'boolean':
      case 'number':
        return String(part)
      case 'string':
        return '"' + part.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'
      case 'undefined':
        return 'NULL'
      default:
        if (part === null)
          return 'NULL'
        else
          return '"' + JSON.stringify(part).replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'
    }
  },
  stringify: function(data) {
    var self = this
 
    return Object.keys(data).map(function(key) {
      return self.stringifyPart(key) + '=>' + self.stringifyPart(data[key])
    }).join(',')
  },
  parsePart: function(part) {
    part = part.replace(/\\\\/g, '\\').replace(/\\"/g, '"')
 
    switch(part[0]) {
      case '{':
      case '[':
        return JSON.parse(part)
      default:
        return part
    }
  },
  parse: function(string) {
    var self = this
    const rx = /\"((?:\\\"|[^"])*)\"\s*\=\>\s*((?:true|false|NULL|\d+|\d+\.\d+|\"((?:\\\"|[^"])*)\"))/g
    var object = { }
 
    string.replace(rx, function(match, key, value, innerValue) {
      switch(value) {
        case 'true':
          object[self.parsePart(key)] = true
          break
        case 'false':
          object[self.parsePart(key)] = false
          break
        case 'NULL':
          object[self.parsePart(key)] = null
          break
        default:
          object[self.parsePart(key)] = self.parsePart(innerValue || value)
          break
      }
    })
 
    return object;
  }
}