Skip to content

Commit 89a30c9

Browse files
committed
fix: source maps
1 parent 70a61f6 commit 89a30c9

File tree

14 files changed

+242
-49
lines changed

14 files changed

+242
-49
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ node_js:
1414
- "6"
1515

1616
script:
17+
- npm run clean -- --when-ci-commit-message
1718
- npm run test -- --coverage

appveyor.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# http://www.appveyor.com/docs/appveyor-yml
22
init:
3-
- ps: IF ($env:APPVEYOR_REPO_COMMIT_MESSAGE -Match "\[clear ci-cache\]" ) {$env:APPVEYOR_CACHE_SKIP_RESTORE = "true"}
4-
- ps: IF ($env:APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED -Match "\[clear ci-cache\]") {$env:APPVEYOR_CACHE_SKIP_RESTORE = "true"}
3+
- ps: IF ($env:APPVEYOR_REPO_COMMIT_MESSAGE -Match "\[clean ci-cache\]" ) {$env:APPVEYOR_CACHE_SKIP_RESTORE = "true"}
4+
- ps: IF ($env:APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED -Match "\[clean ci-cache\]") {$env:APPVEYOR_CACHE_SKIP_RESTORE = "true"}
55

66
# Test against these versions of Node.js.
77
environment:
@@ -20,6 +20,7 @@ install:
2020
- set TS_JEST_E2E_WORKDIR=%APPDATA%\ts-jest-e2e
2121
- npm version
2222
- npm ci || npm install
23+
- npm run clean -- --when-ci-commit-message
2324

2425
cache:
2526
- '%APPDATA%\npm-cache -> package.json'

e2e/__helpers__/source-maps.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../src/__helpers__/source-maps.ts

e2e/__helpers__/test-case.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { sync as spawnSync } from 'cross-spawn'
33
import { join, relative, sep } from 'path'
44
import * as Paths from '../../scripts/paths'
55
import * as fs from 'fs-extra'
6+
import { RawSourceMap } from 'source-map'
7+
import { relativiseSourceRoot, extractSourceMaps } from './source-maps'
68

79
const TEMPLATE_EXCLUDED_ITEMS = ['node_modules', 'package-lock.json']
810

