UNPKG

scv-bilara

Version:
152 lines (141 loc) 3.99 kB
(function (exports) { const path = require('path'); const fs = require('fs'); const { BilaraPath, AuthorsV2 } = require('scv-esm'); const BilaraData = require('./bilara-data.js'); const Seeker = require('./seeker.cjs'); const { DBG_EXAMPLES, } = require('./defines.cjs'); class ExampleV2 { constructor(opts={}) { const msg = 'ExampleV2.ctor()'; const dbg = DBG_EXAMPLES; let { lang='en', author, category='sutta', branch='published', repository='ebt-data', gitAccount='ebt-site', memoize=true, bilaraData, } = opts; author = author || AuthorsV2.langAuthor(lang, { category, }); let bdOpts = { name: repository, gitAccount, } if (bilaraData == null) { dbg && console.log(msg, '[1]new BilaraData', bdOpts); bilaraData = new BilaraData(bdOpts); } Object.assign(this, { lang, author, category, branch, gitAccount, bilaraData, memoize, repository, }); } get initialized() { return this.bilaraData.initialized; } langAuthorPath() { let { lang, author, category, bilaraData } = this; let { root } = bilaraData; author = author || AuthorsV2.langAuthor(lang); let authorInfo = AuthorsV2.authorInfo(author); if (!authorInfo) { return null; } let { exampleVersion:egVer } = authorInfo; let pathDir = `${root}/examples`; let fname = [ 'examples', lang, category, egVer, `${author}.txt`, ].join('-'); return path.join(root, 'examples', fname); } async examples() { let egPath = this.langAuthorPath(); if (egPath == null) { return [] } let text = (await fs.promises.readFile(egPath)).toString(); return text.split('\n'); } async initialize() { const msg = 'ExampleV2.initialize()'; const dbg = DBG_EXAMPLES; let { author, lang, memoize, bilaraData } = this; let seekerOpts = { lang, author, maxDoc: 100, minLang: 2, readFile: memoize, trilingual: true, } dbg && console.log(msg, '[1]new Seeker', seekerOpts); seekerOpts.bilaraData = bilaraData; let seeker = new Seeker(seekerOpts); this.seeker = seeker; await bilaraData.initialize(); await seeker.initialize(); return this; } async exampleSuttas(pattern, opts={}) { const msg = 'ExampleV2.findExample()'; const dbg = DBG_EXAMPLES; let { method } = opts; let { lang, minLang, author, initialized, bilaraData, seeker } = this; if (!initialized) { throw new Error(emsg); } let findArgs = seeker.findArgs([{ lang, pattern, docLang: lang, docAuthor: author, refLang: 'en', refAuthor: 'sujato', minLang, trilingual: true, }]); dbg && console.log(msg, '[1]findArgs', findArgs); let res = await seeker.find(findArgs); let results = !!method && (res.method !== method) ? [] : res.mlDocs.map(mld=>{ let { sutta_uid, segsMatched, langSegs } = mld; return { sutta_uid, segsMatched, segsTotal: langSegs.pli }; }); dbg && console.log(msg, '[2]', results); return results; } async suttasOfExamples(examples, opts={}) { let map = {} examples = [...examples].sort().filter(e=>!!e); for (let i=0; i < examples.length; i++) { let example = examples[i]; let suttas = await this.exampleSuttas(example, opts); map[example] = suttas.map(s=>s.sutta_uid); } return map; } } module.exports = exports.ExampleV2 = ExampleV2; })(typeof exports === "object" ? exports : (exports = {}));