parcel-bundler
Version:
<p align="center"> <a href="https://parceljs.org/" target="_blank"> <img alt="Parcel" src="https://user-images.githubusercontent.com/19409/31321658-f6aed0f2-ac3d-11e7-8100-1587e676e0ec.png" width="749"> </a> </p>
38 lines (32 loc) • 1.12 kB
JavaScript
const JSAsset = require('./JSAsset');
const config = require('../utils/config');
const localRequire = require('../utils/localRequire');
class TypeScriptAsset extends JSAsset {
async parse(code) {
// require typescript, installed locally in the app
let typescript = await localRequire('typescript', this.name);
let transpilerOptions = {
compilerOptions: {
module: typescript.ModuleKind.CommonJS,
jsx: typescript.JsxEmit.Preserve
},
fileName: this.basename
};
let tsconfig = await config.load(this.name, ['tsconfig.json']);
// Overwrite default if config is found
if (tsconfig) {
transpilerOptions.compilerOptions = Object.assign(
transpilerOptions.compilerOptions,
tsconfig.compilerOptions
);
}
transpilerOptions.compilerOptions.noEmit = false;
// Transpile Module using TypeScript and parse result as ast format through babylon
this.contents = typescript.transpileModule(
code,
transpilerOptions
).outputText;
return await super.parse(this.contents);
}
}
module.exports = TypeScriptAsset;