@@ -5,6 +5,7 @@ const chokidar = require('chokidar')
5
5
const JSON5 = require ( 'json5' )
6
6
const Loki = require ( '@lokidb/loki' ) . default
7
7
const LokiFullTextSearch = require ( '@lokidb/full-text-search' ) . default
8
+ const LokiFSStorage = require ( '@lokidb/fs-storage' ) . default
8
9
const logger = require ( 'consola' ) . withScope ( '@nuxt/content' )
9
10
const { default : PQueue } = require ( 'p-queue' )
10
11
const { Markdown, YAML , CSV , XML } = require ( '../parsers' )
@@ -71,6 +72,34 @@ class Database extends Hookable {
71
72
logger . info ( `Parsed ${ this . items . count ( ) } files in ${ s } ,${ Math . round ( ns / 1e8 ) } seconds` )
72
73
}
73
74
75
+ /**
76
+ * Restore database from file
77
+ * @param {string } dir - Directory containing database dump file.
78
+ */
79
+ async load ( dir ) {
80
+ const dbFilename = this . db . filename
81
+ this . db . filename = join ( dir , dbFilename )
82
+ await this . db . initializePersistence ( { adapter : new LokiFSStorage ( ) } )
83
+ await this . db . loadDatabase ( )
84
+ this . db . filename = dbFilename
85
+
86
+ // recreate references
87
+ this . items = this . db . getCollection ( 'items' )
88
+ this . dirs = this . items . mapReduce ( doc => doc . dir , dirs => [ ...new Set ( dirs ) ] )
89
+ }
90
+
91
+ /**
92
+ * Store database info file
93
+ * @param {string } dir - Directory containing database dump file.
94
+ */
95
+ async save ( dir ) {
96
+ const dbFilename = this . db . filename
97
+ this . db . filename = join ( dir , dbFilename )
98
+ await this . db . initializePersistence ( { adapter : new LokiFSStorage ( ) } )
99
+ await this . db . saveDatabase ( )
100
+ this . db . filename = dbFilename
101
+ }
102
+
74
103
/**
75
104
* Walk dir tree recursively
76
105
* @param {string } dir - Directory to browse.
@@ -171,7 +200,7 @@ class Database extends Hookable {
171
200
*/
172
201
async parseFile ( path ) {
173
202
const extension = extname ( path )
174
- // If unkown extension, skip
203
+ // If unknown extension, skip
175
204
if ( ! EXTENSIONS . includes ( extension ) && ! this . extendParserExtensions . includes ( extension ) ) {
176
205
return
177
206
}
0 commit comments