2024-02-29 09:14:04 -05:00
'use strict'
let valuesMap = new Map ( )
class LocalStorage {
getItem ( key ) {
const stringKey = String ( key )
if ( valuesMap . has ( key ) ) {
return String ( valuesMap . get ( stringKey ) )
}
return null
}
setItem ( key , val ) {
valuesMap . set ( String ( key ) , String ( val ) )
}
removeItem ( key ) {
valuesMap . delete ( key )
}
clear ( ) {
valuesMap . clear ( )
}
key ( i ) {
if ( arguments . length === 0 ) {
throw new TypeError ( "Failed to execute 'key' on 'Storage': 1 argument required, but only 0 present." ) // this is a TypeError implemented on Chrome, Firefox throws Not enough arguments to Storage.key.
}
var arr = Array . from ( valuesMap . keys ( ) )
return arr [ i ]
}
get length ( ) {
return valuesMap . size
}
initValuesMap ( _valuesMap ) {
valuesMap = new Map ( Object . entries ( _valuesMap || { } ) )
}
getValuesMap ( ) {
return Object . fromEntries ( valuesMap ) ;
}
}
const instance = new LocalStorage ( )
2024-08-03 03:15:20 -04:00
globalThis . zeroLocalStorage = new Proxy ( instance , {
set : function ( obj , prop , value ) {
if ( LocalStorage . prototype . hasOwnProperty ( prop ) ) {
instance [ prop ] = value
} else {
instance . setItem ( prop , value )
}
return true
} ,
get : function ( target , name ) {
if ( LocalStorage . prototype . hasOwnProperty ( name ) ) {
return instance [ name ]
}
if ( valuesMap . has ( name ) ) {
return instance . getItem ( name )
2024-02-29 09:14:04 -05:00
}
2024-08-03 03:15:20 -04:00
}
} )
if ( ! globalThis . localStorage ) {
globalThis . localStorage = globalThis . zeroLocalStorage ;
2024-03-23 00:58:16 -04:00
}