0.1.2 • Published 5 years ago

@qix/s-cookie v0.1.2

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

s-cookie

document.cookie binding for S.js signals.

Usage

$ npm i --save @qix/s-cookie

CAVEAT: There are (currently) no events to detect when a document's cookie value has changed. Thus, we elect to poll every 100 milliseconds. This means that multiple changes to a cookie may only update the signal with the final value. Further, we do not check previous values before updating - therefore, using S.data as the factory parameter (which otherwise defaults to S.value) will cause any dependent S computations to run 10 times a second, uncondtionally. Because of this, using the factory parameter is not recommended unless you have a really good reason to use something other than S.value.

import cookieSignal from '@qix/s-cookie';

const session_id = cookieSignal(
	// cookie name to bind to
	'session_id',

	// (optional) options object
	{
		// (optional) initial value
		// (defaults to null)
		init: '1234',

		// (optional, not recommended) signal factory - 
		// either S.value (the default) or S.data
		// (defaults to S.value)
		factory: S.value,

		// (optional) the Domain on which to set the cookie
		// (defaults to null)
		domain: "some.domain.com",

		// (optional) the Path on which to set the cookie
		// (defaults to null)
		path: "/",

		// (boolean, optional) if true, sets Secure
		// (defaults to false)
		secure: true
	}
);

S.root(() => {
	// Signal -> Cookie binding
	console.log(document.cookie); //-> session_id=1234
	session_id("5678");
	console.log(document.cookie); //-> session_id=5678

	// Cookie -> Signal binding (latency: 100ms)
	console.log(session_id()); //-> 5678
	document.cookie = 'session_id=abcd';
	console.log(session_id()); //-> abcd (may take 100ms to show up)

	// Expiration (by signal)
	console.log(document.cookie) //-> session_id=abcd
	session_id(null);
	console.log(document.cookie) // <no output>

	// Expiration (via cookie expiration)
	//  (setting the age to max-age=0 forces expiration, but
	//  this will also be the case if the server sets an expiration
	//  date/time or a maximum age as well)
	session_id('wxyz');
	document.cookie = 'session_id=; max-age=0';
	console.log(session_id()); //-> null
});

License

Copyright © 2019 by Josh Junon. Released under the MIT License.