From 80b2929992f8d871e817240f896df01583d12ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Tue, 6 Aug 2019 02:46:35 -0700 Subject: [PATCH] babel pipeline Summary: adding babel transpile pipeline for TypeScript files Reviewed By: jknoxville Differential Revision: D16651124 fbshipit-source-id: e9215ba2da467f58005271916b65d6da4f6e36b7 --- static/package.json | 1 + static/transforms/index.js | 42 ++++++++++++++++++++++++-------------- static/yarn.lock | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/static/package.json b/static/package.json index 24ce6d08e..4724e92c4 100644 --- a/static/package.json +++ b/static/package.json @@ -12,6 +12,7 @@ "@babel/plugin-proposal-optional-chaining": "^7.2.0", "@babel/plugin-transform-flow-strip-types": "^7.4.0", "@babel/plugin-transform-modules-commonjs": "^7.4.0", + "@babel/plugin-transform-typescript": "^7.5.5", "@babel/preset-react": "^7.0.0", "expand-tilde": "^2.0.2", "fix-path": "^2.1.0", diff --git a/static/transforms/index.js b/static/transforms/index.js index 5b46fec8d..247e20b8c 100644 --- a/static/transforms/index.js +++ b/static/transforms/index.js @@ -15,28 +15,40 @@ function transform({filename, options, src}) { const presets = [require('../node_modules/@babel/preset-react')]; const isPlugin = options.projectRoot && !__dirname.startsWith(options.projectRoot); + const isTypeScript = filename.endsWith('.tsx'); let ast = babylon.parse(src, { filename, - plugins: [ - 'jsx', - ['flow', {all: true}], - 'classProperties', - 'objectRestSpread', - 'optionalChaining', - ], + plugins: isTypeScript + ? ['jsx', 'typescript', 'classProperties'] + : [ + 'jsx', + ['flow', {all: true}], + 'classProperties', + 'objectRestSpread', + 'optionalChaining', + ], sourceType: 'module', }); // run babel - const plugins = [ - require('../node_modules/@babel/plugin-transform-modules-commonjs'), - require('../node_modules/@babel/plugin-proposal-object-rest-spread'), - require('../node_modules/@babel/plugin-proposal-class-properties'), - require('../node_modules/@babel/plugin-transform-flow-strip-types'), - require('../node_modules/@babel/plugin-proposal-optional-chaining'), - require('./dynamic-requires.js'), - ]; + const plugins = []; + + if (!isTypeScript) { + plugins.push( + require('../node_modules/@babel/plugin-transform-modules-commonjs'), + require('../node_modules/@babel/plugin-proposal-object-rest-spread'), + require('../node_modules/@babel/plugin-proposal-class-properties'), + require('../node_modules/@babel/plugin-transform-flow-strip-types'), + require('../node_modules/@babel/plugin-proposal-optional-chaining'), + require('./dynamic-requires.js'), + ); + } else { + plugins.push( + require('../node_modules/@babel/plugin-transform-typescript'), + require('../node_modules/@babel/plugin-transform-modules-commonjs'), + ); + } if ( fs.existsSync( diff --git a/static/yarn.lock b/static/yarn.lock index 3a2cc60c8..22353ad20 100644 --- a/static/yarn.lock +++ b/static/yarn.lock @@ -587,7 +587,7 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.0.0": +"@babel/plugin-transform-typescript@^7.0.0", "@babel/plugin-transform-typescript@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8" integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==