├── .gitignore ├── .npmignore ├── README.md ├── package.json ├── src └── cli.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | typings 4 | dist 5 | npm-debug.log 6 | .vscode 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | typings 2 | src 3 | .idea 4 | .vscode -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # StandardTS 2 | 3 | Opinionated code style for TypeScript based on StandardJS. 4 | 5 | ```npm install standardts -g``` 6 | 7 | ## Currently supported 8 | - no semicolons 9 | - single quotes 10 | - use spaces for indent 11 | - no unused variables 12 | - use always `===` (only `== null` check allowed) 13 | - parameters named `err` or `error` must always be handled 14 | 15 | ## Usage 16 | ``` 17 | standardts [--fix] 18 | ``` 19 | 20 | `standardts` by default will run linting on every `ts` or `tsx` file in the current working directory (omitting `node_modules` and `typings`) 21 | 22 | ## Missing core rules 23 | - use always 2 spaces for indent (currently [http://palantir.github.io/tslint/rules/indent/](indent rule) doesn't support it) 24 | - promise helpers 25 | - typescript specific rules 26 | - react specific rules 27 | 28 | ## TSlint rules created thanks to this project: 29 | - `handle-callback-err` 30 | 31 | ## Development 32 | Package is under *heavy* development. Community input is appreciated. 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "standardts", 3 | "version": "1.0.0", 4 | "description": "Opinionated code style for TypeScript", 5 | "main": "dist/cli.js", 6 | "scripts": { 7 | "start": "node dist/cli.js", 8 | "prestart": "npm run build --silent", 9 | "build": "tsc", 10 | "prepublish": "npm run build", 11 | "watch": "tsc -w", 12 | "self-test": "node dist/cli.js", 13 | "preself-test": "npm run build", 14 | "test": "npm run --silent self-test" 15 | }, 16 | "bin": "./dist/cli.js", 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/krzkaczor/standardts.git" 20 | }, 21 | "keywords": [ 22 | "standardts", 23 | "typescript", 24 | "standard", 25 | "code", 26 | "style" 27 | ], 28 | "author": "Krzysztof Kaczor", 29 | "contributors": [ 30 | "Emil Persson (https://github.com/emilniklas)" 31 | ], 32 | "license": "MIT", 33 | "bugs": { 34 | "url": "https://github.com/krzkaczor/standardts/issues" 35 | }, 36 | "homepage": "https://github.com/krzkaczor/standardts#readme", 37 | "dependencies": { 38 | "commander": "^2.9.0", 39 | "glob": "^7.1.1", 40 | "lodash": "^4.17.4", 41 | "tslint": "^4.3.1", 42 | "tslint-eslint-rules": "krzkaczor/tslint-eslint-rules#prepublish-script" 43 | }, 44 | "devDependencies": { 45 | "@types/commander": "^2.3.31", 46 | "@types/glob": "^5.0.30", 47 | "@types/lodash": "^4.14.50", 48 | "typescript": "^2.1.5" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import * as program from 'commander' 4 | import {join} from 'path' 5 | import {Linter, RuleFailure} from 'tslint' 6 | import * as fs from 'fs' 7 | import * as glob from 'glob' 8 | import {flatten} from 'lodash' 9 | 10 | const packageInfo = require('../package.json') 11 | const configuration = require('../tslint.json') 12 | 13 | program 14 | .version(packageInfo.version) 15 | .usage(' [--fix]') 16 | .option('--fix', 'automatically fix some violations') 17 | .parse(process.argv) 18 | 19 | interface Program extends program.IExportedCommand { 20 | fix: boolean 21 | } 22 | 23 | const cwd = process.cwd() 24 | const args = program.args 25 | 26 | const linter = new Linter({ 27 | formatter: 'json', 28 | formattersDirectory: '', 29 | rulesDirectory: join(require.resolve('tslint-eslint-rules'), '../dist/rules'), 30 | fix: (program as Program).fix 31 | }) 32 | 33 | let absolutePathToFiles: Array 34 | 35 | if (args.length > 0) { 36 | absolutePathToFiles = flatten(args.map((p) => join(cwd, p)).map((path) => glob.sync(path))) 37 | } else { 38 | absolutePathToFiles = glob.sync('**/*.ts?(x)', {ignore: ['node_modules/**/*.ts?(x)', 'typings/**/*.ts?(x)']}) 39 | } 40 | 41 | console.info(`Checking ${absolutePathToFiles.length} files...`) 42 | 43 | const lintingFailures = absolutePathToFiles.reduce((failures, absPath) => { 44 | const source = fs.readFileSync(absPath, 'utf8') 45 | linter.lint(absPath, source, configuration) 46 | const results = linter.getResult() 47 | 48 | if (results.failureCount > 0) { 49 | return failures.concat(results.failures) 50 | } else { 51 | return failures 52 | } 53 | }, [] as RuleFailure[]) 54 | 55 | if (lintingFailures.length === 0) { 56 | console.info('Done!') 57 | process.exit(0) 58 | } 59 | 60 | lintingFailures.forEach((failure) => { 61 | const fileName = failure.getFileName() 62 | const {line, character} = failure.getStartPosition().getLineAndCharacter() 63 | const message = failure.getFailure() 64 | console.log(` ${fileName}:${line + 1}:${character + 1}: ${message}`) 65 | }) 66 | console.log(`Errors: ${lintingFailures.length}`) 67 | 68 | process.exit(1) 69 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "noImplicitAny": true, 5 | "module": "commonjs", 6 | "sourceMap": false, 7 | "outDir": "dist" 8 | }, 9 | "files": [ 10 | "src/cli.ts" 11 | ], 12 | "exclude": [ 13 | "node_modules" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rulesDirectory": "./node_modules/tslint-eslint-rules/dist/rules", 3 | "rules": { 4 | "semicolon": [ 5 | true, 6 | "never" 7 | ], 8 | "indent": [ 9 | true, 10 | "spaces" 11 | ], 12 | "no-unexpected-multiline": true, 13 | "comment-format": [ 14 | true, 15 | "check-space" 16 | ], 17 | "eofline": true, 18 | "quotemark": [ 19 | true, 20 | "single", 21 | "avoid-escape", 22 | "jsx-double" 23 | ], 24 | "triple-equals": [ 25 | true, 26 | "allow-null-check" 27 | ], 28 | "whitespace": [ 29 | true, 30 | "check-branch", 31 | "check-operator" 32 | ], 33 | "handle-callback-err": [ 34 | true, 35 | "^(err|error)$" 36 | ] 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/commander@^2.3.31": 6 | version "2.3.31" 7 | resolved "https://registry.yarnpkg.com/@types/commander/-/commander-2.3.31.tgz#c60e5517091f9e2200a5e2063a830eddac4a7036" 8 | dependencies: 9 | "@types/node" "*" 10 | 11 | "@types/glob@^5.0.30": 12 | version "5.0.30" 13 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.30.tgz#1026409c5625a8689074602808d082b2867b8a51" 14 | dependencies: 15 | "@types/minimatch" "*" 16 | "@types/node" "*" 17 | 18 | "@types/lodash@^4.14.50": 19 | version "4.14.50" 20 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.50.tgz#2227da4d65fafe249bccd59c7b9396e27674c8f7" 21 | 22 | "@types/minimatch@*": 23 | version "2.0.29" 24 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a" 25 | 26 | "@types/node@*": 27 | version "7.0.0" 28 | resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.0.tgz#c081147b109da5f9c57af70571771be97ce9c0ba" 29 | 30 | ansi-align@^1.1.0: 31 | version "1.1.0" 32 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 33 | dependencies: 34 | string-width "^1.0.1" 35 | 36 | ansi-regex@^2.0.0: 37 | version "2.1.1" 38 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 39 | 40 | ansi-styles@^2.2.1: 41 | version "2.2.1" 42 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 43 | 44 | babel-code-frame@^6.20.0: 45 | version "6.20.0" 46 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" 47 | dependencies: 48 | chalk "^1.1.0" 49 | esutils "^2.0.2" 50 | js-tokens "^2.0.0" 51 | 52 | balanced-match@^0.4.1: 53 | version "0.4.2" 54 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 55 | 56 | boxen@^0.6.0: 57 | version "0.6.0" 58 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" 59 | dependencies: 60 | ansi-align "^1.1.0" 61 | camelcase "^2.1.0" 62 | chalk "^1.1.1" 63 | cli-boxes "^1.0.0" 64 | filled-array "^1.0.0" 65 | object-assign "^4.0.1" 66 | repeating "^2.0.0" 67 | string-width "^1.0.1" 68 | widest-line "^1.0.0" 69 | 70 | brace-expansion@^1.0.0: 71 | version "1.1.6" 72 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 73 | dependencies: 74 | balanced-match "^0.4.1" 75 | concat-map "0.0.1" 76 | 77 | buffer-shims@^1.0.0: 78 | version "1.0.0" 79 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 80 | 81 | camelcase@^2.1.0: 82 | version "2.1.1" 83 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 84 | 85 | capture-stack-trace@^1.0.0: 86 | version "1.0.0" 87 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 88 | 89 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 90 | version "1.1.3" 91 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 92 | dependencies: 93 | ansi-styles "^2.2.1" 94 | escape-string-regexp "^1.0.2" 95 | has-ansi "^2.0.0" 96 | strip-ansi "^3.0.0" 97 | supports-color "^2.0.0" 98 | 99 | cli-boxes@^1.0.0: 100 | version "1.0.0" 101 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 102 | 103 | code-point-at@^1.0.0: 104 | version "1.1.0" 105 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 106 | 107 | colors@^1.1.2: 108 | version "1.1.2" 109 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 110 | 111 | commander@^2.9.0: 112 | version "2.9.0" 113 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 114 | dependencies: 115 | graceful-readlink ">= 1.0.0" 116 | 117 | concat-map@0.0.1: 118 | version "0.0.1" 119 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 120 | 121 | configstore@^2.0.0: 122 | version "2.1.0" 123 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" 124 | dependencies: 125 | dot-prop "^3.0.0" 126 | graceful-fs "^4.1.2" 127 | mkdirp "^0.5.0" 128 | object-assign "^4.0.1" 129 | os-tmpdir "^1.0.0" 130 | osenv "^0.1.0" 131 | uuid "^2.0.1" 132 | write-file-atomic "^1.1.2" 133 | xdg-basedir "^2.0.0" 134 | 135 | core-util-is@~1.0.0: 136 | version "1.0.2" 137 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 138 | 139 | create-error-class@^3.0.1: 140 | version "3.0.2" 141 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 142 | dependencies: 143 | capture-stack-trace "^1.0.0" 144 | 145 | deep-extend@~0.4.0: 146 | version "0.4.1" 147 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 148 | 149 | diff@^2.2.1: 150 | version "2.2.3" 151 | resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" 152 | 153 | diff@^3.0.1: 154 | version "3.2.0" 155 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 156 | 157 | doctrine@^0.7.2: 158 | version "0.7.2" 159 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" 160 | dependencies: 161 | esutils "^1.1.6" 162 | isarray "0.0.1" 163 | 164 | dot-prop@^3.0.0: 165 | version "3.0.0" 166 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 167 | dependencies: 168 | is-obj "^1.0.0" 169 | 170 | duplexer2@^0.1.4: 171 | version "0.1.4" 172 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 173 | dependencies: 174 | readable-stream "^2.0.2" 175 | 176 | error-ex@^1.2.0: 177 | version "1.3.0" 178 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 179 | dependencies: 180 | is-arrayish "^0.2.1" 181 | 182 | escape-string-regexp@^1.0.2: 183 | version "1.0.5" 184 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 185 | 186 | esutils@^1.1.6: 187 | version "1.1.6" 188 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" 189 | 190 | esutils@^2.0.2: 191 | version "2.0.2" 192 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 193 | 194 | filled-array@^1.0.0: 195 | version "1.1.0" 196 | resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" 197 | 198 | findup-sync@~0.3.0: 199 | version "0.3.0" 200 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 201 | dependencies: 202 | glob "~5.0.0" 203 | 204 | fs.realpath@^1.0.0: 205 | version "1.0.0" 206 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 207 | 208 | glob@^6.0.1: 209 | version "6.0.4" 210 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" 211 | dependencies: 212 | inflight "^1.0.4" 213 | inherits "2" 214 | minimatch "2 || 3" 215 | once "^1.3.0" 216 | path-is-absolute "^1.0.0" 217 | 218 | glob@^7.1.1: 219 | version "7.1.1" 220 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 221 | dependencies: 222 | fs.realpath "^1.0.0" 223 | inflight "^1.0.4" 224 | inherits "2" 225 | minimatch "^3.0.2" 226 | once "^1.3.0" 227 | path-is-absolute "^1.0.0" 228 | 229 | glob@~5.0.0: 230 | version "5.0.15" 231 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 232 | dependencies: 233 | inflight "^1.0.4" 234 | inherits "2" 235 | minimatch "2 || 3" 236 | once "^1.3.0" 237 | path-is-absolute "^1.0.0" 238 | 239 | got@^5.0.0: 240 | version "5.7.1" 241 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" 242 | dependencies: 243 | create-error-class "^3.0.1" 244 | duplexer2 "^0.1.4" 245 | is-redirect "^1.0.0" 246 | is-retry-allowed "^1.0.0" 247 | is-stream "^1.0.0" 248 | lowercase-keys "^1.0.0" 249 | node-status-codes "^1.0.0" 250 | object-assign "^4.0.1" 251 | parse-json "^2.1.0" 252 | pinkie-promise "^2.0.0" 253 | read-all-stream "^3.0.0" 254 | readable-stream "^2.0.5" 255 | timed-out "^3.0.0" 256 | unzip-response "^1.0.2" 257 | url-parse-lax "^1.0.0" 258 | 259 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 260 | version "4.1.11" 261 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 262 | 263 | "graceful-readlink@>= 1.0.0": 264 | version "1.0.1" 265 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 266 | 267 | has-ansi@^2.0.0: 268 | version "2.0.0" 269 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 270 | dependencies: 271 | ansi-regex "^2.0.0" 272 | 273 | imurmurhash@^0.1.4: 274 | version "0.1.4" 275 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 276 | 277 | inflight@^1.0.4: 278 | version "1.0.6" 279 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 280 | dependencies: 281 | once "^1.3.0" 282 | wrappy "1" 283 | 284 | inherits@2, inherits@~2.0.1: 285 | version "2.0.3" 286 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 287 | 288 | ini@~1.3.0: 289 | version "1.3.4" 290 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 291 | 292 | is-arrayish@^0.2.1: 293 | version "0.2.1" 294 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 295 | 296 | is-finite@^1.0.0: 297 | version "1.0.2" 298 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 299 | dependencies: 300 | number-is-nan "^1.0.0" 301 | 302 | is-fullwidth-code-point@^1.0.0: 303 | version "1.0.0" 304 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 305 | dependencies: 306 | number-is-nan "^1.0.0" 307 | 308 | is-npm@^1.0.0: 309 | version "1.0.0" 310 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 311 | 312 | is-obj@^1.0.0: 313 | version "1.0.1" 314 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 315 | 316 | is-redirect@^1.0.0: 317 | version "1.0.0" 318 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 319 | 320 | is-retry-allowed@^1.0.0: 321 | version "1.1.0" 322 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 323 | 324 | is-stream@^1.0.0: 325 | version "1.1.0" 326 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 327 | 328 | isarray@0.0.1: 329 | version "0.0.1" 330 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 331 | 332 | isarray@~1.0.0: 333 | version "1.0.0" 334 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 335 | 336 | js-tokens@^2.0.0: 337 | version "2.0.0" 338 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" 339 | 340 | latest-version@^2.0.0: 341 | version "2.0.0" 342 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" 343 | dependencies: 344 | package-json "^2.0.0" 345 | 346 | lazy-req@^1.1.0: 347 | version "1.1.0" 348 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" 349 | 350 | lodash@^4.17.4: 351 | version "4.17.4" 352 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 353 | 354 | lowercase-keys@^1.0.0: 355 | version "1.0.0" 356 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 357 | 358 | "minimatch@2 || 3", minimatch@^3.0.2: 359 | version "3.0.3" 360 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 361 | dependencies: 362 | brace-expansion "^1.0.0" 363 | 364 | minimist@0.0.8: 365 | version "0.0.8" 366 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 367 | 368 | minimist@^1.2.0: 369 | version "1.2.0" 370 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 371 | 372 | minimist@~0.0.1: 373 | version "0.0.10" 374 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 375 | 376 | mkdirp@^0.5.0: 377 | version "0.5.1" 378 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 379 | dependencies: 380 | minimist "0.0.8" 381 | 382 | node-status-codes@^1.0.0: 383 | version "1.0.0" 384 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" 385 | 386 | number-is-nan@^1.0.0: 387 | version "1.0.1" 388 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 389 | 390 | object-assign@^4.0.1: 391 | version "4.1.1" 392 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 393 | 394 | once@^1.3.0: 395 | version "1.4.0" 396 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 397 | dependencies: 398 | wrappy "1" 399 | 400 | optimist@~0.6.0: 401 | version "0.6.1" 402 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 403 | dependencies: 404 | minimist "~0.0.1" 405 | wordwrap "~0.0.2" 406 | 407 | os-homedir@^1.0.0: 408 | version "1.0.2" 409 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 410 | 411 | os-tmpdir@^1.0.0: 412 | version "1.0.2" 413 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 414 | 415 | osenv@^0.1.0: 416 | version "0.1.4" 417 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 418 | dependencies: 419 | os-homedir "^1.0.0" 420 | os-tmpdir "^1.0.0" 421 | 422 | package-json@^2.0.0: 423 | version "2.4.0" 424 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" 425 | dependencies: 426 | got "^5.0.0" 427 | registry-auth-token "^3.0.1" 428 | registry-url "^3.0.3" 429 | semver "^5.1.0" 430 | 431 | parse-json@^2.1.0: 432 | version "2.2.0" 433 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 434 | dependencies: 435 | error-ex "^1.2.0" 436 | 437 | path-is-absolute@^1.0.0: 438 | version "1.0.1" 439 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 440 | 441 | pinkie-promise@^2.0.0: 442 | version "2.0.1" 443 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 444 | dependencies: 445 | pinkie "^2.0.0" 446 | 447 | pinkie@^2.0.0: 448 | version "2.0.4" 449 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 450 | 451 | prepend-http@^1.0.1: 452 | version "1.0.4" 453 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 454 | 455 | process-nextick-args@~1.0.6: 456 | version "1.0.7" 457 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 458 | 459 | rc@^1.0.1, rc@^1.1.6: 460 | version "1.1.6" 461 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 462 | dependencies: 463 | deep-extend "~0.4.0" 464 | ini "~1.3.0" 465 | minimist "^1.2.0" 466 | strip-json-comments "~1.0.4" 467 | 468 | read-all-stream@^3.0.0: 469 | version "3.1.0" 470 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" 471 | dependencies: 472 | pinkie-promise "^2.0.0" 473 | readable-stream "^2.0.0" 474 | 475 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5: 476 | version "2.2.2" 477 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 478 | dependencies: 479 | buffer-shims "^1.0.0" 480 | core-util-is "~1.0.0" 481 | inherits "~2.0.1" 482 | isarray "~1.0.0" 483 | process-nextick-args "~1.0.6" 484 | string_decoder "~0.10.x" 485 | util-deprecate "~1.0.1" 486 | 487 | registry-auth-token@^3.0.1: 488 | version "3.1.0" 489 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 490 | dependencies: 491 | rc "^1.1.6" 492 | 493 | registry-url@^3.0.3: 494 | version "3.1.0" 495 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 496 | dependencies: 497 | rc "^1.0.1" 498 | 499 | repeating@^2.0.0: 500 | version "2.0.1" 501 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 502 | dependencies: 503 | is-finite "^1.0.0" 504 | 505 | resolve@^1.1.7: 506 | version "1.2.0" 507 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" 508 | 509 | semver-diff@^2.0.0: 510 | version "2.1.0" 511 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 512 | dependencies: 513 | semver "^5.0.3" 514 | 515 | semver@^5.0.3, semver@^5.1.0: 516 | version "5.3.0" 517 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 518 | 519 | slide@^1.1.5: 520 | version "1.1.6" 521 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 522 | 523 | sprintf-js@^1.0.3: 524 | version "1.0.3" 525 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 526 | 527 | string-width@^1.0.1: 528 | version "1.0.2" 529 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 530 | dependencies: 531 | code-point-at "^1.0.0" 532 | is-fullwidth-code-point "^1.0.0" 533 | strip-ansi "^3.0.0" 534 | 535 | string_decoder@~0.10.x: 536 | version "0.10.31" 537 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 538 | 539 | strip-ansi@^3.0.0: 540 | version "3.0.1" 541 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 542 | dependencies: 543 | ansi-regex "^2.0.0" 544 | 545 | strip-json-comments@~1.0.4: 546 | version "1.0.4" 547 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 548 | 549 | supports-color@^2.0.0: 550 | version "2.0.0" 551 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 552 | 553 | timed-out@^3.0.0: 554 | version "3.1.3" 555 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" 556 | 557 | tslint-eslint-rules@krzkaczor/tslint-eslint-rules#prepublish-script: 558 | version "1.2.0" 559 | resolved "https://codeload.github.com/krzkaczor/tslint-eslint-rules/tar.gz/72a49e088c5476bc124fbbdcbda477e9e2b4d780" 560 | dependencies: 561 | doctrine "^0.7.2" 562 | tslint "^3.6.0" 563 | 564 | tslint@^3.6.0: 565 | version "3.7.4" 566 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-3.7.4.tgz#4e879e47ad7f5158ff7fb4bf930c508a26bdacf7" 567 | dependencies: 568 | colors "^1.1.2" 569 | diff "^2.2.1" 570 | findup-sync "~0.3.0" 571 | glob "^6.0.1" 572 | optimist "~0.6.0" 573 | path-is-absolute "^1.0.0" 574 | underscore.string "~3.1.1" 575 | 576 | tslint@^4.3.1: 577 | version "4.3.1" 578 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.3.1.tgz#28f679c53ca4b273688bcb6fcf0dde7ff1bb2169" 579 | dependencies: 580 | babel-code-frame "^6.20.0" 581 | colors "^1.1.2" 582 | diff "^3.0.1" 583 | findup-sync "~0.3.0" 584 | glob "^7.1.1" 585 | optimist "~0.6.0" 586 | resolve "^1.1.7" 587 | underscore.string "^3.3.4" 588 | update-notifier "^1.0.2" 589 | 590 | typescript@^2.1.5: 591 | version "2.1.5" 592 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.5.tgz#6fe9479e00e01855247cea216e7561bafcdbcd4a" 593 | 594 | underscore.string@^3.3.4: 595 | version "3.3.4" 596 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" 597 | dependencies: 598 | sprintf-js "^1.0.3" 599 | util-deprecate "^1.0.2" 600 | 601 | underscore.string@~3.1.1: 602 | version "3.1.1" 603 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.1.1.tgz#0cdd6bcad0c046fd7663d305d8a785b5da10f335" 604 | 605 | unzip-response@^1.0.2: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" 608 | 609 | update-notifier@^1.0.2: 610 | version "1.0.3" 611 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" 612 | dependencies: 613 | boxen "^0.6.0" 614 | chalk "^1.0.0" 615 | configstore "^2.0.0" 616 | is-npm "^1.0.0" 617 | latest-version "^2.0.0" 618 | lazy-req "^1.1.0" 619 | semver-diff "^2.0.0" 620 | xdg-basedir "^2.0.0" 621 | 622 | url-parse-lax@^1.0.0: 623 | version "1.0.0" 624 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 625 | dependencies: 626 | prepend-http "^1.0.1" 627 | 628 | util-deprecate@^1.0.2, util-deprecate@~1.0.1: 629 | version "1.0.2" 630 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 631 | 632 | uuid@^2.0.1: 633 | version "2.0.3" 634 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 635 | 636 | widest-line@^1.0.0: 637 | version "1.0.0" 638 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 639 | dependencies: 640 | string-width "^1.0.1" 641 | 642 | wordwrap@~0.0.2: 643 | version "0.0.3" 644 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 645 | 646 | wrappy@1: 647 | version "1.0.2" 648 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 649 | 650 | write-file-atomic@^1.1.2: 651 | version "1.3.1" 652 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" 653 | dependencies: 654 | graceful-fs "^4.1.11" 655 | imurmurhash "^0.1.4" 656 | slide "^1.1.5" 657 | 658 | xdg-basedir@^2.0.0: 659 | version "2.0.0" 660 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" 661 | dependencies: 662 | os-homedir "^1.0.0" 663 | --------------------------------------------------------------------------------