Comparing version
194
index.js
'use strict'; | ||
module.exports = function(){ | ||
this.cache = Object.create(null); | ||
module.exports = class Cache { | ||
/** | ||
* Конструктор | ||
* | ||
* @param object setting Настройки | ||
*/ | ||
constructor (setting) { | ||
setting = setting || {}; | ||
this.storage = Object.create(null); | ||
if (!('prolong' in setting)) { | ||
setting.prolong = true; | ||
} | ||
if (!('expires' in setting)) { | ||
setting.expires = 60; | ||
} | ||
this.prolong = setting.prolong === true; | ||
this.expires = parseInt(setting.expires); | ||
} | ||
/** | ||
* Проверяет элемент на наличие | ||
* Проверяет наличие кэша | ||
* | ||
@@ -13,91 +33,105 @@ * @param string key | ||
*/ | ||
this.has = (key) => { | ||
return !!this.cache[key]; | ||
}; | ||
has (key) { | ||
return key in this.storage; | ||
} | ||
/** | ||
* Удаляет ключ | ||
* Возвращает ключи | ||
* | ||
* @param string key | ||
* @return array | ||
*/ | ||
this._remove = (key) => { | ||
return () => { | ||
this.remove(key); | ||
}; | ||
}; | ||
keys () { | ||
return Object.keys(this.storage); | ||
} | ||
/** | ||
* Устанавливает ключ | ||
* Устанавливает значение | ||
* | ||
* @param string key | ||
* @param integer time | ||
* @param mixed value | ||
* @param string key | ||
* @param object params | ||
* | ||
* @return object | ||
* @return mixed | ||
*/ | ||
this.set = (key,time,value,fn) => { | ||
set (key,params) { | ||
if (typeof key === 'object') { | ||
params = key; | ||
key = params.key; | ||
} | ||
this.remove(key); | ||
if (!value) { | ||
value = time; | ||
time = 60; | ||
if (!('expires' in params)) { | ||
params.expires = this.expires; | ||
} | ||
time *= 1000; | ||
params.expires *= 1000; | ||
this.cache[key] = { | ||
timeout: setTimeout(this._remove(key),time), | ||
time: time, | ||
value: value, | ||
clear: fn | ||
var store = this.storage[key] = { | ||
value: params.value, | ||
expires: params.expires, | ||
timeout: this._remove(key,params.expires) | ||
}; | ||
return this.cache[key].value; | ||
}; | ||
if ('remove' in params) { | ||
store.remove = params.remove; | ||
} | ||
return store.value; | ||
} | ||
/** | ||
* Обновляет ключ | ||
* Получает значение из кэша | ||
* | ||
* @param string key | ||
* @param object params | ||
* | ||
* @return boolean | ||
* @return mixed | ||
*/ | ||
this.update = (key) => { | ||
if (!this.has(key)) { | ||
return false; | ||
get (key,params) { | ||
if (typeof key === 'object') { | ||
params = key; | ||
key = params.key; | ||
} | ||
var cache = this.cache[key]; | ||
if (this.has(key)) { | ||
if (('update' in params && params.update === true) || this.prolong) { | ||
this.update(); | ||
clearTimeout(cache.timeout); | ||
cache.timeout = setTimeout(this._remove(key),cache.time); | ||
delete params.update; | ||
} | ||
return true; | ||
}; | ||
return this.storage[key].value; | ||
} | ||
if ('default' in params && params.default === true) { | ||
return params.value || null; | ||
} | ||
return this.set(key,params); | ||
} | ||
/** | ||
* Возвращает ключ | ||
* Обновляет таймер | ||
* | ||
* @param string key | ||
* @param mixed value | ||
* @param integer time | ||
* @param string key | ||
* | ||
* @return mixed | ||
* @return boolean | ||
*/ | ||
this.get = (key,value,time,fn) => { | ||
update (key) { | ||
if (!this.has(key)) { | ||
if (!!time) { | ||
this.set(key,time,value,fn); | ||
} | ||
return value || null; | ||
return false; | ||
} | ||
this.update(key); | ||
var store = this.storage[key]; | ||
return this.cache[key].value; | ||
}; | ||
clearTimeout(store.timeout); | ||
store.timeout = this._remove(key,store.expires); | ||
return true; | ||
} | ||
/** | ||
* Удаляет ключ | ||
* Удаляет значение из кэша | ||
* | ||
@@ -108,3 +142,3 @@ * @param string key | ||
*/ | ||
this.remove = (key) => { | ||
remove (key) { | ||
if (!this.has(key)) { | ||
@@ -114,36 +148,44 @@ return false; | ||
let cache = this.cache[key]; | ||
var store = this.storage[key]; | ||
clearInterval(cache.timeout); | ||
clearTimeout(store.timeout); | ||
if (cache.clear) { | ||
cache.clear(); | ||
if ('remove' in store) { | ||
store.remove(key,store.value); | ||
} | ||
delete this.cache[key]; | ||
delete this.storage[key]; | ||
return true; | ||
}; | ||
} | ||
/** | ||
* Возвращает список ключей | ||
* Очищает полностью кэш | ||
* | ||
* @return array | ||
* @return this | ||
*/ | ||
this.keys = () => { | ||
return Object.keys(this.cache); | ||
}; | ||
clear () { | ||
for (var key in this.storage) { | ||
this.remove(key); | ||
} | ||
return this; | ||
} | ||
/** | ||
* Очищает хранилище | ||
* Возвращает setTimeout для удаления ключа | ||
* | ||
* @return object | ||
* @param string key | ||
* @param object params | ||
* | ||
* @return mixed | ||
*/ | ||
this.clear = () => { | ||
for (let key in this.cache) { | ||
this.remove(key); | ||
} | ||
return this; | ||
}; | ||
_remove (key,expires) { | ||
return setTimeout( | ||
() => { | ||
this.remove(key); | ||
}, | ||
expires | ||
); | ||
} | ||
}; |
{ | ||
"name": "cache-io", | ||
"version": "1.0.3", | ||
"description": "Memory cache for node js", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/UltraShock98/cache-io.git" | ||
}, | ||
"keywords": [ | ||
"node", | ||
"cache", | ||
"memory", | ||
"storage" | ||
], | ||
"author": "https://vk.com/id195624402", | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/UltraShock98/cache-io/issues" | ||
}, | ||
"homepage": "https://github.com/UltraShock98/cache-io#readme" | ||
"name": "cache-io", | ||
"version": "1.0.4", | ||
"description": "Simple memory cache for node js", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/negezor/cache-io.git" | ||
}, | ||
"keywords": [ | ||
"memory", | ||
"cache", | ||
"io", | ||
"timeout", | ||
"simple", | ||
"node", | ||
"js" | ||
], | ||
"author": "https://vk.com/id195624402", | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/negezor/cache-io/issues" | ||
}, | ||
"homepage": "https://github.com/negezor/cache-io#readme" | ||
} |
233
README.md
@@ -1,90 +0,189 @@ | ||
# cache-io | ||
###Russian | ||
Memory cache для node js | ||
[](https://www.npmjs.com/package/cache-io) | ||
## Использование | ||
Инициализация нового хранилища | ||
# CACHE-IO | ||
Простой модуль кэш-памяти | ||
## Инициализация / Начало работы | ||
### Установка модуля | ||
```shell | ||
npm install cache-io --save | ||
``` | ||
### Инициализация одного экземпляра | ||
```javascript | ||
'use strict'; | ||
var cache = new (require('cache-io')); | ||
const Cache = require('cache-io'); | ||
const cache = new Cache; | ||
``` | ||
Проверка на наличие ключа | ||
### Конфигурация модуля | ||
В конструктор можно передать параметры | ||
##### expires | ||
Тип: `number` | ||
По умолчанию: `60` | ||
Стандартное время истечений таймера в секундах | ||
##### prolong | ||
Тип: `boolean` | ||
По умолчанию: `true` | ||
Нужно ли обновлять таймер при использование метода `get` | ||
```javascript | ||
cache.has('keyName'); | ||
// return boolean | ||
const cache = new Cache({ | ||
expires: 60 * 30, | ||
prolong: false | ||
}); | ||
``` | ||
Установка значения кэша | ||
* expire - 1000 * expire | ||
* data - установка значения кэша | ||
### Установка значения в кэш | ||
Метод `set` принимает два аргумента | ||
##### Первый аргумент | ||
Тип: `string` или `object` | ||
Ключ кэша, может быть передан объект с обязательным свойством `key` | ||
##### Второй аргумент | ||
Тип: `object` | ||
Параметры установки кэша, может быть передан в первый аргумент с обязательным свойством `key`. Полное описание возможных свойств объекта ниже | ||
====== | ||
#### Объект с аргументами | ||
##### key | ||
Тип: `string` | ||
Ключ кэша, обязателен если объект передан первым аргументом | ||
##### value | ||
Тип: `mixed` | ||
Значение которое хранится в кэше, оно так же возвращается при использование текущего метода тем самым ссылаясь на него | ||
##### expires | ||
Тип: `integer` | ||
Время в секундах когда кэш истечёт, можно не указывать и использовать значение по умолчанию | ||
##### remove | ||
Тип: `function` | ||
Функция которая вызывается при истечёние времени кэша | ||
В функцию приходят аргументы ключ и значение `(key,value)` | ||
```javascript | ||
cache.set('keyName',expire,data,callback); | ||
// return value || null | ||
cache.set(<key>,{ | ||
value: <mixed> | ||
}); // -> mixed | ||
/* Или например так */ | ||
cache.set({ | ||
key: <key>, | ||
value: <mixed>, | ||
expires: 60 * 30, // 1:30 полтора часа | ||
remove: (key,value) => { | ||
console.log('Cache expired:',key,'-',value); | ||
} | ||
}); // -> mixed | ||
``` | ||
Обновить значения истечения кэша | ||
### Получение значения в кэш | ||
Метод `get` принимает два аргумента | ||
##### Первый аргумент | ||
Тип: `string` или `object` | ||
Ключ кэша, может быть передан объект с обязательным свойством `key` | ||
##### Второй аргумент | ||
Тип: `object` | ||
Объект который наследует параметры из метода `set` и добавляя свои, подробнее ниже | ||
====== | ||
#### Объект с аргументами | ||
Полностью наследует из метода `set` | ||
##### default | ||
Тип: `boolean` | ||
По умлочанию: `false` | ||
Если `true` вместо установки нового кэша, возвращает свойство `value` или `null` | ||
##### update | ||
Тип: `boolean` | ||
По умолчанию: наследует настройку `prolong` в конструкторе | ||
Позволяет обновить значение таймера или же наоборот оставить всё как есть | ||
```javascript | ||
cache.update('keyName'); | ||
// return boolean | ||
cache.get(<key>,{ | ||
value: <mixed>, | ||
expires: 10, | ||
remove: (key,value) => { | ||
console.log('Cache expired:',key,'-',value); | ||
} | ||
}); // -> mixed | ||
/* Или вернуть свойство value без установки значения кэша */ | ||
cache.get(<key>,{ | ||
value: <mixed>, | ||
default: true | ||
}); // -> mixed или null | ||
``` | ||
Получить значение кэша, если нету то на сохранение: | ||
* data - значение кэша | ||
* time - истечение кэша | ||
### Обновление таймера кэша | ||
Обноваляет таймер кэша, используется в методе `get` | ||
##### Первый аргумент | ||
Тип: `string` | ||
Ключ кэша, при удачном обновление таймера `true`, если объект уже удалён или отсутствует `false` | ||
```javascript | ||
cache.get('keyName'[,data,time,callback]); | ||
// return mixed | ||
cache.update(<Key>); // -> boolean | ||
``` | ||
Удалить значение кэша | ||
### Удаления значения в кэша | ||
Удаляет старое значение в кэше, вызывает при использование метода `set` | ||
##### Первый аргумент | ||
Тип: `string` | ||
Ключ кэша, при удачном удаление `true`, если объект уже удалён или отсутствует `false` | ||
```javascript | ||
cache.remove('keyName'); | ||
// return boolean | ||
cache.remove(<Key>); // -> boolean | ||
``` | ||
Возвращает ключи кэша | ||
### Полна очистка кэша | ||
Удаляет все ключи кэша, а так же будут вызваны функции `remove` если были установлены в `set` | ||
```javascript | ||
cache.keys(); | ||
// return array | ||
cache.clear(); // -> this | ||
``` | ||
# cache-io | ||
###English | ||
Memory cache for node js | ||
## Using | ||
Initialize the new storage | ||
```javascript | ||
'use strict'; | ||
### Проверка кэша на наличие | ||
##### Первый аргумент | ||
Тип: `string` | ||
var cache = new (require('cache-io')); | ||
``` | ||
Checking for key cache | ||
Ключ кэша | ||
```javascript | ||
cache.has('keyName'); | ||
// return boolean | ||
cache.has(<Key>); // -> boolean | ||
``` | ||
Setting the cache values | ||
* expire - 1000 * expire | ||
* data - cache setting values | ||
### Получение списка ключей кэша | ||
```javascript | ||
cache.set('keyName',expire,data,callback); | ||
// return null | ||
cache.keys(); // -> array | ||
``` | ||
Refresh cache expiration value | ||
```javascript | ||
cache.update('keyName'); | ||
// return boolean | ||
``` | ||
Get the value of the cache if it does not have to maintain: | ||
* data - cache value | ||
* time - cache expiration | ||
```javascript | ||
cache.get('keyName'[,data,time,callback]); | ||
// return mixed | ||
``` | ||
Remove the cache value | ||
```javascript | ||
cache.remove('keyName'); | ||
// return boolean | ||
``` | ||
Returns the cache keys | ||
```javascript | ||
cache.keys(); | ||
// return array | ||
``` |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
9565
101.67%153
26.45%190
108.79%1
Infinity%