cacache
Advanced tools
Comparing version 8.0.0 to 9.0.0
@@ -5,2 +5,22 @@ # Change Log | ||
<a name="9.0.0"></a> | ||
# [9.0.0](https://github.com/zkat/cacache/compare/v8.0.0...v9.0.0) (2017-04-28) | ||
### Bug Fixes | ||
* **memoization:** actually use the LRU ([0e55dc9](https://github.com/zkat/cacache/commit/0e55dc9)) | ||
### Features | ||
* **memoization:** memoizers can be injected through opts.memoize (#90) ([e5614c7](https://github.com/zkat/cacache/commit/e5614c7)) | ||
### BREAKING CHANGES | ||
* **memoization:** If you were passing an object to opts.memoize, it will now be used as an injected memoization object. If you were only passing booleans and other non-objects through that option, no changes are needed. | ||
<a name="8.0.0"></a> | ||
@@ -7,0 +27,0 @@ # [8.0.0](https://github.com/zkat/cacache/compare/v7.1.0...v8.0.0) (2017-04-22) |
19
get.js
@@ -22,4 +22,4 @@ 'use strict' | ||
byDigest | ||
? memo.get.byDigest(cache, key) | ||
: memo.get(cache, key) | ||
? memo.get.byDigest(cache, key, opts) | ||
: memo.get(cache, key, opts) | ||
) | ||
@@ -50,5 +50,5 @@ if (memoized && opts.memoize !== false) { | ||
if (opts.memoize && byDigest) { | ||
memo.put.byDigest(cache, key, res) | ||
memo.put.byDigest(cache, key, res, opts) | ||
} else if (opts.memoize) { | ||
memo.put(cache, entry, res.data) | ||
memo.put(cache, entry, res.data, opts) | ||
} | ||
@@ -64,3 +64,3 @@ return res | ||
let stream = through() | ||
const memoized = memo.get(cache, key) | ||
const memoized = memo.get(cache, key, opts) | ||
if (memoized && opts.memoize !== false) { | ||
@@ -90,3 +90,3 @@ stream.on('newListener', function (ev, cb) { | ||
}, cb => { | ||
memoData && memo.put(cache, entry, Buffer.concat(memoData, memoLength)) | ||
memoData && memo.put(cache, entry, Buffer.concat(memoData, memoLength), opts) | ||
cb() | ||
@@ -118,3 +118,3 @@ }) | ||
opts = opts || {} | ||
const memoized = memo.get.byDigest(cache, integrity) | ||
const memoized = memo.get.byDigest(cache, integrity, opts) | ||
if (memoized && opts.memoize !== false) { | ||
@@ -137,3 +137,4 @@ const stream = through() | ||
integrity, | ||
Buffer.concat(memoData, memoLength) | ||
Buffer.concat(memoData, memoLength), | ||
opts | ||
) | ||
@@ -151,3 +152,3 @@ cb() | ||
opts = opts || {} | ||
const memoized = memo.get(cache, key) | ||
const memoized = memo.get(cache, key, opts) | ||
if (memoized && opts.memoize !== false) { | ||
@@ -154,0 +155,0 @@ return BB.resolve(memoized.entry) |
@@ -8,19 +8,21 @@ 'use strict' | ||
let MEMOIZED | ||
clearMemoized() | ||
let MEMOIZED = new LRU({ | ||
max: MAX_SIZE, | ||
maxAge: MAX_AGE, | ||
length: (entry, key) => { | ||
if (key.startsWith('key:')) { | ||
return entry.data.length | ||
} else if (key.startsWith('digest:')) { | ||
return entry.length | ||
} | ||
} | ||
}) | ||
module.exports.clearMemoized = clearMemoized | ||
function clearMemoized () { | ||
var old = MEMOIZED | ||
MEMOIZED = new LRU({ | ||
max: MAX_SIZE, | ||
maxAge: MAX_AGE, | ||
length: (entry, key) => { | ||
if (key.startsWith('key:')) { | ||
return entry.data.length | ||
} else if (key.startsWith('digest:')) { | ||
return entry.length | ||
} | ||
} | ||
const old = {} | ||
MEMOIZED.forEach((v, k) => { | ||
old[k] = v | ||
}) | ||
MEMOIZED.reset() | ||
return old | ||
@@ -30,20 +32,40 @@ } | ||
module.exports.put = put | ||
function put (cache, entry, data) { | ||
MEMOIZED[`key:${cache}:${entry.key}`] = { entry, data } | ||
putDigest(cache, entry.integrity, data) | ||
function put (cache, entry, data, opts) { | ||
pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data }) | ||
putDigest(cache, entry.integrity, data, opts) | ||
} | ||
module.exports.put.byDigest = putDigest | ||
function putDigest (cache, integrity, data) { | ||
MEMOIZED[`digest:${cache}:${integrity}`] = data | ||
function putDigest (cache, integrity, data, opts) { | ||
pickMem(opts).set(`digest:${cache}:${integrity}`, data) | ||
} | ||
module.exports.get = get | ||
function get (cache, key) { | ||
return MEMOIZED[`key:${cache}:${key}`] | ||
function get (cache, key, opts) { | ||
return pickMem(opts).get(`key:${cache}:${key}`) | ||
} | ||
module.exports.get.byDigest = getDigest | ||
function getDigest (cache, integrity) { | ||
return MEMOIZED[`digest:${cache}:${integrity}`] | ||
function getDigest (cache, integrity, opts) { | ||
return pickMem(opts).get(`digest:${cache}:${integrity}`) | ||
} | ||
class ObjProxy { | ||
constructor (obj) { | ||
this.obj = obj | ||
} | ||
get (key) { return this.obj[key] } | ||
set (key, val) { this.obj[key] = val } | ||
} | ||
function pickMem (opts) { | ||
if (!opts || !opts.memoize) { | ||
return MEMOIZED | ||
} else if (opts.memoize.get && opts.memoize.set) { | ||
return opts.memoize | ||
} else if (typeof opts.memoize === 'object') { | ||
return new ObjProxy(opts.memoize) | ||
} else { | ||
return MEMOIZED | ||
} | ||
} |
{ | ||
"name": "cacache", | ||
"version": "8.0.0", | ||
"version": "9.0.0", | ||
"cache-version": { | ||
@@ -5,0 +5,0 @@ "content": "2", |
@@ -16,3 +16,3 @@ 'use strict' | ||
if (opts.memoize) { | ||
memo.put(cache, entry, data) | ||
memo.put(cache, entry, data, opts) | ||
} | ||
@@ -53,3 +53,3 @@ return res.integrity | ||
if (opts.memoize) { | ||
memo.put(cache, entry, Buffer.concat(memoData, memoTotal)) | ||
memo.put(cache, entry, Buffer.concat(memoData, memoTotal), opts) | ||
} | ||
@@ -56,0 +56,0 @@ stream.emit('integrity', integrity) |
@@ -421,5 +421,5 @@ # cacache [![npm version](https://img.shields.io/npm/v/cacache.svg)](https://npm.im/cacache) [![license](https://img.shields.io/npm/l/cacache.svg)](https://npm.im/cacache) [![Travis](https://img.shields.io/travis/zkat/cacache.svg)](https://travis-ci.org/zkat/cacache) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/zkat/cacache?svg=true)](https://ci.appveyor.com/project/zkat/cacache) [![Coverage Status](https://coveralls.io/repos/github/zkat/cacache/badge.svg?branch=latest)](https://coveralls.io/github/zkat/cacache?branch=latest) | ||
There is no facility for limiting memory usage short of | ||
[`cacache.clearMemoized()`](#clear-memoized), so be mindful of the sort of data | ||
you ask to get memoized! | ||
If `opts.memoize` is an object or a `Map`-like (that is, an object with `get` | ||
and `set` methods), it will be written to instead of the global memoization | ||
cache. | ||
@@ -426,0 +426,0 @@ Reading from existing memoized data can be forced by explicitly passing |
68640
1109