/// /// /// import { Readable, Writable } from 'stream'; import { URL } from 'url'; import { URI } from 'vscode-uri'; import { UriComponents } from 'vscode-uri/lib/umd/uri'; import { FileStat, FileSystem, FileType, ReadHandle, WriteStreamOptions } from '../fs/filesystem'; import { HashVerifyEvents } from '../interfaces/events'; import { Algorithm, Hash } from './hash'; /** * This class is intended to be a drop-in replacement for the vscode uri * class, but has a filesystem associated with it. * * By associating the filesystem with the URI, we can allow for file URIs * to be scoped to a given filesystem (ie, a zip could be a filesystem ) * * Uniform Resource Identifier (URI) https://tools.ietf.org/html/rfc3986. * This class is a simple parser which creates the basic component parts * (https://tools.ietf.org/html/rfc3986#section-3) with minimal validation * and encoding. * * * ```txt * foo://example.com:8042/over/there?name=ferret#nose * \_/ \______________/\_________/ \_________/ \__/ * | | | | | * scheme authority path query fragment * | _____________________|__ * / \ / \ * urn:example:animal:ferret:nose * ``` * */ export declare class Uri implements URI { readonly fileSystem: FileSystem; protected readonly uri: URI; protected constructor(fileSystem: FileSystem, uri: URI); static readonly invalid: Uri; static isInvalid(uri?: Uri): boolean; /** * scheme is the 'https' part of 'https://www.msft.com/some/path?query#fragment'. * The part before the first colon. */ get scheme(): string; /** * authority is the 'www.msft.com' part of 'https://www.msft.com/some/path?query#fragment'. * The part between the first double slashes and the next slash. */ get authority(): string; /** * path is the '/some/path' part of 'https://www.msft.com/some/path?query#fragment'. */ get path(): string; /** * query is the 'query' part of 'https://www.msft.com/some/path?query#fragment'. */ get query(): string; /** * fragment is the 'fragment' part of 'https://www.msft.com/some/path?query#fragment'. */ get fragment(): string; /** * Creates a new Uri from a string, e.g. `https://www.msft.com/some/path`, * `file:///usr/home`, or `scheme:with/path`. * * @param value A string which represents an URI (see `URI#toString`). */ static parse(fileSystem: FileSystem, value: string, _strict?: boolean): Uri; /** * Creates a new Uri from a string, and replaces 'vsix' schemes with file:// instead. * * @param value A string which represents a URI which may be a VSIX uri. */ static parseFilterVsix(fileSystem: FileSystem, value: string, _strict?: boolean, vsixBaseUri?: Uri): Uri; /** * Creates a new URI from a file system path, e.g. `c:\my\files`, * `/usr/home`, or `\\server\share\some\path`. * * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as** * `URI.parse('file://' + path)` because the path might contain characters that are * interpreted (# and ?). See the following sample: * ```ts const good = URI.file('/coding/c#/project1'); good.scheme === 'file'; good.path === '/coding/c#/project1'; good.fragment === ''; const bad = URI.parse('file://' + '/coding/c#/project1'); bad.scheme === 'file'; bad.path === '/coding/c'; // path is now broken bad.fragment === '/project1'; ``` * * @param path A file system path (see `URI#fsPath`) */ static file(fileSystem: FileSystem, path: string): Uri; /** construct an Uri from the various parts */ static from(fileSystem: FileSystem, components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string; }): Uri; /** * Join all arguments together and normalize the resulting Uri. * * Also ensures that slashes are all forward. * */ join(...paths: Array): Uri; relative(target: Uri): string; /** returns true if the uri represents a file:// resource. */ get isLocal(): boolean; get isHttps(): boolean; /** * Returns a string representing the corresponding file system path of this URI. * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the * platform specific path separator. * * * Will *not* validate the path for invalid characters and semantics. * * Will *not* look at the scheme of this URI. * * The result shall *not* be used for display purposes but for accessing a file on disk. * * * The *difference* to `URI#path` is the use of the platform specific separator and the handling * of UNC paths. See the below sample of a file-uri with an authority (UNC path). * * ```ts const u = URI.parse('file://server/c$/folder/file.txt') u.authority === 'server' u.path === '/shares/c$/file.txt' u.fsPath === '\\server\c$\folder\file.txt' ``` * * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path, * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working * with URIs that represent files on disk (`file` scheme). */ get fsPath(): string; /** Duplicates the current Uri, changing out any parts */ with(change: { scheme?: string | undefined; authority?: string | null | undefined; path?: string | null | undefined; query?: string | null | undefined; fragment?: string | null | undefined; }): URI; /** * Creates a string representation for this URI. It's guaranteed that calling * `URI.parse` with the result of this function creates an URI which is equal * to this URI. * * * The result shall *not* be used for display purposes but for externalization or transport. * * The result will be encoded using the percentage encoding and encoding happens mostly * ignore the scheme-specific encoding rules. * * @param skipEncoding Do not encode the result, default is `false` */ toString(skipEncoding?: boolean): string; get formatted(): string; /** returns a JSON object with the components of the Uri */ toJSON(): UriComponents; toUrl(): URL; protected resolve(uriOrRelativePath?: Uri | string): Uri; stat(uri?: Uri | string): Promise; readDirectory(uri?: Uri | string, options?: { recursive?: boolean; }): Promise>; createDirectory(uri?: Uri | string): Promise; readFile(uri?: Uri | string): Promise; readUTF8(uri?: Uri | string): Promise; tryReadUTF8(uri?: Uri | string): Promise; openFile(uri?: Uri | string): Promise; readStream(start?: number, end?: number): Promise; readBlock(start?: number, end?: number): Promise; writeFile(content: Uint8Array): Promise; writeUTF8(content: string): Promise; writeStream(options?: WriteStreamOptions): Promise; delete(options?: { recursive?: boolean; useTrash?: boolean; }): Promise; exists(uri?: Uri | string): Promise; isFile(uri?: Uri | string): Promise; isSymlink(uri?: Uri | string): Promise; isDirectory(uri?: Uri | string): Promise; size(uri?: Uri | string): Promise; hash(algorithm?: Algorithm): Promise; hashValid(events: Partial, matchOptions?: Hash): Promise; get parent(): Uri; } export declare function isFilePath(uriOrPath?: Uri | string): boolean; //# sourceMappingURL=uri.d.ts.map