File tree Expand file tree Collapse file tree 2 files changed +23
-0
lines changed
packages/relay-runtime/util Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -53,4 +53,10 @@ describe('deepFreeze()', () => {
53
53
it ( 'copes with null values' , ( ) => {
54
54
expect ( deepFreeze ( { a : null } ) ) . toBeFrozen ( ) ;
55
55
} ) ;
56
+
57
+ it ( 'does not throw on array buffers' , ( ) => {
58
+ const x = new Uint16Array ( [ 21 , 31 ] ) ;
59
+ expect ( ( ) => deepFreeze ( x ) ) . not . toThrow ( ) ;
60
+ expect ( ( ) => deepFreeze ( { x} ) ) . not . toThrow ( ) ;
61
+ } ) ;
56
62
} ) ;
Original file line number Diff line number Diff line change 18
18
* returns the now-frozen original object.
19
19
*/
20
20
function deepFreeze < T : { ...} > (object: T): T {
21
+ if ( ! shouldBeFrozen ( object ) ) {
22
+ return object ;
23
+ }
21
24
Object . freeze ( object ) ;
22
25
Object . getOwnPropertyNames ( object ) . forEach ( name => {
23
26
const property = object [ name ] ;
@@ -32,4 +35,18 @@ function deepFreeze<T: {...}>(object: T): T {
32
35
return object ;
33
36
}
34
37
38
+ function shouldBeFrozen ( value : mixed ) : boolean {
39
+ // Primitives and functions:
40
+ if ( value === null || typeof value !== 'object' ) {
41
+ return false ;
42
+ }
43
+
44
+ // Views on array buffers cannot be frozen
45
+ if ( ArrayBuffer . isView ( value ) ) {
46
+ return false ;
47
+ }
48
+
49
+ return true ;
50
+ }
51
+
35
52
module . exports = deepFreeze ;
You can’t perform that action at this time.
0 commit comments