Skip to content

Commit

Permalink
Merge pull request #27 from osdevisnot/modernize
Browse files Browse the repository at this point in the history
Revamp Build Infra for tiny-lru
  • Loading branch information
avoidwork authored Sep 27, 2019
2 parents 0f779b4 + bd366fc commit 6641496
Show file tree
Hide file tree
Showing 17 changed files with 4,734 additions and 3,843 deletions.
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules/*
.idea/*
node_modules
.idea
*.tgz
13 changes: 0 additions & 13 deletions .npmignore

This file was deleted.

97 changes: 0 additions & 97 deletions Gruntfile.js

This file was deleted.

13 changes: 0 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,6 @@ const memoized = _.memoize(myFunc);
memoized.cache.max = 10;
```


For usage with webpack, you can `import lru from 'tiny-lru/lib/tiny-lru.es5'` or create an [alias](https://webpack.js.org/configuration/resolve/#resolve-alias):
```javascript
resolve: {
alias: {
'tiny-lru': 'tiny-lru/lib/tiny-lru.es5.js'
}
}

// This should work now
import lru from 'tiny-lru';
```

## clear
### Method

Expand Down
151 changes: 151 additions & 0 deletions lib/tiny-lru.cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
'use strict';

class LRU {
constructor (max = 0, ttl = 0) {
this.first = null;
this.items = {};
this.last = null;
this.max = max;
this.size = 0;
this.ttl = ttl;
}

has (key) {
return key in this.items;
}

clear () {
this.first = null;
this.items = {};
this.last = null;
this.size = 0;

return this;
}

delete (key) {
if (this.has(key)) {
const item = this.items[key];

delete this.items[key];
this.size--;

if (item.prev !== null) {
item.prev.next = item.next;
}

if (item.next !== null) {
item.next.prev = item.prev;
}

if (this.first === item) {
this.first = item.next;
}

if (this.last === item) {
this.last = item.prev;
}
}

return this;
}

evict () {
const item = this.first;

delete this.items[item.key];
this.first = item.next;
this.first.prev = null;
this.size--;

return this;
}

get (key) {
let result;

if (this.has(key)) {
const item = this.items[key];

if (this.ttl > 0 && item.expiry <= new Date().getTime()) {
this.delete(key);
} else {
result = item.value;
this.set(key, result, true);
}
}

return result;
}

keys () {
return Object.keys(this.items);
}

set (key, value, bypass = false) {
let item;

if (bypass || this.has(key)) {
item = this.items[key];
item.value = value;

if (this.last !== item) {
const last = this.last,
next = item.next,
prev = item.prev;

if (this.first === item) {
this.first = item.next;
}

item.next = null;
item.prev = this.last;
last.next = item;

if (prev !== null) {
prev.next = next;
}

if (next !== null) {
next.prev = prev;
}
}
} else {
if (this.max > 0 && this.size === this.max) {
this.evict();
}

item = this.items[key] = {
expiry: this.ttl > 0 ? new Date().getTime() + this.ttl : this.ttl,
key: key,
prev: this.last,
next: null,
value
};

if (++this.size === 1) {
this.first = item;
} else {
this.last.next = item;
}
}

this.last = item;

return this;
}
}

function factory (max = 1000, ttl = 0) {
if (isNaN(max) || max < 0) {
throw new TypeError("Invalid max value");
}

if (isNaN(ttl) || ttl < 0) {
throw new TypeError("Invalid ttl value");
}

return new LRU(max, ttl);
}

module.exports = factory;
14 changes: 0 additions & 14 deletions lib/tiny-lru.d.ts

This file was deleted.

Loading

0 comments on commit 6641496

Please sign in to comment.