1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 1 1 1 1 1 1 1 1 1 | 'use strict'; var extend = require('../utils/extend'); var path = require('path'); var ionicAppLib = require('ionic-app-lib'); var appGenerator = require('@ionic/app-generators'); var log = ionicAppLib.logging.logger; var fail = ionicAppLib.utils.fail; var settings = { title: 'generate', alt: ['g'], name: 'generate', summary: 'Generate pages and components', options: { '--list': { title: 'List available generators', boolean: true }, '--includeSpec': { title: 'Create test spec basic to pages, components, directives, pipes and providers', boolean: true }, '--skipScss': { title: 'Not create scss for components and pages', boolean: true }, '--componentsDir': 'Path directory target is created component', '--directivesDir': 'Path directory target is created directive', '--pagesDir': 'Path directory target is created page', '--pipesDir': 'Path directory target is created pipe', '--providersDir': 'Path directory target is created provider', '--templateDir': 'Path directory templates custom to pages, components, directives, pipes and providers' }, isProjectTask: true }; function run(ionic, argv) { try { if (!argv.list && argv._.length < 3) { // TODO should have a mechanism for printing usage on invalid tasks fail('Invalid arguments. Usage: ionic generate <generator> <name>'); } if (!argv.v2) { return fail('Generators are only available for Ionic 2 projects'); } var generator = argv._[1]; var name = argv._[2]; // TODO support multiple names if (argv.list) { appGenerator.printAvailableGenerators(); return; } var includeSpec = argv.includeSpec ? true : false; var includeSass = argv.skipScss ? false : true; var generatorOptions = { generatorType: generator, suppliedName: name, includeSpec: includeSpec, includeSass: includeSass }; var componentsDir = path.join(process.cwd(), 'src', 'components'); var directivesDir = path.join(process.cwd(), 'src', 'components'); var pagesDir = path.join(process.cwd(), 'src', 'pages'); var pipesDir = path.join(process.cwd(), 'src', 'pipes'); var providersDir = path.join(process.cwd(), 'src', 'providers'); var templateDir = path.join(process.cwd(), 'node_modules', 'ionic-angular', 'templates'); if (argv.componentsDir && argv.componentsDir.length > 0) { componentsDir = path.resolve(argv.componentsDir); } if (argv.directivesDir && argv.directivesDir.length > 0) { directivesDir = path.resolve(argv.directivesDir); } if (argv.pagesDir && argv.pagesDir.length > 0) { pagesDir = path.resolve(argv.pagesDir); } if (argv.pipesDir && argv.pipesDir.length > 0) { pipesDir = path.resolve(argv.pipesDir); } if (argv.providersDir && argv.providersDir.length > 0) { providersDir = path.resolve(argv.providersDir); } if (argv.templateDir && argv.templateDir.length > 0) { templateDir = path.resolve(argv.templateDir); } var projectStructureOptions = { absoluteComponentDirPath: componentsDir, absoluteDirectiveDirPath: directivesDir, absolutePagesDirPath: pagesDir, absolutePipeDirPath: pipesDir, absoluteProviderDirPath: providersDir, absolutePathTemplateBaseDir: templateDir }; return appGenerator.generate(generatorOptions, projectStructureOptions).catch(function(err) { if (err.message === 'Unknown Generator Type') { log.error(err.message); appGenerator.printAvailableGenerators(); return; } else { return fail(err); } }); } catch (err) { return fail('There was an error generating your item:', err); } } module.exports = extend(settings, { run: run }); |