Skip to content

Commit 91f912b

Browse files
committed
Added parsing of imports & replacement of the names nodes used from other file with their system generated ID
1 parent 410d083 commit 91f912b

File tree

1 file changed

+49
-14
lines changed
  • rocket-chatter-ingestion-server/src/process/prepare/processor

1 file changed

+49
-14
lines changed
Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { parse } from "@typescript-eslint/typescript-estree"
22
import { namedTypes } from "ast-types"
3+
import path from "path"
34

45
import { DBNode } from "../../../core/dbNode"
56
import { ISourceFile } from "../sourceFile.types"
@@ -19,34 +20,68 @@ export class FileProcessor implements IFileProcessor {
1920
const fileContent = sourceFile.read()
2021
const ast = parse(fileContent)
2122

22-
const imports = ast.body.filter((node) =>
23-
namedTypes.ImportDeclaration.check(node)
24-
)
25-
2623
let treeNodes: TreeNode[] = []
2724
for (let node of ast.body) {
28-
if (namedTypes.ExportNamedDeclaration.check(node)) {
25+
if (namedTypes.ExportNamedDeclaration.check(node))
2926
node = (node as any).declaration
30-
}
3127

32-
if (namedTypes.FunctionDeclaration.check(node)) {
28+
if (namedTypes.FunctionDeclaration.check(node))
29+
/* Functions */
3330
treeNodes.push(Functions.Handle(node))
34-
} else if (namedTypes.TSInterfaceDeclaration.check(node)) {
31+
else if (namedTypes.TSInterfaceDeclaration.check(node))
32+
/* Interfaces */
3533
treeNodes.push(Interface.Handle(node))
36-
} else if (namedTypes.TSTypeAliasDeclaration.check(node)) {
34+
else if (namedTypes.TSTypeAliasDeclaration.check(node))
35+
/* Type Aliases */
3736
treeNodes.push(TypeAlias.Handle(node))
38-
} else if (namedTypes.TSEnumDeclaration.check(node)) {
37+
else if (namedTypes.TSEnumDeclaration.check(node))
38+
/* Enums */
3939
treeNodes.push(Enums.Handle(node))
40-
} else if (namedTypes.ClassDeclaration.check(node)) {
40+
else if (namedTypes.ClassDeclaration.check(node))
41+
/* Classes */
4142
treeNodes.push(Classes.Handle(node))
42-
} else if (namedTypes.TSModuleDeclaration.check(node)) {
43+
else if (namedTypes.TSModuleDeclaration.check(node))
44+
/* Namespaces */
4345
treeNodes.push(Namespaces.Handle(node))
44-
} else if (namedTypes.VariableDeclaration.check(node)) {
46+
else if (namedTypes.VariableDeclaration.check(node))
47+
/* Variables */
4548
treeNodes.push(...VariableDeclarations.Handle(node))
49+
}
50+
51+
// Resolve imports
52+
const parsedImports = new Map<string, string>() // { importName: absolutePath }
53+
{
54+
const imports = ast.body
55+
.filter((node) => namedTypes.ImportDeclaration.check(node)) // Filter out all non-import nodes
56+
.filter((node) => (node as any).source.value.startsWith(".")) // Filter out all library/non-relative imports
57+
for (const i of imports) {
58+
const absolutePath = path.resolve(
59+
path.dirname(sourceFile.getFullPath()),
60+
(i as any).source.value + ".ts"
61+
)
62+
const importName = (i as any).specifiers[0].local.name
63+
64+
parsedImports.set(importName, absolutePath)
4665
}
4766
}
67+
68+
// Replace import names with absolute paths
69+
for (const treeNode of treeNodes) {
70+
treeNode.sourceFilePath = sourceFile.getFullPath()
71+
treeNode.uses = treeNode.uses
72+
.filter((x) => x.name)
73+
.map((x) => {
74+
if (parsedImports.has(x.name)) {
75+
x.name = parsedImports.get(x.name)!
76+
}
77+
return x
78+
})
79+
}
80+
81+
// Add the nodes to the global reference
4882
for (const treeNode of treeNodes) {
49-
sourceFile.registerSyntax(treeNode)
83+
const dbNode = DBNode.fromTreeNode(treeNode)
84+
nodesRef[dbNode.id] = dbNode
5085
}
5186
}
5287
}

0 commit comments

Comments
 (0)