Skip to content

Commit 96b1e97

Browse files
authored
Support .mjs (#701)
* Remove unnecessary parentheses * Support .mjs
1 parent a8c25ef commit 96b1e97

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

index_mjs.mjs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// For development/testing purposes
2+
export const handler = (event, context, callback) => {
3+
console.log('Running index.handler (mjs)')
4+
console.log('==================================')
5+
console.log('event', event)
6+
console.log('==================================')
7+
console.log('Stopping index.handler (mjs)')
8+
callback(null)
9+
}

lib/main.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,18 @@ event_sources.json and ${program.eventFile} files as needed.`)
5959

6060
this._createSampleFile(program.eventFile, 'event.json')
6161
const splitHandler = program.handler.split('.')
62-
const filename = splitHandler[0] + '.js'
62+
const filename = (() => {
63+
for (const extension of ['.js', '.mjs']) {
64+
if (fs.existsSync(splitHandler[0] + extension)) {
65+
return splitHandler[0] + extension
66+
}
67+
}
68+
})()
69+
if (filename == null) {
70+
console.error('Handler file not found.')
71+
process.exitCode = 255
72+
return
73+
}
6374
const handlername = splitHandler[1]
6475

6576
// Set custom environment variables if program.configFile is defined

test/node-lambda.js

+51-3
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ describe('bin/node-lambda', () => {
189189
})
190190
})
191191

192-
describe('node-lambda run (Multiple events))', () => {
192+
describe('node-lambda run (Multiple events)', () => {
193193
const eventObj = [{
194194
asyncTest: false,
195195
callbackWaitsForEmptyEventLoop: true,
@@ -217,7 +217,7 @@ describe('bin/node-lambda', () => {
217217
})
218218
})
219219

220-
describe('node-lambda run (disable Multiple events))', () => {
220+
describe('node-lambda run (disable Multiple events)', () => {
221221
const eventObj = [{
222222
asyncTest: false,
223223
callbackWaitsForEmptyEventLoop: true,
@@ -264,7 +264,7 @@ describe('bin/node-lambda', () => {
264264
})
265265
})
266266

267-
describe('node-lambda run (API Gateway events))', () => {
267+
describe('node-lambda run (API Gateway events)', () => {
268268
const eventObj = {
269269
asyncTest: false,
270270
callbackWaitsForEmptyEventLoop: true,
@@ -295,6 +295,54 @@ describe('bin/node-lambda', () => {
295295
})
296296
})
297297
})
298+
299+
describe('node-lambda run (by *.mjs)', () => {
300+
it('`node-lambda run` by index.mjs', function (done) {
301+
const run = spawn('node', [
302+
nodeLambdaPath, 'run',
303+
'--handler', 'index_mjs.handler'
304+
])
305+
let stdoutString = ''
306+
run.stdout.on('data', (data) => {
307+
stdoutString += data.toString().replace(/\r|\n|\s/g, '')
308+
})
309+
310+
run.on('exit', (code) => {
311+
const expected = 'Runningindex.handler(mjs)' +
312+
'==================================' +
313+
'event{asyncTest:false,callbackWaitsForEmptyEventLoop:true,callbackCode:\'callback(null);\'}' +
314+
'==================================' +
315+
'Stoppingindex.handler(mjs)Success:'
316+
assert.equal(stdoutString, expected)
317+
assert.equal(code, 0)
318+
done()
319+
})
320+
})
321+
})
322+
323+
describe('node-lambda run (handler file not found)', () => {
324+
it('`node-lambda run` Invalid handler specification.', function (done) {
325+
const run = spawn('node', [
326+
nodeLambdaPath, 'run',
327+
'--handler', 'not_found.handler'
328+
])
329+
let stdoutString = ''
330+
run.stdout.on('data', (data) => {
331+
stdoutString += data.toString().replace(/\r|\n|\s/g, '')
332+
})
333+
let stderrString = ''
334+
run.stderr.on('data', (data) => {
335+
stderrString += data.toString()
336+
})
337+
338+
run.on('exit', (code) => {
339+
assert.equal(stdoutString, '')
340+
assert.match(stderrString, /Handler file not found\./)
341+
assert.equal(code, 255)
342+
done()
343+
})
344+
})
345+
})
298346
})
299347

300348
describe('node-lambda duplicate check of short option', () => {

0 commit comments

Comments
 (0)