├── .gitignore ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── README.md ├── package-lock.json ├── package.json ├── screenshots ├── mocha-debugging.png └── ts-file-debugging.png ├── src ├── __tests__ │ └── person.tests.ts ├── index.ts └── person.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.lock 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Current TS Tests File", 6 | "type": "node", 7 | "request": "launch", 8 | "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", 9 | "args": ["-r", "ts-node/register", "${relativeFile}"], 10 | "cwd": "${workspaceRoot}", 11 | "protocol": "inspector", 12 | "internalConsoleOptions": "openOnSessionStart" 13 | }, 14 | { 15 | "name": "Current TS File", 16 | "type": "node", 17 | "request": "launch", 18 | "args": ["${relativeFile}"], 19 | "runtimeArgs": ["-r", "ts-node/register"], 20 | "cwd": "${workspaceRoot}", 21 | "protocol": "inspector", 22 | "internalConsoleOptions": "openOnSessionStart" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "./node_modules/typescript/lib" 3 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "0.1.0", 5 | "command": "npm", 6 | "isShellCommand": true, 7 | "showOutput": "always", 8 | "suppressTaskName": true, 9 | "tasks": [ 10 | { 11 | "taskName": "build", 12 | "args": ["run", "build"] 13 | }, 14 | { 15 | "taskName": "test", 16 | "args": ["run", "mocha", "${relativeFile}"] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Debugging TypeScript in VS Code Without Compiling (using `ts-node`) 2 | 3 | This repo contains a sample TypeScript project with a Visual Studio Code `launch.json` that 4 | allows you run TypeScript code and Mocha tests without a separate build step. 5 | 6 | It has been tested with **Node 8.4** and **VS Code 1.16** (the latest at time of writing!), 7 | your mileage with other versions may vary! :) 8 | 9 | ## Usage 10 | 11 | ``` 12 | git clone https://github.com/EnterpriseJSTutorial/vscode-ts-node-debugging.git 13 | npm install 14 | ``` 15 | 16 | ## VS Code Debug Tasks 17 | 18 | This repo contains the following VS Code Debug tasks (accessible via the debug button on the left): 19 | 20 | **Current TS File** - allows you to debug the currently open TypeScript file. Try it with `src/index.ts`: 21 | 22 | ![image](/screenshots/ts-file-debugging.png) 23 | 24 | **Current TS Tests File** - allows you to debug the currently open Mocha unit tests file. Try it with `src/__tests__/person.tests.ts`: 25 | 26 | ![image](/screenshots/mocha-debugging.png) 27 | 28 | These tasks should allow you to hit breakpoints in your code, without needing to compile first. 29 | 30 | ## Further Details 31 | 32 | Further details in a blog post here: 33 | https://medium.com/@dupski/debug-typescript-in-vs-code-without-compiling-using-ts-node-9d1f4f9a94a 34 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hellotypescript", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/chai": { 8 | "version": "4.0.4", 9 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.4.tgz", 10 | "integrity": "sha512-cvU0HomQ7/aGDQJZsbtJXqBQ7w4J4TqLB0Z/h8mKrpRjfeZEvTbygkfJEb7fWdmwpIeDeFmIVwAEqS0OYuUv3Q==", 11 | "dev": true 12 | }, 13 | "@types/mocha": { 14 | "version": "2.2.43", 15 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.43.tgz", 16 | "integrity": "sha512-xNlAmH+lRJdUMXClMTI9Y0pRqIojdxfm7DHsIxoB2iTzu3fnPmSMEN8SsSx0cdwV36d02PWCWaDUoZPDSln+xw==", 17 | "dev": true 18 | }, 19 | "ansi-styles": { 20 | "version": "3.2.0", 21 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 22 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 23 | "dev": true, 24 | "requires": { 25 | "color-convert": "1.9.0" 26 | } 27 | }, 28 | "arrify": { 29 | "version": "1.0.1", 30 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 31 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 32 | "dev": true 33 | }, 34 | "assertion-error": { 35 | "version": "1.0.2", 36 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", 37 | "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", 38 | "dev": true 39 | }, 40 | "balanced-match": { 41 | "version": "1.0.0", 42 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 43 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 44 | "dev": true 45 | }, 46 | "brace-expansion": { 47 | "version": "1.1.8", 48 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 49 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 50 | "dev": true, 51 | "requires": { 52 | "balanced-match": "1.0.0", 53 | "concat-map": "0.0.1" 54 | } 55 | }, 56 | "browser-stdout": { 57 | "version": "1.3.0", 58 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 59 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 60 | "dev": true 61 | }, 62 | "chai": { 63 | "version": "4.1.2", 64 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", 65 | "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", 66 | "dev": true, 67 | "requires": { 68 | "assertion-error": "1.0.2", 69 | "check-error": "1.0.2", 70 | "deep-eql": "3.0.1", 71 | "get-func-name": "2.0.0", 72 | "pathval": "1.1.0", 73 | "type-detect": "4.0.3" 74 | } 75 | }, 76 | "chalk": { 77 | "version": "2.1.0", 78 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", 79 | "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", 80 | "dev": true, 81 | "requires": { 82 | "ansi-styles": "3.2.0", 83 | "escape-string-regexp": "1.0.5", 84 | "supports-color": "4.4.0" 85 | }, 86 | "dependencies": { 87 | "has-flag": { 88 | "version": "2.0.0", 89 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 90 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 91 | "dev": true 92 | }, 93 | "supports-color": { 94 | "version": "4.4.0", 95 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 96 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 97 | "dev": true, 98 | "requires": { 99 | "has-flag": "2.0.0" 100 | } 101 | } 102 | } 103 | }, 104 | "check-error": { 105 | "version": "1.0.2", 106 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 107 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 108 | "dev": true 109 | }, 110 | "color-convert": { 111 | "version": "1.9.0", 112 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 113 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 114 | "dev": true, 115 | "requires": { 116 | "color-name": "1.1.3" 117 | } 118 | }, 119 | "color-name": { 120 | "version": "1.1.3", 121 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 122 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 123 | "dev": true 124 | }, 125 | "commander": { 126 | "version": "2.9.0", 127 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", 128 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", 129 | "dev": true, 130 | "requires": { 131 | "graceful-readlink": "1.0.1" 132 | } 133 | }, 134 | "concat-map": { 135 | "version": "0.0.1", 136 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 137 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 138 | "dev": true 139 | }, 140 | "debug": { 141 | "version": "2.6.8", 142 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 143 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 144 | "dev": true, 145 | "requires": { 146 | "ms": "2.0.0" 147 | } 148 | }, 149 | "deep-eql": { 150 | "version": "3.0.1", 151 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 152 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 153 | "dev": true, 154 | "requires": { 155 | "type-detect": "4.0.3" 156 | } 157 | }, 158 | "diff": { 159 | "version": "3.2.0", 160 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", 161 | "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", 162 | "dev": true 163 | }, 164 | "escape-string-regexp": { 165 | "version": "1.0.5", 166 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 167 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 168 | "dev": true 169 | }, 170 | "fs.realpath": { 171 | "version": "1.0.0", 172 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 173 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 174 | "dev": true 175 | }, 176 | "get-func-name": { 177 | "version": "2.0.0", 178 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 179 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 180 | "dev": true 181 | }, 182 | "glob": { 183 | "version": "7.1.1", 184 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 185 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", 186 | "dev": true, 187 | "requires": { 188 | "fs.realpath": "1.0.0", 189 | "inflight": "1.0.6", 190 | "inherits": "2.0.3", 191 | "minimatch": "3.0.4", 192 | "once": "1.4.0", 193 | "path-is-absolute": "1.0.1" 194 | } 195 | }, 196 | "graceful-readlink": { 197 | "version": "1.0.1", 198 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 199 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", 200 | "dev": true 201 | }, 202 | "growl": { 203 | "version": "1.9.2", 204 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", 205 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", 206 | "dev": true 207 | }, 208 | "has-flag": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 211 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 212 | "dev": true 213 | }, 214 | "he": { 215 | "version": "1.1.1", 216 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 217 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 218 | "dev": true 219 | }, 220 | "inflight": { 221 | "version": "1.0.6", 222 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 223 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 224 | "dev": true, 225 | "requires": { 226 | "once": "1.4.0", 227 | "wrappy": "1.0.2" 228 | } 229 | }, 230 | "inherits": { 231 | "version": "2.0.3", 232 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 233 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 234 | "dev": true 235 | }, 236 | "json3": { 237 | "version": "3.3.2", 238 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 239 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 240 | "dev": true 241 | }, 242 | "lodash._baseassign": { 243 | "version": "3.2.0", 244 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 245 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 246 | "dev": true, 247 | "requires": { 248 | "lodash._basecopy": "3.0.1", 249 | "lodash.keys": "3.1.2" 250 | } 251 | }, 252 | "lodash._basecopy": { 253 | "version": "3.0.1", 254 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 255 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 256 | "dev": true 257 | }, 258 | "lodash._basecreate": { 259 | "version": "3.0.3", 260 | "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", 261 | "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", 262 | "dev": true 263 | }, 264 | "lodash._getnative": { 265 | "version": "3.9.1", 266 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 267 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 268 | "dev": true 269 | }, 270 | "lodash._isiterateecall": { 271 | "version": "3.0.9", 272 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 273 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 274 | "dev": true 275 | }, 276 | "lodash.create": { 277 | "version": "3.1.1", 278 | "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", 279 | "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", 280 | "dev": true, 281 | "requires": { 282 | "lodash._baseassign": "3.2.0", 283 | "lodash._basecreate": "3.0.3", 284 | "lodash._isiterateecall": "3.0.9" 285 | } 286 | }, 287 | "lodash.isarguments": { 288 | "version": "3.1.0", 289 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 290 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 291 | "dev": true 292 | }, 293 | "lodash.isarray": { 294 | "version": "3.0.4", 295 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 296 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 297 | "dev": true 298 | }, 299 | "lodash.keys": { 300 | "version": "3.1.2", 301 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 302 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 303 | "dev": true, 304 | "requires": { 305 | "lodash._getnative": "3.9.1", 306 | "lodash.isarguments": "3.1.0", 307 | "lodash.isarray": "3.0.4" 308 | } 309 | }, 310 | "make-error": { 311 | "version": "1.3.0", 312 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", 313 | "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", 314 | "dev": true 315 | }, 316 | "minimatch": { 317 | "version": "3.0.4", 318 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 319 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 320 | "dev": true, 321 | "requires": { 322 | "brace-expansion": "1.1.8" 323 | } 324 | }, 325 | "minimist": { 326 | "version": "0.0.8", 327 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 328 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 329 | "dev": true 330 | }, 331 | "mkdirp": { 332 | "version": "0.5.1", 333 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 334 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 335 | "dev": true, 336 | "requires": { 337 | "minimist": "0.0.8" 338 | } 339 | }, 340 | "mocha": { 341 | "version": "3.5.3", 342 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", 343 | "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", 344 | "dev": true, 345 | "requires": { 346 | "browser-stdout": "1.3.0", 347 | "commander": "2.9.0", 348 | "debug": "2.6.8", 349 | "diff": "3.2.0", 350 | "escape-string-regexp": "1.0.5", 351 | "glob": "7.1.1", 352 | "growl": "1.9.2", 353 | "he": "1.1.1", 354 | "json3": "3.3.2", 355 | "lodash.create": "3.1.1", 356 | "mkdirp": "0.5.1", 357 | "supports-color": "3.1.2" 358 | } 359 | }, 360 | "ms": { 361 | "version": "2.0.0", 362 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 363 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 364 | "dev": true 365 | }, 366 | "once": { 367 | "version": "1.4.0", 368 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 369 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 370 | "dev": true, 371 | "requires": { 372 | "wrappy": "1.0.2" 373 | } 374 | }, 375 | "path-is-absolute": { 376 | "version": "1.0.1", 377 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 378 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 379 | "dev": true 380 | }, 381 | "pathval": { 382 | "version": "1.1.0", 383 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 384 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 385 | "dev": true 386 | }, 387 | "source-map": { 388 | "version": "0.5.7", 389 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 390 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 391 | "dev": true 392 | }, 393 | "source-map-support": { 394 | "version": "0.4.18", 395 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 396 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 397 | "dev": true, 398 | "requires": { 399 | "source-map": "0.5.7" 400 | } 401 | }, 402 | "strip-bom": { 403 | "version": "3.0.0", 404 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 405 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 406 | "dev": true 407 | }, 408 | "strip-json-comments": { 409 | "version": "2.0.1", 410 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 411 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 412 | "dev": true 413 | }, 414 | "supports-color": { 415 | "version": "3.1.2", 416 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", 417 | "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", 418 | "dev": true, 419 | "requires": { 420 | "has-flag": "1.0.0" 421 | } 422 | }, 423 | "ts-node": { 424 | "version": "3.3.0", 425 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", 426 | "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", 427 | "dev": true, 428 | "requires": { 429 | "arrify": "1.0.1", 430 | "chalk": "2.1.0", 431 | "diff": "3.2.0", 432 | "make-error": "1.3.0", 433 | "minimist": "1.2.0", 434 | "mkdirp": "0.5.1", 435 | "source-map-support": "0.4.18", 436 | "tsconfig": "6.0.0", 437 | "v8flags": "3.0.0", 438 | "yn": "2.0.0" 439 | }, 440 | "dependencies": { 441 | "minimist": { 442 | "version": "1.2.0", 443 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 444 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 445 | "dev": true 446 | } 447 | } 448 | }, 449 | "tsconfig": { 450 | "version": "6.0.0", 451 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", 452 | "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", 453 | "dev": true, 454 | "requires": { 455 | "strip-bom": "3.0.0", 456 | "strip-json-comments": "2.0.1" 457 | } 458 | }, 459 | "type-detect": { 460 | "version": "4.0.3", 461 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", 462 | "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", 463 | "dev": true 464 | }, 465 | "typescript": { 466 | "version": "2.5.2", 467 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.2.tgz", 468 | "integrity": "sha1-A4qV99m7tCCxvzW6MdTFwd0//jQ=", 469 | "dev": true 470 | }, 471 | "user-home": { 472 | "version": "1.1.1", 473 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", 474 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", 475 | "dev": true 476 | }, 477 | "v8flags": { 478 | "version": "3.0.0", 479 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.0.tgz", 480 | "integrity": "sha512-AGl+C+4qpeSu2g3JxCD/mGFFOs/vVZ3XREkD3ibQXEqr4Y4zgIrPWW124/IKJFHOIVFIoH8miWrLf0o84HYjwA==", 481 | "dev": true, 482 | "requires": { 483 | "user-home": "1.1.1" 484 | } 485 | }, 486 | "wrappy": { 487 | "version": "1.0.2", 488 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 489 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 490 | "dev": true 491 | }, 492 | "yn": { 493 | "version": "2.0.0", 494 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 495 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", 496 | "dev": true 497 | } 498 | } 499 | } 500 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hellotypescript", 3 | "version": "1.0.0", 4 | "main": "dist/index.js", 5 | "license": "CC0-1.0", 6 | "scripts": { 7 | "build": "tsc", 8 | "test": "npm run mocha --recursive ./src/**/__tests__/*", 9 | "mocha": "mocha -r ts-node/register" 10 | }, 11 | "devDependencies": { 12 | "@types/chai": "4.0.4", 13 | "@types/mocha": "2.2.43", 14 | "chai": "4.1.2", 15 | "mocha": "3.5.3", 16 | "ts-node": "3.3.0", 17 | "typescript": "2.5.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /screenshots/mocha-debugging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RBCodeCraft/vscode-ts-node-debugging/dbf4d8bb6bd2880d4c8278e2f334da241def8330/screenshots/mocha-debugging.png -------------------------------------------------------------------------------- /screenshots/ts-file-debugging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RBCodeCraft/vscode-ts-node-debugging/dbf4d8bb6bd2880d4c8278e2f334da241def8330/screenshots/ts-file-debugging.png -------------------------------------------------------------------------------- /src/__tests__/person.tests.ts: -------------------------------------------------------------------------------- 1 | 2 | import { expect } from 'chai'; 3 | import { Person } from '../person'; 4 | 5 | describe('Person', () => { 6 | let p: Person; 7 | 8 | beforeEach(() => { 9 | p = new Person('Bob', 31); 10 | }); 11 | 12 | it('constructor() creates a Person with properties as expected', () => { 13 | expect(p.name).to.equal('Bob'); 14 | expect(p.age).to.equal(31); 15 | }) 16 | 17 | it('greet() returns a greeting', () => { 18 | expect(p.getGreeting()).to.equal('Hi Bob'); 19 | }) 20 | 21 | }) -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Person } from './person'; 3 | 4 | let person = new Person('Bob', 34); 5 | 6 | console.log(person.getGreeting()); 7 | -------------------------------------------------------------------------------- /src/person.ts: -------------------------------------------------------------------------------- 1 | 2 | export class Person { 3 | 4 | constructor( 5 | public name: string, 6 | public age: number) { 7 | } 8 | 9 | getGreeting() { 10 | return 'Hi ' + this.name; 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "noImplicitAny": true 6 | }, 7 | "include": [ 8 | "src/**/*" 9 | ], 10 | "exclude": [ 11 | "src/**/__tests__/*" 12 | ] 13 | } --------------------------------------------------------------------------------