@gravityforms/gulp-tasks
Version:
Configurable Gulp tasks for use in Gravity Forms projects.
104 lines (93 loc) • 2.87 kB
JavaScript
const gulp = require( 'gulp' );
const glob = require( 'glob' );
const fs = require( 'fs' );
const { ESLint } = require( 'eslint' );
const getConfig = require( '../../config' );
const { config } = getConfig();
const { trailingSlashIt } = require( '../utils/tools' );
const args = require( '../utils/get-args' );
const eslintrcConfig = require( '../../.eslintrc.js' );
/**
* @function eslintProcess
* @description Run eslint based on the options provided.
* @async
* @param {object} options Options object.
* @param {Array<object>} options.eslintConfig Array of objects containing eslint configurations.
* @return {Promise}
*/
async function eslintProcess( { eslintConfig } ) {
let error = false;
for ( const configObj of eslintConfig ) {
const files = [];
// Get files from glob pattern.
if ( typeof configObj.src === 'string' ) {
files.push( ...glob.sync( configObj.src ) );
} else if ( Array.isArray( configObj.src ) ) {
for ( const src of configObj.src ) {
files.push( ...glob.sync( src ) );
}
}
const eslint = new ESLint( {
fix: ! args.nofix,
baseConfig: eslintrcConfig,
useEslintrc: ! process.env.INIT_CWD.includes( 'packages/npm' ),
} );
const results = await eslint.lintFiles( files );
const formatter = await eslint.loadFormatter( 'stylish' );
const resultText = formatter.format( results );
results.forEach( ( result ) => {
const output = result.output || result.code;
const errorCount = result.errorCount;
if ( errorCount > 0 && output ) {
fs.writeFileSync( result.filePath, output );
}
} );
if ( resultText ) {
console.log( resultText );
}
if ( results.some( ( result ) => result.errorCount > 0 ) ) {
error = true;
}
}
if ( error ) {
process.exit( 1 );
}
}
module.exports = Object.assign( {}, {
admin() {
const eslintConfig = config?.eslint?.adminJs || [ {
src: [
`${ trailingSlashIt( config.paths.js_src ) }admin/**/*.js`,
`${ trailingSlashIt( config.paths.js_src ) }admin/**/*.jsx`,
],
dest: `${ trailingSlashIt( config.paths.js_src ) }admin/`,
} ];
return eslintProcess( {
eslintConfig,
} );
},
common() {
const eslintConfig = config?.eslint?.commonJs || [ {
src: [
`${ trailingSlashIt( config.paths.js_src ) }common/**/*.js`,
`${ trailingSlashIt( config.paths.js_src ) }common/**/*.jsx`,
],
dest: `${ trailingSlashIt( config.paths.js_src ) }common/`,
} ];
return eslintProcess( {
eslintConfig,
} );
},
theme() {
const eslintConfig = config?.eslint?.themeJs || [ {
src: [
`${ trailingSlashIt( config.paths.js_src ) }theme/**/*.js`,
`${ trailingSlashIt( config.paths.js_src ) }theme/**/*.jsx`,
],
dest: `${ trailingSlashIt( config.paths.js_src ) }theme/`,
} ];
return eslintProcess( {
eslintConfig,
} );
},
}, config?.tasks?.builtins?.eslint || {} );