codeshift-transform-declared-arrow-to-func-dec
v1.0.0
Published
jscodeshift transform to convert arrow function expressions, assigned to variables at the point of declaration, into traditional function declarations
Downloads
4
Maintainers
Readme
Codeshift Declared Arrow Expression to Function Declaration Transform
jscodeshift transform to convert arrow function expressions, assigned to variable declarations, into traditional function declarations
Before:
const foo = 1;
const bar = 2;
const add = (a: number, b: number) => {
return a + b;
};
add(foo, bar);
After:
const foo = 1;
const bar = 2;
function add(a: number, b: number) {
return a + b;
}
add(foo, bar);
This transform applies to any arrow expression that is assigned to a variable (var
/let
/const
) at the point of declaration.
Usage
$ npm i -DE codeshift-transform-declared-arrow-to-func-dec
$ jscodeshift -t node_modules/codeshift-transform-declared-arrow-to-func-dec/dist/index.js some-source-file.js
Examples
Implied/implicit return
Before:
const f = () => 1;
After:
function f() {
return 1;
}
Async functions
Before:
const get = async () => {
const res = await fetch('/foo');
return res.json();
};
After:
async function get() {
const res = await fetch('/foo');
return res.json();
}
Exported functions
Before:
export const f = () => Promise.resolve('Yay!');
After:
export function f() {
return Promise.resolve('Yay!');
}
Complex functions
Before:
const f = () => {
const a = 1;
const b = 2;
const c = 3;
const sum = (seed: number) => [a, b, c].reduce((total, n) => total + n, seed);
return sum(0);
};
After:
function f() {
const a = 1;
const b = 2;
const c = 3;
function sum(seed: number) {
return [a, b, c].reduce((total, n) => total + n, seed);
}
return sum(0);
}
Unsupported functionality
The following examples are not supported by the transform (but might be introduced in the next major version).
Deferred function assignments
type F = (x: number) => number;
let f: F;
f = x => x + 1; // will not be transformed!
Rebinding this
function f(this: string) {
const g = () => { // Will be transformed into a function declaration...
console.log(this); // ...but `this` will no longer refer to f's context!
};
g.call('Hello!');
}