59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
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 = 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);
|
|
});
|
|
};
|