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; /** * 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>; /** * 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; /** * 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, options?: ResourceSaveOptions): Promise; /** * 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; readonly onDidChangeContents?: Event; guessEncoding?(): Promise; } export declare namespace Resource { interface SaveContext { contentLength: number; content: string | Readable; changes?: TextDocumentContentChangeEvent[]; options?: ResourceSaveOptions; } function save(resource: Resource, context: SaveContext, token?: CancellationToken): Promise; function trySaveContentChanges(resource: Resource, context: SaveContext): Promise; 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; } export declare const ResourceProvider: unique symbol; export declare type ResourceProvider = (uri: URI) => Promise; export declare class DefaultResourceProvider { protected readonly resolversProvider: ContributionProvider; constructor(resolversProvider: ContributionProvider); /** * Reject if a resource cannot be provided. */ get(uri: URI): Promise; } export declare class MutableResource implements Resource { readonly uri: URI; private contents; constructor(uri: URI); dispose(): void; readContents(): Promise; saveContents(contents: string): Promise; protected readonly onDidChangeContentsEmitter: Emitter; readonly onDidChangeContents: Event; protected fireDidChangeContents(): void; } export declare class ReferenceMutableResource implements Resource { protected reference: Reference; constructor(reference: Reference); get uri(): URI; get onDidChangeContents(): Event; dispose(): void; readContents(): Promise; saveContents(contents: string): Promise; } export declare class InMemoryResources implements ResourceResolver { protected readonly resources: SyncReferenceCollection; 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; dispose(): void; } /** * ResourceResolver implementation for 'mem-txt' URI scheme. */ export declare class InMemoryTextResourceResolver implements ResourceResolver { resolve(uri: URI): MaybePromise; } export declare const UNTITLED_SCHEME = "untitled"; export declare class UntitledResourceResolver implements ResourceResolver { protected readonly resources: Map; has(uri: URI): boolean; resolve(uri: URI): Promise; createUntitledResource(content?: string, extension?: string, uri?: URI): Promise; createUntitledURI(extension?: string, parent?: URI): URI; } export declare class UntitledResource implements Resource { private resources; uri: URI; private content?; protected readonly onDidChangeContentsEmitter: Emitter; get onDidChangeContents(): Event; constructor(resources: Map, uri: URI, content?: string | undefined); dispose(): void; readContents(options?: { encoding?: string | undefined; } | undefined): Promise; saveContents(content: string, options?: { encoding?: string; overwriteEncoding?: boolean; }): Promise; 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