auth0-deploy-cli 7.13.1 → 7.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/.circleci/config.yml +40 -11
  2. package/.eslintignore +1 -0
  3. package/.github/dependabot.yml +3 -0
  4. package/.nyc_output/1b0a2de3-0dae-4f80-9af7-f45cabfd5e99.json +1 -0
  5. package/.nyc_output/50c50e87-6b9d-4f9f-b6bb-a462368ff653.json +1 -0
  6. package/.nyc_output/cd0c5bb1-9480-4de3-b099-e95349d10f89.json +1 -0
  7. package/.nyc_output/processinfo/1b0a2de3-0dae-4f80-9af7-f45cabfd5e99.json +1 -0
  8. package/.nyc_output/processinfo/50c50e87-6b9d-4f9f-b6bb-a462368ff653.json +1 -0
  9. package/.nyc_output/processinfo/cd0c5bb1-9480-4de3-b099-e95349d10f89.json +1 -0
  10. package/.nyc_output/processinfo/index.json +1 -0
  11. package/.prettierignore +2 -1
  12. package/CHANGELOG.md +34 -1
  13. package/README.md +122 -65
  14. package/coverage/lcov-report/base.css +224 -0
  15. package/coverage/lcov-report/block-navigation.js +87 -0
  16. package/coverage/lcov-report/favicon.png +0 -0
  17. package/coverage/lcov-report/index.html +251 -0
  18. package/coverage/lcov-report/prettify.css +1 -0
  19. package/coverage/lcov-report/prettify.js +2 -0
  20. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  21. package/coverage/lcov-report/sorter.js +196 -0
  22. package/coverage/lcov-report/src/args.ts.html +505 -0
  23. package/coverage/lcov-report/src/commands/export.ts.html +274 -0
  24. package/coverage/lcov-report/src/commands/import.ts.html +250 -0
  25. package/coverage/lcov-report/src/commands/index.html +131 -0
  26. package/coverage/lcov-report/src/configFactory.ts.html +175 -0
  27. package/coverage/lcov-report/src/context/defaults.ts.html +196 -0
  28. package/coverage/lcov-report/src/context/directory/handlers/actions.ts.html +355 -0
  29. package/coverage/lcov-report/src/context/directory/handlers/attackProtection.ts.html +307 -0
  30. package/coverage/lcov-report/src/context/directory/handlers/branding.ts.html +448 -0
  31. package/coverage/lcov-report/src/context/directory/handlers/clientGrants.ts.html +262 -0
  32. package/coverage/lcov-report/src/context/directory/handlers/clients.ts.html +319 -0
  33. package/coverage/lcov-report/src/context/directory/handlers/connections.ts.html +370 -0
  34. package/coverage/lcov-report/src/context/directory/handlers/customDomains.ts.html +223 -0
  35. package/coverage/lcov-report/src/context/directory/handlers/databases.ts.html +544 -0
  36. package/coverage/lcov-report/src/context/directory/handlers/emailProvider.ts.html +241 -0
  37. package/coverage/lcov-report/src/context/directory/handlers/emailTemplates.ts.html +316 -0
  38. package/coverage/lcov-report/src/context/directory/handlers/guardianFactorProviders.ts.html +256 -0
  39. package/coverage/lcov-report/src/context/directory/handlers/guardianFactorTemplates.ts.html +247 -0
  40. package/coverage/lcov-report/src/context/directory/handlers/guardianFactors.ts.html +247 -0
  41. package/coverage/lcov-report/src/context/directory/handlers/guardianPhoneFactorMessageTypes.ts.html +214 -0
  42. package/coverage/lcov-report/src/context/directory/handlers/guardianPhoneFactorSelectedProvider.ts.html +226 -0
  43. package/coverage/lcov-report/src/context/directory/handlers/guardianPolicies.ts.html +214 -0
  44. package/coverage/lcov-report/src/context/directory/handlers/hooks.ts.html +274 -0
  45. package/coverage/lcov-report/src/context/directory/handlers/index.html +551 -0
  46. package/coverage/lcov-report/src/context/directory/handlers/index.ts.html +304 -0
  47. package/coverage/lcov-report/src/context/directory/handlers/logStreams.ts.html +220 -0
  48. package/coverage/lcov-report/src/context/directory/handlers/migrations.ts.html +196 -0
  49. package/coverage/lcov-report/src/context/directory/handlers/organizations.ts.html +289 -0
  50. package/coverage/lcov-report/src/context/directory/handlers/pages.ts.html +334 -0
  51. package/coverage/lcov-report/src/context/directory/handlers/prompts.ts.html +313 -0
  52. package/coverage/lcov-report/src/context/directory/handlers/resourceServers.ts.html +229 -0
  53. package/coverage/lcov-report/src/context/directory/handlers/roles.ts.html +253 -0
  54. package/coverage/lcov-report/src/context/directory/handlers/rules.ts.html +262 -0
  55. package/coverage/lcov-report/src/context/directory/handlers/rulesConfigs.ts.html +193 -0
  56. package/coverage/lcov-report/src/context/directory/handlers/tenant.ts.html +289 -0
  57. package/coverage/lcov-report/src/context/directory/handlers/themes.ts.html +232 -0
  58. package/coverage/lcov-report/src/context/directory/handlers/triggers.ts.html +214 -0
  59. package/coverage/lcov-report/src/context/directory/index.html +116 -0
  60. package/coverage/lcov-report/src/context/directory/index.ts.html +400 -0
  61. package/coverage/lcov-report/src/context/index.html +131 -0
  62. package/coverage/lcov-report/src/context/index.ts.html +475 -0
  63. package/coverage/lcov-report/src/context/yaml/handlers/actions.ts.html +349 -0
  64. package/coverage/lcov-report/src/context/yaml/handlers/attackProtection.ts.html +193 -0
  65. package/coverage/lcov-report/src/context/yaml/handlers/branding.ts.html +391 -0
  66. package/coverage/lcov-report/src/context/yaml/handlers/clientGrants.ts.html +199 -0
  67. package/coverage/lcov-report/src/context/yaml/handlers/clients.ts.html +301 -0
  68. package/coverage/lcov-report/src/context/yaml/handlers/connections.ts.html +394 -0
  69. package/coverage/lcov-report/src/context/yaml/handlers/customDomains.ts.html +151 -0
  70. package/coverage/lcov-report/src/context/yaml/handlers/databases.ts.html +346 -0
  71. package/coverage/lcov-report/src/context/yaml/handlers/emailProvider.ts.html +208 -0
  72. package/coverage/lcov-report/src/context/yaml/handlers/emailTemplates.ts.html +241 -0
  73. package/coverage/lcov-report/src/context/yaml/handlers/guardianFactorProviders.ts.html +151 -0
  74. package/coverage/lcov-report/src/context/yaml/handlers/guardianFactorTemplates.ts.html +151 -0
  75. package/coverage/lcov-report/src/context/yaml/handlers/guardianFactors.ts.html +151 -0
  76. package/coverage/lcov-report/src/context/yaml/handlers/guardianPhoneFactorMessageTypes.ts.html +151 -0
  77. package/coverage/lcov-report/src/context/yaml/handlers/guardianPhoneFactorSelectedProvider.ts.html +169 -0
  78. package/coverage/lcov-report/src/context/yaml/handlers/guardianPolicies.ts.html +151 -0
  79. package/coverage/lcov-report/src/context/yaml/handlers/hooks.ts.html +280 -0
  80. package/coverage/lcov-report/src/context/yaml/handlers/index.html +551 -0
  81. package/coverage/lcov-report/src/context/yaml/handlers/index.ts.html +298 -0
  82. package/coverage/lcov-report/src/context/yaml/handlers/logStreams.ts.html +151 -0
  83. package/coverage/lcov-report/src/context/yaml/handlers/migrations.ts.html +145 -0
  84. package/coverage/lcov-report/src/context/yaml/handlers/organizations.ts.html +235 -0
  85. package/coverage/lcov-report/src/context/yaml/handlers/pages.ts.html +268 -0
  86. package/coverage/lcov-report/src/context/yaml/handlers/prompts.ts.html +154 -0
  87. package/coverage/lcov-report/src/context/yaml/handlers/resourceServers.ts.html +154 -0
  88. package/coverage/lcov-report/src/context/yaml/handlers/roles.ts.html +199 -0
  89. package/coverage/lcov-report/src/context/yaml/handlers/rules.ts.html +253 -0
  90. package/coverage/lcov-report/src/context/yaml/handlers/rulesConfigs.ts.html +181 -0
  91. package/coverage/lcov-report/src/context/yaml/handlers/tenant.ts.html +235 -0
  92. package/coverage/lcov-report/src/context/yaml/handlers/themes.ts.html +154 -0
  93. package/coverage/lcov-report/src/context/yaml/handlers/triggers.ts.html +172 -0
  94. package/coverage/lcov-report/src/context/yaml/index.html +116 -0
  95. package/coverage/lcov-report/src/context/yaml/index.ts.html +568 -0
  96. package/coverage/lcov-report/src/index.html +221 -0
  97. package/coverage/lcov-report/src/index.ts.html +361 -0
  98. package/coverage/lcov-report/src/logger.ts.html +133 -0
  99. package/coverage/lcov-report/src/readonly.ts.html +346 -0
  100. package/coverage/lcov-report/src/sessionDurationsToMinutes.ts.html +154 -0
  101. package/coverage/lcov-report/src/tools/auth0/client.ts.html +604 -0
  102. package/coverage/lcov-report/src/tools/auth0/handlers/actions.ts.html +793 -0
  103. package/coverage/lcov-report/src/tools/auth0/handlers/attackProtection.ts.html +367 -0
  104. package/coverage/lcov-report/src/tools/auth0/handlers/branding.ts.html +427 -0
  105. package/coverage/lcov-report/src/tools/auth0/handlers/clientGrants.ts.html +418 -0
  106. package/coverage/lcov-report/src/tools/auth0/handlers/clients.ts.html +340 -0
  107. package/coverage/lcov-report/src/tools/auth0/handlers/connections.ts.html +598 -0
  108. package/coverage/lcov-report/src/tools/auth0/handlers/customDomains.ts.html +379 -0
  109. package/coverage/lcov-report/src/tools/auth0/handlers/databases.ts.html +436 -0
  110. package/coverage/lcov-report/src/tools/auth0/handlers/default.ts.html +1027 -0
  111. package/coverage/lcov-report/src/tools/auth0/handlers/emailProvider.ts.html +274 -0
  112. package/coverage/lcov-report/src/tools/auth0/handlers/emailTemplates.ts.html +337 -0
  113. package/coverage/lcov-report/src/tools/auth0/handlers/guardianFactorProviders.ts.html +301 -0
  114. package/coverage/lcov-report/src/tools/auth0/handlers/guardianFactorTemplates.ts.html +265 -0
  115. package/coverage/lcov-report/src/tools/auth0/handlers/guardianFactors.ts.html +241 -0
  116. package/coverage/lcov-report/src/tools/auth0/handlers/guardianPhoneFactorMessageTypes.ts.html +337 -0
  117. package/coverage/lcov-report/src/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.ts.html +331 -0
  118. package/coverage/lcov-report/src/tools/auth0/handlers/guardianPolicies.ts.html +256 -0
  119. package/coverage/lcov-report/src/tools/auth0/handlers/hooks.ts.html +829 -0
  120. package/coverage/lcov-report/src/tools/auth0/handlers/index.html +566 -0
  121. package/coverage/lcov-report/src/tools/auth0/handlers/index.ts.html +295 -0
  122. package/coverage/lcov-report/src/tools/auth0/handlers/logStreams.ts.html +346 -0
  123. package/coverage/lcov-report/src/tools/auth0/handlers/migrations.ts.html +319 -0
  124. package/coverage/lcov-report/src/tools/auth0/handlers/organizations.ts.html +949 -0
  125. package/coverage/lcov-report/src/tools/auth0/handlers/pages.ts.html +517 -0
  126. package/coverage/lcov-report/src/tools/auth0/handlers/prompts.ts.html +913 -0
  127. package/coverage/lcov-report/src/tools/auth0/handlers/resourceServers.ts.html +412 -0
  128. package/coverage/lcov-report/src/tools/auth0/handlers/roles.ts.html +751 -0
  129. package/coverage/lcov-report/src/tools/auth0/handlers/rules.ts.html +727 -0
  130. package/coverage/lcov-report/src/tools/auth0/handlers/rulesConfigs.ts.html +256 -0
  131. package/coverage/lcov-report/src/tools/auth0/handlers/tenant.ts.html +466 -0
  132. package/coverage/lcov-report/src/tools/auth0/handlers/themes.ts.html +1882 -0
  133. package/coverage/lcov-report/src/tools/auth0/handlers/triggers.ts.html +430 -0
  134. package/coverage/lcov-report/src/tools/auth0/index.html +146 -0
  135. package/coverage/lcov-report/src/tools/auth0/index.ts.html +355 -0
  136. package/coverage/lcov-report/src/tools/auth0/schema.ts.html +184 -0
  137. package/coverage/lcov-report/src/tools/calculateChanges.ts.html +688 -0
  138. package/coverage/lcov-report/src/tools/constants.ts.html +610 -0
  139. package/coverage/lcov-report/src/tools/deploy.ts.html +181 -0
  140. package/coverage/lcov-report/src/tools/index.html +191 -0
  141. package/coverage/lcov-report/src/tools/index.ts.html +127 -0
  142. package/coverage/lcov-report/src/tools/utils.ts.html +796 -0
  143. package/coverage/lcov-report/src/tools/validationError.ts.html +127 -0
  144. package/coverage/lcov-report/src/types.ts.html +1093 -0
  145. package/coverage/lcov-report/src/utils.ts.html +679 -0
  146. package/coverage/lcov.info +7168 -0
  147. package/docs/available-resource-config-formats.md +19 -0
  148. package/docs/configuring-the-deploy-cli.md +140 -0
  149. package/docs/excluding-from-management.md +81 -0
  150. package/docs/how-to-contribute.md +49 -0
  151. package/docs/keyword-replacement.md +45 -0
  152. package/docs/multi-environment-workflow.md +98 -0
  153. package/docs/terraform-provider.md +20 -0
  154. package/docs/using-as-cli.md +89 -0
  155. package/docs/using-as-node-module.md +114 -0
  156. package/examples/yaml/config.json.example +1 -1
  157. package/lib/context/directory/handlers/connections.js +3 -2
  158. package/lib/context/yaml/handlers/connections.js +5 -2
  159. package/lib/context/yaml/handlers/pages.js +1 -1
  160. package/lib/tools/auth0/handlers/tenant.d.ts +12 -1
  161. package/lib/tools/auth0/handlers/tenant.js +39 -4
  162. package/lib/tools/auth0/handlers/themes.js +11 -3
  163. package/lib/types.d.ts +6 -7
  164. package/lib/utils.d.ts +1 -1
  165. package/package.json +11 -5
