Comparing version 0.4.3 to 0.4.4
@@ -5,2 +5,4 @@ export default class JsonEsc { | ||
constructor(); | ||
useDate: boolean; | ||
registerDate(): void; | ||
registerRaw(key: string, type: object, encoder: (self: object) => string, decoder: (str: string) => object): void; | ||
@@ -7,0 +9,0 @@ register(key: string, type: object, encoder: (self: object) => string, decoder: (str: string) => object): void; |
@@ -8,5 +8,9 @@ "use strict"; | ||
this._decodeTable = {}; | ||
this.registerRaw('Date', Date, Codec.encodeDate, Codec.decodeDate); | ||
this.useDate = false; | ||
this.registerRaw('Bin', Uint8Array, Codec.encodeUint8Array, Codec.decodeUint8Array); | ||
} | ||
registerDate() { | ||
this.registerRaw('Date', Date, Codec.encodeDate, Codec.decodeDate); | ||
this.useDate = true; | ||
} | ||
registerRaw(key, type, encoder, decoder) { | ||
@@ -83,2 +87,9 @@ if (type && encoder) { | ||
stringify(input, space) { | ||
if (this.useDate) { | ||
let dateToJSON = Date.prototype.toJSON; | ||
delete Date.prototype.toJSON; | ||
let result = JSON.stringify(input, (key, value) => this.replacer(key, value), space); | ||
Date.prototype.toJSON = dateToJSON; | ||
return result; | ||
} | ||
return JSON.stringify(input, (key, value) => this.replacer(key, value), space); | ||
@@ -112,3 +123,3 @@ } | ||
} | ||
return value; | ||
return JSON.stringify(value); | ||
} | ||
@@ -176,11 +187,13 @@ case 'object': { | ||
} | ||
let dateToJSON = Date.prototype.toJSON; | ||
delete Date.prototype.toJSON; | ||
let result = JsonEsc.defaultEncoder.stringify(input, space); | ||
Date.prototype.toJSON = dateToJSON; | ||
return result; | ||
else { | ||
return JsonEsc.defaultEncoder.stringify(input, space); | ||
} | ||
} | ||
} | ||
JsonEsc.defaultEncoder = new JsonEsc(); | ||
JsonEsc.defaultEncoder = (() => { | ||
let defaultEncoder = new JsonEsc(); | ||
defaultEncoder.registerDate(); | ||
return defaultEncoder; | ||
})(); | ||
exports.default = JsonEsc; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "jsonesc", | ||
"version": "0.4.3", | ||
"version": "0.4.4", | ||
"description": "Json Escape", | ||
@@ -19,3 +19,3 @@ "repository": { | ||
"@types/mocha": "^5.2.0", | ||
"@types/node": "^9.6.6", | ||
"@types/node": "^11.9.5", | ||
"base64-js": "^1.3.0", | ||
@@ -25,7 +25,7 @@ "bson": "^4.0.1", | ||
"cross-env": "^5.1.6", | ||
"mocha": "^5.1.1", | ||
"mocha": "^6.0.1", | ||
"msgpack-lite": "^0.1.26", | ||
"ts-node": "^8.0.2", | ||
"tslint": "^5.9.1", | ||
"typescript": "^3.3.3" | ||
"tslint": "^5.13.0", | ||
"typescript": "^3.3.3333" | ||
}, | ||
@@ -32,0 +32,0 @@ "scripts": { |
# Json Escape | ||
<a href='https://travis-ci.org/ticlo/jsonesc'><img src="https://travis-ci.org/ticlo/jsonesc.svg?branch=master" title="travis-ci"></a> | ||
<a href='https://travis-ci.com/ticlo/jsonesc'><img src="https://travis-ci.com/ticlo/jsonesc.svg?branch=master" title="travis-ci"></a> | ||
@@ -5,0 +5,0 @@ |
@@ -5,13 +5,19 @@ import * as Codec from './codec'; | ||
private _encodeTable: Map<object, (self: object) => string> = new Map(); | ||
private _decodeTable: { [key: string]: (str: string) => object } = {}; | ||
private _decodeTable: {[key: string]: (str: string) => object} = {}; | ||
constructor() { | ||
this.registerRaw('Date', Date, Codec.encodeDate, Codec.decodeDate); | ||
this.registerRaw('Bin', Uint8Array, Codec.encodeUint8Array, Codec.decodeUint8Array); | ||
} | ||
encodeDate = false; | ||
registerDate() { | ||
this.registerRaw('Date', Date, Codec.encodeDate, Codec.decodeDate); | ||
this.encodeDate = true; | ||
} | ||
registerRaw(key: string, type: object, | ||
encoder: (self: object) => string, | ||
decoder: (str: string) => object) { | ||
encoder: (self: object) => string, | ||
decoder: (str: string) => object) { | ||
if (type && encoder) { | ||
@@ -24,5 +30,6 @@ this._encodeTable.set(type, encoder); | ||
} | ||
register(key: string, type: object, | ||
encoder: (self: object) => string, | ||
decoder: (str: string) => object) { | ||
encoder: (self: object) => string, | ||
decoder: (str: string) => object) { | ||
let prefix = `\u001b${key}:`; | ||
@@ -94,2 +101,9 @@ let prefixLen = prefix.length; | ||
stringify(input: any, space?: number): string { | ||
if (this.encodeDate) { | ||
let dateToJSON = Date.prototype.toJSON; | ||
delete Date.prototype.toJSON; | ||
let result = JSON.stringify(input, (key: string, value: any) => this.replacer(key, value), space); | ||
Date.prototype.toJSON = dateToJSON; | ||
return result; | ||
} | ||
return JSON.stringify(input, (key: string, value: any) => this.replacer(key, value), space); | ||
@@ -126,3 +140,3 @@ } | ||
} | ||
return value; | ||
return JSON.stringify(value); | ||
} | ||
@@ -181,17 +195,20 @@ case 'object': { | ||
private static defaultEncoder: JsonEsc = new JsonEsc(); | ||
private static defaultEncoder: JsonEsc = (() => { | ||
let defaultEncoder = new JsonEsc(); | ||
defaultEncoder.registerDate(); | ||
return defaultEncoder; | ||
})(); | ||
static parse(str: string): any { | ||
return JsonEsc.defaultEncoder.parse(str); | ||
} | ||
static stringify(input: any, space?: number, sortKeys: boolean = false): string { | ||
if (sortKeys === true) { | ||
return JsonEsc.defaultEncoder.stringifySorted(input, space); | ||
} else { | ||
return JsonEsc.defaultEncoder.stringify(input, space); | ||
} | ||
let dateToJSON = Date.prototype.toJSON; | ||
delete Date.prototype.toJSON; | ||
let result = JsonEsc.defaultEncoder.stringify(input, space); | ||
Date.prototype.toJSON = dateToJSON; | ||
return result; | ||
} | ||
} | ||
Sorry, the diff of this file is not supported yet
135830
1302