├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── README.md ├── images ├── example_tree.gif ├── logo.png └── logo.svg ├── package-lock.json ├── package.json ├── src ├── extension.ts └── test │ ├── extension.test.ts │ └── index.ts ├── tsconfig.json └── tslint.json /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | .vscode-test/ 4 | *.vsix 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "ms-vscode.vscode-typescript-tslint-plugin" 6 | ] 7 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [{ 8 | "name": "Run Extension", 9 | "type": "extensionHost", 10 | "request": "launch", 11 | "runtimeExecutable": "${execPath}", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/**/*.js" 17 | ], 18 | "preLaunchTask": "npm: watch" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "runtimeExecutable": "${execPath}", 25 | "args": [ 26 | "--extensionDevelopmentPath=${workspaceFolder}", 27 | "--extensionTestsPath=${workspaceFolder}/out/test" 28 | ], 29 | "outFiles": [ 30 | "${workspaceFolder}/out/test/**/*.js" 31 | ], 32 | "preLaunchTask": "npm: watch" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | **/*.svg 2 | .vscode/** 3 | .vscode-test/** 4 | out/test/** 5 | src/** 6 | .gitignore 7 | vsc-extension-quickstart.md 8 | **/tsconfig.json 9 | **/tslint.json 10 | **/*.map 11 | **/*.ts -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [Unreleased] 4 | 5 | - Initial release -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fp-ts Codegen 2 | 3 | Expands haskell-syntax ADTs to typescript equivalent types definitions using [gcanti/fp-ts-codegen](https://github.com/gcanti/fp-ts-codegen), check the [online playground](https://gcanti.github.io/fp-ts-codegen/). 4 | 5 | ## Features 6 | 7 | ![expansion at work](./images/example_tree.gif) 8 | 9 | ## Extension Settings 10 | 11 | This extension contributes the following settings: 12 | 13 | * `fp-ts-codegen.tagName`: the name of the field used as tag 14 | * `fp-ts-codegen.foldName`: the name prefix used for pattern matching functions 15 | * `fp-ts-codegen.matcheeName`: the name used for the input of pattern matching functions 16 | * `fp-ts-codegen.handlersStyle`: the pattern matching handlers can be expressed as positional arguments or a single object literal `tag -> handler` 17 | * `fp-ts-codegen.handlersName`: the name used for the handler if handlersStyle is \"record\" 18 | * `fp-ts-codegen.encoding`: the encoding to generate the types, either `literal` for pure TS or `fp-ts`, to use fp-ts constructs 19 | 20 | ## Release Notes 21 | 22 | ### 1.0.0 23 | 24 | Initial release of vscode-fp-ts-codegen. 25 | 26 | - Use [gcanti/fp-ts-codegen](https://github.com/gcanti/fp-ts-codegen) for expanding ADTs 27 | -------------------------------------------------------------------------------- /images/example_tree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/betafcc/vscode-fp-ts-codegen/abe2e86f360be2ec324952ef7c410838f02026d9/images/example_tree.gif -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/betafcc/vscode-fp-ts-codegen/abe2e86f360be2ec324952ef7c410838f02026d9/images/logo.png -------------------------------------------------------------------------------- /images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | >>= 10 | 11 | 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-fp-ts-codegen", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.0.0", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 10 | "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.0.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 19 | "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "@types/mocha": { 28 | "version": "2.2.48", 29 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 30 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 31 | "dev": true 32 | }, 33 | "@types/node": { 34 | "version": "10.14.7", 35 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.7.tgz", 36 | "integrity": "sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A==", 37 | "dev": true 38 | }, 39 | "agent-base": { 40 | "version": "4.2.1", 41 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", 42 | "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", 43 | "dev": true, 44 | "requires": { 45 | "es6-promisify": "^5.0.0" 46 | } 47 | }, 48 | "ajv": { 49 | "version": "6.10.0", 50 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 51 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 52 | "dev": true, 53 | "requires": { 54 | "fast-deep-equal": "^2.0.1", 55 | "fast-json-stable-stringify": "^2.0.0", 56 | "json-schema-traverse": "^0.4.1", 57 | "uri-js": "^4.2.2" 58 | } 59 | }, 60 | "ansi-styles": { 61 | "version": "3.2.1", 62 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 63 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 64 | "dev": true, 65 | "requires": { 66 | "color-convert": "^1.9.0" 67 | } 68 | }, 69 | "argparse": { 70 | "version": "1.0.10", 71 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 72 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 73 | "dev": true, 74 | "requires": { 75 | "sprintf-js": "~1.0.2" 76 | } 77 | }, 78 | "asn1": { 79 | "version": "0.2.4", 80 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 81 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 82 | "dev": true, 83 | "requires": { 84 | "safer-buffer": "~2.1.0" 85 | } 86 | }, 87 | "assert-plus": { 88 | "version": "1.0.0", 89 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 90 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 91 | "dev": true 92 | }, 93 | "asynckit": { 94 | "version": "0.4.0", 95 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 96 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 97 | "dev": true 98 | }, 99 | "aws-sign2": { 100 | "version": "0.7.0", 101 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 102 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 103 | "dev": true 104 | }, 105 | "aws4": { 106 | "version": "1.8.0", 107 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 108 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 109 | "dev": true 110 | }, 111 | "balanced-match": { 112 | "version": "1.0.0", 113 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 114 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 115 | "dev": true 116 | }, 117 | "bcrypt-pbkdf": { 118 | "version": "1.0.2", 119 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 120 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 121 | "dev": true, 122 | "requires": { 123 | "tweetnacl": "^0.14.3" 124 | } 125 | }, 126 | "brace-expansion": { 127 | "version": "1.1.11", 128 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 129 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 130 | "dev": true, 131 | "requires": { 132 | "balanced-match": "^1.0.0", 133 | "concat-map": "0.0.1" 134 | } 135 | }, 136 | "browser-stdout": { 137 | "version": "1.3.0", 138 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 139 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 140 | "dev": true 141 | }, 142 | "buffer-from": { 143 | "version": "1.1.1", 144 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 145 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 146 | "dev": true 147 | }, 148 | "builtin-modules": { 149 | "version": "1.1.1", 150 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 151 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 152 | "dev": true 153 | }, 154 | "caseless": { 155 | "version": "0.12.0", 156 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 157 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 158 | "dev": true 159 | }, 160 | "chalk": { 161 | "version": "2.4.2", 162 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 163 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 164 | "dev": true, 165 | "requires": { 166 | "ansi-styles": "^3.2.1", 167 | "escape-string-regexp": "^1.0.5", 168 | "supports-color": "^5.3.0" 169 | } 170 | }, 171 | "color-convert": { 172 | "version": "1.9.3", 173 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 174 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 175 | "dev": true, 176 | "requires": { 177 | "color-name": "1.1.3" 178 | } 179 | }, 180 | "color-name": { 181 | "version": "1.1.3", 182 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 183 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 184 | "dev": true 185 | }, 186 | "combined-stream": { 187 | "version": "1.0.8", 188 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 189 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 190 | "dev": true, 191 | "requires": { 192 | "delayed-stream": "~1.0.0" 193 | } 194 | }, 195 | "commander": { 196 | "version": "2.20.0", 197 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 198 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 199 | "dev": true 200 | }, 201 | "concat-map": { 202 | "version": "0.0.1", 203 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 204 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 205 | "dev": true 206 | }, 207 | "core-util-is": { 208 | "version": "1.0.2", 209 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 210 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 211 | "dev": true 212 | }, 213 | "dashdash": { 214 | "version": "1.14.1", 215 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 216 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 217 | "dev": true, 218 | "requires": { 219 | "assert-plus": "^1.0.0" 220 | } 221 | }, 222 | "debug": { 223 | "version": "3.1.0", 224 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 225 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 226 | "dev": true, 227 | "requires": { 228 | "ms": "2.0.0" 229 | } 230 | }, 231 | "delayed-stream": { 232 | "version": "1.0.0", 233 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 234 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 235 | "dev": true 236 | }, 237 | "diff": { 238 | "version": "3.5.0", 239 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 240 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 241 | "dev": true 242 | }, 243 | "ecc-jsbn": { 244 | "version": "0.1.2", 245 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 246 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 247 | "dev": true, 248 | "requires": { 249 | "jsbn": "~0.1.0", 250 | "safer-buffer": "^2.1.0" 251 | } 252 | }, 253 | "es6-promise": { 254 | "version": "4.2.6", 255 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", 256 | "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", 257 | "dev": true 258 | }, 259 | "es6-promisify": { 260 | "version": "5.0.0", 261 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 262 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 263 | "dev": true, 264 | "requires": { 265 | "es6-promise": "^4.0.3" 266 | } 267 | }, 268 | "escape-string-regexp": { 269 | "version": "1.0.5", 270 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 271 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 272 | "dev": true 273 | }, 274 | "esprima": { 275 | "version": "4.0.1", 276 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 277 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 278 | "dev": true 279 | }, 280 | "esutils": { 281 | "version": "2.0.2", 282 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 283 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 284 | "dev": true 285 | }, 286 | "extend": { 287 | "version": "3.0.2", 288 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 289 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 290 | "dev": true 291 | }, 292 | "extsprintf": { 293 | "version": "1.3.0", 294 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 295 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 296 | "dev": true 297 | }, 298 | "fast-deep-equal": { 299 | "version": "2.0.1", 300 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 301 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 302 | "dev": true 303 | }, 304 | "fast-json-stable-stringify": { 305 | "version": "2.0.0", 306 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 307 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 308 | "dev": true 309 | }, 310 | "forever-agent": { 311 | "version": "0.6.1", 312 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 313 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 314 | "dev": true 315 | }, 316 | "form-data": { 317 | "version": "2.3.3", 318 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 319 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 320 | "dev": true, 321 | "requires": { 322 | "asynckit": "^0.4.0", 323 | "combined-stream": "^1.0.6", 324 | "mime-types": "^2.1.12" 325 | } 326 | }, 327 | "fp-ts": { 328 | "version": "1.18.1", 329 | "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.18.1.tgz", 330 | "integrity": "sha512-esfGgsuc0S9Q23YnoWQH4DrnBIJ7LCbA7AsUKFwawVsYmVZ7Cl+3cjd8nAhJLWwpUKDRsBsMJOf+uX4ZakZMsQ==" 331 | }, 332 | "fp-ts-codegen": { 333 | "version": "0.3.0", 334 | "resolved": "https://registry.npmjs.org/fp-ts-codegen/-/fp-ts-codegen-0.3.0.tgz", 335 | "integrity": "sha512-+a6tfdZ3HzBs9fpGZo83RrqrtE2UEsf80lk2pv4goa98+hWZTPgqz3JB5sO3ZRgqV0YkmNrvkaeWalyDe9XFrw==", 336 | "requires": { 337 | "fp-ts": "^1.14.1", 338 | "monocle-ts": "^1.5.3", 339 | "parser-ts": "^0.5.1", 340 | "typescript": "^3.2.4" 341 | } 342 | }, 343 | "fs.realpath": { 344 | "version": "1.0.0", 345 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 346 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 347 | "dev": true 348 | }, 349 | "getpass": { 350 | "version": "0.1.7", 351 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 352 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 353 | "dev": true, 354 | "requires": { 355 | "assert-plus": "^1.0.0" 356 | } 357 | }, 358 | "glob": { 359 | "version": "7.1.4", 360 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 361 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 362 | "dev": true, 363 | "requires": { 364 | "fs.realpath": "^1.0.0", 365 | "inflight": "^1.0.4", 366 | "inherits": "2", 367 | "minimatch": "^3.0.4", 368 | "once": "^1.3.0", 369 | "path-is-absolute": "^1.0.0" 370 | } 371 | }, 372 | "growl": { 373 | "version": "1.10.3", 374 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 375 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 376 | "dev": true 377 | }, 378 | "har-schema": { 379 | "version": "2.0.0", 380 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 381 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 382 | "dev": true 383 | }, 384 | "har-validator": { 385 | "version": "5.1.3", 386 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 387 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 388 | "dev": true, 389 | "requires": { 390 | "ajv": "^6.5.5", 391 | "har-schema": "^2.0.0" 392 | } 393 | }, 394 | "has-flag": { 395 | "version": "3.0.0", 396 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 397 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 398 | "dev": true 399 | }, 400 | "he": { 401 | "version": "1.1.1", 402 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 403 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 404 | "dev": true 405 | }, 406 | "http-proxy-agent": { 407 | "version": "2.1.0", 408 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 409 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 410 | "dev": true, 411 | "requires": { 412 | "agent-base": "4", 413 | "debug": "3.1.0" 414 | } 415 | }, 416 | "http-signature": { 417 | "version": "1.2.0", 418 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 419 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 420 | "dev": true, 421 | "requires": { 422 | "assert-plus": "^1.0.0", 423 | "jsprim": "^1.2.2", 424 | "sshpk": "^1.7.0" 425 | } 426 | }, 427 | "https-proxy-agent": { 428 | "version": "2.2.1", 429 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", 430 | "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", 431 | "dev": true, 432 | "requires": { 433 | "agent-base": "^4.1.0", 434 | "debug": "^3.1.0" 435 | } 436 | }, 437 | "inflight": { 438 | "version": "1.0.6", 439 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 440 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 441 | "dev": true, 442 | "requires": { 443 | "once": "^1.3.0", 444 | "wrappy": "1" 445 | } 446 | }, 447 | "inherits": { 448 | "version": "2.0.3", 449 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 450 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 451 | "dev": true 452 | }, 453 | "is-typedarray": { 454 | "version": "1.0.0", 455 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 456 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 457 | "dev": true 458 | }, 459 | "isstream": { 460 | "version": "0.1.2", 461 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 462 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 463 | "dev": true 464 | }, 465 | "js-tokens": { 466 | "version": "4.0.0", 467 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 468 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 469 | "dev": true 470 | }, 471 | "js-yaml": { 472 | "version": "3.13.1", 473 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 474 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 475 | "dev": true, 476 | "requires": { 477 | "argparse": "^1.0.7", 478 | "esprima": "^4.0.0" 479 | } 480 | }, 481 | "jsbn": { 482 | "version": "0.1.1", 483 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 484 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 485 | "dev": true 486 | }, 487 | "json-schema": { 488 | "version": "0.2.3", 489 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 490 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 491 | "dev": true 492 | }, 493 | "json-schema-traverse": { 494 | "version": "0.4.1", 495 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 496 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 497 | "dev": true 498 | }, 499 | "json-stringify-safe": { 500 | "version": "5.0.1", 501 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 502 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 503 | "dev": true 504 | }, 505 | "jsprim": { 506 | "version": "1.4.1", 507 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 508 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 509 | "dev": true, 510 | "requires": { 511 | "assert-plus": "1.0.0", 512 | "extsprintf": "1.3.0", 513 | "json-schema": "0.2.3", 514 | "verror": "1.10.0" 515 | } 516 | }, 517 | "mime-db": { 518 | "version": "1.40.0", 519 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 520 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", 521 | "dev": true 522 | }, 523 | "mime-types": { 524 | "version": "2.1.24", 525 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 526 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 527 | "dev": true, 528 | "requires": { 529 | "mime-db": "1.40.0" 530 | } 531 | }, 532 | "minimatch": { 533 | "version": "3.0.4", 534 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 535 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 536 | "dev": true, 537 | "requires": { 538 | "brace-expansion": "^1.1.7" 539 | } 540 | }, 541 | "minimist": { 542 | "version": "0.0.8", 543 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 544 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 545 | "dev": true 546 | }, 547 | "mkdirp": { 548 | "version": "0.5.1", 549 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 550 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 551 | "dev": true, 552 | "requires": { 553 | "minimist": "0.0.8" 554 | } 555 | }, 556 | "mocha": { 557 | "version": "4.1.0", 558 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 559 | "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 560 | "dev": true, 561 | "requires": { 562 | "browser-stdout": "1.3.0", 563 | "commander": "2.11.0", 564 | "debug": "3.1.0", 565 | "diff": "3.3.1", 566 | "escape-string-regexp": "1.0.5", 567 | "glob": "7.1.2", 568 | "growl": "1.10.3", 569 | "he": "1.1.1", 570 | "mkdirp": "0.5.1", 571 | "supports-color": "4.4.0" 572 | }, 573 | "dependencies": { 574 | "commander": { 575 | "version": "2.11.0", 576 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 577 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 578 | "dev": true 579 | }, 580 | "diff": { 581 | "version": "3.3.1", 582 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 583 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", 584 | "dev": true 585 | }, 586 | "glob": { 587 | "version": "7.1.2", 588 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 589 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 590 | "dev": true, 591 | "requires": { 592 | "fs.realpath": "^1.0.0", 593 | "inflight": "^1.0.4", 594 | "inherits": "2", 595 | "minimatch": "^3.0.4", 596 | "once": "^1.3.0", 597 | "path-is-absolute": "^1.0.0" 598 | } 599 | }, 600 | "has-flag": { 601 | "version": "2.0.0", 602 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 603 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 604 | "dev": true 605 | }, 606 | "supports-color": { 607 | "version": "4.4.0", 608 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 609 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 610 | "dev": true, 611 | "requires": { 612 | "has-flag": "^2.0.0" 613 | } 614 | } 615 | } 616 | }, 617 | "monocle-ts": { 618 | "version": "1.7.2", 619 | "resolved": "https://registry.npmjs.org/monocle-ts/-/monocle-ts-1.7.2.tgz", 620 | "integrity": "sha512-F08hPUzQ14vOtac2vOagnvXPr0R0MRKWXF6Bwd3gQ4XnV2qfU0MzPL+L18kX4dXBkat74pxbL88V1BjAj3YOWg==" 621 | }, 622 | "ms": { 623 | "version": "2.0.0", 624 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 625 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 626 | "dev": true 627 | }, 628 | "oauth-sign": { 629 | "version": "0.9.0", 630 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 631 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 632 | "dev": true 633 | }, 634 | "once": { 635 | "version": "1.4.0", 636 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 637 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 638 | "dev": true, 639 | "requires": { 640 | "wrappy": "1" 641 | } 642 | }, 643 | "parser-ts": { 644 | "version": "0.5.1", 645 | "resolved": "https://registry.npmjs.org/parser-ts/-/parser-ts-0.5.1.tgz", 646 | "integrity": "sha512-PAUoJeOch9xiNZOv2BTCvDkzx10fYzzxnTe7AlrdZz3xAObSsTGPWbRLkbdGU+EBun+ANoLKHD9AombBPVxYTA==", 647 | "requires": { 648 | "fp-ts": "^1.13.0" 649 | } 650 | }, 651 | "path-is-absolute": { 652 | "version": "1.0.1", 653 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 654 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 655 | "dev": true 656 | }, 657 | "path-parse": { 658 | "version": "1.0.6", 659 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 660 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 661 | "dev": true 662 | }, 663 | "performance-now": { 664 | "version": "2.1.0", 665 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 666 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 667 | "dev": true 668 | }, 669 | "psl": { 670 | "version": "1.1.31", 671 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 672 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", 673 | "dev": true 674 | }, 675 | "punycode": { 676 | "version": "2.1.1", 677 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 678 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 679 | "dev": true 680 | }, 681 | "qs": { 682 | "version": "6.5.2", 683 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 684 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 685 | "dev": true 686 | }, 687 | "querystringify": { 688 | "version": "2.1.1", 689 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", 690 | "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", 691 | "dev": true 692 | }, 693 | "request": { 694 | "version": "2.88.0", 695 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 696 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 697 | "dev": true, 698 | "requires": { 699 | "aws-sign2": "~0.7.0", 700 | "aws4": "^1.8.0", 701 | "caseless": "~0.12.0", 702 | "combined-stream": "~1.0.6", 703 | "extend": "~3.0.2", 704 | "forever-agent": "~0.6.1", 705 | "form-data": "~2.3.2", 706 | "har-validator": "~5.1.0", 707 | "http-signature": "~1.2.0", 708 | "is-typedarray": "~1.0.0", 709 | "isstream": "~0.1.2", 710 | "json-stringify-safe": "~5.0.1", 711 | "mime-types": "~2.1.19", 712 | "oauth-sign": "~0.9.0", 713 | "performance-now": "^2.1.0", 714 | "qs": "~6.5.2", 715 | "safe-buffer": "^5.1.2", 716 | "tough-cookie": "~2.4.3", 717 | "tunnel-agent": "^0.6.0", 718 | "uuid": "^3.3.2" 719 | } 720 | }, 721 | "requires-port": { 722 | "version": "1.0.0", 723 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 724 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 725 | "dev": true 726 | }, 727 | "resolve": { 728 | "version": "1.11.0", 729 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", 730 | "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", 731 | "dev": true, 732 | "requires": { 733 | "path-parse": "^1.0.6" 734 | } 735 | }, 736 | "safe-buffer": { 737 | "version": "5.1.2", 738 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 739 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 740 | "dev": true 741 | }, 742 | "safer-buffer": { 743 | "version": "2.1.2", 744 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 745 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 746 | "dev": true 747 | }, 748 | "semver": { 749 | "version": "5.7.0", 750 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 751 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 752 | "dev": true 753 | }, 754 | "source-map": { 755 | "version": "0.6.1", 756 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 757 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 758 | "dev": true 759 | }, 760 | "source-map-support": { 761 | "version": "0.5.12", 762 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", 763 | "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", 764 | "dev": true, 765 | "requires": { 766 | "buffer-from": "^1.0.0", 767 | "source-map": "^0.6.0" 768 | } 769 | }, 770 | "sprintf-js": { 771 | "version": "1.0.3", 772 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 773 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 774 | "dev": true 775 | }, 776 | "sshpk": { 777 | "version": "1.16.1", 778 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 779 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 780 | "dev": true, 781 | "requires": { 782 | "asn1": "~0.2.3", 783 | "assert-plus": "^1.0.0", 784 | "bcrypt-pbkdf": "^1.0.0", 785 | "dashdash": "^1.12.0", 786 | "ecc-jsbn": "~0.1.1", 787 | "getpass": "^0.1.1", 788 | "jsbn": "~0.1.0", 789 | "safer-buffer": "^2.0.2", 790 | "tweetnacl": "~0.14.0" 791 | } 792 | }, 793 | "supports-color": { 794 | "version": "5.5.0", 795 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 796 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 797 | "dev": true, 798 | "requires": { 799 | "has-flag": "^3.0.0" 800 | } 801 | }, 802 | "tough-cookie": { 803 | "version": "2.4.3", 804 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 805 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 806 | "dev": true, 807 | "requires": { 808 | "psl": "^1.1.24", 809 | "punycode": "^1.4.1" 810 | }, 811 | "dependencies": { 812 | "punycode": { 813 | "version": "1.4.1", 814 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 815 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 816 | "dev": true 817 | } 818 | } 819 | }, 820 | "tslib": { 821 | "version": "1.9.3", 822 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 823 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 824 | "dev": true 825 | }, 826 | "tslint": { 827 | "version": "5.16.0", 828 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", 829 | "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", 830 | "dev": true, 831 | "requires": { 832 | "@babel/code-frame": "^7.0.0", 833 | "builtin-modules": "^1.1.1", 834 | "chalk": "^2.3.0", 835 | "commander": "^2.12.1", 836 | "diff": "^3.2.0", 837 | "glob": "^7.1.1", 838 | "js-yaml": "^3.13.0", 839 | "minimatch": "^3.0.4", 840 | "mkdirp": "^0.5.1", 841 | "resolve": "^1.3.2", 842 | "semver": "^5.3.0", 843 | "tslib": "^1.8.0", 844 | "tsutils": "^2.29.0" 845 | } 846 | }, 847 | "tsutils": { 848 | "version": "2.29.0", 849 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 850 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 851 | "dev": true, 852 | "requires": { 853 | "tslib": "^1.8.1" 854 | } 855 | }, 856 | "tunnel-agent": { 857 | "version": "0.6.0", 858 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 859 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 860 | "dev": true, 861 | "requires": { 862 | "safe-buffer": "^5.0.1" 863 | } 864 | }, 865 | "tweetnacl": { 866 | "version": "0.14.5", 867 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 868 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 869 | "dev": true 870 | }, 871 | "typescript": { 872 | "version": "3.4.5", 873 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", 874 | "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==" 875 | }, 876 | "uri-js": { 877 | "version": "4.2.2", 878 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 879 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 880 | "dev": true, 881 | "requires": { 882 | "punycode": "^2.1.0" 883 | } 884 | }, 885 | "url-parse": { 886 | "version": "1.4.7", 887 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", 888 | "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", 889 | "dev": true, 890 | "requires": { 891 | "querystringify": "^2.1.1", 892 | "requires-port": "^1.0.0" 893 | } 894 | }, 895 | "uuid": { 896 | "version": "3.3.2", 897 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 898 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 899 | "dev": true 900 | }, 901 | "verror": { 902 | "version": "1.10.0", 903 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 904 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 905 | "dev": true, 906 | "requires": { 907 | "assert-plus": "^1.0.0", 908 | "core-util-is": "1.0.2", 909 | "extsprintf": "^1.2.0" 910 | } 911 | }, 912 | "vscode": { 913 | "version": "1.1.34", 914 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.34.tgz", 915 | "integrity": "sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg==", 916 | "dev": true, 917 | "requires": { 918 | "glob": "^7.1.2", 919 | "mocha": "^4.0.1", 920 | "request": "^2.88.0", 921 | "semver": "^5.4.1", 922 | "source-map-support": "^0.5.0", 923 | "url-parse": "^1.4.4", 924 | "vscode-test": "^0.4.1" 925 | } 926 | }, 927 | "vscode-test": { 928 | "version": "0.4.1", 929 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.1.tgz", 930 | "integrity": "sha512-uIi/07uG/gmCbD9Y9bFpNzmk4el82xiclijEdL426A3jOFfvwdqgfmtuWYfxEGo0w6JY9EqVDTGQCXwuInXVTQ==", 931 | "dev": true, 932 | "requires": { 933 | "http-proxy-agent": "^2.1.0", 934 | "https-proxy-agent": "^2.2.1" 935 | } 936 | }, 937 | "wrappy": { 938 | "version": "1.0.2", 939 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 940 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 941 | "dev": true 942 | } 943 | } 944 | } 945 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-fp-ts-codegen", 3 | "displayName": "fp-ts Code Generator", 4 | "description": "Transform selection using gcanti/fp-ts-codegen", 5 | "icon": "images/logo.png", 6 | "version": "1.0.0", 7 | "publisher": "betafcc", 8 | "author": "Beta Faccion (https://github.com/betafcc)", 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/betafcc/vscode-fp-ts-codegen.git" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/betafcc/vscode-fp-ts-codegen/issues" 16 | }, 17 | "engines": { 18 | "vscode": "^1.19.0" 19 | }, 20 | "categories": [ 21 | "Other" 22 | ], 23 | "activationEvents": [ 24 | "onCommand:fp-ts-codegen.expandSelection" 25 | ], 26 | "main": "./out/extension.js", 27 | "contributes": { 28 | "commands": [ 29 | { 30 | "command": "fp-ts-codegen.expandSelection", 31 | "title": "fp-ts-codegen: Expand Selection" 32 | } 33 | ], 34 | "configuration": [ 35 | { 36 | "type": "object", 37 | "title": "fp-ts Code Generator Configuration", 38 | "properties": { 39 | "fp-ts-codegen.tagName": { 40 | "description": "the name of the field used as tag", 41 | "type": "string", 42 | "default": "type" 43 | }, 44 | "fp-ts-codegen.foldName": { 45 | "description": "the name prefix used for pattern matching functions", 46 | "type": "string", 47 | "default": "fold" 48 | }, 49 | "fp-ts-codegen.matcheeName": { 50 | "description": "the name used for the input of pattern matching functions", 51 | "type": "string", 52 | "default": "fa" 53 | }, 54 | "fp-ts-codegen.handlersStyle": { 55 | "description": "the pattern matching handlers can be expressed as positional arguments or a single object literal `tag -> handler`", 56 | "enum": [ 57 | "positional", 58 | "record" 59 | ], 60 | "type": "string", 61 | "default": "positional" 62 | }, 63 | "fp-ts-codegen.handlersName": { 64 | "description": "the name used for the handler if handlersStyle is \"record\"", 65 | "type": "string", 66 | "default": "handlers" 67 | }, 68 | "fp-ts-codegen.encoding": { 69 | "description": "the encoding to generate the types, either `literal` for pure TS or `fp-ts`, to use fp-ts constructs", 70 | "enum": [ 71 | "fp-ts", 72 | "literal" 73 | ], 74 | "type": "string", 75 | "default": "literal" 76 | } 77 | } 78 | } 79 | ] 80 | }, 81 | "scripts": { 82 | "vscode:prepublish": "npm run compile", 83 | "compile": "tsc -p ./", 84 | "watch": "tsc -watch -p ./", 85 | "postinstall": "node ./node_modules/vscode/bin/install", 86 | "test": "npm run compile && node ./node_modules/vscode/bin/test" 87 | }, 88 | "devDependencies": { 89 | "typescript": "^3.3.1", 90 | "vscode": "^1.1.28", 91 | "tslint": "^5.12.1", 92 | "@types/node": "^10.12.21", 93 | "@types/mocha": "^2.2.42" 94 | }, 95 | "dependencies": { 96 | "fp-ts-codegen": "^0.3.0" 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | import * as vscode from 'vscode'; 4 | import { run } from 'fp-ts-codegen'; 5 | import { Options } from 'fp-ts-codegen/lib/ast'; 6 | 7 | export function activate(context: vscode.ExtensionContext) { 8 | console.log('Congratulations, your extension "vscode-fp-ts-codegen" is now active!'); 9 | 10 | context.subscriptions.push( 11 | vscode.commands.registerCommand('fp-ts-codegen.expandSelection', expandSelection) 12 | ); 13 | } 14 | 15 | export function deactivate() {} 16 | 17 | const expandSelection = () => { 18 | const editor = vscode.window.activeTextEditor; 19 | 20 | if (!editor) { 21 | warn('No Active TextEditor'); 22 | } else { 23 | const selection = editor.selection; 24 | if (selection.isEmpty) { 25 | warn('No selection to Expand'); 26 | } else { 27 | run( 28 | editor.document.getText(selection), 29 | toOptions((vscode.workspace.getConfiguration( 30 | 'fp-ts-codegen' 31 | ) as unknown) as ExtensionOptions) 32 | ).fold(warn, insertSnippet(editor, selection)); 33 | } 34 | } 35 | }; 36 | 37 | interface ExtensionOptions { 38 | encoding: 'fp-ts' | 'literal'; 39 | foldName: string; 40 | handlersName: string; 41 | handlersStyle: 'positional' | 'record'; 42 | matcheeName: string; 43 | tagName: string; 44 | } 45 | 46 | const toOptions = ({ 47 | handlersName, 48 | handlersStyle, 49 | ...rest 50 | }: ExtensionOptions): Options => ({ 51 | ...rest, 52 | handlersStyle: 53 | handlersStyle === 'positional' 54 | ? { type: 'positional' } 55 | : { type: 'record', handlersName } 56 | }); 57 | const warn = (msg: string) => { 58 | vscode.window.showWarningMessage(msg); 59 | }; 60 | 61 | const insertSnippet = (editor: vscode.TextEditor, selection: vscode.Selection) => ( 62 | snippet: string 63 | ) => { 64 | editor.insertSnippet(new vscode.SnippetString(snippet), selection); 65 | }; 66 | -------------------------------------------------------------------------------- /src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | // 2 | // Note: This example test is leveraging the Mocha test framework. 3 | // Please refer to their documentation on https://mochajs.org/ for help. 4 | // 5 | 6 | // The module 'assert' provides assertion methods from node 7 | import * as assert from 'assert'; 8 | 9 | // You can import and use all API from the 'vscode' module 10 | // as well as import your extension to test it 11 | // import * as vscode from 'vscode'; 12 | // import * as myExtension from '../extension'; 13 | 14 | // Defines a Mocha test suite to group tests of similar kind together 15 | suite("Extension Tests", function () { 16 | 17 | // Defines a Mocha unit test 18 | test("Something 1", function() { 19 | assert.equal(-1, [1, 2, 3].indexOf(5)); 20 | assert.equal(-1, [1, 2, 3].indexOf(0)); 21 | }); 22 | }); -------------------------------------------------------------------------------- /src/test/index.ts: -------------------------------------------------------------------------------- 1 | // 2 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING 3 | // 4 | // This file is providing the test runner to use when running extension tests. 5 | // By default the test runner in use is Mocha based. 6 | // 7 | // You can provide your own test runner if you want to override it by exporting 8 | // a function run(testsRoot: string, clb: (error: Error, failures?: number) => void): void 9 | // that the extension host can call to run the tests. The test runner is expected to use console.log 10 | // to report the results back to the caller. When the tests are finished, return 11 | // a possible error to the callback or null if none. 12 | 13 | import * as testRunner from 'vscode/lib/testrunner'; 14 | 15 | // You can directly control Mocha options by configuring the test runner below 16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options 17 | // for more info 18 | testRunner.configure({ 19 | ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) 20 | useColors: true // colored output from test results 21 | }); 22 | 23 | module.exports = testRunner; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true /* enable all strict type-checking options */ 12 | /* Additional Checks */ 13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | }, 17 | "exclude": [ 18 | "node_modules", 19 | ".vscode-test" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [ 9 | true, 10 | "always" 11 | ], 12 | "triple-equals": true 13 | }, 14 | "defaultSeverity": "warning" 15 | } 16 | --------------------------------------------------------------------------------