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