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
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.jsExamples
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!');
}