Interface IResourceDefinition<TConfig, TValue, TDependencies, TContext, THooks, TRegisterableItems, TMeta, TTags, TMiddleware>

interface IResourceDefinition<TConfig, TValue, TDependencies, TContext, THooks, TRegisterableItems, TMeta, TTags, TMiddleware> {
    [symbolFilePath]?: string;
    [symbolIndexResource]?: boolean;
    configSchema?: IValidationSchema<TConfig>;
    context?: (() => TContext);
    dependencies?: TDependencies | ((config: TConfig) => TDependencies);
    dispose?: ((this: any, value: TValue extends Promise<U>
        ? U
        : TValue, config: TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => Promise<void>);
    id: string;
    init?: ((config: HasInputContracts<[...TTags[], ...TMiddleware[]]> extends true
        ? IsUnspecified<TConfig> extends true
            ? InferInputOrViolationFromContracts<[...TTags[], ...TMiddleware[]]>
            : EnsureInputSatisfiesContracts<[...TTags[], ...TMiddleware[]], TConfig>
        : TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => HasOutputContracts<[...TTags[], ...TMiddleware[]]> extends true
        ? EnsureOutputSatisfiesContracts<[...TTags[], ...TMiddleware[]], TValue>
        : TValue);
    meta?: TMeta;
    middleware?: TMiddleware;
    overrides?: OverridableElements[];
    register?: RegisterableItems<T>[] | ((config: TConfig) => RegisterableItems<T>[]);
    resultSchema?: IValidationSchema<TValue extends Promise<U>
        ? U
        : TValue>;
    tags?: TTags;
}

Type Parameters

Hierarchy (view full)

Properties

[symbolFilePath]?: string

This is optional and used from an index resource to get the correct caller. This is the reason we allow it here as well.

[symbolIndexResource]?: boolean

This is used internally when creating index resources.

configSchema?: IValidationSchema<TConfig>

Optional validation schema for runtime config validation. When provided, resource config will be validated when .with() is called.

context?: (() => TContext)

Create a private, mutable context shared between init and dispose.

dependencies?: TDependencies | ((config: TConfig) => TDependencies)

Static or lazy dependency map. Receives config when provided.

dispose?: ((this: any, value: TValue extends Promise<U>
    ? U
    : TValue, config: TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => Promise<void>)

Clean-up function for the resource. This is called when the resource is no longer needed.

Type declaration

    • (this, value, config, dependencies, context): Promise<void>
    • Parameters

      Returns Promise<void>

      Promise

id: string

Stable identifier.

init?: ((config: HasInputContracts<[...TTags[], ...TMiddleware[]]> extends true
    ? IsUnspecified<TConfig> extends true
        ? InferInputOrViolationFromContracts<[...TTags[], ...TMiddleware[]]>
        : EnsureInputSatisfiesContracts<[...TTags[], ...TMiddleware[]], TConfig>
    : TConfig, dependencies: ResourceDependencyValuesType<TDependencies>, context: TContext) => HasOutputContracts<[...TTags[], ...TMiddleware[]]> extends true
    ? EnsureOutputSatisfiesContracts<[...TTags[], ...TMiddleware[]], TValue>
    : TValue)

Initialize and return the resource value. Called once during boot.

meta?: TMeta
middleware?: TMiddleware

Middleware applied around init/dispose.

overrides?: OverridableElements[]

Safe overrides to swap behavior while preserving identities. See README: Overrides.

register?: RegisterableItems<T>[] | ((config: TConfig) => RegisterableItems<T>[])

Register other registerables (resources/tasks/middleware/events). Accepts a static array or a function of config to support dynamic wiring.

resultSchema?: IValidationSchema<TValue extends Promise<U>
    ? U
    : TValue>

Optional validation schema for the resource's resolved value. When provided, the value will be validated immediately after init resolves, without considering middleware.

tags?: TTags