UNPKG

wuchale

Version:

Protobuf-like i18n from plain code

44 lines (43 loc) 1.65 kB
import { AdapterHandler } from "../handler.js"; import { color, Logger } from "../log.js"; import { readFile } from "node:fs/promises"; import { watch as watchFS } from 'chokidar'; function extractor(handler) { const adapterName = color.magenta(handler.key); return async (filename) => { console.info(`${adapterName}: Extract from ${color.cyan(filename)}`); const contents = await readFile(filename); await handler.transform(contents.toString(), filename); }; } export async function extract(config, clean, watch, sync) { !watch && console.info('Extracting...'); const handlers = []; const sharedState = {}; for (const [key, adapter] of Object.entries(config.adapters)) { const handler = new AdapterHandler(adapter, key, config, 'cli', process.cwd(), new Logger(config.logLevel)); await handler.init(sharedState); handlers.push(handler); } // other loop to make sure that all otherFileMatchers are collected for (const handler of handlers) { await handler.directScanFS(clean, sync); } if (!watch) { console.info('Extraction finished.'); return; } // watch console.info('Watching for changes'); const handlersWithExtr = handlers.map(h => [h.fileMatches, extractor(h)]); watchFS('.', { ignoreInitial: true }).on('all', async (event, filename) => { if (!['add', 'change'].includes(event)) { return; } for (const [fileMatches, extract] of handlersWithExtr) { if (fileMatches(filename)) { await extract(filename); } } }); }