UNPKG

lysis-angular-form-validators-generator

Version:
106 lines (86 loc) 5.11 kB
var path = require('path'); var lysisUtils = require('api-lysis').utils; var handlebars = lysisUtils.getHandlebars(); var tsValidatorsGenerator = function(parameters) { var templatePath = path.join(__dirname, 'templates'); // templates lysisUtils.registerTemplate('resource-validator-base', path.join(templatePath, 'base-form-validators/ResourceValidatorsBase.ts.tpl')); lysisUtils.registerTemplate('resource-validator', path.join(templatePath, 'ResourceValidators.ts.tpl')); lysisUtils.registerTemplate('validation-matcher-base', path.join(templatePath, 'FormGroupValidationMatcherBase.ts.tpl')); lysisUtils.registerTemplate('validation-matcher', path.join(templatePath, 'FormGroupValidationMatcher.ts.tpl')); lysisUtils.registerTemplate('form-service', path.join(templatePath, 'tools/Form.service.ts.tpl')); lysisUtils.registerTemplate('form-class', path.join(templatePath, 'tools/Form.ts.tpl')); lysisUtils.registerTemplate('form-group-validators', path.join(templatePath, 'tools/FormGroupValidators.ts.tpl')); lysisUtils.registerTemplate('validation-types', path.join(templatePath, 'tools/ValidationTypes.ts.tpl')); lysisUtils.registerTemplate('validator-boolean', path.join(templatePath, 'app-validators/Boolean.validator.ts.tpl')); lysisUtils.registerTemplate('validator-item', path.join(templatePath, 'app-validators/Item.validator.ts.tpl')); lysisUtils.registerTemplate('validator-index', path.join(templatePath, 'app-validators/index.ts.tpl')); lysisUtils.registerTemplate('index', path.join(templatePath, 'index.ts.tpl')); var basePath = path.join(parameters.config.basePath, (parameters.generatorConfig.dir ? parameters.generatorConfig.dir : 'form-validators')); lysisUtils.createDir(path.join(basePath, 'app-validators')); lysisUtils.createDir(path.join(basePath, 'base-form-validators')); lysisUtils.createDir(path.join(basePath, 'tools')); if (!parameters.generatorConfig.classPath) { parameters.generatorConfig.classPath = '../backend-classes'; } parameters.context.classPath = parameters.generatorConfig.classPath; // create resources files from templates for (var resourceName in parameters.context.resources) { var resource = parameters.context.resources[resourceName]; var context = { resource: resource }; var className = lysisUtils.toCamelCase(resource.title, 'upper'); lysisUtils.createFile('resource-validator-base', `${basePath}/base-form-validators/${className}ValidatorsBase.ts`, context); // if extended-class target files exists, do not overwrite (except when required from config) if (!lysisUtils.exists(`${basePath}/${className}Validators.ts`)) { lysisUtils.createFile('resource-validator', `${basePath}/${className}Validators.ts`, context); } } lysisUtils.createFile('validation-matcher-base', `${basePath}/FormGroupValidationMatcherBase.ts`, parameters.context); if (!lysisUtils.exists(`${basePath}/FormGroupValidationMatcher.ts`)) { lysisUtils.createFile('validation-matcher', `${basePath}/FormGroupValidationMatcher.ts`, parameters.context); } lysisUtils.createFile('form-service', `${basePath}/tools/Form.service.ts`, parameters.context); lysisUtils.createFile('form-class', `${basePath}/tools/Form.ts`, parameters.context); lysisUtils.createFile('form-group-validators', `${basePath}/tools/FormGroupValidators.ts`, parameters.context); lysisUtils.createFile('validation-types', `${basePath}/tools/ValidationTypes.ts`, parameters.context); lysisUtils.createFile('validator-boolean', `${basePath}/app-validators/Boolean.validator.ts`, parameters.context); lysisUtils.createFile('validator-item', `${basePath}/app-validators/Item.validator.ts`, parameters.context); if (!lysisUtils.exists(`${basePath}/app-validators/index.ts`)) { lysisUtils.createFile('validator-index', `${basePath}/app-validators/index.ts`, parameters.context); } // create index file lysisUtils.createFile('index', `${basePath}/index.ts`, parameters.context); }; // Get resource validators **************************************************** handlebars.registerHelper('validators', function(property) { var validators = []; if (property.required) { validators.push('Validators.required'); } if (property.type.scalar) { switch (property.type.type) { case 'boolean': validators.push('AppValidators.boolean'); break; case 'date': case 'dateTime': // case 'time': ? validators.push('CustomValidators.date'); break; case 'integer': validators.push('CustomValidators.digits'); break; case 'decimal': validators.push('CustomValidators.number'); break; } } else { validators.push('AppValidators.item'); } if (validators.length) { return '[' + validators.join(', ') + ']'; } return 'null'; }); // Test the generator when starting `node index.js` directly if (require.main === module) { lysisUtils.getGeneratorTester() .setUrl('http://127.0.0.1:8000') // .setUrl('https://demo.api-platform.com') .setGenerator(tsValidatorsGenerator) .test(); } module.exports = tsValidatorsGenerator;