Skip to content

class metadata

awekrx edited this page May 29, 2026 · 1 revision

class-metadata

Import

import { classMetadata } from '@dev-suite/decorators/class-metadata'

Category

  • class

Use Case

Attach static metadata to classes for discovery, routing, or registration.

Replaces

  • Manual static metadata fields spread across classes
  • Separate registries that duplicate class-to-metadata mapping

Example 1

Without decorator

class InvoiceJob {
  static metadata = {
    queue: 'billing',
    retryPolicy: 'exponential',
    priority: 'high',
  };
}

class ReceiptJob {
  static metadata = {
    queue: 'billing',
    retryPolicy: 'linear',
    priority: 'normal',
  };
}

With decorator

import { classMetadata } from '@dev-suite/decorators/class-metadata';

@classMetadata({
  metadata: {
    queue: 'billing',
    retryPolicy: 'exponential',
    priority: 'high',
  },
})
class InvoiceJob {}

@classMetadata({
  metadata: {
    queue: 'billing',
    retryPolicy: 'linear',
    priority: 'normal',
  },
})
class ReceiptJob {}

Why better

  • Metadata is declared consistently at class boundary
  • Easier to scan and auto-discover by reflection tooling

Example 2

Without decorator

const handlers: Array<{ type: string; ctor: new () => unknown }> = [];

class UserCreatedHandler {}
handlers.push({ type: 'user.created', ctor: UserCreatedHandler });

class PaymentFailedHandler {}
handlers.push({ type: 'payment.failed', ctor: PaymentFailedHandler });

With decorator

import { classMetadata } from '@dev-suite/decorators/class-metadata';

@classMetadata({ metadata: { eventType: 'user.created' } })
class UserCreatedHandler {}

@classMetadata({ metadata: { eventType: 'payment.failed' } })
class PaymentFailedHandler {}

Why better

  • Removes out-of-band registration duplication
  • Keeps event metadata colocated with handler implementation

Clone this wiki locally