@skimia/modules

1.0.0-alpha.22 • Public • Published

GraphQL Modules with hooks !

Use this lib in same way using @graphql-modules/core (name is required !)

Hooks

const { GraphQLModule, hookWeight, HookProviderID } = require('@skimia/modules')
module.exports = new GraphQLModule({
  name: 'MyModule',
  hooks: {
    http: [
      // default no weight
      (ctx, next) => {
        ctx.injector.get('TOKEN')
        // do anything
      },
      // weight 1000
      hookWeight((ctx, next) => {
        ctx.injector.get(HookProviderID) // get hook provider
        // do anything
      }, 1000),
    ],
  },
})

You can define infinite hook keys, http is used to configure an middleware based http app (koa, express,...), in same key hooks a sorted with ther weight ( without, assume 0 weight), Higher weight First

when using this lib on our module

  • it add an import that handles the HookProvider (in order to be accessible from our module)
  • add a provider to init HookProvider with module hooks

Config

  • async(originalConf) => ({}) special config key async , function called during init of module in order to resolve asynchronously configurations (for module user)

    it enable for module user lazy config loading

  • preConfigHandler(originalConf + async) => ({}) special module option preConfigHandler (on Module) do the same on module side (for module developer)

    can be used for injecting default values

  • (originalConf + async + configHandler) => bool special module option configValidator returns true => ok, any other value => invalid config

    if no configRequired = true && no config passed => no validation!!

  • postConfigHandler(originalConf + async) => ({}) same as preConfigHandler but after validation

    can be used for doing treatment on config after validated

Utilities

  • DI
    • injectable(options, class) : @Injectable decorator functional equivalent
    • inject(serviceID, class) : @Inject decorator functional equivalent
    • injectConfig(moduleName, class) : @Inject decorator with ModuleConfig functional equivalent
    • moduleConfig(moduleName) : ModuleConfig config equivalent (module config injection token)
  • Hooks
    • hookWeight(fn, weight) : set the weight of hook
    • hookFirst(fn) : set the weight of hook => Number.POSITIVE_INFINITY
    • hookLast(fn) : set the weight of hook => Number.NEGATIVE_INFINITY

Readme

Keywords

none

Package Sidebar

Install

npm i @skimia/modules

Weekly Downloads

1

Version

1.0.0-alpha.22

License

MIT

Unpacked Size

12.9 kB

Total Files

10

Last publish

Collaborators

  • kesslerdev