Docker Command Line Interface for RosaeNLG

Docker image for RosaeNLG that contains essentially RosaeNLG CLI package. It does not contain any server.

It is essentially useful for:

  • developing RosaeNLG templates without bothering with installing node.js etc.: write templates in VSCode or any other editor and render them

  • package RosaeNLG templates in a JSON package before uploading them to a server

Be aware that your system needs to run docker, then node.js inside your container, then compile etc. etc. before rendering your templates: performance is poor compared when using RosaeNLG as a node.js library or in the browser.

First test

With fruits.pug on your local filesystem, with no dependencies (i.e. no include in your pug file):

- var data = ['apples', 'bananas', 'apricots', 'pears'];
p
  eachz fruit in data with { separator: ',', last_separator: 'and', begin_with_general: 'I love', end:'!' }
    | #{fruit}
cat fruits.pug | docker run -i rosaenlg/cli:latest -l en_US

You should obtain <p>I love apples, bananas, apricots and pears!</p>.

You can render continuously while you edit using the -w option.

Templates with includes

If your templates include other templates (using include - which is very common), you have to map filesystems so that the docker file can read the includes.

docker run -i -v /home/user/rosaenlg/local_templates/:/templates rosaenlg/cli:latest -l en_US /templates/your_template.pug

You can use -w, --watch to watch files for changes and automatically re-render.

Package templates

fruits.pug on your local filesystem:

p
  eachz fruit in data with { separator: ',', last_separator: 'and', begin_with_general: 'I love', end:'!' }
    | #{fruit}

packageOpts.json on your local filesystem (in the same folder as fruits.pug):

{
  "templateId": "fruits",
  "src": {
    "entryTemplate": "templates/fruits.pug",
    "compileInfo": {
      "activate": false,
      "language": "en_US"
    }
  }
}
docker run -i -v /home/user/rosaenlg/local_templates/:/templates rosaenlg/cli:latest --jsonpackage --packageopts /templates/packageOpts.json

This should output a new JSON flow, packaged to be used in a RosaeNLG server:

{
  "templateId": "fruits",
  "src": {
    "entryTemplate": "fruits.pug",
    "compileInfo": {
      "language": "en_US"
    },
    "templates": {
      "fruits.pug": "* var data = ['apples', 'bananas', 'apricots', 'pears'];\np\n  eachz fruit in data with { separator: ',', last_separator: 'and', begin_with_general: 'I love', end:'!' }\n    | #{fruit}\n\n\n"
    }
  }
}

Command line parameters