npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@org-408/plantuml-parser

v0.4.1

Published

Parse PlantUML with JavaScript or TypeScript

Downloads

1

Readme

plantuml-parser npm version Build Status Coverage Status Twitter URL

Parse PlantUML with JavaScript or TypeScript

The aim of this project is to provide a feature-complete, well tested and maintainable Parsing Expression Grammar (PEG) for the PlantUML syntax. The parser is designed to be used as JavaScript library or from the Command Line.

Important: The parser is not yet feature-complete. But we focus on writing a robust implementation which can parse parts of diagrams without knowing the full syntax. This means that the parser probably still parses just about enough to get you started. If not, please contribute :heart:.

Installation

$ npm install --save plantuml-parser

Examples / Fixtures

PlantUML is not a formally defined language - something we would like to change. This means we have to build this parser by reverse engineering from examples. For this reason we keep a large set of PlantUML diagrams (in.plantuml) and the corresponding formatted output (parse[File]-out.<formatter>) in test/fixtures/. We even have diagrams which exposed bugs in the parser or diagrams which contain known broken PlantUML syntax. Please help us expand that collection by contributing your own diagrams. Every diagram counts :rocket:.

Usage

const { parse, parseFile, formatters } = require('plantuml-parser');

// Example PlantUML
const data = `
@startuml
  class A
  class B
  A --|> B
@enduml
`;

// parse PlantUML
const result = parse(data);

// Format and print parse result
console.log(
  formatters.default(result)
);
[
  {
    "elements": [
      {
        "name": "A",
        "title": "A",
        "isAbstract": false,
        "members": [],
        "extends_": [],
        "implements_": [],
        "generics": [],
        "stereotypes": []
      },
      {
        "name": "B",
        "title": "B",
        "isAbstract": false,
        "members": [],
        "extends_": [],
        "implements_": [],
        "generics": [],
        "stereotypes": []
      },
      {
        "left": "A",
        "right": "B",
        "leftType": "Unknown",
        "rightType": "Unknown",
        "leftArrowHead": "",
        "rightArrowHead": "|>",
        "leftArrowBody": "-",
        "rightArrowBody": "-",
        "leftCardinality": "",
        "rightCardinality": "",
        "label": "",
        "hidden": false
      }
    ]
  }
]

parse(data, options)

Parse PlantUML in data. Returns the parse result.

  • data: data to parse
  • options: supports all PEG.js parser options. Enable tracing with options.verbose = true. If tracing is enabled, options is also forwarded to the tracer object. See pegjs-backtrace options for a full list of supported tracer options.

parseFile(pattern, options, cb)

Parse all PlantUML diagrams in the files matching pattern. If given, the callback function cb will make this function behave asynchronous.

  • pattern: files to parse, supports globbing, e.g.: **/*.plantuml.
  • options: supports all PEG.js parser options. Enable tracing with options.verbose = true. If tracing is enabled, options is also forwarded to the tracer object. See pegjs-backtrace options for a full list of supported tracer options.
  • cb: (optional) asynchronous callback. Called with: cb(err, result)

formatters: A collection of built-in parse result formatters.

For a detailed description of all the formatters see src/formatters.

Command Line Interface

Installation

# npm install --global plantuml-parser

Usage

Options:
  --version        Show version number                                 [boolean]
  --formatter, -f  formatter to use
                              [choices: "default", "graph"] [default: "default"]
  --input, -i      input file(s) to read, supports globbing
                                                       [string] [default: stdin]
  --output, -o     output file to write               [string] [default: stdout]
  --color, -c      colorful output                    [boolean] [default: false]
  --verbose, -v    1x print verbose output, 2x print parser tracing
                                                            [count] [default: 0]
  --help           Show help                                           [boolean]

Features

  • Diagram Types:
    • [x] Class
    • [x] Component
    • [x] Use Case
    • [ ] Sequence
    • [ ] Activity
    • [ ] State
    • [ ] Object
    • [ ] Deployment
    • [ ] Timing
  • Support for StdLibs:
    • [x] C4 (v2.4.0)
  • Formatters:
    • [x] JSON
    • [x] Graph
  • Testing, CI/CD:
    • [x] Fixtures for all formatters
    • [x] Code coverage
    • [x] Code formatting
    • [x] Code linting
    • [x] Error case testing
    • [ ] Dependency audit
  • Misc

Test

$ npm test

This will run:

  • unit tests
  • code coverage
  • eslint

Contribute :heart:

Every contribution counts. Please,

When contributing code, always also update the fixtures and run tests.

$ npm run fixtures
$ npm test
$ git commit

For more information see our contribution guidelines.

Related

  • PEG.js: Parser Generator for JavaScript
  • ts-pegjs: Plugin for pegjs to generate TypeScript parsers
  • PlantUML code generator: Provides a command line utility to generate code in various languages given a PlantUML class diagram.

License