@gravityforms/gulp-tasks
Version:
Configurable Gulp tasks for use in Gravity Forms projects.
78 lines (65 loc) • 2.24 kB
JavaScript
import fs from 'node:fs';
import getConfig from '../../config.js';
import {
asyncForEach,
copyFolderSync,
execShellCommand,
extractCommentsToFiles,
generateHTMLFiles,
trailingSlashIt,
} from './util.js';
const { config } = getConfig();
const jsDocConfigNames = config?.generateDocs?.js?.docConfigNames || [];
const cssDocConfigs = config?.generateDocs?.css?.configs || [];
const generateJSDocs = async () => {
if ( ! jsDocConfigNames.length ) {
return;
}
await copyIndexFiles();
const configPath = trailingSlashIt( config.paths.root );
await asyncForEach( jsDocConfigNames, async ( docKey ) => {
const docConfigPath = `${ configPath }/jsdoc.${ docKey }.conf.json`;
const docConfig = JSON.parse( fs.readFileSync( docConfigPath, 'utf8' ) );
if ( docConfig?.gf_opts?.static_dirs && docConfig?.gf_opts?.output_dir ) {
await asyncForEach( docConfig.gf_opts.static_dirs, ( dir ) => {
const dirNames = dir.split( '/' );
copyFolderSync(
`${ configPath }${ dir }`,
`${ configPath }${ trailingSlashIt( docConfig.gf_opts.output_dir ) }${ dirNames[ dirNames.length - 1 ] }`,
);
} );
}
await execShellCommand( `jsdoc -c '${ configPath }jsdoc.${ docKey }.conf.json'` );
} );
};
const copyIndexFiles = async () => {
const jsIndexPageDestDir = config?.generateDocs?.js?.indexPage.destDir || '';
const jsIndexPageFiles = config?.generateDocs?.js?.indexPage.files || [];
const jsIndexPageDirs = config?.generateDocs?.js?.indexPage.directories || [];
if ( ! jsIndexPageFiles.length && ! jsIndexPageDirs.length ) {
return;
}
fs.mkdir( jsIndexPageDestDir, { recursive: true }, ( err ) => {
if ( err ) {
throw err;
}
jsIndexPageFiles.forEach( ( { src, dest } ) => copyFile( src, dest ) );
jsIndexPageDirs.forEach( ( { src, dest } ) => copyFolderSync( src, dest ) );
} );
};
const copyFile = ( source, dest ) => {
fs.copyFile( source, dest, ( err ) => {
if ( err ) {
console.log( 'Error copying ' + source, err );
}
} );
};
const init = async () => {
await extractCommentsToFiles( cssDocConfigs );
await generateJSDocs();
await generateHTMLFiles( cssDocConfigs );
};
init().then( () => {
console.log( 'Generated docs sites for all configs.' );
} );