UNPKG

harmonyc

Version:

Harmony Code - model-driven BDD for Vitest

49 lines (48 loc) 2.14 kB
import glob from 'fast-glob'; import { existsSync, readFileSync, writeFileSync } from 'fs'; import { resolve } from 'path'; import { compileFeature } from "./compile.js"; import { testFileName } from "../filenames/filenames.js"; import { VitestGenerator } from "../code_generator/VitestGenerator.js"; export async function compileFiles(pattern) { var _a; const fns = await glob(pattern); if (!fns.length) throw new Error(`No files found for pattern: ${String(pattern)}`); const results = await Promise.allSettled(fns.map((fn) => compileFile(fn))); const compiled = results.flatMap((r) => r.status === 'fulfilled' ? [r.value] : []); const errored = results.flatMap((r) => r.status === 'rejected' && r.reason ? [r.reason] : []); for (const error of errored) { console.error((_a = error.message) !== null && _a !== void 0 ? _a : error); } console.log(`Compiled ${compiled.length} file${compiled.length === 1 ? '' : 's'}.`); const features = compiled.filter((f) => f !== undefined); const generated = features.filter((f) => f.phrasesFileAction === 'generated'); if (generated.length) { console.log(`Generated ${generated.length} phrases file${generated.length === 1 ? '' : 's'}.`); } return { fns, outFns: features.map((f) => f.outFile.name) }; } export async function compileFile(fn) { var _a; fn = resolve(fn); const src = readFileSync(fn, 'utf8') .toString() .replace(/\r\n/g, '\n') .replace(/\r/g, '\n'); try { const { outFile, phrasesFile } = compileFeature(fn, src); writeFileSync(outFile.name, outFile.value); let phrasesFileAction = 'ignored'; if (!existsSync(phrasesFile.name)) { phrasesFileAction = 'generated'; writeFileSync(phrasesFile.name, phrasesFile.value); } return { phrasesFileAction, outFile, phrasesFile }; } catch (e) { const outFileName = testFileName(fn); writeFileSync(outFileName, VitestGenerator.error((_a = e.message) !== null && _a !== void 0 ? _a : `${e}`, e.stack)); return undefined; } }