• Class decorator that adds companion model capabilities to a KOS model.

    Supports two patterns:

    1. Decorator Pattern (default): Transparently proxies all parent properties, making the companion a drop-in replacement for the parent
    2. Composition Pattern: Only provides getCompanionParent() method, keeping parent encapsulated

    Important: Use TypeScript interface merging to get proper type information:

    // Decorator pattern - full transparency
    interface BrandCompanionModelImpl extends KosCompanionAware<AvailabilityModel> {}

    @kosModel("brand-companion")
    @kosCompanion() // defaults to decorator mode
    class BrandCompanionModelImpl implements IKosDataModel {
    // All parent properties are available
    get brandSpecificProperty() {
    return this.name; // 'name' from parent AvailabilityModel
    }
    }

    // Composition pattern - encapsulated parent
    interface ServiceCompanionModelImpl extends KosCompanionAware<ServiceModel> {}

    @kosModel("service-companion")
    @kosCompanion({ mode: 'composition' })
    class ServiceCompanionModelImpl implements IKosDataModel {
    // Parent is only accessible via getCompanionParent()
    get serviceInfo() {
    const parent = this.getCompanionParent();
    return `Service: ${parent.serviceName}`;
    }
    }

    Parameters

    • Optional options: KosCompanionOptions

      Configuration options for the companion decorator

    Returns ClassDecorator

    A class decorator

    Example

    // Decorator mode - all parent properties proxied
    @kosCompanion()
    class MyCompanion { }

    // Composition mode - only getCompanionParent() available
    @kosCompanion({ mode: 'composition' })
    class MyCompanion { }

    // Decorator mode with exclusions
    @kosCompanion({ mode: 'decorator', excludeProperties: ['internalState'] })
    class MyCompanion { }

    // Lifecycle-deferred companion creation
    @kosCompanion({ lifecycle: DependencyLifecycle.LOAD })
    class DataDrivenCompanion { }

    Since

    2.1.0