123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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;
- }
- }
|