SimpleCache

A Map extended as a Cache. Optional KeyExtractor - Function, optional ValueTransformer - Functions, as well as an optional validityPeriod after which an entry is automatically going to be removed.

Tento skript by nemal byť nainštalovaný priamo. Je to knižnica pre ďalšie skripty, ktorú by mali používať cez meta príkaz // @require https://update.greasyfork.org/scripts/405143/815223/SimpleCache.js

// ==UserScript==
// @name         SimpleCache
// @namespace    hoehleg.userscripts.private
// @version      0.1
// @description  A Map extended as a Cache. Optional KeyExtractor - Function, optional ValueTransformer - Functions, as well as an optional validityPeriod after which an entry is automatically going to be removed.
// @author       Gerrit Höhle
//
// @grant        none
//
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
// ==/UserScript==

/* jshint esnext: true */
/* globals $, jQuery */
const SimpleCache = (() => {
    const cloneObject = (obj) => {
        if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) {
            return obj;
        }
        return jQuery.extend(true, {}, obj);
    };

    return class SimpleCache extends Map {
        constructor({ keyExtractor = k => k, setValueTransformer = v => cloneObject(v), getValueTransformer = v => cloneObject(v) } = {}) {
            super();
            Object.assign(this, { keyExtractor, setValueTransformer, getValueTransformer });
        }

        get(key) {
            const finalKey = this.keyExtractor(key);
            return this.getValueTransformer(super.get(finalKey));
        }

        set(key, value, validityPeriodMs = 0) {
            const finalKey = this.keyExtractor(key);
            super.set(finalKey, this.setValueTransformer(value));

            if (validityPeriodMs > 0) {
                setTimeout(() => this.delete(finalKey), validityPeriodMs);
            }
            return this;
        }

        has(key) {
            return super.has(this.keyExtractor(key));
        }

        delete(key) {
            return super.delete(this.keyExtractor(key));
        }
    };
})();