@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
206 lines • 8.27 kB
TypeScript
import { TextDocumentContentChangeEvent } from 'vscode-languageserver-protocol';
import URI from '../common/uri';
import { ContributionProvider } from './contribution-provider';
import { Event, Emitter } from './event';
import { Disposable } from './disposable';
import { MaybePromise } from './types';
import { CancellationToken } from './cancellation';
import { ApplicationError } from './application-error';
import { ReadableStream, Readable } from './stream';
import { SyncReferenceCollection, Reference } from './reference';
export interface ResourceVersion {
}
export interface ResourceReadOptions {
encoding?: string;
}
export interface ResourceSaveOptions {
encoding?: string;
overwriteEncoding?: boolean;
version?: ResourceVersion;
}
export interface Resource extends Disposable {
readonly uri: URI;
/**
* Latest read version of this resource.
*
* Optional if a resource does not support versioning, check with `in` operator`.
* Undefined if a resource did not read content yet.
*/
readonly version?: ResourceVersion | undefined;
/**
* Latest read encoding of this resource.
*
* Optional if a resource does not support encoding, check with `in` operator`.
* Undefined if a resource did not read content yet.
*/
readonly encoding?: string | undefined;
readonly isReadonly?: boolean;
/**
* Reads latest content of this resource.
*
* If a resource supports versioning it updates version to latest.
* If a resource supports encoding it updates encoding to latest.
*
* @throws `ResourceError.NotFound` if a resource not found
*/
readContents(options?: ResourceReadOptions): Promise<string>;
/**
* Stream latest content of this resource.
*
* If a resource supports versioning it updates version to latest.
* If a resource supports encoding it updates encoding to latest.
*
* @throws `ResourceError.NotFound` if a resource not found
*/
readStream?(options?: ResourceReadOptions): Promise<ReadableStream<string>>;
/**
* Rewrites the complete content for this resource.
* If a resource does not exist it will be created.
*
* If a resource supports versioning clients can pass some version
* to check against it, if it is not provided latest version is used.
*
* It updates version and encoding to latest.
*
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
*/
saveContents?(content: string, options?: ResourceSaveOptions): Promise<void>;
/**
* Rewrites the complete content for this resource.
* If a resource does not exist it will be created.
*
* If a resource supports versioning clients can pass some version
* to check against it, if it is not provided latest version is used.
*
* It updates version and encoding to latest.
*
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
*/
saveStream?(content: Readable<string>, options?: ResourceSaveOptions): Promise<void>;
/**
* Applies incremental content changes to this resource.
*
* If a resource supports versioning clients can pass some version
* to check against it, if it is not provided latest version is used.
* It updates version to latest.
*
* @throws `ResourceError.NotFound` if a resource not found or was not read yet
* @throws `ResourceError.OutOfSync` if latest resource version is out of sync with the given
*/
saveContentChanges?(changes: TextDocumentContentChangeEvent[], options?: ResourceSaveOptions): Promise<void>;
readonly onDidChangeContents?: Event<void>;
guessEncoding?(): Promise<string | undefined>;
}
export declare namespace Resource {
interface SaveContext {
contentLength: number;
content: string | Readable<string>;
changes?: TextDocumentContentChangeEvent[];
options?: ResourceSaveOptions;
}
function save(resource: Resource, context: SaveContext, token?: CancellationToken): Promise<void>;
function trySaveContentChanges(resource: Resource, context: SaveContext): Promise<boolean>;
function shouldSaveContent(resource: Resource, { contentLength, changes }: SaveContext): boolean;
}
export declare namespace ResourceError {
const NotFound: ApplicationError.Constructor<-40000, {
uri: URI;
}>;
const OutOfSync: ApplicationError.Constructor<-40001, {
uri: URI;
}>;
}
export declare const ResourceResolver: unique symbol;
export interface ResourceResolver {
/**
* Reject if a resource cannot be provided.
*/
resolve(uri: URI): MaybePromise<Resource>;
}
export declare const ResourceProvider: unique symbol;
export declare type ResourceProvider = (uri: URI) => Promise<Resource>;
export declare class DefaultResourceProvider {
protected readonly resolversProvider: ContributionProvider<ResourceResolver>;
constructor(resolversProvider: ContributionProvider<ResourceResolver>);
/**
* Reject if a resource cannot be provided.
*/
get(uri: URI): Promise<Resource>;
}
export declare class MutableResource implements Resource {
readonly uri: URI;
private contents;
constructor(uri: URI);
dispose(): void;
readContents(): Promise<string>;
saveContents(contents: string): Promise<void>;
protected readonly onDidChangeContentsEmitter: Emitter<void>;
readonly onDidChangeContents: Event<void>;
protected fireDidChangeContents(): void;
}
export declare class ReferenceMutableResource implements Resource {
protected reference: Reference<MutableResource>;
constructor(reference: Reference<MutableResource>);
get uri(): URI;
get onDidChangeContents(): Event<void>;
dispose(): void;
readContents(): Promise<string>;
saveContents(contents: string): Promise<void>;
}
export declare class InMemoryResources implements ResourceResolver {
protected readonly resources: SyncReferenceCollection<string, MutableResource>;
add(uri: URI, contents: string): Resource;
update(uri: URI, contents: string): Resource;
resolve(uri: URI): Resource;
protected acquire(uri: string): ReferenceMutableResource;
}
export declare const MEMORY_TEXT = "mem-txt";
/**
* Resource implementation for 'mem-txt' URI scheme where content is saved in URI query.
*/
export declare class InMemoryTextResource implements Resource {
readonly uri: URI;
constructor(uri: URI);
readContents(options?: {
encoding?: string | undefined;
} | undefined): Promise<string>;
dispose(): void;
}
/**
* ResourceResolver implementation for 'mem-txt' URI scheme.
*/
export declare class InMemoryTextResourceResolver implements ResourceResolver {
resolve(uri: URI): MaybePromise<Resource>;
}
export declare const UNTITLED_SCHEME = "untitled";
export declare class UntitledResourceResolver implements ResourceResolver {
protected readonly resources: Map<string, UntitledResource>;
has(uri: URI): boolean;
resolve(uri: URI): Promise<UntitledResource>;
createUntitledResource(content?: string, extension?: string, uri?: URI): Promise<UntitledResource>;
createUntitledURI(extension?: string, parent?: URI): URI;
}
export declare class UntitledResource implements Resource {
private resources;
uri: URI;
private content?;
protected readonly onDidChangeContentsEmitter: Emitter<void>;
get onDidChangeContents(): Event<void>;
constructor(resources: Map<string, UntitledResource>, uri: URI, content?: string | undefined);
dispose(): void;
readContents(options?: {
encoding?: string | undefined;
} | undefined): Promise<string>;
saveContents(content: string, options?: {
encoding?: string;
overwriteEncoding?: boolean;
}): Promise<void>;
protected fireDidChangeContents(): void;
get version(): ResourceVersion | undefined;
get encoding(): string | undefined;
}
/**
* @deprecated Since 1.27.0. Please use `UntitledResourceResolver.createUntitledURI` instead.
*/
export declare function createUntitledURI(extension?: string, parent?: URI): URI;
//# sourceMappingURL=resource.d.ts.map