mirror of
https://github.com/portainer/portainer.git
synced 2025-07-30 10:49:40 +02:00
* feat(app): introduce new env vars ui feat(app): introduce new env vars ui feat(UX): WIP new env variables UI feat(UX): update button and placeholder feat(UX): mention .env file in message feat(UX): allow add/remove value & load correctly feat(UX): restrict filesize to 1MB feat(UX): vertical align error message feat(UX): fill UI from file & when switching modes feat(UX): strip un-needed newline character feat(UX): introduce component to other views feat(UX): fix title alignment feat(UX): only populate editor on mode switch when key exists feat(UX): prevent trimming of whitespace on values feat(UX): change editor to async feat(UX): add message describing use feat(UX): Refactor variable text to editorText refactor(app): rename env vars controller refactor(app): move env var explanation to parent refactor(app): order env var panels refactor(app): move simple env vars mode to component refactor(app): parse env vars refactor(app): move styles to css refactor(app): rename functions refactor(container): parse env vars refactor(env-vars): move utils to helper module refactor(env-vars): use util function for parse dot env file fix(env-vars): ignore comments refactor(services): use env vars utils refactor(env-vars): rename files refactor(env-panel): use utils style(stack): revert EnvContent to Env style(service): revert EnvContent to Env style(container): revert EnvContent to Env refactor(env-vars): support default value refactor(service): use new env var component refactor(env-var): use one way data flow refactor(containers): remove unused function * fix(env-vars): prevent using non .env files * refactor(env-vars): move env vars items to a component * feat(app): fixed env vars form validation in Stack * feat(services): disable env form submit if invalid * fix(app): show key pairs correctly * fix(env-var): use the same validation as with kubernetes * fix(env-vars): parse env var Co-authored-by: Chaim Lev-Ari <chiptus@gmail.com> Co-authored-by: Felix Han <felix.han@portainer.io>
61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import _ from 'lodash-es';
|
|
|
|
export const KEY_REGEX = /[a-zA-Z]([-_a-zA-Z0-9]*[a-zA-Z0-9])?/.source;
|
|
|
|
export const VALUE_REGEX = /(.*)?/.source;
|
|
|
|
const KEY_VALUE_REGEX = new RegExp(`^(${KEY_REGEX})\\s*=(${VALUE_REGEX})$`);
|
|
const NEWLINES_REGEX = /\n|\r|\r\n/;
|
|
|
|
/**
|
|
* @param {string} src the source of the .env file
|
|
*
|
|
* @returns {[{name: string, value: string}]} array of {name, value}
|
|
*/
|
|
export function parseDotEnvFile(src) {
|
|
return parseArrayOfStrings(
|
|
_.compact(src.split(NEWLINES_REGEX))
|
|
.map((v) => v.trim())
|
|
.filter((v) => !v.startsWith('#'))
|
|
);
|
|
}
|
|
|
|
/**
|
|
* parses an array of name=value to array of {name, value}
|
|
*
|
|
* @param {[string]} array array of strings in format name=value
|
|
*
|
|
* @returns {[{name: string, value: string}]} array of {name, value}
|
|
*/
|
|
export function parseArrayOfStrings(array) {
|
|
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 { name: parsedKeyValArr[1], value: parsedKeyValArr[3] || '' };
|
|
}
|
|
})
|
|
);
|
|
}
|
|
/**
|
|
* converts an array of {name, value} to array of `name=value`, name is always defined
|
|
*
|
|
* @param {[{name, value}]} array array of {name, value}
|
|
*
|
|
* @returns {[string]} array of `name=value`
|
|
*/
|
|
export function convertToArrayOfStrings(array) {
|
|
if (!array) {
|
|
return [];
|
|
}
|
|
|
|
return array.filter((variable) => variable.name).map(({ name, value }) => (value || value === '' ? `${name}=${value}` : name));
|
|
}
|