Skip to content

Commit

Permalink
Merge branch 'compression-plugin' of https://github.com/w33ble/store.js
Browse files Browse the repository at this point in the history
… into gh-204-compression
  • Loading branch information
marcuswestin committed Jun 20, 2017
2 parents d3836fe + a14028d commit 6d2af9f
Show file tree
Hide file tree
Showing 5 changed files with 566 additions and 1 deletion.
1 change: 1 addition & 0 deletions plugins/all.js
@@ -1,4 +1,5 @@
module.exports = [
require('./compression'),
require('./defaults'),
require('./dump'),
require('./events'),
Expand Down
3 changes: 2 additions & 1 deletion plugins/all_tests.js
@@ -1,4 +1,5 @@
module.exports = {
"compression": require('./compression_test'),
"defaults": require('./defaults_test'),
"dump": require('./dump_test'),
"events": require('./events_test'),
Expand All @@ -7,5 +8,5 @@ module.exports = {
"json2": require('./json2_test'),
"operations": require('./operations_test'),
"update": require('./update_test'),
"v1-backcompat": require('./v1-backcompat_test')
"v1-backcompat": require('./v1-backcompat_test'),
}
24 changes: 24 additions & 0 deletions plugins/compression.js
@@ -0,0 +1,24 @@
const LZString = require('./lib/lz-string')

module.exports = compressionPlugin

function compressionPlugin() {
return {
get: get,
set: set,
}

function get(super_fn, key, raw) {
var val = super_fn(key)
if (!val || raw) return val
var decompressed = LZString.decompress(val)
// fallback to existing values that are not compressed
return (decompressed == null) ? val : JSON.parse(decompressed)
}

function set(super_fn, key, val, raw) {
if (raw) return super_fn(key, val)
var compressed = LZString.compress(JSON.stringify(val))
super_fn(key, compressed)
}
}
37 changes: 37 additions & 0 deletions plugins/compression_test.js
@@ -0,0 +1,37 @@
require('./compression')
var util = require('../tests/util')

module.exports = {
setup: setup,
}

function setup(store) {
var raw = true

test('string compression', function() {
store.set('foo', 'baz')
assert(store.get('foo', raw) == 'ᄂゆ׬䀀', 'string should be lz compressed')
assert(store.get('foo') == 'baz', 'value should be baz')
})

test('object compression', function () {
var obj = { one: { two: 3 }}
store.set('foo', obj)
assert(store.get('foo', raw) == '㞂⃶ݠ꘠岠ᜃ릎٠⾆耀', 'object should be lz compressed')
assert(util.deepEqual(store.get('foo'), obj), 'should deep equal original object')
store.remove('foo')
})

test('decompress uncopmressed data', function () {
// fake uncompressed data by storing raw value
store.set('foo', 'baz', raw)
assert(store.get('foo') == 'baz', 'value should be baz')
store.remove('foo')
})

test('decompress non-existing data', function () {
assert(store.get('bar') == undefined, 'value should be undefined')
store.remove('bar')
})

}

0 comments on commit 6d2af9f

Please sign in to comment.