import * as plugins from './mod.plugins.js'; import prettier from 'prettier'; import { Project } from '../classes.project.js'; import { logger } from '../gitzone.logging.js'; const prettierDefaultTypeScriptConfig: prettier.Options = { printWidth: 100, parser: 'typescript', singleQuote: true, }; const prettierDefaultMarkdownConfig: prettier.Options = { singleQuote: true, printWidth: 100, parser: 'markdown', }; const filesToFormat = [`ts/**/*.ts`, `test/**/*.ts`, `readme.md`, `docs/**/*.md`]; const choosePrettierConfig = (fileArg: plugins.smartfile.SmartFile) => { switch (fileArg.parsedPath.ext) { case '.ts': return prettierDefaultTypeScriptConfig; case '.md': return prettierDefaultMarkdownConfig; default: return {}; } }; const prettierTypeScriptPipestop = plugins.through2.obj( async (fileArg: plugins.smartfile.SmartFile, enc, cb) => { const fileString = fileArg.contentBuffer.toString(); const chosenConfig = choosePrettierConfig(fileArg); const filePasses = await prettier.check(fileString, chosenConfig); if (filePasses) { logger.log('info', `OK! -> ${fileArg.path} passes!`); cb(null); } else { logger.log('info', `${fileArg.path} is being reformated!`); const formatedFileString = await prettier.format(fileString, chosenConfig); fileArg.setContentsFromString(formatedFileString); cb(null, fileArg); } }, ); export const run = async (projectArg: Project) => { const formatStreamWrapper = new plugins.smartstream.StreamWrapper([ plugins.smartgulp.src(filesToFormat), prettierTypeScriptPipestop, plugins.smartgulp.replace(), ]); await formatStreamWrapper.run().catch((error) => { console.log(error); }); };