@@ -8,13 +8,18 @@ let Yaml = require("js-yaml");
88const exec = require ( "child_process" ) . execSync ;
99const moduleParams = require ( "@rover-tools/engine" ) . rover_modules ;
1010const Stack = require ( "@rover-tools/engine" ) . rover_modules ;
11+ const rover_config = require ( "@rover-tools/engine" ) . rover_config ;
1112import { AnyArray , AnyObject } from "immer/dist/internal" ;
1213const rover_utilities = require ( "@rover-tools/engine" ) . rover_utilities ;
1314const TOML = require ( '@iarna/toml' )
1415let pythonpattern = new RegExp ( / p y t h o n [ 1 - 9 ] * \. [ 1 - 9 ] * / g)
1516let jspattern = new RegExp ( / n o d e j s [ 1 - 9 ] * \. [ a - z A - Z ] * / g)
1617let yamlpattern = new RegExp ( / ( \. y a m l $ ) / g)
18+ let envpattern = new RegExp ( / ^ e n v [ 0 - 9 ] [ 0 - 9 ] + $ / g)
1719let apipathpattern = new RegExp ( / ^ \/ [ a - z A - Z ] * ( \/ [ a - z A - Z ] * - * ) * / g)
20+ let stringpattern = new RegExp ( / ^ [ A - Z a - z ] + $ / g)
21+
22+ const crypto = require ( 'crypto' ) ;
1823
1924export let s3Choice :any = [ ] ;
2025export let accesskey :any , secretkey :any ;
@@ -48,23 +53,38 @@ export let jsonCreation = async function (obj:any) {
4853 }
4954} ;
5055
51- export let inputString = async function ( userName : string , defaults :string , message = "" ) {
56+ export let inputString = async function ( userName : string , defaults :string , optional : boolean , message = "" ) {
5257 let takeInput = await inquirer . prompt ( [
5358 {
5459 type : "input" ,
5560 name : userName ,
5661 message : message ,
5762 validate : function ( value ) {
63+ let pass = true
64+ let message = ""
5865 if ( userName == "path" ) {
59- let pass = apipathpattern . test ( value )
60- if ( pass ) {
61- return true
66+ let passtest = apipathpattern . test ( value )
67+ if ( passtest ) {
68+ pass = true
69+ } else {
70+ message = "Please enter a valid path"
71+ }
72+ } else {
73+ let passtest
74+ if ( ! optional ) {
75+ if ( stringpattern . test ( value ) ) passtest = true
76+ else message = `${ userName } should have only alphanumeric values`
77+
78+ }
79+
6280 }
63- return "Please enter a valid path"
64- } else {
65- return true
81+ if ( envpattern . test ( userName ) ) {
82+ let passtest
83+ if ( value !== "" && value !== undefined ) passtest = true
84+ else message = "environment values cannot be empty"
6685 }
67-
86+ if ( message !== "" ) return message
87+ else return true
6888 } ,
6989 } ,
7090 ] ) ;
@@ -130,11 +150,11 @@ export let inputNumber = async function (userName: string,message:string) {
130150 message : `Please enter the required number of ${ displayname } you want ?` ,
131151 name : `${ userName } ` ,
132152 validate : function ( value ) {
133- let pass = ! isNaN ( value )
153+ let pass = ! isNaN ( value ) && value > 0
134154 if ( pass ) {
135155 return true
136156 }
137- return 'Please enter a valid number'
157+ return 'Please enter a valid number greater than 0 '
138158
139159 } ,
140160 } ,
@@ -271,7 +291,7 @@ export let inputCli = async function (
271291 . map ( ( { key, value } ) => key ) ;
272292 res [ sobj . key ] = choiceNames [ 0 ] ;
273293 } else {
274- let name = await inputString ( "name" , "" , `${ sobj . message } -->Name` ) ;
294+ let name = await inputString ( "name" , "" , false , `${ sobj . message } -->Name` ) ;
275295
276296 let temp = name ;
277297
@@ -355,7 +375,7 @@ Object.assign(temp,ele)
355375 let deploymentparameters : any = { } ;
356376 let depBucketNames : any = { } ;
357377 for ( let i = 1 ; i <= no_of_env ; i ++ ) {
358- let env = await inputString ( `env${ i } ` , "" , `Envrionment ${ i } :` ) ;
378+ let env = await inputString ( `env${ i } ` , "" , false , `Envrionment ${ i } :` ) ;
359379 let envName = env [ `env${ i } ` ] ;
360380 envs . push ( envName ) ;
361381 let stepsChoice = buildConfig . samConfig . choices . dev ;
@@ -369,19 +389,20 @@ Object.assign(temp,ele)
369389
370390 let stackname = await inputString (
371391 `${ envName } ` ,
372- "" ,
392+ "" , true ,
393+
373394 `Stack Name(optional) --> ${ envName } :`
374395 ) ;
375396 let deploymentbucket = await inputString (
376397 `${ envName } ` ,
377- "" ,
398+ "" , true ,
378399 `Deployment Bucket(optional) --> ${ envName } :`
379400 ) ;
380401 let regionChoice = buildConfig . samConfig . choices . deploymentregion ;
381402 let deployment_region = await inputType ( `${ envName } ` , regionChoice , "Deployment Region" ) ;
382403 let deployment_parameter = await inputString (
383404 `${ envName } ` ,
384- "" ,
405+ "" , true ,
385406 `Deployment Parameter(optional) --> ${ envName } :`
386407 ) ;
387408 steps = { ...steps , ...steps1 } ;
@@ -537,11 +558,11 @@ export let samValidate=async function(){
537558 throw new Error ( "SAM Template error \n" )
538559 }
539560 } catch ( error ) {
540- throw new Error ( "Not a SAM file or " + error . message )
561+ throw new Error ( "Not a SAM file or " + error . message )
541562 }
542563
543564}
544565export let makeid = async function ( ) {
545- const crypto = require ( 'crypto' ) ;
566+
546567 return ( crypto . randomBytes ( 1 ) . toString ( "base64url" ) . replace ( / \d / g, 'd' ) ) . toLowerCase ( ) ;
547568}
0 commit comments