Skip to content

Commit

Permalink
refactor(codemods): abstract getKaioTagNamesMap
Browse files Browse the repository at this point in the history
  • Loading branch information
HeartSquared committed Dec 18, 2024
1 parent 2a91da1 commit 8aba8c8
Showing 1 changed file with 41 additions and 51 deletions.
92 changes: 41 additions & 51 deletions packages/components/codemods/utils/getKaioTagName.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,15 @@ export type TagImportAttributesMap = Map<string, TagImportAttributes>
/**
* Recurses through AST to find all the import names or aliases in KAIO that exactly match the provided strings.
*/
export const getKaioTagNamesMapByComponentName = (
const getKaioTagNamesMap = (
node: ts.Node,
importSpecifiers: string[],
onFilterAndUpdateTagsMap: (
kaioNamedImports: ImportModuleNamedImports,
checkAndUpdateTagsMap: (
namedImport: ts.ImportSpecifier,
checkToAddToMap: (originalName: string) => boolean,
) => void,
) => void,
): TagImportAttributesMap | undefined => {
const tagsMap = new Map() as TagImportAttributesMap

Expand All @@ -97,21 +103,19 @@ export const getKaioTagNamesMapByComponentName = (
return ts.forEachChild(visitedNode, visitNode)
}

importSpecifiers.forEach((importSpecifier) => {
kaioNamedImports.namedImports.find((namedImport) => {
const { originalName, tagName } = getNamesFromSpecifier(namedImport)

if (importSpecifier === originalName) {
tagsMap.set(tagName, {
importModuleName: kaioNamedImports.importModuleName,
tagName,
originalName,
})
return true
}
onFilterAndUpdateTagsMap(kaioNamedImports, (namedImport, checkToAddToMap) => {
const { originalName, tagName } = getNamesFromSpecifier(namedImport)

return false
})
if (checkToAddToMap(originalName)) {
tagsMap.set(tagName, {
importModuleName: kaioNamedImports.importModuleName,
tagName,
originalName,
})
return true
}

return false
})

return ts.forEachChild(visitedNode, visitNode)
Expand All @@ -122,48 +126,34 @@ export const getKaioTagNamesMapByComponentName = (
return tagsMap.size === 0 ? undefined : tagsMap
}

/**
* Recurses through AST to find all the import names or aliases in KAIO that exactly match the provided strings.
*/
export const getKaioTagNamesMapByComponentName = (
node: ts.Node,
importSpecifiers: string[],
): TagImportAttributesMap | undefined => {
return getKaioTagNamesMap(node, (kaioNamedImports, checkAndUpdateTagsMap) => {
importSpecifiers.forEach((importSpecifier) => {
kaioNamedImports.namedImports.find((namedImport) => {
checkAndUpdateTagsMap(namedImport, (originalName) => originalName === importSpecifier)
})
})
})
}

/**
* Recurses through AST to find all the import names or aliases in KAIO that match the provided regex pattern.
*
* @returns Map<string, Map<string, string>> | undefined
* - `Map<string, Map<string, string>>` = Map<importModuleName, Map<tagName, originalName>>
* - `importModuleName` = the module name of the KAIO import (eg. `@kaizen/components/future`)
* - `tagName` = the component name or alias (eg. `KaizenWell`)
* - `originalName` = the original component name (eg. `Well`)
* - `undefined` no imports that match the target
*/
export const getKaioTagNamesMapByPattern = (
node: ts.Node,
importSpecifierPattern: RegExp | string,
): TagImportAttributesMap | undefined => {
const tagsMap = new Map() as TagImportAttributesMap

const visitNode = (visitedNode: ts.Node): ts.Node | undefined => {
const kaioNamedImports = getKaioNamedImports(visitedNode)

if (!kaioNamedImports) {
return ts.forEachChild(visitedNode, visitNode)
}

return getKaioTagNamesMap(node, (kaioNamedImports, checkAndUpdateTagsMap) => {
kaioNamedImports.namedImports.forEach((namedImport) => {
const { originalName, tagName } = getNamesFromSpecifier(namedImport)

if (new RegExp(importSpecifierPattern).test(originalName)) {
tagsMap.set(tagName, {
importModuleName: kaioNamedImports.importModuleName,
tagName,
originalName,
})
return true
}

return false
checkAndUpdateTagsMap(namedImport, (originalName) =>
new RegExp(importSpecifierPattern).test(originalName),
)
})

return ts.forEachChild(visitedNode, visitNode)
}

visitNode(node)

return tagsMap.size === 0 ? undefined : tagsMap
})
}

0 comments on commit 8aba8c8

Please sign in to comment.