refactor(custom-templates): return parse error

feat/EE-5573/related-changes
Chaim Lev-Ari 2023-10-18 08:30:42 +02:00
parent 3810809444
commit 578f3d34a1
5 changed files with 28 additions and 19 deletions

View File

@ -83,7 +83,7 @@ class KubeCreateCustomTemplateViewController {
return;
}
const variables = getTemplateVariables(templateStr);
const [variables] = getTemplateVariables(templateStr);
const isValid = !!variables;

View File

@ -112,7 +112,7 @@ class KubeEditCustomTemplateViewController {
return;
}
const variables = getTemplateVariables(templateStr);
const [variables] = getTemplateVariables(templateStr);
const isValid = !!variables;

View File

@ -206,7 +206,7 @@ class CreateCustomTemplateViewController {
return;
}
const variables = getTemplateVariables(templateStr);
const [variables] = getTemplateVariables(templateStr);
const isValid = !!variables;

View File

@ -178,7 +178,7 @@ class EditCustomTemplateViewController {
return;
}
const variables = getTemplateVariables(templateStr);
const [variables] = getTemplateVariables(templateStr);
const isValid = !!variables;

View File

@ -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;
}
}