###1Very, very simple key:value store.23The keys can be arbitrary json-able objects.4A frozen copy of the object is saved in the key:value store,5so it won't get mutated.6###78json = require('json-stable-stringify')910exports.key_value_store = ->11return new KeyValueStore()1213class KeyValueStore14constructor: ->15@_data = {}1617set: (key, value) =>18if not @_data?19throw Error("closed")20if value.freeze? # supported by modern browsers21value = value.freeze() # so doesn't get mutated22@_data[json(key)] = value2324get: (key) =>25if not @_data?26throw Error("closed")27@_data[json(key)]2829delete: (key) =>30if not @_data?31throw Error("closed")32delete @_data[json(key)]3334close: =>35delete @_data3637