From 1cc68e54622800e9043fde30d8ac130b40b8e275 Mon Sep 17 00:00:00 2001 From: Pionxzh Date: Mon, 1 Jan 2024 16:48:31 +0800 Subject: [PATCH] refactor: remove `transformationMap`, use `transformationRules` instead --- README.md | 4 +- benches/un-undefined.ts | 4 +- packages/unminify/src/index.ts | 19 +++---- .../unminify/src/transformations/index.ts | 53 ------------------- 4 files changed, 14 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 56c32e21..bc2ad3b9 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ for (const mod of modules) { ### `@wakaru/unminify` ```ts -import { runDefaultTransformation, runTransformations } from '@wakaru/unminify'; +import { runDefaultTransformation, runTransformationIds } from '@wakaru/unminify'; const file = { source: '...', // source code @@ -134,7 +134,7 @@ const rules = [ 'un-esm', ... ] -const { code } = await runTransformations(file, rules); +const { code } = await runTransformationIds(file, rules); ``` You can check all the rules at [/unminify/src/transformations/index.ts](https://github.com/pionxzh/wakaru/blob/main/packages/unminify/src/transformations/index.ts). diff --git a/benches/un-undefined.ts b/benches/un-undefined.ts index f9dc7e6c..5004796c 100644 --- a/benches/un-undefined.ts +++ b/benches/un-undefined.ts @@ -3,12 +3,12 @@ import { dirname } from 'node:path' import { fileURLToPath } from 'node:url' import { add, complete, cycle, save, suite } from 'benny' -import { runTransformations, transformationMap } from '../packages/unminify/src/index' +import { runTransformations, transformationRules } from '../packages/unminify/src/index' const __dirname = dirname(fileURLToPath(import.meta.url)) const title = 'un-undefined' -const rule = transformationMap[title] +const rule = transformationRules.find(rule => rule.name === title)!.transform const snippet = ` void 0; void 99; diff --git a/packages/unminify/src/index.ts b/packages/unminify/src/index.ts index 69d80d51..5721976a 100644 --- a/packages/unminify/src/index.ts +++ b/packages/unminify/src/index.ts @@ -1,19 +1,25 @@ import jscodeshift from 'jscodeshift' -import { transformationMap, transformationRules } from './transformations' +import { transformationRules } from './transformations' import { arraify } from './utils/arraify' import type { MaybeArray } from './utils/arraify' import type { FileInfo, Transform } from 'jscodeshift' -export function runDefaultTransformation

>(fileInfo: FileInfo, params: P = {} as any) { - const transforms = Object.values(transformationMap) +export * from './transformations' + +export function runDefaultTransformation

>( + fileInfo: FileInfo, + params: P = {} as any, +) { + const transforms = transformationRules.map(rule => rule.transform) return runTransformations(fileInfo, transforms, params) } export function runTransformationIds

>( fileInfo: FileInfo, ids: string[], - params: P = {} as any) { + params: P = {} as any, +) { const transforms = ids.map(id => transformationRules.find(rule => rule.id === id)?.transform).filter(Boolean) as Transform[] return runTransformations(fileInfo, transforms, params) } @@ -78,8 +84,3 @@ export function runTransformations

>( code, } } - -export { - transformationMap, - transformationRules, -} from './transformations' diff --git a/packages/unminify/src/transformations/index.ts b/packages/unminify/src/transformations/index.ts index 87952caa..e49778dd 100644 --- a/packages/unminify/src/transformations/index.ts +++ b/packages/unminify/src/transformations/index.ts @@ -37,59 +37,6 @@ import unWhileLoop from './un-while-loop' import type { Transform } from 'jscodeshift' import type { ZodSchema } from 'zod' -export const transformationMap: { - [name: string]: Transform -} = { - // first stage - basically prettify the code - prettier, - 'module-mapping': moduleMapping, - 'un-curly-braces': unCurlyBraces, // add curly braces so that other transformations can works easier, but generally this is not required - 'un-sequence-expression1': unSequenceExpression, // curly braces can bring out return sequence expression, so it runs before this - 'un-variable-merging': unVariableMerging, - 'un-assignment-merging': unAssignmentMerging, - - // second stage - prepare the code for unminify - 'un-runtime-helper': unRuntimeHelper, // eliminate helpers as early as possible - 'un-esm': unEsm, // relies on `un-runtime-helper` to eliminate helpers around `require` calls, relies on `un-assignment-merging` to split exports - 'un-enum': unEnum, // relies on `un-sequence-expression` - - // third stage - mostly one-to-one transformation - lebab, - 'un-export-rename': unExportRename, // relies on `un-esm` to give us the export statements, and this can break some rules from `lebab` - 'un-use-strict': unUseStrict, - 'un-esmodule-flag': unEsModuleFlag, - 'un-boolean': unBoolean, - 'un-undefined': unUndefined, - 'un-infinity': unInfinity, - 'un-typeof': unTypeof, - 'un-numeric-literal': unNumericLiteral, - 'un-template-literal': unTemplateLiteral, - 'un-bracket-notation': unBracketNotation, - 'un-return': unReturn, - 'un-while-loop': unWhileLoop, - 'un-indirect-call': unIndirectCall, - 'un-type-constructor': unTypeConstructor, - 'un-builtin-prototype': unBuiltinPrototype, - 'un-sequence-expression2': unSequenceExpression, - 'un-flip-comparisons': unFlipComparisons, - - // advanced syntax upgrade - 'smart-inline': smartInline, // relies on `lebab`'s `let` to `const` and `un-sequence-expression` - 'smart-rename': smartRename, // partially relies on `un-indirect-call` to work - 'un-optional-chaining': unOptionalChaining, - 'un-nullish-coalescing': unNullishCoalescing, - 'un-conditionals': unConditionals, // need to run after `un-optional-chaining` and `un-nullish-coalescing` - 'un-sequence-expression3': unSequenceExpression, // split sequence expressions introduced by `un-conditionals` - 'un-parameters': unParameters, // relies on `un-flip-comparisons` to work - 'un-jsx': unJsx, - 'un-iife': unIife, - 'un-es6-class': unES6Class, - 'un-async-await': unAsyncAwait, - - // last stage - prettify the code again after we finish all the transformations - 'prettier-last': prettier, -} - export interface TransformationRule { id: string /**