Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mainmatter/ember-cookies

Cookies abstraction for Ember.js that works both in the browser as well as with Fastboot on the server
https://github.com/mainmatter/ember-cookies

cookies ember fastboot

Last synced: 1 day ago
JSON representation

Cookies abstraction for Ember.js that works both in the browser as well as with Fastboot on the server

Awesome Lists containing this project

README

        

![CI](https://github.com/simplabs/ember-cookies/workflows/CI/badge.svg)

# ember-cookies

`ember-cookies` implements an abstract __cookie API that works both in the
browser (via `document.cookie`) as well as with Fastboot in the server
context__ (using the `request` and `response` accessible via the `fastBoot`
service).

__Having access to cookies both in the browser as well as in FastBoot is key to
being able to share a common session.__

> [!NOTE]
> ember-cookies was written and is maintained by [Mainmatter](https://mainmatter.com) and contributors.
> We offer consulting, training, and team augmentation for Ember.js – check out our [website](https://mainmatter.com/ember-consulting/) to learn more!

## Installation

Install `ember-cookies` with

`ember install ember-cookies`

## Example Usage

### Typescript

```ts
// app/controllers/index.ts
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
import CookiesService from 'ember-cookies/services/cookies';

type Cookie = { name: string; value?: string };

export default class IndexController extends Controller {
@service cookies!: CookiesService;

get allCookies(): Cookie[] {
this.cookies.write('now', new Date().getTime());

const cookies = this.cookies.read();
return Object.keys(cookies).reduce((acc, key) => {
let value = cookies[key];
acc.push({ name: key, value });

return acc;
}, [] as Cookie[]);
}

get singleCookie(): Cookie {
const cookie = this.cookies.read('now');
return { name: 'now', value: cookie };
}
}
```

### Javascript

```js
// app/controllers/index.js
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { computed } from '@ember/object';

export default class ApplicationController extends Controller {
@service cookies;

@computed
get allCookies () {
let cookieService = this.cookies;
cookieService.write('now', new Date().getTime());

let cookies = cookieService.read();
return Object.keys(cookies).reduce((acc, key) => {
let value = cookies[key];
acc.push({ name: key, value });

return acc;
}, []);
}
}
```

## API

The `cookies` service has methods for reading and writing cookies:

* `read(name, options = {})`: reads the cookie with the given name, returns its
value as a `String`; options can be used to set `raw` (boolean, disables
URL-decoding the value).
* `write(name, value, options = {})`: writes a cookie with the given name and
value; options can be used to set `domain`, `expires` (Date), `maxAge` (time
in seconds), `path`, `secure`, `raw` (boolean, disables URL-encoding the
value) and `sameSite`.
* `clear(name, options = {})`: clears the cookie so that future reads do not
return a value; options can be used to specify `domain`, `path` or `secure`.
* `exists(name)`: checks whether a cookie exists at all (even with a falsy
value) and returns `true` if that is the case or `false` otherwise.

## Testing

`ember-cookies` exposes the `clearAllCookies` test helper that clears
all known cookies to reset state before and/or after tests:

```js
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { clearAllCookies } from 'ember-cookies/test-support';

module('Unit | Some Module', function (hooks) {
setupTest(hooks);

hooks.beforeEach(function () {
clearAllCookies();
});

// or you may wat to clear cookies after the test run
hooks.afterEach(function () {
clearAllCookies();
});
});
```

## License

`ember-cookies` is developed by and ©
[Mainmatter GmbH](http://mainmatter.com) and contributors. It is released under the
[MIT License](https://github.com/simplabs/ember-simple-auth/blob/master/LICENSE).

`ember-cookies` is not an official part of [Ember.js](http://emberjs.com) and
is not maintained by the Ember.js Core Team.