mirror of https://github.com/portainer/portainer
54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
|
import _ from 'lodash';
|
||
|
|
||
|
import { EnvVar } from './types';
|
||
|
|
||
|
export const KEY_REGEX = /(.+?)/.source;
|
||
|
export const VALUE_REGEX = /(.*)?/.source;
|
||
|
|
||
|
const KEY_VALUE_REGEX = new RegExp(`^(${KEY_REGEX})\\s*=(${VALUE_REGEX})$`);
|
||
|
const NEWLINES_REGEX = /\n|\r|\r\n/;
|
||
|
|
||
|
export function parseDotEnvFile(src: string) {
|
||
|
return parseArrayOfStrings(
|
||
|
_.compact(src.split(NEWLINES_REGEX))
|
||
|
.map((v) => v.trim())
|
||
|
.filter((v) => !v.startsWith('#') && v !== '')
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export function parseArrayOfStrings(array: Array<string> = []): Array<EnvVar> {
|
||
|
if (!array) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
return _.compact(
|
||
|
array.map((variableString) => {
|
||
|
if (!variableString.includes('=')) {
|
||
|
return { name: variableString };
|
||
|
}
|
||
|
|
||
|
const parsedKeyValArr = variableString.trim().match(KEY_VALUE_REGEX);
|
||
|
if (parsedKeyValArr == null || parsedKeyValArr.length < 4) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
name: parsedKeyValArr[1].trim(),
|
||
|
value: parsedKeyValArr[3].trim() || '',
|
||
|
};
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export function convertToArrayOfStrings(array: Array<EnvVar>) {
|
||
|
if (!array) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
return array
|
||
|
.filter((variable) => variable.name)
|
||
|
.map(({ name, value }) =>
|
||
|
value || value === '' ? `${name}=${value}` : name
|
||
|
);
|
||
|
}
|