js2flowchart
Version:
> Why? While I've been working on [Under-the-hood-ReactJS](https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS) I spent enormous amount of time on creating schemes. Each change in code or flowchart affects all entire scheme instantly, forcing you t
64 lines (52 loc) • 1.99 kB
JavaScript
import { parseCodeToAST } from 'builder/astBuilder';
import FlowTreeBuilder, {
ABSTRACTION_LEVELS,
MODIFIER_PRESETS,
DEFINED_MODIFIERS
} from 'builder/FlowTreeBuilder';
import SVGRender from 'render/svg/SVGRender';
import { TOKEN_TYPES, MODIFIED_TYPES } from 'shared/constants';
const buildTreeByAbstractionLevels = levels => {
const flowTreeBuilder = FlowTreeBuilder();
flowTreeBuilder.setAbstractionLevel(levels);
return astTree => flowTreeBuilder.buildFlowTreeFromAst(astTree);
};
export const generateExportSlideTree = buildTreeByAbstractionLevels(ABSTRACTION_LEVELS.EXPORT);
export const generateImportExportSlideTree = buildTreeByAbstractionLevels([
ABSTRACTION_LEVELS.EXPORT,
ABSTRACTION_LEVELS.IMPORT
]);
export const generateClassFunctionSlideTree = buildTreeByAbstractionLevels([
ABSTRACTION_LEVELS.EXPORT,
ABSTRACTION_LEVELS.IMPORT,
ABSTRACTION_LEVELS.CLASS,
ABSTRACTION_LEVELS.FUNCTION
]);
export const generateClassFunctionDependenciesSlideTree = buildTreeByAbstractionLevels([
ABSTRACTION_LEVELS.EXPORT,
ABSTRACTION_LEVELS.IMPORT,
ABSTRACTION_LEVELS.CLASS,
ABSTRACTION_LEVELS.FUNCTION,
ABSTRACTION_LEVELS.FUNCTION_DEPENDENCIES
]);
export const generateRegularSlideTree = astTree => {
const flowTreeBuilder = FlowTreeBuilder();
return flowTreeBuilder.buildFlowTreeFromAst(astTree);
};
export default code => ({
buildSlides: () => {
const svgRender = SVGRender(),
astTree = parseCodeToAST(code);
const slides = [
generateExportSlideTree(astTree),
generateImportExportSlideTree(astTree),
generateClassFunctionSlideTree(astTree),
generateClassFunctionDependenciesSlideTree(astTree),
generateRegularSlideTree(astTree)
];
return slides
.filter(slide => slide.body.length)
.map(svgRender.buildShapesTree)
.map(shapesTree => shapesTree.print());
}
});