diff --git a/index_mjs.mjs b/index_mjs.mjs new file mode 100644 index 0000000..529deb2 --- /dev/null +++ b/index_mjs.mjs @@ -0,0 +1,9 @@ +// For development/testing purposes +export const handler = (event, context, callback) => { + console.log('Running index.handler (mjs)') + console.log('==================================') + console.log('event', event) + console.log('==================================') + console.log('Stopping index.handler (mjs)') + callback(null) +} diff --git a/lib/main.js b/lib/main.js index b9e5108..d23baea 100644 --- a/lib/main.js +++ b/lib/main.js @@ -59,7 +59,18 @@ event_sources.json and ${program.eventFile} files as needed.`) this._createSampleFile(program.eventFile, 'event.json') const splitHandler = program.handler.split('.') - const filename = splitHandler[0] + '.js' + const filename = (() => { + for (const extension of ['.js', '.mjs']) { + if (fs.existsSync(splitHandler[0] + extension)) { + return splitHandler[0] + extension + } + } + })() + if (filename == null) { + console.error('Handler file not found.') + process.exitCode = 255 + return + } const handlername = splitHandler[1] // Set custom environment variables if program.configFile is defined diff --git a/test/node-lambda.js b/test/node-lambda.js index d4d5481..33c216d 100644 --- a/test/node-lambda.js +++ b/test/node-lambda.js @@ -295,6 +295,54 @@ describe('bin/node-lambda', () => { }) }) }) + + describe('node-lambda run (by *.mjs)', () => { + it('`node-lambda run` by index.mjs', function (done) { + const run = spawn('node', [ + nodeLambdaPath, 'run', + '--handler', 'index_mjs.handler' + ]) + let stdoutString = '' + run.stdout.on('data', (data) => { + stdoutString += data.toString().replace(/\r|\n|\s/g, '') + }) + + run.on('exit', (code) => { + const expected = 'Runningindex.handler(mjs)' + + '==================================' + + 'event{asyncTest:false,callbackWaitsForEmptyEventLoop:true,callbackCode:\'callback(null);\'}' + + '==================================' + + 'Stoppingindex.handler(mjs)Success:' + assert.equal(stdoutString, expected) + assert.equal(code, 0) + done() + }) + }) + }) + + describe('node-lambda run (handler file not found)', () => { + it('`node-lambda run` Invalid handler specification.', function (done) { + const run = spawn('node', [ + nodeLambdaPath, 'run', + '--handler', 'not_found.handler' + ]) + let stdoutString = '' + run.stdout.on('data', (data) => { + stdoutString += data.toString().replace(/\r|\n|\s/g, '') + }) + let stderrString = '' + run.stderr.on('data', (data) => { + stderrString += data.toString() + }) + + run.on('exit', (code) => { + assert.equal(stdoutString, '') + assert.match(stderrString, /Handler file not found\./) + assert.equal(code, 255) + done() + }) + }) + }) }) describe('node-lambda duplicate check of short option', () => {