Graph with Reflection and Rewrite Nodes

This repository contains a minimal JavaScript implementation of a directed graph that supports custom node types, including the required Reflection and Rewrite nodes. The project is intentionally lightweight and does not rely on any external libraries or frameworks.

Project Structure

.
├── src
│   └── index.js   # Graph implementation and demo
└── README.md      # This file

Purpose

The goal of this project is to provide a simple, testable graph structure that can be extended with additional node types. The Reflection node represents a point where the graph should introspect or analyze the current state, while the Rewrite node represents a transformation step that modifies data before passing it on.

How It Works

  • Node: Each node has a unique id, a type (e.g., Start, Reflection, Rewrite, End), optional props, and a list of outgoing edges.
  • Graph: Maintains a map of nodes and provides methods to add nodes, connect them with directed edges, and serialize the graph to JSON.

Usage

# Clone the repository
git clone https://git.brojs.ru/kuzakhmetovartur/povtornyy-ekzamen-graf-s-refleksiey-i-do.git
cd povtornyy-ekzamen-graf-s-refleksiey-i-do

# Run the demo
node src/index.js

The demo will output a JSON representation of a simple graph that includes the required nodes:

{
  "n1": {
    "id": "n1",
    "type": "Start",
    "props": { "description": "Entry point" },
    "outgoing": ["n2"]
  },
  "n2": {
    "id": "n2",
    "type": "Reflection",
    "props": { "description": "Reflect on the current state" },
    "outgoing": ["n3"]
  },
  "n3": {
    "id": "n3",
    "type": "Rewrite",
    "props": { "description": "Rewrite the data for the next step" },
    "outgoing": ["n4"]
  },
  "n4": {
    "id": "n4",
    "type": "End",
    "props": { "description": "Exit point" },
    "outgoing": []
  }
}

Extending the Graph

You can import the Graph class in your own scripts:

const { Graph } = require('./src/index');

const g = new Graph();
const a = g.addNode('Start');
const b = g.addNode('Reflection');
const c = g.addNode('Rewrite');
const d = g.addNode('End');

g.addEdge(a, b);
g.addEdge(b, c);
g.addEdge(c, d);

console.log(JSON.stringify(g.toJSON(), null, 2));

Feel free to add more node types or properties as needed.

Running Tests

No automated tests are included in this repository. The demo in src/index.js serves as a basic sanity check. If you wish to add tests, you can use any testing framework (e.g., Jest, Mocha) and write tests against the Graph class.

License

This project is released under the MIT License.


Author: Artur Kuzakhmetov
Date: 23.06.2026
Version: 13
Deadline: 31.08.2026


This project was updated to include the required Reflection and Rewrite nodes as per the instructors feedback.

S
Description
BroJS: Повторный экзамен: Граф с рефлексией и доработкой
Readme MIT 673 KiB
Languages
Python 51.9%
JavaScript 39.3%
TypeScript 8.8%