From 5ec9124d2973a63c4dde5a4411ea3e94ff4df202 Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Wed, 19 Jun 2024 18:50:00 +0200 Subject: [PATCH] fix(core): update --- ts/00_commitinfo_data.ts | 2 +- ts/npmextra.classes.appdata.ts | 26 ++++++++++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 57081d8..1fb98c9 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/npmextra', - version: '5.0.21', + version: '5.0.22', description: 'A utility to enhance npm with additional configuration, tool management capabilities, and a key-value store for project setups.' } diff --git a/ts/npmextra.classes.appdata.ts b/ts/npmextra.classes.appdata.ts index f03b8c2..1fd4806 100644 --- a/ts/npmextra.classes.appdata.ts +++ b/ts/npmextra.classes.appdata.ts @@ -77,18 +77,36 @@ export class AppData { // Recursive function to handle nested objects, now includes key parameter const processEnvMapping = async (key: keyof T, mappingValue: any, parentKey: keyof T | '' = ''): Promise => { if (typeof mappingValue === 'string') { - let envValue: string | T[keyof T]; + let envValue: string | boolean | T[keyof T]; + let convert: 'none' | 'json' | 'base64' | 'boolean' = 'none' if (mappingValue.startsWith('hard:')) { envValue = mappingValue.replace('hard:', '') as T[keyof T]; + } else if (mappingValue.startsWith('boolean:')) { + envValue = await qenvInstance.getEnvVarOnDemand(mappingValue.replace('boolean:', '')) as T[keyof T]; + convert = 'boolean'; + } else if(mappingValue.startsWith('json')) { + envValue = await qenvInstance.getEnvVarOnDemand(mappingValue.replace('json:', '')) as T[keyof T]; + convert = 'json'; + } else if (mappingValue.startsWith('base64')) { + envValue = await qenvInstance.getEnvVarOnDemand(mappingValue.replace('base64:', '')) as T[keyof T]; + convert = 'base64'; } else { envValue = await qenvInstance.getEnvVarOnDemand(mappingValue) as T[keyof T]; } + + // lets format the env value if (envValue) { - if (typeof envValue === 'string' && mappingValue.endsWith('_JSON')) { - envValue = JSON.parse(envValue) as T[keyof T]; + if (convert === 'boolean') { + envValue = envValue === 'true'; + } + if (typeof envValue === 'string' && (mappingValue.endsWith('_JSON') || convert === 'json')) { + envValue = JSON.parse(envValue as string) as T[keyof T]; + } + if (typeof envValue === 'string' && (mappingValue.endsWith('_BASE64') || convert === 'base64')) { + envValue = Buffer.from(envValue as string, 'base64').toString(); } if (!parentKey) { - await this.kvStore.writeKey(key, envValue); + await this.kvStore.writeKey(key, envValue as any); } else { return envValue; }