├── .editorconfig
├── .gitignore
├── .npmignore
├── .travis.yml
├── LICENSE
├── README.md
├── mocha.opts
├── package-lock.json
├── package.json
├── src
├── deep-map-keys.ts
├── index.test.ts
└── index.ts
├── tsconfig.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /coverage/
2 | /lib/
3 | /node_modules/
4 | /typings/
5 | /npm-debug.log
6 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | /coverage/
2 | /src/
3 | /lib/**/*.test.*
4 | /.editorconfig
5 | /.gitignore
6 | /.travis.yml
7 | /mocha.opts
8 | /tsconfig.json
9 | /tslint.json
10 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '6'
4 | - '11'
5 | after_success:
6 | - npm run coveralls
7 | before_deploy:
8 | - npm run build
9 | deploy:
10 | provider: npm
11 | email:
12 | secure: RgE+z8gZdN6PAaEnzPK3EGiv9crsbsVzZuVVM+TsrVwQU1R0/NzbL4nNP85vqS8ZBAIrA9adZIDGNtOpZ8ZGmbgd5CKVtizTF3HFtH2ctAmLerPY+HeniXkzt1+NoVZIzDgE78ubGgT6dRfpwmfyXzE83obdcQUVVBKQIR94295o3pu73oUj8a03IPD4Njbdsd8std+mzRPXXcgV3oVkcsuEVK5HifvzS7LC1owimpTrWvJ28qcUJXp7KZBpdCL3zFApsbhykOfToDHqf1RpXcnD74hkOC8Uc0S4a2ILeCl55OkjiJMzNyM1uqwHaBIUG5JK5+aFUMnkAsHRlrmdJoFeJpLxigUF8QZQYSRBNgzf1V7F4mt6FFd9keksOPJI25KqQdpOSC0He+4IJtpu97iXw2GOhPZ31KUg63wHsPHbqzBDk8xqLqaA+V8Z/4ccMpsQFd+/txzbVhQDZDD/jzLLM4gXsV7fhN5fxX1oZcIiFb+OnG2UYQsjdVPkVjJrDUrSC3HQQUK/XXK5/hwm28emQjBZkRFjE127HiVQi7FCHwJzSoAsypPezL3FJ3kNuSJMOkci8dc0R18kOvig0ofFtogYA/qVsmHl7BB+h0MLkzlV6Cl3DgzaArU4PUp827btZ2bFFF1I1h7FC1yfx3+wi6O1TaMRzt2sxs1hnAA=
13 | api_key:
14 | secure: EGx9TMunLPYj8CSHz/sYKR6cjo7gMTt0x2+ONz8RemtxwwYMDopAesM6Azc4xuu1gvgf93W3EAb2kmUitUFOpVcWfynt8QnDZv3dfX6FEsqDYQal0FGRNL8ApKfMVasLMv0bHveCPGiss0hIZQ2IPkHHLpv5x55PDH0d1RwwagTMY6U5lpWj/UdbBqQ6j9Gd0rRAYGUWqUSmEb7IvPb4Qis0Ty074L6mGs49wn4RaX/9w9WkaRFLRoKY6rM9CnXqEwuozXyflc6Vm2vMiDly5sKGBfoNmuhSxV5az6qwiVYEMcoIkpGgl4NRPtacdjvf/9nhJxJvCpXP67hCebnkyyvDBs8IE5wXVPeZXHPqNrE7EV9ebg65cUEoWp1LRebRV8KdPp88G1IkOOHOQHcNfWi63EakZsnIJI+h5EjDR9MLNtOlyN9edH/yPJrrUAe8+CXgeWqALr6UFRybLh3nf/hLXnmsYkUNfXXTcWnc+QLgRcGUch7Wjtth25uwir+y0GqYJ5eDbAoxgNtFeSnlRZlRy68huZEZc6xD3V7qiylbb9FPGEXHqkyrAVP0LVh+MX315nwAqRp8Vl7TbXH2EPPtUPBLde6WnX/gxO39Z7Q0gb89QrVEthxiDRR39ncBDxfWQmnvxo9VHu/RoEGPxhAse8rujIfu1Wck640nXvw=
15 | skip_cleanup: true
16 | on:
17 | repo: mcmath/deep-map-keys
18 | node: '11'
19 | tags: true
20 | after_deploy:
21 | - npm run clean
22 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016-2019 Akim McMath
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7 | of the Software, and to permit persons to whom the Software is furnished to do
8 | so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | SOFTWARE.
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Deep Map Keys
2 |
3 | [![Version][version-badge]][npm]
4 | [![License][license-badge]][license]
5 | [![Build][build-badge]][travis]
6 | [![Coverage][coverage-badge]][coveralls]
7 |
8 | [Install](#install) | [Usage](#usage) | [API](#api) | [TypeScript](#typescript) | [License](#license)
9 |
10 | **Deep Map Keys** recurses through an object and transforms its keys – and
11 | the keys of any nested objects – according to some function. Circular
12 | references are supported.
13 |
14 | To transform the *values* of an object rather than its keys, use
15 | [Deep Map][deep-map].
16 |
17 | ## Install
18 |
19 | Install Deep Map Keys via [npm][npm].
20 |
21 | ```sh
22 | npm install --save deep-map-keys
23 | ```
24 |
25 | ## Usage
26 |
27 | Suppose we want to change the keys of an object from [snake case][snake-case] to
28 | [camel case][camel-case]. We can do something like this:
29 |
30 | ```js
31 | const deepMapKeys = require('deep-map-keys');
32 |
33 | let comment = {
34 | comment_id: 42,
35 | user_id: 1024,
36 | user_name: 'Mufasa',
37 | content: 'You deliberately disobeyed me.',
38 | viewed_by: [
39 | { user_id: 3820, user_name: 'Rafiki' },
40 | { user_id: 8391, user_name: 'Zazu' }
41 | ]
42 | };
43 |
44 | function snakeToCamel(key) {
45 | return key.replace(/_(\w)/g, (match, char) => char.toUpperCase());
46 | }
47 |
48 | let result = deepMapKeys(comment, snakeToCamel);
49 | ```
50 |
51 | And the result will look like this:
52 |
53 | ```js
54 | {
55 | commentId: 42,
56 | userId: 1024,
57 | userName: 'Mufasa',
58 | content: 'You deliberately disobeyed me.',
59 | viewedBy: [
60 | { userId: 3820, userName: 'Rafiki' },
61 | { userId: 8391, userName: 'Zazu' }
62 | ]
63 | }
64 | ```
65 |
66 | ## API
67 |
68 | #### `deepMapKeys(object, mapFn, [options])`
69 |
70 | #### Parameters
71 |
72 |
73 |
74 |
75 | Param |
76 | Type |
77 | Description |
78 |
79 |
80 |
81 |
82 | object |
83 | any |
84 |
85 | The object whose keys are to be transformed. Typically, this will be
86 | a complex object containing other nested objects. This object may be an
87 |
88 | Array , in which case the keys of any objects it
89 | contains will be transformed. The object may contain circular
90 | references.
91 | |
92 |
93 |
94 | mapFn |
95 | function |
96 |
97 | The function used to transform each key. The function is
98 | called with two arguments:
99 |
100 | -
101 | key <
string >
102 | The key being transformed
103 |
104 | -
105 | value <
any >
106 | The value of the node whose key is being transformed
107 |
108 |
109 | The return value determines the new name of the key, and must therefore
110 | be a string.
111 | |
112 |
113 |
114 | [options] |
115 | object |
116 |
117 | An optional options object. The following option is accepted:
118 |
119 | -
120 | thisArg <
any=undefined >
121 | Sets the value of
122 | this
123 | within mapFn()
124 |
125 |
126 | |
127 |
128 |
129 |
130 |
131 | #### Returns
132 |
133 | Returns a new object.
134 |
135 | ## TypeScript
136 |
137 | [TypeScript][typescript] declarations are included in the package. Just import
138 | the module, and things will just work.
139 |
140 | The shape of the returned object cannot be inferred from the inputs; however it
141 | can be defined by passing a single type argument.
142 |
143 | ```ts
144 | interface Result {
145 | userName: string;
146 | }
147 |
148 | let result = deepMapKeys({user_name: 'Pumbaa'}, snakeToCamel);
149 |
150 | let name = result.userName; // Everything is OK :)
151 | ```
152 |
153 | ## License
154 |
155 | Copyright © 2016–2019 Akim McMath. Licensed under the [MIT License][license].
156 |
157 | [version-badge]: https://img.shields.io/npm/v/deep-map-keys.svg?style=flat-square
158 | [license-badge]: https://img.shields.io/npm/l/deep-map-keys.svg?style=flat-square
159 | [build-badge]: https://img.shields.io/travis/mcmath/deep-map-keys/master.svg?style=flat-square
160 | [coverage-badge]: https://img.shields.io/coveralls/mcmath/deep-map-keys/master.svg?style=flat-square&service=github
161 | [npm]: https://www.npmjs.com/package/deep-map-keys
162 | [license]: LICENSE
163 | [travis]: https://travis-ci.org/mcmath/deep-map-keys
164 | [coveralls]: https://coveralls.io/github/mcmath/deep-map-keys?branch=master
165 | [deep-map]: https://github.com/mcmath/deep-map
166 | [snake-case]: https://en.wikipedia.org/wiki/Snake_case
167 | [camel-case]: https://en.wikipedia.org/wiki/CamelCase
168 | [typescript]: http://www.typescriptlang.org/
169 |
--------------------------------------------------------------------------------
/mocha.opts:
--------------------------------------------------------------------------------
1 | --recursive
2 | --reporter dot
3 | --require ts-node/register
4 | src/**/*.test.ts
5 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "deep-map-keys",
3 | "version": "2.0.1",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sinonjs/commons": {
8 | "version": "1.3.0",
9 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz",
10 | "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==",
11 | "dev": true,
12 | "requires": {
13 | "type-detect": "4.0.8"
14 | }
15 | },
16 | "@sinonjs/formatio": {
17 | "version": "3.1.0",
18 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz",
19 | "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==",
20 | "dev": true,
21 | "requires": {
22 | "@sinonjs/samsam": "^2 || ^3"
23 | }
24 | },
25 | "@sinonjs/samsam": {
26 | "version": "3.0.2",
27 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz",
28 | "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==",
29 | "dev": true,
30 | "requires": {
31 | "@sinonjs/commons": "^1.0.2",
32 | "array-from": "^2.1.1",
33 | "lodash.get": "^4.4.2"
34 | }
35 | },
36 | "@types/chai": {
37 | "version": "4.1.7",
38 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
39 | "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==",
40 | "dev": true
41 | },
42 | "@types/es6-weak-map": {
43 | "version": "1.2.0",
44 | "resolved": "https://registry.npmjs.org/@types/es6-weak-map/-/es6-weak-map-1.2.0.tgz",
45 | "integrity": "sha1-2fb4WDaaiLvGnvQCOAgfLWu8hhQ=",
46 | "dev": true
47 | },
48 | "@types/lodash": {
49 | "version": "4.14.120",
50 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.120.tgz",
51 | "integrity": "sha512-jQ21kQ120mo+IrDs1nFNVm/AsdFxIx2+vZ347DbogHJPd/JzKNMOqU6HCYin1W6v8l5R9XSO2/e9cxmn7HAnVw==",
52 | "dev": true
53 | },
54 | "@types/mocha": {
55 | "version": "5.2.5",
56 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
57 | "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
58 | "dev": true
59 | },
60 | "@types/sinon": {
61 | "version": "7.0.5",
62 | "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.5.tgz",
63 | "integrity": "sha512-4DShbH857bZVOY4tPi1RQJNrLcf89hEtU0klZ9aYTMbtt95Ok4XdPqqcbtGOHIbAHMLSzQP8Uw/6qtBBqyloww==",
64 | "dev": true
65 | },
66 | "@types/sinon-chai": {
67 | "version": "3.2.2",
68 | "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.2.tgz",
69 | "integrity": "sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA==",
70 | "dev": true,
71 | "requires": {
72 | "@types/chai": "*",
73 | "@types/sinon": "*"
74 | }
75 | },
76 | "abbrev": {
77 | "version": "1.0.9",
78 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
79 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
80 | "dev": true
81 | },
82 | "ajv": {
83 | "version": "6.7.0",
84 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
85 | "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
86 | "dev": true,
87 | "requires": {
88 | "fast-deep-equal": "^2.0.1",
89 | "fast-json-stable-stringify": "^2.0.0",
90 | "json-schema-traverse": "^0.4.1",
91 | "uri-js": "^4.2.2"
92 | }
93 | },
94 | "ansi-regex": {
95 | "version": "2.1.1",
96 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
97 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
98 | "dev": true
99 | },
100 | "ansi-styles": {
101 | "version": "2.2.1",
102 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
103 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
104 | "dev": true
105 | },
106 | "append-transform": {
107 | "version": "0.4.0",
108 | "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
109 | "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
110 | "dev": true,
111 | "requires": {
112 | "default-require-extensions": "^1.0.0"
113 | }
114 | },
115 | "arg": {
116 | "version": "4.1.0",
117 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
118 | "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==",
119 | "dev": true
120 | },
121 | "argparse": {
122 | "version": "1.0.10",
123 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
124 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
125 | "dev": true,
126 | "requires": {
127 | "sprintf-js": "~1.0.2"
128 | }
129 | },
130 | "array-from": {
131 | "version": "2.1.1",
132 | "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
133 | "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
134 | "dev": true
135 | },
136 | "asn1": {
137 | "version": "0.2.4",
138 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
139 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
140 | "dev": true,
141 | "requires": {
142 | "safer-buffer": "~2.1.0"
143 | }
144 | },
145 | "assert-plus": {
146 | "version": "1.0.0",
147 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
148 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
149 | "dev": true
150 | },
151 | "assertion-error": {
152 | "version": "1.1.0",
153 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
154 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
155 | "dev": true
156 | },
157 | "async": {
158 | "version": "1.5.2",
159 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
160 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
161 | "dev": true
162 | },
163 | "asynckit": {
164 | "version": "0.4.0",
165 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
166 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
167 | "dev": true
168 | },
169 | "aws-sign2": {
170 | "version": "0.7.0",
171 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
172 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
173 | "dev": true
174 | },
175 | "aws4": {
176 | "version": "1.8.0",
177 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
178 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
179 | "dev": true
180 | },
181 | "babel-code-frame": {
182 | "version": "6.26.0",
183 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
184 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
185 | "dev": true,
186 | "requires": {
187 | "chalk": "^1.1.3",
188 | "esutils": "^2.0.2",
189 | "js-tokens": "^3.0.2"
190 | }
191 | },
192 | "babel-generator": {
193 | "version": "6.26.1",
194 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
195 | "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
196 | "dev": true,
197 | "requires": {
198 | "babel-messages": "^6.23.0",
199 | "babel-runtime": "^6.26.0",
200 | "babel-types": "^6.26.0",
201 | "detect-indent": "^4.0.0",
202 | "jsesc": "^1.3.0",
203 | "lodash": "^4.17.4",
204 | "source-map": "^0.5.7",
205 | "trim-right": "^1.0.1"
206 | }
207 | },
208 | "babel-messages": {
209 | "version": "6.23.0",
210 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
211 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
212 | "dev": true,
213 | "requires": {
214 | "babel-runtime": "^6.22.0"
215 | }
216 | },
217 | "babel-runtime": {
218 | "version": "6.26.0",
219 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
220 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
221 | "dev": true,
222 | "requires": {
223 | "core-js": "^2.4.0",
224 | "regenerator-runtime": "^0.11.0"
225 | }
226 | },
227 | "babel-template": {
228 | "version": "6.26.0",
229 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
230 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
231 | "dev": true,
232 | "requires": {
233 | "babel-runtime": "^6.26.0",
234 | "babel-traverse": "^6.26.0",
235 | "babel-types": "^6.26.0",
236 | "babylon": "^6.18.0",
237 | "lodash": "^4.17.4"
238 | }
239 | },
240 | "babel-traverse": {
241 | "version": "6.26.0",
242 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
243 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
244 | "dev": true,
245 | "requires": {
246 | "babel-code-frame": "^6.26.0",
247 | "babel-messages": "^6.23.0",
248 | "babel-runtime": "^6.26.0",
249 | "babel-types": "^6.26.0",
250 | "babylon": "^6.18.0",
251 | "debug": "^2.6.8",
252 | "globals": "^9.18.0",
253 | "invariant": "^2.2.2",
254 | "lodash": "^4.17.4"
255 | }
256 | },
257 | "babel-types": {
258 | "version": "6.26.0",
259 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
260 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
261 | "dev": true,
262 | "requires": {
263 | "babel-runtime": "^6.26.0",
264 | "esutils": "^2.0.2",
265 | "lodash": "^4.17.4",
266 | "to-fast-properties": "^1.0.3"
267 | }
268 | },
269 | "babylon": {
270 | "version": "6.18.0",
271 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
272 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
273 | "dev": true
274 | },
275 | "balanced-match": {
276 | "version": "1.0.0",
277 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
278 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
279 | "dev": true
280 | },
281 | "bcrypt-pbkdf": {
282 | "version": "1.0.2",
283 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
284 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
285 | "dev": true,
286 | "requires": {
287 | "tweetnacl": "^0.14.3"
288 | }
289 | },
290 | "brace-expansion": {
291 | "version": "1.1.11",
292 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
293 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
294 | "dev": true,
295 | "requires": {
296 | "balanced-match": "^1.0.0",
297 | "concat-map": "0.0.1"
298 | }
299 | },
300 | "browser-stdout": {
301 | "version": "1.3.1",
302 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
303 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
304 | "dev": true
305 | },
306 | "buffer-from": {
307 | "version": "1.1.1",
308 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
309 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
310 | "dev": true
311 | },
312 | "builtin-modules": {
313 | "version": "1.1.1",
314 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
315 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
316 | "dev": true
317 | },
318 | "caseless": {
319 | "version": "0.12.0",
320 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
321 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
322 | "dev": true
323 | },
324 | "chai": {
325 | "version": "4.2.0",
326 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
327 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
328 | "dev": true,
329 | "requires": {
330 | "assertion-error": "^1.1.0",
331 | "check-error": "^1.0.2",
332 | "deep-eql": "^3.0.1",
333 | "get-func-name": "^2.0.0",
334 | "pathval": "^1.1.0",
335 | "type-detect": "^4.0.5"
336 | }
337 | },
338 | "chalk": {
339 | "version": "1.1.3",
340 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
341 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
342 | "dev": true,
343 | "requires": {
344 | "ansi-styles": "^2.2.1",
345 | "escape-string-regexp": "^1.0.2",
346 | "has-ansi": "^2.0.0",
347 | "strip-ansi": "^3.0.0",
348 | "supports-color": "^2.0.0"
349 | }
350 | },
351 | "check-error": {
352 | "version": "1.0.2",
353 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
354 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
355 | "dev": true
356 | },
357 | "color-convert": {
358 | "version": "1.9.3",
359 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
360 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
361 | "dev": true,
362 | "requires": {
363 | "color-name": "1.1.3"
364 | }
365 | },
366 | "color-name": {
367 | "version": "1.1.3",
368 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
369 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
370 | "dev": true
371 | },
372 | "combined-stream": {
373 | "version": "1.0.7",
374 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
375 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
376 | "dev": true,
377 | "requires": {
378 | "delayed-stream": "~1.0.0"
379 | }
380 | },
381 | "commander": {
382 | "version": "2.15.1",
383 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
384 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
385 | "dev": true
386 | },
387 | "concat-map": {
388 | "version": "0.0.1",
389 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
390 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
391 | "dev": true
392 | },
393 | "core-js": {
394 | "version": "2.6.3",
395 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz",
396 | "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==",
397 | "dev": true
398 | },
399 | "core-util-is": {
400 | "version": "1.0.2",
401 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
402 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
403 | "dev": true
404 | },
405 | "coveralls": {
406 | "version": "3.0.2",
407 | "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz",
408 | "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==",
409 | "dev": true,
410 | "requires": {
411 | "growl": "~> 1.10.0",
412 | "js-yaml": "^3.11.0",
413 | "lcov-parse": "^0.0.10",
414 | "log-driver": "^1.2.7",
415 | "minimist": "^1.2.0",
416 | "request": "^2.85.0"
417 | },
418 | "dependencies": {
419 | "esprima": {
420 | "version": "4.0.1",
421 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
422 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
423 | "dev": true
424 | },
425 | "js-yaml": {
426 | "version": "3.12.1",
427 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
428 | "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
429 | "dev": true,
430 | "requires": {
431 | "argparse": "^1.0.7",
432 | "esprima": "^4.0.0"
433 | }
434 | }
435 | }
436 | },
437 | "d": {
438 | "version": "1.0.0",
439 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
440 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
441 | "requires": {
442 | "es5-ext": "^0.10.9"
443 | }
444 | },
445 | "dashdash": {
446 | "version": "1.14.1",
447 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
448 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
449 | "dev": true,
450 | "requires": {
451 | "assert-plus": "^1.0.0"
452 | }
453 | },
454 | "debug": {
455 | "version": "2.6.9",
456 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
457 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
458 | "dev": true,
459 | "requires": {
460 | "ms": "2.0.0"
461 | }
462 | },
463 | "deep-eql": {
464 | "version": "3.0.1",
465 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
466 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
467 | "dev": true,
468 | "requires": {
469 | "type-detect": "^4.0.0"
470 | }
471 | },
472 | "default-require-extensions": {
473 | "version": "1.0.0",
474 | "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
475 | "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
476 | "dev": true,
477 | "requires": {
478 | "strip-bom": "^2.0.0"
479 | }
480 | },
481 | "delayed-stream": {
482 | "version": "1.0.0",
483 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
484 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
485 | "dev": true
486 | },
487 | "detect-indent": {
488 | "version": "4.0.0",
489 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
490 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
491 | "dev": true,
492 | "requires": {
493 | "repeating": "^2.0.0"
494 | }
495 | },
496 | "diff": {
497 | "version": "3.5.0",
498 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
499 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
500 | "dev": true
501 | },
502 | "ecc-jsbn": {
503 | "version": "0.1.2",
504 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
505 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
506 | "dev": true,
507 | "requires": {
508 | "jsbn": "~0.1.0",
509 | "safer-buffer": "^2.1.0"
510 | }
511 | },
512 | "es5-ext": {
513 | "version": "0.10.47",
514 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz",
515 | "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==",
516 | "requires": {
517 | "es6-iterator": "~2.0.3",
518 | "es6-symbol": "~3.1.1",
519 | "next-tick": "1"
520 | }
521 | },
522 | "es6-iterator": {
523 | "version": "2.0.3",
524 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
525 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
526 | "requires": {
527 | "d": "1",
528 | "es5-ext": "^0.10.35",
529 | "es6-symbol": "^3.1.1"
530 | }
531 | },
532 | "es6-symbol": {
533 | "version": "3.1.1",
534 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
535 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
536 | "requires": {
537 | "d": "1",
538 | "es5-ext": "~0.10.14"
539 | }
540 | },
541 | "es6-weak-map": {
542 | "version": "2.0.2",
543 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
544 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
545 | "requires": {
546 | "d": "1",
547 | "es5-ext": "^0.10.14",
548 | "es6-iterator": "^2.0.1",
549 | "es6-symbol": "^3.1.1"
550 | }
551 | },
552 | "escape-string-regexp": {
553 | "version": "1.0.5",
554 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
555 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
556 | "dev": true
557 | },
558 | "esprima": {
559 | "version": "2.7.3",
560 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
561 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
562 | "dev": true
563 | },
564 | "esutils": {
565 | "version": "2.0.2",
566 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
567 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
568 | "dev": true
569 | },
570 | "extend": {
571 | "version": "3.0.2",
572 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
573 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
574 | "dev": true
575 | },
576 | "extsprintf": {
577 | "version": "1.3.0",
578 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
579 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
580 | "dev": true
581 | },
582 | "fast-deep-equal": {
583 | "version": "2.0.1",
584 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
585 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
586 | "dev": true
587 | },
588 | "fast-json-stable-stringify": {
589 | "version": "2.0.0",
590 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
591 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
592 | "dev": true
593 | },
594 | "fileset": {
595 | "version": "2.0.3",
596 | "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
597 | "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
598 | "dev": true,
599 | "requires": {
600 | "glob": "^7.0.3",
601 | "minimatch": "^3.0.3"
602 | }
603 | },
604 | "forever-agent": {
605 | "version": "0.6.1",
606 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
607 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
608 | "dev": true
609 | },
610 | "form-data": {
611 | "version": "2.3.3",
612 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
613 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
614 | "dev": true,
615 | "requires": {
616 | "asynckit": "^0.4.0",
617 | "combined-stream": "^1.0.6",
618 | "mime-types": "^2.1.12"
619 | }
620 | },
621 | "fs.realpath": {
622 | "version": "1.0.0",
623 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
624 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
625 | "dev": true
626 | },
627 | "get-func-name": {
628 | "version": "2.0.0",
629 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
630 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
631 | "dev": true
632 | },
633 | "getpass": {
634 | "version": "0.1.7",
635 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
636 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
637 | "dev": true,
638 | "requires": {
639 | "assert-plus": "^1.0.0"
640 | }
641 | },
642 | "glob": {
643 | "version": "7.1.3",
644 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
645 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
646 | "dev": true,
647 | "requires": {
648 | "fs.realpath": "^1.0.0",
649 | "inflight": "^1.0.4",
650 | "inherits": "2",
651 | "minimatch": "^3.0.4",
652 | "once": "^1.3.0",
653 | "path-is-absolute": "^1.0.0"
654 | }
655 | },
656 | "globals": {
657 | "version": "9.18.0",
658 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
659 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
660 | "dev": true
661 | },
662 | "growl": {
663 | "version": "1.10.5",
664 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
665 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
666 | "dev": true
667 | },
668 | "handlebars": {
669 | "version": "4.0.12",
670 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
671 | "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
672 | "dev": true,
673 | "requires": {
674 | "async": "^2.5.0",
675 | "optimist": "^0.6.1",
676 | "source-map": "^0.6.1",
677 | "uglify-js": "^3.1.4"
678 | },
679 | "dependencies": {
680 | "async": {
681 | "version": "2.6.1",
682 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
683 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
684 | "dev": true,
685 | "requires": {
686 | "lodash": "^4.17.10"
687 | }
688 | },
689 | "source-map": {
690 | "version": "0.6.1",
691 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
692 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
693 | "dev": true
694 | }
695 | }
696 | },
697 | "har-schema": {
698 | "version": "2.0.0",
699 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
700 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
701 | "dev": true
702 | },
703 | "har-validator": {
704 | "version": "5.1.3",
705 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
706 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
707 | "dev": true,
708 | "requires": {
709 | "ajv": "^6.5.5",
710 | "har-schema": "^2.0.0"
711 | }
712 | },
713 | "has-ansi": {
714 | "version": "2.0.0",
715 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
716 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
717 | "dev": true,
718 | "requires": {
719 | "ansi-regex": "^2.0.0"
720 | }
721 | },
722 | "has-flag": {
723 | "version": "1.0.0",
724 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
725 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
726 | "dev": true
727 | },
728 | "he": {
729 | "version": "1.1.1",
730 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
731 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
732 | "dev": true
733 | },
734 | "http-signature": {
735 | "version": "1.2.0",
736 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
737 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
738 | "dev": true,
739 | "requires": {
740 | "assert-plus": "^1.0.0",
741 | "jsprim": "^1.2.2",
742 | "sshpk": "^1.7.0"
743 | }
744 | },
745 | "inflight": {
746 | "version": "1.0.6",
747 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
748 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
749 | "dev": true,
750 | "requires": {
751 | "once": "^1.3.0",
752 | "wrappy": "1"
753 | }
754 | },
755 | "inherits": {
756 | "version": "2.0.3",
757 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
758 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
759 | "dev": true
760 | },
761 | "invariant": {
762 | "version": "2.2.4",
763 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
764 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
765 | "dev": true,
766 | "requires": {
767 | "loose-envify": "^1.0.0"
768 | }
769 | },
770 | "is-finite": {
771 | "version": "1.0.2",
772 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
773 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
774 | "dev": true,
775 | "requires": {
776 | "number-is-nan": "^1.0.0"
777 | }
778 | },
779 | "is-typedarray": {
780 | "version": "1.0.0",
781 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
782 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
783 | "dev": true
784 | },
785 | "is-utf8": {
786 | "version": "0.2.1",
787 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
788 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
789 | "dev": true
790 | },
791 | "isarray": {
792 | "version": "0.0.1",
793 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
794 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
795 | "dev": true
796 | },
797 | "isexe": {
798 | "version": "2.0.0",
799 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
800 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
801 | "dev": true
802 | },
803 | "isstream": {
804 | "version": "0.1.2",
805 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
806 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
807 | "dev": true
808 | },
809 | "istanbul": {
810 | "version": "1.0.0-alpha.2",
811 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-1.0.0-alpha.2.tgz",
812 | "integrity": "sha1-BglrwI6Yuq10Sq5Gli2N+frGPQg=",
813 | "dev": true,
814 | "requires": {
815 | "abbrev": "1.0.x",
816 | "async": "1.x",
817 | "istanbul-api": "^1.0.0-alpha",
818 | "js-yaml": "3.x",
819 | "mkdirp": "0.5.x",
820 | "nopt": "3.x",
821 | "which": "^1.1.1",
822 | "wordwrap": "^1.0.0"
823 | }
824 | },
825 | "istanbul-api": {
826 | "version": "1.3.7",
827 | "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
828 | "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
829 | "dev": true,
830 | "requires": {
831 | "async": "^2.1.4",
832 | "fileset": "^2.0.2",
833 | "istanbul-lib-coverage": "^1.2.1",
834 | "istanbul-lib-hook": "^1.2.2",
835 | "istanbul-lib-instrument": "^1.10.2",
836 | "istanbul-lib-report": "^1.1.5",
837 | "istanbul-lib-source-maps": "^1.2.6",
838 | "istanbul-reports": "^1.5.1",
839 | "js-yaml": "^3.7.0",
840 | "mkdirp": "^0.5.1",
841 | "once": "^1.4.0"
842 | },
843 | "dependencies": {
844 | "async": {
845 | "version": "2.6.1",
846 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
847 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
848 | "dev": true,
849 | "requires": {
850 | "lodash": "^4.17.10"
851 | }
852 | },
853 | "esprima": {
854 | "version": "4.0.1",
855 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
856 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
857 | "dev": true
858 | },
859 | "js-yaml": {
860 | "version": "3.12.1",
861 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
862 | "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
863 | "dev": true,
864 | "requires": {
865 | "argparse": "^1.0.7",
866 | "esprima": "^4.0.0"
867 | }
868 | }
869 | }
870 | },
871 | "istanbul-lib-coverage": {
872 | "version": "1.2.1",
873 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
874 | "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
875 | "dev": true
876 | },
877 | "istanbul-lib-hook": {
878 | "version": "1.2.2",
879 | "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
880 | "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
881 | "dev": true,
882 | "requires": {
883 | "append-transform": "^0.4.0"
884 | }
885 | },
886 | "istanbul-lib-instrument": {
887 | "version": "1.10.2",
888 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
889 | "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
890 | "dev": true,
891 | "requires": {
892 | "babel-generator": "^6.18.0",
893 | "babel-template": "^6.16.0",
894 | "babel-traverse": "^6.18.0",
895 | "babel-types": "^6.18.0",
896 | "babylon": "^6.18.0",
897 | "istanbul-lib-coverage": "^1.2.1",
898 | "semver": "^5.3.0"
899 | }
900 | },
901 | "istanbul-lib-report": {
902 | "version": "1.1.5",
903 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
904 | "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
905 | "dev": true,
906 | "requires": {
907 | "istanbul-lib-coverage": "^1.2.1",
908 | "mkdirp": "^0.5.1",
909 | "path-parse": "^1.0.5",
910 | "supports-color": "^3.1.2"
911 | },
912 | "dependencies": {
913 | "supports-color": {
914 | "version": "3.2.3",
915 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
916 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
917 | "dev": true,
918 | "requires": {
919 | "has-flag": "^1.0.0"
920 | }
921 | }
922 | }
923 | },
924 | "istanbul-lib-source-maps": {
925 | "version": "1.2.6",
926 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
927 | "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
928 | "dev": true,
929 | "requires": {
930 | "debug": "^3.1.0",
931 | "istanbul-lib-coverage": "^1.2.1",
932 | "mkdirp": "^0.5.1",
933 | "rimraf": "^2.6.1",
934 | "source-map": "^0.5.3"
935 | },
936 | "dependencies": {
937 | "debug": {
938 | "version": "3.2.6",
939 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
940 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
941 | "dev": true,
942 | "requires": {
943 | "ms": "^2.1.1"
944 | }
945 | },
946 | "ms": {
947 | "version": "2.1.1",
948 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
949 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
950 | "dev": true
951 | }
952 | }
953 | },
954 | "istanbul-reports": {
955 | "version": "1.5.1",
956 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
957 | "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
958 | "dev": true,
959 | "requires": {
960 | "handlebars": "^4.0.3"
961 | }
962 | },
963 | "js-tokens": {
964 | "version": "3.0.2",
965 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
966 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
967 | "dev": true
968 | },
969 | "js-yaml": {
970 | "version": "3.6.1",
971 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
972 | "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
973 | "dev": true,
974 | "requires": {
975 | "argparse": "^1.0.7",
976 | "esprima": "^2.6.0"
977 | }
978 | },
979 | "jsbn": {
980 | "version": "0.1.1",
981 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
982 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
983 | "dev": true
984 | },
985 | "jsesc": {
986 | "version": "1.3.0",
987 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
988 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
989 | "dev": true
990 | },
991 | "json-schema": {
992 | "version": "0.2.3",
993 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
994 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
995 | "dev": true
996 | },
997 | "json-schema-traverse": {
998 | "version": "0.4.1",
999 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1000 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1001 | "dev": true
1002 | },
1003 | "json-stringify-safe": {
1004 | "version": "5.0.1",
1005 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1006 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1007 | "dev": true
1008 | },
1009 | "jsprim": {
1010 | "version": "1.4.1",
1011 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1012 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1013 | "dev": true,
1014 | "requires": {
1015 | "assert-plus": "1.0.0",
1016 | "extsprintf": "1.3.0",
1017 | "json-schema": "0.2.3",
1018 | "verror": "1.10.0"
1019 | }
1020 | },
1021 | "just-extend": {
1022 | "version": "4.0.2",
1023 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
1024 | "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==",
1025 | "dev": true
1026 | },
1027 | "lcov-parse": {
1028 | "version": "0.0.10",
1029 | "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
1030 | "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
1031 | "dev": true
1032 | },
1033 | "lodash": {
1034 | "version": "4.17.11",
1035 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
1036 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
1037 | },
1038 | "lodash.get": {
1039 | "version": "4.4.2",
1040 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
1041 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
1042 | "dev": true
1043 | },
1044 | "log-driver": {
1045 | "version": "1.2.7",
1046 | "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
1047 | "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
1048 | "dev": true
1049 | },
1050 | "lolex": {
1051 | "version": "3.0.0",
1052 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz",
1053 | "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==",
1054 | "dev": true
1055 | },
1056 | "loose-envify": {
1057 | "version": "1.4.0",
1058 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1059 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1060 | "dev": true,
1061 | "requires": {
1062 | "js-tokens": "^3.0.0 || ^4.0.0"
1063 | }
1064 | },
1065 | "make-error": {
1066 | "version": "1.3.5",
1067 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
1068 | "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
1069 | "dev": true
1070 | },
1071 | "mime-db": {
1072 | "version": "1.37.0",
1073 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
1074 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
1075 | "dev": true
1076 | },
1077 | "mime-types": {
1078 | "version": "2.1.21",
1079 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
1080 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
1081 | "dev": true,
1082 | "requires": {
1083 | "mime-db": "~1.37.0"
1084 | }
1085 | },
1086 | "minimatch": {
1087 | "version": "3.0.4",
1088 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1089 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1090 | "dev": true,
1091 | "requires": {
1092 | "brace-expansion": "^1.1.7"
1093 | }
1094 | },
1095 | "minimist": {
1096 | "version": "1.2.0",
1097 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1098 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1099 | "dev": true
1100 | },
1101 | "mkdirp": {
1102 | "version": "0.5.1",
1103 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1104 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1105 | "dev": true,
1106 | "requires": {
1107 | "minimist": "0.0.8"
1108 | },
1109 | "dependencies": {
1110 | "minimist": {
1111 | "version": "0.0.8",
1112 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1113 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1114 | "dev": true
1115 | }
1116 | }
1117 | },
1118 | "mocha": {
1119 | "version": "5.2.0",
1120 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
1121 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
1122 | "dev": true,
1123 | "requires": {
1124 | "browser-stdout": "1.3.1",
1125 | "commander": "2.15.1",
1126 | "debug": "3.1.0",
1127 | "diff": "3.5.0",
1128 | "escape-string-regexp": "1.0.5",
1129 | "glob": "7.1.2",
1130 | "growl": "1.10.5",
1131 | "he": "1.1.1",
1132 | "minimatch": "3.0.4",
1133 | "mkdirp": "0.5.1",
1134 | "supports-color": "5.4.0"
1135 | },
1136 | "dependencies": {
1137 | "debug": {
1138 | "version": "3.1.0",
1139 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
1140 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
1141 | "dev": true,
1142 | "requires": {
1143 | "ms": "2.0.0"
1144 | }
1145 | },
1146 | "glob": {
1147 | "version": "7.1.2",
1148 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1149 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1150 | "dev": true,
1151 | "requires": {
1152 | "fs.realpath": "^1.0.0",
1153 | "inflight": "^1.0.4",
1154 | "inherits": "2",
1155 | "minimatch": "^3.0.4",
1156 | "once": "^1.3.0",
1157 | "path-is-absolute": "^1.0.0"
1158 | }
1159 | },
1160 | "has-flag": {
1161 | "version": "3.0.0",
1162 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1163 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1164 | "dev": true
1165 | },
1166 | "supports-color": {
1167 | "version": "5.4.0",
1168 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
1169 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
1170 | "dev": true,
1171 | "requires": {
1172 | "has-flag": "^3.0.0"
1173 | }
1174 | }
1175 | }
1176 | },
1177 | "ms": {
1178 | "version": "2.0.0",
1179 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1180 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1181 | "dev": true
1182 | },
1183 | "next-tick": {
1184 | "version": "1.0.0",
1185 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
1186 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
1187 | },
1188 | "nise": {
1189 | "version": "1.4.8",
1190 | "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz",
1191 | "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==",
1192 | "dev": true,
1193 | "requires": {
1194 | "@sinonjs/formatio": "^3.1.0",
1195 | "just-extend": "^4.0.2",
1196 | "lolex": "^2.3.2",
1197 | "path-to-regexp": "^1.7.0",
1198 | "text-encoding": "^0.6.4"
1199 | },
1200 | "dependencies": {
1201 | "lolex": {
1202 | "version": "2.7.5",
1203 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz",
1204 | "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==",
1205 | "dev": true
1206 | }
1207 | }
1208 | },
1209 | "nopt": {
1210 | "version": "3.0.6",
1211 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
1212 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
1213 | "dev": true,
1214 | "requires": {
1215 | "abbrev": "1"
1216 | }
1217 | },
1218 | "number-is-nan": {
1219 | "version": "1.0.1",
1220 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1221 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1222 | "dev": true
1223 | },
1224 | "oauth-sign": {
1225 | "version": "0.9.0",
1226 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1227 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
1228 | "dev": true
1229 | },
1230 | "once": {
1231 | "version": "1.4.0",
1232 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1233 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1234 | "dev": true,
1235 | "requires": {
1236 | "wrappy": "1"
1237 | }
1238 | },
1239 | "optimist": {
1240 | "version": "0.6.1",
1241 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1242 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1243 | "dev": true,
1244 | "requires": {
1245 | "minimist": "~0.0.1",
1246 | "wordwrap": "~0.0.2"
1247 | },
1248 | "dependencies": {
1249 | "minimist": {
1250 | "version": "0.0.10",
1251 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
1252 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
1253 | "dev": true
1254 | },
1255 | "wordwrap": {
1256 | "version": "0.0.3",
1257 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
1258 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
1259 | "dev": true
1260 | }
1261 | }
1262 | },
1263 | "path-is-absolute": {
1264 | "version": "1.0.1",
1265 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1266 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1267 | "dev": true
1268 | },
1269 | "path-parse": {
1270 | "version": "1.0.6",
1271 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1272 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1273 | "dev": true
1274 | },
1275 | "path-to-regexp": {
1276 | "version": "1.7.0",
1277 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
1278 | "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
1279 | "dev": true,
1280 | "requires": {
1281 | "isarray": "0.0.1"
1282 | }
1283 | },
1284 | "pathval": {
1285 | "version": "1.1.0",
1286 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
1287 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
1288 | "dev": true
1289 | },
1290 | "performance-now": {
1291 | "version": "2.1.0",
1292 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1293 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
1294 | "dev": true
1295 | },
1296 | "psl": {
1297 | "version": "1.1.31",
1298 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
1299 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
1300 | "dev": true
1301 | },
1302 | "punycode": {
1303 | "version": "2.1.1",
1304 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1305 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1306 | "dev": true
1307 | },
1308 | "qs": {
1309 | "version": "6.5.2",
1310 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1311 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1312 | "dev": true
1313 | },
1314 | "regenerator-runtime": {
1315 | "version": "0.11.1",
1316 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1317 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
1318 | "dev": true
1319 | },
1320 | "repeating": {
1321 | "version": "2.0.1",
1322 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1323 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1324 | "dev": true,
1325 | "requires": {
1326 | "is-finite": "^1.0.0"
1327 | }
1328 | },
1329 | "request": {
1330 | "version": "2.88.0",
1331 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
1332 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
1333 | "dev": true,
1334 | "requires": {
1335 | "aws-sign2": "~0.7.0",
1336 | "aws4": "^1.8.0",
1337 | "caseless": "~0.12.0",
1338 | "combined-stream": "~1.0.6",
1339 | "extend": "~3.0.2",
1340 | "forever-agent": "~0.6.1",
1341 | "form-data": "~2.3.2",
1342 | "har-validator": "~5.1.0",
1343 | "http-signature": "~1.2.0",
1344 | "is-typedarray": "~1.0.0",
1345 | "isstream": "~0.1.2",
1346 | "json-stringify-safe": "~5.0.1",
1347 | "mime-types": "~2.1.19",
1348 | "oauth-sign": "~0.9.0",
1349 | "performance-now": "^2.1.0",
1350 | "qs": "~6.5.2",
1351 | "safe-buffer": "^5.1.2",
1352 | "tough-cookie": "~2.4.3",
1353 | "tunnel-agent": "^0.6.0",
1354 | "uuid": "^3.3.2"
1355 | }
1356 | },
1357 | "resolve": {
1358 | "version": "1.10.0",
1359 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
1360 | "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
1361 | "dev": true,
1362 | "requires": {
1363 | "path-parse": "^1.0.6"
1364 | }
1365 | },
1366 | "rimraf": {
1367 | "version": "2.6.3",
1368 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1369 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1370 | "dev": true,
1371 | "requires": {
1372 | "glob": "^7.1.3"
1373 | }
1374 | },
1375 | "safe-buffer": {
1376 | "version": "5.1.2",
1377 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1378 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1379 | "dev": true
1380 | },
1381 | "safer-buffer": {
1382 | "version": "2.1.2",
1383 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1384 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1385 | "dev": true
1386 | },
1387 | "semver": {
1388 | "version": "5.6.0",
1389 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
1390 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
1391 | "dev": true
1392 | },
1393 | "sinon": {
1394 | "version": "7.2.3",
1395 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.3.tgz",
1396 | "integrity": "sha512-i6j7sqcLEqTYqUcMV327waI745VASvYuSuQMCjbAwlpAeuCgKZ3LtrjDxAbu+GjNQR0FEDpywtwGCIh8GicNyg==",
1397 | "dev": true,
1398 | "requires": {
1399 | "@sinonjs/commons": "^1.3.0",
1400 | "@sinonjs/formatio": "^3.1.0",
1401 | "@sinonjs/samsam": "^3.0.2",
1402 | "diff": "^3.5.0",
1403 | "lolex": "^3.0.0",
1404 | "nise": "^1.4.8",
1405 | "supports-color": "^5.5.0"
1406 | },
1407 | "dependencies": {
1408 | "has-flag": {
1409 | "version": "3.0.0",
1410 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1411 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1412 | "dev": true
1413 | },
1414 | "supports-color": {
1415 | "version": "5.5.0",
1416 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1417 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1418 | "dev": true,
1419 | "requires": {
1420 | "has-flag": "^3.0.0"
1421 | }
1422 | }
1423 | }
1424 | },
1425 | "sinon-chai": {
1426 | "version": "3.3.0",
1427 | "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.3.0.tgz",
1428 | "integrity": "sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA==",
1429 | "dev": true
1430 | },
1431 | "source-map": {
1432 | "version": "0.5.7",
1433 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1434 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
1435 | "dev": true
1436 | },
1437 | "source-map-support": {
1438 | "version": "0.5.10",
1439 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
1440 | "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
1441 | "dev": true,
1442 | "requires": {
1443 | "buffer-from": "^1.0.0",
1444 | "source-map": "^0.6.0"
1445 | },
1446 | "dependencies": {
1447 | "source-map": {
1448 | "version": "0.6.1",
1449 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1450 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1451 | "dev": true
1452 | }
1453 | }
1454 | },
1455 | "sprintf-js": {
1456 | "version": "1.0.3",
1457 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1458 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1459 | "dev": true
1460 | },
1461 | "sshpk": {
1462 | "version": "1.16.1",
1463 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
1464 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
1465 | "dev": true,
1466 | "requires": {
1467 | "asn1": "~0.2.3",
1468 | "assert-plus": "^1.0.0",
1469 | "bcrypt-pbkdf": "^1.0.0",
1470 | "dashdash": "^1.12.0",
1471 | "ecc-jsbn": "~0.1.1",
1472 | "getpass": "^0.1.1",
1473 | "jsbn": "~0.1.0",
1474 | "safer-buffer": "^2.0.2",
1475 | "tweetnacl": "~0.14.0"
1476 | }
1477 | },
1478 | "strip-ansi": {
1479 | "version": "3.0.1",
1480 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1481 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1482 | "dev": true,
1483 | "requires": {
1484 | "ansi-regex": "^2.0.0"
1485 | }
1486 | },
1487 | "strip-bom": {
1488 | "version": "2.0.0",
1489 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
1490 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
1491 | "dev": true,
1492 | "requires": {
1493 | "is-utf8": "^0.2.0"
1494 | }
1495 | },
1496 | "supports-color": {
1497 | "version": "2.0.0",
1498 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1499 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1500 | "dev": true
1501 | },
1502 | "text-encoding": {
1503 | "version": "0.6.4",
1504 | "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
1505 | "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
1506 | "dev": true
1507 | },
1508 | "to-fast-properties": {
1509 | "version": "1.0.3",
1510 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
1511 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
1512 | "dev": true
1513 | },
1514 | "tough-cookie": {
1515 | "version": "2.4.3",
1516 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
1517 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
1518 | "dev": true,
1519 | "requires": {
1520 | "psl": "^1.1.24",
1521 | "punycode": "^1.4.1"
1522 | },
1523 | "dependencies": {
1524 | "punycode": {
1525 | "version": "1.4.1",
1526 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1527 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
1528 | "dev": true
1529 | }
1530 | }
1531 | },
1532 | "trim-right": {
1533 | "version": "1.0.1",
1534 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
1535 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
1536 | "dev": true
1537 | },
1538 | "ts-node": {
1539 | "version": "8.0.2",
1540 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz",
1541 | "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==",
1542 | "dev": true,
1543 | "requires": {
1544 | "arg": "^4.1.0",
1545 | "diff": "^3.1.0",
1546 | "make-error": "^1.1.1",
1547 | "source-map-support": "^0.5.6",
1548 | "yn": "^3.0.0"
1549 | }
1550 | },
1551 | "tslib": {
1552 | "version": "1.9.3",
1553 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
1554 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
1555 | "dev": true
1556 | },
1557 | "tslint": {
1558 | "version": "5.12.1",
1559 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz",
1560 | "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==",
1561 | "dev": true,
1562 | "requires": {
1563 | "babel-code-frame": "^6.22.0",
1564 | "builtin-modules": "^1.1.1",
1565 | "chalk": "^2.3.0",
1566 | "commander": "^2.12.1",
1567 | "diff": "^3.2.0",
1568 | "glob": "^7.1.1",
1569 | "js-yaml": "^3.7.0",
1570 | "minimatch": "^3.0.4",
1571 | "resolve": "^1.3.2",
1572 | "semver": "^5.3.0",
1573 | "tslib": "^1.8.0",
1574 | "tsutils": "^2.27.2"
1575 | },
1576 | "dependencies": {
1577 | "ansi-styles": {
1578 | "version": "3.2.1",
1579 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1580 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1581 | "dev": true,
1582 | "requires": {
1583 | "color-convert": "^1.9.0"
1584 | }
1585 | },
1586 | "chalk": {
1587 | "version": "2.4.2",
1588 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1589 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1590 | "dev": true,
1591 | "requires": {
1592 | "ansi-styles": "^3.2.1",
1593 | "escape-string-regexp": "^1.0.5",
1594 | "supports-color": "^5.3.0"
1595 | }
1596 | },
1597 | "esprima": {
1598 | "version": "4.0.1",
1599 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1600 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1601 | "dev": true
1602 | },
1603 | "has-flag": {
1604 | "version": "3.0.0",
1605 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1606 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1607 | "dev": true
1608 | },
1609 | "js-yaml": {
1610 | "version": "3.12.1",
1611 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
1612 | "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
1613 | "dev": true,
1614 | "requires": {
1615 | "argparse": "^1.0.7",
1616 | "esprima": "^4.0.0"
1617 | }
1618 | },
1619 | "supports-color": {
1620 | "version": "5.5.0",
1621 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1622 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1623 | "dev": true,
1624 | "requires": {
1625 | "has-flag": "^3.0.0"
1626 | }
1627 | }
1628 | }
1629 | },
1630 | "tsutils": {
1631 | "version": "2.29.0",
1632 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
1633 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
1634 | "dev": true,
1635 | "requires": {
1636 | "tslib": "^1.8.1"
1637 | }
1638 | },
1639 | "tunnel-agent": {
1640 | "version": "0.6.0",
1641 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1642 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1643 | "dev": true,
1644 | "requires": {
1645 | "safe-buffer": "^5.0.1"
1646 | }
1647 | },
1648 | "tweetnacl": {
1649 | "version": "0.14.5",
1650 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1651 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1652 | "dev": true
1653 | },
1654 | "type-detect": {
1655 | "version": "4.0.8",
1656 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
1657 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
1658 | "dev": true
1659 | },
1660 | "typescript": {
1661 | "version": "3.2.4",
1662 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
1663 | "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
1664 | "dev": true
1665 | },
1666 | "uglify-js": {
1667 | "version": "3.4.9",
1668 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
1669 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
1670 | "dev": true,
1671 | "optional": true,
1672 | "requires": {
1673 | "commander": "~2.17.1",
1674 | "source-map": "~0.6.1"
1675 | },
1676 | "dependencies": {
1677 | "commander": {
1678 | "version": "2.17.1",
1679 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
1680 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
1681 | "dev": true,
1682 | "optional": true
1683 | },
1684 | "source-map": {
1685 | "version": "0.6.1",
1686 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1687 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1688 | "dev": true,
1689 | "optional": true
1690 | }
1691 | }
1692 | },
1693 | "uri-js": {
1694 | "version": "4.2.2",
1695 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1696 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1697 | "dev": true,
1698 | "requires": {
1699 | "punycode": "^2.1.0"
1700 | }
1701 | },
1702 | "uuid": {
1703 | "version": "3.3.2",
1704 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1705 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
1706 | "dev": true
1707 | },
1708 | "verror": {
1709 | "version": "1.10.0",
1710 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1711 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1712 | "dev": true,
1713 | "requires": {
1714 | "assert-plus": "^1.0.0",
1715 | "core-util-is": "1.0.2",
1716 | "extsprintf": "^1.2.0"
1717 | }
1718 | },
1719 | "which": {
1720 | "version": "1.3.1",
1721 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1722 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1723 | "dev": true,
1724 | "requires": {
1725 | "isexe": "^2.0.0"
1726 | }
1727 | },
1728 | "wordwrap": {
1729 | "version": "1.0.0",
1730 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1731 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
1732 | "dev": true
1733 | },
1734 | "wrappy": {
1735 | "version": "1.0.2",
1736 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1737 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1738 | "dev": true
1739 | },
1740 | "yn": {
1741 | "version": "3.0.0",
1742 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz",
1743 | "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==",
1744 | "dev": true
1745 | }
1746 | }
1747 | }
1748 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "deep-map-keys",
3 | "version": "2.0.1",
4 | "description": "Transforms nested keys of complex objects",
5 | "main": "./lib/index.js",
6 | "types": "./lib/index.d.ts",
7 | "scripts": {
8 | "clean": "rimraf lib",
9 | "build": "npm run clean && tsc",
10 | "test:lint": "tslint 'src/**/*.ts'",
11 | "test:unit": "istanbul cover -e .ts -x '*.test.ts' _mocha -- src --opts mocha.opts",
12 | "test:report": "npm test && open coverage/lcov-report/index.html",
13 | "test": "npm run test:lint && npm run test:unit",
14 | "coveralls": "cat coverage/lcov.info | coveralls"
15 | },
16 | "engines": {
17 | "node": ">=6"
18 | },
19 | "keywords": [
20 | "map",
21 | "keys",
22 | "deep",
23 | "recursive",
24 | "nested",
25 | "object",
26 | "array",
27 | "circular",
28 | "json",
29 | "typescript",
30 | "typings"
31 | ],
32 | "author": "Akim McMath (http://www.mcmath.io/)",
33 | "license": "MIT",
34 | "devDependencies": {
35 | "@types/chai": "^4.1.7",
36 | "@types/es6-weak-map": "^1.2.0",
37 | "@types/lodash": "^4.14.120",
38 | "@types/mocha": "^5.2.5",
39 | "@types/sinon": "^7.0.5",
40 | "@types/sinon-chai": "^3.2.2",
41 | "chai": "^4.2.0",
42 | "coveralls": "^3.0.2",
43 | "istanbul": "1.0.0-alpha.2",
44 | "mocha": "^5.2.0",
45 | "rimraf": "^2.5.2",
46 | "sinon": "^7.2.3",
47 | "sinon-chai": "^3.3.0",
48 | "ts-node": "^8.0.2",
49 | "tslint": "^5.12.1",
50 | "typescript": "^3.2.4"
51 | },
52 | "dependencies": {
53 | "es6-weak-map": "^2.0.1",
54 | "lodash": "^4.13.1"
55 | },
56 | "repository": {
57 | "type": "git",
58 | "url": "git+https://github.com/mcmath/deep-map-keys.git"
59 | },
60 | "bugs": {
61 | "url": "https://github.com/mcmath/deep-map-keys/issues"
62 | },
63 | "homepage": "https://github.com/mcmath/deep-map-keys#readme"
64 | }
65 |
--------------------------------------------------------------------------------
/src/deep-map-keys.ts:
--------------------------------------------------------------------------------
1 | import WeakMap = require('es6-weak-map');
2 | import { isArray, isObject } from 'lodash';
3 |
4 | interface NonPrimitive extends Object {
5 | [key: string]: any;
6 | [index: number]: any;
7 | }
8 |
9 | export interface MapFn {
10 | (key: string, value: any): string;
11 | }
12 |
13 | export interface Opts {
14 | thisArg?: any;
15 | }
16 |
17 | export class DeepMapKeys {
18 |
19 | private cache = new WeakMap();
20 |
21 | constructor(
22 | private mapFn: MapFn,
23 | private opts: Opts
24 | ) { }
25 |
26 | public map(value: any): any {
27 | return isArray(value) ? this.mapArray(value) :
28 | isObject(value) ? this.mapObject(value) :
29 | value;
30 | }
31 |
32 | private mapArray(arr: any[]): any[] {
33 | if (this.cache.has(arr)) {
34 | return this.cache.get(arr);
35 | }
36 |
37 | let length = arr.length;
38 | let result: any[] = [];
39 | this.cache.set(arr, result);
40 |
41 | for (let i = 0; i < length; i++) {
42 | result.push(this.map(arr[i]));
43 | }
44 |
45 | return result;
46 | }
47 |
48 | private mapObject(obj: NonPrimitive): NonPrimitive {
49 | if (this.cache.has(obj)) {
50 | return this.cache.get(obj);
51 | }
52 |
53 | let {mapFn, opts: {thisArg}} = this;
54 | let result: NonPrimitive = {};
55 | this.cache.set(obj, result);
56 |
57 | for (let key in obj) {
58 | if (obj.hasOwnProperty(key)) {
59 | result[mapFn.call(thisArg, key, obj[key])] = this.map(obj[key]);
60 | }
61 | }
62 |
63 | return result;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/index.test.ts:
--------------------------------------------------------------------------------
1 | import chai = require('chai');
2 | import sinonChai = require('sinon-chai');
3 | import sinon = require('sinon');
4 | import deepMapKeys = require('./');
5 |
6 | before(() => {
7 | chai.use(sinonChai);
8 | chai.should();
9 | });
10 |
11 | describe('deepMapKeys(object, mapFn, [options])', () => {
12 | let caps: (key: string) => string;
13 |
14 | beforeEach(() => {
15 | caps = sinon.spy((key: string) => key.toUpperCase());
16 | });
17 |
18 | it('exports a function', () => {
19 | deepMapKeys.should.be.a('function');
20 | });
21 |
22 | describe('@object: any', () => {
23 |
24 | it('transforms keys of simple object', () => {
25 | deepMapKeys({one: 1, two: 2}, caps).should.deep.equal({ONE: 1, TWO: 2});
26 | });
27 |
28 | it('transforms keys of object with nested objects/arrays', () => {
29 | deepMapKeys({one: 1, obj: {two: 2, three: 3}, arr: [4, 5]}, caps)
30 | .should.deep.equal({ONE: 1, OBJ: {TWO: 2, THREE: 3}, ARR: [4, 5]});
31 | });
32 |
33 | it('transforms keys of array with nested object/array', () => {
34 | deepMapKeys([1, {two: 2, three: 3, arr: [4, {five: 5}]}], caps)
35 | .should.deep.equal([1, {TWO: 2, THREE: 3, ARR: [4, {FIVE: 5}]}]);
36 | });
37 |
38 | it('transforms an object with circular references', () => {
39 | let obj = {one: 1, arr: [2, 3], self: null as any, arr2: null as any[]};
40 | obj.self = obj;
41 | obj.arr2 = obj.arr;
42 |
43 | let exp = {ONE: 1, ARR: [2, 3], SELF: null as any, ARR2: null as any[]};
44 | exp.SELF = exp;
45 | exp.ARR2 = exp.ARR;
46 |
47 | deepMapKeys(obj, caps).should.deep.equal(exp);
48 | });
49 |
50 | });
51 |
52 | describe('@mapFn(key: string, value: any): string', () => {
53 |
54 | it('throws Error if undefined', () => {
55 | deepMapKeys.bind(null, {one: 1}).should.throw(Error);
56 | });
57 |
58 | it('throws TypeError if not a function', () => {
59 | deepMapKeys.bind(null, {one: 1}, 42).should.throw(TypeError);
60 | });
61 |
62 | it('is called once per object property', () => {
63 | deepMapKeys({one: 1, obj: {two: 2, three: 3}, arr: [4, 5]}, caps);
64 | caps.should.have.callCount(5);
65 | });
66 |
67 | it('is called with @key as first argument', () => {
68 | deepMapKeys({one: 1, arr: [2, 3]}, caps);
69 | caps.should.have.been.calledWith('one');
70 | caps.should.have.been.calledWith('arr');
71 | });
72 |
73 | it('is called with @value as second argument', () => {
74 | let {any} = sinon.match;
75 | deepMapKeys({one: 1, arr: [2, 3]}, caps);
76 | caps.should.have.been.calledWith(any, 1);
77 | caps.should.have.been.calledWithMatch(any, [2, 3]);
78 | });
79 |
80 | });
81 |
82 | describe('@options?', () => {
83 |
84 | it('throws TypeError if defined but not an object', () => {
85 | deepMapKeys.bind(null, {one: 1}, caps, 42).should.throw(TypeError);
86 | });
87 |
88 | describe('option: thisArg', () => {
89 |
90 | it('sets context within @mapFn', () => {
91 | deepMapKeys({one: 1, arr: [2, 3]}, caps, {thisArg: 42});
92 | caps.should.have.been.calledOn(42);
93 | });
94 |
95 | it('defaults to undefined', () => {
96 | deepMapKeys({one: 1, arr: [2, 3]}, caps);
97 | caps.should.have.been.calledOn(undefined);
98 | });
99 |
100 | });
101 |
102 | });
103 |
104 | });
105 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { isFunction, isNil, isObject } from 'lodash';
2 | import { DeepMapKeys, MapFn, Opts } from './deep-map-keys';
3 |
4 | function deepMapKeys(object: any, mapFn: MapFn, options?: Opts): T {
5 | options = isNil(options) ? {} : options;
6 |
7 | if (!mapFn) {
8 | throw new Error('mapFn is required');
9 | } else if (!isFunction(mapFn)) {
10 | throw new TypeError('mapFn must be a function');
11 | } else if (!isObject(options)) {
12 | throw new TypeError('options must be an object');
13 | }
14 |
15 | return new DeepMapKeys(mapFn, options).map(object);
16 | }
17 |
18 | export = deepMapKeys;
19 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES5",
4 | "module": "CommonJS",
5 | "lib": [
6 | "ES5",
7 | "DOM",
8 | "ScriptHost",
9 | "ES2015.Iterable",
10 | "ES2015.Symbol",
11 | "ES2015.Symbol.WellKnown"
12 | ],
13 | "declaration": true,
14 | "sourceMap": true,
15 | "noImplicitAny": true,
16 | "rootDir": "src",
17 | "outDir": "lib"
18 | },
19 | "compileOnSave": false,
20 | "exclude": [
21 | "node_modules",
22 | "lib",
23 | "src/**/*.test.ts"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "member-access": false,
4 | "member-ordering": [true, {"order": "statics-first"}],
5 | "no-any": false,
6 | "no-inferrable-types": [true, "ignore-params"],
7 | "no-namespace": [true, "allow-declarations"],
8 | "no-reference": true,
9 | "no-var-requires": true,
10 | "typedef": [true, "call-signature"],
11 | "typedef-whitespace": [true, {
12 | "call-signature": "nospace",
13 | "index-signature": "nospace",
14 | "parameter": "nospace",
15 | "property-declaration": "nospace",
16 | "variable-declaration": "nospace"
17 | },{
18 | "call-signature": "space",
19 | "index-signature": "space",
20 | "parameter": "space",
21 | "property-declaration": "space",
22 | "variable-declaration": "space"
23 | }],
24 | "ban": false,
25 | "curly": false,
26 | "forin": true,
27 | "label-position": true,
28 | "no-arg": true,
29 | "no-bitwise": false,
30 | "no-conditional-assignment": false,
31 | "no-console": false,
32 | "no-debugger": false,
33 | "no-duplicate-variable": true,
34 | "no-empty": false,
35 | "no-eval": true,
36 | "no-invalid-this": false,
37 | "no-null-keyword": false,
38 | "no-shadowed-variable": false,
39 | "no-string-literal": false,
40 | "no-switch-case-fall-through": false,
41 | "no-unused-expression": false,
42 | "no-use-before-declare": false,
43 | "no-var-keyword": true,
44 | "radix": true,
45 | "switch-default": false,
46 | "triple-equals": false,
47 | "use-isnan": true,
48 | "use-strict": false,
49 | "eofline": true,
50 | "indent": [true, "spaces"],
51 | "max-line-length": [true, 120],
52 | "no-default-export": true,
53 | "no-require-imports": false,
54 | "no-trailing-whitespace": true,
55 | "object-literal-sort-keys": false,
56 | "trailing-comma": [true, {
57 | "multiline": "never",
58 | "singleline": "never"
59 | }],
60 | "align": [false],
61 | "class-name": true,
62 | "comment-format": [true, "check-space"],
63 | "interface-name": [true, "never-prefix"],
64 | "jsdoc-format": true,
65 | "no-angle-bracket-type-assertion": true,
66 | "no-consecutive-blank-lines": true,
67 | "no-constructor-vars": false,
68 | "one-line": [true,
69 | "check-catch",
70 | "check-finally",
71 | "check-else",
72 | "check-open-brace",
73 | "check-whitespace"
74 | ],
75 | "one-variable-per-declaration": [true, "ignore-for-loop"],
76 | "quotemark": [true, "single", "avoidEscape"],
77 | "semicolon": [true, "always"],
78 | "variable-name": [true, "check-format", "allow-leading-underscore"],
79 | "whitespace": [true,
80 | "check-branch",
81 | "check-decl",
82 | "check-operator",
83 | "check-module",
84 | "check-separator",
85 | "check-type",
86 | "check-typecast"
87 | ]
88 | }
89 | }
90 |
--------------------------------------------------------------------------------