mirror of https://github.com/portainer/portainer
refactor(custom-templates): return parse error
parent
3810809444
commit
578f3d34a1
|
@ -83,7 +83,7 @@ class KubeCreateCustomTemplateViewController {
|
|||
return;
|
||||
}
|
||||
|
||||
const variables = getTemplateVariables(templateStr);
|
||||
const [variables] = getTemplateVariables(templateStr);
|
||||
|
||||
const isValid = !!variables;
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ class KubeEditCustomTemplateViewController {
|
|||
return;
|
||||
}
|
||||
|
||||
const variables = getTemplateVariables(templateStr);
|
||||
const [variables] = getTemplateVariables(templateStr);
|
||||
|
||||
const isValid = !!variables;
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ class CreateCustomTemplateViewController {
|
|||
return;
|
||||
}
|
||||
|
||||
const variables = getTemplateVariables(templateStr);
|
||||
const [variables] = getTemplateVariables(templateStr);
|
||||
|
||||
const isValid = !!variables;
|
||||
|
||||
|
|
|
@ -178,7 +178,7 @@ class EditCustomTemplateViewController {
|
|||
return;
|
||||
}
|
||||
|
||||
const variables = getTemplateVariables(templateStr);
|
||||
const [variables] = getTemplateVariables(templateStr);
|
||||
|
||||
const isValid = !!variables;
|
||||
|
||||
|
|
|
@ -4,31 +4,40 @@ import Mustache from 'mustache';
|
|||
import { VariableDefinition } from './CustomTemplatesVariablesDefinitionField/CustomTemplatesVariablesDefinitionField';
|
||||
|
||||
export function getTemplateVariables(templateStr: string) {
|
||||
const template = validateAndParse(templateStr);
|
||||
const [template, error] = validateAndParse(templateStr);
|
||||
|
||||
if (!template) {
|
||||
return null;
|
||||
return [null, error] as const;
|
||||
}
|
||||
|
||||
return template
|
||||
.filter(([type, value]) => type === 'name' && value)
|
||||
.map(([, value]) => ({
|
||||
name: value,
|
||||
label: '',
|
||||
defaultValue: '',
|
||||
description: '',
|
||||
}));
|
||||
return [
|
||||
template
|
||||
.filter(([type, value]) => type === 'name' && value)
|
||||
.map(([, value]) => ({
|
||||
name: value,
|
||||
label: '',
|
||||
defaultValue: '',
|
||||
description: '',
|
||||
})),
|
||||
null,
|
||||
] as const;
|
||||
}
|
||||
|
||||
function validateAndParse(templateStr: string) {
|
||||
type TemplateSpans = ReturnType<typeof Mustache.parse>;
|
||||
function validateAndParse(
|
||||
templateStr: string
|
||||
): readonly [TemplateSpans, null] | readonly [null, string] {
|
||||
if (!templateStr) {
|
||||
return [];
|
||||
return [[] as TemplateSpans, null] as const;
|
||||
}
|
||||
|
||||
try {
|
||||
return Mustache.parse(templateStr);
|
||||
return [Mustache.parse(templateStr), null] as const;
|
||||
} catch (e) {
|
||||
return null;
|
||||
if (!(e instanceof Error)) {
|
||||
return [null, 'Parse error'] as const;
|
||||
}
|
||||
|
||||
return [null, e.message] as const;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue