Added CLI options for explicit specifying location of partials and main template
This commit is contained in:
		@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## v0.1.0 - _January 11, 2018_
 | 
					## v0.1.0 - _January 11, 2018_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added CLI options for explicit specifying location of partials and main template
 | 
				
			||||||
* Fixed array typings with union types (#295)
 | 
					* Fixed array typings with union types (#295)
 | 
				
			||||||
* Add event ABIs to context data passed to templates (#302)
 | 
					* Add event ABIs to context data passed to templates (#302)
 | 
				
			||||||
* Add constructor ABIs to context data passed to templates (#304)
 | 
					* Add constructor ABIs to context data passed to templates (#304)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,21 +20,53 @@ const ABI_TYPE_EVENT = 'event';
 | 
				
			|||||||
const MAIN_TEMPLATE_NAME = 'contract.mustache';
 | 
					const MAIN_TEMPLATE_NAME = 'contract.mustache';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const args = yargs
 | 
					const args = yargs
 | 
				
			||||||
    .option('abiGlob', {
 | 
					    .option('abis', {
 | 
				
			||||||
 | 
					        alias: ['abiGlob'],
 | 
				
			||||||
        describe: 'Glob pattern to search for ABI JSON files',
 | 
					        describe: 'Glob pattern to search for ABI JSON files',
 | 
				
			||||||
        type: 'string',
 | 
					        type: 'string',
 | 
				
			||||||
        demand: true,
 | 
					        demandOption: true,
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					    .option('output', {
 | 
				
			||||||
 | 
					        alias: ['o', 'out'],
 | 
				
			||||||
 | 
					        describe: 'Folder where to put the output files',
 | 
				
			||||||
 | 
					        type: 'string',
 | 
				
			||||||
 | 
					        normalize: true,
 | 
				
			||||||
 | 
					        demandOption: true,
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .option('partials', {
 | 
				
			||||||
 | 
					        describe: 'Glob pattern for the partial template files',
 | 
				
			||||||
 | 
					        type: 'string',
 | 
				
			||||||
 | 
					        implies: 'template',
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .option('template', {
 | 
				
			||||||
 | 
					        describe: 'Path for the main template file that will be used to generate each contract',
 | 
				
			||||||
 | 
					        type: 'string',
 | 
				
			||||||
 | 
					        normalize: true,
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .group(['templates'], 'Deprecated')
 | 
				
			||||||
    .option('templates', {
 | 
					    .option('templates', {
 | 
				
			||||||
        describe: 'Folder where to search for templates',
 | 
					        describe: 'Folder where to search for templates',
 | 
				
			||||||
        type: 'string',
 | 
					        type: 'string',
 | 
				
			||||||
        demand: true,
 | 
					 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    .option('output', {
 | 
					    .conflicts('templates', ['partials', 'template-file'])
 | 
				
			||||||
        describe: 'Folder where to put the output files',
 | 
					    .check(argv => {
 | 
				
			||||||
        type: 'string',
 | 
					        if (!argv.template && !argv.templates) {
 | 
				
			||||||
        demand: true,
 | 
					            throw new Error('You need specify the location of the template');
 | 
				
			||||||
    }).argv;
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .example("$0 --abis 'src/artifacts/**/*.json' --out 'src/contracts/generated/' --partials 'src/templates/partials/**/*.handlebars' --template 'src/templates/contract.handlebars'", 'Full usage example')
 | 
				
			||||||
 | 
					    .argv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function registerPartials(partialsGlob: string) {
 | 
				
			||||||
 | 
					    const partialTemplateFileNames = globSync(partialsGlob);
 | 
				
			||||||
 | 
					    utils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
 | 
				
			||||||
 | 
					    for (const partialTemplateFileName of partialTemplateFileNames) {
 | 
				
			||||||
 | 
					        const namedContent = utils.getNamedContent(partialTemplateFileName);
 | 
				
			||||||
 | 
					        Handlebars.registerPartial(namedContent.name, namedContent.content);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return partialsGlob;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function writeOutputFile(name: string, renderedTsCode: string): void {
 | 
					function writeOutputFile(name: string, renderedTsCode: string): void {
 | 
				
			||||||
    const fileName = toSnakeCase(name);
 | 
					    const fileName = toSnakeCase(name);
 | 
				
			||||||
@@ -45,15 +77,18 @@ function writeOutputFile(name: string, renderedTsCode: string): void {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input));
 | 
					Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input));
 | 
				
			||||||
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output));
 | 
					Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output));
 | 
				
			||||||
const partialTemplateFileNames = globSync(`${args.templates}/partials/**/*.mustache`);
 | 
					
 | 
				
			||||||
for (const partialTemplateFileName of partialTemplateFileNames) {
 | 
					if (args.partials) {
 | 
				
			||||||
    const namedContent = utils.getNamedContent(partialTemplateFileName);
 | 
					    registerPartials(args.partials);
 | 
				
			||||||
    Handlebars.registerPartial(namedContent.name, namedContent.content);
 | 
					}
 | 
				
			||||||
 | 
					if (args.templates) {
 | 
				
			||||||
 | 
					    registerPartials(`${args.templates}/partials/**/*.{mustache,handlebars}`);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainTemplate = utils.getNamedContent(`${args.templates}/${MAIN_TEMPLATE_NAME}`);
 | 
					const mainTemplate = utils.getNamedContent(args.template ? args.template : `${args.templates}/${MAIN_TEMPLATE_NAME}`);
 | 
				
			||||||
const template = Handlebars.compile<ContextData>(mainTemplate.content);
 | 
					const template = Handlebars.compile<ContextData>(mainTemplate.content);
 | 
				
			||||||
const abiFileNames = globSync(args.abiGlob);
 | 
					const abiFileNames = globSync(args.abis);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (_.isEmpty(abiFileNames)) {
 | 
					if (_.isEmpty(abiFileNames)) {
 | 
				
			||||||
    utils.log(`${chalk.red(`No ABI files found.`)}`);
 | 
					    utils.log(`${chalk.red(`No ABI files found.`)}`);
 | 
				
			||||||
    utils.log(`Please make sure you've passed the correct folder name and that the files have
 | 
					    utils.log(`Please make sure you've passed the correct folder name and that the files have
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user