11import * as vscode from 'vscode'
2+ import { readFile , writeFile } from '../node'
3+ import { SESSION_FILE_PATH } from '../../environment'
24
35// NOTE: localStorage is not available on client
46// and must be stored in editor
@@ -19,6 +21,18 @@ class Storage<T> {
1921 const value : string | undefined = await this . storage . get ( this . key )
2022 if ( value ) {
2123 return JSON . parse ( value )
24+ } else if ( SESSION_FILE_PATH ) {
25+ // optionally read from file as a fallback to localstorage
26+ const sessionFile = await readFile ( SESSION_FILE_PATH )
27+ try {
28+ const session = JSON . parse ( sessionFile )
29+ if ( session && session [ this . key ] ) {
30+ // TODO: validate session
31+ return session [ this . key ]
32+ }
33+ } catch ( err ) {
34+ console . error ( `Failed to parse session file: ${ SESSION_FILE_PATH } ` )
35+ }
2236 }
2337 return this . defaultValue
2438 }
@@ -33,9 +47,17 @@ class Storage<T> {
3347 ...value ,
3448 } )
3549 this . storage . update ( this . key , next )
50+ // optionally write to file
51+ if ( SESSION_FILE_PATH ) {
52+ writeFile ( this . storage , SESSION_FILE_PATH )
53+ }
3654 }
3755 public reset = ( ) => {
3856 this . set ( this . defaultValue )
57+ // optionally write to file
58+ if ( SESSION_FILE_PATH ) {
59+ writeFile ( this . defaultValue , SESSION_FILE_PATH )
60+ }
3961 }
4062}
4163
0 commit comments