Skip to content

Latest commit

 

History

History
113 lines (74 loc) · 5.78 KB

CHANGELOG.md

File metadata and controls

113 lines (74 loc) · 5.78 KB

CHANGELOG

0.2020.x

>0.2020.520 may break in-process gun1 gun2 message passing. Check test/common.js "Check multi instance message passing" for a hint and/or complain on community chat.

  • No breaking changes to core API.
  • Storage adapter put event breaking change (temporary?), RAD is official now and storage adapters should be RAD plugins instead of GUN adapters.
  • GUN soul format changed from being a random UUID to being a more predictable graph path (of where initially created) to support even better offline behavior. This means nulling & replacing an object will not create a new but re-merge.
  • Pretty much all internal GUN utility will be deleted, these are mostly undocumented but will affect some people - they will still be available as a separate file but deprecated.
  • As the DHT gets implemented, your relay peers may automatically connect to it, so do not assume your peer is standalone. Gun({axe: false should help prevent this but loses you most scaling properties.
  • The 2019 -> 2020 "changes" are happening gradually, based on experimental in-production tests.
  • As always, most important is to ask in the community chat if you have any issues, and to keep up to date with changes.

0.2019.x

Some RAD & SEA data format changes, but with as much backward compatibility as possible, tho ideally should be dropped.

0.9.x

No breaking changes, but the new Radix Storage Engine (RSE) has been finally integrated and works with S3 as a backup.

// Edit: commentary removed.

0.8.x

Adapter interfaces have changed from Gun.on('event', cb) to gun.on('event', cb), this will force adapters to be instance specific.

.path() and .not() have been officially removed from the core bundle, you can bundle them yourself at lib/path.js and lib/not.js if you still need them.

0.7.x

Small breaking change to .val(cb):

Previously .val(cb) would ONLY be called when data exists, like .on(cb).

However, due to popular demand, people wanted .val(cb) to also get called for .not(cb) rather than (before) it would "wait" until data arrived.

NOTE: For dynamic paths, .val(cb) will still wait, like:

gun.get('users').map().val(cb) because the behavior of the map() is simply to not fire anything down the chain unless items are found.

0.6.x

Introduced experimental features, chaining .val() (no callback) and .map(cb) behaving as a map/reduce function.

It also upgraded the socket adapters and did end-to-end load testing and correctness testing.

0.5.9

GUN 0.3 -> 0.4 -> 0.5 Migration Guide: gun.back -> gun.back(); gun.get(key, cb) -> cb(err, data) -> cb(at) at.err, at.put; gun.map(cb) -> gun.map().on(cb); gun.init -> deprecated; gun.put(data, cb) -> cb(err, ok) -> cb(ack) ack.err, ack.ok; gun.get(key) global/absolute -> gun.back(-1).get(key); gun.key(key) -> temporarily broken;

0.3.7

  • Catch localStorage errors.

0.3.6

  • Fixed S3 typo.

0.3.5

  • Fixed server push.

0.3.4

  • Breaking Change! list.set(item) returns the item's chain now, not the list chain.
  • Client and Server GUN servers are now more up to spec, trimmed excess HTTP/REST header data.
  • Gun.is.lex added.

0.3.3

  • You can now link nodes natively, gun.get('mark').path('owner').put(gun.get('cat'))!
  • Sets (or tables, collections, lists) are now easily done with gun.get('users').set(gun.get('person/mark')).

0.3.2

Bug fixes.

0.3.1

Bug fixes.

0.3

Migration Guide! Migrate by changing .attach( to .wsp( on your server if you have one with gun. Remove .set() (delete it), and change .set($DATA) (where you call set with something) to .path('I' + Date.now() + 'R' + Gun.text.random(5)).put($DATA). If you have NodeJS style callbacks in your .get (which documentation previously recommended that you shouldn't) they previous took err, graph and now they take err, node (which means now using callback style is fine to use). Inside of .not() no longer use return or this, instead (probably) use gun and no return. If you are a module developer, use opt.wire now instead of opt.hooks and message Mark since he needs to talk to you since the wire protocol has changed.

  • Server side default .wsp() renamed from .attach().
  • .set() deprecated because it did a bunch of random inconsistent things. Its useful behavior has now become implicit (see below) or can be done explicitly.
  • .not() it was previously common to return the chain inside of .not, beware that if you have code like gun.get(key).not(function(){ return this.put({}).key(key) }).val() cause .val() to be triggered twice (this is intentional, because it funnels two separate chains together) which previously didn't happen. To fix this, just don't return the chain.
  • .put() and .path() do implicit .init() by default, turn on explicit behavior with Gun({init: true}).
  • .get(soul, cb) cb is called back with err, node rather than err, graph.
  • Options opt.wire renamed from opt.hooks.
  • .val() when called empty automatically cleanly logs for convenience purposes.
  • .init() added.
  • Gun.is.val renamed from Gun.is.value.
  • Gun.is.rel renamed from Gun.is.soul.
  • Gun.is.node.soul renamed from Gun.is.soul.on.
  • Gun.union.ify renamed from Gun.union.pseudo.
  • Gun.union.HAM renamed from Gun.HAM.
  • Gun.HAM is now the actual HAM function for conflict resolution.
  • Gun._.state renamed from Gun._.HAM.
  • Maximum Callstack Exceeded is less problematic now, unless you intentionally choke the thread. #95
  • Putting a regex or Date or NaN is actually detected and causes an error now while before it was silent. #122 #123
  • .on() gets called when a key is later newly made while before it did not. #116
  • .val() should not ever get called with a relation alone (internals should resolve it), this is fixed. #132