@dasha.ai/graph-api
v0.1.0
Published
API for generating and parsing .dsl files
Downloads
4
Readme
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.