JSPM

@qix/s-cookie

0.1.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q32955F
  • License MIT

A document.cookie binding for S.js signals

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 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.