meme: Use brotli to compress everything
/ deploy (push) Successful in 5s Details

This commit is contained in:
Jonatan Nilsson 2024-09-21 00:55:04 +00:00
parent 3f559bb9f5
commit 5d775b0a64
5 changed files with 23 additions and 199 deletions

185
README.md
View File

@ -1,186 +1,3 @@
# fs-cache-fast
fs-cache-fast is a small, no dependancy, both promise and sync based file system cache storage.
This package is designed to be a smaller, lighter, drop-in replacement for [file-system-cache](https://www.npmjs.com/package/file-system-cache).
# Installation
Install with npm:
```bash
$ npm install --save fs-cache-fast
```
# Getting started
The api is extremely simple:
```javascript
import Cache from 'fs-cache-fast'
let cache = new Cache()
cache.setSync('my-key', { value: 'here' })
let item = cache.getSync('my-key', { fallback: 'here' })
await cache.set('another-key', 'Hi there')
let result = await cache.get('another-key')
```
# Api
### new Cache(options)
Create a new cache with the specified directory (if directory is skipped, it randomly generates one in fs.tmp on each run).
Possible values in options:
```javascript
{
prefix: 'myprefix', // Add a prefix to every cached filename that is generated
ns: 'myprefix', // Alternative name for prefix, for API compatibility with file-system-cache
hash_alg: 'sha256', // Use the specified hashing algorithm that is used to generate the filename
cache_dir: '/tmp/MY_CACHE', // The directory where all the cache gets stored, gets auto-created if not exist.
ttl: 60, // Expiration in seconds for each cache item.
}
```
The default options are as follow:
```javascript
{
prefix: '-',
hash_alg: 'md5',
cache_dir: path.join(os.tmpdir(), /* random id */),
ttl: 0,
}
```
### cache.get(key, fallback = null)
Promise get the cache value that exists with item `key` and if it doesn't exist or has expired, returns the fallback value instead.
```javascript
let myCache = await cache.get('mykey', null)
```
### cache.getSync(key, fallback = null)
Immediately get the cache value that exists with item `key` and if it doesn't exist or has expired, returns the fallback value instead.
```javascript
let myCache = cache.getSync('mykey', null)
```
### cache.set(key, content, ttl | { ttl: number } = null)
Promise store the content as cache with the specified key (with optional overwriting default ttl set on the cache constructor).
```javascript
await cache.set('mykey', { hello: 'world' })
```
### cache.setSync(key, content, ttl | { ttl: number } = null)
Immediately store the content as cache with the specified key (with optional overwriting default ttl set on the cache constructor).
```javascript
cache.setSync('mykey', { hello: 'world' }, 5 * 60) // Expire this after 5 minutes
```
### cache.setMany(items, ttl | { ttl: number } = null)
### cache.save(items, ttl | { ttl: number } = null)
Promise store multiple items all at once while optionally overwriting the ttl for these entries.
Items take form of an array of json objects with the following signature: `{ key, content }`
**Note**, for backwards compatibility with `file-system-cache` you can also use the property `value` instead of `content`.
```javascript
await cache.setMany([
{ key: 'one', content: 'Store this' },
{ key: 'two', content: { a: 'and also this' } },
])
await cache.save([
{ key: 'one', value: 'Store this' },
{ key: 'two', value: { a: 'and also this' } },
])
```
### cache.setManySync(items, ttl | { ttl: number } = null)
### cache.saveSync(items, ttl | { ttl: number } = null)
Immediately store multiple items all at once while optionally overwriting the ttl for these entries.
Items take form of an array of json objects with the following signature: `{ key, content }`
**Note**, for backwards compatibility with `file-system-cache` you can also use the property `value` instead of `content`.
**Note**, there's an alternative name for it called `.saveSync(...)` for retaining similar naming schema as `file-system-cache` (it does not provide this functionality).
```javascript
cache.setManySync([
{ key: 'one', content: 'Store this' },
{ key: 'two', content: { a: 'and also this' } },
], 10 * 60) // Expire all of these after 10 minutes.
cache.saveSync([
{ key: 'one', value: 'Store this' },
{ key: 'two', value: { a: 'and also this' } },
], 10 * 60) // Expire all of these after 10 minutes.
```
### cache.remove(key)
Promise remove a cache with the specified key.
```javascript
await cache.remove('mykey')
```
### cache.removeSync(key)
Immediately remove a cache with the specified key.
```javascript
cache.removeSync('mykey')
```
### cache.clear()
Promise remove all items in the cache directory that match the specified `prefix` or `ns` if you will.
```javascript
await cache.clear()
```
### cache.clearSync()
Immediately remove all items in the cache directory that match the specified `prefix` or `ns` if you will.
```javascript
cache.clearSync()
```
### cache.getAll()
Promise return all items currently residing in the cache that have valid ttl.
This returns an array of objects, each one with with following signature: `{ key, content, ttl }`
```javascript
let items = await cache.getAll()
// items[0] = { key: 'one', content: 'Store this' }
// items[1] = { key: 'two', content: { a: 'and also this' } }
```
### cache.load()
Promise return all items currently residing in the cache that have valid ttl.
This is an API compatible version with `file-system-cache` and returns the results slightly different to maintain compatibility.
Returns an object with key files that has an array of items with this signature: `{ path, value, key }`
```javascript
let items = await cache.load()
// items.files[0] = { path: '...', value: 'Store this', key: 'one' }
// items.files[1] = { path: '...', value: { a: 'and also this' }, key: 'two' }
```
Meme version with maximum saving of fs-cache-fast, see original: https://git.nfp.is/TheThing/fs-cache-fast

1
check.mjs Normal file
View File

@ -0,0 +1 @@
import Cache from './meme.mjs'

15
compress.mjs Normal file
View File

@ -0,0 +1,15 @@
import fs from 'fs'
import zlib from 'zlib'
var original = fs.readFileSync('./index.mjs', 'utf-8')
.replace(/export default /, 'out = ')
.replace(/import [^ ]+ from '[^']+'\w*\n/g, '')
.replace(/fsSyncOriginal/, 'fS')
.replace(/fsPromisesOriginal/, 'fP')
.replace(/crypto\./g, 'C.')
.replace(/path\./g, 'P.')
.replace(/os\./g, 'O.')
.trim()
var compressed = zlib.brotliCompressSync(Buffer.from(original))
fs.writeFileSync('meme.mjs', `import fS from 'fs';import fP from 'fs/promises';import C from 'crypto';import P from 'path';import O from 'os';import z from 'zlib';let out;eval(z.brotliDecompressSync(Buffer.from('${compressed.toString('base64')}','base64')).toString());export default out;`)

1
meme.mjs Normal file
View File

@ -0,0 +1 @@
import fS from 'fs';import fP from 'fs/promises';import C from 'crypto';import P from 'path';import O from 'os';import z from 'zlib';let out;eval(z.brotliDecompressSync(Buffer.from('G68PAIzTFfEjmBImXPKf6WzPMr1TPklLzowzmWrjiUFMgIo1iE+PQr///VrdHon53pl5K/5XsSSazP8T/iKeOCRL0CBUciFXHoPpMn8FlZRFuV6PHWRYkj2P7uVYXnqAvs3VhuIJvsDkUEdkR/Pq/6Tv9JRZjpUBGicgc5D++bRaIRpNDZNglkDQB31vuT1VkB4EZ0/fz522tH/Mx6mjysh/dXLEOC//8BGGcQfrMl6USHgeEiGZqOqTFINBapUxFSXkFtDv3d+/RQxpasnEel6qYwxqyOtvlZqlS8e+2h/JjdWecGWzmyfeITff6GfOFWUgBdj1Peb0wvATu9Hzuu+p71RSHxsRIXPXexCagQG788l7knvS2yTKXKVmeQWRttSxxKcdzqUT/ZEnXaxbX12XU/tW2l/e7NOsSY1W5F92qY6qnqqIWqLkkjx1L9PY3YV9iOt8VzaTqZsYtTq8dBUmh5ewQq1pk9RQq65U6KYLOZhATGEJwnA4ENKY1PiokTR5HUaQa8wMVqsDIa5bk6wWFyBtZqTdaiPX845znCa2eLhB+WTg8OZGayJtI93i9X5Lozkt5Xp+oS5tTe2iUpEi1okFWPGuGE3zC7OMD50rLvzrUwGImLJaZfA7LinJaRZ1vUpOLqRHYk5BJfXN/usADyLR+ayjRFfJTKzdwlMr9PyBOoPuqyq8MEZ8j8dcS2En9uOZdmNjF50xNmMESZRV5H9PVni6nlujjMnT2hjkJoFIBR5RtN9kwkoFG5FdLol9td823ycYvTwXRbMGC0lWE1a9ovhhBDetBM2Axibu7cLuoF5n6M0eB7nwY33iBnODpf4axHCN/wOsSlUN6jf3CvskwLRApu8KfHJ8uV8Cq5ndFEmwJOO9YgRE8D5pY1yEtrohPuONYIJo3GXABB5jgAL5ngTaM+mMUeoaFdrhiZEEzdVX/Y2yhFYICxA14YX4n3oQuDKmMTpx9YSahIAqoSW+OFLa7EoS+/gfauObEvXD7W/iHQubFbpyvFBWsTHFi9dxnMVMVLg8FiPgKIaVKKEt+XUuJ35t6c4YVLvwxi+ZLU0tXdxlrYQsZkZL47B9h9mPZxTTlOK90EsqNd2gBQMWNqAcGRMNDBtivpOc5xy3ZzybjXIrpcdFBVECfSFzyn0SkeEOxw9BJ09eTFCTI0xk932s3V1RkOfgLarh+2ciQtvrZUz0nwWOiqXDT93BZSUzKz0GkHp4mzcpEJc1wZzr+Hh3FxvBOUF5oyJPfBVsl1vyhLGyr16HGAA2GeL3Nkdt2cQq8dqPjLaQ9Z/56vkz4E4y2orytyFy1wIt/Vy3vItnPhzlDO/4HW6Xkd7pmEk6QV/CmpMjjqO6Bg==','base64')).toString());export default out;

View File

@ -1,19 +1,10 @@
{
"name": "fs-cache-fast",
"version": "1.0.2",
"version": "0.0.2",
"description": "Cache stored on the file system",
"main": "index.mjs",
"main": "meme.mjs",
"scripts": {
"test": "eltro",
"test:watch": "eltro -r dot -w test"
},
"watch": {
"test": {
"patterns": [
"./"
],
"extensions": "mjs"
}
"test": "eltro"
},
"repository": {
"type": "git",
@ -25,8 +16,7 @@
"eltro": "^1.5.0"
},
"files": [
"index.mjs",
"README.md",
"LICENSE"
"meme.mjs",
"README.md"
]
}