#!/usr/bin/env python3 import re # Read the file with open('packages/ui/src/Label/Label.test.tsx', 'r') as f: content = f.read() # Pattern 1: Simple createElement(Label, null, "text") content = re.sub( r'createElement\(Label,\s*null,\s*"([^"]+)"\)', r'', content ) # Pattern 2: createElement(Label, { props }, "text") - multi-line # First collect all multi-line createElement calls lines = content.split('\n') result = [] i = 0 while i < len(lines): line = lines[i] # Check if this line starts a createElement(Label, ... if 'createElement(' in line and 'Label' in line and '{' in line: # Collect the full createElement call depth = 0 start_line = i full_call = [] for j in range(i, len(lines)): full_call.append(lines[j]) depth += lines[j].count('(') - lines[j].count(')') if depth == 0: i = j break # Parse the collected createElement call call_text = '\n'.join(full_call) # Try to extract props and children match = re.search(r'createElement\(\s*Label,\s*\{([^}]+)\},\s*"([^"]+)"\s*\)', call_text, re.DOTALL) if match: props_text = match.group(1).strip() children_text = match.group(2) # Convert props to JSX format props_list = [] for prop_line in props_text.split('\n'): prop_line = prop_line.strip().rstrip(',') if prop_line and ':' in prop_line: # Handle different prop types if '"data-testid":' in prop_line or "'data-testid':" in prop_line: props_list.append('data-testid=' + prop_line.split(':')[1].strip()) elif 'required:' in prop_line: val = prop_line.split(':')[1].strip() if val == 'true': props_list.append('required') else: props_list.append(f'required={{{val}}}') elif 'disabled:' in prop_line: val = prop_line.split(':')[1].strip() if val == 'true': props_list.append('disabled') else: props_list.append(f'disabled={{{val}}}') elif 'size:' in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'size={val}') elif 'className:' in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'className={val}') elif 'htmlFor:' in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'htmlFor={val}') elif 'id:' in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'id={val}') elif '"aria-label":' in prop_line or "'aria-label':" in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'aria-label={val}') elif '"aria-describedby":' in prop_line or "'aria-describedby':" in prop_line: val = prop_line.split(':')[1].strip() props_list.append(f'aria-describedby={val}') # Build JSX indent = ' ' if len(props_list) <= 2: jsx = f'{indent}render();' else: jsx = f'{indent}render(\n{indent} \n{indent} {children_text}\n{indent} ,\n{indent});' result.append(jsx) else: # Couldn't parse, keep original result.extend(full_call) else: result.append(line) i += 1 # Write back content = '\n'.join(result) with open('packages/ui/src/Label/Label.test.tsx', 'w') as f: f.write(content) print("Conversion complete!")