├── .circleci └── config.yml ├── .editorconfig ├── .gitignore ├── .prettierrc ├── LICENCE.md ├── README.md ├── package.json ├── src ├── index.ts └── test.ts ├── tsconfig.json └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | refs: 4 | container: &container 5 | docker: 6 | - image: node:10 7 | working_directory: ~/repo 8 | steps: 9 | - &Versions 10 | run: 11 | name: Versions 12 | command: node -v && npm -v && yarn -v 13 | - &Install 14 | run: 15 | name: Install Dependencies 16 | command: yarn install --pure-lockfile 17 | - &Build 18 | run: 19 | name: Build 20 | command: yarn build 21 | - &Test 22 | run: 23 | name: Test 24 | command: yarn ci:test 25 | 26 | jobs: 27 | test: 28 | <<: *container 29 | steps: 30 | - checkout 31 | - *Versions 32 | - *Install 33 | - *Test 34 | - *Build 35 | 36 | publish: 37 | <<: *container 38 | steps: 39 | - checkout 40 | - *Versions 41 | - *Install 42 | - *Test 43 | - *Build 44 | - run: 45 | name: NPM Auth 46 | command: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc 47 | - run: 48 | name: Release 49 | command: | 50 | npx semantic-release && \ 51 | npx cross-ci :run \ 52 | npx commit-status success Version "'\${PROJECT_VERSION}'" 53 | workflows: 54 | version: 2 55 | all: 56 | jobs: 57 | - test: 58 | filters: 59 | branches: 60 | ignore: 61 | - master 62 | - gh-pages 63 | master: 64 | jobs: 65 | - publish: 66 | context: common-env 67 | filters: 68 | branches: 69 | only: master 70 | monthly: 71 | triggers: 72 | - schedule: 73 | cron: '0 0 1 * *' 74 | filters: 75 | branches: 76 | only: master 77 | jobs: 78 | - test: 79 | context: common-env 80 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Coverage directory used by tools like istanbul 11 | coverage 12 | 13 | # Compiled binary addons (http://nodejs.org/api/addons.html) 14 | build/Release 15 | 16 | # Dependency directory 17 | node_modules 18 | 19 | # Users Environment Variables 20 | .lock-wscript 21 | 22 | # Babel build output 23 | /lib 24 | 25 | # Config files 26 | environment.toml 27 | .env -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": false, 3 | "singleQuote": true, 4 | "trailingComma": "all" 5 | } -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2019 [Forbes Lindesay](https://github.com/ForbesLindesay) 4 | 5 | > Permission is hereby granted, free of charge, to any person obtaining a copy 6 | > of this software and associated documentation files (the "Software"), to deal 7 | > in the Software without restriction, including without limitation the rights 8 | > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | > copies of the Software, and to permit persons to whom the Software is 10 | > furnished to do so, subject to the following conditions: 11 | > 12 | > The above copyright notice and this permission notice shall be included in 13 | > all copies or substantial portions of the Software. 14 | > 15 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | > SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Type Assertions 2 | 3 | Assertions to test your TypeScript types. 4 | 5 | ## Usage 6 | 7 | Define a `type-tests.ts` file and you can make assertions like: 8 | 9 | ```ts 10 | import * as ta from 'type-assertions'; 11 | 12 | ta.assert>>(); 13 | ta.assert>>(); 14 | 15 | ta.assert>>(); 16 | ta.assert>>(); 17 | 18 | ta.assert>(); 19 | ta.assert>>(); 20 | 21 | ta.assert>(); 22 | ta.assert>>(); 23 | ta.assert>>(); 24 | ``` 25 | 26 | When you run the build, you will get errors in typesctipt if any of your assertions are not valid. 27 | 28 | ## License 29 | 30 | MIT 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "type-assertions", 3 | "main": "lib/index.js", 4 | "types": "lib/index.d.ts", 5 | "files": [ 6 | "lib/" 7 | ], 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/ForbesLindesay/type-assertions.git" 11 | }, 12 | "scripts": { 13 | "clean": "rimraf lib", 14 | "prebuild": "yarn clean", 15 | "build": "tsc", 16 | "build:watch": "yarn build -w", 17 | "postbuild": "rimraf lib/test.*", 18 | "precommit": "pretty-quick --staged", 19 | "prepush": "yarn prettier:diff", 20 | "prettier": "prettier --ignore-path .gitignore --write './**/*.{js,jsx,ts,tsx}'", 21 | "prettier:diff": "prettier --ignore-path .gitignore --list-different './**/*.{js,jsx,ts,tsx}'", 22 | "ci:test": "yarn prettier:diff" 23 | }, 24 | "dependencies": {}, 25 | "devDependencies": { 26 | "husky": "^0.14.3", 27 | "prettier": "^1.13.7", 28 | "pretty-quick": "^1.6.0", 29 | "rimraf": "^2.6.2", 30 | "typescript": "^3.1.1" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * assert that a type is exactly `true` 3 | */ 4 | export type Assert = T; 5 | export function assert(): T { 6 | return true as T; 7 | } 8 | 9 | /** 10 | * convert all types that are not `true` to `false` 11 | */ 12 | export type Normalize = (A extends never 13 | ? false 14 | : A extends true 15 | ? never 16 | : false) extends never 17 | ? true 18 | : false; 19 | 20 | /** 21 | * and together two boolean literal types 22 | */ 23 | export type And = Normalize< 24 | A extends true ? (B extends true ? true : false) : false 25 | >; 26 | 27 | /** 28 | * or together two boolean literal types 29 | */ 30 | export type Or = Normalize< 31 | A extends true ? true : B extends true ? true : false 32 | >; 33 | 34 | /** 35 | * negate a boolean literal type. i.e. turn `true` into `false` and `false` into `true` 36 | */ 37 | export type Not = Normalize; 38 | 39 | /** 40 | * xor together two boolean literal types 41 | */ 42 | export type XOr = Normalize< 43 | And, Not>> 44 | >; 45 | 46 | /** 47 | * `true` if `Actual` extends `Expected` 48 | */ 49 | export type Extends = Normalize< 50 | Actual extends Expected ? true : false 51 | >; 52 | 53 | /** 54 | * `true` if `Actual` and `Expected` are the same type, i.e. 55 | * `Actual` extends `Expected` and `Expected` extends `Actual` 56 | */ 57 | export type Equal = Normalize< 58 | And, Extends> 59 | >; 60 | 61 | /** 62 | * Returns `true` if the exact type `ExpectedElement` appears 63 | * in the union `ActualUnion`. 64 | * 65 | * e.g. `UnionIncludesExact<1 | 2 | 3, 2>` => `true` 66 | * e.g. `UnionIncludesExact` => `false` 67 | */ 68 | export type UnionIncludesExact = Normalize< 69 | Equal, ExpectedElement> 70 | >; 71 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | import * as ta from './'; 2 | 3 | export const t1: ta.Not> = true; 4 | export type t1 = ta.Assert>>; 5 | export const t1a: ta.Not> = true; 6 | export type t1a = ta.Assert>>; 7 | export const t11: ta.Not> = true; 8 | export type t11 = ta.Assert>>; 9 | export const t11a: ta.Not> = true; 10 | export type t11a = ta.Assert>>; 11 | 12 | export const t2: ta.Not> = true; 13 | export type t2 = ta.Assert>>; 14 | export const t2a: ta.Not> = true; 15 | export type t2a = ta.Assert>>; 16 | 17 | export const t3: ta.Extends<{x: 1}, any> = true; 18 | export type t3 = ta.Assert>; 19 | export const t4: ta.Extends = false; 20 | export type t4 = ta.Assert>>; 21 | 22 | export const t5: ta.UnionIncludesExact = true; 23 | export type t5 = ta.Assert>; 24 | export const t6: ta.UnionIncludesExact = false; 25 | export type t6 = ta.Assert< 26 | ta.Not> 27 | >; 28 | export const t7: ta.UnionIncludesExact = false; 29 | export type t7 = ta.Assert>>; 30 | 31 | ta.assert(); 32 | ta.assert>(); 33 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "module": "commonjs", 5 | "moduleResolution": "Node", 6 | "noImplicitAny": true, 7 | "skipLibCheck": true, 8 | "experimentalDecorators": false, 9 | "importHelpers": false, 10 | "pretty": true, 11 | "sourceMap": true, 12 | "strict": true, 13 | "esModuleInterop": true, 14 | "outDir": "lib", 15 | "forceConsistentCasingInFileNames": true, 16 | "noEmitOnError": false, 17 | "noErrorTruncation": true, 18 | "noFallthroughCasesInSwitch": false, 19 | "noImplicitReturns": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "declaration": true, 23 | "lib": ["es2018"] 24 | }, 25 | "include": ["src"] 26 | } 27 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-styles@^3.2.1: 6 | version "3.2.1" 7 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 8 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 9 | dependencies: 10 | color-convert "^1.9.0" 11 | 12 | balanced-match@^1.0.0: 13 | version "1.0.0" 14 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 15 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 16 | 17 | brace-expansion@^1.1.7: 18 | version "1.1.11" 19 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 20 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 21 | dependencies: 22 | balanced-match "^1.0.0" 23 | concat-map "0.0.1" 24 | 25 | chalk@^2.3.0: 26 | version "2.4.2" 27 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 28 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 29 | dependencies: 30 | ansi-styles "^3.2.1" 31 | escape-string-regexp "^1.0.5" 32 | supports-color "^5.3.0" 33 | 34 | ci-info@^1.5.0: 35 | version "1.6.0" 36 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" 37 | integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== 38 | 39 | color-convert@^1.9.0: 40 | version "1.9.3" 41 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 42 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 43 | dependencies: 44 | color-name "1.1.3" 45 | 46 | color-name@1.1.3: 47 | version "1.1.3" 48 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 49 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 50 | 51 | concat-map@0.0.1: 52 | version "0.0.1" 53 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 54 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 55 | 56 | cross-spawn@^5.0.1: 57 | version "5.1.0" 58 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 59 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 60 | dependencies: 61 | lru-cache "^4.0.1" 62 | shebang-command "^1.2.0" 63 | which "^1.2.9" 64 | 65 | escape-string-regexp@^1.0.5: 66 | version "1.0.5" 67 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 68 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 69 | 70 | execa@^0.8.0: 71 | version "0.8.0" 72 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" 73 | integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= 74 | dependencies: 75 | cross-spawn "^5.0.1" 76 | get-stream "^3.0.0" 77 | is-stream "^1.1.0" 78 | npm-run-path "^2.0.0" 79 | p-finally "^1.0.0" 80 | signal-exit "^3.0.0" 81 | strip-eof "^1.0.0" 82 | 83 | find-up@^2.1.0: 84 | version "2.1.0" 85 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 86 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 87 | dependencies: 88 | locate-path "^2.0.0" 89 | 90 | fs.realpath@^1.0.0: 91 | version "1.0.0" 92 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 93 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 94 | 95 | get-stream@^3.0.0: 96 | version "3.0.0" 97 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 98 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 99 | 100 | glob@^7.1.3: 101 | version "7.1.3" 102 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 103 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 104 | dependencies: 105 | fs.realpath "^1.0.0" 106 | inflight "^1.0.4" 107 | inherits "2" 108 | minimatch "^3.0.4" 109 | once "^1.3.0" 110 | path-is-absolute "^1.0.0" 111 | 112 | has-flag@^3.0.0: 113 | version "3.0.0" 114 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 115 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 116 | 117 | husky@^0.14.3: 118 | version "0.14.3" 119 | resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" 120 | integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== 121 | dependencies: 122 | is-ci "^1.0.10" 123 | normalize-path "^1.0.0" 124 | strip-indent "^2.0.0" 125 | 126 | ignore@^3.3.7: 127 | version "3.3.10" 128 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 129 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== 130 | 131 | inflight@^1.0.4: 132 | version "1.0.6" 133 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 134 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 135 | dependencies: 136 | once "^1.3.0" 137 | wrappy "1" 138 | 139 | inherits@2: 140 | version "2.0.3" 141 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 142 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 143 | 144 | is-ci@^1.0.10: 145 | version "1.2.1" 146 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 147 | integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== 148 | dependencies: 149 | ci-info "^1.5.0" 150 | 151 | is-stream@^1.1.0: 152 | version "1.1.0" 153 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 154 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 155 | 156 | isexe@^2.0.0: 157 | version "2.0.0" 158 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 159 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 160 | 161 | locate-path@^2.0.0: 162 | version "2.0.0" 163 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 164 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 165 | dependencies: 166 | p-locate "^2.0.0" 167 | path-exists "^3.0.0" 168 | 169 | lru-cache@^4.0.1: 170 | version "4.1.5" 171 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 172 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 173 | dependencies: 174 | pseudomap "^1.0.2" 175 | yallist "^2.1.2" 176 | 177 | minimatch@^3.0.4: 178 | version "3.0.4" 179 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 180 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 181 | dependencies: 182 | brace-expansion "^1.1.7" 183 | 184 | mri@^1.1.0: 185 | version "1.1.4" 186 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" 187 | integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== 188 | 189 | normalize-path@^1.0.0: 190 | version "1.0.0" 191 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" 192 | integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= 193 | 194 | npm-run-path@^2.0.0: 195 | version "2.0.2" 196 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 197 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 198 | dependencies: 199 | path-key "^2.0.0" 200 | 201 | once@^1.3.0: 202 | version "1.4.0" 203 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 204 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 205 | dependencies: 206 | wrappy "1" 207 | 208 | p-finally@^1.0.0: 209 | version "1.0.0" 210 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 211 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 212 | 213 | p-limit@^1.1.0: 214 | version "1.3.0" 215 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 216 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 217 | dependencies: 218 | p-try "^1.0.0" 219 | 220 | p-locate@^2.0.0: 221 | version "2.0.0" 222 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 223 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 224 | dependencies: 225 | p-limit "^1.1.0" 226 | 227 | p-try@^1.0.0: 228 | version "1.0.0" 229 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 230 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 231 | 232 | path-exists@^3.0.0: 233 | version "3.0.0" 234 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 235 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 236 | 237 | path-is-absolute@^1.0.0: 238 | version "1.0.1" 239 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 240 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 241 | 242 | path-key@^2.0.0: 243 | version "2.0.1" 244 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 245 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 246 | 247 | prettier@^1.13.7: 248 | version "1.15.3" 249 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" 250 | integrity sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg== 251 | 252 | pretty-quick@^1.6.0: 253 | version "1.8.1" 254 | resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.8.1.tgz#af7b046fdd1d36c29f558c5585aa80db30c7f1db" 255 | integrity sha512-HPCl9fVtifPAgkoD9ZtuZRfeCZO/mzNdAOqCNEFBLRanOyhNRZpY97UnFZAdCwumCx9LQUJwCCsW4qleQDjP2g== 256 | dependencies: 257 | chalk "^2.3.0" 258 | execa "^0.8.0" 259 | find-up "^2.1.0" 260 | ignore "^3.3.7" 261 | mri "^1.1.0" 262 | 263 | pseudomap@^1.0.2: 264 | version "1.0.2" 265 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 266 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 267 | 268 | rimraf@^2.6.2: 269 | version "2.6.3" 270 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 271 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 272 | dependencies: 273 | glob "^7.1.3" 274 | 275 | shebang-command@^1.2.0: 276 | version "1.2.0" 277 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 278 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 279 | dependencies: 280 | shebang-regex "^1.0.0" 281 | 282 | shebang-regex@^1.0.0: 283 | version "1.0.0" 284 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 285 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 286 | 287 | signal-exit@^3.0.0: 288 | version "3.0.2" 289 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 290 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 291 | 292 | strip-eof@^1.0.0: 293 | version "1.0.0" 294 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 295 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 296 | 297 | strip-indent@^2.0.0: 298 | version "2.0.0" 299 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 300 | integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= 301 | 302 | supports-color@^5.3.0: 303 | version "5.5.0" 304 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 305 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 306 | dependencies: 307 | has-flag "^3.0.0" 308 | 309 | typescript@^3.1.1: 310 | version "3.2.2" 311 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" 312 | integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg== 313 | 314 | which@^1.2.9: 315 | version "1.3.1" 316 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 317 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 318 | dependencies: 319 | isexe "^2.0.0" 320 | 321 | wrappy@1: 322 | version "1.0.2" 323 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 324 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 325 | 326 | yallist@^2.1.2: 327 | version "2.1.2" 328 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 329 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 330 | --------------------------------------------------------------------------------