Skip to content
 
 

Repository files navigation

convert-to-arrow - codemod for JavaScript and TypeScript files.

Codemod to safely convert JavaScript and TypeScript function declarations into equivalent const arrow-function expressions.

// before
export function getUser<
  // user id type
  ID extends string | number,
>(id: ID): Promise<User> {
  return db.users.find(id)
}

// after (auto-generated)
export const getUser = <
  // user id type
  ID extends string | number,
>(id: ID): Promise<User> => {
  return db.users.find(id)
}

Works with .ts, .tsx, .js, and .jsx files. The default scan targets TypeScript files (**/*.{ts,tsx}) because that is the most common codemod target, but JavaScript is fully supported when you pass a JS-inclusive glob. See the node tests for documented conversion and skip examples.

Quick-start (no install required)

run in the root of your repo - converts TypeScript files in the current directory and subdirectories:

npx convert-to-arrow

or specify a sub-folder / glob. Directory inputs default to **/*.{ts,tsx} and always exclude node_modules:

npx convert-to-arrow src

More path options see advanced usage

Safety checklist

  • Commit/stash your work first – revert is instant.
  • Run the codemod
  • Review the diff
  • Run test suite / type-checking
  • Check the files for identation changes – the codemod tries to preserve the original formatting, but it may not always succeed.

Advanced usage

The CLI currently exposes one optional path argument. It can be either a directory or an explicit glob:

node_modules is always excluded from conversion, including when you pass a broad glob.

Example:

# convert only files under ./src
npx -y convert-to-arrow src

# convert two workspaces
npx -y convert-to-arrow "packages/*/src"

# full glob (quotes required for zsh)
npx -y convert-to-arrow "**/*.tsx"

# include JavaScript and TypeScript explicitly
npx -y convert-to-arrow "**/*.{js,jsx,ts,tsx}"

Report skipped functions

Pass --report to append a compact list of skipped functions to the normal conversion output:

npx -y convert-to-arrow --report src

# the flag can also come after the path/glob
npx -y convert-to-arrow src --report

Example report output:

🗂 Report: 2 skipped functions:
  • trackLog... - /absolute/path/to/src/log.ts:12 - referenced before declaration
  • collectA... - /absolute/path/to/src/runtime.ts:34 - uses arguments

Skipped functions are left unchanged when converting them would change runtime behavior or produce invalid output.

Contributing / local development

git clone https://github.com/richard-unterberg/convert-to-arrow
cd convert-to-arrow
npm i # install dependencies
npm run lefthook # git hooks
npm run test # builds the codemod and runs the node:test suite against dist/cli.js
npm run build # build the codemod - see dist
npm run verify # run repository checks

Pull requests & issues are welcome!

About

npx codemod to safely convert function declarations into equivalent arrow-function expressions.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages