67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.8 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 = 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);
 | 
						|
  });
 | 
						|
};
 |