@@ -79,7 +81,7 @@ class TestCaseRunDescriptor {
7981
if (logUnlessStatus != null && logUnlessStatus !== result.status) {
8082
console.log(
8183
`Output of test run in "${this.name}" using template "${
82-
this.templateName
84+
this.templateName
8385
}" (exit code: ${result.status}):\n\n`,
8486
result.output.trim(),
8587
)
@@ -147,8 +149,9 @@ export interface TestRunResult {
147149
}
148150
interface TestFileIoData {
149151
in: [string, jest.Path, jest.ProjectConfig, jest.TransformOptions?]
150-
// out: string | jest.TransformedSource;
151152
out: string
153+
outNormalized: string
154+
outSourceMaps: RawSourceMap
152155
}
153156

154157
// tslint:disable-next-line:interface-over-type-literal
@@ -292,12 +295,20 @@ export function run(name: string, options: RunTestOptions = {}): TestRunResult {
292295
}
293296
if (writeIo) {
294297
Object.defineProperty(res, 'ioDataFor', {
295-
value: (relPath: string) => require(`${ioDir}/${relPath}.json`),
298+
value: (relPath: string) => wrapIoData(require(`${ioDir}/${relPath}.json`), dir),
296299
})
297300
}
298301
return res as any
299302
}
300303

304+
function wrapIoData(ioData: TestFileIoData, rootDir: string): TestFileIoData {
305+
const res: TestFileIoData = { ...ioData }
306+
return Object.defineProperties(res, {
307+
outNormalized: { get: () => relativiseSourceRoot(rootDir, ioData.out, '<cwd>/') },
308+
outSourceMaps: { get: () => extractSourceMaps(ioData.out) },
309+
})
310+
}
311+
301312
// from https://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings
302313
function stripAnsiColors(stringToStrip: string): string {
303314
return stringToStrip.replace(

e2e/__tests__/__snapshots__/source-map.test.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function throwError() {
1111
throw new Error('WITHIN SOURCE');
1212
}
1313
exports.throwError = throwError;
14-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiL3ByaXZhdGUvdmFyL2ZvbGRlcnMvZHIvZHlnM192MzEzempmcHE4MndkXzRiMGxyMDAwMGduL1QvLS10cy1qZXN0LXRlbXAtZTJlLS0vZGVmYXVsdC9zb3VyY2UtbWFwcy9tYWluLnRzIiwibWFwcGluZ3MiOiI7O0FBQUE7SUFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFGRCxnQ0FFQztBQUVEO0lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRkQsZ0NBRUMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiL3ByaXZhdGUvdmFyL2ZvbGRlcnMvZHIvZHlnM192MzEzempmcHE4MndkXzRiMGxyMDAwMGduL1QvLS10cy1qZXN0LXRlbXAtZTJlLS0vZGVmYXVsdC9zb3VyY2UtbWFwcy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb25zb2xlTG9nKCkge1xuICBjb25zb2xlLmxvZygnV0lUSElOIFNPVVJDRScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXSVRISU4gU09VUkNFJyk7XG59XG4iXSwidmVyc2lvbiI6M30="
14+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoibWFpbi50cyIsIm1hcHBpbmdzIjoiOztBQUFBO0lBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRkQsZ0NBRUM7QUFFRDtJQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUZELGdDQUVDIiwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiPGN3ZD4vIiwic291cmNlcyI6WyJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb25zb2xlTG9nKCkge1xuICBjb25zb2xlLmxvZygnV0lUSElOIFNPVVJDRScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXSVRISU4gU09VUkNFJyk7XG59XG4iXSwidmVyc2lvbiI6M30="
1515
`;
1616

1717
exports[`using template "default" should report correct line numbers 1`] = `
@@ -79,7 +79,7 @@ function throwError() {
7979
throw new Error('WITHIN SOURCE');
8080
}
8181
exports.throwError = throwError;
82-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3Zhci9mb2xkZXJzL2RyL2R5ZzNfdjMxM3pqZnBxODJ3ZF80YjBscjAwMDBnbi9ULy0tdHMtamVzdC10ZW1wLWUyZS0tL3dpdGgtYmFiZWwtNi9zb3VyY2UtbWFwcy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQUEsVUFBQSxHQUFBO0FBQ0UsWUFBUSxHQUFSLENBQVksZUFBWjtBQUNEO0FBRkQsUUFBQSxVQUFBLEdBQUEsVUFBQTtBQUlBLFNBQUEsVUFBQSxHQUFBO0FBQ0UsVUFBTSxJQUFJLEtBQUosQ0FBVSxlQUFWLENBQU47QUFDRDtBQUZELFFBQUEsVUFBQSxHQUFBLFVBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29uc29sZUxvZygpIHtcbiAgY29uc29sZS5sb2coJ1dJVEhJTiBTT1VSQ0UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcignV0lUSElOIFNPVVJDRScpO1xufVxuIl19"
82+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBQSxVQUFBLEdBQUE7QUFDRSxZQUFRLEdBQVIsQ0FBWSxlQUFaO0FBQ0Q7QUFGRCxRQUFBLFVBQUEsR0FBQSxVQUFBO0FBSUEsU0FBQSxVQUFBLEdBQUE7QUFDRSxVQUFNLElBQUksS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNEO0FBRkQsUUFBQSxVQUFBLEdBQUEsVUFBQSIsIm5hbWVzIjpbXSwic291cmNlUm9vdCI6Ijxjd2Q+LyIsInNvdXJjZXMiOlsibWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29uc29sZUxvZygpIHtcbiAgY29uc29sZS5sb2coJ1dJVEhJTiBTT1VSQ0UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcignV0lUSElOIFNPVVJDRScpO1xufVxuIl0sInZlcnNpb24iOjN9"
8383
`;
8484
8585
exports[`using template "with-babel-6" should report correct line numbers 1`] = `
@@ -153,7 +153,7 @@ function throwError() {
153153
}
154154
155155
exports.throwError = throwError;
156-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3Zhci9mb2xkZXJzL2RyL2R5ZzNfdjMxM3pqZnBxODJ3ZF80YjBscjAwMDBnbi9ULy0tdHMtamVzdC10ZW1wLWUyZS0tL3dpdGgtYmFiZWwtNy9zb3VyY2UtbWFwcy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQUEsVUFBQSxHQUFBO0FBQ0UsRUFBQSxPQUFPLENBQUMsR0FBUixDQUFZLGVBQVo7QUFDRDs7QUFGRCxPQUFBLENBQUEsVUFBQSxHQUFBLFVBQUE7O0FBSUEsU0FBQSxVQUFBLEdBQUE7QUFDRSxRQUFNLElBQUksS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNEOztBQUZELE9BQUEsQ0FBQSxVQUFBLEdBQUEsVUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb25zb2xlTG9nKCkge1xuICBjb25zb2xlLmxvZygnV0lUSElOIFNPVVJDRScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXSVRISU4gU09VUkNFJyk7XG59XG4iXX0="
156+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBQSxVQUFBLEdBQUE7QUFDRSxFQUFBLE9BQU8sQ0FBQyxHQUFSLENBQVksZUFBWjtBQUNEOztBQUZELE9BQUEsQ0FBQSxVQUFBLEdBQUEsVUFBQTs7QUFJQSxTQUFBLFVBQUEsR0FBQTtBQUNFLFFBQU0sSUFBSSxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0Q7O0FBRkQsT0FBQSxDQUFBLFVBQUEsR0FBQSxVQUFBIiwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiPGN3ZD4vIiwic291cmNlcyI6WyJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb25zb2xlTG9nKCkge1xuICBjb25zb2xlLmxvZygnV0lUSElOIFNPVVJDRScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXSVRISU4gU09VUkNFJyk7XG59XG4iXSwidmVyc2lvbiI6M30="
157157
`;
158158
159159
exports[`using template "with-babel-7" should report correct line numbers 1`] = `
@@ -220,7 +220,7 @@ function throwError() {
220220
throw new Error('WITHIN SOURCE');
221221
}
222222
exports.throwError = throwError;
223-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiL3ByaXZhdGUvdmFyL2ZvbGRlcnMvZHIvZHlnM192MzEzempmcHE4MndkXzRiMGxyMDAwMGduL1QvLS10cy1qZXN0LXRlbXAtZTJlLS0vd2l0aC1qZXN0LTIyL3NvdXJjZS1tYXBzL21haW4udHMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtJQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUZELGdDQUVDO0FBRUQ7SUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxnQ0FFQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIvcHJpdmF0ZS92YXIvZm9sZGVycy9kci9keWczX3YzMTN6amZwcTgyd2RfNGIwbHIwMDAwZ24vVC8tLXRzLWplc3QtdGVtcC1lMmUtLS93aXRoLWplc3QtMjIvc291cmNlLW1hcHMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29uc29sZUxvZygpIHtcbiAgY29uc29sZS5sb2coJ1dJVEhJTiBTT1VSQ0UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcignV0lUSElOIFNPVVJDRScpO1xufVxuIl0sInZlcnNpb24iOjN9"
223+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoibWFpbi50cyIsIm1hcHBpbmdzIjoiOztBQUFBO0lBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRkQsZ0NBRUM7QUFFRDtJQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUZELGdDQUVDIiwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiPGN3ZD4vIiwic291cmNlcyI6WyJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb25zb2xlTG9nKCkge1xuICBjb25zb2xlLmxvZygnV0lUSElOIFNPVVJDRScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFcnJvcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXSVRISU4gU09VUkNFJyk7XG59XG4iXSwidmVyc2lvbiI6M30="
224224
`;
225225
226226
exports[`using template "with-jest-22" should report correct line numbers 1`] = `

e2e/__tests__/source-map.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ testCase.runWithTemplates(allPackageSets, 1, (runTest, { templateName }) => {
1616
// when there are some issues with debugging, it's usually becasue source mpas are not inlined
1717
// and the debugger cannot find the line where to go
1818
it(`should have the source mpas comment`, () => {
19-
expect(result.ioDataFor('main.ts').out).toMatchSnapshot()
19+
expect(result.ioDataFor('main.ts').outNormalized).toMatchSnapshot()
2020
})
2121
})
2222
})

package-lock.json

Lines changed: 44 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"prettier-tslint": "^0.4.0",
7676
"reflect-metadata": "^0.1.12",
7777
"semver": "^5.5.1",
78+
"source-map": "^0.7.3",
7879
"tslint": "^5.11.0",
7980
"typescript": "^3.0.1"
8081
},

