Package Exports
- @qix/s-cookie
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@qix/s-cookie) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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 toS.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 thanS.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.