diff --git a/README.md b/README.md index 73fa3b6..fc65c90 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ By default the plugin will look for a `webpack.config.js` in the service root. Y custom: webpack: config: ./path/to/config/file.js + typescript: true # set to true if your project uses TypeScript and have configured the appropriate Webpack loader, defaults to false ``` The `entry` and `output` objects are set by the plugin. diff --git a/src/index.js b/src/index.js index 01c51fe..255861d 100644 --- a/src/index.js +++ b/src/index.js @@ -61,7 +61,8 @@ class ServerlessPluginWebpack { webpackConfig, this.originalServicePath, webpackDefaultOutput, - webpackFolder + webpackFolder, + this.custom.typescript, )); } diff --git a/src/lib/service.js b/src/lib/service.js index 90992d7..eafbe8c 100644 --- a/src/lib/service.js +++ b/src/lib/service.js @@ -12,13 +12,13 @@ const setPackage = R.pipe( R.assoc('individually', true) ); -const fnPath = R.compose(R.replace(/\.[^.]+$/, '.js'), R.prop('handler')); +const fnPath = extension => R.compose(R.replace(/\.[^.]+$/, extension), R.prop('handler')); const setFnsPackage = R.map(R.pipe( R.when(R.prop('package'), R.over(R.lensProp('package'), makePackageRelative)), R.converge( R.over(R.lensPath(['package', 'include'])), - [R.compose(R.append, fnPath), R.identity] + [R.compose(R.append, fnPath('.js')), R.identity] ) )); diff --git a/src/lib/wpack.js b/src/lib/wpack.js index 6310cfc..8f6f88a 100644 --- a/src/lib/wpack.js +++ b/src/lib/wpack.js @@ -7,14 +7,15 @@ const service = require('./service'); * Sets webpack entry * @param {object} fn Serverless function object * @param {string} servicePath Serverless service path + * @param {boolean} useTypeScript Use .ts extension * @returns {object} Webpack configuration */ -const setEntry = (fn, servicePath) => +const setEntry = (fn, servicePath, useTypeScript) => R.assoc( 'entry', R.objOf( - service.fnPath(fn), - path.join(servicePath, service.fnPath(fn)) + service.fnPath('.js')(fn), + path.join(servicePath, service.fnPath(useTypeScript ? '.ts' : '.js')(fn)) ) ); @@ -40,13 +41,14 @@ const setOutput = (defaultOutput, outputPath) => * @param {string} servicePath Serverless service path * @param {object} defaultOutput Webpack default output object * @param {string} folder Webpack output folder + * @param {boolean} useTypeScript Use .ts extension * @returns {array} Array of webpack configurations */ -const createConfigs = (fns, config, servicePath, defaultOutput, folder) => +const createConfigs = (fns, config, servicePath, defaultOutput, folder, useTypeScript) => R.map( fn => R.pipe( - setEntry(fn, servicePath), + setEntry(fn, servicePath, useTypeScript), setOutput(defaultOutput, path.join(servicePath, folder)) )(config), R.values(fns)