export function processRules(affInfo: AffInfo): Map<string, Rule> { const sfxRules: Sequence<Rule> = gs(affInfo.SFX || []).map(([, sfx]) => sfx).map(sfx => ({ id: sfx.id, type: 'sfx', sfx })); const pfxRules: Sequence<Rule> = gs(affInfo.PFX || []).map(([, pfx]) => pfx).map(pfx => ({ id: pfx.id, type: 'pfx', pfx })); const flagRules: Sequence<Rule> = GS.sequenceFromObject(affInfo as AffTransformFlags) .filter(([key, value]) => !!affFlag[key] && !!value) .map(([key, value]) => ({ id: value!, type: 'flag', flags: affFlag[key]})); const rules = sfxRules.concat(pfxRules).concat(flagRules) .reduce<Map<string, Rule>>((acc, rule) => { acc[rule.id] = rule; return acc; }, new Map<string, Rule>()); return rules; }
seqAffWords(tapPreApplyRules?: (w: string) => any) { const seq = genSequence(this.src.dic); const dicWords = tapPreApplyRules ? seq.map(a => (tapPreApplyRules(a), a)) : seq; return dicWords .filter(a => !!a.trim()) .concatMap(dicWord => this.aff.applyRulesToDicEntry(dicWord)); }
it('reads words', async () => { const reader = await pReader; const values = genSequence(reader) .skip(10000) .take(10) .toArray(); expect(values.length).to.be.equal(10); });
/** * @internal */ dicWordsSeq(): Sequence<WordInfo> { return genSequence(this.src.dic) .map(line => { const [word, rules] = line.split('/', 2); return { word, rules, prefixes: [], suffixes: [] }; }) ; }
return new Promise((resolve, reject) => { let resolved = false; const out = outFile ? fs.createWriteStream(outFile) : process.stdout; const bufferedSeq = genSequence(batch(seq, 500)).map(batch => batch.join('')); const dataStream = iterableToStream(bufferedSeq); const fileStream = dataStream.pipe(out); const endEvents = ['finish', 'close', 'end']; function resolvePromise() { if (!resolved) { resolved = true; resolve(); } } const endHandler = () => { cleanupStreams(); setTimeout(resolvePromise, 10); }; const errorHandler = (e: Error) => { cleanupStreams(); reject(e); }; listenToStreams(); function listenToStreams() { endEvents.forEach(event => fileStream.addListener(event, endHandler)); fileStream.addListener('error', errorHandler); dataStream.addListener('end', endHandler); } function cleanupStreams() { endEvents.forEach(event => fileStream.removeListener(event, endHandler)); fileStream.removeListener('error', errorHandler); dataStream.removeListener('end', endHandler); } });