1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# wmap-parser-js
A pure-javascript parser for `wmap` formatted Wardley Map files.
## Features
* No dependencies.
* Pure JavaScript, browser and runtime friendly.
* Free software.
* Reasonably fast.
## Installation
Install with your favorite package manager.
```bash
pnpm add wmap-parser
```
```bash
yarn add wmap-parser
```
```bash
npm install wmap-parser
```
## Usage
```javascript
import { parse } from "wmap-parser";
const wmapSource = `
[I] 0.25
[II] 0.5
[III] 0.75
[IV] 1.0
Tea (0.9, 0.5) [Circle]
Cup (0.8, 0.4)
Hot Water (0.6, 0.2)
Tea -> Cup
Cup -> Hot Water
[Note] (0.5, 0.5) Supply chain for tea
[Group] Tea, Cup
[Inertia] Cup
[Evolution] Tea + 0.1
`;
const map = parse(wmapSource);
console.log(map.components);
// [
// { label: 'Tea', coordinates: [0.9, 0.5], shape: 'circle' },
// { label: 'Cup', coordinates: [0.8, 0.4], shape: 'circle' },
// ...
// ]
console.log(map.dependencies);
// [
// { from: 'Tea', to: 'Cup', isDirected: true },
// ...
// ]
```
## API
### `parse(source: string): Map`
Parses a wmap formatted string and returns a Map object.
**Parameters:**
- `source` (string): The wmap source code to parse
**Returns:**
- `Promise<Map>`: A promise that resolves to a Map object
For mor comprehensive type definitions, check the JSDoc comments inside.
## Format Specification
See [The map website](https://map.tranquil.systems) for more information on the
format.
## Reasonably Fast
Benchmarked on an M1 Pro mac. A map with around 120 entities parses in 16µs.
While a larger map with slightly under 2000 entities does so in 447µs.
You can run the benchmarks by using:
```bash
make benchmark
```
## Development
This project uses a Makefile to run all commands. This is to keep the
commands uniform with the other wmap-parser projects.
### Running Tests
```bash
make test
```
Or to see coverage
```bash
make coverage
```
## See Also
- [wmap specification](doc/wmap-spec.ebnf) - Formal grammar
- [wmap-parser-rust](https://git.sr.ht:~rbdr/wmap-parser-rust) - Rust wmap-parser
- [wmap-parser-c](https://git.sr.ht:~rbdr/wmap-parser-c) - ANSI C wmap-parser
- [wmap-parser-swift](https://git.sr.ht:~rbdr/wmap-parser-swift) - Swift wmap-parser
- [Wardley Maps](https://wardleymaps.com/) - Learn about Wardley Mapping
|