@@ -9,26 +9,53 @@ const utils = require('./utils');
99const index = require ( './index' ) ;
1010const platforms = require ( './platforms' ) ;
1111
12+ /**
13+ * @typedef {object } Corpus
14+ * @property {Record<string, Record<string, number>> } fileWords
15+ * @property {Record<string, number> } fileLengths
16+ * @property {Record<string, string[]> } invertedIndex
17+ * @property {any } allTokens
18+ * @property {Record<string, Record<string, number>> } tfidf
19+ *
20+ * @typedef {object } Query
21+ * @property {?string } raw
22+ * @property {?string[] } tokens
23+ * @property {Record<string, number> } frequency
24+ * @property {Record<string, number> } score
25+ * @property {QueryRank[] } ranks
26+ *
27+ * @typedef {object } QueryRank
28+ * @property {string } file
29+ * @property {number } score
30+ */
31+
1232const CACHE_FOLDER = path . join ( config . get ( ) . cache , 'cache' ) ;
1333
1434const filepath = CACHE_FOLDER + '/search-corpus.json' ;
1535
16- let corpus = { } ;
17-
18- corpus . fileWords = { } ;
19- corpus . fileLengths = { } ;
20- corpus . invertedIndex = { } ;
21- corpus . allTokens = new Set ( ) ;
22- corpus . tfidf = { } ;
2336
24- let query = { } ;
37+ /** @type {Corpus } */
38+ let corpus = {
39+ fileWords : { } ,
40+ fileLengths : { } ,
41+ invertedIndex : { } ,
42+ allTokens : new Set ( ) ,
43+ tfidf : { } ,
44+ } ;
2545
26- query . raw = null ;
27- query . tokens = null ;
28- query . frequency = { } ;
29- query . score = { } ;
30- query . ranks = [ ] ;
46+ /** @type {Query } */
47+ let query = {
48+ raw : null ,
49+ tokens : null ,
50+ frequency : { } ,
51+ score : { } ,
52+ ranks : [ ] ,
53+ } ;
3154
55+ /**
56+ * @param {string } data
57+ * @returns {string[] }
58+ */
3259let getTokens = ( data ) => {
3360 let tokenizer = new natural . WordTokenizer ( ) ;
3461 let tokens = tokenizer . tokenize ( data ) ;
@@ -139,6 +166,9 @@ let readCorpus = () => {
139166 } ) ;
140167} ;
141168
169+ /**
170+ * @param {string } rawquery
171+ */
142172let processQuery = ( rawquery ) => {
143173 query . raw = rawquery ;
144174 query . tokens = getTokens ( rawquery ) ;
@@ -156,10 +186,9 @@ let processQuery = (rawquery) => {
156186 query . score = { } ;
157187 query . tokens . forEach ( ( word ) => {
158188 if ( corpus . invertedIndex [ word ] ) {
159- let logbase = 10 ;
160189 let df = corpus . invertedIndex [ word ] . length ;
161- let idf = Math . log ( numberOfFiles / df , logbase ) ;
162- let wordWeight = idf * ( 1 + Math . log ( query . frequency [ word ] , logbase ) ) ;
190+ let idf = Math . log10 ( numberOfFiles / df ) ;
191+ let wordWeight = idf * ( 1 + Math . log10 ( query . frequency [ word ] ) ) ;
163192 corpus . invertedIndex [ word ] . forEach ( ( file ) => {
164193 let fileWeight = corpus . tfidf [ file ] [ word ] ;
165194 if ( query . score [ file ] ) {
@@ -209,7 +238,7 @@ exports.printResults = (results, config) => {
209238 outputs . add ( output ) ;
210239 } ) ;
211240
212- console . log ( 'Searching for:' , query . raw . trim ( ) ) ;
241+ console . log ( 'Searching for:' , /** @type { string } */ ( query . raw ) . trim ( ) ) ;
213242 console . log ( ) ;
214243 Array . from ( outputs ) . forEach ( ( elem ) => {
215244 console . log ( elem ) ;
@@ -220,7 +249,7 @@ exports.printResults = (results, config) => {
220249} ;
221250
222251exports . createIndex = ( ) => {
223- return utils . glob ( CACHE_FOLDER + '/pages/**/*.md' , { } )
252+ return utils . glob ( CACHE_FOLDER + '/pages/**/*.md' )
224253 . then ( ( files ) => {
225254 let promises = [ ] ;
226255 files . forEach ( ( file ) => {
@@ -246,6 +275,10 @@ exports.createIndex = () => {
246275 } ) ;
247276} ;
248277
278+ /**
279+ * @param {string } rawquery
280+ * @returns
281+ */
249282exports . getResults = ( rawquery ) => {
250283 query . ranks = [ ] ;
251284 return readCorpus ( )
0 commit comments