Wisembly/basil.js: The missing Javascript smart persistent layer
要件は以下の通り
以下のプラットフォームの両方で動くこと
- Node.js
- Browser
動作するストレージが以下に対応していること
- WebStorage
- Cookie
- Memory
それとここものすごく重要なんだけど namespace に対応していること。Cookie も WebStorage も Same Origin の中で様々なコードが勝手気ままにデータを読み書きするので、ちゃんと自分の namespace を守っていく必要がある。
Memory対応は重要
なぜかというと Node.js には WebStorage も Cookie もないので、Node.js 上でテストを実行した際に死んでしまう。Memory で動けば少なくともロジックのテストは行える。もちろんより厳密には localStorgae や Cookie をエミュレートするライブラリを追加したり実ブラウザでのテストを行なってもよいが、最初からそこを目指すのはちょっとコストが大きすぎる感じがする。まず API を固めて中の処理を書くことをさっさと進めるために Memory 対応があるとすごく助かる。
意外とすべて満たすものがない
日本語でも情報の多い Store.js を使ってみたのだけど、これは v 2.12.0 の時点で namespace 対応が壊滅的にダメだった。set, get はできるけど、each で回すと namespace から外れたデータまで取得できるうえにご丁寧に namespace ( 実際には prefix ) を取り除いた key が返ってくるので、どれが自分の管轄のデータかさっぱり分からない。
もちろん contribute するのも手なんだけど、さすがに storage 系のライブラリを今から育てていくぞ、ってのはモチベーション的にはなかなか厳しいっすよねー。
まとめ
こんな感じでブラウザ独自 API はできるだけ直接叩かないのが大事だなーと思ってる昨今。