Tims-Chat/files_wcf/js/Bastelstu.be/Chat/LocalStorageEmulator.js

97 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-11-01
*
* 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
})