export class LocalStorage  {
    constructor() {
        Object.defineProperty(this, "getItem", {
            enumerable: false,
            value: jest.fn((key) => {return this[key] || null })

        });
        Object.defineProperty(this, "setItem", {
            enumerable: false,
            value: jest.fn((key, val = '') => {
                this[key] = val + '';
            })
        });
        Object.defineProperty(this, "removeItem", {
            enumerable: false,
            value: jest.fn((key) => {
                delete this[key];
            })
        });
        Object.defineProperty(this, "clear", {
            enumerable: false,
            value: jest.fn(() => {
                Object.keys(this).map(key => delete this[key]);

            })
        });
        Object.defineProperty(this, "toString", {
            enumerable: false,
            value: jest.fn(() => {
                return "[object Storage]"

            })
        });
        Object.defineProperty(this, "key", {
            enumerable: false,
            value: jest.fn((idx) => {
                return Object.keys(this)[idx] || null
            })
        });

    } // end constructor

    get length() {
        return Object.keys(this).length
    }

    get __STORE__() {
        return this
    }

}


@@ -19,21 +19,18 @@
 Storage 
- 
 %7B%0A
-  
   constr
@@ -35,24 +35,24 @@
 tructor(
+jest
 ) %7B%0A
-    
     Obje
@@ -79,27 +79,21 @@
 is, 
-%22
+'
 getItem
-%22
+'
 , %7B%0A
-      
     
@@ -111,38 +111,32 @@
 e: false,%0A      
-      
 value: jest.fn((
@@ -138,24 +138,14 @@
 .fn(
-(
 key
-)
  =%3E
- %7Breturn
  thi
@@ -162,29 +162,19 @@
 null
- %7D)%0A%0A  
+),%0A
     
-  
 %7D);%0A
-    
     
@@ -205,27 +205,21 @@
 is, 
-%22
+'
 setItem
-%22
+'
 , %7B%0A
-      
     
@@ -237,32 +237,100 @@
 e: false,%0A      
+// not mentioned in the spec, but we must always coerce to a string%0A
       value: jes
@@ -351,32 +351,24 @@
  = '') =%3E %7B%0A
-        
         this
@@ -387,37 +387,28 @@
 + '';%0A      
-      %7D)%0A    
+%7D),%0A
     %7D);%0A    
@@ -399,36 +399,32 @@
 %7D),%0A    %7D);%0A    
-    
 Object.definePro
@@ -435,17 +435,17 @@
 y(this, 
-%22
+'
 removeIt
@@ -446,27 +446,21 @@
 moveItem
-%22
+'
 , %7B%0A
-      
       en
@@ -468,38 +468,32 @@
 merable: false,%0A
-      
       value: jes
@@ -501,13 +501,11 @@
 .fn(
-(
 key
-)
  =%3E 
@@ -514,24 +514,16 @@
         
-        
 delete t
@@ -542,33 +542,20 @@
     
-      %7D)%0A 
+%7D),%0A
     
-   
 %7D);%0A
-    
     
@@ -586,15 +586,15 @@
 is, 
-%22
+'
 clear
-%22
+'
 , %7B%0A
@@ -591,38 +591,32 @@
 clear', %7B%0A      
-      
 enumerable: fals
@@ -616,38 +616,32 @@
 e: false,%0A      
-      
 value: jest.fn((
@@ -655,24 +655,16 @@
         
-        
 Object.k
@@ -707,40 +707,26 @@
 %5D);%0A
-%0A     
       
- 
 %7D)
+,
 %0A
-   
     
- 
 %7D);%0A
-    
     
@@ -757,17 +757,17 @@
 is, 
-%22
+'
 toString
 %22, %7B
@@ -762,27 +762,21 @@
 toString
-%22
+'
 , %7B%0A
-      
       en
@@ -790,38 +790,32 @@
 e: false,%0A      
-      
 value: jest.fn((
@@ -833,24 +833,16 @@
     
-        
 return 
-%22
+'
 %5Bobj
@@ -857,42 +857,29 @@
 age%5D
-%22%0A%0A            %7D)%0A  
+';%0A      %7D),%0A
     
-  
 %7D);%0A
-    
     
@@ -910,13 +910,13 @@
 is, 
-%22key%22
+'key'
 , %7B%0A
@@ -921,22 +921,16 @@
 %7B%0A      
-      
 enumerab
@@ -946,22 +946,16 @@
 ,%0A      
-      
 value: j
@@ -965,41 +965,14 @@
 .fn(
-(
 idx
-)
  =%3E
- %7B%0A                return
  Obj
@@ -1002,39 +1002,19 @@
 null
-%0A            %7D)%0A  
+),%0A
     
-  
 %7D);%0A
-%0A  
   %7D 
@@ -1033,18 +1033,16 @@
 ructor%0A%0A
-  
   get le
@@ -1046,28 +1046,24 @@
  length() %7B%0A
-    
     return O
@@ -1089,18 +1089,47 @@
 ngth
+;
 %0A
-  
   %7D%0A
-%0A
   
+// for backwards compatibility%0A
   ge
@@ -1144,28 +1144,24 @@
 E__() %7B%0A    
-    
 return this%0A
@@ -1163,15 +1163,12 @@
 this
+;
 %0A
-  
   %7D%0A
-%0A
 %7D%0A
-%0A

add comments; run prettier