Skip to content

greguz/fastify-dynareg

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

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()

About

Dynamic plugin register for Fastify

Resources

License

Stars

Watchers

Forks

Packages

No packages published