├── .gitignore
├── CHANGELOG.md
├── README.md
├── index.js
├── lerna.json
├── package-lock.json
├── package.json
└── packages
├── cli
├── CHANGELOG.md
├── Dockerfile
├── README.md
├── bin
│ └── json-schema-documentation-cli
├── package-lock.json
├── package.json
└── src
│ └── cli.js
├── generator
├── .gitignore
├── CHANGELOG.md
├── README.md
├── __snapshots__
│ ├── flatten.test.js.snap
│ └── generator.test.js.snap
├── demo
│ └── theme-default
│ │ ├── Person.md
│ │ ├── README.md
│ │ └── generator-option.json.md
├── documentation
│ ├── README.md
│ └── generator-option.md
├── errors.js
├── fixtures
│ ├── defs.json
│ ├── sample-without-id.json
│ ├── sample.json
│ └── test.json
├── flatten.js
├── flatten.test.js
├── generator.js
├── generator.test.js
├── package-lock.json
├── package.json
├── package.test.js
└── schemas
│ └── generator-option.json
├── sample-generator
├── CHANGELOG.md
├── README.md
├── __snapshots__
│ └── sample-generator.test.js.snap
├── package-lock.json
├── package.json
├── package.test.js
├── sample-generator.js
└── sample-generator.test.js
└── theme-default
├── CHANGELOG.md
├── README.md
├── documentation-generator.js
├── documentation
├── README.md
└── theme-option.md
├── errors.js
├── package-lock.json
├── package.json
├── package.test.js
├── readme-generator.js
├── schemas
└── theme-option.json
├── theme.js
├── theme.test.js
└── writer.js
/.gitignore:
--------------------------------------------------------------------------------
1 | lerna-debug.log
2 | node_modules/
3 | .idea/
4 | package-lock.json
5 | .Store_DS/
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5 |
6 |
7 | ## [1.4.2](https://github.com/fgribreau/json-schema-documentation/compare/v1.4.1...v1.4.2) (2018-09-21)
8 |
9 |
10 |
11 |
12 | **Note:** Version bump only for package json-schema-documentation
13 |
14 |
15 | ## [1.4.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.3.0...v1.4.1) (2018-09-21)
16 |
17 |
18 |
19 |
20 | **Note:** Version bump only for package json-schema-documentation
21 |
22 |
23 | # [1.3.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.1...v1.3.0) (2018-01-03)
24 |
25 |
26 | ### Features
27 |
28 | * **json-schema-documentation-generator:** flatten schema ([2d91eac](https://github.com/fgribreau/json-schema-documentation/commit/2d91eac))
29 | * **json-schema-documentation-theme-default:** added support for pattern, examples, minLength, maxLength, minItems, maxItems, enum ([913bbcc](https://github.com/fgribreau/json-schema-documentation/commit/913bbcc))
30 |
31 |
32 |
33 |
34 |
35 | ## [1.2.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.0...v1.2.1) (2018-01-02)
36 |
37 |
38 |
39 |
40 | **Note:** Version bump only for package json-schema-documentation
41 |
42 |
43 | # [1.2.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.1.0...v1.2.0) (2018-01-02)
44 |
45 |
46 | ### Features
47 |
48 | * **cli:** support for `filter-regexp` and `mapFilename` ([51009be](https://github.com/fgribreau/json-schema-documentation/commit/51009be))
49 |
50 |
51 |
52 |
53 |
54 | # [1.1.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.4...v1.1.0) (2018-01-02)
55 |
56 |
57 | ### Features
58 |
59 | * **cli:** v1.0 ([26c3b87](https://github.com/fgribreau/json-schema-documentation/commit/26c3b87))
60 | * **generator:** v1.0 ([89bdd75](https://github.com/fgribreau/json-schema-documentation/commit/89bdd75))
61 | * **sample-generator:** v1.0 ([7139bd0](https://github.com/fgribreau/json-schema-documentation/commit/7139bd0))
62 | * **theme-default:** v1.0 ([7c21eaa](https://github.com/fgribreau/json-schema-documentation/commit/7c21eaa))
63 |
64 |
65 |
66 |
67 |
68 | ## [0.5.4](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.3...v0.5.4) (2018-01-02)
69 |
70 |
71 | ### Bug Fixes
72 |
73 | * **cli:** use CWD when resolving the path ([95aa600](https://github.com/fgribreau/json-schema-documentation/commit/95aa600))
74 |
75 |
76 |
77 |
78 |
79 | ## [0.5.3](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.2...v0.5.3) (2018-01-02)
80 |
81 |
82 | ### Bug Fixes
83 |
84 | * **cli:** lighter package ([629a8c0](https://github.com/fgribreau/json-schema-documentation/commit/629a8c0))
85 |
86 |
87 |
88 |
89 |
90 | ## [0.5.2](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.1...v0.5.2) (2018-01-02)
91 |
92 |
93 | ### Bug Fixes
94 |
95 | * **cli:** fix wrong path ([bb94432](https://github.com/fgribreau/json-schema-documentation/commit/bb94432))
96 |
97 |
98 |
99 |
100 |
101 | ## [0.5.1](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.0...v0.5.1) (2018-01-02)
102 |
103 |
104 | ### Bug Fixes
105 |
106 | * **cli:** fix wrong path ([937a578](https://github.com/fgribreau/json-schema-documentation/commit/937a578))
107 |
108 |
109 |
110 |
111 |
112 | # [0.5.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.4.0...v0.5.0) (2018-01-02)
113 |
114 |
115 | ### Bug Fixes
116 |
117 | * **generator:** improved package.json ([dda055e](https://github.com/fgribreau/json-schema-documentation/commit/dda055e))
118 | * **sample-generator:** improved package.json ([d86b040](https://github.com/fgribreau/json-schema-documentation/commit/d86b040))
119 | * **theme-default:** improved package.json ([9af07f4](https://github.com/fgribreau/json-schema-documentation/commit/9af07f4))
120 |
121 |
122 | ### Features
123 |
124 | * **cli:** added CLI ([77f68ab](https://github.com/fgribreau/json-schema-documentation/commit/77f68ab))
125 |
126 |
127 |
128 |
129 |
130 | # [0.4.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.3.0...v0.4.0) (2017-12-31)
131 |
132 |
133 | ### Bug Fixes
134 |
135 | * **test:** fix snapshot ([aa1a084](https://github.com/FGRibreau/json-schema-documentation/commit/aa1a084))
136 | * **theme:** do not print root schema ([10bf3a8](https://github.com/FGRibreau/json-schema-documentation/commit/10bf3a8))
137 | * **theme:** fix readme ([9002a85](https://github.com/FGRibreau/json-schema-documentation/commit/9002a85))
138 |
139 |
140 | ### Features
141 |
142 | * **theme:** add a `mapFilename` option ([d37395b](https://github.com/FGRibreau/json-schema-documentation/commit/d37395b))
143 | * **theme:** added description ([d9cc55b](https://github.com/FGRibreau/json-schema-documentation/commit/d9cc55b))
144 | * **theme:** humanize jsonPtr ([51f8d67](https://github.com/FGRibreau/json-schema-documentation/commit/51f8d67))
145 | * **theme:** smallest rendering ([6355ce9](https://github.com/FGRibreau/json-schema-documentation/commit/6355ce9))
146 | * **theme:** smallest rendering ([b6e01f4](https://github.com/FGRibreau/json-schema-documentation/commit/b6e01f4))
147 |
148 |
149 |
150 |
151 |
152 | # [0.3.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.2.0...v0.3.0) (2017-12-31)
153 |
154 |
155 | ### Bug Fixes
156 |
157 | * **generator:** add demo folder (with theme default) ([6ac17ca](https://github.com/FGRibreau/json-schema-documentation/commit/6ac17ca))
158 |
159 |
160 | ### Features
161 |
162 | * **generator:** first shot ([5e01e3e](https://github.com/FGRibreau/json-schema-documentation/commit/5e01e3e))
163 | * **theme-default:** init ([ba142b4](https://github.com/FGRibreau/json-schema-documentation/commit/ba142b4))
164 |
165 |
166 |
167 |
168 |
169 | # [0.2.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.1.1...v0.2.0) (2017-12-31)
170 |
171 |
172 | ### Features
173 |
174 | * **theme:** init ([a8da88c](https://github.com/FGRibreau/json-schema-documentation/commit/a8da88c))
175 |
176 |
177 |
178 |
179 |
180 | ## [0.1.1](https://github.com/FGRibreau/json-schema-documentation/compare/v0.1.0...v0.1.1) (2017-12-31)
181 |
182 |
183 |
184 |
185 | **Note:** Version bump only for package json-schema-documentation
186 |
187 |
188 | # [0.1.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.0.2...v0.1.0) (2017-12-31)
189 |
190 |
191 | ### Features
192 |
193 | * **sample-generator:** first version ([23d6bc5](https://github.com/FGRibreau/json-schema-documentation/commit/23d6bc5))
194 |
195 |
196 |
197 |
198 |
199 | ## 0.0.2 (2017-12-31)
200 |
201 |
202 |
203 |
204 | **Note:** Version bump only for package json-schema-documentation
205 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JSON-Schema documentation project
2 |
3 |  [](https://join.slack.com/t/fgribreau/shared_invite/zt-edpjwt2t-Zh39mDUMNQ0QOr9qOj~jrg)
4 |
5 | > ## ❤️ Shameless plug
6 | > - [**Charts, simple as a URL**. No more server-side rendering pain, 1 url = 1 chart](https://image-charts.com)
7 | > - [Looking for a free **Redis GUI**?](http://redsmin.com) [Or for **real-time alerting** & monitoring for Redis?](http://redsmin.com)
8 |
9 | ## Getting started
10 |
11 | * [](https://www.npmjs.com/package/json-schema-documentation-cli) [Use the CLI](/packages/cli)
12 | * [](https://www.npmjs.com/package/json-schema-documentation-generator) [Use the generator from code](/packages/generator)
13 | * [](https://www.npmjs.com/package/json-schema-documentation-theme-default) [Fork default theme](/packages/theme-default)
14 |
15 |
16 | ## Development
17 |
18 | ```bash
19 | git clone git@github.com:fgribreau/json-schema-documentation.git
20 | npm install
21 | ```
22 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | console.info(
2 | 'You might want to check out the JSON-schema documentation project readme https://github.com/FGRibreau/json-schema-documentation'
3 | );
4 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "lerna": "2.5.1",
3 | "packages": [
4 | "packages/*"
5 | ],
6 | "version": "1.4.2"
7 | }
8 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation",
3 | "version": "0.0.2",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "JSONStream": {
8 | "version": "1.3.2",
9 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
10 | "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
11 | "dev": true,
12 | "requires": {
13 | "jsonparse": "^1.2.0",
14 | "through": ">=2.2.7 <3"
15 | }
16 | },
17 | "add-stream": {
18 | "version": "1.0.0",
19 | "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
20 | "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
21 | "dev": true
22 | },
23 | "align-text": {
24 | "version": "0.1.4",
25 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
26 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
27 | "dev": true,
28 | "requires": {
29 | "kind-of": "^3.0.2",
30 | "longest": "^1.0.1",
31 | "repeat-string": "^1.5.2"
32 | }
33 | },
34 | "amdefine": {
35 | "version": "1.0.1",
36 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
37 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
38 | "dev": true
39 | },
40 | "ansi-escapes": {
41 | "version": "3.0.0",
42 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
43 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
44 | "dev": true
45 | },
46 | "ansi-regex": {
47 | "version": "2.1.1",
48 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
49 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
50 | "dev": true
51 | },
52 | "ansi-styles": {
53 | "version": "3.2.1",
54 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
55 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
56 | "dev": true,
57 | "requires": {
58 | "color-convert": "^1.9.0"
59 | }
60 | },
61 | "aproba": {
62 | "version": "1.2.0",
63 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
64 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
65 | "dev": true
66 | },
67 | "are-we-there-yet": {
68 | "version": "1.1.4",
69 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
70 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
71 | "dev": true,
72 | "requires": {
73 | "delegates": "^1.0.0",
74 | "readable-stream": "^2.0.6"
75 | }
76 | },
77 | "array-find-index": {
78 | "version": "1.0.2",
79 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
80 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
81 | "dev": true
82 | },
83 | "array-ify": {
84 | "version": "1.0.0",
85 | "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
86 | "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
87 | "dev": true
88 | },
89 | "array-union": {
90 | "version": "1.0.2",
91 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
92 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
93 | "dev": true,
94 | "requires": {
95 | "array-uniq": "^1.0.1"
96 | }
97 | },
98 | "array-uniq": {
99 | "version": "1.0.3",
100 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
101 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
102 | "dev": true
103 | },
104 | "arrify": {
105 | "version": "1.0.1",
106 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
107 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
108 | "dev": true
109 | },
110 | "balanced-match": {
111 | "version": "1.0.0",
112 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
113 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
114 | "dev": true
115 | },
116 | "brace-expansion": {
117 | "version": "1.1.11",
118 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
119 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
120 | "dev": true,
121 | "requires": {
122 | "balanced-match": "^1.0.0",
123 | "concat-map": "0.0.1"
124 | }
125 | },
126 | "builtin-modules": {
127 | "version": "1.1.1",
128 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
129 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
130 | "dev": true
131 | },
132 | "byline": {
133 | "version": "5.0.0",
134 | "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
135 | "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
136 | "dev": true
137 | },
138 | "camelcase": {
139 | "version": "1.2.1",
140 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
141 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
142 | "dev": true,
143 | "optional": true
144 | },
145 | "camelcase-keys": {
146 | "version": "4.2.0",
147 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
148 | "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
149 | "dev": true,
150 | "requires": {
151 | "camelcase": "^4.1.0",
152 | "map-obj": "^2.0.0",
153 | "quick-lru": "^1.0.0"
154 | },
155 | "dependencies": {
156 | "camelcase": {
157 | "version": "4.1.0",
158 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
159 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
160 | "dev": true
161 | }
162 | }
163 | },
164 | "capture-stack-trace": {
165 | "version": "1.0.0",
166 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
167 | "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
168 | "dev": true
169 | },
170 | "center-align": {
171 | "version": "0.1.3",
172 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
173 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
174 | "dev": true,
175 | "optional": true,
176 | "requires": {
177 | "align-text": "^0.1.3",
178 | "lazy-cache": "^1.0.3"
179 | }
180 | },
181 | "chalk": {
182 | "version": "2.4.1",
183 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
184 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
185 | "dev": true,
186 | "requires": {
187 | "ansi-styles": "^3.2.1",
188 | "escape-string-regexp": "^1.0.5",
189 | "supports-color": "^5.3.0"
190 | }
191 | },
192 | "chardet": {
193 | "version": "0.4.2",
194 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
195 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
196 | "dev": true
197 | },
198 | "ci-info": {
199 | "version": "1.1.2",
200 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz",
201 | "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==",
202 | "dev": true
203 | },
204 | "cli-cursor": {
205 | "version": "2.1.0",
206 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
207 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
208 | "dev": true,
209 | "requires": {
210 | "restore-cursor": "^2.0.0"
211 | }
212 | },
213 | "cli-width": {
214 | "version": "2.2.0",
215 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
216 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
217 | "dev": true
218 | },
219 | "cliui": {
220 | "version": "2.1.0",
221 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
222 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
223 | "dev": true,
224 | "optional": true,
225 | "requires": {
226 | "center-align": "^0.1.1",
227 | "right-align": "^0.1.1",
228 | "wordwrap": "0.0.2"
229 | },
230 | "dependencies": {
231 | "wordwrap": {
232 | "version": "0.0.2",
233 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
234 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
235 | "dev": true,
236 | "optional": true
237 | }
238 | }
239 | },
240 | "clone": {
241 | "version": "1.0.3",
242 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
243 | "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
244 | "dev": true
245 | },
246 | "cmd-shim": {
247 | "version": "2.0.2",
248 | "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
249 | "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
250 | "dev": true,
251 | "requires": {
252 | "graceful-fs": "^4.1.2",
253 | "mkdirp": "~0.5.0"
254 | }
255 | },
256 | "code-point-at": {
257 | "version": "1.1.0",
258 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
259 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
260 | "dev": true
261 | },
262 | "color-convert": {
263 | "version": "1.9.1",
264 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
265 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
266 | "dev": true,
267 | "requires": {
268 | "color-name": "^1.1.1"
269 | }
270 | },
271 | "color-name": {
272 | "version": "1.1.3",
273 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
274 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
275 | "dev": true
276 | },
277 | "columnify": {
278 | "version": "1.5.4",
279 | "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
280 | "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
281 | "dev": true,
282 | "requires": {
283 | "strip-ansi": "^3.0.0",
284 | "wcwidth": "^1.0.0"
285 | }
286 | },
287 | "command-join": {
288 | "version": "2.0.0",
289 | "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz",
290 | "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=",
291 | "dev": true
292 | },
293 | "compare-func": {
294 | "version": "1.3.2",
295 | "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
296 | "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
297 | "dev": true,
298 | "requires": {
299 | "array-ify": "^1.0.0",
300 | "dot-prop": "^3.0.0"
301 | }
302 | },
303 | "concat-map": {
304 | "version": "0.0.1",
305 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
306 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
307 | "dev": true
308 | },
309 | "concat-stream": {
310 | "version": "1.6.0",
311 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
312 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
313 | "dev": true,
314 | "requires": {
315 | "inherits": "^2.0.3",
316 | "readable-stream": "^2.2.2",
317 | "typedarray": "^0.0.6"
318 | }
319 | },
320 | "console-control-strings": {
321 | "version": "1.1.0",
322 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
323 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
324 | "dev": true
325 | },
326 | "conventional-changelog": {
327 | "version": "1.1.24",
328 | "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
329 | "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
330 | "dev": true,
331 | "requires": {
332 | "conventional-changelog-angular": "^1.6.6",
333 | "conventional-changelog-atom": "^0.2.8",
334 | "conventional-changelog-codemirror": "^0.3.8",
335 | "conventional-changelog-core": "^2.0.11",
336 | "conventional-changelog-ember": "^0.3.12",
337 | "conventional-changelog-eslint": "^1.0.9",
338 | "conventional-changelog-express": "^0.3.6",
339 | "conventional-changelog-jquery": "^0.1.0",
340 | "conventional-changelog-jscs": "^0.1.0",
341 | "conventional-changelog-jshint": "^0.3.8",
342 | "conventional-changelog-preset-loader": "^1.1.8"
343 | }
344 | },
345 | "conventional-changelog-angular": {
346 | "version": "1.6.6",
347 | "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
348 | "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
349 | "dev": true,
350 | "requires": {
351 | "compare-func": "^1.3.1",
352 | "q": "^1.5.1"
353 | }
354 | },
355 | "conventional-changelog-atom": {
356 | "version": "0.2.8",
357 | "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
358 | "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
359 | "dev": true,
360 | "requires": {
361 | "q": "^1.5.1"
362 | }
363 | },
364 | "conventional-changelog-cli": {
365 | "version": "1.3.22",
366 | "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
367 | "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
368 | "dev": true,
369 | "requires": {
370 | "add-stream": "^1.0.0",
371 | "conventional-changelog": "^1.1.24",
372 | "lodash": "^4.2.1",
373 | "meow": "^4.0.0",
374 | "tempfile": "^1.1.1"
375 | }
376 | },
377 | "conventional-changelog-codemirror": {
378 | "version": "0.3.8",
379 | "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
380 | "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
381 | "dev": true,
382 | "requires": {
383 | "q": "^1.5.1"
384 | }
385 | },
386 | "conventional-changelog-core": {
387 | "version": "2.0.11",
388 | "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
389 | "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
390 | "dev": true,
391 | "requires": {
392 | "conventional-changelog-writer": "^3.0.9",
393 | "conventional-commits-parser": "^2.1.7",
394 | "dateformat": "^3.0.0",
395 | "get-pkg-repo": "^1.0.0",
396 | "git-raw-commits": "^1.3.6",
397 | "git-remote-origin-url": "^2.0.0",
398 | "git-semver-tags": "^1.3.6",
399 | "lodash": "^4.2.1",
400 | "normalize-package-data": "^2.3.5",
401 | "q": "^1.5.1",
402 | "read-pkg": "^1.1.0",
403 | "read-pkg-up": "^1.0.1",
404 | "through2": "^2.0.0"
405 | },
406 | "dependencies": {
407 | "load-json-file": {
408 | "version": "1.1.0",
409 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
410 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
411 | "dev": true,
412 | "requires": {
413 | "graceful-fs": "^4.1.2",
414 | "parse-json": "^2.2.0",
415 | "pify": "^2.0.0",
416 | "pinkie-promise": "^2.0.0",
417 | "strip-bom": "^2.0.0"
418 | }
419 | },
420 | "parse-json": {
421 | "version": "2.2.0",
422 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
423 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
424 | "dev": true,
425 | "requires": {
426 | "error-ex": "^1.2.0"
427 | }
428 | },
429 | "path-type": {
430 | "version": "1.1.0",
431 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
432 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
433 | "dev": true,
434 | "requires": {
435 | "graceful-fs": "^4.1.2",
436 | "pify": "^2.0.0",
437 | "pinkie-promise": "^2.0.0"
438 | }
439 | },
440 | "pify": {
441 | "version": "2.3.0",
442 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
443 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
444 | "dev": true
445 | },
446 | "read-pkg": {
447 | "version": "1.1.0",
448 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
449 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
450 | "dev": true,
451 | "requires": {
452 | "load-json-file": "^1.0.0",
453 | "normalize-package-data": "^2.3.2",
454 | "path-type": "^1.0.0"
455 | }
456 | },
457 | "strip-bom": {
458 | "version": "2.0.0",
459 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
460 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
461 | "dev": true,
462 | "requires": {
463 | "is-utf8": "^0.2.0"
464 | }
465 | }
466 | }
467 | },
468 | "conventional-changelog-ember": {
469 | "version": "0.3.12",
470 | "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
471 | "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
472 | "dev": true,
473 | "requires": {
474 | "q": "^1.5.1"
475 | }
476 | },
477 | "conventional-changelog-eslint": {
478 | "version": "1.0.9",
479 | "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
480 | "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
481 | "dev": true,
482 | "requires": {
483 | "q": "^1.5.1"
484 | }
485 | },
486 | "conventional-changelog-express": {
487 | "version": "0.3.6",
488 | "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
489 | "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
490 | "dev": true,
491 | "requires": {
492 | "q": "^1.5.1"
493 | }
494 | },
495 | "conventional-changelog-jquery": {
496 | "version": "0.1.0",
497 | "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
498 | "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
499 | "dev": true,
500 | "requires": {
501 | "q": "^1.4.1"
502 | }
503 | },
504 | "conventional-changelog-jscs": {
505 | "version": "0.1.0",
506 | "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
507 | "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
508 | "dev": true,
509 | "requires": {
510 | "q": "^1.4.1"
511 | }
512 | },
513 | "conventional-changelog-jshint": {
514 | "version": "0.3.8",
515 | "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
516 | "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
517 | "dev": true,
518 | "requires": {
519 | "compare-func": "^1.3.1",
520 | "q": "^1.5.1"
521 | }
522 | },
523 | "conventional-changelog-preset-loader": {
524 | "version": "1.1.8",
525 | "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
526 | "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
527 | "dev": true
528 | },
529 | "conventional-changelog-writer": {
530 | "version": "3.0.9",
531 | "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
532 | "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
533 | "dev": true,
534 | "requires": {
535 | "compare-func": "^1.3.1",
536 | "conventional-commits-filter": "^1.1.6",
537 | "dateformat": "^3.0.0",
538 | "handlebars": "^4.0.2",
539 | "json-stringify-safe": "^5.0.1",
540 | "lodash": "^4.2.1",
541 | "meow": "^4.0.0",
542 | "semver": "^5.5.0",
543 | "split": "^1.0.0",
544 | "through2": "^2.0.0"
545 | }
546 | },
547 | "conventional-commits-filter": {
548 | "version": "1.1.6",
549 | "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
550 | "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
551 | "dev": true,
552 | "requires": {
553 | "is-subset": "^0.1.1",
554 | "modify-values": "^1.0.0"
555 | }
556 | },
557 | "conventional-commits-parser": {
558 | "version": "2.1.7",
559 | "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
560 | "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
561 | "dev": true,
562 | "requires": {
563 | "JSONStream": "^1.0.4",
564 | "is-text-path": "^1.0.0",
565 | "lodash": "^4.2.1",
566 | "meow": "^4.0.0",
567 | "split2": "^2.0.0",
568 | "through2": "^2.0.0",
569 | "trim-off-newlines": "^1.0.0"
570 | }
571 | },
572 | "conventional-recommended-bump": {
573 | "version": "1.2.1",
574 | "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
575 | "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
576 | "dev": true,
577 | "requires": {
578 | "concat-stream": "^1.4.10",
579 | "conventional-commits-filter": "^1.1.1",
580 | "conventional-commits-parser": "^2.1.1",
581 | "git-raw-commits": "^1.3.0",
582 | "git-semver-tags": "^1.3.0",
583 | "meow": "^3.3.0",
584 | "object-assign": "^4.0.1"
585 | },
586 | "dependencies": {
587 | "camelcase": {
588 | "version": "2.1.1",
589 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
590 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
591 | "dev": true
592 | },
593 | "camelcase-keys": {
594 | "version": "2.1.0",
595 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
596 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
597 | "dev": true,
598 | "requires": {
599 | "camelcase": "^2.0.0",
600 | "map-obj": "^1.0.0"
601 | }
602 | },
603 | "indent-string": {
604 | "version": "2.1.0",
605 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
606 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
607 | "dev": true,
608 | "requires": {
609 | "repeating": "^2.0.0"
610 | }
611 | },
612 | "map-obj": {
613 | "version": "1.0.1",
614 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
615 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
616 | "dev": true
617 | },
618 | "meow": {
619 | "version": "3.7.0",
620 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
621 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
622 | "dev": true,
623 | "requires": {
624 | "camelcase-keys": "^2.0.0",
625 | "decamelize": "^1.1.2",
626 | "loud-rejection": "^1.0.0",
627 | "map-obj": "^1.0.1",
628 | "minimist": "^1.1.3",
629 | "normalize-package-data": "^2.3.4",
630 | "object-assign": "^4.0.1",
631 | "read-pkg-up": "^1.0.1",
632 | "redent": "^1.0.0",
633 | "trim-newlines": "^1.0.0"
634 | }
635 | },
636 | "minimist": {
637 | "version": "1.2.0",
638 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
639 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
640 | "dev": true
641 | },
642 | "redent": {
643 | "version": "1.0.0",
644 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
645 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
646 | "dev": true,
647 | "requires": {
648 | "indent-string": "^2.1.0",
649 | "strip-indent": "^1.0.1"
650 | }
651 | },
652 | "strip-indent": {
653 | "version": "1.0.1",
654 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
655 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
656 | "dev": true,
657 | "requires": {
658 | "get-stdin": "^4.0.1"
659 | }
660 | },
661 | "trim-newlines": {
662 | "version": "1.0.0",
663 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
664 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
665 | "dev": true
666 | }
667 | }
668 | },
669 | "core-util-is": {
670 | "version": "1.0.2",
671 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
672 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
673 | "dev": true
674 | },
675 | "create-error-class": {
676 | "version": "3.0.2",
677 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
678 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
679 | "dev": true,
680 | "requires": {
681 | "capture-stack-trace": "^1.0.0"
682 | }
683 | },
684 | "cross-spawn": {
685 | "version": "5.1.0",
686 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
687 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
688 | "dev": true,
689 | "requires": {
690 | "lru-cache": "^4.0.1",
691 | "shebang-command": "^1.2.0",
692 | "which": "^1.2.9"
693 | }
694 | },
695 | "currently-unhandled": {
696 | "version": "0.4.1",
697 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
698 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
699 | "dev": true,
700 | "requires": {
701 | "array-find-index": "^1.0.1"
702 | }
703 | },
704 | "dargs": {
705 | "version": "4.1.0",
706 | "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
707 | "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
708 | "dev": true,
709 | "requires": {
710 | "number-is-nan": "^1.0.0"
711 | }
712 | },
713 | "dateformat": {
714 | "version": "3.0.3",
715 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
716 | "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
717 | "dev": true
718 | },
719 | "decamelize": {
720 | "version": "1.2.0",
721 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
722 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
723 | "dev": true
724 | },
725 | "decamelize-keys": {
726 | "version": "1.1.0",
727 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
728 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
729 | "dev": true,
730 | "requires": {
731 | "decamelize": "^1.1.0",
732 | "map-obj": "^1.0.0"
733 | },
734 | "dependencies": {
735 | "map-obj": {
736 | "version": "1.0.1",
737 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
738 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
739 | "dev": true
740 | }
741 | }
742 | },
743 | "dedent": {
744 | "version": "0.7.0",
745 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
746 | "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
747 | "dev": true
748 | },
749 | "deep-extend": {
750 | "version": "0.6.0",
751 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
752 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
753 | "dev": true
754 | },
755 | "defaults": {
756 | "version": "1.0.3",
757 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
758 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
759 | "dev": true,
760 | "requires": {
761 | "clone": "^1.0.2"
762 | }
763 | },
764 | "delegates": {
765 | "version": "1.0.0",
766 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
767 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
768 | "dev": true
769 | },
770 | "dot-prop": {
771 | "version": "3.0.0",
772 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
773 | "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
774 | "dev": true,
775 | "requires": {
776 | "is-obj": "^1.0.0"
777 | }
778 | },
779 | "duplexer": {
780 | "version": "0.1.1",
781 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
782 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
783 | "dev": true
784 | },
785 | "duplexer3": {
786 | "version": "0.1.4",
787 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
788 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
789 | "dev": true
790 | },
791 | "error-ex": {
792 | "version": "1.3.1",
793 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
794 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
795 | "dev": true,
796 | "requires": {
797 | "is-arrayish": "^0.2.1"
798 | }
799 | },
800 | "escape-string-regexp": {
801 | "version": "1.0.5",
802 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
803 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
804 | "dev": true
805 | },
806 | "execa": {
807 | "version": "0.8.0",
808 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
809 | "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
810 | "dev": true,
811 | "requires": {
812 | "cross-spawn": "^5.0.1",
813 | "get-stream": "^3.0.0",
814 | "is-stream": "^1.1.0",
815 | "npm-run-path": "^2.0.0",
816 | "p-finally": "^1.0.0",
817 | "signal-exit": "^3.0.0",
818 | "strip-eof": "^1.0.0"
819 | }
820 | },
821 | "external-editor": {
822 | "version": "2.2.0",
823 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
824 | "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
825 | "dev": true,
826 | "requires": {
827 | "chardet": "^0.4.0",
828 | "iconv-lite": "^0.4.17",
829 | "tmp": "^0.0.33"
830 | },
831 | "dependencies": {
832 | "iconv-lite": {
833 | "version": "0.4.23",
834 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
835 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
836 | "dev": true,
837 | "requires": {
838 | "safer-buffer": ">= 2.1.2 < 3"
839 | }
840 | }
841 | }
842 | },
843 | "figures": {
844 | "version": "2.0.0",
845 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
846 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
847 | "dev": true,
848 | "requires": {
849 | "escape-string-regexp": "^1.0.5"
850 | }
851 | },
852 | "find-up": {
853 | "version": "2.1.0",
854 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
855 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
856 | "dev": true,
857 | "requires": {
858 | "locate-path": "^2.0.0"
859 | }
860 | },
861 | "fs-extra": {
862 | "version": "4.0.3",
863 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
864 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
865 | "dev": true,
866 | "requires": {
867 | "graceful-fs": "^4.1.2",
868 | "jsonfile": "^4.0.0",
869 | "universalify": "^0.1.0"
870 | }
871 | },
872 | "fs.realpath": {
873 | "version": "1.0.0",
874 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
875 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
876 | "dev": true
877 | },
878 | "gauge": {
879 | "version": "2.7.4",
880 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
881 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
882 | "dev": true,
883 | "requires": {
884 | "aproba": "^1.0.3",
885 | "console-control-strings": "^1.0.0",
886 | "has-unicode": "^2.0.0",
887 | "object-assign": "^4.1.0",
888 | "signal-exit": "^3.0.0",
889 | "string-width": "^1.0.1",
890 | "strip-ansi": "^3.0.1",
891 | "wide-align": "^1.1.0"
892 | },
893 | "dependencies": {
894 | "is-fullwidth-code-point": {
895 | "version": "1.0.0",
896 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
897 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
898 | "dev": true,
899 | "requires": {
900 | "number-is-nan": "^1.0.0"
901 | }
902 | },
903 | "string-width": {
904 | "version": "1.0.2",
905 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
906 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
907 | "dev": true,
908 | "requires": {
909 | "code-point-at": "^1.0.0",
910 | "is-fullwidth-code-point": "^1.0.0",
911 | "strip-ansi": "^3.0.0"
912 | }
913 | }
914 | }
915 | },
916 | "get-caller-file": {
917 | "version": "1.0.2",
918 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
919 | "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
920 | "dev": true
921 | },
922 | "get-pkg-repo": {
923 | "version": "1.4.0",
924 | "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
925 | "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
926 | "dev": true,
927 | "requires": {
928 | "hosted-git-info": "^2.1.4",
929 | "meow": "^3.3.0",
930 | "normalize-package-data": "^2.3.0",
931 | "parse-github-repo-url": "^1.3.0",
932 | "through2": "^2.0.0"
933 | },
934 | "dependencies": {
935 | "camelcase": {
936 | "version": "2.1.1",
937 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
938 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
939 | "dev": true
940 | },
941 | "camelcase-keys": {
942 | "version": "2.1.0",
943 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
944 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
945 | "dev": true,
946 | "requires": {
947 | "camelcase": "^2.0.0",
948 | "map-obj": "^1.0.0"
949 | }
950 | },
951 | "indent-string": {
952 | "version": "2.1.0",
953 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
954 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
955 | "dev": true,
956 | "requires": {
957 | "repeating": "^2.0.0"
958 | }
959 | },
960 | "map-obj": {
961 | "version": "1.0.1",
962 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
963 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
964 | "dev": true
965 | },
966 | "meow": {
967 | "version": "3.7.0",
968 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
969 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
970 | "dev": true,
971 | "requires": {
972 | "camelcase-keys": "^2.0.0",
973 | "decamelize": "^1.1.2",
974 | "loud-rejection": "^1.0.0",
975 | "map-obj": "^1.0.1",
976 | "minimist": "^1.1.3",
977 | "normalize-package-data": "^2.3.4",
978 | "object-assign": "^4.0.1",
979 | "read-pkg-up": "^1.0.1",
980 | "redent": "^1.0.0",
981 | "trim-newlines": "^1.0.0"
982 | }
983 | },
984 | "minimist": {
985 | "version": "1.2.0",
986 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
987 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
988 | "dev": true
989 | },
990 | "redent": {
991 | "version": "1.0.0",
992 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
993 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
994 | "dev": true,
995 | "requires": {
996 | "indent-string": "^2.1.0",
997 | "strip-indent": "^1.0.1"
998 | }
999 | },
1000 | "strip-indent": {
1001 | "version": "1.0.1",
1002 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
1003 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
1004 | "dev": true,
1005 | "requires": {
1006 | "get-stdin": "^4.0.1"
1007 | }
1008 | },
1009 | "trim-newlines": {
1010 | "version": "1.0.0",
1011 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
1012 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
1013 | "dev": true
1014 | }
1015 | }
1016 | },
1017 | "get-port": {
1018 | "version": "3.2.0",
1019 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
1020 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
1021 | "dev": true
1022 | },
1023 | "get-stdin": {
1024 | "version": "4.0.1",
1025 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1026 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
1027 | "dev": true
1028 | },
1029 | "get-stream": {
1030 | "version": "3.0.0",
1031 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
1032 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
1033 | "dev": true
1034 | },
1035 | "git-raw-commits": {
1036 | "version": "1.3.6",
1037 | "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
1038 | "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
1039 | "dev": true,
1040 | "requires": {
1041 | "dargs": "^4.0.1",
1042 | "lodash.template": "^4.0.2",
1043 | "meow": "^4.0.0",
1044 | "split2": "^2.0.0",
1045 | "through2": "^2.0.0"
1046 | }
1047 | },
1048 | "git-remote-origin-url": {
1049 | "version": "2.0.0",
1050 | "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
1051 | "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
1052 | "dev": true,
1053 | "requires": {
1054 | "gitconfiglocal": "^1.0.0",
1055 | "pify": "^2.3.0"
1056 | },
1057 | "dependencies": {
1058 | "pify": {
1059 | "version": "2.3.0",
1060 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1061 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1062 | "dev": true
1063 | }
1064 | }
1065 | },
1066 | "git-semver-tags": {
1067 | "version": "1.3.6",
1068 | "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
1069 | "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
1070 | "dev": true,
1071 | "requires": {
1072 | "meow": "^4.0.0",
1073 | "semver": "^5.5.0"
1074 | }
1075 | },
1076 | "gitconfiglocal": {
1077 | "version": "1.0.0",
1078 | "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
1079 | "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
1080 | "dev": true,
1081 | "requires": {
1082 | "ini": "^1.3.2"
1083 | }
1084 | },
1085 | "glob": {
1086 | "version": "7.1.2",
1087 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1088 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1089 | "dev": true,
1090 | "requires": {
1091 | "fs.realpath": "^1.0.0",
1092 | "inflight": "^1.0.4",
1093 | "inherits": "2",
1094 | "minimatch": "^3.0.4",
1095 | "once": "^1.3.0",
1096 | "path-is-absolute": "^1.0.0"
1097 | }
1098 | },
1099 | "globby": {
1100 | "version": "6.1.0",
1101 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
1102 | "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
1103 | "dev": true,
1104 | "requires": {
1105 | "array-union": "^1.0.1",
1106 | "glob": "^7.0.3",
1107 | "object-assign": "^4.0.1",
1108 | "pify": "^2.0.0",
1109 | "pinkie-promise": "^2.0.0"
1110 | },
1111 | "dependencies": {
1112 | "pify": {
1113 | "version": "2.3.0",
1114 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1115 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1116 | "dev": true
1117 | }
1118 | }
1119 | },
1120 | "got": {
1121 | "version": "6.7.1",
1122 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
1123 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
1124 | "dev": true,
1125 | "requires": {
1126 | "create-error-class": "^3.0.0",
1127 | "duplexer3": "^0.1.4",
1128 | "get-stream": "^3.0.0",
1129 | "is-redirect": "^1.0.0",
1130 | "is-retry-allowed": "^1.0.0",
1131 | "is-stream": "^1.0.0",
1132 | "lowercase-keys": "^1.0.0",
1133 | "safe-buffer": "^5.0.1",
1134 | "timed-out": "^4.0.0",
1135 | "unzip-response": "^2.0.1",
1136 | "url-parse-lax": "^1.0.0"
1137 | }
1138 | },
1139 | "graceful-fs": {
1140 | "version": "4.1.11",
1141 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1142 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1143 | "dev": true
1144 | },
1145 | "handlebars": {
1146 | "version": "4.0.11",
1147 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
1148 | "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
1149 | "dev": true,
1150 | "requires": {
1151 | "async": "^1.4.0",
1152 | "optimist": "^0.6.1",
1153 | "source-map": "^0.4.4",
1154 | "uglify-js": "^2.6"
1155 | },
1156 | "dependencies": {
1157 | "async": {
1158 | "version": "1.5.2",
1159 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
1160 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
1161 | "dev": true
1162 | }
1163 | }
1164 | },
1165 | "has-flag": {
1166 | "version": "3.0.0",
1167 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1168 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1169 | "dev": true
1170 | },
1171 | "has-unicode": {
1172 | "version": "2.0.1",
1173 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
1174 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
1175 | "dev": true
1176 | },
1177 | "hosted-git-info": {
1178 | "version": "2.5.0",
1179 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
1180 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
1181 | "dev": true
1182 | },
1183 | "imurmurhash": {
1184 | "version": "0.1.4",
1185 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1186 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1187 | "dev": true
1188 | },
1189 | "indent-string": {
1190 | "version": "3.2.0",
1191 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
1192 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
1193 | "dev": true
1194 | },
1195 | "inflight": {
1196 | "version": "1.0.6",
1197 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1198 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1199 | "dev": true,
1200 | "requires": {
1201 | "once": "^1.3.0",
1202 | "wrappy": "1"
1203 | }
1204 | },
1205 | "inherits": {
1206 | "version": "2.0.3",
1207 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1208 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1209 | "dev": true
1210 | },
1211 | "ini": {
1212 | "version": "1.3.5",
1213 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1214 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
1215 | "dev": true
1216 | },
1217 | "inquirer": {
1218 | "version": "3.3.0",
1219 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
1220 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
1221 | "dev": true,
1222 | "requires": {
1223 | "ansi-escapes": "^3.0.0",
1224 | "chalk": "^2.0.0",
1225 | "cli-cursor": "^2.1.0",
1226 | "cli-width": "^2.0.0",
1227 | "external-editor": "^2.0.4",
1228 | "figures": "^2.0.0",
1229 | "lodash": "^4.3.0",
1230 | "mute-stream": "0.0.7",
1231 | "run-async": "^2.2.0",
1232 | "rx-lite": "^4.0.8",
1233 | "rx-lite-aggregates": "^4.0.8",
1234 | "string-width": "^2.1.0",
1235 | "strip-ansi": "^4.0.0",
1236 | "through": "^2.3.6"
1237 | },
1238 | "dependencies": {
1239 | "ansi-regex": {
1240 | "version": "3.0.0",
1241 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
1242 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
1243 | "dev": true
1244 | },
1245 | "strip-ansi": {
1246 | "version": "4.0.0",
1247 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1248 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1249 | "dev": true,
1250 | "requires": {
1251 | "ansi-regex": "^3.0.0"
1252 | }
1253 | }
1254 | }
1255 | },
1256 | "invert-kv": {
1257 | "version": "1.0.0",
1258 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
1259 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
1260 | "dev": true
1261 | },
1262 | "is-arrayish": {
1263 | "version": "0.2.1",
1264 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1265 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1266 | "dev": true
1267 | },
1268 | "is-buffer": {
1269 | "version": "1.1.6",
1270 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1271 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1272 | "dev": true
1273 | },
1274 | "is-builtin-module": {
1275 | "version": "1.0.0",
1276 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
1277 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
1278 | "dev": true,
1279 | "requires": {
1280 | "builtin-modules": "^1.0.0"
1281 | }
1282 | },
1283 | "is-ci": {
1284 | "version": "1.1.0",
1285 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
1286 | "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
1287 | "dev": true,
1288 | "requires": {
1289 | "ci-info": "^1.0.0"
1290 | }
1291 | },
1292 | "is-finite": {
1293 | "version": "1.0.2",
1294 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1295 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1296 | "dev": true,
1297 | "requires": {
1298 | "number-is-nan": "^1.0.0"
1299 | }
1300 | },
1301 | "is-fullwidth-code-point": {
1302 | "version": "2.0.0",
1303 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1304 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1305 | "dev": true
1306 | },
1307 | "is-obj": {
1308 | "version": "1.0.1",
1309 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
1310 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
1311 | "dev": true
1312 | },
1313 | "is-plain-obj": {
1314 | "version": "1.1.0",
1315 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
1316 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
1317 | "dev": true
1318 | },
1319 | "is-promise": {
1320 | "version": "2.1.0",
1321 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
1322 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
1323 | "dev": true
1324 | },
1325 | "is-redirect": {
1326 | "version": "1.0.0",
1327 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
1328 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
1329 | "dev": true
1330 | },
1331 | "is-retry-allowed": {
1332 | "version": "1.1.0",
1333 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
1334 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
1335 | "dev": true
1336 | },
1337 | "is-stream": {
1338 | "version": "1.1.0",
1339 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
1340 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1341 | "dev": true
1342 | },
1343 | "is-subset": {
1344 | "version": "0.1.1",
1345 | "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
1346 | "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
1347 | "dev": true
1348 | },
1349 | "is-text-path": {
1350 | "version": "1.0.1",
1351 | "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
1352 | "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
1353 | "dev": true,
1354 | "requires": {
1355 | "text-extensions": "^1.0.0"
1356 | }
1357 | },
1358 | "is-utf8": {
1359 | "version": "0.2.1",
1360 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
1361 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
1362 | "dev": true
1363 | },
1364 | "isarray": {
1365 | "version": "1.0.0",
1366 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1367 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1368 | "dev": true
1369 | },
1370 | "isexe": {
1371 | "version": "2.0.0",
1372 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1373 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1374 | "dev": true
1375 | },
1376 | "json-parse-better-errors": {
1377 | "version": "1.0.2",
1378 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1379 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1380 | "dev": true
1381 | },
1382 | "json-stringify-safe": {
1383 | "version": "5.0.1",
1384 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1385 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1386 | "dev": true
1387 | },
1388 | "jsonfile": {
1389 | "version": "4.0.0",
1390 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
1391 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
1392 | "dev": true,
1393 | "requires": {
1394 | "graceful-fs": "^4.1.6"
1395 | }
1396 | },
1397 | "jsonparse": {
1398 | "version": "1.3.1",
1399 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
1400 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
1401 | "dev": true
1402 | },
1403 | "kind-of": {
1404 | "version": "3.2.2",
1405 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1406 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1407 | "dev": true,
1408 | "requires": {
1409 | "is-buffer": "^1.1.5"
1410 | }
1411 | },
1412 | "lazy-cache": {
1413 | "version": "1.0.4",
1414 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
1415 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
1416 | "dev": true,
1417 | "optional": true
1418 | },
1419 | "lcid": {
1420 | "version": "1.0.0",
1421 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
1422 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
1423 | "dev": true,
1424 | "requires": {
1425 | "invert-kv": "^1.0.0"
1426 | }
1427 | },
1428 | "lerna": {
1429 | "version": "2.10.2",
1430 | "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.10.2.tgz",
1431 | "integrity": "sha512-JijbAQoVQggw31xOOBXQ9Lvh7W8Obb5dl/4OH2Vv3+VIKFgqOwcxkzCWfNV9pbdiMA1OHAXo55aHe2WBqS2oNw==",
1432 | "dev": true,
1433 | "requires": {
1434 | "async": "^1.5.0",
1435 | "chalk": "^2.1.0",
1436 | "cmd-shim": "^2.0.2",
1437 | "columnify": "^1.5.4",
1438 | "command-join": "^2.0.0",
1439 | "conventional-changelog-cli": "^1.3.13",
1440 | "conventional-recommended-bump": "^1.2.1",
1441 | "dedent": "^0.7.0",
1442 | "execa": "^0.8.0",
1443 | "find-up": "^2.1.0",
1444 | "fs-extra": "^4.0.1",
1445 | "get-port": "^3.2.0",
1446 | "glob": "^7.1.2",
1447 | "glob-parent": "^3.1.0",
1448 | "globby": "^6.1.0",
1449 | "graceful-fs": "^4.1.11",
1450 | "hosted-git-info": "^2.5.0",
1451 | "inquirer": "^3.2.2",
1452 | "is-ci": "^1.0.10",
1453 | "load-json-file": "^4.0.0",
1454 | "lodash": "^4.17.4",
1455 | "minimatch": "^3.0.4",
1456 | "npmlog": "^4.1.2",
1457 | "p-finally": "^1.0.0",
1458 | "package-json": "^4.0.1",
1459 | "path-exists": "^3.0.0",
1460 | "read-cmd-shim": "^1.0.1",
1461 | "read-pkg": "^3.0.0",
1462 | "rimraf": "^2.6.1",
1463 | "safe-buffer": "^5.1.1",
1464 | "semver": "^5.4.1",
1465 | "signal-exit": "^3.0.2",
1466 | "slash": "^1.0.0",
1467 | "strong-log-transformer": "^1.0.6",
1468 | "temp-write": "^3.3.0",
1469 | "write-file-atomic": "^2.3.0",
1470 | "write-json-file": "^2.2.0",
1471 | "write-pkg": "^3.1.0",
1472 | "yargs": "^8.0.2"
1473 | },
1474 | "dependencies": {
1475 | "async": {
1476 | "version": "1.5.2",
1477 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
1478 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
1479 | "dev": true
1480 | },
1481 | "camelcase": {
1482 | "version": "4.1.0",
1483 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
1484 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
1485 | "dev": true
1486 | },
1487 | "cliui": {
1488 | "version": "3.2.0",
1489 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
1490 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
1491 | "dev": true,
1492 | "requires": {
1493 | "string-width": "^1.0.1",
1494 | "strip-ansi": "^3.0.1",
1495 | "wrap-ansi": "^2.0.0"
1496 | },
1497 | "dependencies": {
1498 | "string-width": {
1499 | "version": "1.0.2",
1500 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1501 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1502 | "dev": true,
1503 | "requires": {
1504 | "code-point-at": "^1.0.0",
1505 | "is-fullwidth-code-point": "^1.0.0",
1506 | "strip-ansi": "^3.0.0"
1507 | }
1508 | }
1509 | }
1510 | },
1511 | "glob-parent": {
1512 | "version": "3.1.0",
1513 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
1514 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
1515 | "dev": true,
1516 | "requires": {
1517 | "is-glob": "^3.1.0",
1518 | "path-dirname": "^1.0.0"
1519 | }
1520 | },
1521 | "is-extglob": {
1522 | "version": "2.1.1",
1523 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1524 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1525 | "dev": true
1526 | },
1527 | "is-fullwidth-code-point": {
1528 | "version": "1.0.0",
1529 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1530 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
1531 | "dev": true,
1532 | "requires": {
1533 | "number-is-nan": "^1.0.0"
1534 | }
1535 | },
1536 | "is-glob": {
1537 | "version": "3.1.0",
1538 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
1539 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
1540 | "dev": true,
1541 | "requires": {
1542 | "is-extglob": "^2.1.0"
1543 | }
1544 | },
1545 | "parse-json": {
1546 | "version": "2.2.0",
1547 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1548 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1549 | "dev": true,
1550 | "requires": {
1551 | "error-ex": "^1.2.0"
1552 | }
1553 | },
1554 | "path-type": {
1555 | "version": "2.0.0",
1556 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
1557 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
1558 | "dev": true,
1559 | "requires": {
1560 | "pify": "^2.0.0"
1561 | }
1562 | },
1563 | "pify": {
1564 | "version": "2.3.0",
1565 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1566 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1567 | "dev": true
1568 | },
1569 | "read-pkg-up": {
1570 | "version": "2.0.0",
1571 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
1572 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
1573 | "dev": true,
1574 | "requires": {
1575 | "find-up": "^2.0.0",
1576 | "read-pkg": "^2.0.0"
1577 | },
1578 | "dependencies": {
1579 | "load-json-file": {
1580 | "version": "2.0.0",
1581 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
1582 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
1583 | "dev": true,
1584 | "requires": {
1585 | "graceful-fs": "^4.1.2",
1586 | "parse-json": "^2.2.0",
1587 | "pify": "^2.0.0",
1588 | "strip-bom": "^3.0.0"
1589 | }
1590 | },
1591 | "read-pkg": {
1592 | "version": "2.0.0",
1593 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
1594 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
1595 | "dev": true,
1596 | "requires": {
1597 | "load-json-file": "^2.0.0",
1598 | "normalize-package-data": "^2.3.2",
1599 | "path-type": "^2.0.0"
1600 | }
1601 | }
1602 | }
1603 | },
1604 | "yargs": {
1605 | "version": "8.0.2",
1606 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
1607 | "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
1608 | "dev": true,
1609 | "requires": {
1610 | "camelcase": "^4.1.0",
1611 | "cliui": "^3.2.0",
1612 | "decamelize": "^1.1.1",
1613 | "get-caller-file": "^1.0.1",
1614 | "os-locale": "^2.0.0",
1615 | "read-pkg-up": "^2.0.0",
1616 | "require-directory": "^2.1.1",
1617 | "require-main-filename": "^1.0.1",
1618 | "set-blocking": "^2.0.0",
1619 | "string-width": "^2.0.0",
1620 | "which-module": "^2.0.0",
1621 | "y18n": "^3.2.1",
1622 | "yargs-parser": "^7.0.0"
1623 | }
1624 | }
1625 | }
1626 | },
1627 | "load-json-file": {
1628 | "version": "4.0.0",
1629 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
1630 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
1631 | "dev": true,
1632 | "requires": {
1633 | "graceful-fs": "^4.1.2",
1634 | "parse-json": "^4.0.0",
1635 | "pify": "^3.0.0",
1636 | "strip-bom": "^3.0.0"
1637 | }
1638 | },
1639 | "locate-path": {
1640 | "version": "2.0.0",
1641 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
1642 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
1643 | "dev": true,
1644 | "requires": {
1645 | "p-locate": "^2.0.0",
1646 | "path-exists": "^3.0.0"
1647 | }
1648 | },
1649 | "lodash": {
1650 | "version": "4.17.10",
1651 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
1652 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
1653 | "dev": true
1654 | },
1655 | "lodash._reinterpolate": {
1656 | "version": "3.0.0",
1657 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
1658 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
1659 | "dev": true
1660 | },
1661 | "lodash.template": {
1662 | "version": "4.4.0",
1663 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
1664 | "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
1665 | "dev": true,
1666 | "requires": {
1667 | "lodash._reinterpolate": "~3.0.0",
1668 | "lodash.templatesettings": "^4.0.0"
1669 | }
1670 | },
1671 | "lodash.templatesettings": {
1672 | "version": "4.1.0",
1673 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
1674 | "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
1675 | "dev": true,
1676 | "requires": {
1677 | "lodash._reinterpolate": "~3.0.0"
1678 | }
1679 | },
1680 | "longest": {
1681 | "version": "1.0.1",
1682 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
1683 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
1684 | "dev": true
1685 | },
1686 | "loud-rejection": {
1687 | "version": "1.6.0",
1688 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
1689 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
1690 | "dev": true,
1691 | "requires": {
1692 | "currently-unhandled": "^0.4.1",
1693 | "signal-exit": "^3.0.0"
1694 | }
1695 | },
1696 | "lowercase-keys": {
1697 | "version": "1.0.0",
1698 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
1699 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
1700 | "dev": true
1701 | },
1702 | "lru-cache": {
1703 | "version": "4.1.3",
1704 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
1705 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
1706 | "dev": true,
1707 | "requires": {
1708 | "pseudomap": "^1.0.2",
1709 | "yallist": "^2.1.2"
1710 | }
1711 | },
1712 | "make-dir": {
1713 | "version": "1.1.0",
1714 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
1715 | "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
1716 | "dev": true,
1717 | "requires": {
1718 | "pify": "^3.0.0"
1719 | }
1720 | },
1721 | "map-obj": {
1722 | "version": "2.0.0",
1723 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
1724 | "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
1725 | "dev": true
1726 | },
1727 | "mem": {
1728 | "version": "1.1.0",
1729 | "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
1730 | "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
1731 | "dev": true,
1732 | "requires": {
1733 | "mimic-fn": "^1.0.0"
1734 | }
1735 | },
1736 | "meow": {
1737 | "version": "4.0.1",
1738 | "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
1739 | "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
1740 | "dev": true,
1741 | "requires": {
1742 | "camelcase-keys": "^4.0.0",
1743 | "decamelize-keys": "^1.0.0",
1744 | "loud-rejection": "^1.0.0",
1745 | "minimist": "^1.1.3",
1746 | "minimist-options": "^3.0.1",
1747 | "normalize-package-data": "^2.3.4",
1748 | "read-pkg-up": "^3.0.0",
1749 | "redent": "^2.0.0",
1750 | "trim-newlines": "^2.0.0"
1751 | },
1752 | "dependencies": {
1753 | "minimist": {
1754 | "version": "1.2.0",
1755 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1756 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1757 | "dev": true
1758 | },
1759 | "read-pkg-up": {
1760 | "version": "3.0.0",
1761 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
1762 | "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
1763 | "dev": true,
1764 | "requires": {
1765 | "find-up": "^2.0.0",
1766 | "read-pkg": "^3.0.0"
1767 | }
1768 | }
1769 | }
1770 | },
1771 | "mimic-fn": {
1772 | "version": "1.2.0",
1773 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
1774 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
1775 | "dev": true
1776 | },
1777 | "minimatch": {
1778 | "version": "3.0.4",
1779 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1780 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1781 | "dev": true,
1782 | "requires": {
1783 | "brace-expansion": "^1.1.7"
1784 | }
1785 | },
1786 | "minimist": {
1787 | "version": "0.0.8",
1788 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1789 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1790 | "dev": true
1791 | },
1792 | "minimist-options": {
1793 | "version": "3.0.2",
1794 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
1795 | "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
1796 | "dev": true,
1797 | "requires": {
1798 | "arrify": "^1.0.1",
1799 | "is-plain-obj": "^1.1.0"
1800 | }
1801 | },
1802 | "mkdirp": {
1803 | "version": "0.5.1",
1804 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1805 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1806 | "dev": true,
1807 | "requires": {
1808 | "minimist": "0.0.8"
1809 | }
1810 | },
1811 | "modify-values": {
1812 | "version": "1.0.1",
1813 | "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
1814 | "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
1815 | "dev": true
1816 | },
1817 | "moment": {
1818 | "version": "2.22.1",
1819 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz",
1820 | "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==",
1821 | "dev": true
1822 | },
1823 | "mute-stream": {
1824 | "version": "0.0.7",
1825 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
1826 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
1827 | "dev": true
1828 | },
1829 | "normalize-package-data": {
1830 | "version": "2.4.0",
1831 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
1832 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
1833 | "dev": true,
1834 | "requires": {
1835 | "hosted-git-info": "^2.1.4",
1836 | "is-builtin-module": "^1.0.0",
1837 | "semver": "2 || 3 || 4 || 5",
1838 | "validate-npm-package-license": "^3.0.1"
1839 | }
1840 | },
1841 | "npm-run-path": {
1842 | "version": "2.0.2",
1843 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
1844 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
1845 | "dev": true,
1846 | "requires": {
1847 | "path-key": "^2.0.0"
1848 | }
1849 | },
1850 | "npmlog": {
1851 | "version": "4.1.2",
1852 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
1853 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
1854 | "dev": true,
1855 | "requires": {
1856 | "are-we-there-yet": "~1.1.2",
1857 | "console-control-strings": "~1.1.0",
1858 | "gauge": "~2.7.3",
1859 | "set-blocking": "~2.0.0"
1860 | }
1861 | },
1862 | "number-is-nan": {
1863 | "version": "1.0.1",
1864 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1865 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1866 | "dev": true
1867 | },
1868 | "object-assign": {
1869 | "version": "4.1.1",
1870 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1871 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1872 | "dev": true
1873 | },
1874 | "once": {
1875 | "version": "1.4.0",
1876 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1877 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1878 | "dev": true,
1879 | "requires": {
1880 | "wrappy": "1"
1881 | }
1882 | },
1883 | "onetime": {
1884 | "version": "2.0.1",
1885 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
1886 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
1887 | "dev": true,
1888 | "requires": {
1889 | "mimic-fn": "^1.0.0"
1890 | }
1891 | },
1892 | "optimist": {
1893 | "version": "0.6.1",
1894 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1895 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1896 | "dev": true,
1897 | "requires": {
1898 | "minimist": "~0.0.1",
1899 | "wordwrap": "~0.0.2"
1900 | }
1901 | },
1902 | "os-locale": {
1903 | "version": "2.1.0",
1904 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
1905 | "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
1906 | "dev": true,
1907 | "requires": {
1908 | "execa": "^0.7.0",
1909 | "lcid": "^1.0.0",
1910 | "mem": "^1.1.0"
1911 | },
1912 | "dependencies": {
1913 | "execa": {
1914 | "version": "0.7.0",
1915 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
1916 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
1917 | "dev": true,
1918 | "requires": {
1919 | "cross-spawn": "^5.0.1",
1920 | "get-stream": "^3.0.0",
1921 | "is-stream": "^1.1.0",
1922 | "npm-run-path": "^2.0.0",
1923 | "p-finally": "^1.0.0",
1924 | "signal-exit": "^3.0.0",
1925 | "strip-eof": "^1.0.0"
1926 | }
1927 | }
1928 | }
1929 | },
1930 | "os-tmpdir": {
1931 | "version": "1.0.2",
1932 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1933 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1934 | "dev": true
1935 | },
1936 | "p-finally": {
1937 | "version": "1.0.0",
1938 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
1939 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
1940 | "dev": true
1941 | },
1942 | "p-limit": {
1943 | "version": "1.3.0",
1944 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
1945 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
1946 | "dev": true,
1947 | "requires": {
1948 | "p-try": "^1.0.0"
1949 | }
1950 | },
1951 | "p-locate": {
1952 | "version": "2.0.0",
1953 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
1954 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
1955 | "dev": true,
1956 | "requires": {
1957 | "p-limit": "^1.1.0"
1958 | }
1959 | },
1960 | "p-try": {
1961 | "version": "1.0.0",
1962 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
1963 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
1964 | "dev": true
1965 | },
1966 | "package-json": {
1967 | "version": "4.0.1",
1968 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
1969 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
1970 | "dev": true,
1971 | "requires": {
1972 | "got": "^6.7.1",
1973 | "registry-auth-token": "^3.0.1",
1974 | "registry-url": "^3.0.3",
1975 | "semver": "^5.1.0"
1976 | }
1977 | },
1978 | "parse-github-repo-url": {
1979 | "version": "1.4.1",
1980 | "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
1981 | "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
1982 | "dev": true
1983 | },
1984 | "parse-json": {
1985 | "version": "4.0.0",
1986 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1987 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1988 | "dev": true,
1989 | "requires": {
1990 | "error-ex": "^1.3.1",
1991 | "json-parse-better-errors": "^1.0.1"
1992 | }
1993 | },
1994 | "path-dirname": {
1995 | "version": "1.0.2",
1996 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
1997 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
1998 | "dev": true
1999 | },
2000 | "path-exists": {
2001 | "version": "3.0.0",
2002 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2003 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2004 | "dev": true
2005 | },
2006 | "path-is-absolute": {
2007 | "version": "1.0.1",
2008 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2009 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2010 | "dev": true
2011 | },
2012 | "path-key": {
2013 | "version": "2.0.1",
2014 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2015 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
2016 | "dev": true
2017 | },
2018 | "path-type": {
2019 | "version": "3.0.0",
2020 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
2021 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
2022 | "dev": true,
2023 | "requires": {
2024 | "pify": "^3.0.0"
2025 | }
2026 | },
2027 | "pify": {
2028 | "version": "3.0.0",
2029 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
2030 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
2031 | "dev": true
2032 | },
2033 | "pinkie": {
2034 | "version": "2.0.4",
2035 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
2036 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
2037 | "dev": true
2038 | },
2039 | "pinkie-promise": {
2040 | "version": "2.0.1",
2041 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
2042 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
2043 | "dev": true,
2044 | "requires": {
2045 | "pinkie": "^2.0.0"
2046 | }
2047 | },
2048 | "prepend-http": {
2049 | "version": "1.0.4",
2050 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
2051 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
2052 | "dev": true
2053 | },
2054 | "process-nextick-args": {
2055 | "version": "2.0.0",
2056 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
2057 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
2058 | "dev": true
2059 | },
2060 | "pseudomap": {
2061 | "version": "1.0.2",
2062 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
2063 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
2064 | "dev": true
2065 | },
2066 | "q": {
2067 | "version": "1.5.1",
2068 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
2069 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
2070 | "dev": true
2071 | },
2072 | "quick-lru": {
2073 | "version": "1.1.0",
2074 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
2075 | "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
2076 | "dev": true
2077 | },
2078 | "rc": {
2079 | "version": "1.2.8",
2080 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
2081 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
2082 | "dev": true,
2083 | "requires": {
2084 | "deep-extend": "^0.6.0",
2085 | "ini": "~1.3.0",
2086 | "minimist": "^1.2.0",
2087 | "strip-json-comments": "~2.0.1"
2088 | },
2089 | "dependencies": {
2090 | "minimist": {
2091 | "version": "1.2.0",
2092 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2093 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
2094 | "dev": true
2095 | }
2096 | }
2097 | },
2098 | "read-cmd-shim": {
2099 | "version": "1.0.1",
2100 | "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
2101 | "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
2102 | "dev": true,
2103 | "requires": {
2104 | "graceful-fs": "^4.1.2"
2105 | }
2106 | },
2107 | "read-pkg": {
2108 | "version": "3.0.0",
2109 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
2110 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
2111 | "dev": true,
2112 | "requires": {
2113 | "load-json-file": "^4.0.0",
2114 | "normalize-package-data": "^2.3.2",
2115 | "path-type": "^3.0.0"
2116 | }
2117 | },
2118 | "read-pkg-up": {
2119 | "version": "1.0.1",
2120 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
2121 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
2122 | "dev": true,
2123 | "requires": {
2124 | "find-up": "^1.0.0",
2125 | "read-pkg": "^1.0.0"
2126 | },
2127 | "dependencies": {
2128 | "find-up": {
2129 | "version": "1.1.2",
2130 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
2131 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
2132 | "dev": true,
2133 | "requires": {
2134 | "path-exists": "^2.0.0",
2135 | "pinkie-promise": "^2.0.0"
2136 | }
2137 | },
2138 | "load-json-file": {
2139 | "version": "1.1.0",
2140 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
2141 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
2142 | "dev": true,
2143 | "requires": {
2144 | "graceful-fs": "^4.1.2",
2145 | "parse-json": "^2.2.0",
2146 | "pify": "^2.0.0",
2147 | "pinkie-promise": "^2.0.0",
2148 | "strip-bom": "^2.0.0"
2149 | }
2150 | },
2151 | "parse-json": {
2152 | "version": "2.2.0",
2153 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
2154 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
2155 | "dev": true,
2156 | "requires": {
2157 | "error-ex": "^1.2.0"
2158 | }
2159 | },
2160 | "path-exists": {
2161 | "version": "2.1.0",
2162 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
2163 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
2164 | "dev": true,
2165 | "requires": {
2166 | "pinkie-promise": "^2.0.0"
2167 | }
2168 | },
2169 | "path-type": {
2170 | "version": "1.1.0",
2171 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
2172 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
2173 | "dev": true,
2174 | "requires": {
2175 | "graceful-fs": "^4.1.2",
2176 | "pify": "^2.0.0",
2177 | "pinkie-promise": "^2.0.0"
2178 | }
2179 | },
2180 | "pify": {
2181 | "version": "2.3.0",
2182 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2183 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2184 | "dev": true
2185 | },
2186 | "read-pkg": {
2187 | "version": "1.1.0",
2188 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
2189 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
2190 | "dev": true,
2191 | "requires": {
2192 | "load-json-file": "^1.0.0",
2193 | "normalize-package-data": "^2.3.2",
2194 | "path-type": "^1.0.0"
2195 | }
2196 | },
2197 | "strip-bom": {
2198 | "version": "2.0.0",
2199 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
2200 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
2201 | "dev": true,
2202 | "requires": {
2203 | "is-utf8": "^0.2.0"
2204 | }
2205 | }
2206 | }
2207 | },
2208 | "readable-stream": {
2209 | "version": "2.3.6",
2210 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2211 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2212 | "dev": true,
2213 | "requires": {
2214 | "core-util-is": "~1.0.0",
2215 | "inherits": "~2.0.3",
2216 | "isarray": "~1.0.0",
2217 | "process-nextick-args": "~2.0.0",
2218 | "safe-buffer": "~5.1.1",
2219 | "string_decoder": "~1.1.1",
2220 | "util-deprecate": "~1.0.1"
2221 | }
2222 | },
2223 | "redent": {
2224 | "version": "2.0.0",
2225 | "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
2226 | "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
2227 | "dev": true,
2228 | "requires": {
2229 | "indent-string": "^3.0.0",
2230 | "strip-indent": "^2.0.0"
2231 | }
2232 | },
2233 | "registry-auth-token": {
2234 | "version": "3.3.2",
2235 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
2236 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
2237 | "dev": true,
2238 | "requires": {
2239 | "rc": "^1.1.6",
2240 | "safe-buffer": "^5.0.1"
2241 | }
2242 | },
2243 | "registry-url": {
2244 | "version": "3.1.0",
2245 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
2246 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
2247 | "dev": true,
2248 | "requires": {
2249 | "rc": "^1.0.1"
2250 | }
2251 | },
2252 | "repeat-string": {
2253 | "version": "1.6.1",
2254 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2255 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2256 | "dev": true
2257 | },
2258 | "repeating": {
2259 | "version": "2.0.1",
2260 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
2261 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
2262 | "dev": true,
2263 | "requires": {
2264 | "is-finite": "^1.0.0"
2265 | }
2266 | },
2267 | "require-directory": {
2268 | "version": "2.1.1",
2269 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2270 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2271 | "dev": true
2272 | },
2273 | "require-main-filename": {
2274 | "version": "1.0.1",
2275 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
2276 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
2277 | "dev": true
2278 | },
2279 | "restore-cursor": {
2280 | "version": "2.0.0",
2281 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
2282 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
2283 | "dev": true,
2284 | "requires": {
2285 | "onetime": "^2.0.0",
2286 | "signal-exit": "^3.0.2"
2287 | }
2288 | },
2289 | "right-align": {
2290 | "version": "0.1.3",
2291 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
2292 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
2293 | "dev": true,
2294 | "optional": true,
2295 | "requires": {
2296 | "align-text": "^0.1.1"
2297 | }
2298 | },
2299 | "rimraf": {
2300 | "version": "2.6.2",
2301 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
2302 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
2303 | "dev": true,
2304 | "requires": {
2305 | "glob": "^7.0.5"
2306 | }
2307 | },
2308 | "run-async": {
2309 | "version": "2.3.0",
2310 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
2311 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
2312 | "dev": true,
2313 | "requires": {
2314 | "is-promise": "^2.1.0"
2315 | }
2316 | },
2317 | "rx-lite": {
2318 | "version": "4.0.8",
2319 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
2320 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
2321 | "dev": true
2322 | },
2323 | "rx-lite-aggregates": {
2324 | "version": "4.0.8",
2325 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
2326 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
2327 | "dev": true,
2328 | "requires": {
2329 | "rx-lite": "*"
2330 | }
2331 | },
2332 | "safe-buffer": {
2333 | "version": "5.1.2",
2334 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2335 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2336 | "dev": true
2337 | },
2338 | "safer-buffer": {
2339 | "version": "2.1.2",
2340 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2341 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2342 | "dev": true
2343 | },
2344 | "semver": {
2345 | "version": "5.5.0",
2346 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
2347 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
2348 | "dev": true
2349 | },
2350 | "set-blocking": {
2351 | "version": "2.0.0",
2352 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
2353 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
2354 | "dev": true
2355 | },
2356 | "shebang-command": {
2357 | "version": "1.2.0",
2358 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2359 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2360 | "dev": true,
2361 | "requires": {
2362 | "shebang-regex": "^1.0.0"
2363 | }
2364 | },
2365 | "shebang-regex": {
2366 | "version": "1.0.0",
2367 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2368 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2369 | "dev": true
2370 | },
2371 | "signal-exit": {
2372 | "version": "3.0.2",
2373 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
2374 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2375 | "dev": true
2376 | },
2377 | "slash": {
2378 | "version": "1.0.0",
2379 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
2380 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
2381 | "dev": true
2382 | },
2383 | "sort-keys": {
2384 | "version": "2.0.0",
2385 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
2386 | "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
2387 | "dev": true,
2388 | "requires": {
2389 | "is-plain-obj": "^1.0.0"
2390 | }
2391 | },
2392 | "source-map": {
2393 | "version": "0.4.4",
2394 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
2395 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
2396 | "dev": true,
2397 | "requires": {
2398 | "amdefine": ">=0.0.4"
2399 | }
2400 | },
2401 | "spdx-correct": {
2402 | "version": "3.0.0",
2403 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
2404 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
2405 | "dev": true,
2406 | "requires": {
2407 | "spdx-expression-parse": "^3.0.0",
2408 | "spdx-license-ids": "^3.0.0"
2409 | }
2410 | },
2411 | "spdx-exceptions": {
2412 | "version": "2.1.0",
2413 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
2414 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
2415 | "dev": true
2416 | },
2417 | "spdx-expression-parse": {
2418 | "version": "3.0.0",
2419 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
2420 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
2421 | "dev": true,
2422 | "requires": {
2423 | "spdx-exceptions": "^2.1.0",
2424 | "spdx-license-ids": "^3.0.0"
2425 | }
2426 | },
2427 | "spdx-license-ids": {
2428 | "version": "3.0.0",
2429 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
2430 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
2431 | "dev": true
2432 | },
2433 | "split": {
2434 | "version": "1.0.1",
2435 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
2436 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
2437 | "dev": true,
2438 | "requires": {
2439 | "through": "2"
2440 | }
2441 | },
2442 | "split2": {
2443 | "version": "2.2.0",
2444 | "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
2445 | "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
2446 | "dev": true,
2447 | "requires": {
2448 | "through2": "^2.0.2"
2449 | }
2450 | },
2451 | "string-width": {
2452 | "version": "2.1.1",
2453 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
2454 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
2455 | "dev": true,
2456 | "requires": {
2457 | "is-fullwidth-code-point": "^2.0.0",
2458 | "strip-ansi": "^4.0.0"
2459 | },
2460 | "dependencies": {
2461 | "ansi-regex": {
2462 | "version": "3.0.0",
2463 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
2464 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
2465 | "dev": true
2466 | },
2467 | "strip-ansi": {
2468 | "version": "4.0.0",
2469 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
2470 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
2471 | "dev": true,
2472 | "requires": {
2473 | "ansi-regex": "^3.0.0"
2474 | }
2475 | }
2476 | }
2477 | },
2478 | "string_decoder": {
2479 | "version": "1.1.1",
2480 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2481 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2482 | "dev": true,
2483 | "requires": {
2484 | "safe-buffer": "~5.1.0"
2485 | }
2486 | },
2487 | "strip-ansi": {
2488 | "version": "3.0.1",
2489 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2490 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2491 | "dev": true,
2492 | "requires": {
2493 | "ansi-regex": "^2.0.0"
2494 | }
2495 | },
2496 | "strip-bom": {
2497 | "version": "3.0.0",
2498 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2499 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
2500 | "dev": true
2501 | },
2502 | "strip-eof": {
2503 | "version": "1.0.0",
2504 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
2505 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
2506 | "dev": true
2507 | },
2508 | "strip-indent": {
2509 | "version": "2.0.0",
2510 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
2511 | "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
2512 | "dev": true
2513 | },
2514 | "strip-json-comments": {
2515 | "version": "2.0.1",
2516 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
2517 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
2518 | "dev": true
2519 | },
2520 | "strong-log-transformer": {
2521 | "version": "1.0.6",
2522 | "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz",
2523 | "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=",
2524 | "dev": true,
2525 | "requires": {
2526 | "byline": "^5.0.0",
2527 | "duplexer": "^0.1.1",
2528 | "minimist": "^0.1.0",
2529 | "moment": "^2.6.0",
2530 | "through": "^2.3.4"
2531 | },
2532 | "dependencies": {
2533 | "minimist": {
2534 | "version": "0.1.0",
2535 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
2536 | "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
2537 | "dev": true
2538 | }
2539 | }
2540 | },
2541 | "supports-color": {
2542 | "version": "5.4.0",
2543 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
2544 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
2545 | "dev": true,
2546 | "requires": {
2547 | "has-flag": "^3.0.0"
2548 | }
2549 | },
2550 | "temp-dir": {
2551 | "version": "1.0.0",
2552 | "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
2553 | "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
2554 | "dev": true
2555 | },
2556 | "temp-write": {
2557 | "version": "3.4.0",
2558 | "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz",
2559 | "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=",
2560 | "dev": true,
2561 | "requires": {
2562 | "graceful-fs": "^4.1.2",
2563 | "is-stream": "^1.1.0",
2564 | "make-dir": "^1.0.0",
2565 | "pify": "^3.0.0",
2566 | "temp-dir": "^1.0.0",
2567 | "uuid": "^3.0.1"
2568 | },
2569 | "dependencies": {
2570 | "uuid": {
2571 | "version": "3.2.1",
2572 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
2573 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
2574 | "dev": true
2575 | }
2576 | }
2577 | },
2578 | "tempfile": {
2579 | "version": "1.1.1",
2580 | "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
2581 | "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
2582 | "dev": true,
2583 | "requires": {
2584 | "os-tmpdir": "^1.0.0",
2585 | "uuid": "^2.0.1"
2586 | }
2587 | },
2588 | "text-extensions": {
2589 | "version": "1.7.0",
2590 | "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
2591 | "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
2592 | "dev": true
2593 | },
2594 | "through": {
2595 | "version": "2.3.8",
2596 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2597 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2598 | "dev": true
2599 | },
2600 | "through2": {
2601 | "version": "2.0.3",
2602 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
2603 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
2604 | "dev": true,
2605 | "requires": {
2606 | "readable-stream": "^2.1.5",
2607 | "xtend": "~4.0.1"
2608 | }
2609 | },
2610 | "timed-out": {
2611 | "version": "4.0.1",
2612 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
2613 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
2614 | "dev": true
2615 | },
2616 | "tmp": {
2617 | "version": "0.0.33",
2618 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2619 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2620 | "dev": true,
2621 | "requires": {
2622 | "os-tmpdir": "~1.0.2"
2623 | }
2624 | },
2625 | "trim-newlines": {
2626 | "version": "2.0.0",
2627 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
2628 | "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
2629 | "dev": true
2630 | },
2631 | "trim-off-newlines": {
2632 | "version": "1.0.1",
2633 | "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
2634 | "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
2635 | "dev": true
2636 | },
2637 | "typedarray": {
2638 | "version": "0.0.6",
2639 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
2640 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
2641 | "dev": true
2642 | },
2643 | "uglify-js": {
2644 | "version": "2.8.29",
2645 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
2646 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
2647 | "dev": true,
2648 | "optional": true,
2649 | "requires": {
2650 | "source-map": "~0.5.1",
2651 | "uglify-to-browserify": "~1.0.0",
2652 | "yargs": "~3.10.0"
2653 | },
2654 | "dependencies": {
2655 | "source-map": {
2656 | "version": "0.5.7",
2657 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2658 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2659 | "dev": true,
2660 | "optional": true
2661 | },
2662 | "yargs": {
2663 | "version": "3.10.0",
2664 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
2665 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
2666 | "dev": true,
2667 | "optional": true,
2668 | "requires": {
2669 | "camelcase": "^1.0.2",
2670 | "cliui": "^2.1.0",
2671 | "decamelize": "^1.0.0",
2672 | "window-size": "0.1.0"
2673 | }
2674 | }
2675 | }
2676 | },
2677 | "uglify-to-browserify": {
2678 | "version": "1.0.2",
2679 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
2680 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
2681 | "dev": true,
2682 | "optional": true
2683 | },
2684 | "universalify": {
2685 | "version": "0.1.1",
2686 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
2687 | "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
2688 | "dev": true
2689 | },
2690 | "unzip-response": {
2691 | "version": "2.0.1",
2692 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
2693 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
2694 | "dev": true
2695 | },
2696 | "url-parse-lax": {
2697 | "version": "1.0.0",
2698 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
2699 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
2700 | "dev": true,
2701 | "requires": {
2702 | "prepend-http": "^1.0.1"
2703 | }
2704 | },
2705 | "util-deprecate": {
2706 | "version": "1.0.2",
2707 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2708 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2709 | "dev": true
2710 | },
2711 | "uuid": {
2712 | "version": "2.0.3",
2713 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
2714 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
2715 | "dev": true
2716 | },
2717 | "validate-npm-package-license": {
2718 | "version": "3.0.3",
2719 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
2720 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
2721 | "dev": true,
2722 | "requires": {
2723 | "spdx-correct": "^3.0.0",
2724 | "spdx-expression-parse": "^3.0.0"
2725 | }
2726 | },
2727 | "wcwidth": {
2728 | "version": "1.0.1",
2729 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
2730 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
2731 | "dev": true,
2732 | "requires": {
2733 | "defaults": "^1.0.3"
2734 | }
2735 | },
2736 | "which": {
2737 | "version": "1.3.0",
2738 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
2739 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
2740 | "dev": true,
2741 | "requires": {
2742 | "isexe": "^2.0.0"
2743 | }
2744 | },
2745 | "which-module": {
2746 | "version": "2.0.0",
2747 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
2748 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
2749 | "dev": true
2750 | },
2751 | "wide-align": {
2752 | "version": "1.1.2",
2753 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
2754 | "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
2755 | "dev": true,
2756 | "requires": {
2757 | "string-width": "^1.0.2"
2758 | },
2759 | "dependencies": {
2760 | "is-fullwidth-code-point": {
2761 | "version": "1.0.0",
2762 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
2763 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
2764 | "dev": true,
2765 | "requires": {
2766 | "number-is-nan": "^1.0.0"
2767 | }
2768 | },
2769 | "string-width": {
2770 | "version": "1.0.2",
2771 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
2772 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
2773 | "dev": true,
2774 | "requires": {
2775 | "code-point-at": "^1.0.0",
2776 | "is-fullwidth-code-point": "^1.0.0",
2777 | "strip-ansi": "^3.0.0"
2778 | }
2779 | }
2780 | }
2781 | },
2782 | "window-size": {
2783 | "version": "0.1.0",
2784 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
2785 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
2786 | "dev": true,
2787 | "optional": true
2788 | },
2789 | "wordwrap": {
2790 | "version": "0.0.3",
2791 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
2792 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
2793 | "dev": true
2794 | },
2795 | "wrap-ansi": {
2796 | "version": "2.1.0",
2797 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
2798 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
2799 | "dev": true,
2800 | "requires": {
2801 | "string-width": "^1.0.1",
2802 | "strip-ansi": "^3.0.1"
2803 | },
2804 | "dependencies": {
2805 | "is-fullwidth-code-point": {
2806 | "version": "1.0.0",
2807 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
2808 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
2809 | "dev": true,
2810 | "requires": {
2811 | "number-is-nan": "^1.0.0"
2812 | }
2813 | },
2814 | "string-width": {
2815 | "version": "1.0.2",
2816 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
2817 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
2818 | "dev": true,
2819 | "requires": {
2820 | "code-point-at": "^1.0.0",
2821 | "is-fullwidth-code-point": "^1.0.0",
2822 | "strip-ansi": "^3.0.0"
2823 | }
2824 | }
2825 | }
2826 | },
2827 | "wrappy": {
2828 | "version": "1.0.2",
2829 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2830 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2831 | "dev": true
2832 | },
2833 | "write-file-atomic": {
2834 | "version": "2.3.0",
2835 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
2836 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
2837 | "dev": true,
2838 | "requires": {
2839 | "graceful-fs": "^4.1.11",
2840 | "imurmurhash": "^0.1.4",
2841 | "signal-exit": "^3.0.2"
2842 | }
2843 | },
2844 | "write-json-file": {
2845 | "version": "2.3.0",
2846 | "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
2847 | "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
2848 | "dev": true,
2849 | "requires": {
2850 | "detect-indent": "^5.0.0",
2851 | "graceful-fs": "^4.1.2",
2852 | "make-dir": "^1.0.0",
2853 | "pify": "^3.0.0",
2854 | "sort-keys": "^2.0.0",
2855 | "write-file-atomic": "^2.0.0"
2856 | },
2857 | "dependencies": {
2858 | "detect-indent": {
2859 | "version": "5.0.0",
2860 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
2861 | "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
2862 | "dev": true
2863 | }
2864 | }
2865 | },
2866 | "write-pkg": {
2867 | "version": "3.1.0",
2868 | "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.1.0.tgz",
2869 | "integrity": "sha1-AwqZlMyZk9JbTnWp8aGSNgcpHOk=",
2870 | "dev": true,
2871 | "requires": {
2872 | "sort-keys": "^2.0.0",
2873 | "write-json-file": "^2.2.0"
2874 | }
2875 | },
2876 | "xtend": {
2877 | "version": "4.0.1",
2878 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
2879 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2880 | "dev": true
2881 | },
2882 | "y18n": {
2883 | "version": "3.2.1",
2884 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
2885 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
2886 | "dev": true
2887 | },
2888 | "yallist": {
2889 | "version": "2.1.2",
2890 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
2891 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
2892 | "dev": true
2893 | },
2894 | "yargs-parser": {
2895 | "version": "7.0.0",
2896 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
2897 | "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
2898 | "dev": true,
2899 | "requires": {
2900 | "camelcase": "^4.1.0"
2901 | },
2902 | "dependencies": {
2903 | "camelcase": {
2904 | "version": "4.1.0",
2905 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
2906 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
2907 | "dev": true
2908 | }
2909 | }
2910 | }
2911 | }
2912 | }
2913 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation",
3 | "version": "0.0.2",
4 | "description": "Json-Schema documentation project",
5 | "main": "index.js",
6 | "scripts": {
7 | "postinstall": "lerna bootstrap",
8 | "publish:canary": "lerna publish --conventional-commits -c",
9 | "publish": "lerna publish --conventional-commits"
10 | },
11 | "author": "Francois-Guillaume Ribreau (http://fgribreau.com/)",
12 | "license": "MIT",
13 | "dependencies": {},
14 | "repository": {
15 | "type": "git",
16 | "url": "git://github.com/fgribreau/json-schema-documentation.git"
17 | },
18 | "bugs": {
19 | "url": "https://github.com/fgribreau/json-schema-documentation/issues"
20 | },
21 | "homepage": "https://github.com/fgribreau/json-schema-documentation",
22 | "keywords": [
23 | "json-schema",
24 | "documentation",
25 | "json-schema-documentation",
26 | "documentation generator",
27 | "cli"
28 | ],
29 | "devDependencies": {
30 | "lerna": "^2.10.2"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/packages/cli/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5 |
6 |
7 | ## [1.4.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.3.0...v1.4.1) (2018-09-21)
8 |
9 |
10 |
11 |
12 | **Note:** Version bump only for package json-schema-documentation-cli
13 |
14 |
15 | # [1.3.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.1...v1.3.0) (2018-01-03)
16 |
17 |
18 |
19 |
20 | **Note:** Version bump only for package json-schema-documentation-cli
21 |
22 |
23 | ## [1.2.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.0...v1.2.1) (2018-01-02)
24 |
25 |
26 |
27 |
28 | **Note:** Version bump only for package json-schema-documentation-cli
29 |
30 |
31 | # [1.2.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.1.0...v1.2.0) (2018-01-02)
32 |
33 |
34 | ### Features
35 |
36 | * **cli:** support for `filter-regexp` and `mapFilename` ([51009be](https://github.com/fgribreau/json-schema-documentation/commit/51009be))
37 |
38 |
39 |
40 |
41 |
42 | # [1.1.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.4...v1.1.0) (2018-01-02)
43 |
44 |
45 | ### Features
46 |
47 | * **cli:** v1.0 ([26c3b87](https://github.com/fgribreau/json-schema-documentation/commit/26c3b87))
48 |
49 |
50 |
51 |
52 |
53 | ## [0.5.4](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.3...v0.5.4) (2018-01-02)
54 |
55 |
56 | ### Bug Fixes
57 |
58 | * **cli:** use CWD when resolving the path ([95aa600](https://github.com/fgribreau/json-schema-documentation/commit/95aa600))
59 |
60 |
61 |
62 |
63 |
64 | ## [0.5.3](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.2...v0.5.3) (2018-01-02)
65 |
66 |
67 | ### Bug Fixes
68 |
69 | * **cli:** lighter package ([629a8c0](https://github.com/fgribreau/json-schema-documentation/commit/629a8c0))
70 |
71 |
72 |
73 |
74 |
75 | ## [0.5.2](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.1...v0.5.2) (2018-01-02)
76 |
77 |
78 | ### Bug Fixes
79 |
80 | * **cli:** fix wrong path ([bb94432](https://github.com/fgribreau/json-schema-documentation/commit/bb94432))
81 |
82 |
83 |
84 |
85 |
86 | ## [0.5.1](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.0...v0.5.1) (2018-01-02)
87 |
88 |
89 | ### Bug Fixes
90 |
91 | * **cli:** fix wrong path ([937a578](https://github.com/fgribreau/json-schema-documentation/commit/937a578))
92 |
93 |
94 |
95 |
96 |
97 | # [0.5.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.4.0...v0.5.0) (2018-01-02)
98 |
99 |
100 | ### Features
101 |
102 | * **cli:** added CLI ([77f68ab](https://github.com/fgribreau/json-schema-documentation/commit/77f68ab))
103 |
104 |
105 |
106 |
107 |
108 | ## 0.0.2 (2017-12-31)
109 |
110 |
111 |
112 |
113 | **Note:** Version bump only for package json-schema-documentation-cli
114 |
--------------------------------------------------------------------------------
/packages/cli/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8-onbuild
2 | RUN npm install
3 | CMD ["npm", "start"]
4 |
--------------------------------------------------------------------------------
/packages/cli/README.md:
--------------------------------------------------------------------------------
1 | # JSON-Schema documentation generator CLI
2 |
3 | Generate documentation for JSON schemas through a command line interface.
4 |
5 | > ## ❤️ Shameless plug
6 | > - [**Charts, simple as a URL**. No more server-side rendering pain, 1 url = 1 chart](https://image-charts.com)
7 | > - [Looking for a free **Redis GUI**?](http://redsmin.com) [Or for **real-time alerting** & monitoring for Redis?](http://redsmin.com)
8 |
9 |
19 |
20 | ### Install (nodejs)
21 |
22 | ```bash
23 | npm install json-schema-documentation-cli --global
24 | ```
25 |
26 | ```
27 | json-schema-documentation-cli --help
28 |
29 | Options:
30 | --version Show version number [boolean]
31 | --schemas schemas files to document [array] [required]
32 | --theme JSON-schema documentation theme [default: "json-schema-documentation-theme-default"]
33 | --mapFilename Mapping function to change each schema filename [default: "(schema) => slug(schema.$id)"]
34 | --filter-regexp Only keep schemas where $id match the specified regexp [default: ".*"]
35 | --sample JSON-schema sample generator [default: "json-schema-documentation-sample-generator"]
36 | --output Output directory [required]
37 | -h, --help Show help [boolean]
38 |
39 | JSON-Schema documentation generator - https://fgribreau.com
40 |
41 | Missing required arguments: schemas, output
42 | Please provide a `schemas` and a `output` arguments that specify JSON schema files to document and output directory
43 | ```
44 |
45 | ### Basic usage
46 |
47 | Read every json files from `path/to/schemas` and output documentation in the `static` directory.
48 |
49 | ```bash
50 | json-schema-documentation-cli --schemas path/to/schemas/*.json --output ./static
51 | ```
52 |
53 | ### Advanced usage
54 |
55 | Only keep schema where `schema.$id` contains `org.company` and change generated filename to each `schema.$id` value.
56 |
57 | ```bash
58 | json-schema-documentation-cli --schemas path/to/schemas/*.json --output ./static --filter-regexp "org.company" --mapFilename "(schema) => schema.$id"
59 | ```
60 |
61 | ### [Changelog](./CHANGELOG.md)
62 |
--------------------------------------------------------------------------------
/packages/cli/bin/json-schema-documentation-cli:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | require('..');
4 |
--------------------------------------------------------------------------------
/packages/cli/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation-cli",
3 | "version": "1.4.1",
4 | "description": "Generate documentation for JSON schemas through a command line interface",
5 | "main": "src/cli.js",
6 | "scripts": {
7 | "start": "node cli.js",
8 | "test": "jest",
9 | "test:watch": "jest --watch --notify"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git://github.com/fgribreau/json-schema-documentation.git"
14 | },
15 | "bugs": {
16 | "url": "https://github.com/fgribreau/json-schema-documentation/issues"
17 | },
18 | "homepage": "https://github.com/fgribreau/json-schema-documentation",
19 | "keywords": [
20 | "json-schema",
21 | "documentation",
22 | "json-schema-documentation",
23 | "documentation generator",
24 | "cli"
25 | ],
26 | "bin": {
27 | "json-schema-documentation-cli": "./bin/json-schema-documentation-cli"
28 | },
29 | "author": "Francois-Guillaume Ribreau (http://fgribreau.com/)",
30 | "license": "MIT",
31 | "dependencies": {
32 | "json-schema-documentation-generator": "^1.4.1",
33 | "json-schema-documentation-sample-generator": "^1.1.0",
34 | "json-schema-documentation-theme-default": "^1.4.1",
35 | "slug": "^0.9.1",
36 | "yargs": "^10.0.3"
37 | },
38 | "engines": {
39 | "node": ">=8"
40 | },
41 | "publishConfig": {
42 | "access": "public"
43 | },
44 | "devDependencies": {
45 | "jest": "^21.2.1"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/packages/cli/src/cli.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const slug = require('slug');
3 | const generator = require('json-schema-documentation-generator');
4 |
5 | const argv = require('yargs')
6 | .wrap(null) // specify no column limit (no right-align)
7 | .count('Usage: $0 [options]');
8 |
9 | argv
10 | .env('JSON_SCHEMA_DOCUMENTATION_CLI')
11 | .demandOption(
12 | ['schemas', 'output'],
13 | 'Please provide a `schemas` and a `output` arguments that specify JSON schema files to document and output directory'
14 | )
15 | .option('schemas', {
16 | describe: 'schemas files to document',
17 | })
18 | .array('schemas')
19 | .option('theme', {
20 | default: 'json-schema-documentation-theme-default',
21 | describe: 'JSON-schema documentation theme',
22 | coerce: theme => {
23 | try {
24 | return require(theme);
25 | } catch (err) {
26 | if (err.message.toLowerCase().includes('cannot find module')) {
27 | console.error(
28 | '⛔️ Theme "%s" not found or invalid. Please run "npm install %s" ⛔️',
29 | theme,
30 | theme
31 | );
32 | }
33 |
34 | throw err;
35 | }
36 | },
37 | })
38 | .option('mapFilename', {
39 | describe: 'Mapping function to change each schema filename',
40 | default: '(schema) => slug(schema.$id)',
41 | coerce: mapper => {
42 | const vm = require('vm');
43 | return new vm.Script(mapper);
44 | },
45 | })
46 | .option('filter-regexp', {
47 | describe: 'Only keep schemas where $id match the specified regexp',
48 | default: '.*',
49 | coerce: regexp => {
50 | const reg = new RegExp(regexp);
51 | return schema => reg.test(schema.$id);
52 | },
53 | })
54 | .option('sample', {
55 | default: 'json-schema-documentation-sample-generator',
56 | describe: 'JSON-schema sample generator',
57 | coerce: sampleGenerator => {
58 | try {
59 | return require(sampleGenerator);
60 | } catch (err) {
61 | if (err.message.toLowerCase().includes('cannot find module')) {
62 | console.error(
63 | '⛔️ Sample generator module "%s" not found or invalid. Please run "npm install %s" ⛔️',
64 | sampleGenerator,
65 | sampleGenerator
66 | );
67 | }
68 |
69 | throw err;
70 | }
71 | },
72 | })
73 | .option('output', {
74 | describe: 'Output directory',
75 | coerce: outputDirectory => path.resolve(process.cwd(), outputDirectory),
76 | });
77 |
78 | const args = argv
79 | .help()
80 | .alias('h', 'help')
81 | .epilog('JSON-Schema documentation generator - https://fgribreau.com')
82 | .alias('v', 'verbose').argv;
83 |
84 | generator({
85 | input: {
86 | // (required) json-schemas object list
87 | schemas: args.schemas.map(filePath =>
88 | require(path.resolve(process.cwd(), filePath))
89 | ),
90 |
91 | filter: args.filterRegexp,
92 |
93 | // (required) schema sample generator
94 | samples: {
95 | generator: args.sample,
96 | },
97 | },
98 | output: {
99 | // (required) visual theme
100 | theme: args.theme,
101 |
102 | // (optional) theme option
103 | options: {
104 | // (required) override this to specify another generator
105 | directory: {
106 | path: args.output,
107 | mapFilename: args.mapFilename.runInNewContext({
108 | path: path,
109 | slug: slug,
110 | }),
111 | },
112 | },
113 | },
114 | }).then(
115 | () => {
116 | console.log('Documentation generated');
117 | },
118 | err => {
119 | console.error('Could not generate documentation %s', err);
120 | process.exit(1);
121 | }
122 | );
123 |
--------------------------------------------------------------------------------
/packages/generator/.gitignore:
--------------------------------------------------------------------------------
1 | demo/theme-default-full
2 | demo/theme-default-full-test
3 |
--------------------------------------------------------------------------------
/packages/generator/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5 |
6 |
7 | ## [1.4.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.3.0...v1.4.1) (2018-09-21)
8 |
9 |
10 |
11 |
12 | **Note:** Version bump only for package json-schema-documentation-generator
13 |
14 |
15 | # [1.3.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.1...v1.3.0) (2018-01-03)
16 |
17 |
18 | ### Features
19 |
20 | * **json-schema-documentation-generator:** flatten schema ([2d91eac](https://github.com/fgribreau/json-schema-documentation/commit/2d91eac))
21 |
22 |
23 |
24 |
25 |
26 | ## [1.2.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.0...v1.2.1) (2018-01-02)
27 |
28 |
29 |
30 |
31 | **Note:** Version bump only for package json-schema-documentation-generator
32 |
33 |
34 | # [1.1.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.5.4...v1.1.0) (2018-01-02)
35 |
36 |
37 | ### Features
38 |
39 | * **generator:** v1.0 ([89bdd75](https://github.com/FGRibreau/json-schema-documentation/commit/89bdd75))
40 |
41 |
42 |
43 |
44 |
45 | # [0.5.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.4.0...v0.5.0) (2018-01-02)
46 |
47 |
48 | ### Bug Fixes
49 |
50 | * **generator:** improved package.json ([dda055e](https://github.com/FGRibreau/json-schema-documentation/commit/dda055e))
51 |
52 |
53 |
54 |
55 |
56 | # [0.4.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.3.0...v0.4.0) (2017-12-31)
57 |
58 |
59 | ### Bug Fixes
60 |
61 | * **test:** fix snapshot ([aa1a084](https://github.com/FGRibreau/json-schema-documentation/commit/aa1a084))
62 | * **theme:** do not print root schema ([10bf3a8](https://github.com/FGRibreau/json-schema-documentation/commit/10bf3a8))
63 | * **theme:** fix readme ([9002a85](https://github.com/FGRibreau/json-schema-documentation/commit/9002a85))
64 |
65 |
66 | ### Features
67 |
68 | * **theme:** add a `mapFilename` option ([d37395b](https://github.com/FGRibreau/json-schema-documentation/commit/d37395b))
69 | * **theme:** added description ([d9cc55b](https://github.com/FGRibreau/json-schema-documentation/commit/d9cc55b))
70 | * **theme:** humanize jsonPtr ([51f8d67](https://github.com/FGRibreau/json-schema-documentation/commit/51f8d67))
71 | * **theme:** smallest rendering ([6355ce9](https://github.com/FGRibreau/json-schema-documentation/commit/6355ce9))
72 | * **theme:** smallest rendering ([b6e01f4](https://github.com/FGRibreau/json-schema-documentation/commit/b6e01f4))
73 |
74 |
75 |
76 |
77 |
78 | # [0.3.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.2.0...v0.3.0) (2017-12-31)
79 |
80 |
81 | ### Bug Fixes
82 |
83 | * **generator:** add demo folder (with theme default) ([6ac17ca](https://github.com/FGRibreau/json-schema-documentation/commit/6ac17ca))
84 |
85 |
86 | ### Features
87 |
88 | * **generator:** first shot ([5e01e3e](https://github.com/FGRibreau/json-schema-documentation/commit/5e01e3e))
89 |
90 |
91 |
92 |
93 |
94 | ## 0.0.2 (2017-12-31)
95 |
96 |
97 |
98 |
99 | **Note:** Version bump only for package json-schema-documentation-generator
100 |
--------------------------------------------------------------------------------
/packages/generator/README.md:
--------------------------------------------------------------------------------
1 | # JSON-Schema documentation generator
2 |
3 | ## Philosophy
4 |
5 | Unlike many documentation generator we want to delegate as much as possible the logic on the theme side. It might be perceived as quite an unusual move but the direct consequence is that you'll never be limited by an intermediate representation of your raw data.
6 |
7 | Since the raw data will always be a valid JSON-schema (the generator first validate it), the data structure won't change for a defined json-schema draft version and your interface is thus guaranteed.
8 |
9 | > ## ❤️ Shameless plug
10 | > - [**Charts, simple as a URL**. No more server-side rendering pain, 1 url = 1 chart](https://image-charts.com)
11 | > - [Looking for a free **Redis GUI**?](http://redsmin.com) [Or for **real-time alerting** & monitoring for Redis?](http://redsmin.com)
12 |
13 | ## Install
14 |
15 | ```
16 | npm install json-schema-documentation-generator --save
17 | ```
18 |
19 | ## Basic usage
20 |
21 | ```js
22 | // Code below will generate a
23 | const generator = require('json-schema-documentation-generator');
24 |
25 | generator({
26 | input: {
27 | // (required) json-schemas object list
28 | schemas: [require('./my-schema.json'), require('./my-second-schema.json')],
29 |
30 | // (required) schema sample generator
31 | samples: {
32 | generator: require('json-schema-documentation-sample-generator'),
33 | },
34 | },
35 | output: {
36 | // (required) visual theme
37 | theme: require('json-schema-documentation-default-theme'),
38 |
39 | // (optional) theme option
40 | options:{
41 | // (required) override this to specify another generator
42 | directory: {
43 | path: path.resolve(__dirname, 'static'),
44 | },
45 | },
46 | },
47 | }).then(
48 | () => {
49 | console.log('Documentation generated');
50 | },
51 | err => {
52 | console.error('Could not generate documentation %s', err);
53 | }
54 | );
55 | ```
56 |
57 | See [full `option` documentation parameter object](documentation/generator-option.md).
58 |
59 | ## Features
60 |
61 | * [x] schema samples
62 | * [x] theme support
63 |
64 | ## [Changelog](./CHANGELOG.md)
65 |
--------------------------------------------------------------------------------
/packages/generator/__snapshots__/flatten.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`flatten schema 1`] = `
4 | Object {
5 | "$id": "FullTest",
6 | "description": "FullTest-description",
7 | "properties": Object {
8 | "configurations": Object {
9 | "description": "configuration-description",
10 | "items": Object {
11 | "properties": Object {
12 | "endpoint": Object {
13 | "properties": Object {},
14 | "required": Array [
15 | "url",
16 | "method",
17 | "pure",
18 | "parameters",
19 | "ui",
20 | ],
21 | "type": "object",
22 | },
23 | "method": Object {
24 | "enum": Array [
25 | "GET",
26 | "POST",
27 | ],
28 | "type": "string",
29 | },
30 | "version": Object {
31 | "$ref": "defs.json#/definitions/BasicSemVer",
32 | "description": "MAJOR.MINOR.PATCH, see https://semver.org/",
33 | "examples": Array [
34 | "0.0.1",
35 | "1.0.0",
36 | ],
37 | "pattern": "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$",
38 | "title": "Basic Semantic version",
39 | "type": "string",
40 | },
41 | },
42 | "required": Array [
43 | "version",
44 | "endpoint",
45 | ],
46 | "type": "object",
47 | },
48 | "maxItems": 10,
49 | "minItems": 1,
50 | "title": "configuration-object",
51 | "type": "array",
52 | },
53 | },
54 | "required": Array [
55 | "configurations",
56 | ],
57 | "title": "FullTest-title",
58 | "type": "object",
59 | }
60 | `;
61 |
--------------------------------------------------------------------------------
/packages/generator/__snapshots__/generator.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`generate a complete documentation (default configuration) 1`] = `
4 | "# Table of content
5 |
6 | * [http://json-schema.org/draft-06/schema#](httpjson-schemaorgdraft-06schema.md)
7 | * [https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/generator/schemas/generator-option.json](httpsrawgithubusercontentcomfgribreaujson-schema-documentationmasterpackagesgeneratorschemasgenerator-optionjson.md)
8 | * [Person](Person.md)"
9 | `;
10 |
11 | exports[`generate a complete documentation (default configuration) 2`] = `
12 | "# Person
13 |
14 | Describe a person
15 |
16 | ### Example
17 |
18 | \`\`\`json
19 | {
20 | \\"firstName\\": \\"dupont\\",
21 | \\"lastName\\": \\"dupont\\",
22 | \\"age\\": 10
23 | }
24 | \`\`\`
25 |
26 |
27 | ### Documentation
28 |
29 | ### \`.firstName\`
30 |
31 | *Type*: string
32 |
33 | *Example*: \`dupont\`
34 |
35 | ### \`.lastName\`
36 |
37 | *Type*: string
38 |
39 | *Example*: \`dupont\`
40 |
41 | ### \`.age\`
42 |
43 | Age in years
44 |
45 | *Type*: integer
46 |
47 | *Example*: \`10\`"
48 | `;
49 |
50 | exports[`generate a complete documentation (default configuration) 3`] = `
51 | "# Generator \`option\` object
52 |
53 | The generator function only take one object as a parameter
54 |
55 | ### Example
56 |
57 | \`\`\`json
58 | {
59 | \\"input\\": {
60 | \\"schemas\\": [
61 | {}
62 | ],
63 | \\"samples\\": {}
64 | },
65 | \\"output\\": {}
66 | }
67 | \`\`\`
68 |
69 |
70 | ### Documentation
71 |
72 | ### \`.input\`
73 |
74 | **input configuration**
75 |
76 | Define what the generator will use to generate the intermediate representation of schemas
77 |
78 | *Type*: object
79 |
80 | ### \`.input.schemas\`
81 |
82 | **Schemas to generate a documentation for**
83 |
84 | An array of json-schemas object
85 |
86 | *Type*: array
87 |
88 | ### \`.input.schemas[]\`
89 |
90 | *Type*: object
91 |
92 | ### \`.input.schemas[].$id\`
93 |
94 | **schema $id**
95 |
96 | schema.$id is required by json-schema-documentation-generator
97 |
98 | *Type*: string
99 |
100 | ### \`.input.filter\`
101 |
102 | **Filter predicate over schema**
103 |
104 | (schema) => boolean
105 |
106 | ### \`.input.samples\`
107 |
108 | **JSON-Schema Sample configuration**
109 |
110 | *Type*: object
111 |
112 | ### \`.input.samples.generator\`
113 |
114 | **sample generator function**
115 |
116 | ### \`.output\`
117 |
118 | **output configuration**
119 |
120 | Define what the generator will use to generate the representation of schema (a-k-a the documentation) based on the intermediate representation
121 |
122 | *Type*: object
123 |
124 | ### \`.output.theme\`
125 |
126 | **Theme generator**
127 |
128 | Theme generator function to use to generate the documentation. Most of the time you will want to use \`require('json-schema-documentation-theme-default')\` here.
129 |
130 | ### \`.output.options\`
131 |
132 | **Theme options**
133 |
134 | Check out theme documentation to see the available options
135 |
136 | *Type*: object"
137 | `;
138 |
139 | exports[`generate a complete documentation (default configuration) 4`] = `
140 | "# Core schema meta-schema
141 |
142 |
143 |
144 | ### Example
145 |
146 | \`\`\`json
147 | {
148 | \\"examples\\": [
149 | {}
150 | ],
151 | \\"items\\": {},
152 | \\"uniqueItems\\": false,
153 | \\"definitions\\": {},
154 | \\"properties\\": {},
155 | \\"patternProperties\\": {},
156 | \\"type\\": {}
157 | }
158 | \`\`\`
159 |
160 |
161 | ### Documentation
162 |
163 | ### \`definitionsschemaArray\`
164 |
165 | *Type*: array
166 |
167 | *Minimum items*: 1
168 |
169 | ### \`definitionsschemaArray[]\`
170 |
171 | ### \`definitionsnonNegativeInteger\`
172 |
173 | *Type*: integer
174 |
175 | ### \`definitionsnonNegativeIntegerDefault0\`
176 |
177 | ### \`definitionsnonNegativeIntegerDefault0allOf0\`
178 |
179 | ### \`definitionsnonNegativeIntegerDefault0allOf1\`
180 |
181 | ### \`definitionssimpleTypes\`
182 |
183 | *Allowed values*: \`array\` \`boolean\` \`integer\` \`null\` \`number\` \`object\` \`string\`
184 |
185 | ### \`definitionsstringArray\`
186 |
187 | *Type*: array
188 |
189 | ### \`definitionsstringArray[]\`
190 |
191 | *Type*: string
192 |
193 | ### \`.$id\`
194 |
195 | *Type*: string
196 |
197 | ### \`.$schema\`
198 |
199 | *Type*: string
200 |
201 | ### \`.$ref\`
202 |
203 | *Type*: string
204 |
205 | ### \`.title\`
206 |
207 | *Type*: string
208 |
209 | ### \`.description\`
210 |
211 | *Type*: string
212 |
213 | ### \`.default\`
214 |
215 | ### \`.examples\`
216 |
217 | *Type*: array
218 |
219 | ### \`.examples[]\`
220 |
221 | ### \`.multipleOf\`
222 |
223 | *Type*: number
224 |
225 | ### \`.maximum\`
226 |
227 | *Type*: number
228 |
229 | ### \`.exclusiveMaximum\`
230 |
231 | *Type*: number
232 |
233 | ### \`.minimum\`
234 |
235 | *Type*: number
236 |
237 | ### \`.exclusiveMinimum\`
238 |
239 | *Type*: number
240 |
241 | ### \`.maxLength\`
242 |
243 | ### \`.minLength\`
244 |
245 | ### \`.pattern\`
246 |
247 | *Type*: string
248 |
249 | ### \`.additionalItems\`
250 |
251 | ### \`.[]\`
252 |
253 | ### \`.[]anyOf0\`
254 |
255 | ### \`.[]anyOf1\`
256 |
257 | ### \`.[]default\`
258 |
259 | ### \`.maxItems\`
260 |
261 | ### \`.minItems\`
262 |
263 | ### \`.uniqueItems\`
264 |
265 | *Type*: boolean
266 |
267 | ### \`.contains\`
268 |
269 | ### \`.maxProperties\`
270 |
271 | ### \`.minProperties\`
272 |
273 | ### \`.required\`
274 |
275 | ### \`.additionalProperties\`
276 |
277 | ### \`.definitions\`
278 |
279 | *Type*: object
280 |
281 | ### \`.definitionsadditionalProperties\`
282 |
283 | ### \`.definitionsdefault\`
284 |
285 | ### \`..\`
286 |
287 | *Type*: object
288 |
289 | ### \`..additionalProperties\`
290 |
291 | ### \`..default\`
292 |
293 | ### \`.patternProperties\`
294 |
295 | *Type*: object
296 |
297 | ### \`.patternPropertiesadditionalProperties\`
298 |
299 | ### \`.patternPropertiesdefault\`
300 |
301 | ### \`.dependencies\`
302 |
303 | *Type*: object
304 |
305 | ### \`.dependenciesadditionalProperties\`
306 |
307 | ### \`.dependenciesadditionalPropertiesanyOf0\`
308 |
309 | ### \`.dependenciesadditionalPropertiesanyOf1\`
310 |
311 | ### \`.propertyNames\`
312 |
313 | ### \`.const\`
314 |
315 | ### \`.enum\`
316 |
317 | *Type*: array
318 |
319 | *Minimum items*: 1
320 |
321 | ### \`.type\`
322 |
323 | ### \`.typeanyOf0\`
324 |
325 | ### \`.typeanyOf1\`
326 |
327 | *Type*: array
328 |
329 | *Minimum items*: 1
330 |
331 | ### \`.typeanyOf1[]\`
332 |
333 | ### \`.format\`
334 |
335 | *Type*: string
336 |
337 | ### \`.allOf\`
338 |
339 | ### \`.anyOf\`
340 |
341 | ### \`.oneOf\`
342 |
343 | ### \`.not\`
344 |
345 | ### \`default\`"
346 | `;
347 |
348 | exports[`generate a complete documentation (full test) 1`] = `
349 | "# FullTest-title
350 |
351 | FullTest-description
352 |
353 | ### Example
354 |
355 | \`\`\`json
356 | {
357 | \\"configurations\\": [
358 | {
359 | \\"endpoint\\": {}
360 | }
361 | ]
362 | }
363 | \`\`\`
364 |
365 |
366 | ### Documentation
367 |
368 | ### \`.configurations\`
369 |
370 | **configuration-object**
371 |
372 | configuration-description
373 |
374 | *Type*: array
375 |
376 | *Minimum items*: 1
377 |
378 | *Maximum items*: 10
379 |
380 | ### \`.configurations[]\`
381 |
382 | *Type*: object
383 |
384 | ### \`.configurations[].version\`
385 |
386 | **Basic Semantic version**
387 |
388 | MAJOR.MINOR.PATCH, see https://semver.org/
389 |
390 | *Type*: string
391 |
392 | *Pattern*: \`^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\`
393 |
394 | *Examples*: \`0.0.1\` \`1.0.0\`
395 |
396 | ### \`.configurations[].endpoint\`
397 |
398 | *Type*: object
399 |
400 | ### \`.configurations[].method\`
401 |
402 | *Type*: string
403 |
404 | *Allowed values*: \`GET\` \`POST\`"
405 | `;
406 |
407 | exports[`generate a complete documentation (restrict and map filenames) 1`] = `
408 | "# Table of content
409 |
410 | * [https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/generator/schemas/generator-option.json](generator-option.json.md)
411 | * [Person](Person.md)"
412 | `;
413 |
414 | exports[`generate a complete documentation (restrict and map filenames) 2`] = `
415 | "# Person
416 |
417 | Describe a person
418 |
419 | ### Example
420 |
421 | \`\`\`json
422 | {
423 | \\"firstName\\": \\"dupont\\",
424 | \\"lastName\\": \\"dupont\\",
425 | \\"age\\": 10
426 | }
427 | \`\`\`
428 |
429 |
430 | ### Documentation
431 |
432 | ### \`.firstName\`
433 |
434 | *Type*: string
435 |
436 | *Example*: \`dupont\`
437 |
438 | ### \`.lastName\`
439 |
440 | *Type*: string
441 |
442 | *Example*: \`dupont\`
443 |
444 | ### \`.age\`
445 |
446 | Age in years
447 |
448 | *Type*: integer
449 |
450 | *Example*: \`10\`"
451 | `;
452 |
453 | exports[`generate a complete documentation (restrict and map filenames) 3`] = `
454 | "# Generator \`option\` object
455 |
456 | The generator function only take one object as a parameter
457 |
458 | ### Example
459 |
460 | \`\`\`json
461 | {
462 | \\"input\\": {
463 | \\"schemas\\": [
464 | {}
465 | ],
466 | \\"samples\\": {}
467 | },
468 | \\"output\\": {}
469 | }
470 | \`\`\`
471 |
472 |
473 | ### Documentation
474 |
475 | ### \`.input\`
476 |
477 | **input configuration**
478 |
479 | Define what the generator will use to generate the intermediate representation of schemas
480 |
481 | *Type*: object
482 |
483 | ### \`.input.schemas\`
484 |
485 | **Schemas to generate a documentation for**
486 |
487 | An array of json-schemas object
488 |
489 | *Type*: array
490 |
491 | ### \`.input.schemas[]\`
492 |
493 | *Type*: object
494 |
495 | ### \`.input.schemas[].$id\`
496 |
497 | **schema $id**
498 |
499 | schema.$id is required by json-schema-documentation-generator
500 |
501 | *Type*: string
502 |
503 | ### \`.input.filter\`
504 |
505 | **Filter predicate over schema**
506 |
507 | (schema) => boolean
508 |
509 | ### \`.input.samples\`
510 |
511 | **JSON-Schema Sample configuration**
512 |
513 | *Type*: object
514 |
515 | ### \`.input.samples.generator\`
516 |
517 | **sample generator function**
518 |
519 | ### \`.output\`
520 |
521 | **output configuration**
522 |
523 | Define what the generator will use to generate the representation of schema (a-k-a the documentation) based on the intermediate representation
524 |
525 | *Type*: object
526 |
527 | ### \`.output.theme\`
528 |
529 | **Theme generator**
530 |
531 | Theme generator function to use to generate the documentation. Most of the time you will want to use \`require('json-schema-documentation-theme-default')\` here.
532 |
533 | ### \`.output.options\`
534 |
535 | **Theme options**
536 |
537 | Check out theme documentation to see the available options
538 |
539 | *Type*: object"
540 | `;
541 |
542 | exports[`yield an error promise if an empty option object was given 1`] = `
543 | " Invalid options parameter
544 | - should have required property 'input'
545 | - should have required property 'output'"
546 | `;
547 |
548 | exports[`yield an error promise if no option are given 1`] = `
549 | " Invalid options parameter
550 | - should be object"
551 | `;
552 |
553 | exports[`yield error is a schema does not have an id 1`] = `
554 | " Invalid options parameter
555 | - .input.schemas[1] should have required property '$id'"
556 | `;
557 |
--------------------------------------------------------------------------------
/packages/generator/demo/theme-default/Person.md:
--------------------------------------------------------------------------------
1 | # Person
2 |
3 | Describe a person
4 |
5 | ### Example
6 |
7 | ```json
8 | {
9 | "firstName": "dupont",
10 | "lastName": "dupont",
11 | "age": 10
12 | }
13 | ```
14 |
15 |
16 | ### Documentation
17 |
18 | ### `.firstName`
19 |
20 | *Type*: string
21 |
22 | *Example*: `dupont`
23 |
24 | ### `.lastName`
25 |
26 | *Type*: string
27 |
28 | *Example*: `dupont`
29 |
30 | ### `.age`
31 |
32 | Age in years
33 |
34 | *Type*: integer
35 |
36 | *Example*: `10`
--------------------------------------------------------------------------------
/packages/generator/demo/theme-default/README.md:
--------------------------------------------------------------------------------
1 | # Table of content
2 |
3 | * [https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/generator/schemas/generator-option.json](generator-option.json.md)
4 | * [Person](Person.md)
--------------------------------------------------------------------------------
/packages/generator/demo/theme-default/generator-option.json.md:
--------------------------------------------------------------------------------
1 | # Generator `option` object
2 |
3 | The generator function only take one object as a parameter
4 |
5 | ### Example
6 |
7 | ```json
8 | {
9 | "input": {
10 | "schemas": [
11 | {}
12 | ],
13 | "samples": {}
14 | },
15 | "output": {}
16 | }
17 | ```
18 |
19 |
20 | ### Documentation
21 |
22 | ### `.input`
23 |
24 | **input configuration**
25 |
26 | Define what the generator will use to generate the intermediate representation of schemas
27 |
28 | *Type*: object
29 |
30 | ### `.input.schemas`
31 |
32 | **Schemas to generate a documentation for**
33 |
34 | An array of json-schemas object
35 |
36 | *Type*: array
37 |
38 | ### `.input.schemas[]`
39 |
40 | *Type*: object
41 |
42 | ### `.input.schemas[].$id`
43 |
44 | **schema $id**
45 |
46 | schema.$id is required by json-schema-documentation-generator
47 |
48 | *Type*: string
49 |
50 | ### `.input.filter`
51 |
52 | **Filter predicate over schema**
53 |
54 | (schema) => boolean
55 |
56 | ### `.input.samples`
57 |
58 | **JSON-Schema Sample configuration**
59 |
60 | *Type*: object
61 |
62 | ### `.input.samples.generator`
63 |
64 | **sample generator function**
65 |
66 | ### `.output`
67 |
68 | **output configuration**
69 |
70 | Define what the generator will use to generate the representation of schema (a-k-a the documentation) based on the intermediate representation
71 |
72 | *Type*: object
73 |
74 | ### `.output.theme`
75 |
76 | **Theme generator**
77 |
78 | Theme generator function to use to generate the documentation. Most of the time you will want to use `require('json-schema-documentation-theme-default')` here.
79 |
80 | ### `.output.options`
81 |
82 | **Theme options**
83 |
84 | Check out theme documentation to see the available options
85 |
86 | *Type*: object
--------------------------------------------------------------------------------
/packages/generator/documentation/README.md:
--------------------------------------------------------------------------------
1 | # Table of content
2 |
3 | * [https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/generator/schemas/generator-option.json](generator-option.md)
--------------------------------------------------------------------------------
/packages/generator/documentation/generator-option.md:
--------------------------------------------------------------------------------
1 | # Generator `option` object
2 |
3 | The generator function only take one object as a parameter
4 |
5 | ### Example
6 |
7 | ```json
8 | {
9 | "input": {
10 | "schemas": [
11 | {}
12 | ],
13 | "samples": {}
14 | },
15 | "output": {}
16 | }
17 | ```
18 |
19 |
20 | ### Documentation
21 |
22 | ### `.input`
23 |
24 | **input configuration**
25 |
26 | Define what the generator will use to generate the intermediate representation of schemas
27 |
28 | *Type*: object
29 |
30 | ### `.input.schemas`
31 |
32 | **Schemas to generate a documentation for**
33 |
34 | An array of json-schemas object
35 |
36 | *Type*: array
37 |
38 | ### `.input.schemas[]`
39 |
40 |
41 |
42 |
43 |
44 | *Type*: object
45 |
46 | ### `.input.schemas[].$id`
47 |
48 | **schema $id**
49 |
50 | schema.$id is required by json-schema-documentation-generator
51 |
52 | *Type*: string
53 |
54 | ### `.input.filter`
55 |
56 | **Filter predicate over schema**
57 |
58 | (schema) => boolean
59 |
60 | ### `.input.samples`
61 |
62 | **JSON-Schema Sample configuration**
63 |
64 |
65 |
66 | *Type*: object
67 |
68 | ### `.input.samples.generator`
69 |
70 | **sample generator function**
71 |
72 | ### `.output`
73 |
74 | **output configuration**
75 |
76 | Define what the generator will use to generate the representation of schema (a-k-a the documentation) based on the intermediate representation
77 |
78 | *Type*: object
79 |
80 | ### `.output.theme`
81 |
82 | **Theme generator**
83 |
84 | Theme generator function to use to generate the documentation. Most of the time you will want to use `require('json-schema-documentation-theme-default')` here.
85 |
86 | ### `.output.options`
87 |
88 | **Theme options**
89 |
90 | Check out theme documentation to see the available options
91 |
92 | *Type*: object
--------------------------------------------------------------------------------
/packages/generator/errors.js:
--------------------------------------------------------------------------------
1 | const errorEx = require('error-ex');
2 | module.exports = {
3 | InvalidParameter: errorEx('InvalidParameter', {
4 | parameter: errorEx.append('Invalid %s parameter'),
5 | details: {
6 | message: (details, message) => {
7 | return (
8 | message +
9 | '\n' +
10 | details
11 | .map(detail => `- ${detail.dataPath} ${detail.message}`.trim())
12 | .join('\n')
13 | );
14 | },
15 | },
16 | }),
17 | };
18 |
--------------------------------------------------------------------------------
/packages/generator/fixtures/defs.json:
--------------------------------------------------------------------------------
1 | {
2 | "$id": "defs.json",
3 | "definitions": {
4 | "Ident": {
5 | "type": "string",
6 | "pattern": "^[a-z-]+$",
7 | "minLength": 3,
8 | "maxLength": 50
9 | },
10 | "LabelValue": {
11 | "type": "string",
12 | "minLength": 3,
13 | "maxLength": 50
14 | },
15 | "BasicSemVer": {
16 | "type": "string",
17 | "title": "Basic Semantic version",
18 | "description": "MAJOR.MINOR.PATCH, see https://semver.org/",
19 | "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
20 | "examples": ["0.0.1", "1.0.0"]
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/packages/generator/fixtures/sample-without-id.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Person",
3 | "type": "object",
4 | "properties": {
5 | "firstName": {
6 | "type": "string"
7 | },
8 | "lastName": {
9 | "type": "string"
10 | },
11 | "age": {
12 | "description": "Age in years",
13 | "type": "integer",
14 | "minimum": 0
15 | }
16 | },
17 | "required": ["firstName", "lastName"]
18 | }
19 |
--------------------------------------------------------------------------------
/packages/generator/fixtures/sample.json:
--------------------------------------------------------------------------------
1 | {
2 | "$id": "Person",
3 | "title": "Person",
4 | "description": "Describe a person",
5 | "type": "object",
6 | "properties": {
7 | "firstName": {
8 | "type": "string",
9 | "example": "dupont"
10 | },
11 | "lastName": {
12 | "type": "string",
13 | "example": "dupont"
14 | },
15 | "age": {
16 | "description": "Age in years",
17 | "type": "integer",
18 | "minimum": 0,
19 | "example": 10
20 | }
21 | },
22 | "required": ["firstName", "lastName"]
23 | }
24 |
--------------------------------------------------------------------------------
/packages/generator/fixtures/test.json:
--------------------------------------------------------------------------------
1 | {
2 | "$id": "FullTest",
3 | "title": "FullTest-title",
4 | "description": "FullTest-description",
5 | "type": "object",
6 | "properties": {
7 | "configurations": {
8 | "type": "array",
9 | "minItems": 1,
10 | "maxItems": 10,
11 | "title": "configuration-object",
12 | "description": "configuration-description",
13 | "items": {
14 | "type": "object",
15 | "required": ["version", "endpoint"],
16 | "properties": {
17 | "version": {
18 | "$ref": "defs.json#/definitions/BasicSemVer"
19 | },
20 | "endpoint": {
21 | "type": "object",
22 | "required": ["url", "method", "pure", "parameters", "ui"],
23 | "properties": {}
24 | },
25 | "method": {
26 | "type": "string",
27 | "enum": ["GET", "POST"]
28 | }
29 | }
30 | }
31 | }
32 | },
33 | "required": ["configurations"]
34 | }
35 |
--------------------------------------------------------------------------------
/packages/generator/flatten.js:
--------------------------------------------------------------------------------
1 | const assert = require('assert');
2 | const ptr = require('json-ptr');
3 | const cloneDeep = require('lodash/cloneDeep');
4 | const extend = require('lodash/extend');
5 | const traverse = require('json-schema-traverse');
6 |
7 | // Flatten a json-schema
8 | module.exports = getSchemaResult => {
9 | assert(getSchemaResult.schema);
10 | assert(getSchemaResult.refs);
11 | assert(getSchemaResult.refVal);
12 |
13 | const { schema: schemaRaw, refs, refVal } = getSchemaResult;
14 |
15 | const schema = cloneDeep(schemaRaw);
16 |
17 | traverse(
18 | schema,
19 | { allKeys: true },
20 | (
21 | schema,
22 | jsonPtr,
23 | rootSchema,
24 | parentJsonPtr,
25 | parentKeyword,
26 | parentSchema,
27 | keyIndex
28 | ) => {
29 | if (!jsonPtr) {
30 | // root
31 | return;
32 | }
33 |
34 | if (schema.$ref) {
35 | ptr.set(
36 | rootSchema,
37 | jsonPtr,
38 | extend({}, schema, refVal[refs[schema.$ref]])
39 | );
40 | }
41 | }
42 | );
43 |
44 | return schema;
45 | };
46 |
--------------------------------------------------------------------------------
/packages/generator/flatten.test.js:
--------------------------------------------------------------------------------
1 | const Ajv = require('ajv');
2 |
3 | test('flatten schema', () => {
4 | expect.assertions(1);
5 |
6 | const flatten = require('./flatten');
7 |
8 | const schemas = new Ajv({
9 | // check all rules collecting all errors. Default is to return after the first error.
10 | allErrors: true,
11 |
12 | // clude the reference to the part of the schema (schema and parentSchema) and validated data in errors (false by default).
13 | verbose: true,
14 |
15 | // validation of other keywords when $ref is present in the schema
16 | extendRefs: 'fail',
17 |
18 | // if the reference cannot be resolved during compilation the exception is thrown
19 | missingRefs: true,
20 |
21 | // check all rules collecting all errors. Default is to return after the first error.
22 | allErrors: true,
23 |
24 | // change data type of data to match type keyword
25 | coerceTypes: false,
26 |
27 | schemas: [require('./fixtures/test.json'), require('./fixtures/defs.json')],
28 | });
29 |
30 | expect(flatten(schemas.getSchema('FullTest'))).toMatchSnapshot();
31 | });
32 |
--------------------------------------------------------------------------------
/packages/generator/generator.js:
--------------------------------------------------------------------------------
1 | // const { defaultsDeep } = require('lodash/defaultsDeep');
2 | const errors = require('./errors');
3 | const curry = require('lodash/curry');
4 | const flatten = require('./flatten');
5 | const Ajv = require('ajv');
6 |
7 | const GeneratorOptionSchema = require('./schemas/generator-option.json');
8 |
9 | const internalSchemas = new Ajv({
10 | // check all rules collecting all errors. Default is to return after the first error.
11 | allErrors: true,
12 | // clude the reference to the part of the schema (schema and parentSchema) and validated data in errors (false by default).
13 | verbose: true,
14 |
15 | // validation of other keywords when $ref is present in the schema
16 | extendRefs: 'fail',
17 |
18 | // check all rules collecting all errors. Default is to return after the first error.
19 | allErrors: true,
20 |
21 | // change data type of data to match type keyword
22 | coerceTypes: false,
23 |
24 | schemas: [GeneratorOptionSchema],
25 | });
26 |
27 | module.exports = options => {
28 | const validationResult = internalSchemas.validate(
29 | GeneratorOptionSchema.$id,
30 | options
31 | );
32 |
33 | if (!validationResult) {
34 | const err = new errors.InvalidParameter();
35 | err.parameter = 'options';
36 | err.details = internalSchemas.errors;
37 | return Promise.reject(err);
38 | }
39 |
40 | const schemas = new Ajv({
41 | // check all rules collecting all errors. Default is to return after the first error.
42 | allErrors: true,
43 |
44 | // clude the reference to the part of the schema (schema and parentSchema) and validated data in errors (false by default).
45 | verbose: true,
46 |
47 | // validation of other keywords when $ref is present in the schema
48 | extendRefs: 'fail',
49 |
50 | // if the reference cannot be resolved during compilation the exception is thrown
51 | missingRefs: true,
52 |
53 | // check all rules collecting all errors. Default is to return after the first error.
54 | allErrors: true,
55 |
56 | // change data type of data to match type keyword
57 | coerceTypes: false,
58 |
59 | schemas: options.input.schemas,
60 | });
61 |
62 | const sampleGenerator = options.input.samples.generator;
63 | const themeGenerator = curry(options.output.theme)(options.output.options);
64 |
65 | return Promise.all(
66 | Object.keys(schemas._schemas)
67 | .map(schema => flatten(schemas.getSchema(schema)))
68 | .filter(options.input.filter || (() => true))
69 | .map(rawSchema =>
70 | sampleGenerator(rawSchema).then(sample => ({
71 | source: rawSchema,
72 | // @todo
73 | documentation: {},
74 | sample: sample,
75 | }))
76 | )
77 | ).then(intermediateRepresentation =>
78 | themeGenerator(intermediateRepresentation)
79 | );
80 | };
81 |
--------------------------------------------------------------------------------
/packages/generator/generator.test.js:
--------------------------------------------------------------------------------
1 | const generator = require('.');
2 | const pathExists = require('path-exists').sync;
3 | const path = require('path');
4 |
5 | test('yield an error promise if no option are given', () => {
6 | expect.assertions(1);
7 | generator().then(
8 | () => {},
9 | err => {
10 | expect(() => {
11 | throw err;
12 | }).toThrowErrorMatchingSnapshot();
13 | }
14 | );
15 | });
16 | test('yield an error promise if an empty option object was given', () => {
17 | expect.assertions(1);
18 | generator({}).then(
19 | () => {},
20 | err => {
21 | expect(() => {
22 | throw err;
23 | }).toThrowErrorMatchingSnapshot();
24 | }
25 | );
26 | });
27 |
28 | test('yield error is a schema does not have an id', () => {
29 | expect.assertions(1);
30 | generator({
31 | input: {
32 | schemas: [
33 | require('./fixtures/sample.json'),
34 | require('./fixtures/sample-without-id.json'),
35 | ],
36 |
37 | samples: {
38 | generator: require('json-schema-documentation-sample-generator'),
39 | },
40 | },
41 | output: {
42 | theme: require('json-schema-documentation-theme-default'),
43 | options: {
44 | directory: {
45 | path: require('path').resolve(__dirname, 'demo'),
46 | },
47 | },
48 | },
49 | }).then(
50 | () => {},
51 | err => {
52 | expect(() => {
53 | throw err;
54 | }).toThrowErrorMatchingSnapshot();
55 | }
56 | );
57 | });
58 |
59 | test('generate a complete documentation (default configuration)', () => {
60 | return generator({
61 | input: {
62 | schemas: [
63 | require('./schemas/generator-option.json'),
64 | require('./fixtures/sample.json'),
65 | ],
66 |
67 | samples: {
68 | generator: require('json-schema-documentation-sample-generator'),
69 | },
70 | },
71 | output: {
72 | theme: require('json-schema-documentation-theme-default'),
73 |
74 | options: {
75 | directory: {
76 | path: require('path').resolve(__dirname, 'demo/theme-default-full'),
77 | },
78 | },
79 | },
80 | }).then(
81 | () => {
82 | expect(
83 | require('fs').readFileSync(
84 | path.resolve(__dirname, 'demo/theme-default-full/README.md'),
85 | 'utf-8'
86 | )
87 | ).toMatchSnapshot();
88 | expect(
89 | require('fs').readFileSync(
90 | path.resolve(__dirname, 'demo/theme-default-full/Person.md'),
91 | 'utf-8'
92 | )
93 | ).toMatchSnapshot();
94 | expect(
95 | require('fs').readFileSync(
96 | path.resolve(
97 | __dirname,
98 | 'demo/theme-default-full/httpsrawgithubusercontentcomfgribreaujson-schema-documentationmasterpackagesgeneratorschemasgenerator-optionjson.md'
99 | ),
100 | 'utf-8'
101 | )
102 | ).toMatchSnapshot();
103 | expect(
104 | require('fs').readFileSync(
105 | path.resolve(
106 | __dirname,
107 | 'demo/theme-default-full/httpjson-schemaorgdraft-06schema.md'
108 | ),
109 | 'utf-8'
110 | )
111 | ).toMatchSnapshot();
112 | },
113 | err => {
114 | throw err;
115 | }
116 | );
117 | });
118 |
119 | test('generate a complete documentation (restrict and map filenames)', () => {
120 | return generator({
121 | input: {
122 | schemas: [
123 | require('./schemas/generator-option.json'),
124 | require('./fixtures/sample.json'),
125 | ],
126 |
127 | filter: schema => {
128 | return !schema.$id.includes('http://json-schema.org/');
129 | },
130 |
131 | samples: {
132 | generator: require('json-schema-documentation-sample-generator'),
133 | },
134 | },
135 | output: {
136 | theme: require('json-schema-documentation-theme-default'),
137 |
138 | options: {
139 | directory: {
140 | path: require('path').resolve(__dirname, 'demo/theme-default'),
141 | mapFilename: schema => require('path').basename(schema.$id),
142 | },
143 | },
144 | },
145 | }).then(
146 | () => {
147 | expect(
148 | require('fs').readFileSync(
149 | path.resolve(__dirname, 'demo/theme-default/README.md'),
150 | 'utf-8'
151 | )
152 | ).toMatchSnapshot();
153 | expect(
154 | require('fs').readFileSync(
155 | path.resolve(__dirname, 'demo/theme-default/Person.md'),
156 | 'utf-8'
157 | )
158 | ).toMatchSnapshot();
159 | expect(
160 | require('fs').readFileSync(
161 | path.resolve(
162 | __dirname,
163 | 'demo/theme-default/generator-option.json.md'
164 | ),
165 | 'utf-8'
166 | )
167 | ).toMatchSnapshot();
168 | expect(
169 | pathExists(
170 | path.resolve(
171 | __dirname,
172 | 'demo/theme-default/packages/generator/demo/theme-default-full/httpjson-schemaorgdraft-06schema.md'
173 | )
174 | )
175 | ).toBe(false);
176 | },
177 | err => {
178 | throw err;
179 | }
180 | );
181 | });
182 |
183 | test('generate a complete documentation (full test)', () => {
184 | return generator({
185 | input: {
186 | schemas: [
187 | require('./fixtures/test.json'),
188 | require('./fixtures/defs.json'),
189 | ],
190 |
191 | filter: schema => {
192 | return (
193 | !schema.$id.includes('http://json-schema.org/') &&
194 | !schema.$id.includes('defs')
195 | );
196 | },
197 |
198 | samples: {
199 | generator: require('json-schema-documentation-sample-generator'),
200 | },
201 | },
202 | output: {
203 | theme: require('json-schema-documentation-theme-default'),
204 |
205 | options: {
206 | directory: {
207 | path: require('path').resolve(
208 | __dirname,
209 | 'demo/theme-default-full-test'
210 | ),
211 | mapFilename: schema => require('path').basename(schema.$id),
212 | },
213 | },
214 | },
215 | }).then(
216 | () => {
217 | expect(
218 | require('fs').readFileSync(
219 | path.resolve(__dirname, 'demo/theme-default-full-test/FullTest.md'),
220 | 'utf-8'
221 | )
222 | ).toMatchSnapshot();
223 | },
224 | err => {
225 | throw err;
226 | }
227 | );
228 | });
229 |
--------------------------------------------------------------------------------
/packages/generator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation-generator",
3 | "version": "1.4.1",
4 | "description": "Json-Schema documentation generator",
5 | "main": "generator.js",
6 | "scripts": {
7 | "prepublish": "npm run --silent documentation:generate",
8 | "test": "jest",
9 | "test:watch": "jest --watch --notify",
10 | "test:coverage": "jest --coverage",
11 | "documentation:generate": "json-schema-documentation-cli --schemas schemas/*.json --filter-regexp json-schema-documentation --output documentation --mapFilename '(schema) => path.basename(schema.$id, `.json`)'"
12 | },
13 | "author": "Francois-Guillaume Ribreau (http://fgribreau.com/)",
14 | "license": "MIT",
15 | "dependencies": {
16 | "ajv": "^5.5.0",
17 | "common-env": "^6.1.0",
18 | "error-ex": "^1.3.1",
19 | "json-ptr": "^1.1.0",
20 | "json-schema-documentation-theme-default": "^1.4.1",
21 | "json-schema-traverse": "^0.4.1",
22 | "lodash": "^4.17.4"
23 | },
24 | "bugs": {
25 | "url": "https://github.com/fgribreau/json-schema-documentation/issues"
26 | },
27 | "repository": {
28 | "type": "git",
29 | "url": "git://github.com/fgribreau/json-schema-documentation.git"
30 | },
31 | "homepage": "https://github.com/fgribreau/json-schema-documentation",
32 | "keywords": [
33 | "json-schema",
34 | "documentation",
35 | "json-schema-documentation",
36 | "documentation generator"
37 | ],
38 | "publishConfig": {
39 | "access": "public"
40 | },
41 | "devDependencies": {
42 | "jest": "^21.2.1",
43 | "json-schema-documentation-cli": "^1.4.1",
44 | "json-schema-documentation-sample-generator": "1.*.*",
45 | "json-schema-documentation-theme-default": "^1.4.1",
46 | "path-exists": "^3.0.0"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/packages/generator/package.test.js:
--------------------------------------------------------------------------------
1 | test('package should expose a generator function', () => {
2 | expect(require('.')).toBeInstanceOf(Function);
3 | });
4 |
--------------------------------------------------------------------------------
/packages/generator/schemas/generator-option.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-06/schema",
3 | "$id":
4 | "https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/generator/schemas/generator-option.json",
5 | "type": "object",
6 | "title": "Generator `option` object",
7 | "description": "The generator function only take one object as a parameter",
8 | "required": ["input", "output"],
9 | "additionalProperties": false,
10 | "properties": {
11 | "input": {
12 | "type": "object",
13 | "title": "input configuration",
14 | "description":
15 | "Define what the generator will use to generate the intermediate representation of schemas",
16 | "required": ["schemas", "samples"],
17 | "additionalProperties": false,
18 | "properties": {
19 | "schemas": {
20 | "type": "array",
21 | "title": "Schemas to generate a documentation for",
22 | "description": "An array of json-schemas object",
23 | "items": {
24 | "type": "object",
25 | "required": ["$id"],
26 | "properties": {
27 | "$id": {
28 | "type": "string",
29 | "title": "schema $id",
30 | "description":
31 | "schema.$id is required by json-schema-documentation-generator"
32 | }
33 | },
34 | "additionalProperties": true
35 | }
36 | },
37 | "filter": {
38 | "title": "Filter predicate over schema",
39 | "description": "(schema) => boolean"
40 | },
41 | "samples": {
42 | "type": "object",
43 | "title": "JSON-Schema Sample configuration",
44 | "description": "",
45 | "required": ["generator"],
46 | "properties": {
47 | "generator": {
48 | "title": "sample generator function",
49 | "additionalProperties": true
50 | }
51 | }
52 | }
53 | }
54 | },
55 | "output": {
56 | "type": "object",
57 | "title": "output configuration",
58 | "description":
59 | "Define what the generator will use to generate the representation of schema (a-k-a the documentation) based on the intermediate representation",
60 | "required": ["theme", "options"],
61 | "additionalProperties": false,
62 | "properties": {
63 | "theme": {
64 | "title": "Theme generator",
65 | "description":
66 | "Theme generator function to use to generate the documentation. Most of the time you will want to use `require('json-schema-documentation-theme-default')` here.",
67 | "additionalProperties": true
68 | },
69 | "options": {
70 | "type": "object",
71 | "title": "Theme options",
72 | "description":
73 | "Check out theme documentation to see the available options",
74 | "required": [],
75 | "additionalProperties": true
76 | }
77 | }
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/packages/sample-generator/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5 |
6 |
7 | ## [1.4.2](https://github.com/FGRibreau/json-schema-documentation/compare/v1.4.1...v1.4.2) (2018-09-21)
8 |
9 |
10 |
11 |
12 | **Note:** Version bump only for package json-schema-documentation-sample-generator
13 |
14 |
15 | # [1.1.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.5.4...v1.1.0) (2018-01-02)
16 |
17 |
18 | ### Features
19 |
20 | * **sample-generator:** v1.0 ([7139bd0](https://github.com/FGRibreau/json-schema-documentation/commit/7139bd0))
21 |
22 |
23 |
24 |
25 |
26 | # [0.5.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.4.0...v0.5.0) (2018-01-02)
27 |
28 |
29 | ### Bug Fixes
30 |
31 | * **sample-generator:** improved package.json ([d86b040](https://github.com/FGRibreau/json-schema-documentation/commit/d86b040))
32 |
33 |
34 |
35 |
36 |
37 | ## [0.1.1](https://github.com/FGRibreau/json-schema-documentation/compare/v0.1.0...v0.1.1) (2017-12-31)
38 |
39 |
40 |
41 |
42 | **Note:** Version bump only for package json-schema-documentation-sample-generator
43 |
44 |
45 | # [0.1.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.0.2...v0.1.0) (2017-12-31)
46 |
47 |
48 | ### Features
49 |
50 | * **sample-generator:** first version ([23d6bc5](https://github.com/FGRibreau/json-schema-documentation/commit/23d6bc5))
51 |
--------------------------------------------------------------------------------
/packages/sample-generator/README.md:
--------------------------------------------------------------------------------
1 | # JSON-Schema sample generator
2 |
3 | Based on [json-schema-example-loader](https://github.com/cloudflare/json-schema-example-loader/) (for the current time being) used in [json-schema-documentationgenerator](https://github.com/FGRibreau/json-schema-documentation) project.
4 |
5 | Requires that you put `example` or `default` field in every properties of your json-schema.
6 |
7 | ### Install
8 |
9 | ```
10 | npm install json-schema-documentation-sample-generator --save
11 | ```
12 |
13 | ### Basic usage
14 |
15 | ```js
16 | // Code below will generate a
17 | const sampleGenerator = require('json-schema-documentation-sample-generator');
18 |
19 | sampleGenerator({
20 | title: 'Person',
21 | type: 'object',
22 | properties: {
23 | firstName: {
24 | type: 'string',
25 | example: 'dupont',
26 | },
27 | lastName: {
28 | type: 'string',
29 | example: 'dupont',
30 | },
31 | age: {
32 | description: 'Age in years',
33 | type: 'integer',
34 | minimum: 0,
35 | example: 10,
36 | },
37 | },
38 | required: ['firstName', 'lastName'],
39 | }).then(
40 | output => {
41 | console.log(output);
42 | /*
43 | {
44 | "firstName": "dupont",
45 | "lastName": "dupont",
46 | "age": 10,
47 | }
48 | */
49 | },
50 | err => {
51 | console.error('Could not generate sample %s', err);
52 | }
53 | );
54 | ```
55 |
56 | ### [Changelog](./CHANGELOG.md)
57 |
--------------------------------------------------------------------------------
/packages/sample-generator/__snapshots__/sample-generator.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`should work, yep 1`] = `
4 | Object {
5 | "age": 10,
6 | "firstName": "dupont",
7 | "lastName": "dupont",
8 | }
9 | `;
10 |
--------------------------------------------------------------------------------
/packages/sample-generator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation-sample-generator",
3 | "version": "1.4.2",
4 | "description": "JSON-Schema documentation sample generator (based on json-schema-example-loader)",
5 | "main": "sample-generator.js",
6 | "scripts": {
7 | "test": "jest",
8 | "test:watch": "jest --watch --notify"
9 | },
10 | "author": "Francois-Guillaume Ribreau (http://fgribreau.com/)",
11 | "license": "MIT",
12 | "publishConfig": {
13 | "access": "public"
14 | },
15 | "devDependencies": {
16 | "jest": "^21.2.1"
17 | },
18 | "bugs": {
19 | "url": "https://github.com/fgribreau/json-schema-documentation/issues"
20 | },
21 | "homepage": "https://github.com/fgribreau/json-schema-documentation",
22 | "keywords": [
23 | "json-schema",
24 | "documentation",
25 | "json-schema-documentation",
26 | "documentation generator"
27 | ],
28 | "dependencies": {
29 | "json-schema-example-loader": "^3.0.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/packages/sample-generator/package.test.js:
--------------------------------------------------------------------------------
1 | test('package should expose a generator function', () => {
2 | expect(require('.')).toBeInstanceOf(Function);
3 | });
4 |
--------------------------------------------------------------------------------
/packages/sample-generator/sample-generator.js:
--------------------------------------------------------------------------------
1 | const ExampleDataExtractor = require('json-schema-example-loader/lib/example-data-extractor');
2 |
3 | /**
4 | *
5 | * @param {Object} jsonSchema json-schema to generate a sample for
6 | * @return {Promise} promise with sample object
7 | */
8 | module.exports = jsonSchema => {
9 | let res;
10 | try {
11 | res = ExampleDataExtractor.extract(jsonSchema, jsonSchema);
12 | } catch (err) {
13 | return Promise.reject(err);
14 | }
15 |
16 | return Promise.resolve(res);
17 | };
18 |
--------------------------------------------------------------------------------
/packages/sample-generator/sample-generator.test.js:
--------------------------------------------------------------------------------
1 | test('should work, yep', () => {
2 | const sampleGenerator = require('.');
3 | const schema = {
4 | title: 'Person',
5 | type: 'object',
6 | properties: {
7 | firstName: {
8 | type: 'string',
9 | example: 'dupont',
10 | },
11 | lastName: {
12 | type: 'string',
13 | example: 'dupont',
14 | },
15 | age: {
16 | description: 'Age in years',
17 | type: 'integer',
18 | minimum: 0,
19 | example: 10,
20 | },
21 | },
22 | required: ['firstName', 'lastName'],
23 | };
24 |
25 | sampleGenerator(schema, schema).then(
26 | result => {
27 | expect(result).toMatchSnapshot();
28 | },
29 | err => {
30 | throw err;
31 | }
32 | );
33 | });
34 |
--------------------------------------------------------------------------------
/packages/theme-default/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5 |
6 |
7 | ## [1.4.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.3.0...v1.4.1) (2018-09-21)
8 |
9 |
10 |
11 |
12 | **Note:** Version bump only for package json-schema-documentation-theme-default
13 |
14 |
15 | # [1.3.0](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.1...v1.3.0) (2018-01-03)
16 |
17 |
18 | ### Features
19 |
20 | * **json-schema-documentation-theme-default:** added support for pattern, examples, minLength, maxLength, minItems, maxItems, enum ([913bbcc](https://github.com/fgribreau/json-schema-documentation/commit/913bbcc))
21 |
22 |
23 |
24 |
25 |
26 | ## [1.2.1](https://github.com/fgribreau/json-schema-documentation/compare/v1.2.0...v1.2.1) (2018-01-02)
27 |
28 |
29 |
30 |
31 | **Note:** Version bump only for package json-schema-documentation-theme-default
32 |
33 |
34 | # [1.1.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.5.4...v1.1.0) (2018-01-02)
35 |
36 |
37 | ### Features
38 |
39 | * **theme-default:** v1.0 ([7c21eaa](https://github.com/fgribreau/json-schema-documentation/commit/7c21eaa))
40 |
41 |
42 |
43 |
44 |
45 | # [0.5.0](https://github.com/fgribreau/json-schema-documentation/compare/v0.4.0...v0.5.0) (2018-01-02)
46 |
47 |
48 | ### Bug Fixes
49 |
50 | * **theme-default:** improved package.json ([9af07f4](https://github.com/fgribreau/json-schema-documentation/commit/9af07f4))
51 |
52 |
53 |
54 |
55 |
56 | # [0.4.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.3.0...v0.4.0) (2017-12-31)
57 |
58 |
59 | ### Bug Fixes
60 |
61 | * **theme:** do not print root schema ([10bf3a8](https://github.com/FGRibreau/json-schema-documentation/commit/10bf3a8))
62 | * **theme:** fix readme ([9002a85](https://github.com/FGRibreau/json-schema-documentation/commit/9002a85))
63 |
64 |
65 | ### Features
66 |
67 | * **theme:** add a `mapFilename` option ([d37395b](https://github.com/FGRibreau/json-schema-documentation/commit/d37395b))
68 | * **theme:** added description ([d9cc55b](https://github.com/FGRibreau/json-schema-documentation/commit/d9cc55b))
69 | * **theme:** humanize jsonPtr ([51f8d67](https://github.com/FGRibreau/json-schema-documentation/commit/51f8d67))
70 | * **theme:** smallest rendering ([6355ce9](https://github.com/FGRibreau/json-schema-documentation/commit/6355ce9))
71 | * **theme:** smallest rendering ([b6e01f4](https://github.com/FGRibreau/json-schema-documentation/commit/b6e01f4))
72 |
73 |
74 |
75 |
76 |
77 | # [0.3.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.2.0...v0.3.0) (2017-12-31)
78 |
79 |
80 | ### Features
81 |
82 | * **theme-default:** init ([ba142b4](https://github.com/FGRibreau/json-schema-documentation/commit/ba142b4))
83 |
84 |
85 |
86 |
87 |
88 | # [0.2.0](https://github.com/FGRibreau/json-schema-documentation/compare/v0.1.1...v0.2.0) (2017-12-31)
89 |
90 |
91 | ### Features
92 |
93 | * **theme:** init ([a8da88c](https://github.com/FGRibreau/json-schema-documentation/commit/a8da88c))
94 |
95 |
96 |
97 |
98 |
99 |
100 | ## 0.0.2 (2017-12-31)
101 |
102 | **Note:** Version bump only for package json-schema-documentation-theme-default
103 |
--------------------------------------------------------------------------------
/packages/theme-default/README.md:
--------------------------------------------------------------------------------
1 | # JSON-Schema documentation generator default theme
2 |
3 | Outputs Markdown files for each schema and a README.md that references them.
4 |
5 | ### Install
6 |
7 | ```
8 | npm install json-schema-documentation-theme-default --save
9 | ```
10 |
11 | See this theme [`option` object](documentation/theme-option.md) that can be specified in the [generator `output.option` field](..generator/documentation/generator-option.md#outputoptions).
12 |
13 | ### [Changelog](./CHANGELOG.md)
14 |
--------------------------------------------------------------------------------
/packages/theme-default/documentation-generator.js:
--------------------------------------------------------------------------------
1 | const compact = require('lodash/compact');
2 | const last = require('lodash/last');
3 | const debug = require('debug')('default-theme:schema');
4 | const traverse = require('json-schema-traverse');
5 | const slug = require('slug');
6 |
7 | module.exports = options => {
8 | const filenameMapper =
9 | options.directory.mapFilename || (schema => slug(schema.$id));
10 |
11 | return ir => {
12 | const { source: schema, documentation, sample } = ir;
13 |
14 | const fileName = `${filenameMapper(schema)}.md`;
15 | debug('Generating File %s', fileName);
16 | return {
17 | name: fileName,
18 | content: `
19 | # ${schema.title || ''}
20 |
21 | ${schema.description || ''}
22 |
23 | ### Example
24 |
25 | \`\`\`json
26 | ${JSON.stringify(sample, null, 2)}
27 | \`\`\`
28 |
29 |
30 | ### Documentation
31 |
32 | ${mapSchemaKeys(schema, toMarkdown).join('\n\n')}
33 |
34 | `.trim(),
35 | raw: ir,
36 | };
37 | };
38 | };
39 |
40 | function reduceSchemaKeys(data, iterator, init) {
41 | traverse(data, { allKeys: true }, (...args) => {
42 | if (!args[1]) {
43 | // root
44 | return init;
45 | }
46 |
47 | init = iterator(init, ...args);
48 | });
49 |
50 | return init;
51 | }
52 |
53 | function mapSchemaKeys(data, iterator) {
54 | return reduceSchemaKeys(
55 | data,
56 | (memo, ...args) => {
57 | memo.push(iterator(...args));
58 | return memo;
59 | },
60 | []
61 | );
62 | }
63 |
64 | function toMarkdown(
65 | schema,
66 | jsonPtr,
67 | rootSchema,
68 | parentJsonPtr,
69 | parentKeyword,
70 | parentSchema,
71 | keyIndex
72 | ) {
73 | console.log('ok', schema);
74 | return `
75 | ### \`${humanizeJsonPtr(jsonPtr)}\`
76 |
77 | ${compact([
78 | iff(schema.title, () => `**${schema.title}**`),
79 | iff(schema.description, () => schema.description),
80 | iff(schema.type, () => `*Type*: ${schema.type}`),
81 | iff(
82 | schema.enum,
83 | () =>
84 | `*Allowed values*: ${schema.enum.map(ex => '`' + ex + '`').join(' ')}`
85 | ),
86 | iff(schema.minItems, () => `*Minimum items*: ${schema.minItems}`),
87 | iff(schema.maxItems, () => `*Maximum items*: ${schema.maxItems}`),
88 | iff(schema.minLength, () => `*Minimum length*: ${schema.minLength}`),
89 | iff(schema.maxLength, () => `*Maximum length*: ${schema.maxLength}`),
90 | iff(schema.minimum, () => `*Minimum*: ${schema.minimum}`),
91 | iff(schema.maximum, () => `*Maximum*: ${schema.maximum}`),
92 | iff(schema.pattern, () => `*Pattern*: \`${schema.pattern}\``),
93 | iff(schema.example, () => `*Example*: \`${schema.example}\``),
94 | iff(
95 | schema.examples,
96 | () => `*Examples*: ${schema.examples.map(ex => '`' + ex + '`').join(' ')}`
97 | ),
98 | ]).join('\n\n')}
99 | `.trim();
100 | }
101 |
102 | function iff(v, f) {
103 | if (!v) {
104 | return '';
105 | }
106 |
107 | return f();
108 | }
109 |
110 | function humanizeJsonPtr(ptr) {
111 | return ptr
112 | .split('/')
113 | .map(x => (x === 'properties' ? '.' : x === 'items' ? '[]' : x))
114 | .join('');
115 | }
116 |
--------------------------------------------------------------------------------
/packages/theme-default/documentation/README.md:
--------------------------------------------------------------------------------
1 | # Table of content
2 |
3 | * [https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/theme-defaumt/schemas/theme-option.json](theme-option.md)
--------------------------------------------------------------------------------
/packages/theme-default/documentation/theme-option.md:
--------------------------------------------------------------------------------
1 | # theme option object
2 |
3 | The theme generator function only take one object as a parameter
4 |
5 | ### Example
6 |
7 | ```json
8 | {
9 | "directory": {
10 | "path": "static/",
11 | "mapFilename": "(schema) => slug(schema.$id)"
12 | }
13 | }
14 | ```
15 |
16 |
17 | ### Documentation
18 |
19 | ### `.directory`
20 |
21 | **Output directory configuration**
22 |
23 |
24 |
25 | *Type*: object
26 |
27 | ### `.directory.path`
28 |
29 | **Output directory path**
30 |
31 |
32 |
33 | *Type*: string
34 |
35 |
36 |
37 |
38 |
39 | *Example*: static/
40 |
41 | ### `.directory.mapFilename`
42 |
43 | **Filename Mapper**
44 |
45 | Function that takes a schema and yield a filename without the extension.
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | *Example*: (schema) => slug(schema.$id)
--------------------------------------------------------------------------------
/packages/theme-default/errors.js:
--------------------------------------------------------------------------------
1 | const errorEx = require('error-ex');
2 | module.exports = {
3 | InvalidParameter: errorEx('InvalidParameter', {
4 | parameter: errorEx.append('Invalid %s parameter'),
5 | details: {
6 | message: (details, message) => {
7 | return (
8 | message +
9 | '\n' +
10 | details
11 | .map(detail => `- ${detail.dataPath} ${detail.message}`.trim())
12 | .join('\n')
13 | );
14 | },
15 | },
16 | }),
17 | };
18 |
--------------------------------------------------------------------------------
/packages/theme-default/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "json-schema-documentation-theme-default",
3 | "version": "1.4.1",
4 | "description": "Json-Schema documentation default theme",
5 | "main": "theme.js",
6 | "scripts": {
7 | "test": "jest",
8 | "test:watch": "jest --watch --notify",
9 | "documentation:generate": "json-schema-documentation-cli --schemas schemas/*.json --filter-regexp json-schema-documentation --output documentation --mapFilename '(schema) => path.basename(schema.$id, `.json`)'"
10 | },
11 | "author": "Francois-Guillaume Ribreau (http://fgribreau.com/)",
12 | "license": "MIT",
13 | "repository": {
14 | "type": "git",
15 | "url": "git://github.com/fgribreau/json-schema-documentation.git"
16 | },
17 | "bugs": {
18 | "url": "https://github.com/fgribreau/json-schema-documentation/issues"
19 | },
20 | "homepage": "https://github.com/fgribreau/json-schema-documentation",
21 | "keywords": [
22 | "json-schema",
23 | "documentation",
24 | "json-schema-documentation",
25 | "documentation generator"
26 | ],
27 | "publishConfig": {
28 | "access": "public"
29 | },
30 | "devDependencies": {
31 | "jest": "^21.2.1",
32 | "json-schema-documentation-cli": "^1.4.1"
33 | },
34 | "dependencies": {
35 | "ajv": "^5.5.0",
36 | "debug": "^3.1.0",
37 | "error-ex": "^1.3.1",
38 | "json-schema-traverse": "^0.3.1",
39 | "slug": "^0.9.1",
40 | "write": "^1.0.3"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/packages/theme-default/package.test.js:
--------------------------------------------------------------------------------
1 | test('package should expose a generator function', () => {
2 | expect(require('.')).toBeInstanceOf(Function);
3 | });
4 |
--------------------------------------------------------------------------------
/packages/theme-default/readme-generator.js:
--------------------------------------------------------------------------------
1 | const debug = require('debug')('default-theme:readme');
2 |
3 | module.exports = files => {
4 | debug('Generating README for %s schemas..', files.length);
5 | return {
6 | name: 'README.md',
7 | content: `
8 | # Table of content
9 |
10 | ${files.map(f => `* [${f.raw.source.$id}](${f.name})`).join('\n')}
11 | `.trim(),
12 | raw: {},
13 | };
14 | };
15 |
--------------------------------------------------------------------------------
/packages/theme-default/schemas/theme-option.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-06/schema",
3 | "$id":
4 | "https://raw.githubusercontent.com/fgribreau/json-schema-documentation/master/packages/theme-defaumt/schemas/theme-option.json",
5 | "type": "object",
6 | "title": "theme option object",
7 | "description":
8 | "The theme generator function only take one object as a parameter",
9 | "required": ["directory"],
10 | "additionalProperties": false,
11 | "properties": {
12 | "directory": {
13 | "type": "object",
14 | "title": "Output directory configuration",
15 | "description": "",
16 | "required": ["path"],
17 | "additionalProperties": false,
18 | "properties": {
19 | "path": {
20 | "type": "string",
21 | "title": "Output directory path",
22 | "description": "",
23 | "example": "static/"
24 | },
25 | "mapFilename": {
26 | "title": "Filename Mapper",
27 | "description":
28 | "Function that takes a schema and yield a filename without the extension.",
29 | "example": "(schema) => slug(schema.$id)"
30 | }
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/packages/theme-default/theme.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const debug = require('debug')('default-theme');
3 |
4 | const writer = require('./writer');
5 |
6 | const Ajv = require('ajv');
7 | const errors = require('./errors');
8 |
9 | const ThemeOptionSchema = require('./schemas/theme-option.json');
10 |
11 | const internalSchemas = new Ajv({
12 | // check all rules collecting all errors. Default is to return after the first error.
13 | allErrors: true,
14 | // clude the reference to the part of the schema (schema and parentSchema) and validated data in errors (false by default).
15 | verbose: true,
16 |
17 | // validation of other keywords when $ref is present in the schema
18 | extendRefs: 'fail',
19 |
20 | // check all rules collecting all errors. Default is to return after the first error.
21 | allErrors: true,
22 |
23 | // change data type of data to match type keyword
24 | coerceTypes: false,
25 |
26 | schemas: [ThemeOptionSchema],
27 | });
28 |
29 | module.exports = (options, intermediateRepresentation) => {
30 | const validationResult = internalSchemas.validate(
31 | ThemeOptionSchema.$id,
32 | options
33 | );
34 |
35 | if (!validationResult) {
36 | const err = new errors.InvalidParameter();
37 | err.parameter = 'options';
38 | err.details = internalSchemas.errors;
39 | return Promise.reject(err);
40 | }
41 |
42 | // @todo extract
43 | const documentationGenerator = require('./documentation-generator')(options);
44 | const files = intermediateRepresentation.map(documentationGenerator);
45 |
46 | files.push(require('./readme-generator')(files));
47 |
48 | return writer(files, options.directory);
49 | };
50 |
--------------------------------------------------------------------------------
/packages/theme-default/theme.test.js:
--------------------------------------------------------------------------------
1 | test('should work, yep', () => {
2 | const themeGenerator = require('.');
3 | // todo
4 | });
5 |
--------------------------------------------------------------------------------
/packages/theme-default/writer.js:
--------------------------------------------------------------------------------
1 | const debug = require('debug')('default-theme:writer');
2 | const path = require('path');
3 | const writeFile = require('write');
4 |
5 | module.exports = (files, options) => {
6 | return Promise.all(
7 | files.map(file => {
8 | const filePah = path.resolve(options.path, file.name);
9 | debug('Writing files in %s', filePah);
10 | return writeFile(filePah, file.content);
11 | })
12 | );
13 | };
14 |
--------------------------------------------------------------------------------