-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfillPlaceholder.js
93 lines (67 loc) · 2 KB
/
fillPlaceholder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
'use strict';
const resolveEnvParameter = require('./resolveEnvParameter'),
_ = require('lodash')
;
const envSyntaxPattern = /^env\((.*)\)$/;
module.exports = fillPlaceholder;
function fillPlaceholder (config) {
const env = {};
config = placeholderIterator(config);
config.env = env;
return config;
function placeholderIterator (value, key) {
let match;
if (_.isPlainObject(value)) {
return _.mapValues(value, placeholderIterator);
}
if (_.isArray(value)) {
return value.map(placeholderIterator);
}
if (!_.isString(value)) return value;
// String to value
if ((match = value.match(/^%([^%]*)%$/))) {
return resolveParameter(match[1], key);
}
// String sprintf style
if (value.match(/%(.*?)%/)) {
return value.replace(/%(.*?)%/g,
(_match, group) => {
return resolveParameter(group, key);
});
}
// Default
return value;
}
function resolveParameter (parameterName, key) {
// Use config, env
let
envMatch,
parameters = config.parameters
;
if ((envMatch = parameterName.match(envSyntaxPattern))) {
parameterName = envMatch[1];
}
if (
(
envMatch
&& !process.env.hasOwnProperty(parameterName)
|| !envMatch
)
&& !(parameters && _.has(parameters,parameterName))
) {
throw missingParameterException(parameterName, key);
}
if (envMatch && process.env.hasOwnProperty(parameterName)) {
let resolvedEnvParameter = resolveEnvParameter(parameterName);
env[parameterName] = resolvedEnvParameter;
return resolvedEnvParameter;
}
if (envMatch) env[parameterName] = 'UNSET';
return _.get(parameters,parameterName);
}
}
function missingParameterException (parameterName, key) {
let err = new Error(`Missing parameter: ${parameterName} for key: ${key}`);
err.name = 'missingParameterException';
return err;
}