From 82b813327d49becf212c7570b6bbaaac26f192eb Mon Sep 17 00:00:00 2001 From: Ruriko Araki Date: Tue, 3 Jan 2023 17:39:23 -0800 Subject: [PATCH] Add cli to run transforms using the codemods package (#2189) * Build cli for codemod package * Make the thing actually work * Change files * Update readme * Update ignore path * Fix cli * Include new codemod * consistent slashes * Fix depcheck * Remove unnecessary change file * Add exe bit --- .prettierignore | 2 +- ...-01938036-6d42-4d77-b31e-2890abc66475.json | 7 ++++ ...-37f27f7c-d8ed-4901-b8ba-a6e8cd9bb892.json | 7 ---- packages/codemods/README.md | 4 +- packages/codemods/package.json | 16 +++++-- packages/codemods/src/index.ts | 3 ++ packages/codemods/src/transform.ts | 42 +++++++++++++++++++ .../button-v0-to-v1.input.tsx | 0 .../button-v0-to-v1.output.tsx | 0 .../deprecate-exports.input.tsx | 0 .../deprecate-exports.output.tsx | 0 .../__tests__/button-v0-to-v1-test.ts | 0 .../__tests__/deprecate-exports-test.ts | 0 .../src/{ => transforms}/button-v0-to-v1.ts | 0 .../src/{ => transforms}/deprecate-exports.ts | 0 packages/codemods/transform.js | 3 ++ packages/codemods/tsconfig.json | 2 +- 17 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 change/@fluentui-react-native-codemods-01938036-6d42-4d77-b31e-2890abc66475.json delete mode 100644 change/@fluentui-react-native-platform-utils-37f27f7c-d8ed-4901-b8ba-a6e8cd9bb892.json create mode 100644 packages/codemods/src/index.ts create mode 100644 packages/codemods/src/transform.ts rename packages/codemods/src/{ => transforms}/__testfixtures__/button-v0-to-v1.input.tsx (100%) rename packages/codemods/src/{ => transforms}/__testfixtures__/button-v0-to-v1.output.tsx (100%) rename packages/codemods/src/{ => transforms}/__testfixtures__/deprecate-exports.input.tsx (100%) rename packages/codemods/src/{ => transforms}/__testfixtures__/deprecate-exports.output.tsx (100%) rename packages/codemods/src/{ => transforms}/__tests__/button-v0-to-v1-test.ts (100%) rename packages/codemods/src/{ => transforms}/__tests__/deprecate-exports-test.ts (100%) rename packages/codemods/src/{ => transforms}/button-v0-to-v1.ts (100%) rename packages/codemods/src/{ => transforms}/deprecate-exports.ts (100%) create mode 100755 packages/codemods/transform.js diff --git a/.prettierignore b/.prettierignore index f0b4d4864..614670f16 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,2 @@ #Ignore transforms test output files -**/src/__testfixtures__/*.output.tsx \ No newline at end of file +**/__testfixtures__/*.output.tsx \ No newline at end of file diff --git a/change/@fluentui-react-native-codemods-01938036-6d42-4d77-b31e-2890abc66475.json b/change/@fluentui-react-native-codemods-01938036-6d42-4d77-b31e-2890abc66475.json new file mode 100644 index 000000000..6d3e0a0af --- /dev/null +++ b/change/@fluentui-react-native-codemods-01938036-6d42-4d77-b31e-2890abc66475.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Build cli for codemod package", + "packageName": "@fluentui-react-native/codemods", + "email": "ruaraki@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-react-native-platform-utils-37f27f7c-d8ed-4901-b8ba-a6e8cd9bb892.json b/change/@fluentui-react-native-platform-utils-37f27f7c-d8ed-4901-b8ba-a6e8cd9bb892.json deleted file mode 100644 index 7195ca1cc..000000000 --- a/change/@fluentui-react-native-platform-utils-37f27f7c-d8ed-4901-b8ba-a6e8cd9bb892.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "additional of isMobile utils", - "packageName": "@fluentui-react-native/platform-utils", - "email": "rohanpd.work@gmail.com", - "dependentChangeType": "patch" -} diff --git a/packages/codemods/README.md b/packages/codemods/README.md index 86a45b01e..57bb4e751 100644 --- a/packages/codemods/README.md +++ b/packages/codemods/README.md @@ -8,13 +8,13 @@ This package supplies transforms that help with refactoring FURN code. The trans 2. Run the transforms using the following command: ```cli -jscodeshift -t --parser=tsx --extensions=tsx +npx -p @fluentui-react-native/codemods transform -t --path ``` For example ```cli -jscodeshift -t transforms/src/button-v0-to-v1.ts --parser=tsx --extensions=tsx apps/fluent-tester/src/TestComponents/Button/deprecated +npx -p @fluentui-react-native/codemods transform -t button-v0-to-v1 --path .\apps\fluent-tester\src\TestComponents\Button\deprecated\ButtonFocusTest.tsx ``` ## Tests diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 8de19dbda..844b5da14 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -8,7 +8,11 @@ "main": "src/index.ts", "module": "src/index.ts", "typings": "lib/index.d.ts", + "bin": { + "transform": "./transform.js" + }, "scripts": { + "build": "fluentui-scripts build", "just": "fluentui-scripts", "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", @@ -22,16 +26,22 @@ "url": "https://github.com/microsoft/fluentui-react-native.git", "directory": "packages/codemods" }, + "dependencies": { + "jscodeshift": "^0.13.1", + "yargs": "^17.0.0" + }, "devDependencies": { "@fluentui-react-native/eslint-config-rules": "^0.1.1", "@fluentui-react-native/scripts": "^0.1.1", "@fluentui-react-native/test-tools": ">=0.1.1 <1.0.0", - "@types/jscodeshift": "^0.11.5", - "jscodeshift": "^0.13.1" + "@types/jscodeshift": "^0.11.5" }, "depcheck": { + "ignoreMatches": [ + ".bin" + ], "ignorePatterns": [ - "src/__testfixtures__/*" + "src/transforms/__testfixtures__/*" ] } } diff --git a/packages/codemods/src/index.ts b/packages/codemods/src/index.ts new file mode 100644 index 000000000..4d8b81b5e --- /dev/null +++ b/packages/codemods/src/index.ts @@ -0,0 +1,3 @@ +import { transform, yargsParse } from './transform'; + +transform(yargsParse(process.argv)); diff --git a/packages/codemods/src/transform.ts b/packages/codemods/src/transform.ts new file mode 100644 index 000000000..c28314b0b --- /dev/null +++ b/packages/codemods/src/transform.ts @@ -0,0 +1,42 @@ +import path from 'path'; +import yargs from 'yargs'; +import { execSync } from 'child_process'; + +const transformerDirectory = path.join(__dirname, 'transforms'); +const jscodeshiftExecutable = require.resolve('.bin/jscodeshift'); + +interface argsType { + path: string; + transform: string; +} + +export const yargsParse = (args: string[]): argsType => { + return yargs([]) + .help() + .exitProcess(false) + .option('path', { + alias: 'p', + type: 'string', + description: 'Path that transform should be run over', + normalize: true, + }) + .option('transform', { + alias: 't', + type: 'string', + description: 'Name of transform to run', + choices: ['button-v0-to-v1', 'deprecate-exports'], + }) + .demandOption(['path', 'transform']) + .parse(args); +}; + +export const transform = (args: argsType) => { + const codeshiftArgs = []; + + codeshiftArgs.push('-t', path.join(transformerDirectory, args.transform + '.js')); + codeshiftArgs.push('--parser=tsx'); + codeshiftArgs.push('--extensions=tsx'); + codeshiftArgs.push(args.path); + + execSync(jscodeshiftExecutable + ' ' + codeshiftArgs.join(' ')); +}; diff --git a/packages/codemods/src/__testfixtures__/button-v0-to-v1.input.tsx b/packages/codemods/src/transforms/__testfixtures__/button-v0-to-v1.input.tsx similarity index 100% rename from packages/codemods/src/__testfixtures__/button-v0-to-v1.input.tsx rename to packages/codemods/src/transforms/__testfixtures__/button-v0-to-v1.input.tsx diff --git a/packages/codemods/src/__testfixtures__/button-v0-to-v1.output.tsx b/packages/codemods/src/transforms/__testfixtures__/button-v0-to-v1.output.tsx similarity index 100% rename from packages/codemods/src/__testfixtures__/button-v0-to-v1.output.tsx rename to packages/codemods/src/transforms/__testfixtures__/button-v0-to-v1.output.tsx diff --git a/packages/codemods/src/__testfixtures__/deprecate-exports.input.tsx b/packages/codemods/src/transforms/__testfixtures__/deprecate-exports.input.tsx similarity index 100% rename from packages/codemods/src/__testfixtures__/deprecate-exports.input.tsx rename to packages/codemods/src/transforms/__testfixtures__/deprecate-exports.input.tsx diff --git a/packages/codemods/src/__testfixtures__/deprecate-exports.output.tsx b/packages/codemods/src/transforms/__testfixtures__/deprecate-exports.output.tsx similarity index 100% rename from packages/codemods/src/__testfixtures__/deprecate-exports.output.tsx rename to packages/codemods/src/transforms/__testfixtures__/deprecate-exports.output.tsx diff --git a/packages/codemods/src/__tests__/button-v0-to-v1-test.ts b/packages/codemods/src/transforms/__tests__/button-v0-to-v1-test.ts similarity index 100% rename from packages/codemods/src/__tests__/button-v0-to-v1-test.ts rename to packages/codemods/src/transforms/__tests__/button-v0-to-v1-test.ts diff --git a/packages/codemods/src/__tests__/deprecate-exports-test.ts b/packages/codemods/src/transforms/__tests__/deprecate-exports-test.ts similarity index 100% rename from packages/codemods/src/__tests__/deprecate-exports-test.ts rename to packages/codemods/src/transforms/__tests__/deprecate-exports-test.ts diff --git a/packages/codemods/src/button-v0-to-v1.ts b/packages/codemods/src/transforms/button-v0-to-v1.ts similarity index 100% rename from packages/codemods/src/button-v0-to-v1.ts rename to packages/codemods/src/transforms/button-v0-to-v1.ts diff --git a/packages/codemods/src/deprecate-exports.ts b/packages/codemods/src/transforms/deprecate-exports.ts similarity index 100% rename from packages/codemods/src/deprecate-exports.ts rename to packages/codemods/src/transforms/deprecate-exports.ts diff --git a/packages/codemods/transform.js b/packages/codemods/transform.js new file mode 100755 index 000000000..0cc65676f --- /dev/null +++ b/packages/codemods/transform.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('./lib-commonjs/index'); diff --git a/packages/codemods/tsconfig.json b/packages/codemods/tsconfig.json index 8c6817ed9..99a55d9a7 100644 --- a/packages/codemods/tsconfig.json +++ b/packages/codemods/tsconfig.json @@ -5,5 +5,5 @@ "types": ["node", "jest"] }, "include": ["src"], - "exclude": ["src/__testfixtures__"] + "exclude": ["src/transforms/__testfixtures__"] }