Skip to content

Plugin Development Guide

Advanced guide for creating Nevr plugins.

Plugin Architecture

Plugins extend Nevr with:

  • Schema: Entities and fields
  • Routes: Custom API endpoints
  • Middleware: Request processing
  • Hooks: Lifecycle events
  • Services: Dependency injection

Creating a Plugin

Using definePlugin()

typescript
import { createPlugin } from "nevr"

export const myPlugin = createPlugin({
  id: "my-plugin",
  name: "My Plugin",
  version: "1.0.0"

  factory: (options) => ({
    schema: {
      entities: {
        myEntity: {
          fields: {
            name: { type: "string", required: true }
          }
        }
      }
    },
    endpoints: {
      ping: endpoint("/ping", {
      method: "GET",
      handler: async () => ({ message: "pong" }),
    }),
    },
  })
})

Plugin Resolution Functions

resolveAllPlugins()

Resolve all registered plugins:

typescript
import { resolveAllPlugins } from "nevr"

const resolved = resolveAllPlugins()
// Returns: ResolvedPlugin[]

initializeAllPlugins()

Initialize all plugins (call init hooks):

typescript
import { initializeAllPlugins } from "nevr"

await initializeAllPlugins(nevrInstance)

mergeResolvedPlugins()

Merge multiple resolved plugins:

typescript
import { mergeResolvedPlugins } from "nevr"

const merged = mergeResolvedPlugins(resolvedPlugins)
// { entities, entityMeta, routes, middleware }

Entity References

plugin()

Reference plugin entities:

typescript
import { plugin } from "nevr"

const user = entity("post", {
  author: belongsTo(plugin("auth").user)
})

parseEntityRef() / resolveEntityRef()

Parse and resolve entity references:

typescript
import { parseEntityRef, resolveEntityRef } from "nevr"

const ref = parseEntityRef("auth.user")
// { pluginId: "auth", entityName: "user" }

const entity = resolveEntityRef("auth.user", localEntitiesMap)

Plugin Registry

FunctionDescription
registerPluginFactory(id, factory)Register factory
getPluginFactory(id)Get factory by ID
createFromFactory(id, options)Create instance
registerPluginInstance(id, plugin)Register instance
getPluginInstance(id)Get instance
validatePlugin(plugin)Validate structure
getAllPlugins()Get all instances
clearPluginRegistry()Clear registry

See Also

Released under the MIT License.