You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

@pacote/memoize

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pacote/memoize - npm Package Compare versions

Comparing version

to
2.1.0

6

CHANGELOG.md

@@ -6,2 +6,8 @@ # Change Log

# [2.1.0](https://github.com/PacoteJS/pacote/compare/@pacote/memoize@2.0.2...@pacote/memoize@2.1.0) (2023-06-19)
### Features
- 🎸 clear() method and support for LRU caching ([be9cc4d](https://github.com/PacoteJS/pacote/commit/be9cc4d29f26eb4c0c8ef752183da21209947f01))
## [2.0.2](https://github.com/PacoteJS/pacote/compare/@pacote/memoize@2.0.1...@pacote/memoize@2.0.2) (2023-06-15)

@@ -8,0 +14,0 @@

8

lib/cjs/index.d.ts

@@ -0,3 +1,9 @@

export type Options = {
capacity?: number;
};
type Fn<A extends any[], R> = (...args: A) => R;
export declare function memoize<A extends any[], R>(cacheKeyFn: Fn<A, string>, fn: Fn<A, R>): Fn<A, R>;
type MemoizedFn<A extends any[], R> = Fn<A, R> & {
clear(): void;
};
export declare function memoize<A extends any[], K, V>(cacheKeyFn: Fn<A, K>, fn: Fn<A, V>, options?: Options): MemoizedFn<A, V>;
export {};

23

lib/cjs/index.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.memoize = void 0;
function createCache() {
var cache = new Map();
return {
has: function (key) { return cache.has(key); },
get: function (key) { return cache.get(key); },
set: function (key, value) { return cache.set(key, value); },
};
}
function memoize(cacheKeyFn, fn) {
var cache = createCache();
return function () {
var lru_cache_1 = require("@pacote/lru-cache");
function memoize(cacheKeyFn, fn, options) {
if (options === void 0) { options = {}; }
var cache = options.capacity
? new lru_cache_1.LRUCache(options.capacity)
: new Map();
var memoizedFn = function () {
var args = [];

@@ -26,4 +22,9 @@ for (var _i = 0; _i < arguments.length; _i++) {

};
return Object.assign(memoizedFn, {
clear: function () {
return cache.clear();
},
});
}
exports.memoize = memoize;
//# sourceMappingURL=index.js.map

@@ -0,3 +1,9 @@

export type Options = {
capacity?: number;
};
type Fn<A extends any[], R> = (...args: A) => R;
export declare function memoize<A extends any[], R>(cacheKeyFn: Fn<A, string>, fn: Fn<A, R>): Fn<A, R>;
type MemoizedFn<A extends any[], R> = Fn<A, R> & {
clear(): void;
};
export declare function memoize<A extends any[], K, V>(cacheKeyFn: Fn<A, K>, fn: Fn<A, V>, options?: Options): MemoizedFn<A, V>;
export {};

@@ -1,12 +0,7 @@

function createCache() {
const cache = new Map();
return {
has: (key) => cache.has(key),
get: (key) => cache.get(key),
set: (key, value) => cache.set(key, value),
};
}
export function memoize(cacheKeyFn, fn) {
const cache = createCache();
return (...args) => {
import { LRUCache } from '@pacote/lru-cache';
export function memoize(cacheKeyFn, fn, options = {}) {
const cache = options.capacity
? new LRUCache(options.capacity)
: new Map();
const memoizedFn = (...args) => {
const key = cacheKeyFn(...args);

@@ -19,3 +14,8 @@ if (!cache.has(key)) {

};
return Object.assign(memoizedFn, {
clear: () => {
return cache.clear();
},
});
}
//# sourceMappingURL=index.js.map
{
"name": "@pacote/memoize",
"description": "Memoization function.",
"version": "2.0.2",
"version": "2.1.0",
"sideEffects": false,

@@ -37,3 +37,6 @@ "license": "MIT",

},
"gitHead": "fbaede424db38eb61497d56835a012e23ab774f2"
"gitHead": "64a608b1b6d702f9f665381a2a70adaea131846d",
"dependencies": {
"@pacote/lru-cache": "^0.1.0"
}
}

@@ -0,20 +1,23 @@

import { LRUCache } from '@pacote/lru-cache'
export type Options = {
capacity?: number
}
type Fn<A extends any[], R> = (...args: A) => R
function createCache<R>() {
const cache = new Map<string, R>()
return {
has: (key: string) => cache.has(key),
get: (key: string) => cache.get(key),
set: (key: string, value: R) => cache.set(key, value),
}
type MemoizedFn<A extends any[], R> = Fn<A, R> & {
clear(): void
}
export function memoize<A extends any[], R>(
cacheKeyFn: Fn<A, string>,
fn: Fn<A, R>
): Fn<A, R> {
const cache = createCache<R>()
export function memoize<A extends any[], K, V>(
cacheKeyFn: Fn<A, K>,
fn: Fn<A, V>,
options: Options = {}
): MemoizedFn<A, V> {
const cache = options.capacity
? new LRUCache<K, V>(options.capacity)
: new Map<K, V>()
return (...args) => {
const memoizedFn: Fn<A, V> = (...args: A) => {
const key = cacheKeyFn(...args)

@@ -29,2 +32,8 @@

}
return Object.assign(memoizedFn, {
clear: () => {
return cache.clear()
},
})
}

@@ -18,1 +18,24 @@ import { assert, property, func, string, anything } from 'fast-check'

})
test('clear memoize cache', () => {
const mockFn = jest.fn()
const memoizedFn = memoize(() => '_', mockFn)
memoizedFn()
memoizedFn.clear()
memoizedFn()
expect(mockFn).toHaveBeenCalledTimes(2)
})
test('evict LRU calls', () => {
const mockFn = jest.fn()
const memoizedFn = memoize((n) => n, mockFn, { capacity: 1 })
memoizedFn(1)
memoizedFn(2)
memoizedFn(1)
expect(mockFn).toHaveBeenCalledTimes(3)
expect(mockFn).toHaveBeenLastCalledWith(1)
})

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet