export function buildFixedJsxExpression()

in packages/codegen-ui-react/lib/react-component-render-helper.ts [139:176]


export function buildFixedJsxExpression(prop: FixedStudioComponentProperty): StringLiteral | JsxExpression {
  const { value, type } = prop;
  switch (typeof value) {
    case 'number':
      return factory.createJsxExpression(undefined, factory.createNumericLiteral(value, undefined));
    case 'boolean':
      return factory.createJsxExpression(undefined, value ? factory.createTrue() : factory.createFalse());
    case 'string':
      switch (type) {
        case undefined:
          return factory.createStringLiteral(value as string);
        case 'String':
          return factory.createStringLiteral(value as string);
        case 'Object':
        case 'Number':
        case 'Boolean':
          try {
            const parsedValue = JSON.parse(value as string);

            if (typeof parsedValue === 'number') {
              return factory.createJsxExpression(undefined, factory.createNumericLiteral(parsedValue, undefined));
            }
            if (typeof parsedValue === 'boolean') {
              return factory.createJsxExpression(undefined, parsedValue ? factory.createTrue() : factory.createFalse());
            }
            // object, array, and null
            if (typeof parsedValue === 'object') {
              return factory.createJsxExpression(undefined, jsonToLiteral(parsedValue));
            }
          } catch {} // eslint-disable-line no-empty
          throw new Error(`Failed to parse value "${value}" as type ${type}`);
        default:
          throw new Error(`Invalid type ${type} for "${value}"`);
      }
    default:
      throw new Error(`Invalid type ${typeof value} for "${value}"`);
  }
}