Skip to content

Commit ac3af3c

Browse files
author
William Troup
committed
Improved string parsing.
1 parent 2160fac commit ac3af3c

7 files changed

Lines changed: 77 additions & 51 deletions

File tree

dist/jsontree.esm.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,27 @@ var Convert2;
362362
return e.toString().toLowerCase().trim() === "true";
363363
}
364364
Convert.stringToBoolean = stringToBoolean;
365+
function stringToParsedValue(e, t) {
366+
let n = null;
367+
if (Is.definedString(e)) {
368+
const o = parseFloat(e);
369+
if (t.parse.stringsToBooleans && Is.String.boolean(e)) {
370+
n = Convert.stringToBoolean(e);
371+
} else if (t.parse.stringsToBigInts && Is.String.bigInt(e)) {
372+
n = Convert.stringToBigInt(e);
373+
} else if (t.parse.stringsToNumbers && !isNaN(e) && !Is.definedFloat(o)) {
374+
n = parseInt(e);
375+
} else if (t.parse.stringsToFloats && !isNaN(e) && Is.definedFloat(o)) {
376+
n = o;
377+
} else if (t.parse.stringsToDates && Is.String.date(e)) {
378+
n = new Date(e);
379+
} else if (t.parse.stringsToSymbols && Is.String.symbol(e)) {
380+
n = Symbol(Convert.symbolToString(e));
381+
}
382+
}
383+
return n;
384+
}
385+
Convert.stringToParsedValue = stringToParsedValue;
365386
})(Convert2 || (Convert2 = {}));
366387

367388
var Default;
@@ -2575,20 +2596,7 @@ var ContextMenu;
25752596
} else if (Is.definedStringAny(r)) {
25762597
y = "string";
25772598
if (!o.ignore.stringValues || S) {
2578-
let f = null;
2579-
if (o.parse.stringsToBooleans && Is.definedString(r) && Is.String.boolean(r)) {
2580-
f = Convert2.stringToBoolean(r);
2581-
} else if (o.parse.stringsToBigInts && Is.definedString(r) && Is.String.bigInt(r)) {
2582-
f = Convert2.stringToBigInt(r);
2583-
} else if (o.parse.stringsToNumbers && Is.definedString(r) && !isNaN(r) && !Is.definedFloat(parseFloat(r))) {
2584-
f = parseInt(r);
2585-
} else if (o.parse.stringsToFloats && Is.definedString(r) && !isNaN(r) && Is.definedFloat(parseFloat(r))) {
2586-
f = parseFloat(r);
2587-
} else if (o.parse.stringsToDates && Is.definedString(r) && Is.String.date(r)) {
2588-
f = new Date(r);
2589-
} else if (o.parse.stringsToSymbols && Is.definedString(r) && Is.String.symbol(r)) {
2590-
f = Symbol(Convert2.symbolToString(r));
2591-
}
2599+
const f = Convert2.stringToParsedValue(r, o);
25922600
if (Is.defined(f)) {
25932601
Y(t, n, o, l, f, i, a, s, u, c, d);
25942602
T = true;

dist/jsontree.esm.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/jsontree.js

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,27 @@ var Convert2;
364364
return e.toString().toLowerCase().trim() === "true";
365365
}
366366
Convert.stringToBoolean = stringToBoolean;
367+
function stringToParsedValue(e, t) {
368+
let n = null;
369+
if (Is.definedString(e)) {
370+
const o = parseFloat(e);
371+
if (t.parse.stringsToBooleans && Is.String.boolean(e)) {
372+
n = Convert.stringToBoolean(e);
373+
} else if (t.parse.stringsToBigInts && Is.String.bigInt(e)) {
374+
n = Convert.stringToBigInt(e);
375+
} else if (t.parse.stringsToNumbers && !isNaN(e) && !Is.definedFloat(o)) {
376+
n = parseInt(e);
377+
} else if (t.parse.stringsToFloats && !isNaN(e) && Is.definedFloat(o)) {
378+
n = o;
379+
} else if (t.parse.stringsToDates && Is.String.date(e)) {
380+
n = new Date(e);
381+
} else if (t.parse.stringsToSymbols && Is.String.symbol(e)) {
382+
n = Symbol(Convert.symbolToString(e));
383+
}
384+
}
385+
return n;
386+
}
387+
Convert.stringToParsedValue = stringToParsedValue;
367388
})(Convert2 || (Convert2 = {}));
368389

