or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-svgr--plugin-prettier

A SVGR plugin that formats generated React components using Prettier

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@svgr/plugin-prettier@8.1.x

To install, run

npx @tessl/cli install tessl/npm-svgr--plugin-prettier@8.1.0

index.mddocs/

@svgr/plugin-prettier

@svgr/plugin-prettier is a SVGR plugin that formats generated React components using Prettier. It integrates seamlessly with the SVGR plugin architecture to apply consistent code formatting to SVG-to-React component transformations, ensuring output follows established style guidelines.

Package Information

  • Package Name: @svgr/plugin-prettier
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install --save-dev @svgr/plugin-prettier

Core Imports

import prettierPlugin from "@svgr/plugin-prettier";

For CommonJS:

const prettierPlugin = require("@svgr/plugin-prettier");

Basic Usage

@svgr/plugin-prettier is typically used through SVGR's configuration system:

.svgrrc

{
  "plugins": ["@svgr/plugin-prettier"],
  "prettier": true,
  "runtimeConfig": true,
  "prettierConfig": {
    "semi": true,
    "singleQuote": true
  }
}

Direct usage (handled by SVGR internally):

import prettierPlugin from "@svgr/plugin-prettier";

const formattedCode = prettierPlugin(code, config, state);

Capabilities

Code Formatting

Formats JavaScript/JSX code using Prettier with configurable options and runtime configuration resolution.

/**
 * SVGR plugin that formats code using Prettier
 * @param code - The code string to format
 * @param config - SVGR configuration object
 * @param state - SVGR state object with component metadata
 * @returns Formatted code string, or original code if prettier is disabled
 */
function prettierPlugin(
  code: string,
  config: Config,
  state: State
): string;

interface Config {
  /** Enable/disable prettier formatting */
  prettier?: boolean;
  /** Enable runtime configuration file resolution */
  runtimeConfig?: boolean;
  /** Custom prettier configuration options */
  prettierConfig?: PrettierOptions;
  // ... other SVGR config options
}

interface State {
  /** Optional file path for configuration resolution */
  filePath?: string;
  /** Name of the React component being generated */
  componentName: string;
  /** Additional caller metadata */
  caller?: {
    name?: string;
    previousExport?: string | null;
    defaultPlugins?: ConfigPlugin[];
  };
}

type ConfigPlugin = string | Plugin;

interface PrettierOptions {
  /** Parser to use (defaults to 'babel' for React/JSX) */
  parser?: string;
  /** Whether to add semicolons */
  semi?: boolean;
  /** Use single quotes instead of double quotes */
  singleQuote?: boolean;
  /** Print width for line wrapping */
  printWidth?: number;
  /** Tab width for indentation */
  tabWidth?: number;
  /** Use tabs instead of spaces */
  useTabs?: boolean;
  /** Trailing comma configuration */
  trailingComma?: "none" | "es5" | "all";
  /** Bracket spacing in object literals */
  bracketSpacing?: boolean;
  /** Bracket line for JSX elements */
  bracketSameLine?: boolean;
  /** Arrow function parentheses */
  arrowParens?: "avoid" | "always";
  // ... other prettier options
}

Behavior:

  • Returns original code unchanged if config.prettier is false
  • Uses state.filePath or process.cwd() for prettier configuration resolution
  • Resolves prettier configuration from filesystem when config.runtimeConfig is true
  • Merges configuration in order of precedence (highest priority last):
    1. Default: { parser: 'babel' }
    2. Resolved prettier config from .prettierrc files
    3. Custom config from config.prettierConfig
  • Enables editorconfig integration during runtime configuration resolution
  • Uses prettier.format() with merged configuration options

Configuration Resolution:

// When runtimeConfig is true, the plugin resolves prettier config using:
import { resolveConfig } from 'prettier';

const prettierRcConfig = resolveConfig.sync(filePath, { 
  editorconfig: true 
});

Configuration Merging:

import deepmerge from 'deepmerge';

const finalConfig = deepmerge.all([
  { parser: 'babel' },           // Default parser for JSX
  prettierRcConfig || {},        // Runtime config from .prettierrc
  config.prettierConfig || {},   // Custom overrides
]);

Error Handling

The plugin gracefully handles configuration resolution failures:

  • Falls back to process.cwd() if state.filePath is not provided
  • Uses empty configuration if prettier config resolution fails
  • Relies on prettier's built-in error handling for formatting failures

Integration Notes

  • Peer Dependency: Requires @svgr/core for Plugin, Config, and State interfaces
  • Dependencies: Uses prettier ^2.8.7 for formatting and deepmerge ^4.3.1 for configuration merging
  • Plugin Architecture: Follows SVGR's standard plugin interface pattern
  • TypeScript Support: Fully typed with generated .d.ts files
  • Node.js Compatibility: Requires Node.js >=14

Common Configuration Examples

Minimal setup:

{
  "plugins": ["@svgr/plugin-prettier"]
}

With custom prettier config:

{
  "plugins": ["@svgr/plugin-prettier"],
  "prettier": true,
  "prettierConfig": {
    "semi": false,
    "singleQuote": true,
    "printWidth": 100
  }
}

Disable runtime config resolution:

{
  "plugins": ["@svgr/plugin-prettier"],
  "prettier": true,
  "runtimeConfig": false,
  "prettierConfig": {
    "semi": true,
    "tabWidth": 2
  }
}