DefinitelyTyped/types/secure-json-parse/secure-json-parse-tests.ts
2019-10-03 14:48:13 -07:00

43 lines
1.6 KiB
TypeScript

import { parse, safeParse, scan } from "secure-json-parse";
const reviverFunc = (_key: string, value: any) => typeof value === "number" ? value * 2 : value;
let result: any;
let tryResult = false;
const simpleJson = "{\"a\": 3, \"b\": 4}";
result = safeParse(simpleJson); // result === { a: 3, b: 4 }
result = safeParse(simpleJson, reviverFunc); // result === { a: 6, b: 8 }
result = parse(simpleJson); // result === { a: 3, b: 4 }
result = parse(simpleJson, reviverFunc); // result === { a: 6, b: 8 }
try {
scan(JSON.parse(simpleJson));
tryResult = true;
} catch (error) {
tryResult = false;
} // tryResult === true;
const jsonWithProto = "{\"a\": 3, \"__proto__\": 4}";
result = safeParse(jsonWithProto); // result === null
result = safeParse(jsonWithProto, reviverFunc); // result === null
result = parse(jsonWithProto, undefined, { protoAction: "remove" }); // result === { a: 3 }
result = parse(jsonWithProto, reviverFunc, { protoAction: "remove" }); // result === { a: 6 }
try {
scan(JSON.parse(jsonWithProto));
tryResult = true;
} catch (error) {
tryResult = false;
} // tryResult === false;
const jsonWithNestedProto = "{\"a\": {\"__proto__\": 3}}";
result = safeParse(jsonWithNestedProto); // result === null
result = safeParse(jsonWithNestedProto, reviverFunc); // result === null
result = parse(jsonWithNestedProto, undefined, { protoAction: "remove" }); // result === { a: {} }
result = parse(jsonWithNestedProto, reviverFunc, { protoAction: "remove" }); // result === { a: {} }
try {
scan(JSON.parse(jsonWithNestedProto), { protoAction: "remove" });
tryResult = true;
} catch (error) {
tryResult = false;
} // tryResult === true;