├── .gitignore
├── .npmignore
├── .travis.yml
├── README.md
├── example
├── .babelrc
├── controllers
│ ├── api
│ │ └── posts.js
│ └── home.js
├── middleware
│ └── oauth.js
├── package.json
├── server.js
└── yarn.lock
├── package.json
├── src
├── connect.ts
├── connect
│ └── transfer.ts
├── models
│ ├── controller.ts
│ ├── group_config.ts
│ ├── middleware.ts
│ ├── request_with_torch.ts
│ └── route_config.ts
├── route.ts
├── router.ts
├── routes.ts
├── torch.ts
└── util
│ ├── constrain_path.ts
│ └── trim.ts
├── tests
└── torch.test.ts
├── tsconfig.json
├── tsconfig.test.json
├── tslint.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | node_modules
3 | build
4 | npm-debug.log
5 | /tests/**/*.js
6 | /tests/**/*.js.map
7 | /src/**/*.js
8 | /src/**/*.js.map
9 | /express-torch.d.ts
10 | /coverage/
11 | /.nyc_output/
12 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src/
2 | tests/
3 | typings/
4 | .idea
5 | node_modules
6 | example
7 | npm-debug.log
8 | .babelrc
9 | .travis.yml
10 | build/**/*.ts
11 | tsconfig.json
12 | typings.json
13 | coverage
14 | .nyc_output
15 |
16 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | cache:
3 | directories:
4 | - $HOME/.npm
5 | - $HOME/.yarn-cache
6 | - node_modules
7 | node_js:
8 | - "6"
9 | before_install:
10 | - time npm i -g yarn --cache-min 999999999
11 | install:
12 | - yarn
13 | script:
14 | - npm test
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Express Torch
2 | =====
3 |
4 | [](https://travis-ci.org/JBlaak/Express-Torch)
5 |
6 | Expressive and maintainable routes for Express.js.
7 |
8 | Running the example
9 | -----
10 |
11 | The project includes a simple example rendering a `/` and `/api/posts` endpoint,
12 | you can set it up as follows:
13 |
14 | ```bash
15 | $ cd ./example
16 | $ yarn
17 | $ yarn start
18 | ```
19 |
20 | Now visit `http://localhost:3000` and take a look at `server.js`!
21 |
22 | Usage
23 | -----
24 |
25 | __Basic usage__
26 |
27 | You pass your Express app to Torch, and a callback in which you can
28 | specify your routes.
29 |
30 | ```js
31 | import Express from 'express';
32 | import Torch from 'express-torch';
33 | import HomeController from './controllers/home';
34 |
35 | const app = Express();
36 |
37 | Torch(app, (router) => {
38 | router.get('/', HomeController.index);
39 | });
40 |
41 | //... your other Express logic
42 |
43 | app.listen(3000);
44 | ```
45 |
46 | __Grouping__
47 |
48 | This is where Torch shines, you can register a bunch of routes
49 | that require all parameters of the groups above, such as a `prefix` for
50 | your `/api` routes.
51 |
52 | ```js
53 | import Express from 'express';
54 | import Torch from 'express-torch';
55 | import HomeController from './controllers/home';
56 |
57 | const app = Express();
58 |
59 | Torch(app, (router) => {
60 | router.get('/', HomeController.index);
61 | router.group({prefix: 'api'}, (router) => {
62 | router.get('/posts', HomeController.index);// will evaluate to /api/posts
63 | router.get('/posts/:id', HomeController.show);// will evaluate to /api/posts/:id
64 | });
65 | });
66 |
67 | //... your other Express logic
68 |
69 | app.listen(3000);
70 | ```
71 |
72 | __Middleware__
73 |
74 | Groups have another advantage, you can apply regular Express middleware to them,
75 | so that they stack together without you having to specify them per route
76 |
77 | ```js
78 | import Express from 'express';
79 | import Torch from 'express-torch';
80 | import HomeController from './controllers/home';
81 |
82 | const app = Express();
83 |
84 | Torch(app, (router) => {
85 | router.group({middlware: [Cookies, Session]}, (router) => {
86 | router.get('/', HomeController.index);// Cookies > Session
87 | router.group({middleware: [Throttle]}, (router) => {
88 | router.get('/posts', HomeController.index);// Cookies > Session > Throttle
89 | router.group({middleware: [OAuth, Policy('manage-posts')]}, (router) => {
90 | router.get('/posts/:id', HomeController.show);// Cookies > Session > Throttle > OAuth > Policy('manage-posts')
91 | });
92 | });
93 | });
94 |
95 | //... your other Express logic
96 |
97 | app.listen(3000);
98 | ```
99 |
100 | if you want, you can still apply middleware to a single route
101 |
102 | ```js
103 | import Express from 'express';
104 | import Torch from 'express-torch';
105 | import HomeController from './controllers/home';
106 |
107 | const app = Express();
108 |
109 | Torch(app, (router) => {
110 | router.get('/', {,
111 | middleware: [Auth],
112 | controller: HomeController.index
113 | });
114 | });
115 |
116 | //... your other Express logic
117 |
118 | app.listen(3000);
119 | ```
120 |
121 | __Naming__
122 |
123 | Since urls can be subject to your client's requests you don't want to spread
124 | them all around your application as if they were static. Torch allows you to
125 | add a mapping so that some `name` will map to a path.
126 |
127 | ```js
128 | import Express from 'express';
129 | import Torch from 'express-torch';
130 | import PostsController from './controllers/posts';
131 |
132 | const app = Express();
133 |
134 | const routes = Torch(app, (router) => {
135 | router.group({prefix: '/api'}, function(router) {
136 | router.get('/posts/:id', {,
137 | name: 'api.posts.show',
138 | controller: PostsController.show
139 | });
140 | });
141 | });
142 |
143 | routes.named('api.posts.show', { id: 123 });// will evaluate to /api/posts/123
144 |
145 | //... your other Express logic
146 |
147 | app.listen(3000);
148 |
149 | /**** in ./controllers/posts.js ****/
150 |
151 | {
152 | index: (req, res) => {
153 | req.routes.named('api.posts.show', {id: 123})
154 | }
155 | }
156 | ```
157 |
158 | __Constraints__
159 |
160 | Most of the time we want to constrain our routes their variables, for example an `:id` should in some applications only match a number. Express allows us to use regex inside a route path but those make the route look bloated and hard to read. To still be able to constrain our routes but still keep them readable Torch allows us to define the constraints in an extra method.
161 |
162 | ```js
163 | import Express from 'express';
164 | import Torch from 'express-torch';
165 | import PostsController from './controllers/posts';
166 |
167 | const app = Express();
168 |
169 | const routes = Torch(app, (router) => {
170 | router.group({prefix: '/api'}, function(router) {
171 | router.get('/posts/:id', PostsController.show).where({'id', '(\\d+)'}); // will evaluate to /api/posts/:id(\\d+)
172 | });
173 | });
174 |
175 | //... your other Express logic
176 |
177 | app.listen(3000);
178 | ```
--------------------------------------------------------------------------------
/example/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015"
4 | ]
5 | }
--------------------------------------------------------------------------------
/example/controllers/api/posts.js:
--------------------------------------------------------------------------------
1 | export default {
2 | index: (req, res) => {
3 | res.json([{
4 | id: 1,
5 | content: 'Some story'
6 | }]);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/example/controllers/home.js:
--------------------------------------------------------------------------------
1 | export default {
2 | index: (req, res) => {
3 | res.send('
Hi
');
4 | }
5 | }
--------------------------------------------------------------------------------
/example/middleware/oauth.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This is a basic Express middleware
3 | * @param req
4 | * @param res
5 | * @param next
6 | */
7 | export default function (req, res, next) {
8 | console.log('Hi we\'re checking the authorization header');
9 |
10 | next();
11 | }
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "torch-example",
3 | "version": "0.1.6",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "scripts": {
7 | "start": "cd .. && yarn && npm run-script build && cd ./example && babel-node server.js"
8 | },
9 | "dependencies": {
10 | "babel-cli": "^6.18.0",
11 | "babel-preset-es2015": "^6.18.0",
12 | "express": "^4.14.0"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/example/server.js:
--------------------------------------------------------------------------------
1 | import Express from 'express';
2 | import Torch from '../build/torch'
3 |
4 | import OAuth from './middleware/oauth';
5 |
6 | import HomeController from './controllers/home';
7 | import ApiPostsController from './controllers/api/posts';
8 |
9 | const app = Express();
10 |
11 | Torch(app, (router) => {
12 |
13 | router.get('/', HomeController.index);
14 |
15 | router.group(
16 | {
17 | 'prefix': 'api',
18 | 'middleware': [OAuth]
19 | },
20 | (router) => {
21 |
22 | router.get('posts', ApiPostsController.index);
23 |
24 | }
25 | );
26 |
27 | });
28 |
29 | console.log('Started listening on port 3000');
30 | app.listen(3000);
31 |
--------------------------------------------------------------------------------
/example/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 | abbrev@1:
4 | version "1.0.9"
5 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
6 |
7 | accepts@~1.3.3:
8 | version "1.3.3"
9 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
10 | dependencies:
11 | mime-types "~2.1.11"
12 | negotiator "0.6.1"
13 |
14 | ansi-regex@^2.0.0:
15 | version "2.0.0"
16 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
17 |
18 | ansi-styles@^2.2.1:
19 | version "2.2.1"
20 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
21 |
22 | anymatch@^1.3.0:
23 | version "1.3.0"
24 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
25 | dependencies:
26 | arrify "^1.0.0"
27 | micromatch "^2.1.5"
28 |
29 | aproba@^1.0.3:
30 | version "1.0.4"
31 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
32 |
33 | are-we-there-yet@~1.1.2:
34 | version "1.1.2"
35 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
36 | dependencies:
37 | delegates "^1.0.0"
38 | readable-stream "^2.0.0 || ^1.1.13"
39 |
40 | arr-diff@^2.0.0:
41 | version "2.0.0"
42 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
43 | dependencies:
44 | arr-flatten "^1.0.1"
45 |
46 | arr-flatten@^1.0.1:
47 | version "1.0.1"
48 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
49 |
50 | array-flatten@1.1.1:
51 | version "1.1.1"
52 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
53 |
54 | array-unique@^0.2.1:
55 | version "0.2.1"
56 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
57 |
58 | arrify@^1.0.0:
59 | version "1.0.1"
60 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
61 |
62 | asn1@~0.2.3:
63 | version "0.2.3"
64 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
65 |
66 | assert-plus@^0.2.0:
67 | version "0.2.0"
68 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
69 |
70 | assert-plus@^1.0.0:
71 | version "1.0.0"
72 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
73 |
74 | async-each@^1.0.0:
75 | version "1.0.1"
76 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
77 |
78 | asynckit@^0.4.0:
79 | version "0.4.0"
80 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
81 |
82 | aws-sign2@~0.6.0:
83 | version "0.6.0"
84 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
85 |
86 | aws4@^1.2.1:
87 | version "1.5.0"
88 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
89 |
90 | babel-cli:
91 | version "6.18.0"
92 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186"
93 | dependencies:
94 | babel-core "^6.18.0"
95 | babel-polyfill "^6.16.0"
96 | babel-register "^6.18.0"
97 | babel-runtime "^6.9.0"
98 | commander "^2.8.1"
99 | convert-source-map "^1.1.0"
100 | fs-readdir-recursive "^1.0.0"
101 | glob "^5.0.5"
102 | lodash "^4.2.0"
103 | output-file-sync "^1.1.0"
104 | path-is-absolute "^1.0.0"
105 | slash "^1.0.0"
106 | source-map "^0.5.0"
107 | v8flags "^2.0.10"
108 | optionalDependencies:
109 | chokidar "^1.0.0"
110 |
111 | babel-code-frame@^6.16.0:
112 | version "6.16.0"
113 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de"
114 | dependencies:
115 | chalk "^1.1.0"
116 | esutils "^2.0.2"
117 | js-tokens "^2.0.0"
118 |
119 | babel-core@^6.18.0:
120 | version "6.18.0"
121 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.0.tgz#bb5ce9bc0a956e6e94e2f12d597abb3b0b330deb"
122 | dependencies:
123 | babel-code-frame "^6.16.0"
124 | babel-generator "^6.18.0"
125 | babel-helpers "^6.16.0"
126 | babel-messages "^6.8.0"
127 | babel-register "^6.18.0"
128 | babel-runtime "^6.9.1"
129 | babel-template "^6.16.0"
130 | babel-traverse "^6.18.0"
131 | babel-types "^6.18.0"
132 | babylon "^6.11.0"
133 | convert-source-map "^1.1.0"
134 | debug "^2.1.1"
135 | json5 "^0.5.0"
136 | lodash "^4.2.0"
137 | minimatch "^3.0.2"
138 | path-is-absolute "^1.0.0"
139 | private "^0.1.6"
140 | slash "^1.0.0"
141 | source-map "^0.5.0"
142 |
143 | babel-generator@^6.18.0:
144 | version "6.18.0"
145 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07"
146 | dependencies:
147 | babel-messages "^6.8.0"
148 | babel-runtime "^6.9.0"
149 | babel-types "^6.18.0"
150 | detect-indent "^4.0.0"
151 | jsesc "^1.3.0"
152 | lodash "^4.2.0"
153 | source-map "^0.5.0"
154 |
155 | babel-helper-call-delegate@^6.18.0:
156 | version "6.18.0"
157 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd"
158 | dependencies:
159 | babel-helper-hoist-variables "^6.18.0"
160 | babel-runtime "^6.0.0"
161 | babel-traverse "^6.18.0"
162 | babel-types "^6.18.0"
163 |
164 | babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0:
165 | version "6.18.0"
166 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2"
167 | dependencies:
168 | babel-helper-function-name "^6.18.0"
169 | babel-runtime "^6.9.0"
170 | babel-types "^6.18.0"
171 | lodash "^4.2.0"
172 |
173 | babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0:
174 | version "6.18.0"
175 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6"
176 | dependencies:
177 | babel-helper-get-function-arity "^6.18.0"
178 | babel-runtime "^6.0.0"
179 | babel-template "^6.8.0"
180 | babel-traverse "^6.18.0"
181 | babel-types "^6.18.0"
182 |
183 | babel-helper-get-function-arity@^6.18.0:
184 | version "6.18.0"
185 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24"
186 | dependencies:
187 | babel-runtime "^6.0.0"
188 | babel-types "^6.18.0"
189 |
190 | babel-helper-hoist-variables@^6.18.0:
191 | version "6.18.0"
192 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a"
193 | dependencies:
194 | babel-runtime "^6.0.0"
195 | babel-types "^6.18.0"
196 |
197 | babel-helper-optimise-call-expression@^6.18.0:
198 | version "6.18.0"
199 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f"
200 | dependencies:
201 | babel-runtime "^6.0.0"
202 | babel-types "^6.18.0"
203 |
204 | babel-helper-regex@^6.8.0:
205 | version "6.18.0"
206 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6"
207 | dependencies:
208 | babel-runtime "^6.9.0"
209 | babel-types "^6.18.0"
210 | lodash "^4.2.0"
211 |
212 | babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0:
213 | version "6.18.0"
214 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e"
215 | dependencies:
216 | babel-helper-optimise-call-expression "^6.18.0"
217 | babel-messages "^6.8.0"
218 | babel-runtime "^6.0.0"
219 | babel-template "^6.16.0"
220 | babel-traverse "^6.18.0"
221 | babel-types "^6.18.0"
222 |
223 | babel-helpers@^6.16.0:
224 | version "6.16.0"
225 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
226 | dependencies:
227 | babel-runtime "^6.0.0"
228 | babel-template "^6.16.0"
229 |
230 | babel-messages@^6.8.0:
231 | version "6.8.0"
232 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
233 | dependencies:
234 | babel-runtime "^6.0.0"
235 |
236 | babel-plugin-check-es2015-constants@^6.3.13:
237 | version "6.8.0"
238 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7"
239 | dependencies:
240 | babel-runtime "^6.0.0"
241 |
242 | babel-plugin-transform-es2015-arrow-functions@^6.3.13:
243 | version "6.8.0"
244 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d"
245 | dependencies:
246 | babel-runtime "^6.0.0"
247 |
248 | babel-plugin-transform-es2015-block-scoped-functions@^6.3.13:
249 | version "6.8.0"
250 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d"
251 | dependencies:
252 | babel-runtime "^6.0.0"
253 |
254 | babel-plugin-transform-es2015-block-scoping@^6.18.0:
255 | version "6.18.0"
256 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af"
257 | dependencies:
258 | babel-runtime "^6.9.0"
259 | babel-template "^6.15.0"
260 | babel-traverse "^6.18.0"
261 | babel-types "^6.18.0"
262 | lodash "^4.2.0"
263 |
264 | babel-plugin-transform-es2015-classes@^6.18.0:
265 | version "6.18.0"
266 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9"
267 | dependencies:
268 | babel-helper-define-map "^6.18.0"
269 | babel-helper-function-name "^6.18.0"
270 | babel-helper-optimise-call-expression "^6.18.0"
271 | babel-helper-replace-supers "^6.18.0"
272 | babel-messages "^6.8.0"
273 | babel-runtime "^6.9.0"
274 | babel-template "^6.14.0"
275 | babel-traverse "^6.18.0"
276 | babel-types "^6.18.0"
277 |
278 | babel-plugin-transform-es2015-computed-properties@^6.3.13:
279 | version "6.8.0"
280 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870"
281 | dependencies:
282 | babel-helper-define-map "^6.8.0"
283 | babel-runtime "^6.0.0"
284 | babel-template "^6.8.0"
285 |
286 | babel-plugin-transform-es2015-destructuring@^6.18.0:
287 | version "6.18.0"
288 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.18.0.tgz#a08fb89415ab82058649558bedb7bf8dafa76ba5"
289 | dependencies:
290 | babel-runtime "^6.9.0"
291 |
292 | babel-plugin-transform-es2015-duplicate-keys@^6.6.0:
293 | version "6.8.0"
294 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d"
295 | dependencies:
296 | babel-runtime "^6.0.0"
297 | babel-types "^6.8.0"
298 |
299 | babel-plugin-transform-es2015-for-of@^6.18.0:
300 | version "6.18.0"
301 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70"
302 | dependencies:
303 | babel-runtime "^6.0.0"
304 |
305 | babel-plugin-transform-es2015-function-name@^6.9.0:
306 | version "6.9.0"
307 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719"
308 | dependencies:
309 | babel-helper-function-name "^6.8.0"
310 | babel-runtime "^6.9.0"
311 | babel-types "^6.9.0"
312 |
313 | babel-plugin-transform-es2015-literals@^6.3.13:
314 | version "6.8.0"
315 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468"
316 | dependencies:
317 | babel-runtime "^6.0.0"
318 |
319 | babel-plugin-transform-es2015-modules-amd@^6.18.0:
320 | version "6.18.0"
321 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40"
322 | dependencies:
323 | babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
324 | babel-runtime "^6.0.0"
325 | babel-template "^6.8.0"
326 |
327 | babel-plugin-transform-es2015-modules-commonjs@^6.18.0:
328 | version "6.18.0"
329 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc"
330 | dependencies:
331 | babel-plugin-transform-strict-mode "^6.18.0"
332 | babel-runtime "^6.0.0"
333 | babel-template "^6.16.0"
334 | babel-types "^6.18.0"
335 |
336 | babel-plugin-transform-es2015-modules-systemjs@^6.18.0:
337 | version "6.18.0"
338 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.18.0.tgz#f09294707163edae4d3b3e8bfacecd01d920b7ad"
339 | dependencies:
340 | babel-helper-hoist-variables "^6.18.0"
341 | babel-runtime "^6.11.6"
342 | babel-template "^6.14.0"
343 |
344 | babel-plugin-transform-es2015-modules-umd@^6.18.0:
345 | version "6.18.0"
346 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50"
347 | dependencies:
348 | babel-plugin-transform-es2015-modules-amd "^6.18.0"
349 | babel-runtime "^6.0.0"
350 | babel-template "^6.8.0"
351 |
352 | babel-plugin-transform-es2015-object-super@^6.3.13:
353 | version "6.8.0"
354 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5"
355 | dependencies:
356 | babel-helper-replace-supers "^6.8.0"
357 | babel-runtime "^6.0.0"
358 |
359 | babel-plugin-transform-es2015-parameters@^6.18.0:
360 | version "6.18.0"
361 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1"
362 | dependencies:
363 | babel-helper-call-delegate "^6.18.0"
364 | babel-helper-get-function-arity "^6.18.0"
365 | babel-runtime "^6.9.0"
366 | babel-template "^6.16.0"
367 | babel-traverse "^6.18.0"
368 | babel-types "^6.18.0"
369 |
370 | babel-plugin-transform-es2015-shorthand-properties@^6.18.0:
371 | version "6.18.0"
372 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43"
373 | dependencies:
374 | babel-runtime "^6.0.0"
375 | babel-types "^6.18.0"
376 |
377 | babel-plugin-transform-es2015-spread@^6.3.13:
378 | version "6.8.0"
379 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c"
380 | dependencies:
381 | babel-runtime "^6.0.0"
382 |
383 | babel-plugin-transform-es2015-sticky-regex@^6.3.13:
384 | version "6.8.0"
385 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be"
386 | dependencies:
387 | babel-helper-regex "^6.8.0"
388 | babel-runtime "^6.0.0"
389 | babel-types "^6.8.0"
390 |
391 | babel-plugin-transform-es2015-template-literals@^6.6.0:
392 | version "6.8.0"
393 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b"
394 | dependencies:
395 | babel-runtime "^6.0.0"
396 |
397 | babel-plugin-transform-es2015-typeof-symbol@^6.18.0:
398 | version "6.18.0"
399 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798"
400 | dependencies:
401 | babel-runtime "^6.0.0"
402 |
403 | babel-plugin-transform-es2015-unicode-regex@^6.3.13:
404 | version "6.11.0"
405 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c"
406 | dependencies:
407 | babel-helper-regex "^6.8.0"
408 | babel-runtime "^6.0.0"
409 | regexpu-core "^2.0.0"
410 |
411 | babel-plugin-transform-regenerator@^6.16.0:
412 | version "6.16.1"
413 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59"
414 | dependencies:
415 | babel-runtime "^6.9.0"
416 | babel-types "^6.16.0"
417 | private "~0.1.5"
418 |
419 | babel-plugin-transform-strict-mode@^6.18.0:
420 | version "6.18.0"
421 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d"
422 | dependencies:
423 | babel-runtime "^6.0.0"
424 | babel-types "^6.18.0"
425 |
426 | babel-polyfill@^6.16.0:
427 | version "6.16.0"
428 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422"
429 | dependencies:
430 | babel-runtime "^6.9.1"
431 | core-js "^2.4.0"
432 | regenerator-runtime "^0.9.5"
433 |
434 | babel-preset-es2015:
435 | version "6.18.0"
436 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312"
437 | dependencies:
438 | babel-plugin-check-es2015-constants "^6.3.13"
439 | babel-plugin-transform-es2015-arrow-functions "^6.3.13"
440 | babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
441 | babel-plugin-transform-es2015-block-scoping "^6.18.0"
442 | babel-plugin-transform-es2015-classes "^6.18.0"
443 | babel-plugin-transform-es2015-computed-properties "^6.3.13"
444 | babel-plugin-transform-es2015-destructuring "^6.18.0"
445 | babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
446 | babel-plugin-transform-es2015-for-of "^6.18.0"
447 | babel-plugin-transform-es2015-function-name "^6.9.0"
448 | babel-plugin-transform-es2015-literals "^6.3.13"
449 | babel-plugin-transform-es2015-modules-amd "^6.18.0"
450 | babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
451 | babel-plugin-transform-es2015-modules-systemjs "^6.18.0"
452 | babel-plugin-transform-es2015-modules-umd "^6.18.0"
453 | babel-plugin-transform-es2015-object-super "^6.3.13"
454 | babel-plugin-transform-es2015-parameters "^6.18.0"
455 | babel-plugin-transform-es2015-shorthand-properties "^6.18.0"
456 | babel-plugin-transform-es2015-spread "^6.3.13"
457 | babel-plugin-transform-es2015-sticky-regex "^6.3.13"
458 | babel-plugin-transform-es2015-template-literals "^6.6.0"
459 | babel-plugin-transform-es2015-typeof-symbol "^6.18.0"
460 | babel-plugin-transform-es2015-unicode-regex "^6.3.13"
461 | babel-plugin-transform-regenerator "^6.16.0"
462 |
463 | babel-register@^6.18.0:
464 | version "6.18.0"
465 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68"
466 | dependencies:
467 | babel-core "^6.18.0"
468 | babel-runtime "^6.11.6"
469 | core-js "^2.4.0"
470 | home-or-tmp "^2.0.0"
471 | lodash "^4.2.0"
472 | mkdirp "^0.5.1"
473 | source-map-support "^0.4.2"
474 |
475 | babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.9.0, babel-runtime@^6.9.1:
476 | version "6.18.0"
477 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078"
478 | dependencies:
479 | core-js "^2.4.0"
480 | regenerator-runtime "^0.9.5"
481 |
482 | babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0:
483 | version "6.16.0"
484 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
485 | dependencies:
486 | babel-runtime "^6.9.0"
487 | babel-traverse "^6.16.0"
488 | babel-types "^6.16.0"
489 | babylon "^6.11.0"
490 | lodash "^4.2.0"
491 |
492 | babel-traverse@^6.16.0, babel-traverse@^6.18.0:
493 | version "6.18.0"
494 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e"
495 | dependencies:
496 | babel-code-frame "^6.16.0"
497 | babel-messages "^6.8.0"
498 | babel-runtime "^6.9.0"
499 | babel-types "^6.18.0"
500 | babylon "^6.11.0"
501 | debug "^2.2.0"
502 | globals "^9.0.0"
503 | invariant "^2.2.0"
504 | lodash "^4.2.0"
505 |
506 | babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.8.0, babel-types@^6.9.0:
507 | version "6.18.0"
508 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8"
509 | dependencies:
510 | babel-runtime "^6.9.1"
511 | esutils "^2.0.2"
512 | lodash "^4.2.0"
513 | to-fast-properties "^1.0.1"
514 |
515 | babylon@^6.11.0:
516 | version "6.13.1"
517 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.1.tgz#adca350e088f0467647157652bafead6ddb8dfdb"
518 |
519 | balanced-match@^0.4.1:
520 | version "0.4.2"
521 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
522 |
523 | bcrypt-pbkdf@^1.0.0:
524 | version "1.0.0"
525 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
526 | dependencies:
527 | tweetnacl "^0.14.3"
528 |
529 | binary-extensions@^1.0.0:
530 | version "1.7.0"
531 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d"
532 |
533 | block-stream@*:
534 | version "0.0.9"
535 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
536 | dependencies:
537 | inherits "~2.0.0"
538 |
539 | boom@2.x.x:
540 | version "2.10.1"
541 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
542 | dependencies:
543 | hoek "2.x.x"
544 |
545 | brace-expansion@^1.0.0:
546 | version "1.1.6"
547 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
548 | dependencies:
549 | balanced-match "^0.4.1"
550 | concat-map "0.0.1"
551 |
552 | braces@^1.8.2:
553 | version "1.8.5"
554 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
555 | dependencies:
556 | expand-range "^1.8.1"
557 | preserve "^0.2.0"
558 | repeat-element "^1.1.2"
559 |
560 | buffer-shims@^1.0.0:
561 | version "1.0.0"
562 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
563 |
564 | caseless@~0.11.0:
565 | version "0.11.0"
566 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
567 |
568 | chalk@^1.1.0, chalk@^1.1.1:
569 | version "1.1.3"
570 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
571 | dependencies:
572 | ansi-styles "^2.2.1"
573 | escape-string-regexp "^1.0.2"
574 | has-ansi "^2.0.0"
575 | strip-ansi "^3.0.0"
576 | supports-color "^2.0.0"
577 |
578 | chokidar@^1.0.0:
579 | version "1.6.1"
580 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
581 | dependencies:
582 | anymatch "^1.3.0"
583 | async-each "^1.0.0"
584 | glob-parent "^2.0.0"
585 | inherits "^2.0.1"
586 | is-binary-path "^1.0.0"
587 | is-glob "^2.0.0"
588 | path-is-absolute "^1.0.0"
589 | readdirp "^2.0.0"
590 | optionalDependencies:
591 | fsevents "^1.0.0"
592 |
593 | code-point-at@^1.0.0:
594 | version "1.0.1"
595 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb"
596 | dependencies:
597 | number-is-nan "^1.0.0"
598 |
599 | combined-stream@^1.0.5, combined-stream@~1.0.5:
600 | version "1.0.5"
601 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
602 | dependencies:
603 | delayed-stream "~1.0.0"
604 |
605 | commander@^2.8.1, commander@^2.9.0:
606 | version "2.9.0"
607 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
608 | dependencies:
609 | graceful-readlink ">= 1.0.0"
610 |
611 | concat-map@0.0.1:
612 | version "0.0.1"
613 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
614 |
615 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
616 | version "1.1.0"
617 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
618 |
619 | content-disposition@0.5.1:
620 | version "0.5.1"
621 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
622 |
623 | content-type@~1.0.2:
624 | version "1.0.2"
625 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
626 |
627 | convert-source-map@^1.1.0:
628 | version "1.3.0"
629 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
630 |
631 | cookie-signature@1.0.6:
632 | version "1.0.6"
633 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
634 |
635 | cookie@0.3.1:
636 | version "0.3.1"
637 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
638 |
639 | core-js@^2.4.0:
640 | version "2.4.1"
641 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
642 |
643 | core-util-is@~1.0.0:
644 | version "1.0.2"
645 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
646 |
647 | cryptiles@2.x.x:
648 | version "2.0.5"
649 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
650 | dependencies:
651 | boom "2.x.x"
652 |
653 | dashdash@^1.12.0:
654 | version "1.14.0"
655 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141"
656 | dependencies:
657 | assert-plus "^1.0.0"
658 |
659 | debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
660 | version "2.2.0"
661 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
662 | dependencies:
663 | ms "0.7.1"
664 |
665 | deep-extend@~0.4.0:
666 | version "0.4.1"
667 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
668 |
669 | delayed-stream@~1.0.0:
670 | version "1.0.0"
671 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
672 |
673 | delegates@^1.0.0:
674 | version "1.0.0"
675 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
676 |
677 | depd@~1.1.0:
678 | version "1.1.0"
679 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
680 |
681 | destroy@~1.0.4:
682 | version "1.0.4"
683 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
684 |
685 | detect-indent@^4.0.0:
686 | version "4.0.0"
687 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
688 | dependencies:
689 | repeating "^2.0.0"
690 |
691 | ecc-jsbn@~0.1.1:
692 | version "0.1.1"
693 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
694 | dependencies:
695 | jsbn "~0.1.0"
696 |
697 | ee-first@1.1.1:
698 | version "1.1.1"
699 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
700 |
701 | encodeurl@~1.0.1:
702 | version "1.0.1"
703 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
704 |
705 | escape-html@~1.0.3:
706 | version "1.0.3"
707 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
708 |
709 | escape-string-regexp@^1.0.2:
710 | version "1.0.5"
711 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
712 |
713 | esutils@^2.0.2:
714 | version "2.0.2"
715 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
716 |
717 | etag@~1.7.0:
718 | version "1.7.0"
719 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
720 |
721 | expand-brackets@^0.1.4:
722 | version "0.1.5"
723 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
724 | dependencies:
725 | is-posix-bracket "^0.1.0"
726 |
727 | expand-range@^1.8.1:
728 | version "1.8.2"
729 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
730 | dependencies:
731 | fill-range "^2.1.0"
732 |
733 | express:
734 | version "4.14.0"
735 | resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66"
736 | dependencies:
737 | accepts "~1.3.3"
738 | array-flatten "1.1.1"
739 | content-disposition "0.5.1"
740 | content-type "~1.0.2"
741 | cookie "0.3.1"
742 | cookie-signature "1.0.6"
743 | debug "~2.2.0"
744 | depd "~1.1.0"
745 | encodeurl "~1.0.1"
746 | escape-html "~1.0.3"
747 | etag "~1.7.0"
748 | finalhandler "0.5.0"
749 | fresh "0.3.0"
750 | merge-descriptors "1.0.1"
751 | methods "~1.1.2"
752 | on-finished "~2.3.0"
753 | parseurl "~1.3.1"
754 | path-to-regexp "0.1.7"
755 | proxy-addr "~1.1.2"
756 | qs "6.2.0"
757 | range-parser "~1.2.0"
758 | send "0.14.1"
759 | serve-static "~1.11.1"
760 | type-is "~1.6.13"
761 | utils-merge "1.0.0"
762 | vary "~1.1.0"
763 |
764 | extend@~3.0.0:
765 | version "3.0.0"
766 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
767 |
768 | extglob@^0.3.1:
769 | version "0.3.2"
770 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
771 | dependencies:
772 | is-extglob "^1.0.0"
773 |
774 | extsprintf@1.0.2:
775 | version "1.0.2"
776 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
777 |
778 | filename-regex@^2.0.0:
779 | version "2.0.0"
780 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
781 |
782 | fill-range@^2.1.0:
783 | version "2.2.3"
784 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
785 | dependencies:
786 | is-number "^2.1.0"
787 | isobject "^2.0.0"
788 | randomatic "^1.1.3"
789 | repeat-element "^1.1.2"
790 | repeat-string "^1.5.2"
791 |
792 | finalhandler@0.5.0:
793 | version "0.5.0"
794 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7"
795 | dependencies:
796 | debug "~2.2.0"
797 | escape-html "~1.0.3"
798 | on-finished "~2.3.0"
799 | statuses "~1.3.0"
800 | unpipe "~1.0.0"
801 |
802 | for-in@^0.1.5:
803 | version "0.1.6"
804 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
805 |
806 | for-own@^0.1.4:
807 | version "0.1.4"
808 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
809 | dependencies:
810 | for-in "^0.1.5"
811 |
812 | forever-agent@~0.6.1:
813 | version "0.6.1"
814 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
815 |
816 | form-data@~2.1.1:
817 | version "2.1.1"
818 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.1.tgz#4adf0342e1a79afa1e84c8c320a9ffc82392a1f3"
819 | dependencies:
820 | asynckit "^0.4.0"
821 | combined-stream "^1.0.5"
822 | mime-types "^2.1.12"
823 |
824 | forwarded@~0.1.0:
825 | version "0.1.0"
826 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
827 |
828 | fresh@0.3.0:
829 | version "0.3.0"
830 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
831 |
832 | fs-readdir-recursive@^1.0.0:
833 | version "1.0.0"
834 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560"
835 |
836 | fs.realpath@^1.0.0:
837 | version "1.0.0"
838 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
839 |
840 | fsevents@^1.0.0:
841 | version "1.0.14"
842 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4"
843 | dependencies:
844 | nan "^2.3.0"
845 | node-pre-gyp "^0.6.29"
846 |
847 | fstream-ignore@~1.0.5:
848 | version "1.0.5"
849 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
850 | dependencies:
851 | fstream "^1.0.0"
852 | inherits "2"
853 | minimatch "^3.0.0"
854 |
855 | fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
856 | version "1.0.10"
857 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
858 | dependencies:
859 | graceful-fs "^4.1.2"
860 | inherits "~2.0.0"
861 | mkdirp ">=0.5 0"
862 | rimraf "2"
863 |
864 | gauge@~2.6.0:
865 | version "2.6.0"
866 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46"
867 | dependencies:
868 | aproba "^1.0.3"
869 | console-control-strings "^1.0.0"
870 | has-color "^0.1.7"
871 | has-unicode "^2.0.0"
872 | object-assign "^4.1.0"
873 | signal-exit "^3.0.0"
874 | string-width "^1.0.1"
875 | strip-ansi "^3.0.1"
876 | wide-align "^1.1.0"
877 |
878 | generate-function@^2.0.0:
879 | version "2.0.0"
880 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
881 |
882 | generate-object-property@^1.1.0:
883 | version "1.2.0"
884 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
885 | dependencies:
886 | is-property "^1.0.0"
887 |
888 | getpass@^0.1.1:
889 | version "0.1.6"
890 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
891 | dependencies:
892 | assert-plus "^1.0.0"
893 |
894 | glob-base@^0.3.0:
895 | version "0.3.0"
896 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
897 | dependencies:
898 | glob-parent "^2.0.0"
899 | is-glob "^2.0.0"
900 |
901 | glob-parent@^2.0.0:
902 | version "2.0.0"
903 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
904 | dependencies:
905 | is-glob "^2.0.0"
906 |
907 | glob@^5.0.5:
908 | version "5.0.15"
909 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
910 | dependencies:
911 | inflight "^1.0.4"
912 | inherits "2"
913 | minimatch "2 || 3"
914 | once "^1.3.0"
915 | path-is-absolute "^1.0.0"
916 |
917 | glob@^7.0.5:
918 | version "7.1.1"
919 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
920 | dependencies:
921 | fs.realpath "^1.0.0"
922 | inflight "^1.0.4"
923 | inherits "2"
924 | minimatch "^3.0.2"
925 | once "^1.3.0"
926 | path-is-absolute "^1.0.0"
927 |
928 | globals@^9.0.0:
929 | version "9.12.0"
930 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d"
931 |
932 | graceful-fs@^4.1.2, graceful-fs@^4.1.4:
933 | version "4.1.9"
934 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29"
935 |
936 | "graceful-readlink@>= 1.0.0":
937 | version "1.0.1"
938 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
939 |
940 | har-validator@~2.0.6:
941 | version "2.0.6"
942 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
943 | dependencies:
944 | chalk "^1.1.1"
945 | commander "^2.9.0"
946 | is-my-json-valid "^2.12.4"
947 | pinkie-promise "^2.0.0"
948 |
949 | has-ansi@^2.0.0:
950 | version "2.0.0"
951 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
952 | dependencies:
953 | ansi-regex "^2.0.0"
954 |
955 | has-color@^0.1.7:
956 | version "0.1.7"
957 | resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
958 |
959 | has-unicode@^2.0.0:
960 | version "2.0.1"
961 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
962 |
963 | hawk@~3.1.3:
964 | version "3.1.3"
965 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
966 | dependencies:
967 | boom "2.x.x"
968 | cryptiles "2.x.x"
969 | hoek "2.x.x"
970 | sntp "1.x.x"
971 |
972 | hoek@2.x.x:
973 | version "2.16.3"
974 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
975 |
976 | home-or-tmp@^2.0.0:
977 | version "2.0.0"
978 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
979 | dependencies:
980 | os-homedir "^1.0.0"
981 | os-tmpdir "^1.0.1"
982 |
983 | http-errors@~1.5.0:
984 | version "1.5.0"
985 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.0.tgz#b1cb3d8260fd8e2386cad3189045943372d48211"
986 | dependencies:
987 | inherits "2.0.1"
988 | setprototypeof "1.0.1"
989 | statuses ">= 1.3.0 < 2"
990 |
991 | http-signature@~1.1.0:
992 | version "1.1.1"
993 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
994 | dependencies:
995 | assert-plus "^0.2.0"
996 | jsprim "^1.2.2"
997 | sshpk "^1.7.0"
998 |
999 | inflight@^1.0.4:
1000 | version "1.0.6"
1001 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1002 | dependencies:
1003 | once "^1.3.0"
1004 | wrappy "1"
1005 |
1006 | inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2:
1007 | version "2.0.3"
1008 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1009 |
1010 | inherits@2.0.1:
1011 | version "2.0.1"
1012 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1013 |
1014 | ini@~1.3.0:
1015 | version "1.3.4"
1016 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
1017 |
1018 | invariant@^2.2.0:
1019 | version "2.2.1"
1020 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54"
1021 | dependencies:
1022 | loose-envify "^1.0.0"
1023 |
1024 | ipaddr.js@1.1.1:
1025 | version "1.1.1"
1026 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230"
1027 |
1028 | is-binary-path@^1.0.0:
1029 | version "1.0.1"
1030 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1031 | dependencies:
1032 | binary-extensions "^1.0.0"
1033 |
1034 | is-buffer@^1.0.2:
1035 | version "1.1.4"
1036 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
1037 |
1038 | is-dotfile@^1.0.0:
1039 | version "1.0.2"
1040 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
1041 |
1042 | is-equal-shallow@^0.1.3:
1043 | version "0.1.3"
1044 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
1045 | dependencies:
1046 | is-primitive "^2.0.0"
1047 |
1048 | is-extendable@^0.1.1:
1049 | version "0.1.1"
1050 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1051 |
1052 | is-extglob@^1.0.0:
1053 | version "1.0.0"
1054 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
1055 |
1056 | is-finite@^1.0.0:
1057 | version "1.0.2"
1058 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1059 | dependencies:
1060 | number-is-nan "^1.0.0"
1061 |
1062 | is-fullwidth-code-point@^1.0.0:
1063 | version "1.0.0"
1064 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1065 | dependencies:
1066 | number-is-nan "^1.0.0"
1067 |
1068 | is-glob@^2.0.0, is-glob@^2.0.1:
1069 | version "2.0.1"
1070 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
1071 | dependencies:
1072 | is-extglob "^1.0.0"
1073 |
1074 | is-my-json-valid@^2.12.4:
1075 | version "2.15.0"
1076 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
1077 | dependencies:
1078 | generate-function "^2.0.0"
1079 | generate-object-property "^1.1.0"
1080 | jsonpointer "^4.0.0"
1081 | xtend "^4.0.0"
1082 |
1083 | is-number@^2.0.2, is-number@^2.1.0:
1084 | version "2.1.0"
1085 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
1086 | dependencies:
1087 | kind-of "^3.0.2"
1088 |
1089 | is-posix-bracket@^0.1.0:
1090 | version "0.1.1"
1091 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
1092 |
1093 | is-primitive@^2.0.0:
1094 | version "2.0.0"
1095 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
1096 |
1097 | is-property@^1.0.0:
1098 | version "1.0.2"
1099 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
1100 |
1101 | is-typedarray@~1.0.0:
1102 | version "1.0.0"
1103 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1104 |
1105 | isarray@~1.0.0, isarray@1.0.0:
1106 | version "1.0.0"
1107 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1108 |
1109 | isobject@^2.0.0:
1110 | version "2.1.0"
1111 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1112 | dependencies:
1113 | isarray "1.0.0"
1114 |
1115 | isstream@~0.1.2:
1116 | version "0.1.2"
1117 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1118 |
1119 | jodid25519@^1.0.0:
1120 | version "1.0.2"
1121 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
1122 | dependencies:
1123 | jsbn "~0.1.0"
1124 |
1125 | js-tokens@^2.0.0:
1126 | version "2.0.0"
1127 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
1128 |
1129 | jsbn@~0.1.0:
1130 | version "0.1.0"
1131 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
1132 |
1133 | jsesc@^1.3.0:
1134 | version "1.3.0"
1135 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
1136 |
1137 | jsesc@~0.5.0:
1138 | version "0.5.0"
1139 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1140 |
1141 | json-schema@0.2.3:
1142 | version "0.2.3"
1143 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1144 |
1145 | json-stringify-safe@~5.0.1:
1146 | version "5.0.1"
1147 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1148 |
1149 | json5@^0.5.0:
1150 | version "0.5.0"
1151 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2"
1152 |
1153 | jsonpointer@^4.0.0:
1154 | version "4.0.0"
1155 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
1156 |
1157 | jsprim@^1.2.2:
1158 | version "1.3.1"
1159 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
1160 | dependencies:
1161 | extsprintf "1.0.2"
1162 | json-schema "0.2.3"
1163 | verror "1.3.6"
1164 |
1165 | kind-of@^3.0.2:
1166 | version "3.0.4"
1167 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74"
1168 | dependencies:
1169 | is-buffer "^1.0.2"
1170 |
1171 | lodash@^4.2.0:
1172 | version "4.16.4"
1173 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
1174 |
1175 | loose-envify@^1.0.0:
1176 | version "1.3.0"
1177 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
1178 | dependencies:
1179 | js-tokens "^2.0.0"
1180 |
1181 | media-typer@0.3.0:
1182 | version "0.3.0"
1183 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1184 |
1185 | merge-descriptors@1.0.1:
1186 | version "1.0.1"
1187 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1188 |
1189 | methods@~1.1.2:
1190 | version "1.1.2"
1191 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1192 |
1193 | micromatch@^2.1.5:
1194 | version "2.3.11"
1195 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1196 | dependencies:
1197 | arr-diff "^2.0.0"
1198 | array-unique "^0.2.1"
1199 | braces "^1.8.2"
1200 | expand-brackets "^0.1.4"
1201 | extglob "^0.3.1"
1202 | filename-regex "^2.0.0"
1203 | is-extglob "^1.0.0"
1204 | is-glob "^2.0.1"
1205 | kind-of "^3.0.2"
1206 | normalize-path "^2.0.1"
1207 | object.omit "^2.0.0"
1208 | parse-glob "^3.0.4"
1209 | regex-cache "^0.4.2"
1210 |
1211 | mime-db@~1.24.0:
1212 | version "1.24.0"
1213 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c"
1214 |
1215 | mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7:
1216 | version "2.1.12"
1217 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729"
1218 | dependencies:
1219 | mime-db "~1.24.0"
1220 |
1221 | mime@1.3.4:
1222 | version "1.3.4"
1223 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
1224 |
1225 | minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3":
1226 | version "3.0.3"
1227 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
1228 | dependencies:
1229 | brace-expansion "^1.0.0"
1230 |
1231 | minimist@^1.2.0:
1232 | version "1.2.0"
1233 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1234 |
1235 | minimist@0.0.8:
1236 | version "0.0.8"
1237 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1238 |
1239 | mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.1:
1240 | version "0.5.1"
1241 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1242 | dependencies:
1243 | minimist "0.0.8"
1244 |
1245 | ms@0.7.1:
1246 | version "0.7.1"
1247 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
1248 |
1249 | nan@^2.3.0:
1250 | version "2.4.0"
1251 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
1252 |
1253 | negotiator@0.6.1:
1254 | version "0.6.1"
1255 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
1256 |
1257 | node-pre-gyp@^0.6.29:
1258 | version "0.6.31"
1259 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017"
1260 | dependencies:
1261 | mkdirp "~0.5.1"
1262 | nopt "~3.0.6"
1263 | npmlog "^4.0.0"
1264 | rc "~1.1.6"
1265 | request "^2.75.0"
1266 | rimraf "~2.5.4"
1267 | semver "~5.3.0"
1268 | tar "~2.2.1"
1269 | tar-pack "~3.3.0"
1270 |
1271 | node-uuid@~1.4.7:
1272 | version "1.4.7"
1273 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
1274 |
1275 | nopt@~3.0.6:
1276 | version "3.0.6"
1277 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1278 | dependencies:
1279 | abbrev "1"
1280 |
1281 | normalize-path@^2.0.1:
1282 | version "2.0.1"
1283 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
1284 |
1285 | npmlog@^4.0.0:
1286 | version "4.0.0"
1287 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f"
1288 | dependencies:
1289 | are-we-there-yet "~1.1.2"
1290 | console-control-strings "~1.1.0"
1291 | gauge "~2.6.0"
1292 | set-blocking "~2.0.0"
1293 |
1294 | number-is-nan@^1.0.0:
1295 | version "1.0.1"
1296 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1297 |
1298 | oauth-sign@~0.8.1:
1299 | version "0.8.2"
1300 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
1301 |
1302 | object-assign@^4.1.0:
1303 | version "4.1.0"
1304 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
1305 |
1306 | object.omit@^2.0.0:
1307 | version "2.0.1"
1308 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1309 | dependencies:
1310 | for-own "^0.1.4"
1311 | is-extendable "^0.1.1"
1312 |
1313 | on-finished@~2.3.0:
1314 | version "2.3.0"
1315 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1316 | dependencies:
1317 | ee-first "1.1.1"
1318 |
1319 | once@^1.3.0:
1320 | version "1.4.0"
1321 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1322 | dependencies:
1323 | wrappy "1"
1324 |
1325 | once@~1.3.3:
1326 | version "1.3.3"
1327 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
1328 | dependencies:
1329 | wrappy "1"
1330 |
1331 | os-homedir@^1.0.0:
1332 | version "1.0.2"
1333 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1334 |
1335 | os-tmpdir@^1.0.1:
1336 | version "1.0.2"
1337 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1338 |
1339 | output-file-sync@^1.1.0:
1340 | version "1.1.2"
1341 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
1342 | dependencies:
1343 | graceful-fs "^4.1.4"
1344 | mkdirp "^0.5.1"
1345 | object-assign "^4.1.0"
1346 |
1347 | parse-glob@^3.0.4:
1348 | version "3.0.4"
1349 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1350 | dependencies:
1351 | glob-base "^0.3.0"
1352 | is-dotfile "^1.0.0"
1353 | is-extglob "^1.0.0"
1354 | is-glob "^2.0.0"
1355 |
1356 | parseurl@~1.3.1:
1357 | version "1.3.1"
1358 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
1359 |
1360 | path-is-absolute@^1.0.0:
1361 | version "1.0.1"
1362 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1363 |
1364 | path-to-regexp@0.1.7:
1365 | version "0.1.7"
1366 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
1367 |
1368 | pinkie-promise@^2.0.0:
1369 | version "2.0.1"
1370 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1371 | dependencies:
1372 | pinkie "^2.0.0"
1373 |
1374 | pinkie@^2.0.0:
1375 | version "2.0.4"
1376 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1377 |
1378 | preserve@^0.2.0:
1379 | version "0.2.0"
1380 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1381 |
1382 | private@^0.1.6, private@~0.1.5:
1383 | version "0.1.6"
1384 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
1385 |
1386 | process-nextick-args@~1.0.6:
1387 | version "1.0.7"
1388 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1389 |
1390 | proxy-addr@~1.1.2:
1391 | version "1.1.2"
1392 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37"
1393 | dependencies:
1394 | forwarded "~0.1.0"
1395 | ipaddr.js "1.1.1"
1396 |
1397 | punycode@^1.4.1:
1398 | version "1.4.1"
1399 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1400 |
1401 | qs@~6.3.0:
1402 | version "6.3.0"
1403 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
1404 |
1405 | qs@6.2.0:
1406 | version "6.2.0"
1407 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
1408 |
1409 | randomatic@^1.1.3:
1410 | version "1.1.5"
1411 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b"
1412 | dependencies:
1413 | is-number "^2.0.2"
1414 | kind-of "^3.0.2"
1415 |
1416 | range-parser@~1.2.0:
1417 | version "1.2.0"
1418 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
1419 |
1420 | rc@~1.1.6:
1421 | version "1.1.6"
1422 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
1423 | dependencies:
1424 | deep-extend "~0.4.0"
1425 | ini "~1.3.0"
1426 | minimist "^1.2.0"
1427 | strip-json-comments "~1.0.4"
1428 |
1429 | "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@~2.1.4:
1430 | version "2.1.5"
1431 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
1432 | dependencies:
1433 | buffer-shims "^1.0.0"
1434 | core-util-is "~1.0.0"
1435 | inherits "~2.0.1"
1436 | isarray "~1.0.0"
1437 | process-nextick-args "~1.0.6"
1438 | string_decoder "~0.10.x"
1439 | util-deprecate "~1.0.1"
1440 |
1441 | readdirp@^2.0.0:
1442 | version "2.1.0"
1443 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
1444 | dependencies:
1445 | graceful-fs "^4.1.2"
1446 | minimatch "^3.0.2"
1447 | readable-stream "^2.0.2"
1448 | set-immediate-shim "^1.0.1"
1449 |
1450 | regenerate@^1.2.1:
1451 | version "1.3.1"
1452 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.1.tgz#0300203a5d2fdcf89116dce84275d011f5903f33"
1453 |
1454 | regenerator-runtime@^0.9.5:
1455 | version "0.9.5"
1456 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc"
1457 |
1458 | regex-cache@^0.4.2:
1459 | version "0.4.3"
1460 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
1461 | dependencies:
1462 | is-equal-shallow "^0.1.3"
1463 | is-primitive "^2.0.0"
1464 |
1465 | regexpu-core@^2.0.0:
1466 | version "2.0.0"
1467 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
1468 | dependencies:
1469 | regenerate "^1.2.1"
1470 | regjsgen "^0.2.0"
1471 | regjsparser "^0.1.4"
1472 |
1473 | regjsgen@^0.2.0:
1474 | version "0.2.0"
1475 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
1476 |
1477 | regjsparser@^0.1.4:
1478 | version "0.1.5"
1479 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
1480 | dependencies:
1481 | jsesc "~0.5.0"
1482 |
1483 | repeat-element@^1.1.2:
1484 | version "1.1.2"
1485 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1486 |
1487 | repeat-string@^1.5.2:
1488 | version "1.6.1"
1489 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1490 |
1491 | repeating@^2.0.0:
1492 | version "2.0.1"
1493 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1494 | dependencies:
1495 | is-finite "^1.0.0"
1496 |
1497 | request@^2.75.0:
1498 | version "2.76.0"
1499 | resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e"
1500 | dependencies:
1501 | aws-sign2 "~0.6.0"
1502 | aws4 "^1.2.1"
1503 | caseless "~0.11.0"
1504 | combined-stream "~1.0.5"
1505 | extend "~3.0.0"
1506 | forever-agent "~0.6.1"
1507 | form-data "~2.1.1"
1508 | har-validator "~2.0.6"
1509 | hawk "~3.1.3"
1510 | http-signature "~1.1.0"
1511 | is-typedarray "~1.0.0"
1512 | isstream "~0.1.2"
1513 | json-stringify-safe "~5.0.1"
1514 | mime-types "~2.1.7"
1515 | node-uuid "~1.4.7"
1516 | oauth-sign "~0.8.1"
1517 | qs "~6.3.0"
1518 | stringstream "~0.0.4"
1519 | tough-cookie "~2.3.0"
1520 | tunnel-agent "~0.4.1"
1521 |
1522 | rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2:
1523 | version "2.5.4"
1524 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
1525 | dependencies:
1526 | glob "^7.0.5"
1527 |
1528 | semver@~5.3.0:
1529 | version "5.3.0"
1530 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1531 |
1532 | send@0.14.1:
1533 | version "0.14.1"
1534 | resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a"
1535 | dependencies:
1536 | debug "~2.2.0"
1537 | depd "~1.1.0"
1538 | destroy "~1.0.4"
1539 | encodeurl "~1.0.1"
1540 | escape-html "~1.0.3"
1541 | etag "~1.7.0"
1542 | fresh "0.3.0"
1543 | http-errors "~1.5.0"
1544 | mime "1.3.4"
1545 | ms "0.7.1"
1546 | on-finished "~2.3.0"
1547 | range-parser "~1.2.0"
1548 | statuses "~1.3.0"
1549 |
1550 | serve-static@~1.11.1:
1551 | version "1.11.1"
1552 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805"
1553 | dependencies:
1554 | encodeurl "~1.0.1"
1555 | escape-html "~1.0.3"
1556 | parseurl "~1.3.1"
1557 | send "0.14.1"
1558 |
1559 | set-blocking@~2.0.0:
1560 | version "2.0.0"
1561 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1562 |
1563 | set-immediate-shim@^1.0.1:
1564 | version "1.0.1"
1565 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
1566 |
1567 | setprototypeof@1.0.1:
1568 | version "1.0.1"
1569 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.1.tgz#52009b27888c4dc48f591949c0a8275834c1ca7e"
1570 |
1571 | signal-exit@^3.0.0:
1572 | version "3.0.1"
1573 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
1574 |
1575 | slash@^1.0.0:
1576 | version "1.0.0"
1577 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
1578 |
1579 | sntp@1.x.x:
1580 | version "1.0.9"
1581 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
1582 | dependencies:
1583 | hoek "2.x.x"
1584 |
1585 | source-map-support@^0.4.2:
1586 | version "0.4.5"
1587 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.5.tgz#4438df4219e1b3c7feb674614b4c67f9722db1e4"
1588 | dependencies:
1589 | source-map "^0.5.3"
1590 |
1591 | source-map@^0.5.0, source-map@^0.5.3:
1592 | version "0.5.6"
1593 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
1594 |
1595 | sshpk@^1.7.0:
1596 | version "1.10.1"
1597 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
1598 | dependencies:
1599 | asn1 "~0.2.3"
1600 | assert-plus "^1.0.0"
1601 | dashdash "^1.12.0"
1602 | getpass "^0.1.1"
1603 | optionalDependencies:
1604 | bcrypt-pbkdf "^1.0.0"
1605 | ecc-jsbn "~0.1.1"
1606 | jodid25519 "^1.0.0"
1607 | jsbn "~0.1.0"
1608 | tweetnacl "~0.14.0"
1609 |
1610 | "statuses@>= 1.3.0 < 2", statuses@~1.3.0:
1611 | version "1.3.0"
1612 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.0.tgz#8e55758cb20e7682c1f4fce8dcab30bf01d1e07a"
1613 |
1614 | string_decoder@~0.10.x:
1615 | version "0.10.31"
1616 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1617 |
1618 | string-width@^1.0.1:
1619 | version "1.0.2"
1620 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1621 | dependencies:
1622 | code-point-at "^1.0.0"
1623 | is-fullwidth-code-point "^1.0.0"
1624 | strip-ansi "^3.0.0"
1625 |
1626 | stringstream@~0.0.4:
1627 | version "0.0.5"
1628 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
1629 |
1630 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1631 | version "3.0.1"
1632 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1633 | dependencies:
1634 | ansi-regex "^2.0.0"
1635 |
1636 | strip-json-comments@~1.0.4:
1637 | version "1.0.4"
1638 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
1639 |
1640 | supports-color@^2.0.0:
1641 | version "2.0.0"
1642 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1643 |
1644 | tar-pack@~3.3.0:
1645 | version "3.3.0"
1646 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
1647 | dependencies:
1648 | debug "~2.2.0"
1649 | fstream "~1.0.10"
1650 | fstream-ignore "~1.0.5"
1651 | once "~1.3.3"
1652 | readable-stream "~2.1.4"
1653 | rimraf "~2.5.1"
1654 | tar "~2.2.1"
1655 | uid-number "~0.0.6"
1656 |
1657 | tar@~2.2.1:
1658 | version "2.2.1"
1659 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
1660 | dependencies:
1661 | block-stream "*"
1662 | fstream "^1.0.2"
1663 | inherits "2"
1664 |
1665 | to-fast-properties@^1.0.1:
1666 | version "1.0.2"
1667 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
1668 |
1669 | tough-cookie@~2.3.0:
1670 | version "2.3.2"
1671 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
1672 | dependencies:
1673 | punycode "^1.4.1"
1674 |
1675 | tunnel-agent@~0.4.1:
1676 | version "0.4.3"
1677 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
1678 |
1679 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1680 | version "0.14.3"
1681 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d"
1682 |
1683 | type-is@~1.6.13:
1684 | version "1.6.13"
1685 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.13.tgz#6e83ba7bc30cd33a7bb0b7fb00737a2085bf9d08"
1686 | dependencies:
1687 | media-typer "0.3.0"
1688 | mime-types "~2.1.11"
1689 |
1690 | uid-number@~0.0.6:
1691 | version "0.0.6"
1692 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
1693 |
1694 | unpipe@~1.0.0:
1695 | version "1.0.0"
1696 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
1697 |
1698 | user-home@^1.1.1:
1699 | version "1.1.1"
1700 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
1701 |
1702 | util-deprecate@~1.0.1:
1703 | version "1.0.2"
1704 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1705 |
1706 | utils-merge@1.0.0:
1707 | version "1.0.0"
1708 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
1709 |
1710 | v8flags@^2.0.10:
1711 | version "2.0.11"
1712 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
1713 | dependencies:
1714 | user-home "^1.1.1"
1715 |
1716 | vary@~1.1.0:
1717 | version "1.1.0"
1718 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
1719 |
1720 | verror@1.3.6:
1721 | version "1.3.6"
1722 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
1723 | dependencies:
1724 | extsprintf "1.0.2"
1725 |
1726 | wide-align@^1.1.0:
1727 | version "1.1.0"
1728 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
1729 | dependencies:
1730 | string-width "^1.0.1"
1731 |
1732 | wrappy@1:
1733 | version "1.0.2"
1734 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1735 |
1736 | xtend@^4.0.0:
1737 | version "4.0.1"
1738 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1739 |
1740 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "express-torch",
3 | "version": "0.1.7",
4 | "license": "MIT",
5 | "main": "build/torch.js",
6 | "types": "./express-torch.d.ts",
7 | "repository": {
8 | "type": "git",
9 | "url": "git://github.com/JBlaak/Torch.git"
10 | },
11 | "scripts": {
12 | "prepublish": "yarn build",
13 | "build": "rm -rf ./build && tsc && yarn declarations && yarn declaration-bundle",
14 | "pretest": "tsc --project tsconfig.test.json",
15 | "test": "yarn lint && yarn mocha",
16 | "lint": "tslint ./src/*.ts ./src/**/*.ts",
17 | "mocha": "nyc --reporter=lcov --reporter=text --check-coverage --lines 100 --functions 100 --branches 100 mocha tests --recursive",
18 | "declarations": "tsc --declaration",
19 | "declaration-bundle": "dts-bundle --name express-torch --out ./express-torch.d.ts --main ./build/torch.d.ts && mv ./build/express-torch.d.ts ./express-torch.d.ts"
20 | },
21 | "devDependencies": {
22 | "@types/chai": "^3.4.34",
23 | "@types/expect.js": "^0.3.29",
24 | "@types/express": "^4.0.33",
25 | "@types/mocha": "^2.2.32",
26 | "chai": "^3.5.0",
27 | "dts-bundle": "^0.6.1",
28 | "mocha": "^3.1.2",
29 | "nyc": "^8.3.2",
30 | "tslint": "^4.2.0",
31 | "typescript": "^2.0.6"
32 | },
33 | "dependencies": {
34 | "path-to-regexp": "^2.2.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/connect.ts:
--------------------------------------------------------------------------------
1 | import {Application} from 'express';
2 |
3 | import transfer from './connect/transfer';
4 | import {Middleware} from './models/middleware';
5 | import Route from './route';
6 | import Router from './router';
7 | import {constrain} from './util/constrain_path';
8 | import {trim} from './util/trim';
9 |
10 | export default function connect(app: Application,
11 | router: Router,
12 | previouxPrefix: string[] = [],
13 | previousMiddleware: Middleware[] = [],
14 | currentContext: any = undefined
15 | ): Route[] {
16 |
17 | let routes: Route[] = [];
18 |
19 | let prefix = [...previouxPrefix];
20 | if (router.prefix !== null) {
21 | prefix.push(trim(router.prefix));
22 | }
23 |
24 | /* Transfer each route to Express */
25 | router.routes.forEach((route: Route) => {
26 | let path = '';
27 | if (prefix.length > 0) {
28 | path += '/' + prefix.join('/');
29 | }
30 | if (trim(route.path) !== '') {
31 | path += '/' + trim(route.path);
32 | }
33 |
34 | /* Add where constraints */
35 | const constraints = route.getConstraints();
36 | if (constraints !== undefined) {
37 | path = constrain(path, constraints);
38 | }
39 |
40 | /* Extract context */
41 | const context = route.context || currentContext;
42 |
43 | /* Transfer to Express */
44 | transfer(
45 | app,
46 | route.method,
47 | path,
48 | [...previousMiddleware, ...router.middleware, ...route.middleware],
49 | context ? route.controller.bind(context) : route.controller
50 | );
51 |
52 | /* Add to routes listing */
53 | const aggregatedRoute = new Route(route.method, path, route.controller);
54 | aggregatedRoute.middleware = [...previousMiddleware, ...router.middleware, ...route.middleware];
55 | aggregatedRoute.name = route.name;
56 | routes.push(aggregatedRoute);
57 | });
58 |
59 | /* Recursively transfer routes of each group as well including the parent middleware and prefix */
60 | router.groups.forEach((group: Router) => {
61 | routes = [...routes, ...connect(
62 | app,
63 | group,
64 | prefix,
65 | [...previousMiddleware, ...router.middleware],
66 | group.context || currentContext
67 | )];
68 | });
69 |
70 | return routes;
71 | };
72 |
--------------------------------------------------------------------------------
/src/connect/transfer.ts:
--------------------------------------------------------------------------------
1 | import {Application, Request, Response, NextFunction} from 'express';
2 | import {Controller} from "../models/controller";
3 | import {Middleware} from '../models/middleware';
4 |
5 | /**
6 | * Transfer the different methods to the Express application
7 | * @param app
8 | * @param method
9 | * @param path
10 | * @param middleware
11 | * @param controller
12 | */
13 | export default function transfer(app: Application,
14 | method: string,
15 | path: string,
16 | middleware: Middleware[],
17 | controller: Controller) {
18 | switch (method) {
19 | case 'get':
20 | app.get(path, middleware, controller);
21 | break;
22 | case 'post':
23 | app.post(path, middleware, controller);
24 | break;
25 | case 'put':
26 | app.put(path, middleware, controller);
27 | break;
28 | case 'delete':
29 | app.delete(path, middleware, controller);
30 | break;
31 | default:
32 | throw new Error('Unknown method requested for transfer: ' + method);
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/src/models/controller.ts:
--------------------------------------------------------------------------------
1 | import {Request, Response, NextFunction} from 'express';
2 |
3 | export type Controller = (req: Request, res: Response, next?: NextFunction) => void;
4 |
--------------------------------------------------------------------------------
/src/models/group_config.ts:
--------------------------------------------------------------------------------
1 | import {Request, Response, NextFunction} from 'express';
2 | import {Middleware} from './middleware';
3 |
4 | export interface GroupConfig {
5 | middleware?: Middleware[];
6 | prefix?: string;
7 | context?: any;
8 | }
9 |
--------------------------------------------------------------------------------
/src/models/middleware.ts:
--------------------------------------------------------------------------------
1 | import {Request, Response, NextFunction} from 'express';
2 |
3 | export type NormalMiddleware = (req: Request, res: Response, next: NextFunction) => any;
4 | export type ErrorMiddleware = (err: any, req: Request, res: Response, next: NextFunction) => any;
5 |
6 | export type Middleware = NormalMiddleware | ErrorMiddleware;
7 |
--------------------------------------------------------------------------------
/src/models/request_with_torch.ts:
--------------------------------------------------------------------------------
1 | import {Request} from 'express';
2 | import {Routes} from '../torch';
3 |
4 | export interface RequestWithTorch extends Request {
5 | routes: Routes;
6 | }
7 |
--------------------------------------------------------------------------------
/src/models/route_config.ts:
--------------------------------------------------------------------------------
1 | import {Controller} from './controller';
2 | import {Middleware} from './middleware';
3 |
4 | export interface RouteConfig {
5 | controller: Controller;
6 | method?: string;
7 | name?: string;
8 | middleware?: Middleware[];
9 | context?: any;
10 | }
11 |
--------------------------------------------------------------------------------
/src/route.ts:
--------------------------------------------------------------------------------
1 | import {Controller} from './models/controller';
2 | import {Middleware} from './models/middleware';
3 |
4 | export default class Route {
5 | private _method: string;
6 |
7 | private _path: string;
8 |
9 | private _name: string | undefined;
10 |
11 | private _constraints: { [key: string]: string } | undefined;
12 |
13 | private _middleware: Middleware[];
14 |
15 | private _context: any;
16 |
17 | private _controller: Controller;
18 |
19 | constructor(method: string, path: string, controller: Controller) {
20 | this._method = method;
21 | this._path = path;
22 | this._controller = controller;
23 | }
24 |
25 | get method(): string {
26 | return this._method;
27 | }
28 |
29 | get path(): string {
30 | return this._path;
31 | }
32 |
33 | get controller(): Controller {
34 | return this._controller;
35 | }
36 |
37 | get middleware(): Middleware[] {
38 | return this._middleware || [];
39 | }
40 |
41 | set middleware(value: Middleware[]) {
42 | this._middleware = value;
43 | }
44 |
45 | get context(): any {
46 | return this._context;
47 | }
48 |
49 | set context(value: any) {
50 | this._context = value;
51 | }
52 |
53 | get name(): string|undefined {
54 | return this._name;
55 | }
56 |
57 | set name(value: string|undefined) {
58 | this._name = value;
59 | }
60 |
61 | public where(constraints: { [key: string]: string } | undefined) {
62 | this._constraints = constraints;
63 | }
64 |
65 | public getConstraints(): {[key: string]: string} | undefined {
66 | return this._constraints;
67 | }
68 | };
69 |
--------------------------------------------------------------------------------
/src/router.ts:
--------------------------------------------------------------------------------
1 | import {Controller} from './models/controller';
2 | import {GroupConfig} from './models/group_config';
3 | import {Middleware} from './models/middleware';
4 | import {RouteConfig} from './models/route_config';
5 | import Route from './route';
6 |
7 | export default class Router {
8 |
9 | /**
10 | * Configuration of this group, will be applied nested when transferred to Expresss
11 | */
12 | private _config: GroupConfig;
13 |
14 | /**
15 | * List of all groups beneath this one
16 | */
17 | private _groups: Router[] = [];
18 |
19 | /**
20 | * The different routes applicable in this router
21 | */
22 | private _routes: Route[] = [];
23 |
24 | /**
25 | * Setup configuration
26 | * @param config
27 | */
28 | constructor(config: GroupConfig) {
29 | this._config = config;
30 | }
31 |
32 | /**
33 | * Getter for groups
34 | */
35 | get groups(): Router[] {
36 | return this._groups;
37 | }
38 |
39 | /**
40 | * Getter for routes
41 | */
42 | get routes(): Route[] {
43 | return this._routes;
44 | }
45 |
46 | /**
47 | * Get prefix for routes of this router
48 | * @returns {string|string}
49 | */
50 | get middleware(): Middleware[] {
51 | return this._config.middleware || [];
52 | }
53 |
54 | /**
55 | * Get prefix for routes of this router
56 | * @returns {string|null}
57 | */
58 | get prefix(): string|null {
59 | return this._config.prefix || null;
60 | }
61 |
62 | /**
63 | * Context for routes in this group
64 | * @returns {any}
65 | */
66 | get context(): any {
67 | return this._config.context;
68 | }
69 |
70 | /**
71 | * GET method
72 | * @param path
73 | * @param config
74 | */
75 | public get(path: string, config: Controller | RouteConfig): Route {
76 | const route = this.toRoute('get', path, config);
77 |
78 | this._routes.push(route);
79 |
80 | return route;
81 | }
82 |
83 | /**
84 | * POST method
85 | * @param path
86 | * @param config
87 | */
88 | public post(path: string, config: Controller | RouteConfig): Route {
89 | const route = this.toRoute('post', path, config);
90 |
91 | this._routes.push(route);
92 |
93 | return route;
94 | }
95 |
96 | /**
97 | * PUT method
98 | * @param path
99 | * @param config
100 | */
101 | public put(path: string, config: Controller | RouteConfig): Route {
102 | const route = this.toRoute('put', path, config);
103 |
104 | this._routes.push(route);
105 |
106 | return route;
107 | }
108 |
109 | /**
110 | * DELETE method
111 | * @param path
112 | * @param config
113 | */
114 | public delete(path: string, config: Controller | RouteConfig): Route {
115 | const route = this.toRoute('delete', path, config);
116 |
117 | this._routes.push(route);
118 |
119 | return route;
120 | }
121 |
122 | /**
123 | * Register a new group of routes with their own configurations
124 | * @param config
125 | * @param callback
126 | */
127 | public group(config: GroupConfig, callback: (router: Router) => void) {
128 | const router = new Router(config);
129 |
130 | callback(router);
131 |
132 | this._groups.push(router);
133 | }
134 |
135 | /**
136 | * Transform to route
137 | * @param method
138 | * @param path
139 | * @param controller
140 | * @returns Route
141 | */
142 | private toRoute(method: string, path: string, controller: Controller | RouteConfig): Route {
143 | if (typeof controller === 'function') {
144 | return new Route(method, path, (controller as Controller));
145 | }
146 |
147 | const config = (controller as RouteConfig);
148 |
149 | const route = new Route(
150 | config.method ? config.method : method,
151 | path,
152 | config.controller
153 | );
154 | route.name = config.name;
155 | if (config.middleware) {
156 | route.middleware = config.middleware;
157 | }
158 | if (config.context) {
159 | route.context = config.context;
160 | }
161 |
162 | return route;
163 | }
164 | };
165 |
--------------------------------------------------------------------------------
/src/routes.ts:
--------------------------------------------------------------------------------
1 | import Route from "./route";
2 | import {compile} from 'path-to-regexp';
3 |
4 | export default class Routes {
5 |
6 | /**
7 | * List of all routes in the application
8 | */
9 | private _routes: Route[];
10 |
11 | set routes(value: Route[]) {
12 | this._routes = value;
13 | }
14 |
15 | /**
16 | * Get url of named route
17 | * @param name
18 | * @param args
19 | * @returns {string|undefined}
20 | */
21 | public named(name: string, args: Object = {}): string|undefined {
22 | for (let key in this._routes) {
23 | if (this._routes[key].name === name) {
24 | return compile(this._routes[key].path)(args);
25 | }
26 | }
27 | }
28 |
29 | /**
30 | * Get a listing of all routes
31 | * @returns {Route[]}
32 | */
33 | public all() {
34 | return this._routes;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/torch.ts:
--------------------------------------------------------------------------------
1 | import {Application, Request, Response, NextFunction} from 'express';
2 | import Router from './router';
3 | import {RouteConfig} from './models/route_config';
4 | import {GroupConfig} from './models/group_config';
5 | import connect from './connect';
6 | import Routes from './routes';
7 | import {RequestWithTorch} from './models/request_with_torch';
8 |
9 | export type Router = Router;
10 | export type Route = RouteConfig;
11 | export type Group = GroupConfig;
12 | export type Routes = Routes;
13 |
14 | export default function Torch(app: Application, callback: (router: Router) => void): Routes {
15 | let routes: Routes = new Routes();
16 |
17 | const router = new Router({
18 | middleware: [(req: RequestWithTorch, res: Response, next: NextFunction) => {
19 | req.routes = routes;
20 | next();
21 | }]
22 | });
23 |
24 | callback(router);
25 |
26 | routes.routes = connect(app, router);
27 |
28 | return routes;
29 | }
30 |
--------------------------------------------------------------------------------
/src/util/constrain_path.ts:
--------------------------------------------------------------------------------
1 | import {parse, tokensToFunction} from 'path-to-regexp';
2 |
3 | export function constrain(path: string, constraints: {[key: string]: string}) {
4 | const tokens = parse(path);
5 |
6 | // If a certain token is present in our constraints, simply add a emptry string, else path-to-regexp will throw
7 | for (let token of tokens) {
8 | if (typeof token === 'object' && !constraints[token.name]) {
9 | constraints[token.name] = '';
10 | }
11 | }
12 |
13 | const pathFunction = tokensToFunction(tokens);
14 | const constrainedPath = pathFunction(constraints, {
15 | encode: (value, token) => ':' + token.name + value
16 | });
17 |
18 | return constrainedPath;
19 | }
20 |
--------------------------------------------------------------------------------
/src/util/trim.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Trim slashes of the left of a string
3 | * @param str
4 | * @returns {string}
5 | */
6 | export function trim(str: string): string {
7 | return str.replace(/^\/|\/$/g, '');
8 | }
9 |
--------------------------------------------------------------------------------
/tests/torch.test.ts:
--------------------------------------------------------------------------------
1 | import {expect} from 'chai';
2 | import {Application, NextFunction, Request, Response} from 'express';
3 |
4 | import Router from '../src/router';
5 | import Torch from '../src/torch';
6 |
7 | describe('Torch', function () {
8 |
9 | describe('registering routes', function () {
10 | it('Should allow for registering a GET method directly', function () {
11 | /* Given */
12 | let registeredPath: string|null = null;
13 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
14 |
15 | const app: any = {
16 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
17 | registeredPath = path;
18 | registeredMethod = method;
19 | }
20 | };
21 |
22 | /* When */
23 | const method = (req: any, res: any) => {
24 | /* The impl */
25 | };
26 | Torch(app as Application, (router: Router) => {
27 | router.get('/home', method);
28 | });
29 |
30 | /* Then */
31 | expect(registeredPath).to.equal('/home');
32 | expect(registeredMethod).to.equal(method);
33 | });
34 |
35 | it('Should allow for registering a POST method directly', function () {
36 | /* Given */
37 | let registeredPath: string|null = null;
38 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
39 |
40 | const app: any = {
41 | post: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
42 | registeredPath = path;
43 | registeredMethod = method;
44 | }
45 | };
46 |
47 | /* When */
48 | const method = (req: any, res: any) => {
49 | /* The impl */
50 | };
51 | Torch(app as Application, (router: Router) => {
52 | router.post('/posts', method);
53 | });
54 |
55 | /* Then */
56 | expect(registeredPath).to.equal('/posts');
57 | expect(registeredMethod).to.equal(method);
58 | });
59 |
60 | it('Should allow for registering a PUT method directly', function () {
61 | /* Given */
62 | let registeredPath: string|null = null;
63 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
64 |
65 | const app: any = {
66 | put: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
67 | registeredPath = path;
68 | registeredMethod = method;
69 | }
70 | };
71 |
72 | /* When */
73 | const method = (req: any, res: any) => {
74 | /* The impl */
75 | };
76 | Torch(app as Application, (router: Router) => {
77 | router.put('/posts/:id', method);
78 | });
79 |
80 | /* Then */
81 | expect(registeredPath).to.equal('/posts/:id');
82 | expect(registeredMethod).to.equal(method);
83 | });
84 |
85 | it('Should allow for registering a DELETE method directly', function () {
86 | /* Given */
87 | let registeredPath: string|null = null;
88 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
89 |
90 | const app: any = {
91 | delete: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
92 | registeredPath = path;
93 | registeredMethod = method;
94 | }
95 | };
96 |
97 | /* When */
98 | const method = (req: any, res: any) => {
99 | /* The impl */
100 | };
101 | Torch(app as Application, (router: Router) => {
102 | router.delete('/posts/:id', method);
103 | });
104 |
105 | /* Then */
106 | expect(registeredPath).to.equal('/posts/:id');
107 | expect(registeredMethod).to.equal(method);
108 | });
109 |
110 | it('Should throw an error when trying to register an unkonown HTTP verb ', function () {
111 | /* Given */
112 | let registeredPath: string|null = null;
113 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
114 |
115 | const app: any = {
116 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
117 | registeredPath = path;
118 | registeredMethod = method;
119 | }
120 | };
121 |
122 | /* When */
123 | let throwsAnError: boolean = false;
124 | const method = (req: any, res: any) => {
125 | /* The impl */
126 | };
127 | try {
128 | Torch(app as Application, (router: Router) => {
129 | router.get('/home', {
130 | controller: method,
131 | method: 'asdf'
132 | });
133 |
134 | });
135 | } catch (e) {
136 | throwsAnError = true;
137 | }
138 |
139 | /* Then */
140 | expect(throwsAnError).to.equal(true);
141 | });
142 |
143 | it('Should allow for registering by passing a config', function () {
144 | /* Given */
145 | let registeredPath: string|null = null;
146 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
147 |
148 | const app: any = {
149 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
150 | registeredPath = path;
151 | registeredMethod = method;
152 | }
153 | };
154 |
155 | /* When */
156 | const method = (req: any, res: any) => {
157 | /* The impl */
158 | };
159 | Torch(app as Application, (router: Router) => {
160 | router.get('/home', {
161 | controller: method
162 | });
163 | });
164 |
165 | /* Then */
166 | expect(registeredPath).to.equal('/home');
167 | expect(registeredMethod).to.equal(method);
168 | });
169 |
170 | it('Should add a leading / when registering a route without one', function () {
171 | /* Given */
172 | let registeredPath: string|null = null;
173 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
174 |
175 | const app: any = {
176 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
177 | registeredPath = path;
178 | registeredMethod = method;
179 | }
180 | };
181 |
182 | /* When */
183 | const method = (req: any, res: any) => {
184 | /* The impl */
185 | };
186 | Torch(app as Application, (router: Router) => {
187 | router.get('home', method);
188 | });
189 |
190 | /* Then */
191 | expect(registeredPath).to.equal('/home');
192 | expect(registeredMethod).to.equal(method);
193 | });
194 | });
195 |
196 | describe('grouping', function () {
197 | it('Should allow for registering a route within a group', function () {
198 | /* Given */
199 | let registeredPath: string|null = null;
200 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
201 |
202 | const app: any = {
203 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
204 | registeredPath = path;
205 | registeredMethod = method;
206 | }
207 | };
208 |
209 | /* When */
210 | const method = (req: any, res: any) => {
211 | /* The impl */
212 | };
213 | Torch(app as Application, (router: Router) => {
214 | router.group({}, (router: Router) => {
215 | router.get('/home', method);
216 | });
217 | });
218 |
219 | /* Then */
220 | expect(registeredPath).to.equal('/home');
221 | expect(registeredMethod).to.equal(method);
222 | });
223 |
224 | it('Should allow for registering a route within a group within a group', function () {
225 | /* Given */
226 | let registeredPath: string|null = null;
227 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
228 |
229 | const app: any = {
230 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
231 | registeredPath = path;
232 | registeredMethod = method;
233 | }
234 | };
235 |
236 | /* When */
237 | const method = (req: any, res: any) => {
238 | /* The impl */
239 | };
240 | Torch(app as Application, (router: Router) => {
241 | router.group({}, (router: Router) => {
242 | router.group({}, (router: Router) => {
243 | router.get('/home', method);
244 | });
245 | });
246 | });
247 |
248 | /* Then */
249 | expect(registeredPath).to.equal('/home');
250 | expect(registeredMethod).to.equal(method);
251 | });
252 |
253 | it('Should allow for registering a route with a prefix from two groups with a path', function () {
254 | /* Given */
255 | let registeredPath: string|null = null;
256 |
257 | const app: any = {
258 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
259 | registeredPath = path;
260 | }
261 | };
262 |
263 | /* When */
264 | const method = (req: any, res: any) => {
265 | /* The impl */
266 | };
267 | Torch(app as Application, (router: Router) => {
268 | router.group({prefix: 'api'}, (router: Router) => {
269 | router.group({prefix: 'posts'}, (router: Router) => {
270 | router.get('/:id/update', method);
271 | });
272 | });
273 | });
274 |
275 | /* Then */
276 | expect(registeredPath).to.equal('/api/posts/:id/update');
277 | });
278 |
279 | it('Should inherit prefix of higher group to lower group', function () {
280 | /* Given */
281 | let registeredPath: string|null = null;
282 |
283 | const app: any = {
284 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
285 | registeredPath = path;
286 | }
287 | };
288 |
289 | /* When */
290 | const method = (req: any, res: any) => {
291 | /* The impl */
292 | };
293 | Torch(app as Application, (router: Router) => {
294 | router.group({prefix: 'api'}, (router: Router) => {
295 | router.group({}, (router: Router) => {
296 | router.get('/:id/update', method);
297 | });
298 | });
299 | });
300 |
301 | /* Then */
302 | expect(registeredPath).to.equal('/api/:id/update');
303 | });
304 |
305 | it('Should inherit prefix of multiple higher groups to lower group', function () {
306 | /* Given */
307 | let registeredPath: string|null = null;
308 |
309 | const app: any = {
310 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
311 | registeredPath = path;
312 | }
313 | };
314 |
315 | /* When */
316 | const method = (req: any, res: any) => {
317 | /* The impl */
318 | };
319 | Torch(app as Application, (router: Router) => {
320 | router.group({prefix: 'api'}, (router: Router) => {
321 | router.group({}, (router: Router) => {
322 | router.group({}, (router: Router) => {
323 | router.get('/:id/update', method);
324 | });
325 | });
326 | });
327 | });
328 |
329 | /* Then */
330 | expect(registeredPath).to.equal('/api/:id/update');
331 | });
332 |
333 | it('Should allow for registering a route with a prefix from two groups without a path', function () {
334 | /* Given */
335 | let registeredPath: string|null = null;
336 |
337 | const app: any = {
338 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
339 | registeredPath = path;
340 | }
341 | };
342 |
343 | /* When */
344 | const method = (req: any, res: any) => {
345 | /* The impl */
346 | };
347 | Torch(app as Application, (router: Router) => {
348 | router.group({prefix: 'api'}, (router: Router) => {
349 | router.group({prefix: 'posts'}, (router: Router) => {
350 | router.get('/', method);
351 | });
352 | });
353 | });
354 |
355 | /* Then */
356 | expect(registeredPath).to.equal('/api/posts');
357 | });
358 |
359 | it('Should pass the middleware', function () {
360 | /* Given */
361 | let registeredMiddleware: (Array<(req: Request, res: Response, next: NextFunction) => any>) = [];
362 |
363 | const app: any = {
364 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
365 | registeredMiddleware = middleware;
366 | }
367 | };
368 |
369 | /* When */
370 | const middleware = (req: any, res: any, next: any) => {
371 | /* The impl */
372 | };
373 | const method = (req: any, res: any) => {
374 | /* The impl */
375 | };
376 | Torch(app as Application, (router: Router) => {
377 | router.get('/home', {
378 | middleware: [middleware],
379 | controller: method
380 | });
381 | });
382 |
383 | /* Then */
384 | expect(registeredMiddleware[1]).to.equal(middleware);
385 | });
386 |
387 | it('Should add middleware from the group', function () {
388 | /* Given */
389 | let registeredMiddleware: (Array<(req: Request, res: Response, next: NextFunction) => any>) = [];
390 |
391 | const app: any = {
392 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
393 | registeredMiddleware = middleware;
394 | }
395 | };
396 |
397 | /* When */
398 | const middleware = (req: any, res: any, next: any) => {
399 | /* The impl */
400 | };
401 | const method = (req: any, res: any) => {
402 | /* The impl */
403 | };
404 | Torch(app as Application, (router: Router) => {
405 | router.group({middleware: [middleware]}, (router: Router) => {
406 | router.get('/home', method);
407 | });
408 | });
409 |
410 | /* Then */
411 | expect(registeredMiddleware[1]).to.equal(middleware);
412 | });
413 |
414 | it('Should inherit middleware from distant group', function () {
415 | /* Given */
416 | let registeredMiddleware: (Array<(req: Request, res: Response, next: NextFunction) => any>) = [];
417 |
418 | const app: any = {
419 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
420 | registeredMiddleware = middleware;
421 | }
422 | };
423 |
424 | /* When */
425 | const middleware = (req: any, res: any, next: any) => {
426 | /* The impl */
427 | };
428 | const method = (req: any, res: any) => {
429 | /* The impl */
430 | };
431 | Torch(app as Application, (router: Router) => {
432 | router.group({middleware: [middleware]}, (router: Router) => {
433 | router.group({}, (router: Router) => {
434 | router.get('/home', method);
435 | });
436 | });
437 | });
438 |
439 | /* Then */
440 | expect(registeredMiddleware[1]).to.equal(middleware);
441 | });
442 |
443 | it('Should add middlewares in correct order', function () {
444 | /* Given */
445 | let registeredMiddleware: (Array<(req: Request, res: Response, next: NextFunction) => any>) = [];
446 |
447 | const app: any = {
448 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
449 | registeredMiddleware = middleware;
450 | }
451 | };
452 |
453 | /* When */
454 | const a = (req: any, res: any, next: any) => {
455 | /* The impl */
456 | };
457 | const b = (req: any, res: any, next: any) => {
458 | /* The impl */
459 | };
460 | const c = (req: any, res: any, next: any) => {
461 | /* The impl */
462 | };
463 | const method = (req: any, res: any) => {
464 | /* The impl */
465 | };
466 | Torch(app as Application, (router: Router) => {
467 | router.group({middleware: [a]}, (router: Router) => {
468 | router.group({middleware: [b]}, (router: Router) => {
469 | router.get('/home', {
470 | middleware: [c],
471 | controller: method
472 | });
473 | });
474 | });
475 | });
476 |
477 | /* Then */
478 | expect(registeredMiddleware[1]).to.equal(a);
479 | expect(registeredMiddleware[2]).to.equal(b);
480 | expect(registeredMiddleware[3]).to.equal(c);
481 | });
482 | });
483 |
484 | describe('aggregated routes, i.e. Torches\' result', function () {
485 |
486 | it('should have flattened groups', function () {
487 | /* Given */
488 | const app: any = {
489 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
490 | }
491 | };
492 |
493 | const routes = Torch(app as Application, (router: Router) => {
494 | router.group({prefix: '/api'}, function (router) {
495 | router.get('/posts', (req: any, res: any) => {
496 | /* The impl */
497 | });
498 | });
499 | });
500 |
501 | /* When */
502 | const result = routes.all();
503 |
504 | /* Then */
505 | expect(result).have.lengthOf(1);
506 | expect(result[0].path).to.equal('/api/posts');
507 | });
508 |
509 | describe('named', function () {
510 | it('should resolve route without arguments', function () {
511 | /* Given */
512 | const app: any = {
513 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
514 | }
515 | };
516 |
517 | const routes = Torch(app as Application, (router: Router) => {
518 | router.get('/my-page', {
519 | name: 'home',
520 | controller: (req: any, res: any) => {
521 | /* The impl */
522 | }
523 | });
524 | });
525 |
526 | /* When */
527 | const result = routes.named('home');
528 |
529 | /* Then */
530 | expect(result).to.equal('/my-page');
531 | });
532 | it('should resolve route with arguments', function () {
533 | /* Given */
534 | const app: any = {
535 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
536 | }
537 | };
538 |
539 | const routes = Torch(app as Application, (router: Router) => {
540 | router.get('/posts/:id', {
541 | name: 'posts.show',
542 | controller: (req: any, res: any) => {
543 | /* The impl */
544 | }
545 | });
546 | });
547 |
548 | /* When */
549 | const result = routes.named('posts.show', {
550 | id: 123
551 | });
552 |
553 | /* Then */
554 | expect(result).to.equal('/posts/123');
555 | });
556 | it('should find the correct path', function () {
557 | /* Given */
558 | const app: any = {
559 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
560 | }
561 | };
562 |
563 | const routes = Torch(app as Application, (router: Router) => {
564 | router.get('/posts', {
565 | name: 'posts.index',
566 | controller: (req: any, res: any) => {
567 | /* The impl */
568 | }
569 | });
570 | router.get('/posts/:id', {
571 | name: 'posts.show',
572 | controller: (req: any, res: any) => {
573 | /* The impl */
574 | }
575 | });
576 | });
577 |
578 | /* When */
579 | const result = routes.named('posts.show', {
580 | id: 123
581 | });
582 |
583 | /* Then */
584 | expect(result).to.equal('/posts/123');
585 | });
586 | it('should add middleware to request to find path', function () {
587 | /* Given */
588 | let registeredMiddlewares: Array<(req: Request, res: Response, next: NextFunction) => any> = [];
589 | const app: any = {
590 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
591 | registeredMiddlewares = middleware;
592 | }
593 | };
594 |
595 | const routes = Torch(app as Application, (router: Router) => {
596 | router.get('/home', {
597 | name: 'home',
598 | controller: (req: any, res: any) => {
599 | /* The impl */
600 | }
601 | });
602 | });
603 |
604 | /* When */
605 | const req: any = {};
606 | const res: any = {};
607 | for (var i = 0; i < registeredMiddlewares.length; i++) {
608 | registeredMiddlewares[i](req, res, () => {
609 | });
610 | }
611 | const result = req.routes.named('home');
612 |
613 | /* Then */
614 | expect(result).to.equal('/home');
615 | });
616 | });
617 | });
618 |
619 | describe('Should allow placing constraints on a route its variables by using .where() on a route', function () {
620 | it('should accept constraints', function () {
621 | /* Given */
622 | let registeredPath: string | null = null;
623 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
624 |
625 | const app: any = {
626 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
627 | registeredPath = path;
628 | registeredMethod = method;
629 | }
630 | };
631 |
632 | /* When */
633 | const method = (req: any, res: any) => {
634 | /* The impl */
635 | };
636 | Torch(app as Application, (router: Router) => {
637 | router.get('/home/:id', method).where({
638 | 'id': '(\\d+)'
639 | });
640 | });
641 |
642 | /* Then */
643 | expect(registeredPath).to.equal('/home/:id(\\d+)');
644 | expect(registeredMethod).to.equal(method);
645 | });
646 |
647 | it('should accept multiple constraints', function () {
648 | /* Given */
649 | let registeredPath: string | null = null;
650 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
651 |
652 | const app: any = {
653 | post: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
654 | registeredPath = path;
655 | registeredMethod = method;
656 | }
657 | };
658 |
659 | /* When */
660 | const method = (req: any, res: any) => {
661 | /* The impl */
662 | };
663 | Torch(app as Application, (router: Router) => {
664 | router.post('/home/:id/:postId', method).where({
665 | 'id': '(\\d+)',
666 | 'postId': '(1|2|3)'
667 | });
668 | });
669 |
670 | /* Then */
671 | expect(registeredPath).to.equal('/home/:id(\\d+)/:postId(1|2|3)');
672 | expect(registeredMethod).to.equal(method);
673 | });
674 |
675 | it('should accept multiple constraints spanning multiple groups of variables', function () {
676 | /* Given */
677 | let registeredPath: string | null = null;
678 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
679 |
680 | const app: any = {
681 | put: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
682 | registeredPath = path;
683 | registeredMethod = method;
684 | }
685 | };
686 |
687 | /* When */
688 | const method = (req: any, res: any) => {
689 | /* The impl */
690 | };
691 | Torch(app as Application, (router: Router) => {
692 | router.group({ prefix: ':foo' }, router => {
693 | router.group({ prefix: '/:bar' }, router => {
694 | router.put('/home/:id/:postId', method).where({
695 | 'id': '(\\d+)',
696 | 'postId': '(1|2|3)',
697 | 'foo': '[0-9]+',
698 | 'bar': '[a-b]'
699 | });
700 | });
701 | });
702 | });
703 |
704 | /* Then */
705 | expect(registeredPath).to.equal('/:foo[0-9]+/:bar[a-b]/home/:id(\\d+)/:postId(1|2|3)');
706 | expect(registeredMethod).to.equal(method);
707 | });
708 |
709 | it('should not screw up the route if unmet constraints are added', function () {
710 | /* Given */
711 | let registeredPath: string | null = null;
712 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
713 |
714 | const app: any = {
715 | delete: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
716 | registeredPath = path;
717 | registeredMethod = method;
718 | }
719 | };
720 |
721 | /* When */
722 | const method = (req: any, res: any) => {
723 | /* The impl */
724 | };
725 | Torch(app as Application, (router: Router) => {
726 | router.delete('/:id/:postId', method).where({
727 | 'id': '(\\d+)',
728 | 'postId': '(1|2|3)',
729 | 'foo': '[0-9]+'
730 | });
731 | });
732 |
733 | /* Then */
734 | expect(registeredPath).to.equal('/:id(\\d+)/:postId(1|2|3)');
735 | expect(registeredMethod).to.equal(method);
736 | });
737 |
738 | it('should not screw up if the order of variables is confusing', function () {
739 | /* Given */
740 | let registeredPath: string | null = null;
741 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
742 |
743 | const app: any = {
744 | delete: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
745 | registeredPath = path;
746 | registeredMethod = method;
747 | }
748 | };
749 |
750 | /* When */
751 | const method = (req: any, res: any) => {
752 | /* The impl */
753 | };
754 | Torch(app as Application, (router: Router) => {
755 | router.delete('/:identifier/:id', method).where({
756 | 'id': '(\\d+)',
757 | 'identifier': '(\\d+)'
758 | });
759 | });
760 |
761 | /* Then */
762 | expect(registeredPath).to.equal('/:identifier(\\d+)/:id(\\d+)');
763 | expect(registeredMethod).to.equal(method);
764 | });
765 |
766 | it('should leave a token alone if no constraint is specified', function () {
767 | /* Given */
768 | let registeredPath: string | null = null;
769 | let registeredMethod: ((req: Request, res: Response) => void) | null = null;
770 |
771 | const app: any = {
772 | delete: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
773 | registeredPath = path;
774 | registeredMethod = method;
775 | }
776 | };
777 |
778 | /* When */
779 | const method = (req: any, res: any) => {
780 | /* The impl */
781 | };
782 | Torch(app as Application, (router: Router) => {
783 | router.delete('/:identifier/:id', method).where({
784 | 'id': '(\\d+)'
785 | });
786 | });
787 |
788 | /* Then */
789 | expect(registeredPath).to.equal('/:identifier/:id(\\d+)');
790 | expect(registeredMethod).to.equal(method);
791 | });
792 | });
793 |
794 | describe('Binding routes to Express', function() {
795 | describe('Context', function () {
796 | it('Should be able to define on route level', function () {
797 |
798 | /* Given */
799 | type myMetaData = { blaat: string };
800 |
801 | let registeredPath: string|null = null;
802 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
803 |
804 | const app: any = {
805 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
806 | registeredPath = path;
807 | registeredMethod = method;
808 | }
809 | };
810 |
811 | class Foo {
812 | private test = 'hello';
813 |
814 | public method(req: Request, res: Response) {
815 | return this.test;
816 | }
817 | }
818 | const fooInstance = new Foo();
819 |
820 | /* When */
821 | const routes = Torch(app as Application, (router) => {
822 | router.get('/home', {
823 | controller: fooInstance.method,
824 | context: fooInstance
825 | });
826 | });
827 |
828 | /* Then */
829 | expect(registeredPath).to.equal('/home');
830 | expect((registeredMethod as any)(1 as any, 2 as any)).to.equal('hello');
831 | });
832 | it('Should be able to define at group level', function () {
833 |
834 | /* Given */
835 | type myMetaData = { blaat: string };
836 |
837 | let registeredPath: string|null = null;
838 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
839 |
840 | const app: any = {
841 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
842 | registeredPath = path;
843 | registeredMethod = method;
844 | }
845 | };
846 |
847 | class Foo {
848 | private test = 'hello';
849 |
850 | public method(req: Request, res: Response) {
851 | return this.test;
852 | }
853 | }
854 | const fooInstance = new Foo();
855 |
856 | /* When */
857 | const routes = Torch(app as Application, (router) => {
858 | router.group({ context: fooInstance }, (aRouter) => {
859 | aRouter.get('/home', fooInstance.method);
860 | });
861 | });
862 |
863 | /* Then */
864 | expect(registeredPath).to.equal('/home');
865 | expect((registeredMethod as any)(1 as any, 2 as any)).to.equal('hello');
866 | });
867 | it('Should inherit over groups', function () {
868 |
869 | /* Given */
870 | type myMetaData = { blaat: string };
871 |
872 | let registeredPath: string|null = null;
873 | let registeredMethod: ((req: Request, res: Response) => void)|null = null;
874 |
875 | const app: any = {
876 | get: (path: string, middleware: Array<(req: Request, res: Response, next: NextFunction) => any>, method: ((req: Request, res: Response) => void)) => {
877 | registeredPath = path;
878 | registeredMethod = method;
879 | }
880 | };
881 |
882 | class Foo {
883 | private test = 'hello';
884 |
885 | public method(req: Request, res: Response) {
886 | return this.test;
887 | }
888 | }
889 | const fooInstance = new Foo();
890 |
891 | /* When */
892 | const routes = Torch(app as Application, (router) => {
893 | router.group({ context: fooInstance }, (aRouter) => {
894 | aRouter.group({ }, (bRouter) => {
895 | bRouter.get('/home', fooInstance.method);
896 | });
897 | });
898 | });
899 |
900 | /* Then */
901 | expect(registeredPath).to.equal('/home');
902 | expect((registeredMethod as any)(1 as any, 2 as any)).to.equal('hello');
903 | });
904 | });
905 | });
906 | });
907 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "./build",
4 | "sourceMap": true,
5 | "moduleResolution": "node",
6 | "module": "commonjs",
7 | "target": "es5",
8 | "strictNullChecks": true
9 | },
10 | "files": [
11 | "./src/torch.ts"
12 | ]
13 | }
--------------------------------------------------------------------------------
/tsconfig.test.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "sourceMap": true,
4 | "moduleResolution": "node",
5 | "module": "commonjs",
6 | "target": "es5",
7 | "strictNullChecks": true
8 | },
9 | "files": [
10 | "./tests/torch.test.ts"
11 | ]
12 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tslint:recommended",
3 | "rules": {
4 | "curly": true,
5 | "object-literal-sort-keys": false,
6 | "ordered-imports": false,
7 | "quotemark": "single",
8 | "trailing-comma": false,
9 | "variable-name": [
10 | true,
11 | "allow-leading-underscore"
12 | ],
13 | "interface-name": false,
14 | "triple-equals": true
15 | }
16 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/chai":
6 | version "3.4.34"
7 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.4.34.tgz#d5335792823bb09cddd5e38c3d211b709183854d"
8 |
9 | "@types/expect.js":
10 | version "0.3.29"
11 | resolved "https://registry.yarnpkg.com/@types/expect.js/-/expect.js-0.3.29.tgz#28dd359155b84b8ecb094afc3f4b74c3222dca3b"
12 |
13 | "@types/express":
14 | version "4.0.33"
15 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.0.33.tgz#9212b6c67e02e09ee9f80740ded04306050739ab"
16 | dependencies:
17 | "@types/express-serve-static-core" "*"
18 | "@types/serve-static" "*"
19 |
20 | "@types/express-serve-static-core@*":
21 | version "4.0.39"
22 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.39.tgz#45157f96480d46f254648f45b2c6d70bd9fc9f54"
23 | dependencies:
24 | "@types/node" "*"
25 |
26 | "@types/mime@*":
27 | version "0.0.29"
28 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
29 |
30 | "@types/mocha":
31 | version "2.2.32"
32 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.32.tgz#dda0da6eaf2195d2ff808f42a1725b1a19e7ed69"
33 |
34 | "@types/node@*":
35 | version "6.0.46"
36 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.46.tgz#8d9e48572831f05b11cc4c793754d43437219d62"
37 |
38 | "@types/serve-static@*":
39 | version "1.7.31"
40 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.7.31.tgz#15456de8d98d6b4cff31be6c6af7492ae63f521a"
41 | dependencies:
42 | "@types/express-serve-static-core" "*"
43 | "@types/mime" "*"
44 |
45 | align-text@^0.1.1, align-text@^0.1.3:
46 | version "0.1.4"
47 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
48 | dependencies:
49 | kind-of "^3.0.2"
50 | longest "^1.0.1"
51 | repeat-string "^1.5.2"
52 |
53 | amdefine@>=0.0.4:
54 | version "1.0.0"
55 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33"
56 |
57 | ansi-align@^1.1.0:
58 | version "1.1.0"
59 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
60 | dependencies:
61 | string-width "^1.0.1"
62 |
63 | ansi-regex@^2.0.0:
64 | version "2.0.0"
65 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
66 |
67 | ansi-styles@^2.2.1:
68 | version "2.2.1"
69 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
70 |
71 | append-transform@^0.3.0:
72 | version "0.3.0"
73 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.3.0.tgz#d6933ce4a85f09445d9ccc4cc119051b7381a813"
74 |
75 | archy@^1.0.0:
76 | version "1.0.0"
77 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
78 |
79 | arr-diff@^2.0.0:
80 | version "2.0.0"
81 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
82 | dependencies:
83 | arr-flatten "^1.0.1"
84 |
85 | arr-flatten@^1.0.1:
86 | version "1.0.1"
87 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
88 |
89 | array-unique@^0.2.1:
90 | version "0.2.1"
91 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
92 |
93 | arrify@^1.0.1:
94 | version "1.0.1"
95 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
96 |
97 | assertion-error@^1.0.1:
98 | version "1.0.2"
99 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
100 |
101 | async@^1.4.0, async@^1.4.2:
102 | version "1.5.2"
103 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
104 |
105 | async@~0.2.6:
106 | version "0.2.10"
107 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
108 |
109 | babel-code-frame@^6.16.0:
110 | version "6.16.0"
111 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de"
112 | dependencies:
113 | chalk "^1.1.0"
114 | esutils "^2.0.2"
115 | js-tokens "^2.0.0"
116 |
117 | babel-code-frame@^6.20.0:
118 | version "6.20.0"
119 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26"
120 | dependencies:
121 | chalk "^1.1.0"
122 | esutils "^2.0.2"
123 | js-tokens "^2.0.0"
124 |
125 | babel-generator@^6.18.0:
126 | version "6.18.0"
127 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07"
128 | dependencies:
129 | babel-messages "^6.8.0"
130 | babel-runtime "^6.9.0"
131 | babel-types "^6.18.0"
132 | detect-indent "^4.0.0"
133 | jsesc "^1.3.0"
134 | lodash "^4.2.0"
135 | source-map "^0.5.0"
136 |
137 | babel-messages@^6.8.0:
138 | version "6.8.0"
139 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
140 | dependencies:
141 | babel-runtime "^6.0.0"
142 |
143 | babel-runtime@^6.0.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1:
144 | version "6.18.0"
145 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078"
146 | dependencies:
147 | core-js "^2.4.0"
148 | regenerator-runtime "^0.9.5"
149 |
150 | babel-template@^6.16.0:
151 | version "6.16.0"
152 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
153 | dependencies:
154 | babel-runtime "^6.9.0"
155 | babel-traverse "^6.16.0"
156 | babel-types "^6.16.0"
157 | babylon "^6.11.0"
158 | lodash "^4.2.0"
159 |
160 | babel-traverse@^6.16.0, babel-traverse@^6.18.0:
161 | version "6.18.0"
162 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e"
163 | dependencies:
164 | babel-code-frame "^6.16.0"
165 | babel-messages "^6.8.0"
166 | babel-runtime "^6.9.0"
167 | babel-types "^6.18.0"
168 | babylon "^6.11.0"
169 | debug "^2.2.0"
170 | globals "^9.0.0"
171 | invariant "^2.2.0"
172 | lodash "^4.2.0"
173 |
174 | babel-types@^6.16.0, babel-types@^6.18.0:
175 | version "6.18.0"
176 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8"
177 | dependencies:
178 | babel-runtime "^6.9.1"
179 | esutils "^2.0.2"
180 | lodash "^4.2.0"
181 | to-fast-properties "^1.0.1"
182 |
183 | babylon@^6.11.0, babylon@^6.13.0:
184 | version "6.13.1"
185 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.1.tgz#adca350e088f0467647157652bafead6ddb8dfdb"
186 |
187 | balanced-match@^0.4.1:
188 | version "0.4.2"
189 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
190 |
191 | boxen@^0.6.0:
192 | version "0.6.0"
193 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
194 | dependencies:
195 | ansi-align "^1.1.0"
196 | camelcase "^2.1.0"
197 | chalk "^1.1.1"
198 | cli-boxes "^1.0.0"
199 | filled-array "^1.0.0"
200 | object-assign "^4.0.1"
201 | repeating "^2.0.0"
202 | string-width "^1.0.1"
203 | widest-line "^1.0.0"
204 |
205 | brace-expansion@^1.0.0:
206 | version "1.1.6"
207 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
208 | dependencies:
209 | balanced-match "^0.4.1"
210 | concat-map "0.0.1"
211 |
212 | braces@^1.8.2:
213 | version "1.8.5"
214 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
215 | dependencies:
216 | expand-range "^1.8.1"
217 | preserve "^0.2.0"
218 | repeat-element "^1.1.2"
219 |
220 | browser-stdout@1.3.0:
221 | version "1.3.0"
222 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
223 |
224 | buffer-shims@^1.0.0:
225 | version "1.0.0"
226 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
227 |
228 | builtin-modules@^1.0.0:
229 | version "1.1.1"
230 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
231 |
232 | caching-transform@^1.0.0:
233 | version "1.0.1"
234 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1"
235 | dependencies:
236 | md5-hex "^1.2.0"
237 | mkdirp "^0.5.1"
238 | write-file-atomic "^1.1.4"
239 |
240 | camelcase@^1.0.2:
241 | version "1.2.1"
242 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
243 |
244 | camelcase@^2.1.0:
245 | version "2.1.1"
246 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
247 |
248 | camelcase@^3.0.0:
249 | version "3.0.0"
250 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
251 |
252 | capture-stack-trace@^1.0.0:
253 | version "1.0.0"
254 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
255 |
256 | center-align@^0.1.1:
257 | version "0.1.3"
258 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
259 | dependencies:
260 | align-text "^0.1.3"
261 | lazy-cache "^1.0.3"
262 |
263 | chai:
264 | version "3.5.0"
265 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
266 | dependencies:
267 | assertion-error "^1.0.1"
268 | deep-eql "^0.1.3"
269 | type-detect "^1.0.0"
270 |
271 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1:
272 | version "1.1.3"
273 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
274 | dependencies:
275 | ansi-styles "^2.2.1"
276 | escape-string-regexp "^1.0.2"
277 | has-ansi "^2.0.0"
278 | strip-ansi "^3.0.0"
279 | supports-color "^2.0.0"
280 |
281 | cli-boxes@^1.0.0:
282 | version "1.0.0"
283 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
284 |
285 | cliui@^2.1.0:
286 | version "2.1.0"
287 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
288 | dependencies:
289 | center-align "^0.1.1"
290 | right-align "^0.1.1"
291 | wordwrap "0.0.2"
292 |
293 | cliui@^3.2.0:
294 | version "3.2.0"
295 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
296 | dependencies:
297 | string-width "^1.0.1"
298 | strip-ansi "^3.0.1"
299 | wrap-ansi "^2.0.0"
300 |
301 | code-point-at@^1.0.0:
302 | version "1.0.1"
303 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb"
304 | dependencies:
305 | number-is-nan "^1.0.0"
306 |
307 | colors@^1.1.2:
308 | version "1.1.2"
309 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
310 |
311 | commander@2.9.0, commander@^2.9.0:
312 | version "2.9.0"
313 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
314 | dependencies:
315 | graceful-readlink ">= 1.0.0"
316 |
317 | commondir@^1.0.1:
318 | version "1.0.1"
319 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
320 |
321 | concat-map@0.0.1:
322 | version "0.0.1"
323 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
324 |
325 | configstore@^2.0.0:
326 | version "2.1.0"
327 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
328 | dependencies:
329 | dot-prop "^3.0.0"
330 | graceful-fs "^4.1.2"
331 | mkdirp "^0.5.0"
332 | object-assign "^4.0.1"
333 | os-tmpdir "^1.0.0"
334 | osenv "^0.1.0"
335 | uuid "^2.0.1"
336 | write-file-atomic "^1.1.2"
337 | xdg-basedir "^2.0.0"
338 |
339 | convert-source-map@^1.3.0:
340 | version "1.3.0"
341 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
342 |
343 | core-js@^2.4.0:
344 | version "2.4.1"
345 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
346 |
347 | core-util-is@~1.0.0:
348 | version "1.0.2"
349 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
350 |
351 | create-error-class@^3.0.1:
352 | version "3.0.2"
353 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
354 | dependencies:
355 | capture-stack-trace "^1.0.0"
356 |
357 | cross-spawn@^4:
358 | version "4.0.2"
359 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
360 | dependencies:
361 | lru-cache "^4.0.1"
362 | which "^1.2.9"
363 |
364 | debug@2.2.0, debug@^2.2.0:
365 | version "2.2.0"
366 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
367 | dependencies:
368 | ms "0.7.1"
369 |
370 | decamelize@^1.0.0, decamelize@^1.1.1:
371 | version "1.2.0"
372 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
373 |
374 | deep-eql@^0.1.3:
375 | version "0.1.3"
376 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
377 | dependencies:
378 | type-detect "0.1.1"
379 |
380 | deep-extend@~0.4.0:
381 | version "0.4.1"
382 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
383 |
384 | default-require-extensions@^1.0.0:
385 | version "1.0.0"
386 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
387 | dependencies:
388 | strip-bom "^2.0.0"
389 |
390 | detect-indent@^0.2.0:
391 | version "0.2.0"
392 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-0.2.0.tgz#042914498979ac2d9f3c73e4ff3e6877d3bc92b6"
393 | dependencies:
394 | get-stdin "^0.1.0"
395 | minimist "^0.1.0"
396 |
397 | detect-indent@^4.0.0:
398 | version "4.0.0"
399 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
400 | dependencies:
401 | repeating "^2.0.0"
402 |
403 | diff@1.4.0:
404 | version "1.4.0"
405 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
406 |
407 | diff@^3.0.1:
408 | version "3.2.0"
409 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
410 |
411 | dot-prop@^3.0.0:
412 | version "3.0.0"
413 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
414 | dependencies:
415 | is-obj "^1.0.0"
416 |
417 | dts-bundle:
418 | version "0.6.1"
419 | resolved "https://registry.yarnpkg.com/dts-bundle/-/dts-bundle-0.6.1.tgz#a677bf399000f216f58123a1e3c38340d35d0b72"
420 | dependencies:
421 | commander "^2.9.0"
422 | detect-indent "^0.2.0"
423 | glob "^6.0.4"
424 | mkdirp "^0.5.0"
425 |
426 | duplexer2@^0.1.4:
427 | version "0.1.4"
428 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
429 | dependencies:
430 | readable-stream "^2.0.2"
431 |
432 | error-ex@^1.2.0:
433 | version "1.3.0"
434 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
435 | dependencies:
436 | is-arrayish "^0.2.1"
437 |
438 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2:
439 | version "1.0.5"
440 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
441 |
442 | esutils@^2.0.2:
443 | version "2.0.2"
444 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
445 |
446 | expand-brackets@^0.1.4:
447 | version "0.1.5"
448 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
449 | dependencies:
450 | is-posix-bracket "^0.1.0"
451 |
452 | expand-range@^1.8.1:
453 | version "1.8.2"
454 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
455 | dependencies:
456 | fill-range "^2.1.0"
457 |
458 | extglob@^0.3.1:
459 | version "0.3.2"
460 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
461 | dependencies:
462 | is-extglob "^1.0.0"
463 |
464 | filename-regex@^2.0.0:
465 | version "2.0.0"
466 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
467 |
468 | fill-range@^2.1.0:
469 | version "2.2.3"
470 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
471 | dependencies:
472 | is-number "^2.1.0"
473 | isobject "^2.0.0"
474 | randomatic "^1.1.3"
475 | repeat-element "^1.1.2"
476 | repeat-string "^1.5.2"
477 |
478 | filled-array@^1.0.0:
479 | version "1.1.0"
480 | resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
481 |
482 | find-cache-dir@^0.1.1:
483 | version "0.1.1"
484 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
485 | dependencies:
486 | commondir "^1.0.1"
487 | mkdirp "^0.5.1"
488 | pkg-dir "^1.0.0"
489 |
490 | find-up@^1.0.0, find-up@^1.1.2:
491 | version "1.1.2"
492 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
493 | dependencies:
494 | path-exists "^2.0.0"
495 | pinkie-promise "^2.0.0"
496 |
497 | findup-sync@~0.3.0:
498 | version "0.3.0"
499 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
500 | dependencies:
501 | glob "~5.0.0"
502 |
503 | for-in@^0.1.5:
504 | version "0.1.6"
505 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
506 |
507 | for-own@^0.1.4:
508 | version "0.1.4"
509 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
510 | dependencies:
511 | for-in "^0.1.5"
512 |
513 | foreground-child@^1.3.3, foreground-child@^1.5.3:
514 | version "1.5.3"
515 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.3.tgz#94dd6aba671389867de8e57e99f1c2ecfb15c01a"
516 | dependencies:
517 | cross-spawn "^4"
518 | signal-exit "^3.0.0"
519 |
520 | fs.realpath@^1.0.0:
521 | version "1.0.0"
522 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
523 |
524 | get-caller-file@^1.0.1:
525 | version "1.0.2"
526 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
527 |
528 | get-stdin@^0.1.0:
529 | version "0.1.0"
530 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-0.1.0.tgz#5998af24aafc802d15c82c685657eeb8b10d4a91"
531 |
532 | glob-base@^0.3.0:
533 | version "0.3.0"
534 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
535 | dependencies:
536 | glob-parent "^2.0.0"
537 | is-glob "^2.0.0"
538 |
539 | glob-parent@^2.0.0:
540 | version "2.0.0"
541 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
542 | dependencies:
543 | is-glob "^2.0.0"
544 |
545 | glob@7.0.5:
546 | version "7.0.5"
547 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
548 | dependencies:
549 | fs.realpath "^1.0.0"
550 | inflight "^1.0.4"
551 | inherits "2"
552 | minimatch "^3.0.2"
553 | once "^1.3.0"
554 | path-is-absolute "^1.0.0"
555 |
556 | glob@^6.0.4:
557 | version "6.0.4"
558 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
559 | dependencies:
560 | inflight "^1.0.4"
561 | inherits "2"
562 | minimatch "2 || 3"
563 | once "^1.3.0"
564 | path-is-absolute "^1.0.0"
565 |
566 | glob@^7.0.5, glob@^7.0.6, glob@^7.1.1:
567 | version "7.1.1"
568 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
569 | dependencies:
570 | fs.realpath "^1.0.0"
571 | inflight "^1.0.4"
572 | inherits "2"
573 | minimatch "^3.0.2"
574 | once "^1.3.0"
575 | path-is-absolute "^1.0.0"
576 |
577 | glob@~5.0.0:
578 | version "5.0.15"
579 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
580 | dependencies:
581 | inflight "^1.0.4"
582 | inherits "2"
583 | minimatch "2 || 3"
584 | once "^1.3.0"
585 | path-is-absolute "^1.0.0"
586 |
587 | globals@^9.0.0:
588 | version "9.12.0"
589 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d"
590 |
591 | got@^5.0.0:
592 | version "5.7.1"
593 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
594 | dependencies:
595 | create-error-class "^3.0.1"
596 | duplexer2 "^0.1.4"
597 | is-redirect "^1.0.0"
598 | is-retry-allowed "^1.0.0"
599 | is-stream "^1.0.0"
600 | lowercase-keys "^1.0.0"
601 | node-status-codes "^1.0.0"
602 | object-assign "^4.0.1"
603 | parse-json "^2.1.0"
604 | pinkie-promise "^2.0.0"
605 | read-all-stream "^3.0.0"
606 | readable-stream "^2.0.5"
607 | timed-out "^3.0.0"
608 | unzip-response "^1.0.2"
609 | url-parse-lax "^1.0.0"
610 |
611 | graceful-fs@^4.1.2:
612 | version "4.1.9"
613 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29"
614 |
615 | "graceful-readlink@>= 1.0.0":
616 | version "1.0.1"
617 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
618 |
619 | growl@1.9.2:
620 | version "1.9.2"
621 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
622 |
623 | handlebars@^4.0.3:
624 | version "4.0.5"
625 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7"
626 | dependencies:
627 | async "^1.4.0"
628 | optimist "^0.6.1"
629 | source-map "^0.4.4"
630 | optionalDependencies:
631 | uglify-js "^2.6"
632 |
633 | has-ansi@^2.0.0:
634 | version "2.0.0"
635 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
636 | dependencies:
637 | ansi-regex "^2.0.0"
638 |
639 | has-flag@^1.0.0:
640 | version "1.0.0"
641 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
642 |
643 | hosted-git-info@^2.1.4:
644 | version "2.1.5"
645 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
646 |
647 | imurmurhash@^0.1.4:
648 | version "0.1.4"
649 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
650 |
651 | inflight@^1.0.4:
652 | version "1.0.6"
653 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
654 | dependencies:
655 | once "^1.3.0"
656 | wrappy "1"
657 |
658 | inherits@2, inherits@~2.0.1:
659 | version "2.0.3"
660 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
661 |
662 | ini@~1.3.0:
663 | version "1.3.4"
664 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
665 |
666 | invariant@^2.2.0:
667 | version "2.2.1"
668 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54"
669 | dependencies:
670 | loose-envify "^1.0.0"
671 |
672 | invert-kv@^1.0.0:
673 | version "1.0.0"
674 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
675 |
676 | is-arrayish@^0.2.1:
677 | version "0.2.1"
678 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
679 |
680 | is-buffer@^1.0.2:
681 | version "1.1.4"
682 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
683 |
684 | is-builtin-module@^1.0.0:
685 | version "1.0.0"
686 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
687 | dependencies:
688 | builtin-modules "^1.0.0"
689 |
690 | is-dotfile@^1.0.0:
691 | version "1.0.2"
692 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
693 |
694 | is-equal-shallow@^0.1.3:
695 | version "0.1.3"
696 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
697 | dependencies:
698 | is-primitive "^2.0.0"
699 |
700 | is-extendable@^0.1.1:
701 | version "0.1.1"
702 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
703 |
704 | is-extglob@^1.0.0:
705 | version "1.0.0"
706 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
707 |
708 | is-finite@^1.0.0:
709 | version "1.0.2"
710 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
711 | dependencies:
712 | number-is-nan "^1.0.0"
713 |
714 | is-fullwidth-code-point@^1.0.0:
715 | version "1.0.0"
716 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
717 | dependencies:
718 | number-is-nan "^1.0.0"
719 |
720 | is-glob@^2.0.0, is-glob@^2.0.1:
721 | version "2.0.1"
722 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
723 | dependencies:
724 | is-extglob "^1.0.0"
725 |
726 | is-npm@^1.0.0:
727 | version "1.0.0"
728 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
729 |
730 | is-number@^2.0.2, is-number@^2.1.0:
731 | version "2.1.0"
732 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
733 | dependencies:
734 | kind-of "^3.0.2"
735 |
736 | is-obj@^1.0.0:
737 | version "1.0.1"
738 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
739 |
740 | is-posix-bracket@^0.1.0:
741 | version "0.1.1"
742 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
743 |
744 | is-primitive@^2.0.0:
745 | version "2.0.0"
746 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
747 |
748 | is-redirect@^1.0.0:
749 | version "1.0.0"
750 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
751 |
752 | is-retry-allowed@^1.0.0:
753 | version "1.1.0"
754 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
755 |
756 | is-stream@^1.0.0:
757 | version "1.1.0"
758 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
759 |
760 | is-utf8@^0.2.0:
761 | version "0.2.1"
762 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
763 |
764 | isarray@1.0.0, isarray@~1.0.0:
765 | version "1.0.0"
766 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
767 |
768 | isexe@^1.1.1:
769 | version "1.1.2"
770 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
771 |
772 | isobject@^2.0.0:
773 | version "2.1.0"
774 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
775 | dependencies:
776 | isarray "1.0.0"
777 |
778 | istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0:
779 | version "1.0.0"
780 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2"
781 |
782 | istanbul-lib-hook@^1.0.0-alpha.4:
783 | version "1.0.0-alpha.4"
784 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz#8c5bb9f6fbd8526e0ae6cf639af28266906b938f"
785 | dependencies:
786 | append-transform "^0.3.0"
787 |
788 | istanbul-lib-instrument@^1.1.3:
789 | version "1.2.0"
790 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.2.0.tgz#73d5d108ab7568c373fdcb7d01c1d42d565bc8c4"
791 | dependencies:
792 | babel-generator "^6.18.0"
793 | babel-template "^6.16.0"
794 | babel-traverse "^6.18.0"
795 | babel-types "^6.18.0"
796 | babylon "^6.13.0"
797 | istanbul-lib-coverage "^1.0.0"
798 | semver "^5.3.0"
799 |
800 | istanbul-lib-report@^1.0.0-alpha.3:
801 | version "1.0.0-alpha.3"
802 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af"
803 | dependencies:
804 | async "^1.4.2"
805 | istanbul-lib-coverage "^1.0.0-alpha"
806 | mkdirp "^0.5.1"
807 | path-parse "^1.0.5"
808 | rimraf "^2.4.3"
809 | supports-color "^3.1.2"
810 |
811 | istanbul-lib-source-maps@^1.0.2:
812 | version "1.0.2"
813 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.0.2.tgz#9e91b0e5ae6ed203f67c69a34e6e98b10bb69a49"
814 | dependencies:
815 | istanbul-lib-coverage "^1.0.0-alpha.0"
816 | mkdirp "^0.5.1"
817 | rimraf "^2.4.4"
818 | source-map "^0.5.3"
819 |
820 | istanbul-reports@^1.0.0-alpha.8:
821 | version "1.0.0"
822 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777"
823 | dependencies:
824 | handlebars "^4.0.3"
825 |
826 | js-tokens@^2.0.0:
827 | version "2.0.0"
828 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
829 |
830 | jsesc@^1.3.0:
831 | version "1.3.0"
832 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
833 |
834 | json3@3.3.2:
835 | version "3.3.2"
836 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
837 |
838 | kind-of@^3.0.2:
839 | version "3.0.4"
840 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74"
841 | dependencies:
842 | is-buffer "^1.0.2"
843 |
844 | latest-version@^2.0.0:
845 | version "2.0.0"
846 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
847 | dependencies:
848 | package-json "^2.0.0"
849 |
850 | lazy-cache@^1.0.3:
851 | version "1.0.4"
852 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
853 |
854 | lazy-req@^1.1.0:
855 | version "1.1.0"
856 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
857 |
858 | lcid@^1.0.0:
859 | version "1.0.0"
860 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
861 | dependencies:
862 | invert-kv "^1.0.0"
863 |
864 | load-json-file@^1.0.0:
865 | version "1.1.0"
866 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
867 | dependencies:
868 | graceful-fs "^4.1.2"
869 | parse-json "^2.2.0"
870 | pify "^2.0.0"
871 | pinkie-promise "^2.0.0"
872 | strip-bom "^2.0.0"
873 |
874 | lodash._baseassign@^3.0.0:
875 | version "3.2.0"
876 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
877 | dependencies:
878 | lodash._basecopy "^3.0.0"
879 | lodash.keys "^3.0.0"
880 |
881 | lodash._basecopy@^3.0.0:
882 | version "3.0.1"
883 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
884 |
885 | lodash._basecreate@^3.0.0:
886 | version "3.0.3"
887 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
888 |
889 | lodash._getnative@^3.0.0:
890 | version "3.9.1"
891 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
892 |
893 | lodash._isiterateecall@^3.0.0:
894 | version "3.0.9"
895 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
896 |
897 | lodash.create@3.1.1:
898 | version "3.1.1"
899 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
900 | dependencies:
901 | lodash._baseassign "^3.0.0"
902 | lodash._basecreate "^3.0.0"
903 | lodash._isiterateecall "^3.0.0"
904 |
905 | lodash.isarguments@^3.0.0:
906 | version "3.1.0"
907 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
908 |
909 | lodash.isarray@^3.0.0:
910 | version "3.0.4"
911 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
912 |
913 | lodash.keys@^3.0.0:
914 | version "3.1.2"
915 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
916 | dependencies:
917 | lodash._getnative "^3.0.0"
918 | lodash.isarguments "^3.0.0"
919 | lodash.isarray "^3.0.0"
920 |
921 | lodash@^4.2.0:
922 | version "4.16.4"
923 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
924 |
925 | longest@^1.0.1:
926 | version "1.0.1"
927 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
928 |
929 | loose-envify@^1.0.0:
930 | version "1.3.0"
931 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
932 | dependencies:
933 | js-tokens "^2.0.0"
934 |
935 | lowercase-keys@^1.0.0:
936 | version "1.0.0"
937 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
938 |
939 | lru-cache@^4.0.1:
940 | version "4.0.1"
941 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.1.tgz#1343955edaf2e37d9b9e7ee7241e27c4b9fb72be"
942 | dependencies:
943 | pseudomap "^1.0.1"
944 | yallist "^2.0.0"
945 |
946 | md5-hex@^1.2.0:
947 | version "1.3.0"
948 | resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4"
949 | dependencies:
950 | md5-o-matic "^0.1.1"
951 |
952 | md5-o-matic@^0.1.1:
953 | version "0.1.1"
954 | resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3"
955 |
956 | micromatch@^2.3.11:
957 | version "2.3.11"
958 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
959 | dependencies:
960 | arr-diff "^2.0.0"
961 | array-unique "^0.2.1"
962 | braces "^1.8.2"
963 | expand-brackets "^0.1.4"
964 | extglob "^0.3.1"
965 | filename-regex "^2.0.0"
966 | is-extglob "^1.0.0"
967 | is-glob "^2.0.1"
968 | kind-of "^3.0.2"
969 | normalize-path "^2.0.1"
970 | object.omit "^2.0.0"
971 | parse-glob "^3.0.4"
972 | regex-cache "^0.4.2"
973 |
974 | "minimatch@2 || 3", minimatch@^3.0.2:
975 | version "3.0.3"
976 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
977 | dependencies:
978 | brace-expansion "^1.0.0"
979 |
980 | minimist@0.0.8, minimist@~0.0.1:
981 | version "0.0.8"
982 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
983 |
984 | minimist@^0.1.0:
985 | version "0.1.0"
986 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de"
987 |
988 | minimist@^1.2.0:
989 | version "1.2.0"
990 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
991 |
992 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
993 | version "0.5.1"
994 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
995 | dependencies:
996 | minimist "0.0.8"
997 |
998 | mocha:
999 | version "3.1.2"
1000 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.1.2.tgz#51f93b432bf7e1b175ffc22883ccd0be32dba6b5"
1001 | dependencies:
1002 | browser-stdout "1.3.0"
1003 | commander "2.9.0"
1004 | debug "2.2.0"
1005 | diff "1.4.0"
1006 | escape-string-regexp "1.0.5"
1007 | glob "7.0.5"
1008 | growl "1.9.2"
1009 | json3 "3.3.2"
1010 | lodash.create "3.1.1"
1011 | mkdirp "0.5.1"
1012 | supports-color "3.1.2"
1013 |
1014 | ms@0.7.1:
1015 | version "0.7.1"
1016 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
1017 |
1018 | node-status-codes@^1.0.0:
1019 | version "1.0.0"
1020 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
1021 |
1022 | normalize-package-data@^2.3.2:
1023 | version "2.3.5"
1024 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
1025 | dependencies:
1026 | hosted-git-info "^2.1.4"
1027 | is-builtin-module "^1.0.0"
1028 | semver "2 || 3 || 4 || 5"
1029 | validate-npm-package-license "^3.0.1"
1030 |
1031 | normalize-path@^2.0.1:
1032 | version "2.0.1"
1033 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
1034 |
1035 | number-is-nan@^1.0.0:
1036 | version "1.0.1"
1037 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1038 |
1039 | nyc:
1040 | version "8.3.2"
1041 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-8.3.2.tgz#a3b7a590fe1c6c4b2d0e3f24afe28b62bfafd745"
1042 | dependencies:
1043 | archy "^1.0.0"
1044 | arrify "^1.0.1"
1045 | caching-transform "^1.0.0"
1046 | convert-source-map "^1.3.0"
1047 | default-require-extensions "^1.0.0"
1048 | find-cache-dir "^0.1.1"
1049 | find-up "^1.1.2"
1050 | foreground-child "^1.5.3"
1051 | glob "^7.0.6"
1052 | istanbul-lib-coverage "^1.0.0"
1053 | istanbul-lib-hook "^1.0.0-alpha.4"
1054 | istanbul-lib-instrument "^1.1.3"
1055 | istanbul-lib-report "^1.0.0-alpha.3"
1056 | istanbul-lib-source-maps "^1.0.2"
1057 | istanbul-reports "^1.0.0-alpha.8"
1058 | md5-hex "^1.2.0"
1059 | micromatch "^2.3.11"
1060 | mkdirp "^0.5.0"
1061 | resolve-from "^2.0.0"
1062 | rimraf "^2.5.4"
1063 | signal-exit "^3.0.1"
1064 | spawn-wrap "^1.2.4"
1065 | test-exclude "^2.1.3"
1066 | yargs "^6.0.0"
1067 | yargs-parser "^4.0.2"
1068 |
1069 | object-assign@^4.0.1, object-assign@^4.1.0:
1070 | version "4.1.0"
1071 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
1072 |
1073 | object.omit@^2.0.0:
1074 | version "2.0.1"
1075 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1076 | dependencies:
1077 | for-own "^0.1.4"
1078 | is-extendable "^0.1.1"
1079 |
1080 | once@^1.3.0:
1081 | version "1.4.0"
1082 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1083 | dependencies:
1084 | wrappy "1"
1085 |
1086 | optimist@^0.6.1, optimist@~0.6.0:
1087 | version "0.6.1"
1088 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
1089 | dependencies:
1090 | minimist "~0.0.1"
1091 | wordwrap "~0.0.2"
1092 |
1093 | os-homedir@^1.0.0, os-homedir@^1.0.1:
1094 | version "1.0.2"
1095 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1096 |
1097 | os-locale@^1.4.0:
1098 | version "1.4.0"
1099 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
1100 | dependencies:
1101 | lcid "^1.0.0"
1102 |
1103 | os-tmpdir@^1.0.0:
1104 | version "1.0.2"
1105 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1106 |
1107 | osenv@^0.1.0:
1108 | version "0.1.4"
1109 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
1110 | dependencies:
1111 | os-homedir "^1.0.0"
1112 | os-tmpdir "^1.0.0"
1113 |
1114 | package-json@^2.0.0:
1115 | version "2.4.0"
1116 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
1117 | dependencies:
1118 | got "^5.0.0"
1119 | registry-auth-token "^3.0.1"
1120 | registry-url "^3.0.3"
1121 | semver "^5.1.0"
1122 |
1123 | parse-glob@^3.0.4:
1124 | version "3.0.4"
1125 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1126 | dependencies:
1127 | glob-base "^0.3.0"
1128 | is-dotfile "^1.0.0"
1129 | is-extglob "^1.0.0"
1130 | is-glob "^2.0.0"
1131 |
1132 | parse-json@^2.1.0, parse-json@^2.2.0:
1133 | version "2.2.0"
1134 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1135 | dependencies:
1136 | error-ex "^1.2.0"
1137 |
1138 | path-exists@^2.0.0:
1139 | version "2.1.0"
1140 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1141 | dependencies:
1142 | pinkie-promise "^2.0.0"
1143 |
1144 | path-is-absolute@^1.0.0:
1145 | version "1.0.1"
1146 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1147 |
1148 | path-parse@^1.0.5:
1149 | version "1.0.5"
1150 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
1151 |
1152 | path-to-regexp@^2.2.0:
1153 | version "2.2.0"
1154 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.0.tgz#80f0ff45c1e0e641da74df313644eaf115050972"
1155 |
1156 | path-type@^1.0.0:
1157 | version "1.1.0"
1158 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
1159 | dependencies:
1160 | graceful-fs "^4.1.2"
1161 | pify "^2.0.0"
1162 | pinkie-promise "^2.0.0"
1163 |
1164 | pify@^2.0.0:
1165 | version "2.3.0"
1166 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1167 |
1168 | pinkie-promise@^2.0.0:
1169 | version "2.0.1"
1170 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1171 | dependencies:
1172 | pinkie "^2.0.0"
1173 |
1174 | pinkie@^2.0.0:
1175 | version "2.0.4"
1176 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1177 |
1178 | pkg-dir@^1.0.0:
1179 | version "1.0.0"
1180 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
1181 | dependencies:
1182 | find-up "^1.0.0"
1183 |
1184 | prepend-http@^1.0.1:
1185 | version "1.0.4"
1186 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1187 |
1188 | preserve@^0.2.0:
1189 | version "0.2.0"
1190 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1191 |
1192 | process-nextick-args@~1.0.6:
1193 | version "1.0.7"
1194 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1195 |
1196 | pseudomap@^1.0.1:
1197 | version "1.0.2"
1198 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1199 |
1200 | randomatic@^1.1.3:
1201 | version "1.1.5"
1202 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b"
1203 | dependencies:
1204 | is-number "^2.0.2"
1205 | kind-of "^3.0.2"
1206 |
1207 | rc@^1.0.1, rc@^1.1.6:
1208 | version "1.1.6"
1209 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
1210 | dependencies:
1211 | deep-extend "~0.4.0"
1212 | ini "~1.3.0"
1213 | minimist "^1.2.0"
1214 | strip-json-comments "~1.0.4"
1215 |
1216 | read-all-stream@^3.0.0:
1217 | version "3.1.0"
1218 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
1219 | dependencies:
1220 | pinkie-promise "^2.0.0"
1221 | readable-stream "^2.0.0"
1222 |
1223 | read-pkg-up@^1.0.1:
1224 | version "1.0.1"
1225 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
1226 | dependencies:
1227 | find-up "^1.0.0"
1228 | read-pkg "^1.0.0"
1229 |
1230 | read-pkg@^1.0.0:
1231 | version "1.1.0"
1232 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
1233 | dependencies:
1234 | load-json-file "^1.0.0"
1235 | normalize-package-data "^2.3.2"
1236 | path-type "^1.0.0"
1237 |
1238 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5:
1239 | version "2.2.2"
1240 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
1241 | dependencies:
1242 | buffer-shims "^1.0.0"
1243 | core-util-is "~1.0.0"
1244 | inherits "~2.0.1"
1245 | isarray "~1.0.0"
1246 | process-nextick-args "~1.0.6"
1247 | string_decoder "~0.10.x"
1248 | util-deprecate "~1.0.1"
1249 |
1250 | regenerator-runtime@^0.9.5:
1251 | version "0.9.5"
1252 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc"
1253 |
1254 | regex-cache@^0.4.2:
1255 | version "0.4.3"
1256 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
1257 | dependencies:
1258 | is-equal-shallow "^0.1.3"
1259 | is-primitive "^2.0.0"
1260 |
1261 | registry-auth-token@^3.0.1:
1262 | version "3.1.0"
1263 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b"
1264 | dependencies:
1265 | rc "^1.1.6"
1266 |
1267 | registry-url@^3.0.3:
1268 | version "3.1.0"
1269 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
1270 | dependencies:
1271 | rc "^1.0.1"
1272 |
1273 | repeat-element@^1.1.2:
1274 | version "1.1.2"
1275 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1276 |
1277 | repeat-string@^1.5.2:
1278 | version "1.6.1"
1279 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1280 |
1281 | repeating@^2.0.0:
1282 | version "2.0.1"
1283 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1284 | dependencies:
1285 | is-finite "^1.0.0"
1286 |
1287 | require-directory@^2.1.1:
1288 | version "2.1.1"
1289 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1290 |
1291 | require-main-filename@^1.0.1:
1292 | version "1.0.1"
1293 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
1294 |
1295 | resolve-from@^2.0.0:
1296 | version "2.0.0"
1297 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
1298 |
1299 | resolve@^1.1.7:
1300 | version "1.2.0"
1301 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
1302 |
1303 | right-align@^0.1.1:
1304 | version "0.1.3"
1305 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
1306 | dependencies:
1307 | align-text "^0.1.1"
1308 |
1309 | rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.4:
1310 | version "2.5.4"
1311 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
1312 | dependencies:
1313 | glob "^7.0.5"
1314 |
1315 | semver-diff@^2.0.0:
1316 | version "2.1.0"
1317 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
1318 | dependencies:
1319 | semver "^5.0.3"
1320 |
1321 | "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
1322 | version "5.3.0"
1323 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1324 |
1325 | set-blocking@^2.0.0:
1326 | version "2.0.0"
1327 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1328 |
1329 | signal-exit@^2.0.0:
1330 | version "2.1.2"
1331 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-2.1.2.tgz#375879b1f92ebc3b334480d038dc546a6d558564"
1332 |
1333 | signal-exit@^3.0.0, signal-exit@^3.0.1:
1334 | version "3.0.1"
1335 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
1336 |
1337 | slide@^1.1.5:
1338 | version "1.1.6"
1339 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
1340 |
1341 | source-map@^0.4.4:
1342 | version "0.4.4"
1343 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
1344 | dependencies:
1345 | amdefine ">=0.0.4"
1346 |
1347 | source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1:
1348 | version "0.5.6"
1349 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
1350 |
1351 | spawn-wrap@^1.2.4:
1352 | version "1.2.4"
1353 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.2.4.tgz#920eb211a769c093eebfbd5b0e7a5d2e68ab2e40"
1354 | dependencies:
1355 | foreground-child "^1.3.3"
1356 | mkdirp "^0.5.0"
1357 | os-homedir "^1.0.1"
1358 | rimraf "^2.3.3"
1359 | signal-exit "^2.0.0"
1360 | which "^1.2.4"
1361 |
1362 | spdx-correct@~1.0.0:
1363 | version "1.0.2"
1364 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
1365 | dependencies:
1366 | spdx-license-ids "^1.0.2"
1367 |
1368 | spdx-expression-parse@~1.0.0:
1369 | version "1.0.4"
1370 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
1371 |
1372 | spdx-license-ids@^1.0.2:
1373 | version "1.2.2"
1374 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
1375 |
1376 | sprintf-js@^1.0.3:
1377 | version "1.0.3"
1378 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1379 |
1380 | string-width@^1.0.1, string-width@^1.0.2:
1381 | version "1.0.2"
1382 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1383 | dependencies:
1384 | code-point-at "^1.0.0"
1385 | is-fullwidth-code-point "^1.0.0"
1386 | strip-ansi "^3.0.0"
1387 |
1388 | string_decoder@~0.10.x:
1389 | version "0.10.31"
1390 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1391 |
1392 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1393 | version "3.0.1"
1394 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1395 | dependencies:
1396 | ansi-regex "^2.0.0"
1397 |
1398 | strip-bom@^2.0.0:
1399 | version "2.0.0"
1400 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
1401 | dependencies:
1402 | is-utf8 "^0.2.0"
1403 |
1404 | strip-json-comments@~1.0.4:
1405 | version "1.0.4"
1406 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
1407 |
1408 | supports-color@3.1.2, supports-color@^3.1.2:
1409 | version "3.1.2"
1410 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
1411 | dependencies:
1412 | has-flag "^1.0.0"
1413 |
1414 | supports-color@^2.0.0:
1415 | version "2.0.0"
1416 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1417 |
1418 | test-exclude@^2.1.3:
1419 | version "2.1.3"
1420 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a"
1421 | dependencies:
1422 | arrify "^1.0.1"
1423 | micromatch "^2.3.11"
1424 | object-assign "^4.1.0"
1425 | read-pkg-up "^1.0.1"
1426 | require-main-filename "^1.0.1"
1427 |
1428 | timed-out@^3.0.0:
1429 | version "3.1.1"
1430 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.1.tgz#2eaaa1021888e4ce3b6ce3511fa7a8556114752b"
1431 |
1432 | to-fast-properties@^1.0.1:
1433 | version "1.0.2"
1434 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
1435 |
1436 | tslint@^4.2.0:
1437 | version "4.2.0"
1438 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.2.0.tgz#b9f5c5b871b784ab2f4809e704ade42d62f523ad"
1439 | dependencies:
1440 | babel-code-frame "^6.20.0"
1441 | colors "^1.1.2"
1442 | diff "^3.0.1"
1443 | findup-sync "~0.3.0"
1444 | glob "^7.1.1"
1445 | optimist "~0.6.0"
1446 | resolve "^1.1.7"
1447 | underscore.string "^3.3.4"
1448 | update-notifier "^1.0.2"
1449 |
1450 | type-detect@0.1.1:
1451 | version "0.1.1"
1452 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
1453 |
1454 | type-detect@^1.0.0:
1455 | version "1.0.0"
1456 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
1457 |
1458 | typescript:
1459 | version "2.0.6"
1460 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.0.6.tgz#5385499ac9811508c2c43e0ea07a1ddca435e111"
1461 |
1462 | uglify-js@^2.6:
1463 | version "2.7.4"
1464 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2"
1465 | dependencies:
1466 | async "~0.2.6"
1467 | source-map "~0.5.1"
1468 | uglify-to-browserify "~1.0.0"
1469 | yargs "~3.10.0"
1470 |
1471 | uglify-to-browserify@~1.0.0:
1472 | version "1.0.2"
1473 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
1474 |
1475 | underscore.string@^3.3.4:
1476 | version "3.3.4"
1477 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
1478 | dependencies:
1479 | sprintf-js "^1.0.3"
1480 | util-deprecate "^1.0.2"
1481 |
1482 | unzip-response@^1.0.2:
1483 | version "1.0.2"
1484 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
1485 |
1486 | update-notifier@^1.0.2:
1487 | version "1.0.3"
1488 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
1489 | dependencies:
1490 | boxen "^0.6.0"
1491 | chalk "^1.0.0"
1492 | configstore "^2.0.0"
1493 | is-npm "^1.0.0"
1494 | latest-version "^2.0.0"
1495 | lazy-req "^1.1.0"
1496 | semver-diff "^2.0.0"
1497 | xdg-basedir "^2.0.0"
1498 |
1499 | url-parse-lax@^1.0.0:
1500 | version "1.0.0"
1501 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
1502 | dependencies:
1503 | prepend-http "^1.0.1"
1504 |
1505 | util-deprecate@^1.0.2, util-deprecate@~1.0.1:
1506 | version "1.0.2"
1507 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1508 |
1509 | uuid@^2.0.1:
1510 | version "2.0.3"
1511 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
1512 |
1513 | validate-npm-package-license@^3.0.1:
1514 | version "3.0.1"
1515 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
1516 | dependencies:
1517 | spdx-correct "~1.0.0"
1518 | spdx-expression-parse "~1.0.0"
1519 |
1520 | which-module@^1.0.0:
1521 | version "1.0.0"
1522 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
1523 |
1524 | which@^1.2.4, which@^1.2.9:
1525 | version "1.2.11"
1526 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b"
1527 | dependencies:
1528 | isexe "^1.1.1"
1529 |
1530 | widest-line@^1.0.0:
1531 | version "1.0.0"
1532 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
1533 | dependencies:
1534 | string-width "^1.0.1"
1535 |
1536 | window-size@0.1.0:
1537 | version "0.1.0"
1538 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
1539 |
1540 | window-size@^0.2.0:
1541 | version "0.2.0"
1542 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
1543 |
1544 | wordwrap@0.0.2:
1545 | version "0.0.2"
1546 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
1547 |
1548 | wordwrap@~0.0.2:
1549 | version "0.0.3"
1550 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
1551 |
1552 | wrap-ansi@^2.0.0:
1553 | version "2.0.0"
1554 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f"
1555 | dependencies:
1556 | string-width "^1.0.1"
1557 |
1558 | wrappy@1:
1559 | version "1.0.2"
1560 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1561 |
1562 | write-file-atomic@^1.1.2, write-file-atomic@^1.1.4:
1563 | version "1.2.0"
1564 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab"
1565 | dependencies:
1566 | graceful-fs "^4.1.2"
1567 | imurmurhash "^0.1.4"
1568 | slide "^1.1.5"
1569 |
1570 | xdg-basedir@^2.0.0:
1571 | version "2.0.0"
1572 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
1573 | dependencies:
1574 | os-homedir "^1.0.0"
1575 |
1576 | y18n@^3.2.1:
1577 | version "3.2.1"
1578 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
1579 |
1580 | yallist@^2.0.0:
1581 | version "2.0.0"
1582 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
1583 |
1584 | yargs-parser@^4.0.2:
1585 | version "4.0.2"
1586 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.0.2.tgz#7f7173a8c7cca1d81dc7c18692fc07c2c2e2b1e0"
1587 | dependencies:
1588 | camelcase "^3.0.0"
1589 |
1590 | yargs@^6.0.0:
1591 | version "6.3.0"
1592 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.3.0.tgz#19c6dbb768744d571eb6ebae0c174cf2f71b188d"
1593 | dependencies:
1594 | camelcase "^3.0.0"
1595 | cliui "^3.2.0"
1596 | decamelize "^1.1.1"
1597 | get-caller-file "^1.0.1"
1598 | os-locale "^1.4.0"
1599 | read-pkg-up "^1.0.1"
1600 | require-directory "^2.1.1"
1601 | require-main-filename "^1.0.1"
1602 | set-blocking "^2.0.0"
1603 | string-width "^1.0.2"
1604 | which-module "^1.0.0"
1605 | window-size "^0.2.0"
1606 | y18n "^3.2.1"
1607 | yargs-parser "^4.0.2"
1608 |
1609 | yargs@~3.10.0:
1610 | version "3.10.0"
1611 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
1612 | dependencies:
1613 | camelcase "^1.0.2"
1614 | cliui "^2.1.0"
1615 | decamelize "^1.0.0"
1616 | window-size "0.1.0"
1617 |
--------------------------------------------------------------------------------