Protecting agains JSON serialization

by Arnaud Buchholz

TypeScript

const protectAgainstJSONSerialization = <T extends object>(value: T): T => {
  Object.assign(value, { toJSON: () => { throw new Error('Forbidden'); } });
  return value;
}

const referenceObject = { hello: 'World !' };
console.log(JSON.stringify(referenceObject));

protectAgainstJSONSerialization(referenceObject);

try {
  console.log(JSON.stringify(referenceObject));
  throw new Error('Unexpected');
} catch (error) {
  console.log('Explicit JSON.stringify :', error.message);
}

try {
  console.log(JSON.stringify({ object: referenceObject }));
  throw new Error('Unexpected');
} catch (error) {
  console.log('Nested JSON.stringify :', error.message);
}