├── .gitignore
├── LICENSE
├── README.md
├── bower.json
├── package-lock.json
├── package.json
├── packages.dhall
├── spago.dhall
├── src
└── Data
│ ├── DotLang.purs
│ └── DotLang
│ ├── Attr.purs
│ ├── Attr
│ ├── Edge.purs
│ ├── Global.purs
│ └── Node.purs
│ └── Class.purs
├── test.dhall
└── test
└── Main.purs
/.gitignore:
--------------------------------------------------------------------------------
1 | /bower_components/
2 | /node_modules/
3 | /.pulp-cache/
4 | /output/
5 | /generated-docs/
6 | /.psc-package/
7 | /.psc*
8 | /.purs*
9 | /.psa*
10 | /.spago
11 | /generated-doctests
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 csicar
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Dot-Lang
2 | ========
3 |
4 | documentation can be found on [pursuit](https://pursuit.purescript.org/packages/purescript-dotlang/1.1.0/docs/Data.DotLang#t:DotLang)
5 |
6 | define your model like this:
7 |
8 | ```purescript run
9 | > import Data.DotLang
10 | > import Data.DotLang.Attr (FillStyle(..))
11 | > import Data.DotLang.Attr.Node as Node
12 | > import Data.DotLang.Attr.Edge as Edge
13 | > import Color.Scheme.HTML (red)
14 | > exampleGraph = DiGraph [
15 | node "a" [ Node.Shape Node.Diamond, Node.Style Filled, Node.FillColor red ],
16 | node "b" [],
17 | "a" ==> "b",
18 | "a" =*> "d" $ [ Edge.FillColor red ],
19 | Subgraph [
20 | node "d" []
21 | ]
22 | ]
23 | > -- can be turned into a dotlang using `toText`
24 | > import Data.DotLang.Class (toText)
25 | > toText exampleGraph
26 | "digraph {a [shape=diamond, style=filled, fillcolor=\"#ff0000\"]; b []; a -> b; a -> d [fillcolor=\"#ff0000\"]; subgraph { d []; }}"
27 | ```
28 |
29 | ### Installation
30 |
31 | #### Spago
32 |
33 | ```dhall
34 | let additions =
35 | { dotlang =
36 | { dependencies =
37 | [ "colors"
38 | , "console"
39 | , "effect"
40 | , "generics-rep"
41 | , "prelude"
42 | , "psci-support"
43 | , "strings"
44 | , "test-unit"
45 | ]
46 | , repo = "https://github.com/csicar/purescript-dotlang.git"
47 | , version = "v2.0.0"
48 | }
49 | }
50 | ```
51 | ```bash
52 | spago install dotlang
53 | ```
54 |
55 | #### Bower
56 |
57 | ```bash
58 | bower i purescript-dotlang
59 | ```
60 |
61 |
62 |
63 | Changelog
64 | =========
65 |
66 | v3.0.0
67 | ------
68 |
69 | Breaking Changes:
70 |
71 | - `Label` of `Edge` and `Node` now support HTML and no formatting: To **migrate** replace old calls to `Label` with calls to `label`
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "purescript-dotlang",
3 | "license": [
4 | "MIT"
5 | ],
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/csicar/purescript-dotlang.git"
9 | },
10 | "ignore": [
11 | "**/.*",
12 | "node_modules",
13 | "bower_components",
14 | "output"
15 | ],
16 | "dependencies": {
17 | "purescript-arrays": "^v6.0.0",
18 | "purescript-colors": "^v6.0.0",
19 | "purescript-console": "^v5.0.0",
20 | "purescript-effect": "^v3.0.0",
21 | "purescript-maybe": "^v5.0.0",
22 | "purescript-prelude": "^v5.0.0",
23 | "purescript-psci-support": "^v5.0.0",
24 | "purescript-strings": "^v5.0.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "purescript-dotlang",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "JSONStream": {
8 | "version": "1.3.5",
9 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
10 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
11 | "requires": {
12 | "jsonparse": "^1.2.0",
13 | "through": ">=2.2.7 <3"
14 | }
15 | },
16 | "acorn": {
17 | "version": "6.1.1",
18 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
19 | "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA=="
20 | },
21 | "acorn-dynamic-import": {
22 | "version": "4.0.0",
23 | "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
24 | "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw=="
25 | },
26 | "acorn-node": {
27 | "version": "1.7.0",
28 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.7.0.tgz",
29 | "integrity": "sha512-XhahLSsCB6X6CJbe+uNu3Mn9sJBNFxtBN9NLgAOQovfS6Kh0lDUtmlclhjn9CvEK7A7YyRU13PXlNcpSiLI9Yw==",
30 | "requires": {
31 | "acorn": "^6.1.1",
32 | "acorn-dynamic-import": "^4.0.0",
33 | "acorn-walk": "^6.1.1",
34 | "xtend": "^4.0.1"
35 | }
36 | },
37 | "acorn-walk": {
38 | "version": "6.1.1",
39 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
40 | "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw=="
41 | },
42 | "ajv": {
43 | "version": "6.12.5",
44 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
45 | "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
46 | "requires": {
47 | "fast-deep-equal": "^3.1.1",
48 | "fast-json-stable-stringify": "^2.0.0",
49 | "json-schema-traverse": "^0.4.1",
50 | "uri-js": "^4.2.2"
51 | }
52 | },
53 | "array-filter": {
54 | "version": "0.0.1",
55 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
56 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
57 | },
58 | "array-map": {
59 | "version": "0.0.0",
60 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
61 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
62 | },
63 | "array-reduce": {
64 | "version": "0.0.0",
65 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
66 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
67 | },
68 | "asn1": {
69 | "version": "0.2.4",
70 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
71 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
72 | "requires": {
73 | "safer-buffer": "~2.1.0"
74 | }
75 | },
76 | "asn1.js": {
77 | "version": "4.10.1",
78 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
79 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
80 | "requires": {
81 | "bn.js": "^4.0.0",
82 | "inherits": "^2.0.1",
83 | "minimalistic-assert": "^1.0.0"
84 | }
85 | },
86 | "assert": {
87 | "version": "1.5.0",
88 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
89 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
90 | "requires": {
91 | "object-assign": "^4.1.1",
92 | "util": "0.10.3"
93 | },
94 | "dependencies": {
95 | "inherits": {
96 | "version": "2.0.1",
97 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
98 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
99 | },
100 | "util": {
101 | "version": "0.10.3",
102 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
103 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
104 | "requires": {
105 | "inherits": "2.0.1"
106 | }
107 | }
108 | }
109 | },
110 | "assert-plus": {
111 | "version": "1.0.0",
112 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
113 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
114 | },
115 | "async": {
116 | "version": "1.5.2",
117 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
118 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
119 | },
120 | "asynckit": {
121 | "version": "0.4.0",
122 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
123 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
124 | },
125 | "aws-sign2": {
126 | "version": "0.7.0",
127 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
128 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
129 | },
130 | "aws4": {
131 | "version": "1.10.1",
132 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
133 | "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA=="
134 | },
135 | "balanced-match": {
136 | "version": "1.0.0",
137 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
138 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
139 | },
140 | "base64-js": {
141 | "version": "1.3.0",
142 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
143 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
144 | },
145 | "bcrypt-pbkdf": {
146 | "version": "1.0.2",
147 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
148 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
149 | "requires": {
150 | "tweetnacl": "^0.14.3"
151 | }
152 | },
153 | "bn.js": {
154 | "version": "4.11.8",
155 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
156 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
157 | },
158 | "brace-expansion": {
159 | "version": "1.1.11",
160 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
161 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
162 | "requires": {
163 | "balanced-match": "^1.0.0",
164 | "concat-map": "0.0.1"
165 | }
166 | },
167 | "brorand": {
168 | "version": "1.1.0",
169 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
170 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
171 | },
172 | "browser-pack": {
173 | "version": "6.1.0",
174 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
175 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
176 | "requires": {
177 | "JSONStream": "^1.0.3",
178 | "combine-source-map": "~0.8.0",
179 | "defined": "^1.0.0",
180 | "safe-buffer": "^5.1.1",
181 | "through2": "^2.0.0",
182 | "umd": "^3.0.0"
183 | }
184 | },
185 | "browser-resolve": {
186 | "version": "1.11.3",
187 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
188 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
189 | "requires": {
190 | "resolve": "1.1.7"
191 | },
192 | "dependencies": {
193 | "resolve": {
194 | "version": "1.1.7",
195 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
196 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
197 | }
198 | }
199 | },
200 | "browserify": {
201 | "version": "16.2.3",
202 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz",
203 | "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==",
204 | "requires": {
205 | "JSONStream": "^1.0.3",
206 | "assert": "^1.4.0",
207 | "browser-pack": "^6.0.1",
208 | "browser-resolve": "^1.11.0",
209 | "browserify-zlib": "~0.2.0",
210 | "buffer": "^5.0.2",
211 | "cached-path-relative": "^1.0.0",
212 | "concat-stream": "^1.6.0",
213 | "console-browserify": "^1.1.0",
214 | "constants-browserify": "~1.0.0",
215 | "crypto-browserify": "^3.0.0",
216 | "defined": "^1.0.0",
217 | "deps-sort": "^2.0.0",
218 | "domain-browser": "^1.2.0",
219 | "duplexer2": "~0.1.2",
220 | "events": "^2.0.0",
221 | "glob": "^7.1.0",
222 | "has": "^1.0.0",
223 | "htmlescape": "^1.1.0",
224 | "https-browserify": "^1.0.0",
225 | "inherits": "~2.0.1",
226 | "insert-module-globals": "^7.0.0",
227 | "labeled-stream-splicer": "^2.0.0",
228 | "mkdirp": "^0.5.0",
229 | "module-deps": "^6.0.0",
230 | "os-browserify": "~0.3.0",
231 | "parents": "^1.0.1",
232 | "path-browserify": "~0.0.0",
233 | "process": "~0.11.0",
234 | "punycode": "^1.3.2",
235 | "querystring-es3": "~0.2.0",
236 | "read-only-stream": "^2.0.0",
237 | "readable-stream": "^2.0.2",
238 | "resolve": "^1.1.4",
239 | "shasum": "^1.0.0",
240 | "shell-quote": "^1.6.1",
241 | "stream-browserify": "^2.0.0",
242 | "stream-http": "^2.0.0",
243 | "string_decoder": "^1.1.1",
244 | "subarg": "^1.0.0",
245 | "syntax-error": "^1.1.1",
246 | "through2": "^2.0.0",
247 | "timers-browserify": "^1.0.1",
248 | "tty-browserify": "0.0.1",
249 | "url": "~0.11.0",
250 | "util": "~0.10.1",
251 | "vm-browserify": "^1.0.0",
252 | "xtend": "^4.0.0"
253 | },
254 | "dependencies": {
255 | "concat-stream": {
256 | "version": "1.6.2",
257 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
258 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
259 | "requires": {
260 | "buffer-from": "^1.0.0",
261 | "inherits": "^2.0.3",
262 | "readable-stream": "^2.2.2",
263 | "typedarray": "^0.0.6"
264 | }
265 | }
266 | }
267 | },
268 | "browserify-aes": {
269 | "version": "1.2.0",
270 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
271 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
272 | "requires": {
273 | "buffer-xor": "^1.0.3",
274 | "cipher-base": "^1.0.0",
275 | "create-hash": "^1.1.0",
276 | "evp_bytestokey": "^1.0.3",
277 | "inherits": "^2.0.1",
278 | "safe-buffer": "^5.0.1"
279 | }
280 | },
281 | "browserify-cache-api": {
282 | "version": "3.0.1",
283 | "resolved": "https://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.1.tgz",
284 | "integrity": "sha1-liR+hT8Gj9bg1FzHPwuyzZd47wI=",
285 | "requires": {
286 | "async": "^1.5.2",
287 | "through2": "^2.0.0",
288 | "xtend": "^4.0.0"
289 | }
290 | },
291 | "browserify-cipher": {
292 | "version": "1.0.1",
293 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
294 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
295 | "requires": {
296 | "browserify-aes": "^1.0.4",
297 | "browserify-des": "^1.0.0",
298 | "evp_bytestokey": "^1.0.0"
299 | }
300 | },
301 | "browserify-des": {
302 | "version": "1.0.2",
303 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
304 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
305 | "requires": {
306 | "cipher-base": "^1.0.1",
307 | "des.js": "^1.0.0",
308 | "inherits": "^2.0.1",
309 | "safe-buffer": "^5.1.2"
310 | }
311 | },
312 | "browserify-incremental": {
313 | "version": "3.1.1",
314 | "resolved": "https://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz",
315 | "integrity": "sha1-BxPLdYckemMqnwjPG9FpuHi2Koo=",
316 | "requires": {
317 | "JSONStream": "^0.10.0",
318 | "browserify-cache-api": "^3.0.0",
319 | "through2": "^2.0.0",
320 | "xtend": "^4.0.0"
321 | },
322 | "dependencies": {
323 | "JSONStream": {
324 | "version": "0.10.0",
325 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz",
326 | "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=",
327 | "requires": {
328 | "jsonparse": "0.0.5",
329 | "through": ">=2.2.7 <3"
330 | }
331 | },
332 | "jsonparse": {
333 | "version": "0.0.5",
334 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
335 | "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ="
336 | }
337 | }
338 | },
339 | "browserify-rsa": {
340 | "version": "4.0.1",
341 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
342 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
343 | "requires": {
344 | "bn.js": "^4.1.0",
345 | "randombytes": "^2.0.1"
346 | }
347 | },
348 | "browserify-sign": {
349 | "version": "4.0.4",
350 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
351 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
352 | "requires": {
353 | "bn.js": "^4.1.1",
354 | "browserify-rsa": "^4.0.0",
355 | "create-hash": "^1.1.0",
356 | "create-hmac": "^1.1.2",
357 | "elliptic": "^6.0.0",
358 | "inherits": "^2.0.1",
359 | "parse-asn1": "^5.0.0"
360 | }
361 | },
362 | "browserify-zlib": {
363 | "version": "0.2.0",
364 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
365 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
366 | "requires": {
367 | "pako": "~1.0.5"
368 | }
369 | },
370 | "buffer": {
371 | "version": "5.2.1",
372 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
373 | "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
374 | "requires": {
375 | "base64-js": "^1.0.2",
376 | "ieee754": "^1.1.4"
377 | }
378 | },
379 | "buffer-crc32": {
380 | "version": "0.2.13",
381 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
382 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
383 | },
384 | "buffer-from": {
385 | "version": "1.1.1",
386 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
387 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
388 | },
389 | "buffer-xor": {
390 | "version": "1.0.3",
391 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
392 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
393 | },
394 | "builtin-status-codes": {
395 | "version": "3.0.0",
396 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
397 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
398 | },
399 | "cached-path-relative": {
400 | "version": "1.0.2",
401 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz",
402 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg=="
403 | },
404 | "caseless": {
405 | "version": "0.12.0",
406 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
407 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
408 | },
409 | "chownr": {
410 | "version": "1.1.1",
411 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
412 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
413 | },
414 | "cipher-base": {
415 | "version": "1.0.4",
416 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
417 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
418 | "requires": {
419 | "inherits": "^2.0.1",
420 | "safe-buffer": "^5.0.1"
421 | }
422 | },
423 | "colors": {
424 | "version": "1.3.3",
425 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
426 | "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
427 | },
428 | "combine-source-map": {
429 | "version": "0.8.0",
430 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
431 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
432 | "requires": {
433 | "convert-source-map": "~1.1.0",
434 | "inline-source-map": "~0.6.0",
435 | "lodash.memoize": "~3.0.3",
436 | "source-map": "~0.5.3"
437 | }
438 | },
439 | "combined-stream": {
440 | "version": "1.0.8",
441 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
442 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
443 | "requires": {
444 | "delayed-stream": "~1.0.0"
445 | }
446 | },
447 | "concat-map": {
448 | "version": "0.0.1",
449 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
450 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
451 | },
452 | "concat-stream": {
453 | "version": "2.0.0",
454 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
455 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
456 | "requires": {
457 | "buffer-from": "^1.0.0",
458 | "inherits": "^2.0.3",
459 | "readable-stream": "^3.0.2",
460 | "typedarray": "^0.0.6"
461 | },
462 | "dependencies": {
463 | "readable-stream": {
464 | "version": "3.4.0",
465 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
466 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
467 | "requires": {
468 | "inherits": "^2.0.3",
469 | "string_decoder": "^1.1.1",
470 | "util-deprecate": "^1.0.1"
471 | }
472 | }
473 | }
474 | },
475 | "console-browserify": {
476 | "version": "1.1.0",
477 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
478 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
479 | "requires": {
480 | "date-now": "^0.1.4"
481 | }
482 | },
483 | "constants-browserify": {
484 | "version": "1.0.0",
485 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
486 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
487 | },
488 | "convert-source-map": {
489 | "version": "1.1.3",
490 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
491 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA="
492 | },
493 | "core-util-is": {
494 | "version": "1.0.2",
495 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
496 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
497 | },
498 | "create-ecdh": {
499 | "version": "4.0.3",
500 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
501 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
502 | "requires": {
503 | "bn.js": "^4.1.0",
504 | "elliptic": "^6.0.0"
505 | }
506 | },
507 | "create-hash": {
508 | "version": "1.2.0",
509 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
510 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
511 | "requires": {
512 | "cipher-base": "^1.0.1",
513 | "inherits": "^2.0.1",
514 | "md5.js": "^1.3.4",
515 | "ripemd160": "^2.0.1",
516 | "sha.js": "^2.4.0"
517 | }
518 | },
519 | "create-hmac": {
520 | "version": "1.1.7",
521 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
522 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
523 | "requires": {
524 | "cipher-base": "^1.0.3",
525 | "create-hash": "^1.1.0",
526 | "inherits": "^2.0.1",
527 | "ripemd160": "^2.0.0",
528 | "safe-buffer": "^5.0.1",
529 | "sha.js": "^2.4.8"
530 | }
531 | },
532 | "crypto-browserify": {
533 | "version": "3.12.0",
534 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
535 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
536 | "requires": {
537 | "browserify-cipher": "^1.0.0",
538 | "browserify-sign": "^4.0.0",
539 | "create-ecdh": "^4.0.0",
540 | "create-hash": "^1.1.0",
541 | "create-hmac": "^1.1.0",
542 | "diffie-hellman": "^5.0.0",
543 | "inherits": "^2.0.1",
544 | "pbkdf2": "^3.0.3",
545 | "public-encrypt": "^4.0.0",
546 | "randombytes": "^2.0.0",
547 | "randomfill": "^1.0.3"
548 | }
549 | },
550 | "dash-ast": {
551 | "version": "1.0.0",
552 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
553 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA=="
554 | },
555 | "dashdash": {
556 | "version": "1.14.1",
557 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
558 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
559 | "requires": {
560 | "assert-plus": "^1.0.0"
561 | }
562 | },
563 | "date-now": {
564 | "version": "0.1.4",
565 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
566 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
567 | },
568 | "debug": {
569 | "version": "3.2.6",
570 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
571 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
572 | "requires": {
573 | "ms": "^2.1.1"
574 | }
575 | },
576 | "defined": {
577 | "version": "1.0.0",
578 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
579 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
580 | },
581 | "delayed-stream": {
582 | "version": "1.0.0",
583 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
584 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
585 | },
586 | "deps-sort": {
587 | "version": "2.0.0",
588 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
589 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
590 | "requires": {
591 | "JSONStream": "^1.0.3",
592 | "shasum": "^1.0.0",
593 | "subarg": "^1.0.0",
594 | "through2": "^2.0.0"
595 | }
596 | },
597 | "des.js": {
598 | "version": "1.0.0",
599 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
600 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
601 | "requires": {
602 | "inherits": "^2.0.1",
603 | "minimalistic-assert": "^1.0.0"
604 | }
605 | },
606 | "detective": {
607 | "version": "5.2.0",
608 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
609 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
610 | "requires": {
611 | "acorn-node": "^1.6.1",
612 | "defined": "^1.0.0",
613 | "minimist": "^1.1.1"
614 | }
615 | },
616 | "diffie-hellman": {
617 | "version": "5.0.3",
618 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
619 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
620 | "requires": {
621 | "bn.js": "^4.1.0",
622 | "miller-rabin": "^4.0.0",
623 | "randombytes": "^2.0.0"
624 | }
625 | },
626 | "domain-browser": {
627 | "version": "1.2.0",
628 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
629 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
630 | },
631 | "duplexer2": {
632 | "version": "0.1.4",
633 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
634 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
635 | "requires": {
636 | "readable-stream": "^2.0.2"
637 | }
638 | },
639 | "ecc-jsbn": {
640 | "version": "0.1.2",
641 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
642 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
643 | "requires": {
644 | "jsbn": "~0.1.0",
645 | "safer-buffer": "^2.1.0"
646 | }
647 | },
648 | "elliptic": {
649 | "version": "6.4.1",
650 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
651 | "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
652 | "requires": {
653 | "bn.js": "^4.4.0",
654 | "brorand": "^1.0.1",
655 | "hash.js": "^1.0.0",
656 | "hmac-drbg": "^1.0.0",
657 | "inherits": "^2.0.1",
658 | "minimalistic-assert": "^1.0.0",
659 | "minimalistic-crypto-utils": "^1.0.0"
660 | }
661 | },
662 | "es6-promise": {
663 | "version": "3.3.1",
664 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
665 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM="
666 | },
667 | "events": {
668 | "version": "2.1.0",
669 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
670 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg=="
671 | },
672 | "evp_bytestokey": {
673 | "version": "1.0.3",
674 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
675 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
676 | "requires": {
677 | "md5.js": "^1.3.4",
678 | "safe-buffer": "^5.1.1"
679 | }
680 | },
681 | "extend": {
682 | "version": "3.0.2",
683 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
684 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
685 | },
686 | "extsprintf": {
687 | "version": "1.3.0",
688 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
689 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
690 | },
691 | "fast-deep-equal": {
692 | "version": "3.1.3",
693 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
694 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
695 | },
696 | "fast-json-stable-stringify": {
697 | "version": "2.1.0",
698 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
699 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
700 | },
701 | "follow-redirects": {
702 | "version": "1.7.0",
703 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
704 | "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
705 | "requires": {
706 | "debug": "^3.2.6"
707 | }
708 | },
709 | "forever-agent": {
710 | "version": "0.6.1",
711 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
712 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
713 | },
714 | "form-data": {
715 | "version": "2.3.3",
716 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
717 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
718 | "requires": {
719 | "asynckit": "^0.4.0",
720 | "combined-stream": "^1.0.6",
721 | "mime-types": "^2.1.12"
722 | }
723 | },
724 | "fs-minipass": {
725 | "version": "1.2.6",
726 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
727 | "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==",
728 | "requires": {
729 | "minipass": "^2.2.1"
730 | }
731 | },
732 | "fs.realpath": {
733 | "version": "1.0.0",
734 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
735 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
736 | },
737 | "function-bind": {
738 | "version": "1.1.1",
739 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
740 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
741 | },
742 | "gaze": {
743 | "version": "1.1.3",
744 | "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
745 | "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
746 | "requires": {
747 | "globule": "^1.0.0"
748 | }
749 | },
750 | "get-assigned-identifiers": {
751 | "version": "1.2.0",
752 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
753 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ=="
754 | },
755 | "getpass": {
756 | "version": "0.1.7",
757 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
758 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
759 | "requires": {
760 | "assert-plus": "^1.0.0"
761 | }
762 | },
763 | "glob": {
764 | "version": "7.1.4",
765 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
766 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
767 | "requires": {
768 | "fs.realpath": "^1.0.0",
769 | "inflight": "^1.0.4",
770 | "inherits": "2",
771 | "minimatch": "^3.0.4",
772 | "once": "^1.3.0",
773 | "path-is-absolute": "^1.0.0"
774 | }
775 | },
776 | "globule": {
777 | "version": "1.2.1",
778 | "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
779 | "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
780 | "requires": {
781 | "glob": "~7.1.1",
782 | "lodash": "~4.17.10",
783 | "minimatch": "~3.0.2"
784 | }
785 | },
786 | "graceful-fs": {
787 | "version": "4.1.15",
788 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
789 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
790 | },
791 | "har-schema": {
792 | "version": "2.0.0",
793 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
794 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
795 | },
796 | "har-validator": {
797 | "version": "5.1.5",
798 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
799 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
800 | "requires": {
801 | "ajv": "^6.12.3",
802 | "har-schema": "^2.0.0"
803 | }
804 | },
805 | "has": {
806 | "version": "1.0.3",
807 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
808 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
809 | "requires": {
810 | "function-bind": "^1.1.1"
811 | }
812 | },
813 | "hash-base": {
814 | "version": "3.0.4",
815 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
816 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
817 | "requires": {
818 | "inherits": "^2.0.1",
819 | "safe-buffer": "^5.0.1"
820 | }
821 | },
822 | "hash.js": {
823 | "version": "1.1.7",
824 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
825 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
826 | "requires": {
827 | "inherits": "^2.0.3",
828 | "minimalistic-assert": "^1.0.1"
829 | }
830 | },
831 | "hmac-drbg": {
832 | "version": "1.0.1",
833 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
834 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
835 | "requires": {
836 | "hash.js": "^1.0.3",
837 | "minimalistic-assert": "^1.0.0",
838 | "minimalistic-crypto-utils": "^1.0.1"
839 | }
840 | },
841 | "htmlescape": {
842 | "version": "1.1.1",
843 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
844 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E="
845 | },
846 | "http-signature": {
847 | "version": "1.2.0",
848 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
849 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
850 | "requires": {
851 | "assert-plus": "^1.0.0",
852 | "jsprim": "^1.2.2",
853 | "sshpk": "^1.7.0"
854 | }
855 | },
856 | "https-browserify": {
857 | "version": "1.0.0",
858 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
859 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
860 | },
861 | "ieee754": {
862 | "version": "1.1.13",
863 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
864 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
865 | },
866 | "inflight": {
867 | "version": "1.0.6",
868 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
869 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
870 | "requires": {
871 | "once": "^1.3.0",
872 | "wrappy": "1"
873 | }
874 | },
875 | "inherits": {
876 | "version": "2.0.3",
877 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
878 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
879 | },
880 | "inline-source-map": {
881 | "version": "0.6.2",
882 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
883 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
884 | "requires": {
885 | "source-map": "~0.5.3"
886 | }
887 | },
888 | "insert-module-globals": {
889 | "version": "7.2.0",
890 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
891 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
892 | "requires": {
893 | "JSONStream": "^1.0.3",
894 | "acorn-node": "^1.5.2",
895 | "combine-source-map": "^0.8.0",
896 | "concat-stream": "^1.6.1",
897 | "is-buffer": "^1.1.0",
898 | "path-is-absolute": "^1.0.1",
899 | "process": "~0.11.0",
900 | "through2": "^2.0.0",
901 | "undeclared-identifiers": "^1.1.2",
902 | "xtend": "^4.0.0"
903 | },
904 | "dependencies": {
905 | "concat-stream": {
906 | "version": "1.6.2",
907 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
908 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
909 | "requires": {
910 | "buffer-from": "^1.0.0",
911 | "inherits": "^2.0.3",
912 | "readable-stream": "^2.2.2",
913 | "typedarray": "^0.0.6"
914 | }
915 | }
916 | }
917 | },
918 | "interpret": {
919 | "version": "1.2.0",
920 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
921 | "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
922 | },
923 | "is-buffer": {
924 | "version": "1.1.6",
925 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
926 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
927 | },
928 | "is-typedarray": {
929 | "version": "1.0.0",
930 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
931 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
932 | },
933 | "isarray": {
934 | "version": "1.0.0",
935 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
936 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
937 | },
938 | "isexe": {
939 | "version": "2.0.0",
940 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
941 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
942 | },
943 | "isstream": {
944 | "version": "0.1.2",
945 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
946 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
947 | },
948 | "jsbn": {
949 | "version": "0.1.1",
950 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
951 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
952 | },
953 | "json-schema": {
954 | "version": "0.2.3",
955 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
956 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
957 | },
958 | "json-schema-traverse": {
959 | "version": "0.4.1",
960 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
961 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
962 | },
963 | "json-stable-stringify": {
964 | "version": "0.0.1",
965 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
966 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
967 | "requires": {
968 | "jsonify": "~0.0.0"
969 | }
970 | },
971 | "json-stringify-safe": {
972 | "version": "5.0.1",
973 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
974 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
975 | },
976 | "jsonify": {
977 | "version": "0.0.0",
978 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
979 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
980 | },
981 | "jsonparse": {
982 | "version": "1.3.1",
983 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
984 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
985 | },
986 | "jsprim": {
987 | "version": "1.4.1",
988 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
989 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
990 | "requires": {
991 | "assert-plus": "1.0.0",
992 | "extsprintf": "1.3.0",
993 | "json-schema": "0.2.3",
994 | "verror": "1.10.0"
995 | }
996 | },
997 | "labeled-stream-splicer": {
998 | "version": "2.0.2",
999 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
1000 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
1001 | "requires": {
1002 | "inherits": "^2.0.1",
1003 | "stream-splicer": "^2.0.0"
1004 | }
1005 | },
1006 | "lodash": {
1007 | "version": "4.17.11",
1008 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
1009 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
1010 | },
1011 | "lodash.memoize": {
1012 | "version": "3.0.4",
1013 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
1014 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
1015 | },
1016 | "md5.js": {
1017 | "version": "1.3.5",
1018 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
1019 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
1020 | "requires": {
1021 | "hash-base": "^3.0.0",
1022 | "inherits": "^2.0.1",
1023 | "safe-buffer": "^5.1.2"
1024 | }
1025 | },
1026 | "miller-rabin": {
1027 | "version": "4.0.1",
1028 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
1029 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
1030 | "requires": {
1031 | "bn.js": "^4.0.0",
1032 | "brorand": "^1.0.1"
1033 | }
1034 | },
1035 | "mime": {
1036 | "version": "1.6.0",
1037 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1038 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1039 | },
1040 | "mime-db": {
1041 | "version": "1.44.0",
1042 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
1043 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
1044 | },
1045 | "mime-types": {
1046 | "version": "2.1.27",
1047 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
1048 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
1049 | "requires": {
1050 | "mime-db": "1.44.0"
1051 | }
1052 | },
1053 | "minimalistic-assert": {
1054 | "version": "1.0.1",
1055 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
1056 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
1057 | },
1058 | "minimalistic-crypto-utils": {
1059 | "version": "1.0.1",
1060 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
1061 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
1062 | },
1063 | "minimatch": {
1064 | "version": "3.0.4",
1065 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1066 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1067 | "requires": {
1068 | "brace-expansion": "^1.1.7"
1069 | }
1070 | },
1071 | "minimist": {
1072 | "version": "1.2.0",
1073 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1074 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
1075 | },
1076 | "minipass": {
1077 | "version": "2.3.5",
1078 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
1079 | "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
1080 | "requires": {
1081 | "safe-buffer": "^5.1.2",
1082 | "yallist": "^3.0.0"
1083 | }
1084 | },
1085 | "minizlib": {
1086 | "version": "1.2.1",
1087 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
1088 | "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
1089 | "requires": {
1090 | "minipass": "^2.2.1"
1091 | }
1092 | },
1093 | "mkdirp": {
1094 | "version": "0.5.1",
1095 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1096 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1097 | "requires": {
1098 | "minimist": "0.0.8"
1099 | },
1100 | "dependencies": {
1101 | "minimist": {
1102 | "version": "0.0.8",
1103 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1104 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
1105 | }
1106 | }
1107 | },
1108 | "module-deps": {
1109 | "version": "6.2.1",
1110 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.1.tgz",
1111 | "integrity": "sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A==",
1112 | "requires": {
1113 | "JSONStream": "^1.0.3",
1114 | "browser-resolve": "^1.7.0",
1115 | "cached-path-relative": "^1.0.2",
1116 | "concat-stream": "~1.6.0",
1117 | "defined": "^1.0.0",
1118 | "detective": "^5.0.2",
1119 | "duplexer2": "^0.1.2",
1120 | "inherits": "^2.0.1",
1121 | "parents": "^1.0.0",
1122 | "readable-stream": "^2.0.2",
1123 | "resolve": "^1.4.0",
1124 | "stream-combiner2": "^1.1.1",
1125 | "subarg": "^1.0.0",
1126 | "through2": "^2.0.0",
1127 | "xtend": "^4.0.0"
1128 | },
1129 | "dependencies": {
1130 | "concat-stream": {
1131 | "version": "1.6.2",
1132 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
1133 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
1134 | "requires": {
1135 | "buffer-from": "^1.0.0",
1136 | "inherits": "^2.0.3",
1137 | "readable-stream": "^2.2.2",
1138 | "typedarray": "^0.0.6"
1139 | }
1140 | }
1141 | }
1142 | },
1143 | "mold-source-map": {
1144 | "version": "0.4.0",
1145 | "resolved": "https://registry.npmjs.org/mold-source-map/-/mold-source-map-0.4.0.tgz",
1146 | "integrity": "sha1-z2fgsxxHq5uttcnCVlGGISe7gxc=",
1147 | "requires": {
1148 | "convert-source-map": "^1.1.0",
1149 | "through": "~2.2.7"
1150 | },
1151 | "dependencies": {
1152 | "through": {
1153 | "version": "2.2.7",
1154 | "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz",
1155 | "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0="
1156 | }
1157 | }
1158 | },
1159 | "ms": {
1160 | "version": "2.1.2",
1161 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1162 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1163 | },
1164 | "mute-stream": {
1165 | "version": "0.0.8",
1166 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1167 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
1168 | },
1169 | "node-static": {
1170 | "version": "0.7.11",
1171 | "resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz",
1172 | "integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==",
1173 | "requires": {
1174 | "colors": ">=0.6.0",
1175 | "mime": "^1.2.9",
1176 | "optimist": ">=0.3.4"
1177 | }
1178 | },
1179 | "oauth-sign": {
1180 | "version": "0.9.0",
1181 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1182 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1183 | },
1184 | "object-assign": {
1185 | "version": "4.1.1",
1186 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1187 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
1188 | },
1189 | "once": {
1190 | "version": "1.4.0",
1191 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1192 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1193 | "requires": {
1194 | "wrappy": "1"
1195 | }
1196 | },
1197 | "optimist": {
1198 | "version": "0.6.1",
1199 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1200 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1201 | "requires": {
1202 | "minimist": "~0.0.1",
1203 | "wordwrap": "~0.0.2"
1204 | },
1205 | "dependencies": {
1206 | "minimist": {
1207 | "version": "0.0.10",
1208 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
1209 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
1210 | },
1211 | "wordwrap": {
1212 | "version": "0.0.3",
1213 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
1214 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
1215 | }
1216 | }
1217 | },
1218 | "os-browserify": {
1219 | "version": "0.3.0",
1220 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
1221 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
1222 | },
1223 | "pako": {
1224 | "version": "1.0.10",
1225 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
1226 | "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
1227 | },
1228 | "parents": {
1229 | "version": "1.0.1",
1230 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
1231 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
1232 | "requires": {
1233 | "path-platform": "~0.11.15"
1234 | }
1235 | },
1236 | "parse-asn1": {
1237 | "version": "5.1.4",
1238 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
1239 | "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
1240 | "requires": {
1241 | "asn1.js": "^4.0.0",
1242 | "browserify-aes": "^1.0.0",
1243 | "create-hash": "^1.1.0",
1244 | "evp_bytestokey": "^1.0.0",
1245 | "pbkdf2": "^3.0.3",
1246 | "safe-buffer": "^5.1.1"
1247 | }
1248 | },
1249 | "path-browserify": {
1250 | "version": "0.0.1",
1251 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
1252 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
1253 | },
1254 | "path-is-absolute": {
1255 | "version": "1.0.1",
1256 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1257 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
1258 | },
1259 | "path-parse": {
1260 | "version": "1.0.6",
1261 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1262 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
1263 | },
1264 | "path-platform": {
1265 | "version": "0.11.15",
1266 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
1267 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I="
1268 | },
1269 | "pbkdf2": {
1270 | "version": "3.0.17",
1271 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
1272 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
1273 | "requires": {
1274 | "create-hash": "^1.1.2",
1275 | "create-hmac": "^1.1.4",
1276 | "ripemd160": "^2.0.1",
1277 | "safe-buffer": "^5.0.1",
1278 | "sha.js": "^2.4.8"
1279 | }
1280 | },
1281 | "performance-now": {
1282 | "version": "2.1.0",
1283 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1284 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
1285 | },
1286 | "process": {
1287 | "version": "0.11.10",
1288 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
1289 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
1290 | },
1291 | "process-nextick-args": {
1292 | "version": "2.0.0",
1293 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
1294 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
1295 | },
1296 | "psc-package": {
1297 | "version": "3.0.1",
1298 | "resolved": "https://registry.npmjs.org/psc-package/-/psc-package-3.0.1.tgz",
1299 | "integrity": "sha512-lBA0vXzxeoftzbtpfgZqr2t0rzzecQ9uCXCQOLd74t+5Z72/HP/u7MRNtx8gyBDdLccY90xdjRfSXYwVrdDvgQ==",
1300 | "requires": {
1301 | "follow-redirects": "^1.5.9",
1302 | "shelljs": "^0.8.2",
1303 | "tar": "^4.4.8"
1304 | }
1305 | },
1306 | "psl": {
1307 | "version": "1.8.0",
1308 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1309 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
1310 | },
1311 | "public-encrypt": {
1312 | "version": "4.0.3",
1313 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
1314 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
1315 | "requires": {
1316 | "bn.js": "^4.1.0",
1317 | "browserify-rsa": "^4.0.0",
1318 | "create-hash": "^1.1.0",
1319 | "parse-asn1": "^5.0.0",
1320 | "randombytes": "^2.0.1",
1321 | "safe-buffer": "^5.1.2"
1322 | }
1323 | },
1324 | "pulp": {
1325 | "version": "13.0.0",
1326 | "resolved": "https://registry.npmjs.org/pulp/-/pulp-13.0.0.tgz",
1327 | "integrity": "sha512-wjjAVuN1Shx6783NvTd8aPwWZ1pE94+isiWtdAJhedvbLqJuwe8p5CSNul9FS0WvBz7ejdrW0vc6wLDLsKX7Yw==",
1328 | "requires": {
1329 | "browserify": "^16.2.3",
1330 | "browserify-incremental": "^3.1.1",
1331 | "concat-stream": "^2.0.0",
1332 | "gaze": "^1.1.3",
1333 | "glob": "^7.1.3",
1334 | "mold-source-map": "^0.4.0",
1335 | "node-static": "^0.7.11",
1336 | "read": "^1.0.7",
1337 | "sorcery": "^0.10.0",
1338 | "temp": "^0.9.0",
1339 | "through": "^2.3.8",
1340 | "tree-kill": "^1.2.1",
1341 | "which": "^1.3.1",
1342 | "wordwrap": "1.0.0"
1343 | }
1344 | },
1345 | "punycode": {
1346 | "version": "1.4.1",
1347 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1348 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
1349 | },
1350 | "purescript-doctest": {
1351 | "version": "0.1.5",
1352 | "resolved": "https://registry.npmjs.org/purescript-doctest/-/purescript-doctest-0.1.5.tgz",
1353 | "integrity": "sha512-zDuokC2Si83xg6Ubz+0ZBwHMdVbcxoj1zDmoDx8XhjH3l1NZetzntV4RuExltU5zUhHyl+5NXAyIlB2zUY4GDQ==",
1354 | "requires": {
1355 | "request": "^2.88.0",
1356 | "tar": "^4.4.8"
1357 | }
1358 | },
1359 | "purp": {
1360 | "version": "1.0.0",
1361 | "resolved": "https://registry.npmjs.org/purp/-/purp-1.0.0.tgz",
1362 | "integrity": "sha512-QKEvP17kuUp8BWw4ql4FH1oHC5RKRWwSKoDmas49hMH0+CrPmNaaqytsHNayKVHCC1o9zhTNlyQRSQuD1GOYJA=="
1363 | },
1364 | "purty": {
1365 | "version": "6.2.0",
1366 | "resolved": "https://registry.npmjs.org/purty/-/purty-6.2.0.tgz",
1367 | "integrity": "sha512-JfT8kJHSyxuOFQtRiH2x55SiPxXZsSdedQlZap8JehQ7KzB49B5C9cWwVybtSB36BdADQcxPvtw8D52z4EPnBw=="
1368 | },
1369 | "qs": {
1370 | "version": "6.5.2",
1371 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1372 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
1373 | },
1374 | "querystring": {
1375 | "version": "0.2.0",
1376 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
1377 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
1378 | },
1379 | "querystring-es3": {
1380 | "version": "0.2.1",
1381 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
1382 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
1383 | },
1384 | "randombytes": {
1385 | "version": "2.1.0",
1386 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1387 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1388 | "requires": {
1389 | "safe-buffer": "^5.1.0"
1390 | }
1391 | },
1392 | "randomfill": {
1393 | "version": "1.0.4",
1394 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
1395 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
1396 | "requires": {
1397 | "randombytes": "^2.0.5",
1398 | "safe-buffer": "^5.1.0"
1399 | }
1400 | },
1401 | "read": {
1402 | "version": "1.0.7",
1403 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
1404 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
1405 | "requires": {
1406 | "mute-stream": "~0.0.4"
1407 | }
1408 | },
1409 | "read-only-stream": {
1410 | "version": "2.0.0",
1411 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
1412 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
1413 | "requires": {
1414 | "readable-stream": "^2.0.2"
1415 | }
1416 | },
1417 | "readable-stream": {
1418 | "version": "2.3.6",
1419 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1420 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1421 | "requires": {
1422 | "core-util-is": "~1.0.0",
1423 | "inherits": "~2.0.3",
1424 | "isarray": "~1.0.0",
1425 | "process-nextick-args": "~2.0.0",
1426 | "safe-buffer": "~5.1.1",
1427 | "string_decoder": "~1.1.1",
1428 | "util-deprecate": "~1.0.1"
1429 | },
1430 | "dependencies": {
1431 | "string_decoder": {
1432 | "version": "1.1.1",
1433 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1434 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1435 | "requires": {
1436 | "safe-buffer": "~5.1.0"
1437 | }
1438 | }
1439 | }
1440 | },
1441 | "rechoir": {
1442 | "version": "0.6.2",
1443 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
1444 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
1445 | "requires": {
1446 | "resolve": "^1.1.6"
1447 | }
1448 | },
1449 | "request": {
1450 | "version": "2.88.2",
1451 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1452 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1453 | "requires": {
1454 | "aws-sign2": "~0.7.0",
1455 | "aws4": "^1.8.0",
1456 | "caseless": "~0.12.0",
1457 | "combined-stream": "~1.0.6",
1458 | "extend": "~3.0.2",
1459 | "forever-agent": "~0.6.1",
1460 | "form-data": "~2.3.2",
1461 | "har-validator": "~5.1.3",
1462 | "http-signature": "~1.2.0",
1463 | "is-typedarray": "~1.0.0",
1464 | "isstream": "~0.1.2",
1465 | "json-stringify-safe": "~5.0.1",
1466 | "mime-types": "~2.1.19",
1467 | "oauth-sign": "~0.9.0",
1468 | "performance-now": "^2.1.0",
1469 | "qs": "~6.5.2",
1470 | "safe-buffer": "^5.1.2",
1471 | "tough-cookie": "~2.5.0",
1472 | "tunnel-agent": "^0.6.0",
1473 | "uuid": "^3.3.2"
1474 | }
1475 | },
1476 | "resolve": {
1477 | "version": "1.11.0",
1478 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
1479 | "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
1480 | "requires": {
1481 | "path-parse": "^1.0.6"
1482 | }
1483 | },
1484 | "rimraf": {
1485 | "version": "2.6.3",
1486 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1487 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1488 | "requires": {
1489 | "glob": "^7.1.3"
1490 | }
1491 | },
1492 | "ripemd160": {
1493 | "version": "2.0.2",
1494 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
1495 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
1496 | "requires": {
1497 | "hash-base": "^3.0.0",
1498 | "inherits": "^2.0.1"
1499 | }
1500 | },
1501 | "safe-buffer": {
1502 | "version": "5.1.2",
1503 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1504 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1505 | },
1506 | "safer-buffer": {
1507 | "version": "2.1.2",
1508 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1509 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1510 | },
1511 | "sander": {
1512 | "version": "0.5.1",
1513 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
1514 | "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=",
1515 | "requires": {
1516 | "es6-promise": "^3.1.2",
1517 | "graceful-fs": "^4.1.3",
1518 | "mkdirp": "^0.5.1",
1519 | "rimraf": "^2.5.2"
1520 | }
1521 | },
1522 | "sha.js": {
1523 | "version": "2.4.11",
1524 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
1525 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
1526 | "requires": {
1527 | "inherits": "^2.0.1",
1528 | "safe-buffer": "^5.0.1"
1529 | }
1530 | },
1531 | "shasum": {
1532 | "version": "1.0.2",
1533 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
1534 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
1535 | "requires": {
1536 | "json-stable-stringify": "~0.0.0",
1537 | "sha.js": "~2.4.4"
1538 | }
1539 | },
1540 | "shell-quote": {
1541 | "version": "1.6.1",
1542 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
1543 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
1544 | "requires": {
1545 | "array-filter": "~0.0.0",
1546 | "array-map": "~0.0.0",
1547 | "array-reduce": "~0.0.0",
1548 | "jsonify": "~0.0.0"
1549 | }
1550 | },
1551 | "shelljs": {
1552 | "version": "0.8.3",
1553 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz",
1554 | "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==",
1555 | "requires": {
1556 | "glob": "^7.0.0",
1557 | "interpret": "^1.0.0",
1558 | "rechoir": "^0.6.2"
1559 | }
1560 | },
1561 | "simple-concat": {
1562 | "version": "1.0.0",
1563 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
1564 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
1565 | },
1566 | "sorcery": {
1567 | "version": "0.10.0",
1568 | "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz",
1569 | "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=",
1570 | "requires": {
1571 | "buffer-crc32": "^0.2.5",
1572 | "minimist": "^1.2.0",
1573 | "sander": "^0.5.0",
1574 | "sourcemap-codec": "^1.3.0"
1575 | }
1576 | },
1577 | "source-map": {
1578 | "version": "0.5.7",
1579 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1580 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1581 | },
1582 | "sourcemap-codec": {
1583 | "version": "1.4.4",
1584 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
1585 | "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg=="
1586 | },
1587 | "sshpk": {
1588 | "version": "1.16.1",
1589 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
1590 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
1591 | "requires": {
1592 | "asn1": "~0.2.3",
1593 | "assert-plus": "^1.0.0",
1594 | "bcrypt-pbkdf": "^1.0.0",
1595 | "dashdash": "^1.12.0",
1596 | "ecc-jsbn": "~0.1.1",
1597 | "getpass": "^0.1.1",
1598 | "jsbn": "~0.1.0",
1599 | "safer-buffer": "^2.0.2",
1600 | "tweetnacl": "~0.14.0"
1601 | }
1602 | },
1603 | "stream-browserify": {
1604 | "version": "2.0.2",
1605 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
1606 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
1607 | "requires": {
1608 | "inherits": "~2.0.1",
1609 | "readable-stream": "^2.0.2"
1610 | }
1611 | },
1612 | "stream-combiner2": {
1613 | "version": "1.1.1",
1614 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
1615 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
1616 | "requires": {
1617 | "duplexer2": "~0.1.0",
1618 | "readable-stream": "^2.0.2"
1619 | }
1620 | },
1621 | "stream-http": {
1622 | "version": "2.8.3",
1623 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
1624 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
1625 | "requires": {
1626 | "builtin-status-codes": "^3.0.0",
1627 | "inherits": "^2.0.1",
1628 | "readable-stream": "^2.3.6",
1629 | "to-arraybuffer": "^1.0.0",
1630 | "xtend": "^4.0.0"
1631 | }
1632 | },
1633 | "stream-splicer": {
1634 | "version": "2.0.1",
1635 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
1636 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
1637 | "requires": {
1638 | "inherits": "^2.0.1",
1639 | "readable-stream": "^2.0.2"
1640 | }
1641 | },
1642 | "string_decoder": {
1643 | "version": "1.2.0",
1644 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
1645 | "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
1646 | "requires": {
1647 | "safe-buffer": "~5.1.0"
1648 | }
1649 | },
1650 | "subarg": {
1651 | "version": "1.0.0",
1652 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
1653 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
1654 | "requires": {
1655 | "minimist": "^1.1.0"
1656 | }
1657 | },
1658 | "syntax-error": {
1659 | "version": "1.4.0",
1660 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
1661 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
1662 | "requires": {
1663 | "acorn-node": "^1.2.0"
1664 | }
1665 | },
1666 | "tar": {
1667 | "version": "4.4.10",
1668 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz",
1669 | "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==",
1670 | "requires": {
1671 | "chownr": "^1.1.1",
1672 | "fs-minipass": "^1.2.5",
1673 | "minipass": "^2.3.5",
1674 | "minizlib": "^1.2.1",
1675 | "mkdirp": "^0.5.0",
1676 | "safe-buffer": "^5.1.2",
1677 | "yallist": "^3.0.3"
1678 | }
1679 | },
1680 | "temp": {
1681 | "version": "0.9.0",
1682 | "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz",
1683 | "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==",
1684 | "requires": {
1685 | "rimraf": "~2.6.2"
1686 | }
1687 | },
1688 | "through": {
1689 | "version": "2.3.8",
1690 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1691 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
1692 | },
1693 | "through2": {
1694 | "version": "2.0.5",
1695 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
1696 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
1697 | "requires": {
1698 | "readable-stream": "~2.3.6",
1699 | "xtend": "~4.0.1"
1700 | }
1701 | },
1702 | "timers-browserify": {
1703 | "version": "1.4.2",
1704 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
1705 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
1706 | "requires": {
1707 | "process": "~0.11.0"
1708 | }
1709 | },
1710 | "to-arraybuffer": {
1711 | "version": "1.0.1",
1712 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
1713 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
1714 | },
1715 | "tough-cookie": {
1716 | "version": "2.5.0",
1717 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
1718 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
1719 | "requires": {
1720 | "psl": "^1.1.28",
1721 | "punycode": "^2.1.1"
1722 | },
1723 | "dependencies": {
1724 | "punycode": {
1725 | "version": "2.1.1",
1726 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1727 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1728 | }
1729 | }
1730 | },
1731 | "tree-kill": {
1732 | "version": "1.2.1",
1733 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
1734 | "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q=="
1735 | },
1736 | "tty-browserify": {
1737 | "version": "0.0.1",
1738 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
1739 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="
1740 | },
1741 | "tunnel-agent": {
1742 | "version": "0.6.0",
1743 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1744 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1745 | "requires": {
1746 | "safe-buffer": "^5.0.1"
1747 | }
1748 | },
1749 | "tweetnacl": {
1750 | "version": "0.14.5",
1751 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1752 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
1753 | },
1754 | "typedarray": {
1755 | "version": "0.0.6",
1756 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1757 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
1758 | },
1759 | "umd": {
1760 | "version": "3.0.3",
1761 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
1762 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow=="
1763 | },
1764 | "undeclared-identifiers": {
1765 | "version": "1.1.3",
1766 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
1767 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
1768 | "requires": {
1769 | "acorn-node": "^1.3.0",
1770 | "dash-ast": "^1.0.0",
1771 | "get-assigned-identifiers": "^1.2.0",
1772 | "simple-concat": "^1.0.0",
1773 | "xtend": "^4.0.1"
1774 | }
1775 | },
1776 | "uri-js": {
1777 | "version": "4.4.0",
1778 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
1779 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
1780 | "requires": {
1781 | "punycode": "^2.1.0"
1782 | },
1783 | "dependencies": {
1784 | "punycode": {
1785 | "version": "2.1.1",
1786 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1787 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1788 | }
1789 | }
1790 | },
1791 | "url": {
1792 | "version": "0.11.0",
1793 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
1794 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
1795 | "requires": {
1796 | "punycode": "1.3.2",
1797 | "querystring": "0.2.0"
1798 | },
1799 | "dependencies": {
1800 | "punycode": {
1801 | "version": "1.3.2",
1802 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
1803 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
1804 | }
1805 | }
1806 | },
1807 | "util": {
1808 | "version": "0.10.4",
1809 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
1810 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
1811 | "requires": {
1812 | "inherits": "2.0.3"
1813 | }
1814 | },
1815 | "util-deprecate": {
1816 | "version": "1.0.2",
1817 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1818 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1819 | },
1820 | "uuid": {
1821 | "version": "3.4.0",
1822 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
1823 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
1824 | },
1825 | "verror": {
1826 | "version": "1.10.0",
1827 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1828 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1829 | "requires": {
1830 | "assert-plus": "^1.0.0",
1831 | "core-util-is": "1.0.2",
1832 | "extsprintf": "^1.2.0"
1833 | }
1834 | },
1835 | "vm-browserify": {
1836 | "version": "1.1.0",
1837 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
1838 | "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw=="
1839 | },
1840 | "which": {
1841 | "version": "1.3.1",
1842 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1843 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1844 | "requires": {
1845 | "isexe": "^2.0.0"
1846 | }
1847 | },
1848 | "wordwrap": {
1849 | "version": "1.0.0",
1850 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1851 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
1852 | },
1853 | "wrappy": {
1854 | "version": "1.0.2",
1855 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1856 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1857 | },
1858 | "xtend": {
1859 | "version": "4.0.1",
1860 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
1861 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
1862 | },
1863 | "yallist": {
1864 | "version": "3.0.3",
1865 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
1866 | "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
1867 | }
1868 | }
1869 | }
1870 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "purescript-dotlang",
3 | "version": "1.0.0",
4 | "description": "Dot-Lang",
5 | "directories": {
6 | "test": "test"
7 | },
8 | "dependencies": {
9 | "psc-package": "^3.0.1",
10 | "pulp": "^13.0.0",
11 | "purescript-doctest": "^0.1.5",
12 | "purp": "^1.0.0",
13 | "purty": "^6.2.0"
14 | },
15 | "devDependencies": {},
16 | "scripts": {
17 | "test": "npm run doctest:gen && spago -x test.dhall test",
18 | "doctest:gen": "shopt -s globstar && purepur -o generated-doctests --src 'src/**/*.purs' --src './README.md' $(spago sources)"
19 | },
20 | "repository": {
21 | "type": "git",
22 | "url": "git+https://github.com/csicar/purescript-dotlang.git"
23 | },
24 | "author": "csicar",
25 | "license": "MIT",
26 | "bugs": {
27 | "url": "https://github.com/csicar/purescript-dotlang/issues"
28 | },
29 | "homepage": "https://github.com/csicar/purescript-dotlang#readme"
30 | }
--------------------------------------------------------------------------------
/packages.dhall:
--------------------------------------------------------------------------------
1 | let upstream =
2 | https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20221127/packages.dhall
3 | sha256:9619da55468363705b888350fdd38735a5e90dab101f8d9193057552c5efccad
4 |
5 | in upstream
--------------------------------------------------------------------------------
/spago.dhall:
--------------------------------------------------------------------------------
1 | { name = "dotlang"
2 | , license = "MIT"
3 | , repository = "https://github.com/csicar/purescript-dotlang.git"
4 | , dependencies =
5 | [ "arrays"
6 | , "colors"
7 | , "console"
8 | , "effect"
9 | , "maybe"
10 | , "prelude"
11 | , "psci-support"
12 | , "spec"
13 | , "strings"
14 | ]
15 | , packages = ./packages.dhall
16 | , sources = [ "src/**/*.purs" ]
17 | }
18 |
--------------------------------------------------------------------------------
/src/Data/DotLang.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang where
2 |
3 | import Data.Array (null)
4 | import Data.DotLang.Attr.Edge as Edge
5 | import Data.DotLang.Attr.Global as Global
6 | import Data.DotLang.Attr.Node as Node
7 | import Data.DotLang.Class (class DotLang, toText)
8 | import Data.Generic.Rep (class Generic)
9 | import Data.Maybe (Maybe(..))
10 | import Data.Show.Generic (genericShow)
11 | import Data.String (joinWith)
12 | import Prelude (class Show, ($), (<$>), (<>))
13 |
14 | -- | type alias for a Nodes Name
15 | type Id
16 | = String
17 |
18 | -- | Dot-Node
19 | --| ```purescript run
20 | --| > import Data.DotLang
21 | --| > import Data.DotLang.Class (toText)
22 | --| > import Data.DotLang.Attr.Node as Node
23 | --| > toText $ Node "e" [Node.Margin 3, Node.label "some label"]
24 | --| "e [margin=3, label=\"some label\"]"
25 | --| ```
26 | data Node
27 | = Node Id (Array Node.Attr)
28 |
29 | -- | get a nodes id
30 | --| ```purescript run
31 | --| > nodeId (Node "e" [Node.label "foo"])
32 | --| "e"
33 | --| ```
34 | nodeId :: Node -> Id
35 | nodeId (Node id _) = id
36 |
37 | -- | change Nodes id to a new one; keeing the old id as the label
38 | --| ```purescript run
39 | --| > changeNodeId (_ <> "!") (Node "e" [])
40 | --| (Node "e!" [(Label (TextLabel "e"))])
41 | --| ```
42 | changeNodeId :: (Id -> Id) -> Node -> Node
43 | changeNodeId f (Node id attr) = Node (f id) $ attr <> [ Node.label id ]
44 |
45 | derive instance genericNode :: Generic Node _
46 |
47 | instance showNode :: Show Node where
48 | show = genericShow
49 |
50 | instance nodeDotLang :: DotLang Node where
51 | toText (Node id attrs) = id <> " [" <> joinWith ", " (toText <$> attrs) <> "]"
52 |
53 | data EdgeType
54 | = Forward
55 | | Backward
56 | | NoDir
57 |
58 | derive instance genericEdgeType :: Generic EdgeType _
59 |
60 | instance showEdgeType :: Show EdgeType where
61 | show = genericShow
62 |
63 | instance dotLangEdgeType :: DotLang EdgeType where
64 | toText Forward = "->"
65 | toText Backward = "<-"
66 | toText NoDir = "--"
67 |
68 | -- | egde from id to id
69 | --| ```purescript run
70 | --| > toText $ Edge Forward "a" "b" []
71 | --| "a -> b"
72 | --| ```
73 | -- | EdgeType determines the direction of the arrow
74 | data Edge
75 | = Edge EdgeType Id Id (Array Edge.Attr)
76 |
77 | derive instance genericEdge :: Generic Edge _
78 |
79 | instance showEdge :: Show Edge where
80 | show = genericShow
81 |
82 | instance dotLangEdge :: DotLang Edge where
83 | toText (Edge e id id2 attrs) = id <> " " <> (toText e) <> " " <> id2 <> attrText
84 | where
85 | attrText = if null attrs then "" else " [" <> joinWith ", " (toText <$> attrs) <> "]"
86 |
87 | -- | definition in a graph
88 | data Definition
89 | = Global (Array Global.Attr)
90 | | NodeDef Node
91 | | EdgeDef Edge
92 | | Subgraph (Maybe Id) (Array Definition)
93 |
94 | -- |
95 | --| ```purescript run
96 | --| > import Data.DotLang.Attr.Global as Global
97 | --| > :t global [Global.RankDir Global.FromLeft]
98 | --| Definition
99 | --| ```
100 | -- |
101 | -- | global as a part of a definition
102 | global :: Array Global.Attr -> Definition
103 | global = Global
104 |
105 | -- |
106 | --| ```purescript run
107 | --| > :t node "a" []
108 | --| Definition
109 | --| ```
110 | -- | node as a part of a definition
111 | node :: Id → Array Node.Attr → Definition
112 | node id attrs = NodeDef $ Node id attrs
113 |
114 | -- |
115 | --| ```purescript run
116 | --| > :t edge Forward "a" "b" []
117 | --| Definition
118 | --| ```
119 | -- | edge as a part of a definition.
120 | -- | `==>` and `=*>` can also be used for that purpose:
121 | -- |
122 | edge :: EdgeType → Id → Id → Array Edge.Attr → Definition
123 | edge t id id2 attrs = EdgeDef $ Edge t id id2 attrs
124 |
125 | forwardEdgeWithAttrs ∷ Id → Id → Array Edge.Attr → Definition
126 | forwardEdgeWithAttrs = edge Forward
127 |
128 | forwardEdge :: Id → Id → Definition
129 | forwardEdge l r = forwardEdgeWithAttrs l r []
130 |
131 | backwardEdgeWithAttrs ∷ Id → Id → Array Edge.Attr → Definition
132 | backwardEdgeWithAttrs = edge Backward
133 |
134 | backwardEdge ∷ Id → Id → Definition
135 | backwardEdge l r = backwardEdgeWithAttrs l r []
136 |
137 | normalEdgeWithAttrs ∷ Id → Id → Array Edge.Attr → Definition
138 | normalEdgeWithAttrs = edge NoDir
139 |
140 | normalEdge ∷ Id → Id → Definition
141 | normalEdge l r = normalEdgeWithAttrs l r []
142 |
143 | -- |
144 | --| ```purescript run
145 | --| > :t "a" ==> "b"
146 | --| Definition
147 | --| ```
148 | -- | Forward edge as as a definition
149 | infix 5 forwardEdge as ==>
150 |
151 | -- |
152 | --| ```purescript run
153 | --| > import Data.DotLang.Attr.Edge as Edge
154 | --| > import Color.Scheme.HTML (red)
155 | --| > toText $ "a" =*> "b" $ [ Edge.FillColor red ]
156 | --| "a -> b [fillcolor=\"#ff0000\"]; "
157 | --| ```
158 | -- | Forward edge with attributes as a definition
159 | infix 5 forwardEdgeWithAttrs as =*>
160 |
161 | -- |
162 | --| ```purescript run
163 | --| > :t "a" <== "b"
164 | --| Definition
165 | --| ```
166 | -- | Backward edge as a definition
167 | infix 5 backwardEdge as <==
168 |
169 | -- |
170 | --| ```purescript run
171 | --| > :t "a" <*= "b" $ [ Edge.FillColor red ]
172 | --| Definition
173 | --| ```
174 | -- | Backward edge with attributes as a definition
175 | infix 5 backwardEdgeWithAttrs as <*=
176 |
177 | -- |
178 | --| ```purescript run
179 | --| > toText $ "a" -==- "b"
180 | --| "a -- b; "
181 | --| ```
182 | -- | Normal edge as definition
183 | infix 5 normalEdge as -==-
184 |
185 | -- |
186 | --| ```purescript run
187 | --| > toText $ "a" =*= "b" $ [ Edge.FillColor red ]
188 | --| "a -- b [fillcolor=\"#ff0000\"]; "
189 | --| ```
190 | -- | Normal edge with attibutes
191 | infix 5 normalEdgeWithAttrs as =*=
192 |
193 | instance definitionDotlang :: DotLang Definition where
194 | toText (Global attrs) = joinWith "; " (toText <$> attrs) <> "; "
195 | toText (NodeDef n) = toText n <> "; "
196 | toText (EdgeDef e) = toText e <> "; "
197 | toText (Subgraph maybeId defs) = "subgraph " <> toTextId maybeId <> "{ " <> (joinWith "" $ toText <$> defs) <> "}"
198 | where
199 | toTextId Nothing = ""
200 | toTextId (Just id) = "\"" <> id <> "\""
201 |
202 | -- | graph can either be a graph or digraph
203 | data Graph
204 | = Graph (Array Definition)
205 | | DiGraph (Array Definition)
206 |
207 | instance graphDotLang :: DotLang Graph where
208 | toText (Graph defs) = "graph {" <> (joinWith "" $ toText <$> defs) <> "}"
209 | toText (DiGraph defs) = "digraph {" <> (joinWith "" $ toText <$> defs) <> "}"
210 |
211 | -- | create graph from Nodes and Edges
212 | --| ```purescript run
213 | --| > :t graphFromElements [Node "e" [], Node "d" []] [ Edge Forward "e" "f" []]
214 | --| Graph
215 | --| ```
216 | -- |
217 | graphFromElements :: Array (Node) -> Array (Edge) -> Graph
218 | graphFromElements n e = DiGraph $ (NodeDef <$> n) <> (EdgeDef <$> e)
219 |
220 | -- | `a` is a type that can be represented by a Dot-Graph
221 | class GraphRepr a where
222 | toGraph :: a -> Graph
223 |
--------------------------------------------------------------------------------
/src/Data/DotLang/Attr.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang.Attr where
2 |
3 | import Prelude
4 |
5 | import Data.DotLang.Class (class DotLang)
6 | import Data.Generic.Rep (class Generic)
7 | import Data.Show.Generic (genericShow)
8 |
9 | data FillStyle
10 | = Filled
11 | | Dotted
12 | | Invis
13 |
14 | derive instance genericFillStyle :: Generic FillStyle _
15 |
16 | instance showFillStyle :: Show FillStyle where
17 | show = genericShow
18 |
19 | instance fillStyleDotLang :: DotLang FillStyle where
20 | toText Filled = "filled"
21 | toText Dotted = "dotted"
22 | toText Invis = "invis"
23 |
24 |
--------------------------------------------------------------------------------
/src/Data/DotLang/Attr/Edge.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang.Attr.Edge where
2 |
3 | import Prelude
4 | import Color (Color, toHexString)
5 | import Data.DotLang.Attr (FillStyle)
6 | import Data.DotLang.Class (class DotLang, toText)
7 | import Data.Generic.Rep (class Generic)
8 | import Data.Show.Generic (genericShow)
9 |
10 | data LabelValue
11 | = TextLabel String
12 | | HtmlLabel String
13 |
14 | derive instance genericLabel :: Generic LabelValue _
15 |
16 | instance showLabel :: Show LabelValue where
17 | show = genericShow
18 |
19 | data ArrowHeadStyle
20 | = Normal
21 | | Inv
22 | | Dot
23 | | InvDot
24 | | ODot
25 | | InvODot
26 | | None
27 | | Tee
28 | | Empty
29 | | InvEmpty
30 | | Diamond
31 | | ODiamond
32 | | EDiamond
33 | | Crow
34 | | Box
35 | | OBox
36 | | Open
37 | | HalfOpen
38 | | Vee
39 |
40 | derive instance genericArrowHeadStyle :: Generic ArrowHeadStyle _
41 |
42 | instance showArrowHeadStyle :: Show ArrowHeadStyle where
43 | show = genericShow
44 |
45 | instance arrowHeadStyle :: DotLang ArrowHeadStyle where
46 | toText Normal = "normal"
47 | toText Inv = "inv"
48 | toText Dot = "dot"
49 | toText InvDot = "invdot"
50 | toText ODot = "odot"
51 | toText InvODot = "invodot"
52 | toText None = "none"
53 | toText Tee = "tee"
54 | toText Empty = "empty"
55 | toText InvEmpty = "invempty"
56 | toText Diamond = "diamond"
57 | toText ODiamond = "odiamond"
58 | toText EDiamond = "ediamond"
59 | toText Crow = "crow"
60 | toText Box = "box"
61 | toText OBox = "obox"
62 | toText Open = "open"
63 | toText HalfOpen = "halfopen"
64 | toText Vee = "vee"
65 |
66 | data Attr
67 | = Color Color
68 | | FontColor Color
69 | | FontSize Int
70 | | Label LabelValue
71 | | Style FillStyle
72 | | FillColor Color
73 | | PenWidth Number
74 | | ArrowHead ArrowHeadStyle
75 |
76 | derive instance genericAttr :: Generic Attr _
77 |
78 | instance showAttr :: Show Attr where
79 | show = genericShow
80 |
81 | instance attrDotLang :: DotLang Attr where
82 | toText (Color s) = "color=\"" <> toHexString s <> "\""
83 | toText (FontColor s) = "fontcolor=\"" <> toHexString s <> "\""
84 | toText (FontSize i) = "fontsize=" <> show i
85 | toText (Style f) = "style=" <> toText f
86 | toText (Label (TextLabel t)) = "label=" <> show t
87 | toText (Label (HtmlLabel t)) = "label=" <> t
88 | toText (FillColor c) = "fillcolor=\"" <> toHexString c <> "\""
89 | toText (PenWidth i) = "penwidth=" <> show i
90 | toText (ArrowHead s) = "arrowhead=" <> toText s
91 |
92 | -- |
93 | --| ```purescript run
94 | --| > import Data.DotLang.Attr.Edge
95 | --| > :t htmlLabel "
"
96 | --| Attr
97 | --| ```
98 | -- | htmlLabel as a part of an attribute of an edge.
99 | htmlLabel :: String -> Attr
100 | htmlLabel = HtmlLabel >>> Label
101 |
102 | -- |
103 | --| ```purescript run
104 | --| > :t label "..."
105 | --| Attr
106 | --| ```
107 | -- | label as a part of an attribute of an edge.
108 | label :: String -> Attr
109 | label = TextLabel >>> Label
110 |
--------------------------------------------------------------------------------
/src/Data/DotLang/Attr/Global.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang.Attr.Global where
2 |
3 | import Prelude
4 |
5 | import Data.DotLang.Class (class DotLang, toText)
6 | import Data.Generic.Rep (class Generic)
7 | import Data.Show.Generic (genericShow)
8 |
9 | data RankDirValue
10 | = FromTop
11 | | FromLeft
12 | | FromBottom
13 | | FromRight
14 |
15 | derive instance genericRankDirVal :: Generic RankDirValue _
16 |
17 | instance showRankDirValue :: Show RankDirValue where
18 | show = genericShow
19 |
20 | instance rankDirValueDotLang :: DotLang RankDirValue where
21 | toText FromTop = "TB"
22 | toText FromLeft = "LR"
23 | toText FromBottom = "BT"
24 | toText FromRight = "RL"
25 |
26 | -- | Upper-case first character is major order;
27 | -- | lower-case second character is minor order.
28 | data PageDirValue = Bl | Br | Tl | Tr | Rb | Rt | Lb | Lt
29 |
30 | derive instance genericPageDirValue :: Generic PageDirValue _
31 |
32 | instance showPageDirValue :: Show PageDirValue where
33 | show = genericShow
34 |
35 | instance pageDirValueDotLang :: DotLang PageDirValue where
36 | toText Bl = "BL"
37 | toText Br = "BR"
38 | toText Tl = "TL"
39 | toText Tr = "TR"
40 | toText Rb = "RB"
41 | toText Rt = "RT"
42 | toText Lb = "LB"
43 | toText Lt = "LT"
44 |
45 | data LabelJustValue = L | R
46 |
47 | derive instance Generic LabelJustValue _
48 |
49 | instance Show LabelJustValue where
50 | show = genericShow
51 |
52 | instance DotLang LabelJustValue where
53 | toText L = "l"
54 | toText R = "r"
55 |
56 | data LabelLocValue = T | B
57 |
58 | derive instance Generic LabelLocValue _
59 |
60 | instance Show LabelLocValue where
61 | show = genericShow
62 |
63 | instance DotLang LabelLocValue where
64 | toText T = "t"
65 | toText B = "b"
66 |
67 | data StyleValue = Filled | Striped | Rounded
68 |
69 | derive instance Generic StyleValue _
70 |
71 | instance Show StyleValue where
72 | show = genericShow
73 |
74 | instance DotLang StyleValue where
75 | toText Filled = "filled"
76 | toText Striped = "striped"
77 | toText Rounded = "rounded"
78 |
79 | data Attr
80 | = RankDir RankDirValue
81 | | PageDir PageDirValue
82 | | Label String
83 | | LabelJust LabelJustValue
84 | | LabelLoc LabelLocValue
85 | | Compound Boolean
86 | | Style StyleValue
87 |
88 | derive instance genericAttr :: Generic Attr _
89 |
90 | instance showAttr :: Show Attr where
91 | show = genericShow
92 |
93 | instance attrDotLang :: DotLang Attr where
94 | toText (RankDir dir) = "rankdir=" <> toText dir
95 | toText (PageDir dir) = "pagedir=" <> toText dir
96 | toText (Label val) = "label=" <> show val
97 | toText (LabelJust val) = "labeljust=" <> toText val
98 | toText (LabelLoc val) = "labelloc=" <> toText val
99 | toText (Compound val) = "compound=" <> show val
100 | toText (Style val) = "style=" <> toText val
101 |
--------------------------------------------------------------------------------
/src/Data/DotLang/Attr/Node.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang.Attr.Node where
2 |
3 | import Prelude
4 |
5 | import Color (Color, toHexString)
6 | import Data.DotLang.Class (class DotLang, toText)
7 | import Data.Generic.Rep (class Generic)
8 | import Data.Maybe (Maybe(..), maybe)
9 | import Data.Show.Generic (genericShow)
10 | import Data.String (joinWith)
11 |
12 | data Style
13 | = Dashed
14 | | Dotted
15 | | Solid
16 | | Invis
17 | | Bold
18 | | Filled
19 | | Striped
20 | | Wedged
21 | | Diagonals
22 | | Rounded
23 |
24 | derive instance Generic Style _
25 |
26 | instance Show Style where
27 | show = genericShow
28 |
29 | instance DotLang Style where
30 | toText Dashed = "dashed"
31 | toText Dotted = "dotted"
32 | toText Solid = "solid"
33 | toText Invis = "invis"
34 | toText Bold = "bold"
35 | toText Filled = "filled"
36 | toText Striped = "striped"
37 | toText Wedged = "wedged"
38 | toText Diagonals = "diagonals"
39 | toText Rounded = "rounded"
40 |
41 | data LabelValue
42 | = TextLabel String
43 | | HtmlLabel String
44 | | RecordLabel RecordLabelValue
45 |
46 | derive instance genericLabel :: Generic LabelValue _
47 |
48 | instance showLabel :: Show LabelValue where
49 | show l = genericShow l
50 |
51 | renderLabel :: LabelValue -> String
52 | renderLabel = case _ of
53 | TextLabel t -> show t
54 | HtmlLabel t -> t
55 | RecordLabel recordValue -> show $ renderRecordLabelValue recordValue
56 |
57 |
58 | data RecordLabelValue
59 | = SubRecord (Array {fieldId:: Maybe String, value:: RecordLabelValue})
60 | | Base String
61 |
62 | derive instance genericRecordLabelValue :: Generic RecordLabelValue _
63 |
64 | instance showRecordLabelValue :: Show RecordLabelValue where
65 | show l = genericShow l
66 |
67 | renderRecordLabelValue :: RecordLabelValue -> String
68 | renderRecordLabelValue = case _ of
69 | SubRecord parts -> joinWith " | " $ map renderPart parts
70 | where
71 | renderPart {fieldId, value} = brace "{" "}" $ (maybe "" (brace "<" ">") fieldId) <> renderRecordLabelValue value
72 | brace left right str = left <> str <> right
73 | Base str -> str
74 |
75 | data Attr
76 | = Color Color
77 | | Margin Int
78 | | FontColor Color
79 | | FontSize Int
80 | | Width Int
81 | | Label LabelValue
82 | | Shape ShapeType
83 | | Style Style
84 | | FillColor Color
85 | | PenWidth Number
86 |
87 | derive instance genericAttr :: Generic Attr _
88 |
89 | instance showAttr :: Show Attr where
90 | show = genericShow
91 |
92 | instance attrDotLang :: DotLang Attr where
93 | toText (Margin i) = "margin=" <> show i
94 | toText (Color s) = "color=\"" <> toHexString s <> "\""
95 | toText (FontColor s) = "fontcolor=\"" <> toHexString s <> "\""
96 | toText (FontSize i) = "fontsize=" <> show i
97 | toText (Width i) = "width=" <> show i
98 | toText (Shape t) = "shape=" <> toText t
99 | toText (Style f) = "style=" <> toText f
100 | toText (Label l) = "label=" <> renderLabel l
101 | toText (FillColor c) = "fillcolor=\"" <> toHexString c <> "\""
102 | toText (PenWidth i) = "penwidth=" <> show i
103 |
104 | -- | possible node shapes
105 | data ShapeType
106 | = Box
107 | | Polygon
108 | | Ellipse
109 | | Oval
110 | | Circle
111 | | Point
112 | | Egg
113 | | Triangle
114 | | Plaintext
115 | | Plain
116 | | Diamond
117 | | Trapezium
118 | | Parallelogram
119 | | House
120 | | Pentagon
121 | | Hexagon
122 | | Septagon
123 | | Octagon
124 | | Doublecircle
125 | | Doubleoctagon
126 | | Tripleoctagon
127 | | Invtriangle
128 | | Invtrapezium
129 | | Invhouse
130 | | Mdiamond
131 | | Msquare
132 | | Mcircle
133 | | Rect
134 | | Rectangle
135 | | Square
136 | | Star
137 | | None
138 | | Underline
139 | | Cylinder
140 | | Note
141 | | Tab
142 | | Folder
143 | | Box3d
144 | | Component
145 | | Promoter
146 | | Cds
147 | | Terminator
148 | | Utr
149 | | Primersite
150 | | Restrictionsite
151 | | Fivepoverhang
152 | | Threepoverhang
153 | | Noverhang
154 | | Assembly
155 | | Signature
156 | | Insulator
157 | | Ribosite
158 | | Rnastab
159 | | Proteasesite
160 | | Proteinstab
161 | | Rpromoter
162 | | Rarrow
163 | | Larrow
164 | | Lpromoter
165 | | Record
166 |
167 | derive instance genericShapeType :: Generic ShapeType _
168 |
169 | instance showShapeType :: Show ShapeType where
170 | show = genericShow
171 |
172 | instance dotLangShape :: DotLang ShapeType where
173 | toText Box = "box"
174 | toText Polygon = "polygon"
175 | toText Ellipse = "ellipse"
176 | toText Oval = "oval"
177 | toText Circle = "circle"
178 | toText Point = "point"
179 | toText Egg = "egg"
180 | toText Triangle = "triangle"
181 | toText Plaintext = "plaintext"
182 | toText Plain = "plain"
183 | toText Diamond = "diamond"
184 | toText Trapezium = "trapezium"
185 | toText Parallelogram = "parallelogram"
186 | toText House = "house"
187 | toText Pentagon = "pentagon"
188 | toText Hexagon = "hexagon"
189 | toText Septagon = "septagon"
190 | toText Octagon = "octagon"
191 | toText Doublecircle = "doublecircle"
192 | toText Doubleoctagon = "doubleoctagon"
193 | toText Tripleoctagon = "tripleoctagon"
194 | toText Invtriangle = "invtriangle"
195 | toText Invtrapezium = "invtrapezium"
196 | toText Invhouse = "invhouse"
197 | toText Mdiamond = "mdiamond"
198 | toText Msquare = "msquare"
199 | toText Mcircle = "mcircle"
200 | toText Rect = "rect"
201 | toText Rectangle = "rectangle"
202 | toText Square = "square"
203 | toText Star = "star"
204 | toText None = "none"
205 | toText Underline = "underline"
206 | toText Cylinder = "cylinder"
207 | toText Note = "note"
208 | toText Tab = "tab"
209 | toText Folder = "folder"
210 | toText Box3d = "box3d"
211 | toText Component = "component"
212 | toText Promoter = "promoter"
213 | toText Cds = "cds"
214 | toText Terminator = "terminator"
215 | toText Utr = "utr"
216 | toText Primersite = "primersite"
217 | toText Restrictionsite = "restrictionsite"
218 | toText Fivepoverhang = "fivepoverhang"
219 | toText Threepoverhang = "threepoverhang"
220 | toText Noverhang = "noverhang"
221 | toText Assembly = "assembly"
222 | toText Signature = "signature"
223 | toText Insulator = "insulator"
224 | toText Ribosite = "ribosite"
225 | toText Rnastab = "rnastab"
226 | toText Proteasesite = "proteasesite"
227 | toText Proteinstab = "proteinstab"
228 | toText Rpromoter = "rpromoter"
229 | toText Rarrow = "Rarrow"
230 | toText Larrow = "Larrow"
231 | toText Lpromoter = "Lpromoter"
232 | toText Record = "record"
233 |
234 | -- |
235 | --| ```purescript run
236 | --| > import Data.DotLang.Attr.Node
237 | --| > :t htmlLabel ""
238 | --| Attr
239 | --| ```
240 | -- | htmlLabel as a part of an attribute of a node.
241 | htmlLabel :: String -> Attr
242 | htmlLabel = HtmlLabel >>> Label
243 |
244 | -- |
245 | --| ```purescript run
246 | --| > import Data.DotLang.Attr.Node
247 | --| > :t label "..."
248 | --| Attr
249 | --| ```
250 | -- | label as a part of an attribute of a node.
251 | label :: String -> Attr
252 | label = TextLabel >>> Label
253 |
254 | --| ```purescript run
255 | --| > import Data.DotLang
256 | --| > import Data.DotLang.Class (toText)
257 | --| > toText $ node "a" [recordLabel [subId "test" $ subLabel "c", subLabel "d", subRecord [ subLabel "k", subLabel "l"]]]
258 | --| "a [label=\"{c} | {d} | {{k} | {l}}\"]; "
259 | --| ```
260 | -- |
261 | recordLabel :: Array {fieldId:: Maybe String, value:: RecordLabelValue} -> Attr
262 | recordLabel = SubRecord >>> RecordLabel >>> Label
263 |
264 | subRecord :: Array {fieldId:: Maybe String, value:: RecordLabelValue} -> {fieldId:: Maybe String, value:: RecordLabelValue}
265 | subRecord v = {fieldId: Nothing, value: SubRecord v }
266 |
267 | subLabel :: String -> {fieldId :: Maybe String, value :: RecordLabelValue}
268 | subLabel value = {fieldId : Nothing, value: Base value }
269 |
270 | subId :: String -> {fieldId :: Maybe String, value :: RecordLabelValue} ->{fieldId :: Maybe String, value :: RecordLabelValue}
271 | subId str {value} = {fieldId: Just str, value: value}
--------------------------------------------------------------------------------
/src/Data/DotLang/Class.purs:
--------------------------------------------------------------------------------
1 | module Data.DotLang.Class where
2 |
3 | -- | `a` is a type that has a representation in the dot language
4 | class DotLang a where
5 | toText :: a -> String
6 |
--------------------------------------------------------------------------------
/test.dhall:
--------------------------------------------------------------------------------
1 | let conf = ./spago.dhall
2 |
3 | in conf // {
4 | sources = conf.sources # [ "test/**/*.purs", "generated-doctests/**/*.purs" ],
5 | dependencies = conf.dependencies # [ "spec" ]
6 | }
--------------------------------------------------------------------------------
/test/Main.purs:
--------------------------------------------------------------------------------
1 | module Test.Main where
2 |
3 | import Prelude
4 |
5 | import Color.Scheme.MaterialDesign (red)
6 | import Data.DotLang (Definition(..), Graph(..), Edge(..), EdgeType(..), global, node, (==>), (=*>))
7 | import Data.DotLang.Attr (FillStyle(..))
8 | import Data.DotLang.Attr.Edge as Edge
9 | import Data.DotLang.Attr.Global (RankDirValue(..))
10 | import Data.DotLang.Attr.Global as Global
11 | import Data.DotLang.Attr.Node (Attr(..), LabelValue(..), RecordLabelValue(..), ShapeType(..), label, recordLabel, subId, subLabel, subRecord)
12 | import Data.DotLang.Attr.Node as Node
13 | import Data.DotLang.Class (toText)
14 | import Data.Maybe (Maybe(..))
15 | import DocTest as DocTest
16 | import Effect (Effect)
17 | import Effect.Aff (launchAff_)
18 | import Test.Spec (pending, describe, it)
19 | import Test.Spec.Assertions (shouldEqual)
20 | import Test.Spec.Reporter.Console (consoleReporter)
21 | import Test.Spec.Runner (run, runSpec)
22 |
23 | main ∷ Effect Unit
24 | main =
25 | launchAff_
26 | $ do
27 | runSpec [ consoleReporter ] do
28 | DocTest.main
29 | describe "DotLang" do
30 | it "basic test" do
31 | let
32 | g =
33 | DiGraph
34 | [ global [ Global.RankDir FromLeft ]
35 | , node "a" [ Shape Diamond, Style Filled, Node.FillColor red ]
36 | , node "b" []
37 | , "a" ==> "b"
38 | , "a" =*> "d" $ [ Edge.FillColor red ]
39 | , Subgraph
40 | [ node "d" []
41 | ]
42 | ]
43 | toText g `shouldEqual` "digraph {rankdir=LR; a [shape=diamond, style=filled, fillcolor=\"#f44336\"]; b []; a -> b; a -> d [fillcolor=\"#f44336\"]; subgraph { d []; }}"
44 | it "examples from documentation" do
45 | toText (Edge Forward "a" "b" []) `shouldEqual` "a -> b"
46 | toText ("a" =*> "b" $ [ Edge.FillColor red ]) `shouldEqual` "a -> b [fillcolor=\"#f44336\"]; "
47 | it "ArrowHead"
48 | $ do
49 | (toText $ "a" =*> "b" $ [ Edge.ArrowHead Edge.None ]) `shouldEqual` "a -> b [arrowhead=none]; "
50 | it "record label" $ do
51 | toText (node "a" [recordLabel [subId "test" $ subLabel "c", subLabel "d", subRecord [ subLabel "k", subLabel "l"]]] )
52 | `shouldEqual` """a [label="{c} | {d} | {{k} | {l}}"]; """
--------------------------------------------------------------------------------