Class

ContextWatchdog (watchdog)

@ckeditor/ckeditor5-watchdog/src/contextwatchdog

class

A watchdog for the Context class.

See the Watchdog feature guide to learn the rationale behind it and how to use it.

Filtering

Properties

  • context : Context | null

    The context instance. Keep in mind that this property might be changed when the context watchdog restarts, so do not keep this instance internally. Always operate on the ContextWatchdog#context property.

  • readonly inherited

    crashes : Array.<Object>

    An array of crashes saved as an object with the following properties:

    • message: String,
    • stack: String,
    • date: Number,
    • filename: String | undefined,
    • lineno: Number | undefined,
    • colno: Number | undefined,
  • inherited

    state : 'initializing' | 'ready' | 'crashed' | 'crashedPermanently' | 'destroyed'

    Specifies the state of the item watched by the watchdog. The state can be one of the following values:

    • initializing – Before the first initialization, and after crashes, before the item is ready.
    • ready – A state when the user can interact with the item.
    • crashed – A state when an error occurs. It quickly changes to initializing or crashedPermanently depending on how many and how frequent errors have been caught recently.
    • crashedPermanently – A state when the watchdog stops reacting to errors and keeps the item it is watching crashed,
    • destroyed – A state when the item is manually destroyed by the user after calling watchdog.destroy().
  • protected inherited

    _crashNumberLimit : Number

  • protected inherited

    _creator : function

    The creation method.

    Related:

  • protected inherited

    _destructor : function

    The destruction method.

    Related:

  • protected inherited

    _item : Object | undefined

    The watched item.

  • protected inherited

    _minimumNonErrorTimePeriod : Number

  • protected inherited

    _now

    Returns the result of the Date.now() call. It can be overridden in tests to mock time as some popular approaches like sinon.useFakeTimers() do not work well with error handling.

  • protected

    _watchdogs : Map.<string, EditorWatchdog>

    A map of internal watchdogs for added items.

  • private

    _actionQueues : ActionQueues

    An action queue, which is used to handle async functions queuing.

  • private

    _config : Object | undefined

    The context configuration.

  • private

    _context : Context | null

    The current context instance.

  • private

    _contextConfig : Object

    The configuration for the Context.

  • private

    _contextProps : Set.<*>

    Context properties (nodes/references) that are gathered during the initial context creation and are used to distinguish the origin of an error.

  • private inherited

    _listeners : Object.<String, Function>>

    A dictionary of event emitter listeners.

  • private

    _watchdogConfig : WatchdogConfig

    The watchdog configuration.

