├── .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 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 92 | 93 | 94 | 95 | 96 | 112 | 113 | 114 | 115 | 116 | 127 | 128 | 129 |
ParamTypeDescription
objectany 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 |
mapFnfunction 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 |
[options]object 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 |
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 | --------------------------------------------------------------------------------