@@ -91,10 +91,10 @@ export function joinKVStringForGCloud(
9191 *
9292 * @param input String with key/value pairs to parse.
9393 */
94- export function parseKVString ( input : string ) : KVPair {
94+ export function parseKVString ( input : string ) : KVPair | undefined {
9595 input = ( input || '' ) . trim ( ) ;
9696 if ( ! input ) {
97- return { } ;
97+ return undefined ;
9898 }
9999
100100 const result : KVPair = { } ;
@@ -164,11 +164,11 @@ export function parseKVString(input: string): KVPair {
164164 *
165165 * @param filePath Path to the file on disk to parse.
166166 */
167- export function parseKVFile ( filePath : string ) : KVPair {
167+ export function parseKVFile ( filePath : string ) : KVPair | undefined {
168168 try {
169169 const content = presence ( readFileSync ( filePath , 'utf8' ) ) ;
170170 if ( ! content || content . length < 1 ) {
171- return { } ;
171+ return undefined ;
172172 }
173173
174174 if ( content [ 0 ] === '{' || content [ 0 ] === '[' ) {
@@ -199,9 +199,13 @@ export function parseKVFile(filePath: string): KVPair {
199199 *
200200 * @return List of key=value pairs.
201201 */
202- export function parseKVJSON ( str : string ) : KVPair {
202+ export function parseKVJSON ( str : string ) : KVPair | undefined {
203203 str = ( str || '' ) . trim ( ) ;
204204 if ( ! str ) {
205+ return undefined ;
206+ }
207+
208+ if ( str === '{}' ) {
205209 return { } ;
206210 }
207211
@@ -243,11 +247,18 @@ export function parseKVJSON(str: string): KVPair {
243247 *
244248 * @param str YAML content to parse as K=V pairs.
245249 */
246- export function parseKVYAML ( str : string ) : KVPair {
247- if ( ! str || str . trim ( ) . length === 0 ) {
250+ export function parseKVYAML ( str : string ) : KVPair | undefined {
251+ const trimmed = ( str || '' ) . trim ( ) ;
252+ if ( ! trimmed ) {
253+ return undefined ;
254+ }
255+
256+ if ( trimmed === '{}' ) {
248257 return { } ;
249258 }
250259
260+ // Parse the original string here, since trimming could have changed
261+ // indentation.
251262 const yamlContent = YAML . parse ( str ) as KVPair ;
252263
253264 const result : KVPair = { } ;
@@ -270,21 +281,15 @@ export function parseKVYAML(str: string): KVPair {
270281 * @param kvString String of KEY=VALUE pairs.
271282 * @param kvFilePath Path on disk to a YAML file of KEY: VALUE pairs.
272283 */
273- export function parseKVStringAndFile ( kvString ?: string , kvFilePath ?: string ) : KVPair {
284+ export function parseKVStringAndFile ( kvString ?: string , kvFilePath ?: string ) : KVPair | undefined {
274285 kvString = ( kvString || '' ) . trim ( ) ;
275286 kvFilePath = ( kvFilePath || '' ) . trim ( ) ;
276287
277- let result : Record < string , string > = { } ;
288+ const fromFile = kvFilePath ? parseKVFile ( kvFilePath ) : undefined ;
289+ const fromString = kvString ? parseKVString ( kvString ) : undefined ;
278290
279- if ( kvFilePath ) {
280- const parsed = parseKVFile ( kvFilePath ) ;
281- result = { ...result , ...parsed } ;
291+ if ( fromFile === undefined && fromString === undefined ) {
292+ return undefined ;
282293 }
283-
284- if ( kvString ) {
285- const parsed = parseKVString ( kvString ) ;
286- result = { ...result , ...parsed } ;
287- }
288-
289- return result ;
294+ return Object . assign ( { } , fromFile , fromString ) ;
290295}
0 commit comments