Skip to content

Commit 3e1c1e3

Browse files
committed
✨ Implement Local Storage store
1 parent 181b60c commit 3e1c1e3

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { LOCAL_STORAGE_KEY, initLocalStorage } from './sessionLocalStorageStore'
2+
import type { SessionState, SessionStore } from './sessionStore'
3+
4+
describe('session local storage store', () => {
5+
const sessionState: SessionState = { id: '123', created: '0' }
6+
let localStorageStore: SessionStore
7+
8+
beforeEach(() => {
9+
localStorageStore = initLocalStorage()
10+
})
11+
12+
afterEach(() => {
13+
window.localStorage.clear()
14+
})
15+
16+
it('should persist a session in local storage', () => {
17+
localStorageStore.persistSession(sessionState)
18+
const session = localStorageStore.retrieveSession()
19+
expect(session).toEqual({ ...sessionState })
20+
})
21+
22+
it('should delete the local storage item holding the session', () => {
23+
localStorageStore.persistSession(sessionState)
24+
localStorageStore.clearSession()
25+
const session = localStorageStore.retrieveSession()
26+
expect(session).toEqual({})
27+
})
28+
29+
it('should not interfere with other keys present in local storage', () => {
30+
window.localStorage.setItem('test', 'hello')
31+
localStorageStore.persistSession(sessionState)
32+
localStorageStore.retrieveSession()
33+
localStorageStore.clearSession()
34+
expect(window.localStorage.getItem('test')).toEqual('hello')
35+
})
36+
37+
it('should return an empty object if session string is invalid', () => {
38+
window.localStorage.setItem(LOCAL_STORAGE_KEY, '{test:42}')
39+
const session = localStorageStore.retrieveSession()
40+
expect(session).toEqual({})
41+
})
42+
})
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type { SessionState, SessionStore } from './sessionStore'
2+
import { toSessionString, sessionStringToSessionState } from './sessionStore'
3+
4+
export const LOCAL_STORAGE_KEY = '_dd_s'
5+
6+
export function initLocalStorage(): SessionStore {
7+
return {
8+
persistSession: persistInLocalStorage,
9+
retrieveSession: retrieveSessionFromLocalStorage,
10+
clearSession: clearSessionFromLocalStorage,
11+
}
12+
}
13+
14+
function persistInLocalStorage(sessionState: SessionState) {
15+
localStorage.setItem(LOCAL_STORAGE_KEY, toSessionString(sessionState))
16+
}
17+
18+
function retrieveSessionFromLocalStorage(): SessionState {
19+
const sessionString = localStorage.getItem(LOCAL_STORAGE_KEY)
20+
return sessionStringToSessionState(sessionString)
21+
}
22+
23+
function clearSessionFromLocalStorage() {
24+
localStorage.removeItem(LOCAL_STORAGE_KEY)
25+
}

0 commit comments

Comments
 (0)