npm's personal messenger

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

    Install

    npm i fastify-dynareg

    DownloadsWeekly Downloads

    0

    Version

    1.1.0

    License

    MIT

    Unpacked Size

    6.88 kB

    Total Files

    5

    Last publish

    Collaborators

    • greguz