From d220118dbd7a936942f0cd3db69bf03f39333d6c Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Tue, 13 Feb 2018 14:04:49 -0800 Subject: [PATCH] Freeze UTFSequence Summary: Don't want anyone accidentally mutating it. Also make deepFreezeAndThrowOnMutationInDev easier to use with nice flow typing. Reviewed By: yungsters Differential Revision: D6974089 fbshipit-source-id: 0f90e7939cb726893fa353a4f2a6bbba701205bc --- Libraries/UTFSequence.js | 6 ++++-- Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Libraries/UTFSequence.js b/Libraries/UTFSequence.js index 262dd4e9b..9286eed20 100644 --- a/Libraries/UTFSequence.js +++ b/Libraries/UTFSequence.js @@ -13,6 +13,8 @@ 'use strict'; +const deepFreezeAndThrowOnMutationInDev = require('deepFreezeAndThrowOnMutationInDev'); + /** * A collection of Unicode sequences for various characters and emoji. * @@ -20,7 +22,7 @@ * - Source code should be limitted to ASCII. * - Less chance of typos. */ -const UTFSequence = { +const UTFSequence = deepFreezeAndThrowOnMutationInDev({ MIDDOT: '\u00B7', // normal middle dot: · MIDDOT_SP: '\u00A0\u00B7\u00A0', //  ·  MIDDOT_KATAKANA: '\u30FB', // katakana middle dot @@ -30,6 +32,6 @@ const UTFSequence = { NDASH_SP: '\u00A0\u2013\u00A0', //  –  NBSP: '\u00A0', // non-breaking space:   PIZZA: '\uD83C\uDF55', -}; +}); module.exports = UTFSequence; diff --git a/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js b/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js index 9ab2cc4b1..4e651b110 100644 --- a/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +++ b/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js @@ -29,13 +29,13 @@ * Freezing the object and adding the throw mechanism is expensive and will * only be used in DEV. */ -function deepFreezeAndThrowOnMutationInDev(object: Object) { +function deepFreezeAndThrowOnMutationInDev(object: T): T { if (__DEV__) { if (typeof object !== 'object' || object === null || Object.isFrozen(object) || Object.isSealed(object)) { - return; + return object; } var keys = Object.keys(object); @@ -58,6 +58,7 @@ function deepFreezeAndThrowOnMutationInDev(object: Object) { } } } + return object; } function throwOnImmutableMutation(key, value) {