scripts/clean.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
#!/usr/bin/env node
22

3-
const { removeSync } = require('fs-extra');
4-
const Paths = require('./paths');
5-
const { join } = require('path');
3+
const { removeSync } = require('fs-extra')
4+
const Paths = require('./paths')
5+
const { join } = require('path')
66

7-
removeSync(Paths.distDir);
8-
removeSync(join(Paths.testsRootDir, '*', 'coverage'));
9-
removeSync(join(Paths.testsRootDir, '*', 'debug.txt'));
10-
removeSync(join(Paths.testsRootDir, '*', 'node_modules'));
11-
removeSync(join(Paths.e2eSourceDir, '*', 'node_modules'));
12-
removeSync(join(Paths.e2eTemplatesDir, '*', 'node_modules'));
13-
removeSync(Paths.e2eWorkDir);
14-
removeSync(Paths.e2eWotkDirLink);
7+
if (process.argv.indexOf('--when-ci-commit-message') !== -1) {
8+
let msg =
9+
process.env.TRAVIS_COMMIT_MESSAGE ||
10+
process.env.APPVEYOR_REPO_COMMIT_MESSAGE
11+
if (!msg)
12+
throw new Error(`Unable to guess the commit message from CI env variables`)
13+
if (process.env.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED) {
14+
msg = `${msg}\n${process.env.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED}`
15+
}
16+
if (!/\[ci npm-clean\]/.test(msg)) return
17+
}
18+
19+
removeSync(Paths.distDir)
20+
removeSync(join(Paths.testsRootDir, '*', 'coverage'))
21+
removeSync(join(Paths.testsRootDir, '*', 'debug.txt'))
22+
removeSync(join(Paths.testsRootDir, '*', 'node_modules'))
23+
removeSync(join(Paths.e2eSourceDir, '*', 'node_modules'))
24+
removeSync(join(Paths.e2eTemplatesDir, '*', 'node_modules'))
25+
removeSync(Paths.e2eWorkDir)
26+
removeSync(Paths.e2eWotkDirLink)

