A universal resource identifier representing either a file on disk or another resource, like untitled resources.
Static methods
staticfile(path:String):Uri
Create an URI from a file system path. The {@link Uri.scheme scheme}
will be file
.
The difference between {@link Uri.parse} and {@link 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:
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';
Parameters:
path | A file system or UNC path. |
---|
Returns:
A new Uri instance.
staticfrom(components:{scheme:String, query:Null<String>, path:Null<String>, fragment:Null<String>, authority:Null<String>}):Uri
Create an URI from its component parts
@link Uri.toString}
Parameters:
components | The component parts of an Uri. |
---|
Returns:
A new Uri instance.
See also:
{
staticjoinPath(base:Uri, pathSegments:Rest<String>):Uri
Create a new uri which path is the result of joining the path of the base uri with the provided path segments.
- Note 1:
joinPath
only affects the path component and all other components (scheme, authority, query, and fragment) are left as they are. - Note 2: The base uri must have a path; an error is thrown otherwise.
The path segments are normalized in the following ways:
- sequences of path separators (/
or \
) are replaced with a single separator
- for file
-uris on windows, the backslash-character (\
) is considered a path-separator
- the ..
-segment denotes the parent segment, the .
denotes the current segment
- paths have a root which always remains, for instance on windows drive-letters are roots
so that is true: joinPath(Uri.file('file:///c:/root'), '../../other').fsPath === 'c:/other'
Parameters:
base | An uri. Must have a path. |
---|---|
pathSegments | One more more path fragments |
Returns:
A new uri which path is joined with the given fragments
staticparse(value:String, ?strict:Bool):Uri
Create an URI from a string, e.g. http://www.msft.com/some/path
,
file:///usr/home
, or scheme:with/path
.
Note that for a while uris without a scheme
were accepted. That is not correct
as all uris should have a scheme. To avoid breakage of existing code the optional
strict
-argument has been added. We strongly advise to use it, e.g. Uri.parse('my:uri', true)
@link Uri.toString}
Parameters:
value | The string value of an Uri. |
---|---|
strict | Throw an error when |
Returns:
A new Uri instance.
See also:
{
Variables
read onlyauthority:String
Authority is the www.msft.com
part of http://www.msft.com/some/path?query#fragment
.
The part between the first double slashes and the next slash.
read onlyfragment:String
Fragment is the fragment
part of http://www.msft.com/some/path?query#fragment
.
read onlyfsPath:String
The string representing the corresponding file system path of this Uri.
Will handle UNC paths and normalize windows drive letters to lower-case. Also 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 resulting string shall not be used for display purposes but
for disk operations, like
readFile
et al.
The difference to the {@linkcode Uri.path path}-property is the use of the platform specific path separator and the handling of UNC paths. The sample below outlines the difference:
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'
read onlyscheme:String
Scheme is the http
part of http://www.msft.com/some/path?query#fragment
.
The part before the first colon.
Methods
toString(?skipEncoding:Bool):String
Returns a string representation of this Uri. The representation and normalization of a URI depends on the scheme.
- The resulting string can be safely used with {@link Uri.parse}.
- The resulting string shall not be used for display purposes.
Note that the implementation will encode aggressive which often leads to unexpected,
but not incorrect, results. For instance, colons are encoded to %3A
which might be unexpected
in file-uri. Also &
and =
will be encoded which might be unexpected for http-uris. For stability
reasons this cannot be changed anymore. If you suffer from too aggressive encoding you should use
the skipEncoding
-argument: uri.toString(true)
.
Parameters:
skipEncoding | Do not percentage-encode the result, defaults to |
---|
Returns:
A string representation of this Uri.
with(change:{scheme:Null<String>, query:Null<String>, path:Null<String>, fragment:Null<String>, authority:Null<String>}):Uri
Derive a new Uri from this Uri.
var file = Uri.parse('before:some/file/path');
var other = file.with({scheme: 'after'});
Assert.ok(other.toString() == 'after:some/file/path');
Parameters:
change | An object that describes a change to this Uri. To unset components use |
---|
Returns:
A new Uri that reflects the given change. Will return this
Uri if the change
is not changing anything.