UNPKG

ionic

Version:

A tool for creating and developing Ionic Framework mobile apps.

152 lines (150 loc) • 6.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const cli_framework_1 = require("@ionic/cli-framework"); const color_1 = require("../../color"); const generate_1 = require("../../generate"); const app_scripts_1 = require("./app-scripts"); const GENERATOR_TYPES = ['component', 'directive', 'page', 'pipe', 'provider', 'tabs']; class IonicAngularGenerateRunner extends generate_1.GenerateRunner { constructor(e) { super(); this.e = e; } async getCommandMetadata() { return { groups: [], summary: `Generate pipes, components, pages, directives, providers, and tabs`, description: ` Automatically create components for your Ionic app. The given ${color_1.input('name')} is normalized into an appropriate naming convention. For example, ${color_1.input('ionic generate page neat')} creates a page by the name of ${color_1.input('NeatPage')} in ${color_1.input('src/pages/neat/')}. `, exampleCommands: [ '', ...GENERATOR_TYPES, 'component foo', 'page Login', 'page Detail --no-module', 'page About --constants', 'pipe MyFilterPipe', ], inputs: [ { name: 'type', summary: `The type of generator (e.g. ${GENERATOR_TYPES.map(t => color_1.input(t)).join(', ')})`, validators: [cli_framework_1.validators.required, cli_framework_1.contains(GENERATOR_TYPES, {})], }, { name: 'name', summary: 'The name of the component being generated', validators: [cli_framework_1.validators.required], }, ], options: [ { name: 'module', summary: 'Do not generate an NgModule for the page', hint: color_1.weak('[page]'), type: Boolean, default: true, }, { name: 'constants', summary: 'Generate a page constant file for lazy-loaded pages', hint: color_1.weak('[page]'), type: Boolean, default: false, }, ], }; } async ensureCommandLine(inputs, options) { if (!inputs[0]) { const generatorType = await this.e.prompt({ type: 'list', name: 'generatorType', message: 'What would you like to generate:', choices: GENERATOR_TYPES, }); inputs[0] = generatorType; } if (!inputs[1]) { const generatorName = await this.e.prompt({ type: 'input', name: 'generatorName', message: 'What should the name be?', validate: v => cli_framework_1.validators.required(v), }); inputs[1] = generatorName; } } createOptionsFromCommandLine(inputs, options) { const baseOptions = super.createOptionsFromCommandLine(inputs, options); return { ...baseOptions, module: options['module'] ? true : false, constants: options['constants'] ? true : false, }; } async run(options) { const AppScripts = await app_scripts_1.importAppScripts(this.e.project.directory); const appScriptsArgs = cli_framework_1.unparseArgs({ _: [], module: options.module, constants: options.constants }, { useEquals: false, ignoreFalse: true, allowCamelCase: true }); AppScripts.setProcessArgs(['node', 'appscripts'].concat(appScriptsArgs)); AppScripts.setCwd(this.e.project.directory); const context = AppScripts.generateContext(); switch (options.type) { case 'page': await AppScripts.processPageRequest(context, options.name, options); break; case 'component': const componentData = await this.getModules(context, 'component'); await AppScripts.processComponentRequest(context, options.name, componentData); break; case 'directive': const directiveData = await this.getModules(context, 'directive'); await AppScripts.processDirectiveRequest(context, options.name, directiveData); break; case 'pipe': const pipeData = await this.getModules(context, 'pipe'); await AppScripts.processPipeRequest(context, options.name, pipeData); break; case 'provider': const providerData = context.appNgModulePath; await AppScripts.processProviderRequest(context, options.name, providerData); break; case 'tabs': const tabsData = await this.tabsPrompt(); await AppScripts.processTabsRequest(context, options.name, tabsData, options); break; } this.e.log.ok(`Generated a ${color_1.strong(options.type)}${options.type === 'tabs' ? ' page' : ''} named ${color_1.strong(options.name)}!`); } async tabsPrompt() { const tabNames = []; const howMany = await this.e.prompt({ type: 'input', name: 'howMany', message: 'How many tabs?', validate: v => cli_framework_1.validators.numeric(v), }); for (let i = 0; i < parseInt(howMany, 10); i++) { const tabName = await this.e.prompt({ type: 'input', name: 'tabName', message: 'Name of this tab:', }); tabNames.push(tabName); } return tabNames; } async getModules(context, kind) { switch (kind) { case 'component': return context.componentsNgModulePath ? context.componentsNgModulePath : context.appNgModulePath; case 'pipe': return context.pipesNgModulePath ? context.pipesNgModulePath : context.appNgModulePath; case 'directive': return context.directivesNgModulePath ? context.directivesNgModulePath : context.appNgModulePath; } } } exports.IonicAngularGenerateRunner = IonicAngularGenerateRunner;