1
0
mirror of https://github.com/wbbaddons/Tims-Chat.git synced 2024-11-19 17:00:08 +00:00
Tims-Chat/files_wcf/js/Bastelstu.be/Chat/LocalStorageEmulator.js
2018-11-27 20:53:30 +01:00

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: 2022-11-27
*
* 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
});