@@ -6,8 +6,12 @@ const Yaml = require('js-yaml');
66const Loader = require ( '../loader' ) ;
77const Utils = require ( '../utils' ) ;
88
9+ const TravisMerge = require ( './merge' ) ;
910
10- const internals = { } ;
11+
12+ const internals = {
13+ validMergeModes : new Set ( [ 'deep_merge_append' , 'deep_merge_prepend' , 'deep_merge' , 'merge' ] )
14+ } ;
1115
1216
1317internals . log = Debug ( 'detect-node-support' ) ;
@@ -22,6 +26,8 @@ internals.normalizeImports = (travisYaml, { relativeTo }) => {
2226 entry = { source : entry } ;
2327 }
2428
29+ const original = entry . source ;
30+
2531 if ( entry . source . startsWith ( './' ) ) {
2632 entry . source = entry . source . substring ( 2 ) ;
2733
@@ -33,6 +39,14 @@ internals.normalizeImports = (travisYaml, { relativeTo }) => {
3339 }
3440 }
3541
42+ if ( ! entry . mode ) {
43+ entry . mode = 'deep_merge_append' ;
44+ }
45+
46+ if ( ! internals . validMergeModes . has ( entry . mode ) ) {
47+ throw new Error ( `Invalid merge mode for ${ original } in ${ relativeTo ? relativeTo . source : '.travis.yml' } : ${ entry . mode } ` ) ;
48+ }
49+
3650 return entry ;
3751 } )
3852 . filter ( ( entry ) => ! entry . if ) ; // @todo : log a warning
@@ -82,13 +96,8 @@ exports.apply = async (yaml, { loadFile, relativeTo, cache = new Map() }) => {
8296
8397 await exports . apply ( imported , { loadFile, relativeTo : entry , cache } ) ;
8498
85- for ( const key in imported ) {
86-
87- if ( key === 'import' ) {
88- continue ;
89- }
99+ delete imported . import ;
90100
91- yaml [ key ] = imported [ key ] ;
92- }
101+ TravisMerge [ entry . mode ] ( yaml , imported ) ;
93102 }
94103} ;
0 commit comments