UNPKG

3.8 kBPlain TextView Raw
1import * as deepmerge from 'deepmerge';
2import {IEnvironmentArgs} from "../environment/environment-component";
3import {forwardChildIamRoleStatements} from "./plugin";
4
5export interface IConfigParseResult {
6
7 /**
8 * Either SPA or ISO
9 */
10 stackType?: string,
11
12 /**
13 * Listof js-objects or single js-object to be merged into serverless.yml
14 */
15 slsConfigs: any | Array<any>,
16
17 /**
18 * list of js-objects to be transformed into webpack-configs (each config creates a separate bundle)
19 */
20 webpackConfigs: Array<any>,
21
22 /**
23 * list of modules to apply to the final bundle
24 *
25 * TODO specify type!!!
26 */
27 postBuilds: Array<any>,
28
29
30 iamRoleStatements: Array<any>,
31
32
33 environments?: Array<IEnvironmentArgs>,
34
35
36 // the following fields are taken directly from the TopLevelConfiguration
37 stackName?: string,
38
39 // may not be there in every app!, e.g. SPA does not use it
40 assetsPath?: string,
41
42 buildPath?: string,
43
44 region?: string,
45
46 domain?: string,
47
48 /** if an environment provides the ARN of a certificate, required of SPAs */
49 certArn?: string,
50
51 /**
52 * optional flag (default: true), whether the `start` command should be added to the scripts,
53 * evaluation of the flag takes place in [[infrastructure-scripts.build.writeScriptsToPackageJson]]
54 */
55 supportOfflineStart?: boolean,
56
57 /**
58 * optional flag (default: true), whether the `domain` command should be added to the scripts,
59 * evaluation of the flag takes place in [[infrastructure-scripts.build.writeScriptsToPackageJson]]
60 */
61 supportCreateDomain?: boolean
62}
63
64/**
65 * Merges a list of ConfigParseResults into a single ParseResult, with a single sls-congiguration
66 *
67 * @param results
68 */
69export function mergeParseResults(results: Array<IConfigParseResult>) {
70
71 //console.log("mergeParseResults: ", results);
72
73 return results.reduce((merged, item) => {
74 //console.log("afterMerge: ", merged.slsConfigs);
75
76 //console.log("mergeParseResults: ", item.slsConfigs);
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 // usually, these fields should not be defined here, but only from the top-level configuration
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