This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community. Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it. https://www.freifunk-altdorf.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.3 KiB

/**
* Copyright (c) 2018-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
import type {CacheStore} from 'metro-cache';
class Cache<T> {
_stores: $ReadOnlyArray<CacheStore<T>>;
_hits: WeakMap<Buffer, CacheStore<T>>;
constructor(stores: $ReadOnlyArray<CacheStore<T>>) {
this._hits = new WeakMap();
this._stores = stores;
}
async get(key: Buffer): Promise<?T> {
const stores = this._stores;
const length = stores.length;
for (let i = 0; i < length; i++) {
let value = stores[i].get(key);
if (value instanceof Promise) {
value = await value;
}
if (value != null) {
this._hits.set(key, stores[i]);
return value;
}
}
return null;
}
set(key: Buffer, value: T): void {
const stores = this._stores;
const stop = this._hits.get(key);
const length = stores.length;
const promises = [];
for (let i = 0; i < length && stores[i] !== stop; i++) {
promises.push(stores[i].set(key, value));
}
Promise.all(promises).catch(err => {
process.nextTick(() => {
throw err;
});
});
}
}
module.exports = Cache;