Methods

  • constructor( Context, [ watchdogConfig ] )

    The context watchdog class constructor.

    const watchdog = new ContextWatchdog( Context );
    
    await watchdog.create( contextConfiguration );
    
    await watchdog.add( item );
    

    See the Watchdog feature guide to learn more how to use this feature.

    Parameters

    Context : function

    The Context class.

    [ watchdogConfig ] : WatchdogConfig

    The watchdog configuration.

  • add( itemConfigurationOrItemConfigurations ) → Promise

    Adds items to the watchdog. Once created, instances of these items will be available using the getItem method.

    Items can be passed together as an array of objects:

    await watchdog.add( [ {
    	id: 'editor1',
    	type: 'editor',
    	sourceElementOrData: document.querySelector( '#editor' ),
    	config: {
    		plugins: [ Essentials, Paragraph, Bold, Italic ],
    		toolbar: [ 'bold', 'italic', 'alignment' ]
    	},
    	creator: ( element, config ) => ClassicEditor.create( element, config )
    } ] );
    

    Or one by one as objects:

    await watchdog.add( {
    	id: 'editor1',
    	type: 'editor',
    	sourceElementOrData: document.querySelector( '#editor' ),
    	config: {
    		plugins: [ Essentials, Paragraph, Bold, Italic ],
    		toolbar: [ 'bold', 'italic', 'alignment' ]
    	},
    	creator: ( element, config ) => ClassicEditor.create( element, config )
    ] );
    

    Then an instance can be retrieved using the getItem method:

    const editor1 = watchdog.getItem( 'editor1' );
    

    Note that this method can be called multiple times, but for performance reasons it is better to pass all items together.

    Parameters

    itemConfigurationOrItemConfigurations : WatchdogItemConfiguration | Array.<WatchdogItemConfiguration>

    An item configuration object or an array of item configurations.

    Returns

    Promise
  • create( [ contextConfig ] ) → Promise

    Initializes the context watchdog. Once it is created, the watchdog takes care about recreating the context and the provided items, and starts the error handling mechanism.

    await watchdog.create( {
    	plugins: []
    } );
    

    Parameters

    [ contextConfig ] : Object

    The context configuration. See Context.

    Returns

    Promise
  • inherited

    destroy()

    Destroys the watchdog and releases the resources.

  • getItem( itemId ) → *

    Returns an item instance with the given itemId.

    const editor1 = watchdog.getItem( 'editor1' );
    

    Parameters

    itemId : String

    The item ID.

    Returns

    *

    The item instance or undefined if an item with a given ID has not been found.

  • getItemState( itemId ) → 'initializing' | 'ready' | 'crashed' | 'crashedPermanently' | 'destroyed'

    Gets the state of the given item. See state for a list of available states.

    const editor1State = watchdog.getItemState( 'editor1' );
    

    Parameters

    itemId : String

    Item ID.

    Returns

    'initializing' | 'ready' | 'crashed' | 'crashedPermanently' | 'destroyed'

    The state of the item.

  • inherited

    off( eventName, callback )

    Stops listening to the specified event name by removing the callback from event listeners.

    Note that this method differs from the CKEditor 5's default EventEmitterMixin implementation.

    Parameters

    eventName : String

    The event name.

    callback : function

    A callback which will be removed from event listeners.

  • inherited

    on( eventName, callback )

    Starts listening to a specific event name by registering a callback that will be executed whenever an event with a given name fires.

    Note that this method differs from the CKEditor 5's default EventEmitterMixin implementation.

    Parameters

    eventName : String

    The event name.

    callback : function

    A callback which will be added to event listeners.

  • remove( itemIdOrItemIds ) → Promise

    Removes and destroys item(s) with given ID(s).

    await watchdog.remove( 'editor1' );
    

    Or

    await watchdog.remove( [ 'editor1', 'editor2' ] );
    

    Parameters

    itemIdOrItemIds : Array.<String> | String

    Item ID or an array of item IDs.

    Returns

    Promise
  • inherited

    setCreator( creator )

    Sets the function that is responsible for the context creation. It expects a function that should return a promise (or undefined).

    watchdog.setCreator( config => Context.create( config ) );
    

    Parameters

    creator : function
  • inherited

    setDestructor( destructor )

    Sets the function that is responsible for the context destruction. Overrides the default destruction function, which destroys only the context instance. It expects a function that should return a promise (or undefined).

    watchdog.setDestructor( context => {
    	// Do something before the context is destroyed.
    
    	return context
    		.destroy()
    		.then( () => {
    			// Do something after the context is destroyed.
    		} );
    } );
    

    Parameters

    destructor : function
  • protected inherited

    _fire( eventName, args )

    Fires an event with a given event name and arguments.

    Note that this method differs from the CKEditor 5's default EventEmitterMixin implementation.

    Parameters

    eventName : String

    The event name.

    args : *

    Event arguments.

  • protected

    _getWatchdog( itemId ) → Watchdog

    Returns the watchdog for a given item ID.

    Parameters

    itemId : String

    Item ID.

    Returns

    Watchdog

    Watchdog

  • protected

    _isErrorComingFromThisItem( error ) → Boolean

    Checks whether an error comes from the context instance and not from the item instances.

    Parameters

    error : Error

    Returns

    Boolean
  • protected

    _restart() → Promise

    Restarts the context watchdog.

    Returns

    Promise
  • protected inherited

    _startErrorHandling()

    Starts error handling by attaching global error handlers.

  • protected inherited

    _stopErrorHandling()

    Stops error handling by detaching global error handlers.

  • private inherited

    _boundErrorHandler()

    Checks if the event error comes from the underlying item and restarts the item.

  • private

    _create() → Promise

    Returns

    Promise
  • private

    _destroy() → Promise

    Destroys the context instance and all added items.

    Returns

    Promise
  • private inherited

    _handleError( error, evt )

    Checks if an error comes from the watched item and restarts it. It reacts to CKEditorError errors only.

    Parameters

    error : Error

    Error.

    evt : ErrorEvent | PromiseRejectionEvent

    An error event.

    Fires

  • private inherited

    _shouldReactToError( error )

    Checks whether an error should be handled by the watchdog.

    Parameters

    error : Error

    An error that was caught by the error handling process.

  • private inherited

    _shouldRestart()

    Checks if the watchdog should restart the underlying item.

Events

  • inherited

    error( eventInfo )

    Fired when a new CKEditorError error connected to the watchdog instance occurs and the watchdog will react to it.

    watchdog.on( 'error', ( evt, { error, causesRestart } ) => {
    	console.log( 'An error occurred.' );
    } );
    

    Parameters

    eventInfo : EventInfo

    An object containing information about the fired event.

  • itemError( eventInfo )

    Fired when a new error occurred in one of the added items.

    watchdog.on( 'itemError', ( evt, { error, itemId, causesRestart } ) => {
    	console.log( `An error occurred in an item with the '${ itemId }' ID.` );
    } );
    

    Parameters

    eventInfo : EventInfo

    An object containing information about the fired event.

  • itemRestart( eventInfo )

    Fired after an item has been restarted.

    watchdog.on( 'itemRestart', ( evt, { itemId } ) => {
    	console.log( 'An item with with the '${ itemId }' ID has been restarted.' );
    } );
    

    Parameters

    eventInfo : EventInfo

    An object containing information about the fired event.

  • restart( eventInfo )

    Fired after the watchdog restarts the context and the added items because of a crash.

    watchdog.on( 'restart', () => {
    	console.log( 'The context has been restarted.' );
    } );
    

    Parameters

    eventInfo : EventInfo

    An object containing information about the fired event.