You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-09-01 21:21:58 +03:00
Pass a store implementation rather than kind string.
Makes it easier to test.
This commit is contained in:
@@ -111,30 +111,32 @@
|
|||||||
* @module store/webstorage
|
* @module store/webstorage
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var utils = require("../utils");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a web storage store, capable of storing rooms and users.
|
* Construct a web storage store, capable of storing rooms and users.
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {string} kind The kind of storage. Either 'local' or 'session'.
|
* @param {WebStorage} store A web storage implementation, e.g.
|
||||||
|
* 'window.localStorage' or 'window.sessionStorage' or a custom implementation.
|
||||||
* @param {integer} batchSize The number of events to store per key/value (room
|
* @param {integer} batchSize The number of events to store per key/value (room
|
||||||
* scoped). Use -1 to store all events for a room under one key/value.
|
* scoped). Use -1 to store all events for a room under one key/value.
|
||||||
* @throws if the global 'localStorage' does not exist and kind='local', or the
|
* @throws if the supplied 'store' does not meet the Storage interface of the
|
||||||
* global 'sessionStorage' does not exist and kind='session', or kind is not
|
* WebStorage API.
|
||||||
* 'local' or 'session'.
|
|
||||||
*/
|
*/
|
||||||
function WebStorageStore(kind, batchSize) {
|
function WebStorageStore(store, batchSize) {
|
||||||
if (["local", "session"].indexOf(kind) === -1) {
|
this.store = store;
|
||||||
throw new Error("Invalid kind: " + kind);
|
|
||||||
}
|
|
||||||
if (kind === "local" && !global.localStorage ||
|
|
||||||
kind === "session" && !global.sessionStorage) {
|
|
||||||
throw new Error("Global for " + kind + " storage not found.");
|
|
||||||
}
|
|
||||||
var stores = {
|
|
||||||
local: global.localStorage,
|
|
||||||
session: global.sessionStorage
|
|
||||||
};
|
|
||||||
this.store = stores[kind];
|
|
||||||
this.batchSize = batchSize;
|
this.batchSize = batchSize;
|
||||||
|
if (!utils.isFunction(store.getItem) || !utils.isFunction(store.setItem) ||
|
||||||
|
!utils.isFunction(store.removeItem) || !utils.isFunction(store.key)) {
|
||||||
|
throw new Error(
|
||||||
|
"Supplied store does not meet the WebStorage API interface"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!parseInt(store.length) && store.length !== 0) {
|
||||||
|
throw new Error(
|
||||||
|
"Supplied store does not meet the WebStorage API interface (length)"
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WebStorageStore.prototype = {
|
WebStorageStore.prototype = {
|
||||||
|
Reference in New Issue
Block a user