UNPKG

@theia/core

Version:

Theia is a cloud & desktop IDE framework implemented in TypeScript.

186 lines • 6.83 kB
import { Widget } from '@lumino/widgets'; import { Message } from '@lumino/messaging'; import { Emitter, Event } from '../common/event'; import { MaybePromise } from '../common/types'; import { AbstractDialog } from './dialogs'; import { Disposable, DisposableCollection, URI } from '../common'; import { BinaryBuffer } from '../common/buffer'; export type AutoSaveMode = 'off' | 'afterDelay' | 'onFocusChange' | 'onWindowChange'; export interface Saveable { readonly dirty: boolean; /** If false, the saveable will not participate in autosaving. */ readonly autosaveable?: boolean; /** * This event is fired when the content of the `dirty` variable changes. */ readonly onDirtyChanged: Event<void>; /** * This event is fired when the content of the saveable changes. * While `onDirtyChanged` is fired to notify the UI that the widget is dirty, * `onContentChanged` is used for the auto save throttling. */ readonly onContentChanged: Event<void>; /** * Saves dirty changes. */ save(options?: SaveOptions): MaybePromise<void>; /** * Performs the save operation with a new file name. */ saveAs?(options: SaveAsOptions): MaybePromise<void>; /** * Reverts dirty changes. */ revert?(options?: Saveable.RevertOptions): Promise<void>; /** * Creates a snapshot of the dirty state. See also {@link Saveable.Snapshot}. */ createSnapshot?(): Saveable.Snapshot; /** * Applies the given snapshot to the dirty state. */ applySnapshot?(snapshot: object): void; /** * Serializes the full state of the saveable item to a binary buffer. */ serialize?(): Promise<BinaryBuffer>; } export interface SaveableSource { readonly saveable: Saveable; } export declare class DelegatingSaveable implements Saveable { dirty: boolean; protected readonly onDirtyChangedEmitter: Emitter<void>; protected readonly onContentChangedEmitter: Emitter<void>; get onDirtyChanged(): Event<void>; get onContentChanged(): Event<void>; save(options?: SaveOptions): Promise<void>; revert?(options?: Saveable.RevertOptions): Promise<void>; createSnapshot?(): Saveable.Snapshot; applySnapshot?(snapshot: object): void; serialize?(): Promise<BinaryBuffer>; saveAs?(options: SaveAsOptions): MaybePromise<void>; protected _delegate?: Saveable; protected toDispose: DisposableCollection; set delegate(delegate: Saveable); } export declare class CompositeSaveable implements Saveable { protected isDirty: boolean; protected readonly onDirtyChangedEmitter: Emitter<void>; protected readonly onContentChangedEmitter: Emitter<void>; protected readonly toDispose: DisposableCollection; protected readonly saveablesMap: Map<Saveable, Disposable>; get dirty(): boolean; get onDirtyChanged(): Event<void>; get onContentChanged(): Event<void>; save(options?: SaveOptions): Promise<void>; revert(options?: Saveable.RevertOptions): Promise<void>; get saveables(): readonly Saveable[]; add(saveable: Saveable): void; remove(saveable: Saveable): boolean; dispose(): void; } export declare namespace Saveable { interface RevertOptions { /** * If soft then only dirty flag should be updated, otherwise * the underlying data should be reverted as well. */ soft?: boolean; } /** * A snapshot of a saveable item. * Applying a snapshot of a saveable on another (of the same type) using the `applySnapshot` should yield the state of the original saveable. */ type Snapshot = { value: string; } | { read(): string | null; }; namespace Snapshot { function read(snapshot: Snapshot): string | undefined; } function isSource(arg: unknown): arg is SaveableSource; function is(arg: unknown): arg is Saveable; function get(arg: unknown): Saveable | undefined; function getDirty(arg: unknown): Saveable | undefined; function isDirty(arg: unknown): boolean; function save(arg: unknown, options?: SaveOptions): Promise<void>; function confirmSaveBeforeClose(toClose: Iterable<Widget>, others: Widget[]): Promise<boolean | undefined>; function closingWidgetWouldLoseSaveable(widget: Widget, others: Widget[]): boolean; } export interface SaveableWidget extends Widget { /** * @param doRevert whether the saveable should be reverted before being saved. Defaults to `true`. */ closeWithoutSaving(doRevert?: boolean): Promise<void>; closeWithSaving(options?: SaveableWidget.CloseOptions): Promise<void>; } export declare const close: unique symbol; /** * An interface describing saveable widgets that are created by the `Saveable.apply` function. * The original `close` function is reassigned to a locally-defined `Symbol` */ export interface PostCreationSaveableWidget extends SaveableWidget { /** * The original `close` function of the widget */ [close](): void; } export declare namespace SaveableWidget { function is(widget: Widget | undefined): widget is SaveableWidget; function getDirty<T extends Widget>(widgets: Iterable<T>): IterableIterator<SaveableWidget & T>; function get<T extends Widget>(widgets: Iterable<T>, filter?: (widget: T) => boolean): IterableIterator<SaveableWidget & T>; interface CloseOptions { shouldSave?(): MaybePromise<boolean | undefined>; } } /** * Possible formatting types when saving. */ export declare const enum FormatType { /** * Formatting should occur (default). */ ON = 1, /** * Formatting should not occur. */ OFF = 2, /** * Formatting should only occur if the resource is dirty. */ DIRTY = 3 } export declare enum SaveReason { Manual = 1, AfterDelay = 2, FocusChange = 3 } export declare namespace SaveReason { function isManual(reason?: number): reason is typeof SaveReason.Manual; } export interface SaveOptions { /** * Formatting type to apply when saving. */ readonly formatType?: FormatType; /** * The reason for saving the resource. */ readonly saveReason?: SaveReason; } export interface SaveAsOptions extends SaveOptions { readonly target: URI; } export declare function setDirty(widget: Widget, dirty: boolean): void; export declare class ShouldSaveDialog extends AbstractDialog<boolean> { protected shouldSave: boolean; protected readonly dontSaveButton: HTMLButtonElement; constructor(widget: Widget); protected appendDontSaveButton(): HTMLButtonElement; protected onAfterAttach(msg: Message): void; get value(): boolean; open(disposeOnResolve?: boolean): Promise<boolean | undefined>; } //# sourceMappingURL=saveable.d.ts.map