UNPKG

2.43 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
7const Asset = require('../Asset');
8
9const localRequire = require('../utils/localRequire');
10
11const isAccessedVarChanged = require('../utils/isAccessedVarChanged');
12
13class TypeScriptAsset extends Asset {
14 constructor(name, options) {
15 super(name, options);
16 this.type = 'js';
17 this.cacheData.env = {};
18 }
19
20 shouldInvalidate(cacheData) {
21 return isAccessedVarChanged(cacheData);
22 }
23
24 generate() {
25 var _this = this;
26
27 return (0, _asyncToGenerator2.default)(function* () {
28 // require typescript, installed locally in the app
29 let typescript = yield localRequire('typescript', _this.name);
30 let transpilerOptions = {
31 compilerOptions: {
32 module: _this.options.scopeHoist ? typescript.ModuleKind.ESNext : typescript.ModuleKind.CommonJS,
33 jsx: typescript.JsxEmit.Preserve,
34 // it brings the generated output from TypeScript closer to that generated by Babel
35 // see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html
36 esModuleInterop: true
37 },
38 fileName: _this.relativeName
39 };
40 let tsconfig = yield _this.getConfig(['tsconfig.json']); // Overwrite default if config is found
41
42 if (tsconfig) {
43 transpilerOptions.compilerOptions = Object.assign(transpilerOptions.compilerOptions, tsconfig.compilerOptions);
44 }
45
46 transpilerOptions.compilerOptions.noEmit = false;
47 transpilerOptions.compilerOptions.sourceMap = _this.options.sourceMaps; // Transpile Module using TypeScript and parse result as ast format through babylon
48
49 let transpiled = typescript.transpileModule(_this.contents, transpilerOptions);
50 let sourceMap = transpiled.sourceMapText;
51
52 if (sourceMap) {
53 sourceMap = JSON.parse(sourceMap);
54 sourceMap.sources = [_this.relativeName];
55 sourceMap.sourcesContent = [_this.contents]; // Remove the source map URL
56
57 let content = transpiled.outputText;
58 transpiled.outputText = content.substring(0, content.lastIndexOf('//# sourceMappingURL'));
59 }
60
61 return [{
62 type: 'js',
63 value: transpiled.outputText,
64 map: sourceMap
65 }];
66 })();
67 }
68
69}
70
71module.exports = TypeScriptAsset;
\No newline at end of file