mirror of
https://github.com/bendtherules/ts-transformer-visualizer.git
synced 2026-08-18 13:51:48 +00:00
54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
import React, { useEffect } from "react";
|
|
|
|
import {
|
|
ASTVisualizer,
|
|
initSourceFile,
|
|
updateSourceFile,
|
|
clearSourceFile
|
|
} from "ts-transformer-visualizer";
|
|
import * as ts from "typescript";
|
|
|
|
import { moduleMap, ModuleNames } from "./transforms";
|
|
|
|
// result.dispose();
|
|
|
|
export default function App({
|
|
moduleName,
|
|
timeDelayMs = 3000
|
|
}: {
|
|
moduleName: ModuleNames;
|
|
timeDelayMs?: number;
|
|
}) {
|
|
const { sourceCodeString, transformer } = moduleMap[moduleName];
|
|
|
|
// Create sourceFile and reset on route change
|
|
useEffect(() => {
|
|
// 1. Create sourceFile and pass it to visualizer
|
|
const mainFile = ts.createSourceFile(
|
|
"/test",
|
|
sourceCodeString,
|
|
ts.ScriptTarget.ES2015
|
|
);
|
|
initSourceFile(mainFile);
|
|
|
|
// 2. Set timeout to run transformer and update visualizer
|
|
const timeoutID = setTimeout(() => {
|
|
const modifiedFile = ts.transform(mainFile, [transformer]).transformed[0];
|
|
updateSourceFile(modifiedFile);
|
|
}, timeDelayMs);
|
|
|
|
return () => {
|
|
// 3. Clean timeout and reset visualizer
|
|
clearTimeout(timeoutID);
|
|
clearSourceFile();
|
|
};
|
|
});
|
|
|
|
return (
|
|
<div>
|
|
<ASTVisualizer />
|
|
<h2>{moduleName}</h2>
|
|
</div>
|
|
);
|
|
}
|