src/__helpers__/path.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { resolve, relative } from 'path'
2+
3+
export const ROOT = resolve(__dirname, '..', '..')
4+
5+
export function relativeToRoot(path: string) {
6+
return relative(ROOT, path)
7+
}

src/__helpers__/source-maps.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// WARNING: this file is shared between e2e and unit tests
2+
import { RawSourceMap } from 'source-map'
3+
import bufferFrom from 'buffer-from'
4+
import { relative, isAbsolute, resolve } from 'path'
5+
import stableStringify = require('fast-json-stable-stringify')
6+
import { realpathSync } from 'fs'
7+
8+
// source-map module doesn't provide a sync method to extract the source-maps
9+
export function extractSourceMaps(source: string): RawSourceMap | undefined {
10+
const [, comment]: [any, string | undefined] =
11+
(source.match(
12+
/[\n^]\/\/#\s*sourceMappingURL=data:application\/json;(?:charset=utf-8;)?base64,(\S+)\s*$/,
13+
) as any) || []
14+
if (!comment) return
15+
16+
return base64ToSourceMaps(comment)
17+
}
18+
19+
export function base64ToSourceMaps(base64: string): RawSourceMap {
20+
return JSON.parse(bufferFrom(base64, 'base64').toString('utf8'))
21+
}
22+
23+
export function sourceMapsToBase64(sourceMaps: RawSourceMap): string {
24+
return bufferFrom(stableStringify(sourceMaps)).toString('base64')
25+
}
26+
27+
export function relativiseSourceRoot(
28+
fromPath: string,
29+
source: string,
30+
prefix: string = '',
31+
): string {
32+
const from = realpathSync(fromPath)
33+
const remap = (path: string): string =>
34+
(isAbsolute(path)
35+
? `${prefix}${relative(from, realpathSync(path))}`
36+
: path
37+
).replace(/\\/g, '/')
38+
39+
return source.replace(
40+
/([\n^]\/\/#\s*sourceMappingURL=data:application\/json;(?:charset=utf-8;)?base64,)(\S+)(\s*)$/,
41+
(_, before, base64, after) => {
42+
const map = base64ToSourceMaps(base64)
43+
if (map.sourceRoot) map.sourceRoot = remap(map.sourceRoot)
44+
if (map.sources) map.sources = map.sources.map(remap)
45+
if (map.file) map.file = remap(map.file)
46+
return `${before}${sourceMapsToBase64(map)}${after}`
47+
},
48+
)
49+
}

src/lib/compiler.spec.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { TsJestGlobalOptions } from './types'
22
import { ConfigSet } from './config-set'
33
import * as fakers from '../__helpers__/fakers'
44
import { createCompiler } from './compiler'
5-
import outdent from 'outdent'
5+
import { extractSourceMaps } from '../__helpers__/source-maps'
6+
import { relativeToRoot } from '../__helpers__/path'
67

78
// not really unit-testing here, but it's hard to mock all those values :-D
89

@@ -37,11 +38,22 @@ describe('typeCheck', () => {
3738
),
3839
).toThrowErrorMatchingInlineSnapshot(`
3940
"⨯ Unable to compile TypeScript:
40-
error TS5052: Option 'declarationDir' cannot be specified without specifying option 'declaration'.
41-
error TS5053: Option 'declarationDir' cannot be specified with option 'outFile'.
42-
error TS6082: Only 'amd' and 'system' modules are supported alongside --outFile.
4341
[eval].ts(2,7): error TS2322: Type 'number' is not assignable to type 'string'.
4442
"
4543
`)
4644
})
4745
})
46+
47+
describe('source-maps', () => {
48+
const compiler = makeCompiler()
49+
it('should report diagnostics related to typings', () => {
50+
const source = 'const f = (v: number) => v\nconst t: number = f(5)'
51+
const compiled = compiler.compile(source, __filename)
52+
const expectedFileName = relativeToRoot(__filename)
53+
expect(extractSourceMaps(compiled)).toMatchObject({
54+
file: expectedFileName,
55+
sources: [expectedFileName],
56+
sourcesContent: [source],
57+
})
58+
})
59+
})

0 commit comments

Comments
 (0)