369390
var Default;
@@ -2577,20 +2598,7 @@ var ContextMenu;
25772598
} else if (Is.definedStringAny(r)) {
25782599
y = "string";
25792600
if (!o.ignore.stringValues || S) {
2580-
let f = null;
2581-
if (o.parse.stringsToBooleans && Is.definedString(r) && Is.String.boolean(r)) {
2582-
f = Convert2.stringToBoolean(r);
2583-
} else if (o.parse.stringsToBigInts && Is.definedString(r) && Is.String.bigInt(r)) {
2584-
f = Convert2.stringToBigInt(r);
2585-
} else if (o.parse.stringsToNumbers && Is.definedString(r) && !isNaN(r) && !Is.definedFloat(parseFloat(r))) {
2586-
f = parseInt(r);
2587-
} else if (o.parse.stringsToFloats && Is.definedString(r) && !isNaN(r) && Is.definedFloat(parseFloat(r))) {
2588-
f = parseFloat(r);
2589-
} else if (o.parse.stringsToDates && Is.definedString(r) && Is.String.date(r)) {
2590-
f = new Date(r);
2591-
} else if (o.parse.stringsToSymbols && Is.definedString(r) && Is.String.symbol(r)) {
2592-
f = Symbol(Convert2.symbolToString(r));
2593-
}
2601+
const f = Convert2.stringToParsedValue(r, o);
25942602
if (Is.defined(f)) {
25952603
Y(t, n, o, l, f, i, a, s, u, c, d);
25962604
T = true;

dist/jsontree.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/jsontree.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/jsontree.ts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1715,26 +1715,7 @@ type JsonTreeData = Record<string, BindingOptions>;
17151715
dataType = DataType.string;
17161716

17171717
if ( !bindingOptions.ignore!.stringValues || isForEmptyProperties ) {
1718-
let parsedValue: any = null;
1719-
1720-
if ( bindingOptions.parse!.stringsToBooleans && Is.definedString( value ) && Is.String.boolean( value ) ) {
1721-
parsedValue = Convert.stringToBoolean( value );;
1722-
1723-
} else if ( bindingOptions.parse!.stringsToBigInts && Is.definedString( value ) && Is.String.bigInt( value ) ) {
1724-
parsedValue = Convert.stringToBigInt( value );
1725-
1726-
} else if ( bindingOptions.parse!.stringsToNumbers && Is.definedString( value ) && !isNaN( value ) && !Is.definedFloat( parseFloat( value ) ) ) {
1727-
parsedValue = parseInt( value );
1728-
1729-
} else if ( bindingOptions.parse!.stringsToFloats && Is.definedString( value ) && !isNaN( value ) && Is.definedFloat( parseFloat( value ) ) ) {
1730-
parsedValue = parseFloat( value );
1731-
1732-
} else if ( bindingOptions.parse!.stringsToDates && Is.definedString( value ) && Is.String.date( value ) ) {
1733-
parsedValue = new Date( value );
1734-
1735-
} else if ( bindingOptions.parse!.stringsToSymbols && Is.definedString( value ) && Is.String.symbol( value ) ) {
1736-
parsedValue = Symbol( Convert.symbolToString( value ) );
1737-
}
1718+
const parsedValue: any = Convert.stringToParsedValue( value, bindingOptions );
17381719

17391720
if ( Is.defined( parsedValue ) ) {
17401721
renderValue( data, container, bindingOptions, name, parsedValue, isLastItem, isArrayItem, jsonPath, parentType, preventEditing, indentationLevel );

src/ts/data/convert.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,4 +263,33 @@ export namespace Convert {
263263
export function stringToBoolean( value: string ) : boolean {
264264
return value.toString().toLowerCase().trim() === "true";
265265
}
266+
267+
export function stringToParsedValue( value: any, bindingOptions: BindingOptions ) : any {
268+
let parsedValue: any = null;
269+
270+
if ( Is.definedString( value ) ) {
271+
const floatValue: number = parseFloat( value );
272+
273+
if ( bindingOptions.parse!.stringsToBooleans && Is.String.boolean( value ) ) {
274+
parsedValue = Convert.stringToBoolean( value );;
275+
276+
} else if ( bindingOptions.parse!.stringsToBigInts && Is.String.bigInt( value ) ) {
277+
parsedValue = Convert.stringToBigInt( value );
278+
279+
} else if ( bindingOptions.parse!.stringsToNumbers && !isNaN( value ) && !Is.definedFloat( floatValue ) ) {
280+
parsedValue = parseInt( value );
281+
282+
} else if ( bindingOptions.parse!.stringsToFloats && !isNaN( value ) && Is.definedFloat( floatValue ) ) {
283+
parsedValue = floatValue;
284+
285+
} else if ( bindingOptions.parse!.stringsToDates && Is.String.date( value ) ) {
286+
parsedValue = new Date( value );
287+
288+
} else if ( bindingOptions.parse!.stringsToSymbols && Is.String.symbol( value ) ) {
289+
parsedValue = Symbol( Convert.symbolToString( value ) );
290+
}
291+
}
292+
293+
return parsedValue;
294+
}
266295
}

0 commit comments

Comments
 (0)