From 664c1772a87a18b6235d9851a435952cb7f1f3c8 Mon Sep 17 00:00:00 2001 From: tarunama Date: Tue, 19 Jan 2021 01:49:38 +0900 Subject: [PATCH 1/4] refactor: add types --- .../transforms/name-default-component.ts | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/packages/next-codemod/transforms/name-default-component.ts b/packages/next-codemod/transforms/name-default-component.ts index 745de4aaf4f10d7..9b28138326cb2ee 100644 --- a/packages/next-codemod/transforms/name-default-component.ts +++ b/packages/next-codemod/transforms/name-default-component.ts @@ -1,39 +1,44 @@ import { basename, extname } from 'path' -const camelCase = (value) => { - const val = value.replace(/[-_\s.]+(.)?/g, (_match, chr) => +const camelCase = (value: string): string => { + const val: string = value.replace(/[-_\s.]+(.)?/g, (_match, chr) => chr ? chr.toUpperCase() : '' ) return val.substr(0, 1).toUpperCase() + val.substr(1) } -const isValidIdentifier = (value) => /^[a-zA-ZÀ-ÿ][0-9a-zA-ZÀ-ÿ]+$/.test(value) +const isValidIdentifier = (value: string): boolean => + /^[a-zA-ZÀ-ÿ][0-9a-zA-ZÀ-ÿ]+$/.test(value) + +type Node = { + type: string + declaration: { + type: string + body: any + id?: any + } +} export default function transformer(file, api, options) { const j = api.jscodeshift const root = j(file.source) - let hasModifications + let hasModifications: boolean - const returnsJSX = (node) => + const isJSX = (node): boolean => node.type === 'JSXElement' || (node.type === 'BlockStatement' && j(node) .find(j.ReturnStatement) - .some( - (path) => - path.value.argument && path.value.argument.type === 'JSXElement' - )) + .some((path) => path.value.argument?.type === 'JSXElement')) - const hasRootAsParent = (path) => { + const hasRootAsParent = (path): boolean => { const program = path.parentPath.parentPath.parentPath.parentPath.parentPath - return ( - !program || (program && program.value && program.value.type === 'Program') - ) + return !program || program?.value?.type === 'Program' } - const nameFunctionComponent = (path) => { - const node = path.value + const nameFunctionComponent = (path): void => { + const node: Node = path.value if (!node.declaration) { return @@ -41,7 +46,7 @@ export default function transformer(file, api, options) { const isArrowFunction = node.declaration.type === 'ArrowFunctionExpression' && - returnsJSX(node.declaration.body) + isJSX(node.declaration.body) const isAnonymousFunction = node.declaration.type === 'FunctionDeclaration' && !node.declaration.id @@ -49,8 +54,8 @@ export default function transformer(file, api, options) { return } - const fileName = basename(file.path, extname(file.path)) - let name = camelCase(fileName) + const fileName: string = basename(file.path, extname(file.path)) + let name: string = camelCase(fileName) // If the generated name looks off, don't add a name if (!isValidIdentifier(name)) { From bbbbd112872e3bd67fa01181a8c8d4f8d081bf27 Mon Sep 17 00:00:00 2001 From: tarunama Date: Fri, 22 Jan 2021 20:48:40 +0900 Subject: [PATCH 2/4] fix: revert variable name returnsJSX. --- packages/next-codemod/transforms/name-default-component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-codemod/transforms/name-default-component.ts b/packages/next-codemod/transforms/name-default-component.ts index 9b28138326cb2ee..efb438282ac7c3b 100644 --- a/packages/next-codemod/transforms/name-default-component.ts +++ b/packages/next-codemod/transforms/name-default-component.ts @@ -25,7 +25,7 @@ export default function transformer(file, api, options) { let hasModifications: boolean - const isJSX = (node): boolean => + const returnsJSX = (node): boolean => node.type === 'JSXElement' || (node.type === 'BlockStatement' && j(node) @@ -46,7 +46,7 @@ export default function transformer(file, api, options) { const isArrowFunction = node.declaration.type === 'ArrowFunctionExpression' && - isJSX(node.declaration.body) + returnsJSX(node.declaration.body) const isAnonymousFunction = node.declaration.type === 'FunctionDeclaration' && !node.declaration.id From 757c56b7b8ad2dfd19bfb083e5bbe8c64b41d859 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 26 Jan 2021 12:20:00 +0100 Subject: [PATCH 3/4] Update packages/next-codemod/transforms/name-default-component.ts --- packages/next-codemod/transforms/name-default-component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-codemod/transforms/name-default-component.ts b/packages/next-codemod/transforms/name-default-component.ts index efb438282ac7c3b..fa43a95a28bb9d5 100644 --- a/packages/next-codemod/transforms/name-default-component.ts +++ b/packages/next-codemod/transforms/name-default-component.ts @@ -1,7 +1,7 @@ import { basename, extname } from 'path' const camelCase = (value: string): string => { - const val: string = value.replace(/[-_\s.]+(.)?/g, (_match, chr) => + const val = value.replace(/[-_\s.]+(.)?/g, (_match, chr) => chr ? chr.toUpperCase() : '' ) return val.substr(0, 1).toUpperCase() + val.substr(1) From dc9166b12fbd1ede6fbf9d4a146e9b5e0e3b2067 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 26 Jan 2021 12:22:33 +0100 Subject: [PATCH 4/4] Apply suggestions from code review --- packages/next-codemod/transforms/name-default-component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-codemod/transforms/name-default-component.ts b/packages/next-codemod/transforms/name-default-component.ts index fa43a95a28bb9d5..bcbf7c34202a5b1 100644 --- a/packages/next-codemod/transforms/name-default-component.ts +++ b/packages/next-codemod/transforms/name-default-component.ts @@ -54,8 +54,8 @@ export default function transformer(file, api, options) { return } - const fileName: string = basename(file.path, extname(file.path)) - let name: string = camelCase(fileName) + const fileName = basename(file.path, extname(file.path)) + let name = camelCase(fileName) // If the generated name looks off, don't add a name if (!isValidIdentifier(name)) {