├── .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 | ![extra](https://img.shields.io/badge/actively%20maintained-yes-ff69b4.svg?) [![Slack](https://img.shields.io/badge/Slack-Join%20our%20tech%20community-17202A?logo=slack)](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 | * [![NPM version](https://img.shields.io/npm/v/json-schema-documentation-cli.svg)](https://www.npmjs.com/package/json-schema-documentation-cli) [Use the CLI](/packages/cli) 12 | * [![NPM version](https://img.shields.io/npm/v/json-schema-documentation-generator.svg)](https://www.npmjs.com/package/json-schema-documentation-generator) [Use the generator from code](/packages/generator) 13 | * [![NPM version](https://img.shields.io/npm/v/json-schema-documentation-theme-default.svg)](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 | --------------------------------------------------------------------------------