diff --git a/lib/main.js b/lib/main.js index 81546f5d..76fdfc03 100644 --- a/lib/main.js +++ b/lib/main.js @@ -269,6 +269,7 @@ Lambda.prototype._setEnvironmentVars = function (program, codeDirectory) { var configValues = fs.readFileSync(program.configFile); var prefix = '////////////////////////////////////\n// "Environment Variables"\n'; var config = dotenv.parse(configValues); + var contentStr = contents.toString(); for (var k in config) { if (!config.hasOwnProperty(k)) { @@ -280,7 +281,14 @@ Lambda.prototype._setEnvironmentVars = function (program, codeDirectory) { } prefix += '////////////////////////////////////\n\n'; - fs.writeFileSync(handlerFileName, prefix + contents.toString()); + // If the first line of the file is 'use strict', append after + if (contentStr.trim().indexOf('use strict') === 1) { + contentStr = contentStr.replace(/([`'"]use strict[`'"][;]?)/, '$1\n' + prefix); + } else { + contentStr = prefix + contentStr; + } + + fs.writeFileSync(handlerFileName, contentStr); }; Lambda.prototype._uploadExisting = function(lambda, params, cb) { diff --git a/test/main.js b/test/main.js index 7d779783..ab81152f 100644 --- a/test/main.js +++ b/test/main.js @@ -240,4 +240,31 @@ describe('node-lambda', function () { }); }); + + describe('environment variable injection - "use strict" allowance', function () { + beforeEach(function () { + // Prep... + fs.writeFileSync('tmp.env', 'FOO=bar\nBAZ=bing\n'); + fs.writeFileSync('test.js', '\'use strict\';'); + }); + + afterEach(function () { + fs.unlinkSync('tmp.env'); + fs.unlinkSync('test.js'); + }); + + it('should inject environment variables at the top of the entry point file', function () { + + // Run it... + lambda._setEnvironmentVars({ + configFile: 'tmp.env', + handler: 'test.handler', + }, process.cwd()); + + assert.equal(fs.readFileSync('test.js').toString(), '\'use strict\';\n////////////////////////////////////\n' + + '// "Environment Variables"\nprocess.env["FOO"]="bar";\n' + + 'process.env["BAZ"]="bing";\n////////////////////////////////////\n\n'); + }); + + }); });