lru-object
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

lru-object

Javascript object with basic LRU functionalities, the idea of this small library is to use the Proxy API to create a Javascript Object with LRU behaviors without loosing the Syntactic Sugar of Object(e.g. spread and rest operations).

How to install

Install with npm.

npm i --save lru-object

Install with yarn

yarn add lru-object

Features

  1. LRU cache features will be applied invisibly:
import createLRUCache from 'lru-object';
 
const lru = createLRUCache<number, number>(3);
 
lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
// reached capacity
lru[4] = 4;
console.log({...lru});
// lru[1] is removed, current object { '2': 2, '3': 3, '4': 4 };

Please aware that the newly created Object {...lru} is nolonger a LRU cache but a plain javascript object.

  1. Keys will follow the least recently used sequence
import createLRUCache from 'lru-object';
 
const lru = createLRUCache<number, number>(3);
 
lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
// reached capacity
lru[4] = 4;
console.log(Object.keys(lru));
// keys will follow the priority: ['4', '3', '2'];
  1. Use it as normal object
import createLRUCache from 'lru-object';
 
const lru = createLRUCache<number, number>(3);
 
lru['one'] = 1;
lru['two'] = 2;
lru['three'] = 3;
// reached capacity
delete lru['three']
 
for(const [k, v] of Object.entries(lru)) {
    console.log(k, v);
}
 
for (const key in lru) {
    if (lru.hasOwnProperty(key)) {
    console.log(key);
    }
}

Things that are not working as expected

  1. Spread operator is not following the least recently used sequence
import createLRUCache from 'lru-object';
 
const lru = createLRUCache<number, number>(3);
 
lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
console.log({...lru});
// result: { '1': 1, '2': 2, '3': 3 };
// expected: { '3': 3, '2': 2, '1': 1 };

TODO

  1. Some options for the LRU cache
  2. Fix typescript issues
  3. ...

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.3
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 1.0.3
    0
  • 1.0.2
    0
  • 1.0.1
    0
  • 1.0.0
    0

Package Sidebar

Install

npm i lru-object

Weekly Downloads

0

Version

1.0.3

License

none

Unpacked Size

10.9 kB

Total Files

15

Last publish

Collaborators

  • muaohua