-
-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Require Node.js 8, add TypeScript definition (#11)
- Loading branch information
1 parent
01f18dd
commit 99cf7d4
Showing
6 changed files
with
107 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
export interface Options { | ||
/** | ||
* The maximum number of items before evicting the least recently used items. | ||
*/ | ||
readonly maxSize: number; | ||
} | ||
|
||
declare class QuickLRU<KeyType extends unknown, ValueType extends unknown> | ||
implements Iterable<[KeyType, ValueType]> { | ||
/** | ||
* The stored item count. | ||
*/ | ||
readonly size: number; | ||
|
||
/** | ||
* Simple ["Least Recently Used" (LRU) cache](https://en.m.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_.28LRU.29). | ||
* | ||
* The instance is [`iterable`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols) so you can use it directly in a [`for…of`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of) loop. | ||
*/ | ||
constructor(options: Options); | ||
|
||
[Symbol.iterator](): IterableIterator<[KeyType, ValueType]>; | ||
|
||
/** | ||
* Set an item. | ||
* | ||
* @returns The list instance. | ||
*/ | ||
set(key: KeyType, value: ValueType): this; | ||
|
||
/** | ||
* Get an item. | ||
* | ||
* @returns The stored item or `undefined`. | ||
*/ | ||
get(key: KeyType): ValueType | undefined; | ||
|
||
/** | ||
* Check if an item exists. | ||
*/ | ||
has(key: KeyType): boolean; | ||
|
||
/** | ||
* Get an item without marking it as recently used. | ||
* | ||
* @returns The stored item or `undefined`. | ||
*/ | ||
peek(key: KeyType): ValueType | undefined; | ||
|
||
/** | ||
* Delete an item. | ||
* | ||
* @returns `true` if the item is removed or `false` if the item doesn't exist. | ||
*/ | ||
delete(key: KeyType): boolean; | ||
|
||
/** | ||
* Delete all items. | ||
*/ | ||
clear(): void; | ||
|
||
/** | ||
* Iterable for all the keys. | ||
*/ | ||
keys(): IterableIterator<KeyType>; | ||
|
||
/** | ||
* Iterable for all the values. | ||
*/ | ||
values(): IterableIterator<ValueType>; | ||
} | ||
|
||
export default QuickLRU; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -112,3 +112,4 @@ class QuickLRU { | |
} | ||
|
||
module.exports = QuickLRU; | ||
module.exports.default = QuickLRU; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import {expectType} from 'tsd-check'; | ||
import QuickLRU from '.'; | ||
|
||
const lru = new QuickLRU<string, number>({maxSize: 1000}); | ||
|
||
expectType<QuickLRU<string, number>>(lru.set('🦄', 1).set('🌈', 2)); | ||
expectType<number | undefined>(lru.get('🦄')); | ||
expectType<boolean>(lru.has('🦄')); | ||
expectType<number | undefined>(lru.peek('🦄')); | ||
expectType<boolean>(lru.delete('🦄')); | ||
expectType<void>(lru.clear()); | ||
expectType<number>(lru.size); | ||
|
||
for (const [key, value] of lru) { | ||
expectType<string>(key); | ||
expectType<number>(value); | ||
} | ||
|
||
for (const key of lru.keys()) { | ||
expectType<string>(key); | ||
} | ||
|
||
for (const value of lru.values()) { | ||
expectType<number>(value); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -90,7 +90,7 @@ Iterable for all the values. | |
|
||
#### .size | ||
|
||
Get the item count. | ||
The stored item count. | ||
|
||
|
||
## License | ||
|