GitHub package.json versionTypeScriptNPM
GitHub package.json versionTypeScriptNPM

Disconnecting from Source

Any Auto Immutable instance communicates with its environment through its own Connection class (the consumer) instances.

The Connection's disconnect(...) parameterless method of the Connection instance provides the means for disconnecting itself from its Auto Immutable instance.

This method also prompts the source Auto Immutable instance to deallocate all resources dedicated to the disconnecting consumer.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import AutoImmutable from 'auto-immutable'; const aImmutable = new AutoImmutable({ a: { b: { c: 22 d: 60 }, x: 99 } }); const consumer = aImmutable.connect(); // returns a consumer for this AutoImmutable instance consumer.get( 'a.b.d', 'a.x' ); // returns { // 'a.b.d': 60, // 'a.x': 99 // } console.log( consumer.instanceId ); // prints this consumer's unique id console.log( consumer.disconnected ); // prints `false` consumer.disconnect(); // severs connection to the AutoImmutable instance. console.log( consumer.disconnected ); // prints `true` consumer.get( 'a.b.d', 'a.x' ); // returns `undefined` consumer.set({ a: { x: 1000 } }); // cannot update the immutable data /* ----------------------------------------------------- */ const consumer1 = aImmutable.connect(); consumer1.get( 'a.b.d', 'a.x' ); // returns { // 'a.b.d': { m: 70 }, // 'a.x': 99 // } console.log( consumer.disconnected ); // prints `false`

Further Considerations

This method serves as the final association between a consumer and its source Auto Immutable instance.

Once issued, the instant consumer loses accessibility to its source Auto Immutable instance.

Note: calling an Auto Immutable close(...) method summarily disconnects all its connected consumers. This instant consumer, if connected to the given Auto Immutable instance, will be disconnected as well.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import AutoImmutable from 'auto-immutable'; const protectedData = { a: { b: { c: 22 d: 60 }, x: 99 } }; type Data = typeof protectedData; const aImmutable = new AutoImmutable<ProtectedData>( protectedData ); console.log( aImmutable.closed ) // prints `false`; const consumers : Array<Connection<ProtectedData>> = []; for( let c = 5; c--; ) { consumers.push( aImmutable.connect(); } consumers.forEach( c => console.log( c.disconnected ) ); // prints `false` 5 times consumers.forEach( c => console.log( c.get( 'a.x' ) ) ); // prints `{'a.x': 99}` 5 times; aImmutable.close(); console.log( aImmutable.closed ) // prints `true`; consumers.forEach( c => console.log( c.disconnected ) ); // prints `true` 5 times consumers.forEach( c => console.log( c.get( 'a.x' ) ) ); // prints `undefined` 5 times;