1+ var fs = require ( 'fs' )
12var _ = require ( 'lodash' )
2- var Store = require ( './store ' )
3+ var Writer = require ( './writer ' )
34
45// Compose every function with fn
56function composeAll ( obj , fn ) {
@@ -11,10 +12,14 @@ function composeAll(obj, fn) {
1112}
1213
1314function Low ( filename ) {
14- // Create a new JSON file and get object
1515 if ( filename ) {
16- var store = new Store ( filename )
17- var object = store . object
16+ if ( fs . existsSync ( filename ) ) {
17+ var object = low . parse ( fs . readFileSync ( filename ) )
18+ } else {
19+ fs . writeFileSync ( filename , '{}' )
20+ var object = { }
21+ }
22+ var writer = new Writer ( filename )
1823 } else {
1924 var object = { }
2025 }
@@ -23,18 +28,19 @@ function Low(filename) {
2328 // Create empty array if it doesn't exist
2429 object [ name ] = object [ name ] || [ ]
2530
26- if ( filename ) store . save ( )
31+ // Save it
32+ if ( filename ) chain . save ( )
2733
28- // Chain array
34+ // Create a Lo-Dash chained array
2935 var chainedArray = _ . chain ( object [ name ] )
3036
3137 // Hack, wrap every Lo-Dash function to call save.
3238 // Save is however throttled and only happens if database object
3339 // has changed.
34- // With Node 0.12 and Object.observe support, this bit of code should
40+ // With Node 0.12 and Object.observe support, this bit of code should be
3541 // removed :)
3642 if ( filename ) composeAll ( chainedArray , function ( arg ) {
37- store . save ( )
43+ chain . save ( )
3844 return arg
3945 } )
4046
@@ -45,9 +51,9 @@ function Low(filename) {
4551 chain . object = object
4652
4753 // Call it to manually save database
48- chain . save = function ( ) {
49- if ( store ) store . save ( )
50- }
54+ chain . save = _ . throttle ( function ( ) {
55+ if ( filename ) writer . write ( low . stringify ( object ) )
56+ } , 10 )
5157
5258 return chain
5359}
@@ -60,4 +66,12 @@ low.mixin = function(source) {
6066 _ . mixin ( source )
6167}
6268
63- module . exports = low
69+ low . stringify = function ( obj ) {
70+ return JSON . stringify ( obj , null , 2 )
71+ }
72+
73+ low . parse = function ( str ) {
74+ return JSON . parse ( str )
75+ }
76+
77+ module . exports = low
0 commit comments