@@ -103,12 +103,42 @@ const input = (term, definition) => {
103103 default :
104104 throw new Error ( `${ type } is not defined.` )
105105 }
106- checkValue ( inputValue )
107106 return inputValue
108107}
109108
110- const checkValue = ( value ) => {
111- // TODO
109+ const checkValue = ( term , value , definition ) => {
110+ const rules = definition . rules
111+ const errorMessages = [ ]
112+
113+ if ( definition . required && _ . isEmpty ( value ) ) errorMessages . push ( `${ term } is required.` )
114+
115+ _ . forEach ( rules , ( ruleSetting , ruleName ) => {
116+ switch ( ruleName ) {
117+ case 'firstLatter' :
118+ if ( [ 'small' , 'lower' , 'lowercase' ] . includes ( ruleSetting ) && / ^ [ ^ a - z ] .* / . test ( value ) ) {
119+ errorMessages . push ( `${ term } must be first latter is lowercase.` )
120+ } else if ( [ 'big' , 'upper' , 'uppercase' ] . includes ( ruleSetting ) && / ^ [ ^ A - Z ] .* / . test ( value ) ) {
121+ errorMessages . push ( `${ term } must be first latter is uppercase.` )
122+ }
123+ break
124+ case 'dotAtEnd' :
125+ if ( ruleSetting ) {
126+ if ( / [ ^ \. ] $ / . test ( value ) ) errorMessages . push ( `${ term } should not put dot (.) at the end.` )
127+ } else {
128+ if ( / \. $ / . test ( value ) ) errorMessages . push ( `${ term } should put dot (.) at the end.` )
129+ }
130+ break
131+ case 'ascii' :
132+ if ( ! ruleSetting && / [ \u30a0 - \u30ff \u3040 - \u309f \u3005 - \u3006 \u30e0 - \u9fcf ] / . test ( value ) ) {
133+ errorMessages . push ( `${ term } should only alphabet.` )
134+ }
135+ break
136+ default :
137+ throw new Error ( `${ ruleName } is not defined.` )
138+ }
139+ } )
140+
141+ return errorMessages . join ( "\n" )
112142}
113143
114144const replaceTerms = ( program , template , definitions , terms ) => {
@@ -132,15 +162,20 @@ const replaceTerm = (program, template, definition, term) => {
132162 } else {
133163 value = ''
134164 }
135- while ( definition . required && _ . isEmpty ( value ) ) {
136- console . log ( `${ warningColor } ${ term } is required${ reset } ` )
165+ let errorMessages = checkValue ( term , value , definition )
166+ while ( ! _ . isEmpty ( errorMessages ) ) {
167+ console . log ( `${ warningColor } ${ errorMessages } ${ reset } ` )
137168 value = input ( term , definition )
169+ errorMessages = checkValue ( term , value , definition )
138170 }
139171 }
140172 } else {
141173 if ( _ . isEmpty ( value ) && definition . required ) throw new Error ( `${ term } is required.` )
142174 }
143175
176+ const errorMessages = checkValue ( term , value , definition )
177+ if ( ! _ . isEmpty ( errorMessages ) ) throw new Error ( errorMessages )
178+
144179 let decoratedValue = value
145180 if ( ! _ . isEmpty ( value ) ) {
146181 if ( definition . prefix ) decoratedValue = definition . prefix + decoratedValue
0 commit comments