Skip to content

Commit d54169f

Browse files
authored
feat: Support ESM logging module (#775)
* feat: Support ESM logging module * Reformat * Fix index.test-d.ts
1 parent e49f275 commit d54169f

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

start.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const {
1616
exit,
1717
requireModule,
1818
requireESModule,
19+
requireModuleDefaultExport,
1920
requireFastifyForModule,
2021
requireServerPluginFromPath,
2122
showHelpForCommand,
@@ -120,7 +121,7 @@ async function runFastify (args, additionalOptions, serverOptions) {
120121
let logger
121122
if (opts.loggingModule) {
122123
try {
123-
logger = requireModule(opts.loggingModule)
124+
logger = await requireModuleDefaultExport(opts.loggingModule)
124125
} catch (e) {
125126
module.exports.stop(e)
126127
}

templates/plugin/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare module 'fastify' {
77
}
88
}
99

10-
declare const example: FastifyPluginCallback<() => string>
10+
declare const example: FastifyPluginCallback<{}>
1111

1212
export { example }
1313
export default example

test/data/custom-logger.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export default {
2+
name: 'Custom Logger',
3+
customLevels: {
4+
test: 99
5+
}
6+
}

test/start.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,17 @@ test('should support custom logger configuration', async t => {
947947
t.pass('server closed')
948948
})
949949

950+
test('should support custom logger configuration in ESM', async t => {
951+
t.plan(2)
952+
953+
const argv = ['-L', './test/data/custom-logger.mjs', './examples/plugin.js']
954+
const fastify = await start.start(argv)
955+
t.ok(fastify.log.test)
956+
957+
await fastify.close()
958+
t.pass('server closed')
959+
})
960+
950961
test('preloading a built-in module works', async t => {
951962
t.plan(1)
952963

util.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,22 @@ async function requireESModule (moduleName) {
3939
}
4040
}
4141

42+
async function requireModuleDefaultExport (moduleName) {
43+
if (fs.existsSync(moduleName)) {
44+
const packageType = await getPackageType(path.dirname(moduleName))
45+
const type = getScriptType(moduleName, packageType)
46+
47+
const moduleFilePath = path.resolve(moduleName)
48+
if (type === 'module') {
49+
return (await import(url.pathToFileURL(moduleFilePath))).default
50+
} else {
51+
return require(moduleFilePath)
52+
}
53+
} else {
54+
return (await import(moduleName)).default
55+
}
56+
}
57+
4258
function requireFastifyForModule (modulePath) {
4359
try {
4460
const basedir = path.resolve(process.cwd(), modulePath)
@@ -118,6 +134,7 @@ module.exports = {
118134
exit,
119135
requireModule,
120136
requireESModule,
137+
requireModuleDefaultExport,
121138
requireFastifyForModule,
122139
showHelpForCommand,
123140
requireServerPluginFromPath

0 commit comments

Comments
 (0)