Skip to content

tabkram/execution-engine

Repository files navigation

Execution Engine

execution-engine on npm npm install size Github repo GitHub license Documentation jsDocs.io

Execution Engine is a TypeScript library that enables tracing and visualization of code execution workflows in your project. Gain insights into the dynamic sequence of code execution by capturing detailed traces in JSON format, easily parseable into graphs.

Features ✨

  • Tracing: Trace the execution flow of code within your project.
  • Timing: Capture the timing of each executed function.
  • Visualization: Generate traces in JSON format for clear and insightful visualization.

Installation πŸ“¦

Use npm package manager:

npm install execution-engine

Or use the yarn package manager:

yarn add execution-engine

Usage πŸ“š

Example 1: Basic Usage

import { ExecutionEngine } from "execution-engine";

const engine = new ExecutionEngine();

// for sync functions:
const res1 = engine.run((param) => `result1 for ${param}`, ['param1']);

// for async functions:
const res2 = await engine.run(async (param) => `result2 for ${param}`, [res1.outputs]);

// Retrieve the trace
const trace = engine.getTrace();
console.log('Trace:', trace);

You can:

Example 2: Usage with Decorators

import { engine, run } from "execution-engine";

@engine({ id: "uniqueEngineId" })
class MyClass extends EngineTask {
  @run()
  myMethod1(param: string) {
    return `result1 for ${param}`;
  }

  @run()
  async myMethod2(param: string) {
    return `result2 for ${param}`;
  }
}

const myInstance = new MyClass();
myInstance.myMethod2("param1");
await myInstance.myMethod2("param2");

// Retrieve the trace
const trace = myInstance.engine.getTrace();
console.log("Trace:", trace);

You can:

Understanding the Trace 🧭

The trace object is an array containing nodes and edges. It has the following structure:

trace = [
  {
    data: {
      id: function_uuid1,
      label: "function"
      //... other properties of the result of the executed function as mentioned above 
    },
    group: nodes
  },
  {
    data: {
      id: function_uuid2,
      label: "function"
      //... other properties of the result of the executed function as mentioned above
    },
    group: nodes
  },
  {
    data: {
      id: function_uuid1 -> function_uuid2,
      source: function_uuid1,
      target: function_uuid2,
      parallel: false
    },
    group: edges
  }
];

Examples πŸ“˜

For additional usage examples, please explore the /examples directory in this repository.

You'll find a variety of scenarios showcasing the capabilities of Execution Engine.

Documentation πŸ“”

Explore the comprehensive documentation for this project.

Changelog πŸ“

For a detailed list of changes, enhancements, and bug fixes, please refer to our Changelog.

Contributing 🀝

If you find any issues or have suggestions for improvement, feel free to open an issue or submit a pull request. Contributions are welcome!

Before getting started, please read our Contribution Guidelines.

Community πŸ‘₯

Love execution-engine ? Give our repo a star ⭐ ⬆️.

License πŸ“„

This project is licensed under the MIT License - see the LICENSE file for details.