@@ -6,8 +6,12 @@ const Yaml = require('js-yaml');
6
6
const Loader = require ( '../loader' ) ;
7
7
const Utils = require ( '../utils' ) ;
8
8
9
+ const TravisMerge = require ( './merge' ) ;
9
10
10
- const internals = { } ;
11
+
12
+ const internals = {
13
+ validMergeModes : new Set ( [ 'deep_merge_append' , 'deep_merge_prepend' , 'deep_merge' , 'merge' ] )
14
+ } ;
11
15
12
16
13
17
internals . log = Debug ( 'detect-node-support' ) ;
@@ -22,6 +26,8 @@ internals.normalizeImports = (travisYaml, { relativeTo }) => {
22
26
entry = { source : entry } ;
23
27
}
24
28
29
+ const original = entry . source ;
30
+
25
31
if ( entry . source . startsWith ( './' ) ) {
26
32
entry . source = entry . source . substring ( 2 ) ;
27
33
@@ -33,6 +39,14 @@ internals.normalizeImports = (travisYaml, { relativeTo }) => {
33
39
}
34
40
}
35
41
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
+
36
50
return entry ;
37
51
} )
38
52
. filter ( ( entry ) => ! entry . if ) ; // @todo : log a warning
@@ -82,13 +96,8 @@ exports.apply = async (yaml, { loadFile, relativeTo, cache = new Map() }) => {
82
96
83
97
await exports . apply ( imported , { loadFile, relativeTo : entry , cache } ) ;
84
98
85
- for ( const key in imported ) {
86
-
87
- if ( key === 'import' ) {
88
- continue ;
89
- }
99
+ delete imported . import ;
90
100
91
- yaml [ key ] = imported [ key ] ;
92
- }
101
+ TravisMerge [ entry . mode ] ( yaml , imported ) ;
93
102
}
94
103
} ;
0 commit comments