Skip to content

Plugin Dependencies

Return an existing plugin instance by class, or create and register one.

Use this for auto-installed plugin dependencies so host-provided plugin instances are reused and duplicate runtime plugins are not added. On Core runtimes, dependencies declared through pluginDependencies are retained while any configured owner needs them and removed after their final owner. The owning plugin must declare the same class as an auto-installed target so runtime grid.plugins updates can resolve the ownership graph.

export function ensurePlugin<T extends PluginBaseComponent>(
providers: PluginProviders,
pluginClass: RuntimePluginConstructor & (new (...args: any[]) => T),
createPlugin: () => T,
): T;

export type PluginDependencyKind =
| 'required'
| 'optional'
| 'auto-installed'
| 'event-integration'
| 'config-integration'
| 'ordering';

export type PluginDependencyPluginConstructor = abstract new (...args: any[]) => unknown;

export type PluginDependencyPluginRef =
| PluginDependencyPluginConstructor
| (() => PluginDependencyPluginConstructor);

export type PluginDependencyContract =
| 'aggregators'
| 'auto-size-column'
| 'column-types'
| 'column-selection-handoff'
| 'core-grouping'
| 'direct-event-manager-config'
| 'direct-history-config'
| 'filtering'
| 'direct-pagination-config'
| 'direct-pivot-config'
| 'direct-tree-config'
| 'gantt-runtime'
| 'json-clipboard'
| 'multi-range-selection'
| 'overlay-producer'
| 'pagination-capable-plugin'
| 'pro-plugin-infrastructure'
| 'pro-ui'
| 'row-order'
| 'row-select'
| 'sorting-capable-plugin'
| 'tree-data';

PluginDependencyAdditionalDataKey (Extended from index.ts)

Section titled “PluginDependencyAdditionalDataKey (Extended from index.ts)”
export type PluginDependencyAdditionalDataKey = keyof AdditionalData & string;

export type PluginDependencyTarget =
| {
readonly type: 'plugin';
readonly plugin: PluginDependencyPluginRef;
}
| {
readonly type: 'plugins';
readonly plugins: readonly PluginDependencyPluginRef[];
readonly mode?: 'all' | 'one-of';
}
| {
readonly type: 'additionalData';
readonly key: PluginDependencyAdditionalDataKey;
readonly path?: readonly string[];
}
| {
readonly type: 'event';
readonly event: keyof HTMLRevoGridElementEventMap & string;
}
| {
readonly type: 'events';
readonly events: readonly (keyof HTMLRevoGridElementEventMap & string)[];
}
| {
readonly type: 'contract';
readonly contract: PluginDependencyContract;
}
| {
readonly type: 'property';
readonly property: keyof HTMLRevoGridElement & string;
readonly path?: readonly string[];
}
| {
readonly type: 'ordering';
readonly relativeTo: 'other-grid-plugins';
readonly position: 'before' | 'after';
};

interface PluginDependency {
kind: PluginDependencyKind;
target: PluginDependencyTarget | readonly PluginDependencyTarget[];
description: string
}

Warns when required plugin class dependencies are missing.

Metadata remains descriptive: this does not auto-install, reorder, or block plugin execution.

warnRequiredPluginDependencies: (plugin: unknown, providers: PluginProviders, dependencies?: readonly PluginDependency[] | undefined) => void;