fastify-dynareg
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

fastify-dynareg

npm version JavaScript Style Guide Build Status Coverage Status

This package is technically a plugin builder for Fastify. It exports a single function that accepts two arguments, a package name and a boolean indicating if that package is required, and returns a valid Fastify plugin. This library can be used to define both optional or parametric plugins.

dynareg(packageName[, isRequired])

  • packageName <String> The plugin's package name to require().
  • isRequired <Boolean> Defaults to false.
  • Returns: <FastifyPlugin>

Optional plugin presence

In the next example, this library is used to make a plugin (fastify-blipp) optional. This behavior can be helpful for packages only used during development. If the plugin is not present, a nice debug log is written, and no errors are thrown.

const fastify = require('fastify')
const dynareg = require('fastify-dynareg')
 
const app = fastify()
 
// This plugin will try to register fastify-blipp if It's installed
const optionalBlipp = dynareg('fastify-blipp')
 
// You can still pass plugin options as usual
app.register(optionalBlipp, {
  my: 'options'
})
 
app.addHook('onReady', async () => {
  // Because fastify-blipp is now optional
  if (app.blipp) {
    app.blipp()
  }
})
 
// TODO: Setup and start you application...

Parametric plugin presence

The plugin presence can also be parametric. Passing true as second argument will require the plugin presence.

const fastify = require('fastify')
const dynareg = require('fastify-dynareg')
 
const app = fastify()
 
// Force fastify-blipp presence during development
const developmentBlipp = dynareg(
  'fastify-blipp',
  process.env.NODE_ENV !== 'production'
)
 
app.register(developmentBlipp)
 
app.addHook('onReady', async () => {
  // Because fastify-blipp is now optional
  if (app.blipp) {
    app.blipp()
  }
})
 
// TODO: Setup and start you application...

Fully parametric plugin

In the last example, both plugin's name and presence are parametric.

const fastify = require('fastify')
const dynareg = require('fastify-dynareg')
 
const app = fastify()
 
// Declare a dynamic production plugin
const myDynamicPlugin = dynareg(
  process.env.FASTIFY_PLUGIN,
  process.env.NODE_ENV === 'production'
)
 
app.register(myDynamicPlugin, {
  my: 'options'
})
 
// TODO: Setup and start you application...

Example

const fastify = require('fastify')
const dynareg = require('fastify-dynareg')
 
const app = fastify({
  logger: true
})
 
// Force fastify-blipp to be registered when env is not production
app.register(
  dynareg(
    'fastify-blipp',
    process.env.NODE_ENV !== 'production'
  )
)
 
app.get('/', async (request, reply) => {
  return { hello: 'world' }
})
 
const start = async () => {
  try {
    await app.listen(3000)
    // Use conditional blipp
    if (app.blipp) {
      app.blipp()
    }
    app.log.info(`server listening on ${app.server.address().port}`)
  } catch (err) {
    app.log.error(err)
    process.exit(1)
  }
}
 
start()

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.1.0
    1
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 1.1.0
    1
  • 1.0.0
    1
  • 0.1.0
    1

Package Sidebar

Install

npm i fastify-dynareg

Weekly Downloads

3

Version

1.1.0

License

MIT

Unpacked Size

6.88 kB

Total Files

5

Last publish

Collaborators

  • greguz