0.1.0 • Published 1 year ago

@dasha.ai/graph-api v0.1.0

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
1 year ago

Dasha Graph API

API for parsing, dynamic creating and emitting .dsl files for Dasha.AI applications.

Installation

Global installation:

npm install "@dasha.ai/graph-api"

Usage

Suppose you have the following example.dsl file:

// example.dsl
context
{
    input phone: string,
}

start node root
{
    do
    {
        #connectSafe($phone);
        #sayText("It's just a test graph. Bye!")
        exit;
    }
}

Then you can use @dasha.ai/graph-api to parse and dynamically modify it:

const fs = require("fs/promises")
const graphApi = require("@dasha.ai/graph-api")

async function main() {
    const dslFileContent = await fs.readFile("example.dsl", encoding="utf-8");
    /** create serialized dsl document with JsonEmitter */
    const fileContentJson = graphApi.JsonEmitter.emit(dslFileContent);
    /** create instance of dynamic dsl-element that contains the whole .dsl file content */
    const fileContent = new graphApi.elements.FileContent(fileContentJson);
    /** get list of nodes in dsl file */
    const nodes = fileContent.content.nodes

    /** create new node */
    const newNode = new graphApi.elements.Node({
        elementType: "Node",
        name: graphApi.interfaces.helpers.createRawElement("new_node"),
        isStartNode: false,
        doSection: {
            elementType: "GroupCommandStatement",
            commands: []
        },
        transitionSection: graphApi.interfaces.helpers.createOptionalValue(),
        onExitSection: graphApi.interfaces.helpers.createOptionalValue(),
        commentSection: graphApi.interfaces.helpers.createOptionalValue()
    })
    /** add it to the graph */
    nodes.push(newNode);
    /** emit new dsl code */
    const newDslContent = fileContent.toDsl(0);
    /** save it on disk */
    await fs.writeFile("example-modified.dsl", newDslContent);
}

main()

Also you can use this package in browser:

import * as graphApi from "@dasha.ai/graph-api/web"

async function main() {
    const dslFileContent = "<your dsl file conten>";
    /** create serialized dsl document with JsonEmitter */
    const fileContentJson = graphApi.JsonEmitter.emit(dslFileContent);
    /** create instance of dynamic dsl-element that contains the whole .dsl file content */
    const fileContent = new graphApi.elements.FileContent(fileContentJson);
    /** get list of nodes in dsl file */
    const nodes = fileContent.content.nodes

    /** create new node */
    const newNode = new graphApi.elements.Node({
        elementType: "Node",
        name: graphApi.interfaces.helpers.createRawElement("new_node"),
        isStartNode: false,
        doSection: {
            elementType: "GroupCommandStatement",
            commands: []
        },
        transitionSection: graphApi.interfaces.helpers.createOptionalValue(),
        onExitSection: graphApi.interfaces.helpers.createOptionalValue(),
        commentSection: graphApi.interfaces.helpers.createOptionalValue()
    })
    /** add it to the graph */
    nodes.push(newNode);
    /** emit new dsl code */
    const newDslContent = fileContent.toDsl(0);
    /** save it on disk */
    console.log("example-modified.dsl", newDslContent);
}

main()

License

This package is distributed under the Apache License, Version 2.0.