All files / packages/fds-uif/generator-react/src types.ts

100% Statements 1/1
100% Branches 0/0
100% Functions 0/0
100% Lines 1/1

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                                                                                                                                                          1x              
/**
 * Types for React code generation
 */
 
import type { ComponentMetadata, GeneratedCode, GeneratorOptions } from '@fds-uif/generator-base/browser';
 
/**
 * Options for React component generation
 */
export interface ReactGeneratorOptions extends Partial<GeneratorOptions> {
  /** Include React import statement (default: true) */
  includeReactImport?: boolean;
 
  /** Use named export instead of default (default: false) */
  namedExport?: boolean;
 
  /** Generate forwardRef wrapper (default: false) */
  forwardRef?: boolean;
 
  /** Include prop-types for runtime validation (default: false) */
  includePropTypes?: boolean;
 
  /** Output directory for generated files */
  outputDir?: string;
 
  /** File extension for output (default: '.tsx') */
  fileExtension?: '.tsx' | '.jsx';
 
  /** Skip Prettier formatting (for debugging) */
  skipFormat?: boolean;
}
 
/**
 * Result of React code generation
 */
export interface ReactGeneratedCode extends GeneratedCode {
  /** The component metadata used for generation */
  metadata: ComponentMetadata;
 
  /** Generated React-specific artifacts */
  artifacts: {
    /** Component file content */
    component: string;
 
    /** Props interface content */
    propsInterface: string;
 
    /** Import statements */
    imports: string[];
  };
}
 
/**
 * Context passed through generation stages
 */
export interface GenerationContext {
  /** Component metadata from analyzer */
  metadata: ComponentMetadata;
 
  /** Generator options */
  options: ReactGeneratorOptions;
 
  /** Indentation level */
  indent: number;
 
  /** Collected import statements */
  imports: Set<string>;
 
  /** Collected type imports */
  typeImports: Set<string>;
}
 
/**
 * Default generator options
 */
export const DEFAULT_OPTIONS: Required<
  Pick<ReactGeneratorOptions, 'includeReactImport' | 'namedExport' | 'forwardRef' | 'includePropTypes' | 'fileExtension'>
> = {
  includeReactImport: true,
  namedExport: false,
  forwardRef: false,
  includePropTypes: false,
  fileExtension: '.tsx',
};