Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

quiCache

An in-memory key-value cache for Javascript and Typescript applications

Install

Yarn

yarn add quiCache

NPM

npm i --save quiCache

Introduction

QuiCache is an in-memory caching solution for Javascript and Typescript applications. It relies only on the date-fns package, meaning that it should be compatible with every major JS environment out there.

QuiCache provides a key-value structure for data to be stored in. When adding data to the cache, you specify the key, and the data as arguments to setCacheData(), and quiCache handles everything else. When reading data from the cache, simply provide the key to getCacheData().

API / Documentation

See the docs folder for full details. Usage examples can be found at the bottom of the readme.

Version 3.0

Version 3 now provides support for Typescript generics.

This means that data returned from the following methods will infer type data:

  • onCacheDataAdd
  • onCacheDataAccessed
  • onCacheDataDelete
  • onCacheDataExpired
  • onCacheDataAlreadyExists
  • getCacheData
  • setCacheData
  • getAllCachedData
  • deleteCacheData

Due to this, when creating a cache instance with new QuiCache(), you must also define the data type you're returning if you're fully typing it:

interface IMyDataInterface {
aString: string;
aNumber: number;
aBoolean: boolean;
}
const MyCache: ICacheManager<IMyDataInterface> = new QuiCache({
cacheName: "MyCache",
cacheMaxAgeInSeconds: 30
});

You can still create and manage your cache in the same way if you're not specifying the type ICacheManager, but type data may not be returned.

This change doesn't prevent your ability to store data of any type in an individual cache field, but merely enhances the developer experience if you use 1 cache for data which follows a specific interface.

No other changes beyond those in 2.0 are required to be compatible with QuiCache 3.0.

Version 2.0

Version 2 has completely overhauled the library, and is mostly incompatible with prior versions (due to changes to the constructor method and several methods being removed).

The changes made should drastically simplify working with the library and provide a nicer developer experience.

  • A new method, deleteCacheData(), has been added to allow deletion of any cached data by providing it's field name / key
  • The concept of expired and non-expired data no longer exists - Cache data now automatically deletes when it expires
  • New optional callbacks in the constructor method have been aded: onCacheDataAdd, onCacheDataDelete, onCacheDataExpired, onCacheDataAlreadyExists
  • Version 2.1.2 has added some new optional callback:
    • onCacheDataAccessed - this will trigger when a field is accessed in the cache
    • onCacheDataDoesNotAlreadyExist - this will trigger if the specified field is not found in the cache when calling setCacheData, deleteCacheData
  • Enabling and disabling debug has been removed due to addition of callbacks
  • You can now provide a name to your cache, which can be useful for the callbacks
  • Methods to allow changing the cache age and name have been added
  • As of version 2.0.2 map is now used for storing data (instead of an object), meaning it is possible to set keys/fields of any type (instead of just string)
    • At this time, only strings and numbers are accepted as keys, but supporting all primitive types is planned for a future release

Further notes on version 2.0

  • The constructor now expects an object with params/arguments
  • You can only specify a cache maximum age value in seconds (e.g. 120 = 2 minutes), and it is no longer possible to specify the unit of time
  • If a key already exists in the cache, it's data will not be overwritten when calling setCacheData()
  • It is possible to update the cache max age after creation by calling setCacheMaxAge() and passing a value
    • Values which were added to the cache before this method is called are not affected and will be removed at the end of the originally intended expiry time

Interfaces

The following interfaces and enums are exported from quicache to assist in development;

ICacheManagerDataCache
ICacheManager

Example

importquicache,{ICacheManager}from"quicache";// Create an interface for your datainterfaceIMyInterface{aString: string;aBoolean: boolean;aNumber: number;anOptionalString?: string;}// Initialize the cache with your interfaceconstmyCache: ICacheManager<IMyInterface>=newquicache({cacheName: "MyCache",cacheMaxAgeInSeconds: 30,onCacheDataExpired: (data)=>console.log(`Field ${data.field} expired in cache ${data.cacheName}`),onCacheDataAdd: (data)=>console.log(`Field ${data.field} added to cache ${data.cacheName}`),onCacheDataAlreadyExists: (data)=>{console.log(`Field ${data.field} already exists in cache ${data.cacheName}, and expires in ${data.expires} seconds`);},});constcacheKey="testData";// If the data doesn't exist in the cache, we'll create itif(!myCache.cacheDataExists(cacheKey)){try{constdataToSetInCache={aString: "ABC",aBoolean: true,aNumber: 123,};// setCacheData returns the timestamp and data that it inserts into the cachereturnmyCache.setCacheData(cacheKey,dataToSetInCache).data;}catch(err){returnerr;}}else{// Data exists in cache, so we'll return it// getCacheData returns the timestamp and dataconstcachedata=myCache.getCacheData(cacheKey);returncachedata.data;}

Author(s)

👤 Scott Pritchard (Github

About

A simple key-value cache for Javascript applications

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages