47 lines
1013 B
TypeScript
47 lines
1013 B
TypeScript
import {Array} from "./array";
|
|
import {BooleanData} from "./boolean";
|
|
import {Dictionary} from "./dictionary";
|
|
import {Null} from "./null";
|
|
import {NumberData} from "./number";
|
|
import {StringData} from "./string";
|
|
|
|
/**
|
|
* Replacer can be passed to JSON.stringify to convert an ExpressionData object into plain JSON
|
|
*
|
|
* See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#replacer
|
|
*/
|
|
export function replacer(key: string, value: any): any {
|
|
if (value instanceof Null) {
|
|
return null;
|
|
}
|
|
|
|
if (value instanceof BooleanData) {
|
|
return value.value;
|
|
}
|
|
|
|
if (value instanceof NumberData) {
|
|
return value.number();
|
|
}
|
|
|
|
if (value instanceof StringData) {
|
|
return value.coerceString();
|
|
}
|
|
|
|
if (value instanceof Array) {
|
|
return value.values();
|
|
}
|
|
|
|
if (value instanceof Dictionary) {
|
|
const pairs = value.pairs();
|
|
|
|
const r: any = {};
|
|
for (const p of pairs) {
|
|
r[p.key] = p.value;
|
|
}
|
|
|
|
return r;
|
|
}
|
|
|
|
return value;
|
|
}
|