1 | import * as deepmerge from 'deepmerge';
|
2 | import {IEnvironmentArgs} from "../environment/environment-component";
|
3 | import {forwardChildIamRoleStatements} from "./plugin";
|
4 |
|
5 | export interface IConfigParseResult {
|
6 |
|
7 | |
8 |
|
9 |
|
10 | stackType?: string,
|
11 |
|
12 | |
13 |
|
14 |
|
15 | slsConfigs: any | Array<any>,
|
16 |
|
17 | |
18 |
|
19 |
|
20 | webpackConfigs: Array<any>,
|
21 |
|
22 | |
23 |
|
24 |
|
25 |
|
26 |
|
27 | postBuilds: Array<any>,
|
28 |
|
29 |
|
30 | iamRoleStatements: Array<any>,
|
31 |
|
32 |
|
33 | environments?: Array<IEnvironmentArgs>,
|
34 |
|
35 |
|
36 |
|
37 | stackName?: string,
|
38 |
|
39 |
|
40 | assetsPath?: string,
|
41 |
|
42 | buildPath?: string,
|
43 |
|
44 | region?: string,
|
45 |
|
46 | domain?: string,
|
47 |
|
48 |
|
49 | certArn?: string,
|
50 |
|
51 | |
52 |
|
53 |
|
54 |
|
55 | supportOfflineStart?: boolean,
|
56 |
|
57 | |
58 |
|
59 |
|
60 |
|
61 | supportCreateDomain?: boolean
|
62 | }
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | export function mergeParseResults(results: Array<IConfigParseResult>) {
|
70 |
|
71 |
|
72 |
|
73 | return results.reduce((merged, item) => {
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 | return {
|
80 | stackType: item.stackType !== undefined ? item.stackType : merged.stackType,
|
81 | slsConfigs: deepmerge.all([
|
82 | ...(Array.isArray(item.slsConfigs) ? item.slsConfigs : [item.slsConfigs])
|
83 | ], merged.slsConfigs),
|
84 | webpackConfigs: merged.webpackConfigs.concat(item.webpackConfigs),
|
85 | postBuilds: merged.postBuilds.concat(item.postBuilds),
|
86 | environments: (merged.environments !== undefined ? merged.environments : []).concat(
|
87 | item.environments !== undefined ? item.environments : []),
|
88 |
|
89 | iamRoleStatements: merged.iamRoleStatements.concat(item.iamRoleStatements !== undefined ? item.iamRoleStatements : []),
|
90 |
|
91 |
|
92 | stackName: item.stackName !== undefined ? item.stackName : merged.stackName,
|
93 | assetsPath: item.assetsPath !== undefined ? item.assetsPath : merged.assetsPath,
|
94 | buildPath: item.buildPath !== undefined ? item.buildPath : merged.buildPath,
|
95 | region: item.region !== undefined ? item.region : merged.region,
|
96 | domain: item.domain !== undefined ? item.domain : merged.domain,
|
97 | certArn: item.certArn !== undefined ? item.certArn : merged.certArn,
|
98 | supportOfflineStart: item.supportOfflineStart !== undefined ? item.supportOfflineStart : merged.supportOfflineStart,
|
99 | supportCreateDomain: item.supportCreateDomain !== undefined ? item.supportCreateDomain : merged.supportCreateDomain
|
100 | }
|
101 | }, {
|
102 | slsConfigs: {},
|
103 | webpackConfigs: [],
|
104 | postBuilds: [],
|
105 | iamRoleStatements: []
|
106 | })
|
107 | } |
\ | No newline at end of file |