import { TypeEnum, IdentVal, PrimitiveVal, UnitVal, FunctionValue, Expression, SequenceValue, DeclarationValue } from './types'; const UnitValType: string[] = [TypeEnum.Dimension, TypeEnum.Percentage, TypeEnum.String]; const convertDeclarationFns: any = { Primitive: function (value: PrimitiveVal) { return value.value; }, Unit: function (value: UnitVal) { return value + value.unit; }, [TypeEnum.ID]: function (value: IdentVal) { return value.vendorPrefix + value.value; }, [TypeEnum.Expression]: function (value: Expression) { return `${value.lhs} ${value.operator} ${value.rhs}`; }, [TypeEnum.Function]: function (value: FunctionValue) { let name = typeof value.name === 'object' ? value.name.value : value.name; let params = value.parameters.type === TypeEnum.Sequence ? value.parameters.value.map(d => convertDeclarationToString(d)).join(',') : convertDeclarationToString(value.parameters); return `${name}(${params})`; }, [TypeEnum.Sequence]: function (value: SequenceValue) { return value.value.map(d => convertDeclarationToString(d)).join(' '); } }; export function convertDeclarationToString(value: DeclarationValue) { let fn = convertDeclarationFns[value.type]; if (fn === undefined) { fn = UnitValType.indexOf(value.type) > -1 ? convertDeclarationFns.Unit : convertDeclarationFns.Primitive; } return fn(value); }