@@ -28,13 +28,19 @@ const DEFAULT_OPTIONS = {
2828 features : null
2929} ;
3030
31+ const DEPRECATED_OPTIONS = {
32+ feature : "behavior" ,
33+ features : "behaviors"
34+ } ;
35+
3136class Options {
3237 constructor ( coreOptions = { } ) {
3338 this . _onlyProgrammaticOptions = coreOptions . onlyProgrammaticOptions ;
3439 this . _options = { } ;
3540 this . _optionsNames = Object . keys ( DEFAULT_OPTIONS ) ;
3641 this . _customDefaults = { } ;
3742 this . _initialized = false ;
43+ this . _removeDeprecatedOption = this . _removeDeprecatedOption . bind ( this ) ;
3844 this . _commandLineArguments = new CommandLineArguments ( DEFAULT_OPTIONS ) ;
3945 }
4046
@@ -48,14 +54,14 @@ class Options {
4854 } ;
4955 if ( ! this . _onlyProgrammaticOptions ) {
5056 await this . _commandLineArguments . init ( ) ;
51- this . _options = this . _getDefinedOptions (
57+ this . _options = this . _getValidOptions (
5258 this . _removeDeprecatedOptions ( {
5359 ...baseOptions ,
5460 ...this . _commandLineArguments . options
5561 } )
5662 ) ;
5763 } else {
58- this . _options = this . _getDefinedOptions ( this . _removeDeprecatedOptions ( baseOptions ) ) ;
64+ this . _options = this . _getValidOptions ( this . _removeDeprecatedOptions ( baseOptions ) ) ;
5965 }
6066 }
6167 return Promise . resolve ( ) ;
@@ -101,7 +107,20 @@ class Options {
101107 this . _commandLineArguments . addCustom ( optionDetails ) ;
102108 }
103109
104- _getDefinedOptions ( options ) {
110+ getValidOptionName ( optionName ) {
111+ if ( this . _optionsNames . includes ( optionName ) && ! DEPRECATED_OPTIONS [ optionName ] ) {
112+ return optionName ;
113+ }
114+ if ( DEPRECATED_OPTIONS [ optionName ] ) {
115+ tracer . warn (
116+ `Deprecation warning: ${ optionName } option will be deprecated. Use ${ DEPRECATED_OPTIONS [ optionName ] } instead`
117+ ) ;
118+ return DEPRECATED_OPTIONS [ optionName ] ;
119+ }
120+ throw new Error ( "Not valid option" ) ;
121+ }
122+
123+ _getValidOptions ( options ) {
105124 return this . _optionsNames . reduce ( ( cleanObject , currentKey ) => {
106125 if ( ! isUndefined ( options [ currentKey ] ) ) {
107126 cleanObject [ currentKey ] = options [ currentKey ] ;
@@ -110,30 +129,28 @@ class Options {
110129 } , { } ) ;
111130 }
112131
113- // TODO, remove deprecated options
114- _removeDeprecatedOptions ( options ) {
115- if ( options . feature !== DEFAULT_OPTIONS . feature ) {
116- tracer . warn (
117- "Deprecation warning: --feature option will be deprecated. Use --behavior instead"
118- ) ;
119- if ( ! options . behavior ) {
120- options . behavior = options . feature ;
132+ _removeDeprecatedOption ( options , optionName ) {
133+ if ( options [ optionName ] !== DEFAULT_OPTIONS [ optionName ] ) {
134+ const newOption = DEPRECATED_OPTIONS [ optionName ] ;
135+ if ( ! options [ newOption ] ) {
136+ options [ newOption ] = options [ optionName ] ;
121137 }
122- }
123-
124- if ( options . features !== DEFAULT_OPTIONS . features ) {
125138 tracer . warn (
126- " Deprecation warning: --features option will be deprecated. Use --behaviors instead"
139+ ` Deprecation warning: --${ optionName } option will be deprecated. Use --${ DEPRECATED_OPTIONS [ optionName ] } instead`
127140 ) ;
128- if ( ! options . behaviors ) {
129- options . behaviors = options . features ;
130- }
131141 }
132-
133- delete options . feature ;
134- delete options . features ;
142+ delete options [ optionName ] ;
135143 return options ;
136144 }
145+
146+ _removeDeprecatedOptions ( options ) {
147+ let newOptions = options ;
148+ Object . keys ( DEPRECATED_OPTIONS ) . forEach ( optionName => {
149+ newOptions = this . _removeDeprecatedOption ( newOptions , optionName ) ;
150+ } ) ;
151+
152+ return newOptions ;
153+ }
137154}
138155
139156module . exports = Options ;
0 commit comments