@@ -0,0 +1,796 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/tools/utils.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/tools</a> utils.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">98.5% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>132/134</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">86.15% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>56/65</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">97.43% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>38/39</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">99.13% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>114/115</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">1x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-yes">1x</span>
312
+ <span class="cline-any cline-yes">152x</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-yes">201x</span>
315
+ <span class="cline-any cline-yes">201x</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">201x</span>
318
+ <span class="cline-any cline-yes">201x</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-yes">152x</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">152x</span>
325
+ <span class="cline-any cline-yes">201x</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-yes">201x</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-yes">152x</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-yes">1x</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-yes">184x</span>
335
+ <span class="cline-any cline-yes">149x</span>
336
+ <span class="cline-any cline-yes">149x</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-yes">184x</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">1x</span>
342
+ <span class="cline-any cline-yes">7x</span>
343
+ <span class="cline-any cline-yes">4x</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-yes">1x</span>
347
+ <span class="cline-any cline-yes">30x</span>
348
+ <span class="cline-any cline-yes">30x</span>
349
+ <span class="cline-any cline-yes">54x</span>
350
+ <span class="cline-any cline-yes">37x</span>
351
+ <span class="cline-any cline-yes">23x</span>
352
+ <span class="cline-any cline-yes">23x</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">31x</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-yes">30x</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-yes">30x</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-yes">1x</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-yes">194x</span>
364
+ <span class="cline-any cline-yes">194x</span>
365
+ <span class="cline-any cline-yes">194x</span>
366
+ <span class="cline-any cline-yes">192x</span>
367
+ <span class="cline-any cline-yes">139x</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-yes">53x</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-yes">2x</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-yes">1x</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-yes">996x</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">135x</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-yes">45x</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-yes">45x</span>
389
+ <span class="cline-any cline-yes">45x</span>
390
+ <span class="cline-any cline-yes">59x</span>
391
+ <span class="cline-any cline-yes">48x</span>
392
+ <span class="cline-any cline-yes">48x</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-yes">45x</span>
397
+ <span class="cline-any cline-yes">180x</span>
398
+ <span class="cline-any cline-yes">45x</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-yes">45x</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-yes">1x</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-yes">15x</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-yes">10x</span>
414
+ <span class="cline-any cline-yes">10x</span>
415
+ <span class="cline-any cline-yes">10x</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-yes">14x</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-yes">10x</span>
423
+ <span class="cline-any cline-yes">10x</span>
424
+ <span class="cline-any cline-yes">6x</span>
425
+ <span class="cline-any cline-yes">4x</span>
426
+ <span class="cline-any cline-yes">2x</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-yes">10x</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-yes">1x</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-yes">145x</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-yes">204x</span>
439
+ <span class="cline-any cline-yes">204x</span>
440
+ <span class="cline-any cline-yes">133x</span>
441
+ <span class="cline-any cline-yes">133x</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-yes">204x</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-yes">145x</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-yes">1x</span>
451
+ <span class="cline-any cline-yes">20x</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-yes">20x</span>
454
+ <span class="cline-any cline-yes">17x</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-yes">14x</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-yes">3x</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-yes">1x</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-yes">1x</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-yes">184x</span>
476
+ <span class="cline-any cline-yes">183x</span>
477
+ <span class="cline-any cline-yes">79x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-yes">104x</span>
481
+ <span class="cline-any cline-yes">104x</span>
482
+ <span class="cline-any cline-yes">11x</span>
483
+ <span class="cline-any cline-yes">7x</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-yes">104x</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-yes">1x</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-yes">49x</span>
496
+ <span class="cline-any cline-yes">49x</span>
497
+ <span class="cline-any cline-yes">3x</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-yes">48x</span>
501
+ <span class="cline-any cline-yes">48x</span>
502
+ <span class="cline-any cline-yes">14x</span>
503
+ <span class="cline-any cline-yes">14x</span>
504
+ <span class="cline-any cline-yes">9x</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-yes">48x</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-yes">1x</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-yes">123x</span>
521
+ <span class="cline-any cline-yes">123x</span>
522
+ <span class="cline-any cline-yes">123x</span>
523
+ <span class="cline-any cline-yes">121x</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-yes">2x</span>
530
+ <span class="cline-any cline-yes">1x</span>
531
+ <span class="cline-any cline-yes">1x</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-yes">1x</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import path from 'path';
541
+ import fs, { constants as fsConstants } from 'fs';
542
+ import dotProp from 'dot-prop';
543
+ import _ from 'lodash';
544
+ import log from '../logger';
545
+ import { Asset, Assets, CalculatedChanges, KeywordMappings } from '../types';
546
+ import constants from './constants';
547
+ &nbsp;
548
+ export function keywordArrayReplace(input: string, mappings: KeywordMappings): string {
549
+ Object.keys(mappings).forEach(function (key) {
550
+ // Matching against two sets of patterns because a developer may provide their array replacement keyword with or without wrapping quotes. It is not obvious to the developer which to do depending if they're operating in YAML or JSON.
551
+ const pattern = `@@${key}@@`;
552
+ const patternWithQuotes = `"${pattern}"`;
553
+ &nbsp;
554
+ const regex = new RegExp(`${patternWithQuotes}|${pattern}`, 'g');
555
+ input = input.replace(regex, JSON.stringify(mappings[key]));
556
+ });
557
+ return input;
558
+ }
559
+ &nbsp;
560
+ export function keywordStringReplace(input: string, mappings: KeywordMappings): string {
561
+ Object.keys(mappings).forEach(function (key) {
562
+ const regex = new RegExp(`##${key}##`, 'g');
563
+ // @ts-ignore TODO: come back and distinguish strings vs array replacement.
564
+ input = input.replace(regex, mappings[key]);
565
+ });
566
+ return input;
567
+ }
568
+ &nbsp;
569
+ export function keywordReplace(input: string, mappings: KeywordMappings): string {
570
+ // Replace keywords with mappings within input.
571
+ if (mappings &amp;&amp; Object.keys(mappings).length &gt; 0) {
572
+ input = keywordArrayReplace(input, mappings);
573
+ input = keywordStringReplace(input, mappings);
574
+ }
575
+ return input;
576
+ }
577
+ &nbsp;
578
+ export function convertClientNameToId(name: string, clients: Asset[]): string {
579
+ const found = clients.find((c) =&gt; c.name === name);
580
+ return (found &amp;&amp; found.client_id) || name;
581
+ }
582
+ &nbsp;
583
+ export function convertClientNamesToIds(names: string[], clients: Asset[]): string[] {
584
+ const resolvedNames = names.map((name) =&gt; ({ name, resolved: false }));
585
+ const result = clients.reduce((acc: string[], client): string[] =&gt; {
586
+ if (names.includes(client.name)) {
587
+ const index = resolvedNames.findIndex((item) =&gt; item.name === client.name);
588
+ resolvedNames[index].resolved = true;
589
+ return [...acc, client.client_id];
590
+ }
591
+ return [...acc];
592
+ }, []);
593
+ const unresolved = resolvedNames.filter((item) =&gt; !item.resolved).map((item) =&gt; item.name);
594
+ // @ts-ignore TODO: come back and refactor to use map instead of reduce.
595
+ return [...unresolved, ...result];
596
+ }
597
+ &nbsp;
598
+ export function loadFileAndReplaceKeywords(file: string, mappings: KeywordMappings): string {
599
+ // Load file and replace keyword mappings
600
+ const f = path.resolve(file);
601
+ try {
602
+ fs.accessSync(f, fsConstants.F_OK);
603
+ if (mappings) {
604
+ return keywordReplace(fs.readFileSync(f, 'utf8'), mappings);
605
+ }
606
+ return fs.readFileSync(f, 'utf8');
607
+ } catch (error) {
608
+ throw new Error(`Unable to load file ${f} due to ${error}`);
609
+ }
610
+ }
611
+ &nbsp;
612
+ export function flatten(list: any[]): any[] {
613
+ // Flatten an multiple arrays to single array
614
+ return list.reduce((a, b) =&gt; a.concat(Array.isArray(b) ? flatten(b) : b), []);
615
+ }
616
+ &nbsp;
617
+ export function convertJsonToString(obj: { [key: string]: any }, spacing = 0): string {
618
+ return JSON.stringify(obj, null, spacing);
619
+ }
620
+ &nbsp;
621
+ export function stripFields(obj: Asset, fields: string[]): Asset {
622
+ // Strip object fields supporting dot notation (ie: a.deep.field)
623
+ const stripped: string[] = [];
624
+ &nbsp;
625
+ const newObj = { ...obj };
626
+ fields.forEach((f) =&gt; {
627
+ if (dotProp.get(newObj, f) !== undefined) {
628
+ dotProp.delete(newObj, f);
629
+ stripped.push(f);
630
+ }
631
+ });
632
+ &nbsp;
633
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (stripped) {
634
+ const name = ['id', 'client_id', 'template', 'name'].reduce((n, k) =&gt; newObj[k] || n, '');
635
+ log.debug(`Stripping "${name}" read-only fields ${JSON.stringify(stripped)}`);
636
+ }
637
+ return newObj;
638
+ }
639
+ &nbsp;
640
+ export function getEnabledClients(
641
+ assets: Assets,
642
+ connection: Asset,
643
+ existing: Asset[],
644
+ clients: Asset[]
645
+ ): string[] | undefined {
646
+ // Convert enabled_clients by name to the id
647
+ &nbsp;
648
+ if (connection.enabled_clients === undefined) return undefined; // If no enabled clients passed in, explicitly ignore from management, preventing unintentional disabling of connection.
649
+ &nbsp;
650
+ const excludedClientsByNames = (assets.exclude &amp;&amp; assets.exclude.clients) || [];
651
+ const excludedClients = convertClientNamesToIds(excludedClientsByNames, clients);
652
+ const enabledClients = [
653
+ ...convertClientNamesToIds(connection.enabled_clients || <span class="branch-1 cbranch-no" title="branch not covered" >[],</span> clients).filter(
654
+ (item) =&gt; ![...excludedClientsByNames, ...excludedClients].includes(item)
655
+ ),
656
+ ];
657
+ // If client is excluded and in the existing connection this client is enabled, it should keep enabled
658
+ // If client is excluded and in the existing connection this client is disabled, it should keep disabled
659
+ existing.forEach((conn) =&gt; {
660
+ if (conn.name === connection.name) {
661
+ excludedClients.forEach((excludedClient) =&gt; {
662
+ if (conn.enabled_clients.includes(excludedClient)) {
663
+ enabledClients.push(excludedClient);
664
+ }
665
+ });
666
+ }
667
+ });
668
+ return enabledClients;
669
+ }
670
+ &nbsp;
671
+ export function duplicateItems(arr: Asset[], key: string): Asset[] {
672
+ // Find duplicates objects within array that have the same key value
673
+ const duplicates = arr.reduce(
674
+ (accum: { [key: string]: Asset[] }, obj): { [key: string]: Asset[] } =&gt; {
675
+ const keyValue = obj[key];
676
+ if (keyValue) {
677
+ if (!(keyValue in accum)) accum[keyValue] = [];
678
+ accum[keyValue].push(obj);
679
+ }
680
+ return accum;
681
+ },
682
+ {}
683
+ );
684
+ return Object.values(duplicates).filter((g) =&gt; g.length &gt; 1);
685
+ }
686
+ &nbsp;
687
+ export function filterExcluded(changes: CalculatedChanges, exclude: string[]): CalculatedChanges {
688
+ const { del, update, create, conflicts } = changes;
689
+ &nbsp;
690
+ if (!exclude.length) {
691
+ return changes;
692
+ }
693
+ &nbsp;
694
+ const filter = (list: Asset[]) =&gt; list.filter((item) =&gt; !exclude.includes(item.name));
695
+ &nbsp;
696
+ return {
697
+ del: filter(del),
698
+ update: filter(update),
699
+ create: filter(create),
700
+ conflicts: filter(conflicts),
701
+ };
702
+ }
703
+ &nbsp;
704
+ export function <span class="fstat-no" title="function not covered" >areArraysEquals(</span>x: any[], y: any[]): boolean {
705
+ <span class="cstat-no" title="statement not covered" > return _.isEqual(x &amp;&amp; x.sort(), y &amp;&amp; y.sort());</span>
706
+ }
707
+ &nbsp;
708
+ export const obfuscateSensitiveValues = (
709
+ data: Asset | Asset[] | null,
710
+ sensitiveFieldsToObfuscate: string[]
711
+ ): Asset | Asset[] | null =&gt; {
712
+ if (data === null) return data;
713
+ if (Array.isArray(data)) {
714
+ return data.map((asset) =&gt; obfuscateSensitiveValues(asset, sensitiveFieldsToObfuscate));
715
+ }
716
+ &nbsp;
717
+ const newAsset = { ...data };
718
+ sensitiveFieldsToObfuscate.forEach((sensitiveField) =&gt; {
719
+ if (dotProp.get(newAsset, sensitiveField) !== undefined) {
720
+ dotProp.set(newAsset, sensitiveField, constants.OBFUSCATED_SECRET_VALUE);
721
+ }
722
+ });
723
+ &nbsp;
724
+ return newAsset;
725
+ };
726
+ &nbsp;
727
+ // The reverse of `obfuscateSensitiveValues()`, preventing an obfuscated value from being passed to the API
728
+ export const stripObfuscatedFieldsFromPayload = (
729
+ data: Asset | Asset[] | null,
730
+ obfuscatedFields: string[]
731
+ ): Asset | Asset[] | null =&gt; {
732
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (data === null) <span class="cstat-no" title="statement not covered" >return data;</span>
733
+ if (Array.isArray(data)) {
734
+ return data.map((asset) =&gt; stripObfuscatedFieldsFromPayload(asset, obfuscatedFields));
735
+ }
736
+ &nbsp;
737
+ const newAsset = { ...data };
738
+ obfuscatedFields.forEach((sensitiveField) =&gt; {
739
+ const obfuscatedFieldValue = dotProp.get(newAsset, sensitiveField);
740
+ if (obfuscatedFieldValue === constants.OBFUSCATED_SECRET_VALUE) {
741
+ dotProp.delete(newAsset, sensitiveField);
742
+ }
743
+ });
744
+ &nbsp;
745
+ return newAsset;
746
+ };
747
+ &nbsp;
748
+ export const detectInsufficientScopeError = async &lt;T&gt;(
749
+ fn: Function
750
+ ): Promise&lt;
751
+ | {
752
+ hadSufficientScopes: true;
753
+ data: T;
754
+ requiredScopes: [];
755
+ }
756
+ | { hadSufficientScopes: false; requiredScopes: string[]; data: null }
757
+ &gt; =&gt; {
758
+ try {
759
+ const data = await fn();
760
+ return {
761
+ hadSufficientScopes: true,
762
+ data,
763
+ requiredScopes: [],
764
+ };
765
+ } catch (err) {
766
+ if (err.statusCode === 403 &amp;&amp; err.message.includes('Insufficient scope')) {
767
+ const requiredScopes = err.message<span class="branch-0 cbranch-no" title="branch not covered" >?.s</span>plit('Insufficient scope, expected any of: ')<span class="branch-0 cbranch-no" title="branch not covered" >?.s</span>lice(1);
768
+ return {
769
+ hadSufficientScopes: false,
770
+ requiredScopes,
771
+ data: null,
772
+ };
773
+ }
774
+ throw err;
775
+ }
776
+ };
777
+ &nbsp;</pre></td></tr></table></pre>
778
+
779
+ <div class='push'></div><!-- for sticky footer -->
780
+ </div><!-- /wrapper -->
781
+ <div class='footer quiet pad2 space-top1 center small'>
782
+ Code coverage generated by
783
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
784
+ at Mon Aug 01 2022 17:29:40 GMT+0000 (Coordinated Universal Time)
785
+ </div>
786
+ <script src="../../prettify.js"></script>
787
+ <script>
788
+ window.onload = function () {
789
+ prettyPrint();
790
+ };
791
+ </script>
792
+ <script src="../../sorter.js"></script>
793
+ <script src="../../block-navigation.js"></script>
794
+ </body>
795
+ </html>
796
+