mirror of
https://github.com/wbbaddons/Tims-Chat.git
synced 2024-11-12 15:50:08 +00:00
90 lines
2.1 KiB
JavaScript
90 lines
2.1 KiB
JavaScript
/*
|
|
* Copyright (c) 2010-2018 Tim Düsterhus.
|
|
*
|
|
* Use of this software is governed by the Business Source License
|
|
* included in the LICENSE file.
|
|
*
|
|
* Change Date: 2024-10-20
|
|
*
|
|
* On the date above, in accordance with the Business Source
|
|
* License, use of this software will be governed by version 2
|
|
* or later of the General Public License.
|
|
*/
|
|
|
|
define([ ], function () {
|
|
'use strict';
|
|
|
|
class LocalStorageEmulator {
|
|
constructor () {
|
|
this._data = new Map()
|
|
return new Proxy(this, {
|
|
get(target, property) {
|
|
// Check if the property exists on the object or its prototype
|
|
if (target.hasOwnProperty(property) || Object.getPrototypeOf(target)[property]) {
|
|
return target[property]
|
|
}
|
|
|
|
// Otherwise proxy to the underlying map
|
|
return target.getItem(property)
|
|
},
|
|
set(target, property, value) {
|
|
// Check if the property exists on the object or its prototype
|
|
if (target.hasOwnProperty(property) || Object.getPrototypeOf(target)[property]) {
|
|
target[property] = value
|
|
}
|
|
else {
|
|
// Proxy to the underlying map
|
|
target.setItem(property, value)
|
|
}
|
|
},
|
|
has(target, property) {
|
|
return target.hasOwnProperty(property) // check the properties of the object
|
|
|| Object.getPrototypeOf(target)[property] // check its prototype
|
|
|| target._data.has(property) // check the underlying map
|
|
},
|
|
ownKeys(target) {
|
|
// Proxy to the underlying map
|
|
return Array.from(target._data.keys())
|
|
},
|
|
getOwnPropertyDescriptor(target, property) {
|
|
// Make the properties of the map visible
|
|
return {
|
|
enumerable: true,
|
|
configurable: true
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
get length() {
|
|
return this._data.size
|
|
}
|
|
|
|
key(n = 0) {
|
|
return Array.from(this._data.keys())[n]
|
|
}
|
|
|
|
getItem(key) {
|
|
return this._data.get(key)
|
|
}
|
|
|
|
setItem(key, value) {
|
|
this._data.set(key, value)
|
|
}
|
|
|
|
removeItem(key) {
|
|
this._data.delete(key)
|
|
}
|
|
|
|
clear() {
|
|
this._data.clear()
|
|
}
|
|
|
|
* [Symbol.iterator]() {
|
|
yield * this._data.values()
|
|
}
|
|
}
|
|
|
|
return LocalStorageEmulator
|
|
});
|