| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- const bunyan = require('bunyan')
 
- const level = require('levelup')
 
- const down = require('memdown')
 
- const SearchIndexAdder = require('search-index-adder')
 
- const SearchIndexSearcher = require('search-index-searcher')
 
- module.exports = function (givenOptions, moduleReady) {
 
-   const optionsLoaded = function (err, SearchIndex) {
 
-     const siUtil = require('./siUtil.js')(SearchIndex.options)
 
-     if (err) return moduleReady(err)
 
-     SearchIndex.close = siUtil.close
 
-     SearchIndex.countDocs = siUtil.countDocs
 
-     getAdder(SearchIndex, adderLoaded)
 
-   }
 
-   const adderLoaded = function (err, SearchIndex) {
 
-     if (err) return moduleReady(err)
 
-     getSearcher(SearchIndex, searcherLoaded)
 
-   }
 
-   const searcherLoaded = function (err, SearchIndex) {
 
-     if (err) return moduleReady(err)
 
-     return moduleReady(err, SearchIndex)
 
-   }
 
-   getOptions(givenOptions, optionsLoaded)
 
- }
 
- const getAdder = function (SearchIndex, done) {
 
-   SearchIndexAdder(SearchIndex.options, function (err, searchIndexAdder) {
 
-     SearchIndex.add = searchIndexAdder.add
 
-     SearchIndex.callbackyAdd = searchIndexAdder.concurrentAdd  // deprecated
 
-     SearchIndex.concurrentAdd = searchIndexAdder.concurrentAdd
 
-     SearchIndex.createWriteStream = searchIndexAdder.createWriteStream
 
-     SearchIndex.dbWriteStream = searchIndexAdder.dbWriteStream
 
-     SearchIndex.defaultPipeline = searchIndexAdder.defaultPipeline
 
-     SearchIndex.del = searchIndexAdder.deleter
 
-     SearchIndex.deleteStream = searchIndexAdder.deleteStream
 
-     SearchIndex.flush = searchIndexAdder.flush
 
-     done(err, SearchIndex)
 
-   })
 
- }
 
- const getSearcher = function (SearchIndex, done) {
 
-   SearchIndexSearcher(SearchIndex.options, function (err, searchIndexSearcher) {
 
-     SearchIndex.availableFields = searchIndexSearcher.availableFields
 
-     SearchIndex.buckets = searchIndexSearcher.bucketStream
 
-     SearchIndex.categorize = searchIndexSearcher.categoryStream
 
-     SearchIndex.dbReadStream = searchIndexSearcher.dbReadStream
 
-     SearchIndex.get = searchIndexSearcher.get
 
-     SearchIndex.match = searchIndexSearcher.match
 
-     SearchIndex.scan = searchIndexSearcher.scan
 
-     SearchIndex.search = searchIndexSearcher.search
 
-     SearchIndex.totalHits = searchIndexSearcher.totalHits
 
-     done(err, SearchIndex)
 
-   })
 
- }
 
- const getOptions = function (options, done) {
 
-   var SearchIndex = {}
 
-   SearchIndex.options = Object.assign({}, {
 
-     indexPath: 'si',
 
-     keySeparator: '○',
 
-     logLevel: 'error'
 
-   }, options)
 
-   options.log = bunyan.createLogger({
 
-     name: 'search-index',
 
-     level: options.logLevel
 
-   })
 
-   if (!options.indexes) {
 
-     level(SearchIndex.options.indexPath || 'si', {
 
-       valueEncoding: 'json',
 
-       db: down
 
-     }, function (err, db) {
 
-       SearchIndex.options.indexes = db
 
-       return done(err, SearchIndex)
 
-     })
 
-   } else {
 
-     return done(null, SearchIndex)
 
-   }
 
- }
 
 
  |