typescript 4.6.0-dev.20220129 → 4.6.0-dev.20220202
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cs/diagnosticMessages.generated.json +3 -4
- package/lib/de/diagnosticMessages.generated.json +5 -6
- package/lib/es/diagnosticMessages.generated.json +3 -4
- package/lib/fr/diagnosticMessages.generated.json +3 -4
- package/lib/it/diagnosticMessages.generated.json +5 -6
- package/lib/ja/diagnosticMessages.generated.json +3 -4
- package/lib/ko/diagnosticMessages.generated.json +3 -4
- package/lib/lib.webworker.d.ts +1 -1
- package/lib/pl/diagnosticMessages.generated.json +3 -4
- package/lib/pt-br/diagnosticMessages.generated.json +3 -4
- package/lib/ru/diagnosticMessages.generated.json +3 -4
- package/lib/tr/diagnosticMessages.generated.json +3 -4
- package/lib/tsc.js +617 -511
- package/lib/tsserver.js +854 -729
- package/lib/tsserverlibrary.js +854 -729
- package/lib/typescript.js +854 -729
- package/lib/typescriptServices.js +854 -729
- package/lib/typingsInstaller.js +921 -796
- package/lib/zh-cn/diagnosticMessages.generated.json +3 -4
- package/lib/zh-tw/diagnosticMessages.generated.json +3 -4
- package/package.json +1 -1
package/lib/typescript.js
CHANGED
|
@@ -294,7 +294,7 @@ var ts;
|
|
|
294
294
|
// The following is baselined as a literal template type without intervention
|
|
295
295
|
/** The version of the TypeScript compiler release */
|
|
296
296
|
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
297
|
-
ts.version = ts.versionMajorMinor + ".0-dev.
|
|
297
|
+
ts.version = ts.versionMajorMinor + ".0-dev.20220202";
|
|
298
298
|
/* @internal */
|
|
299
299
|
var Comparison;
|
|
300
300
|
(function (Comparison) {
|
|
@@ -5918,704 +5918,6 @@ var ts;
|
|
|
5918
5918
|
},
|
|
5919
5919
|
};
|
|
5920
5920
|
})(ts || (ts = {}));
|
|
5921
|
-
/* @internal */
|
|
5922
|
-
var ts;
|
|
5923
|
-
(function (ts) {
|
|
5924
|
-
/**
|
|
5925
|
-
* Internally, we represent paths as strings with '/' as the directory separator.
|
|
5926
|
-
* When we make system calls (eg: LanguageServiceHost.getDirectory()),
|
|
5927
|
-
* we expect the host to correctly handle paths in our specified format.
|
|
5928
|
-
*/
|
|
5929
|
-
ts.directorySeparator = "/";
|
|
5930
|
-
ts.altDirectorySeparator = "\\";
|
|
5931
|
-
var urlSchemeSeparator = "://";
|
|
5932
|
-
var backslashRegExp = /\\/g;
|
|
5933
|
-
//// Path Tests
|
|
5934
|
-
/**
|
|
5935
|
-
* Determines whether a charCode corresponds to `/` or `\`.
|
|
5936
|
-
*/
|
|
5937
|
-
function isAnyDirectorySeparator(charCode) {
|
|
5938
|
-
return charCode === 47 /* slash */ || charCode === 92 /* backslash */;
|
|
5939
|
-
}
|
|
5940
|
-
ts.isAnyDirectorySeparator = isAnyDirectorySeparator;
|
|
5941
|
-
/**
|
|
5942
|
-
* Determines whether a path starts with a URL scheme (e.g. starts with `http://`, `ftp://`, `file://`, etc.).
|
|
5943
|
-
*/
|
|
5944
|
-
function isUrl(path) {
|
|
5945
|
-
return getEncodedRootLength(path) < 0;
|
|
5946
|
-
}
|
|
5947
|
-
ts.isUrl = isUrl;
|
|
5948
|
-
/**
|
|
5949
|
-
* Determines whether a path is an absolute disk path (e.g. starts with `/`, or a dos path
|
|
5950
|
-
* like `c:`, `c:\` or `c:/`).
|
|
5951
|
-
*/
|
|
5952
|
-
function isRootedDiskPath(path) {
|
|
5953
|
-
return getEncodedRootLength(path) > 0;
|
|
5954
|
-
}
|
|
5955
|
-
ts.isRootedDiskPath = isRootedDiskPath;
|
|
5956
|
-
/**
|
|
5957
|
-
* Determines whether a path consists only of a path root.
|
|
5958
|
-
*/
|
|
5959
|
-
function isDiskPathRoot(path) {
|
|
5960
|
-
var rootLength = getEncodedRootLength(path);
|
|
5961
|
-
return rootLength > 0 && rootLength === path.length;
|
|
5962
|
-
}
|
|
5963
|
-
ts.isDiskPathRoot = isDiskPathRoot;
|
|
5964
|
-
/**
|
|
5965
|
-
* Determines whether a path starts with an absolute path component (i.e. `/`, `c:/`, `file://`, etc.).
|
|
5966
|
-
*
|
|
5967
|
-
* ```ts
|
|
5968
|
-
* // POSIX
|
|
5969
|
-
* pathIsAbsolute("/path/to/file.ext") === true
|
|
5970
|
-
* // DOS
|
|
5971
|
-
* pathIsAbsolute("c:/path/to/file.ext") === true
|
|
5972
|
-
* // URL
|
|
5973
|
-
* pathIsAbsolute("file:///path/to/file.ext") === true
|
|
5974
|
-
* // Non-absolute
|
|
5975
|
-
* pathIsAbsolute("path/to/file.ext") === false
|
|
5976
|
-
* pathIsAbsolute("./path/to/file.ext") === false
|
|
5977
|
-
* ```
|
|
5978
|
-
*/
|
|
5979
|
-
function pathIsAbsolute(path) {
|
|
5980
|
-
return getEncodedRootLength(path) !== 0;
|
|
5981
|
-
}
|
|
5982
|
-
ts.pathIsAbsolute = pathIsAbsolute;
|
|
5983
|
-
/**
|
|
5984
|
-
* Determines whether a path starts with a relative path component (i.e. `.` or `..`).
|
|
5985
|
-
*/
|
|
5986
|
-
function pathIsRelative(path) {
|
|
5987
|
-
return /^\.\.?($|[\\/])/.test(path);
|
|
5988
|
-
}
|
|
5989
|
-
ts.pathIsRelative = pathIsRelative;
|
|
5990
|
-
/**
|
|
5991
|
-
* Determines whether a path is neither relative nor absolute, e.g. "path/to/file".
|
|
5992
|
-
* Also known misleadingly as "non-relative".
|
|
5993
|
-
*/
|
|
5994
|
-
function pathIsBareSpecifier(path) {
|
|
5995
|
-
return !pathIsAbsolute(path) && !pathIsRelative(path);
|
|
5996
|
-
}
|
|
5997
|
-
ts.pathIsBareSpecifier = pathIsBareSpecifier;
|
|
5998
|
-
function hasExtension(fileName) {
|
|
5999
|
-
return ts.stringContains(getBaseFileName(fileName), ".");
|
|
6000
|
-
}
|
|
6001
|
-
ts.hasExtension = hasExtension;
|
|
6002
|
-
function fileExtensionIs(path, extension) {
|
|
6003
|
-
return path.length > extension.length && ts.endsWith(path, extension);
|
|
6004
|
-
}
|
|
6005
|
-
ts.fileExtensionIs = fileExtensionIs;
|
|
6006
|
-
function fileExtensionIsOneOf(path, extensions) {
|
|
6007
|
-
for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {
|
|
6008
|
-
var extension = extensions_1[_i];
|
|
6009
|
-
if (fileExtensionIs(path, extension)) {
|
|
6010
|
-
return true;
|
|
6011
|
-
}
|
|
6012
|
-
}
|
|
6013
|
-
return false;
|
|
6014
|
-
}
|
|
6015
|
-
ts.fileExtensionIsOneOf = fileExtensionIsOneOf;
|
|
6016
|
-
/**
|
|
6017
|
-
* Determines whether a path has a trailing separator (`/` or `\\`).
|
|
6018
|
-
*/
|
|
6019
|
-
function hasTrailingDirectorySeparator(path) {
|
|
6020
|
-
return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1));
|
|
6021
|
-
}
|
|
6022
|
-
ts.hasTrailingDirectorySeparator = hasTrailingDirectorySeparator;
|
|
6023
|
-
//// Path Parsing
|
|
6024
|
-
function isVolumeCharacter(charCode) {
|
|
6025
|
-
return (charCode >= 97 /* a */ && charCode <= 122 /* z */) ||
|
|
6026
|
-
(charCode >= 65 /* A */ && charCode <= 90 /* Z */);
|
|
6027
|
-
}
|
|
6028
|
-
function getFileUrlVolumeSeparatorEnd(url, start) {
|
|
6029
|
-
var ch0 = url.charCodeAt(start);
|
|
6030
|
-
if (ch0 === 58 /* colon */)
|
|
6031
|
-
return start + 1;
|
|
6032
|
-
if (ch0 === 37 /* percent */ && url.charCodeAt(start + 1) === 51 /* _3 */) {
|
|
6033
|
-
var ch2 = url.charCodeAt(start + 2);
|
|
6034
|
-
if (ch2 === 97 /* a */ || ch2 === 65 /* A */)
|
|
6035
|
-
return start + 3;
|
|
6036
|
-
}
|
|
6037
|
-
return -1;
|
|
6038
|
-
}
|
|
6039
|
-
/**
|
|
6040
|
-
* Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files").
|
|
6041
|
-
* If the root is part of a URL, the twos-complement of the root length is returned.
|
|
6042
|
-
*/
|
|
6043
|
-
function getEncodedRootLength(path) {
|
|
6044
|
-
if (!path)
|
|
6045
|
-
return 0;
|
|
6046
|
-
var ch0 = path.charCodeAt(0);
|
|
6047
|
-
// POSIX or UNC
|
|
6048
|
-
if (ch0 === 47 /* slash */ || ch0 === 92 /* backslash */) {
|
|
6049
|
-
if (path.charCodeAt(1) !== ch0)
|
|
6050
|
-
return 1; // POSIX: "/" (or non-normalized "\")
|
|
6051
|
-
var p1 = path.indexOf(ch0 === 47 /* slash */ ? ts.directorySeparator : ts.altDirectorySeparator, 2);
|
|
6052
|
-
if (p1 < 0)
|
|
6053
|
-
return path.length; // UNC: "//server" or "\\server"
|
|
6054
|
-
return p1 + 1; // UNC: "//server/" or "\\server\"
|
|
6055
|
-
}
|
|
6056
|
-
// DOS
|
|
6057
|
-
if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58 /* colon */) {
|
|
6058
|
-
var ch2 = path.charCodeAt(2);
|
|
6059
|
-
if (ch2 === 47 /* slash */ || ch2 === 92 /* backslash */)
|
|
6060
|
-
return 3; // DOS: "c:/" or "c:\"
|
|
6061
|
-
if (path.length === 2)
|
|
6062
|
-
return 2; // DOS: "c:" (but not "c:d")
|
|
6063
|
-
}
|
|
6064
|
-
// URL
|
|
6065
|
-
var schemeEnd = path.indexOf(urlSchemeSeparator);
|
|
6066
|
-
if (schemeEnd !== -1) {
|
|
6067
|
-
var authorityStart = schemeEnd + urlSchemeSeparator.length;
|
|
6068
|
-
var authorityEnd = path.indexOf(ts.directorySeparator, authorityStart);
|
|
6069
|
-
if (authorityEnd !== -1) { // URL: "file:///", "file://server/", "file://server/path"
|
|
6070
|
-
// For local "file" URLs, include the leading DOS volume (if present).
|
|
6071
|
-
// Per https://www.ietf.org/rfc/rfc1738.txt, a host of "" or "localhost" is a
|
|
6072
|
-
// special case interpreted as "the machine from which the URL is being interpreted".
|
|
6073
|
-
var scheme = path.slice(0, schemeEnd);
|
|
6074
|
-
var authority = path.slice(authorityStart, authorityEnd);
|
|
6075
|
-
if (scheme === "file" && (authority === "" || authority === "localhost") &&
|
|
6076
|
-
isVolumeCharacter(path.charCodeAt(authorityEnd + 1))) {
|
|
6077
|
-
var volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2);
|
|
6078
|
-
if (volumeSeparatorEnd !== -1) {
|
|
6079
|
-
if (path.charCodeAt(volumeSeparatorEnd) === 47 /* slash */) {
|
|
6080
|
-
// URL: "file:///c:/", "file://localhost/c:/", "file:///c%3a/", "file://localhost/c%3a/"
|
|
6081
|
-
return ~(volumeSeparatorEnd + 1);
|
|
6082
|
-
}
|
|
6083
|
-
if (volumeSeparatorEnd === path.length) {
|
|
6084
|
-
// URL: "file:///c:", "file://localhost/c:", "file:///c$3a", "file://localhost/c%3a"
|
|
6085
|
-
// but not "file:///c:d" or "file:///c%3ad"
|
|
6086
|
-
return ~volumeSeparatorEnd;
|
|
6087
|
-
}
|
|
6088
|
-
}
|
|
6089
|
-
}
|
|
6090
|
-
return ~(authorityEnd + 1); // URL: "file://server/", "http://server/"
|
|
6091
|
-
}
|
|
6092
|
-
return ~path.length; // URL: "file://server", "http://server"
|
|
6093
|
-
}
|
|
6094
|
-
// relative
|
|
6095
|
-
return 0;
|
|
6096
|
-
}
|
|
6097
|
-
/**
|
|
6098
|
-
* Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files").
|
|
6099
|
-
*
|
|
6100
|
-
* For example:
|
|
6101
|
-
* ```ts
|
|
6102
|
-
* getRootLength("a") === 0 // ""
|
|
6103
|
-
* getRootLength("/") === 1 // "/"
|
|
6104
|
-
* getRootLength("c:") === 2 // "c:"
|
|
6105
|
-
* getRootLength("c:d") === 0 // ""
|
|
6106
|
-
* getRootLength("c:/") === 3 // "c:/"
|
|
6107
|
-
* getRootLength("c:\\") === 3 // "c:\\"
|
|
6108
|
-
* getRootLength("//server") === 7 // "//server"
|
|
6109
|
-
* getRootLength("//server/share") === 8 // "//server/"
|
|
6110
|
-
* getRootLength("\\\\server") === 7 // "\\\\server"
|
|
6111
|
-
* getRootLength("\\\\server\\share") === 8 // "\\\\server\\"
|
|
6112
|
-
* getRootLength("file:///path") === 8 // "file:///"
|
|
6113
|
-
* getRootLength("file:///c:") === 10 // "file:///c:"
|
|
6114
|
-
* getRootLength("file:///c:d") === 8 // "file:///"
|
|
6115
|
-
* getRootLength("file:///c:/path") === 11 // "file:///c:/"
|
|
6116
|
-
* getRootLength("file://server") === 13 // "file://server"
|
|
6117
|
-
* getRootLength("file://server/path") === 14 // "file://server/"
|
|
6118
|
-
* getRootLength("http://server") === 13 // "http://server"
|
|
6119
|
-
* getRootLength("http://server/path") === 14 // "http://server/"
|
|
6120
|
-
* ```
|
|
6121
|
-
*/
|
|
6122
|
-
function getRootLength(path) {
|
|
6123
|
-
var rootLength = getEncodedRootLength(path);
|
|
6124
|
-
return rootLength < 0 ? ~rootLength : rootLength;
|
|
6125
|
-
}
|
|
6126
|
-
ts.getRootLength = getRootLength;
|
|
6127
|
-
function getDirectoryPath(path) {
|
|
6128
|
-
path = normalizeSlashes(path);
|
|
6129
|
-
// If the path provided is itself the root, then return it.
|
|
6130
|
-
var rootLength = getRootLength(path);
|
|
6131
|
-
if (rootLength === path.length)
|
|
6132
|
-
return path;
|
|
6133
|
-
// return the leading portion of the path up to the last (non-terminal) directory separator
|
|
6134
|
-
// but not including any trailing directory separator.
|
|
6135
|
-
path = removeTrailingDirectorySeparator(path);
|
|
6136
|
-
return path.slice(0, Math.max(rootLength, path.lastIndexOf(ts.directorySeparator)));
|
|
6137
|
-
}
|
|
6138
|
-
ts.getDirectoryPath = getDirectoryPath;
|
|
6139
|
-
function getBaseFileName(path, extensions, ignoreCase) {
|
|
6140
|
-
path = normalizeSlashes(path);
|
|
6141
|
-
// if the path provided is itself the root, then it has not file name.
|
|
6142
|
-
var rootLength = getRootLength(path);
|
|
6143
|
-
if (rootLength === path.length)
|
|
6144
|
-
return "";
|
|
6145
|
-
// return the trailing portion of the path starting after the last (non-terminal) directory
|
|
6146
|
-
// separator but not including any trailing directory separator.
|
|
6147
|
-
path = removeTrailingDirectorySeparator(path);
|
|
6148
|
-
var name = path.slice(Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator) + 1));
|
|
6149
|
-
var extension = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(name, extensions, ignoreCase) : undefined;
|
|
6150
|
-
return extension ? name.slice(0, name.length - extension.length) : name;
|
|
6151
|
-
}
|
|
6152
|
-
ts.getBaseFileName = getBaseFileName;
|
|
6153
|
-
function tryGetExtensionFromPath(path, extension, stringEqualityComparer) {
|
|
6154
|
-
if (!ts.startsWith(extension, "."))
|
|
6155
|
-
extension = "." + extension;
|
|
6156
|
-
if (path.length >= extension.length && path.charCodeAt(path.length - extension.length) === 46 /* dot */) {
|
|
6157
|
-
var pathExtension = path.slice(path.length - extension.length);
|
|
6158
|
-
if (stringEqualityComparer(pathExtension, extension)) {
|
|
6159
|
-
return pathExtension;
|
|
6160
|
-
}
|
|
6161
|
-
}
|
|
6162
|
-
}
|
|
6163
|
-
function getAnyExtensionFromPathWorker(path, extensions, stringEqualityComparer) {
|
|
6164
|
-
if (typeof extensions === "string") {
|
|
6165
|
-
return tryGetExtensionFromPath(path, extensions, stringEqualityComparer) || "";
|
|
6166
|
-
}
|
|
6167
|
-
for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) {
|
|
6168
|
-
var extension = extensions_2[_i];
|
|
6169
|
-
var result = tryGetExtensionFromPath(path, extension, stringEqualityComparer);
|
|
6170
|
-
if (result)
|
|
6171
|
-
return result;
|
|
6172
|
-
}
|
|
6173
|
-
return "";
|
|
6174
|
-
}
|
|
6175
|
-
function getAnyExtensionFromPath(path, extensions, ignoreCase) {
|
|
6176
|
-
// Retrieves any string from the final "." onwards from a base file name.
|
|
6177
|
-
// Unlike extensionFromPath, which throws an exception on unrecognized extensions.
|
|
6178
|
-
if (extensions) {
|
|
6179
|
-
return getAnyExtensionFromPathWorker(removeTrailingDirectorySeparator(path), extensions, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive);
|
|
6180
|
-
}
|
|
6181
|
-
var baseFileName = getBaseFileName(path);
|
|
6182
|
-
var extensionIndex = baseFileName.lastIndexOf(".");
|
|
6183
|
-
if (extensionIndex >= 0) {
|
|
6184
|
-
return baseFileName.substring(extensionIndex);
|
|
6185
|
-
}
|
|
6186
|
-
return "";
|
|
6187
|
-
}
|
|
6188
|
-
ts.getAnyExtensionFromPath = getAnyExtensionFromPath;
|
|
6189
|
-
function pathComponents(path, rootLength) {
|
|
6190
|
-
var root = path.substring(0, rootLength);
|
|
6191
|
-
var rest = path.substring(rootLength).split(ts.directorySeparator);
|
|
6192
|
-
if (rest.length && !ts.lastOrUndefined(rest))
|
|
6193
|
-
rest.pop();
|
|
6194
|
-
return __spreadArray([root], rest, true);
|
|
6195
|
-
}
|
|
6196
|
-
/**
|
|
6197
|
-
* Parse a path into an array containing a root component (at index 0) and zero or more path
|
|
6198
|
-
* components (at indices > 0). The result is not normalized.
|
|
6199
|
-
* If the path is relative, the root component is `""`.
|
|
6200
|
-
* If the path is absolute, the root component includes the first path separator (`/`).
|
|
6201
|
-
*
|
|
6202
|
-
* ```ts
|
|
6203
|
-
* // POSIX
|
|
6204
|
-
* getPathComponents("/path/to/file.ext") === ["/", "path", "to", "file.ext"]
|
|
6205
|
-
* getPathComponents("/path/to/") === ["/", "path", "to"]
|
|
6206
|
-
* getPathComponents("/") === ["/"]
|
|
6207
|
-
* // DOS
|
|
6208
|
-
* getPathComponents("c:/path/to/file.ext") === ["c:/", "path", "to", "file.ext"]
|
|
6209
|
-
* getPathComponents("c:/path/to/") === ["c:/", "path", "to"]
|
|
6210
|
-
* getPathComponents("c:/") === ["c:/"]
|
|
6211
|
-
* getPathComponents("c:") === ["c:"]
|
|
6212
|
-
* // URL
|
|
6213
|
-
* getPathComponents("http://typescriptlang.org/path/to/file.ext") === ["http://typescriptlang.org/", "path", "to", "file.ext"]
|
|
6214
|
-
* getPathComponents("http://typescriptlang.org/path/to/") === ["http://typescriptlang.org/", "path", "to"]
|
|
6215
|
-
* getPathComponents("http://typescriptlang.org/") === ["http://typescriptlang.org/"]
|
|
6216
|
-
* getPathComponents("http://typescriptlang.org") === ["http://typescriptlang.org"]
|
|
6217
|
-
* getPathComponents("file://server/path/to/file.ext") === ["file://server/", "path", "to", "file.ext"]
|
|
6218
|
-
* getPathComponents("file://server/path/to/") === ["file://server/", "path", "to"]
|
|
6219
|
-
* getPathComponents("file://server/") === ["file://server/"]
|
|
6220
|
-
* getPathComponents("file://server") === ["file://server"]
|
|
6221
|
-
* getPathComponents("file:///path/to/file.ext") === ["file:///", "path", "to", "file.ext"]
|
|
6222
|
-
* getPathComponents("file:///path/to/") === ["file:///", "path", "to"]
|
|
6223
|
-
* getPathComponents("file:///") === ["file:///"]
|
|
6224
|
-
* getPathComponents("file://") === ["file://"]
|
|
6225
|
-
*/
|
|
6226
|
-
function getPathComponents(path, currentDirectory) {
|
|
6227
|
-
if (currentDirectory === void 0) { currentDirectory = ""; }
|
|
6228
|
-
path = combinePaths(currentDirectory, path);
|
|
6229
|
-
return pathComponents(path, getRootLength(path));
|
|
6230
|
-
}
|
|
6231
|
-
ts.getPathComponents = getPathComponents;
|
|
6232
|
-
//// Path Formatting
|
|
6233
|
-
/**
|
|
6234
|
-
* Formats a parsed path consisting of a root component (at index 0) and zero or more path
|
|
6235
|
-
* segments (at indices > 0).
|
|
6236
|
-
*
|
|
6237
|
-
* ```ts
|
|
6238
|
-
* getPathFromPathComponents(["/", "path", "to", "file.ext"]) === "/path/to/file.ext"
|
|
6239
|
-
* ```
|
|
6240
|
-
*/
|
|
6241
|
-
function getPathFromPathComponents(pathComponents) {
|
|
6242
|
-
if (pathComponents.length === 0)
|
|
6243
|
-
return "";
|
|
6244
|
-
var root = pathComponents[0] && ensureTrailingDirectorySeparator(pathComponents[0]);
|
|
6245
|
-
return root + pathComponents.slice(1).join(ts.directorySeparator);
|
|
6246
|
-
}
|
|
6247
|
-
ts.getPathFromPathComponents = getPathFromPathComponents;
|
|
6248
|
-
//// Path Normalization
|
|
6249
|
-
/**
|
|
6250
|
-
* Normalize path separators, converting `\` into `/`.
|
|
6251
|
-
*/
|
|
6252
|
-
function normalizeSlashes(path) {
|
|
6253
|
-
var index = path.indexOf("\\");
|
|
6254
|
-
if (index === -1) {
|
|
6255
|
-
return path;
|
|
6256
|
-
}
|
|
6257
|
-
backslashRegExp.lastIndex = index; // prime regex with known position
|
|
6258
|
-
return path.replace(backslashRegExp, ts.directorySeparator);
|
|
6259
|
-
}
|
|
6260
|
-
ts.normalizeSlashes = normalizeSlashes;
|
|
6261
|
-
/**
|
|
6262
|
-
* Reduce an array of path components to a more simplified path by navigating any
|
|
6263
|
-
* `"."` or `".."` entries in the path.
|
|
6264
|
-
*/
|
|
6265
|
-
function reducePathComponents(components) {
|
|
6266
|
-
if (!ts.some(components))
|
|
6267
|
-
return [];
|
|
6268
|
-
var reduced = [components[0]];
|
|
6269
|
-
for (var i = 1; i < components.length; i++) {
|
|
6270
|
-
var component = components[i];
|
|
6271
|
-
if (!component)
|
|
6272
|
-
continue;
|
|
6273
|
-
if (component === ".")
|
|
6274
|
-
continue;
|
|
6275
|
-
if (component === "..") {
|
|
6276
|
-
if (reduced.length > 1) {
|
|
6277
|
-
if (reduced[reduced.length - 1] !== "..") {
|
|
6278
|
-
reduced.pop();
|
|
6279
|
-
continue;
|
|
6280
|
-
}
|
|
6281
|
-
}
|
|
6282
|
-
else if (reduced[0])
|
|
6283
|
-
continue;
|
|
6284
|
-
}
|
|
6285
|
-
reduced.push(component);
|
|
6286
|
-
}
|
|
6287
|
-
return reduced;
|
|
6288
|
-
}
|
|
6289
|
-
ts.reducePathComponents = reducePathComponents;
|
|
6290
|
-
/**
|
|
6291
|
-
* Combines paths. If a path is absolute, it replaces any previous path. Relative paths are not simplified.
|
|
6292
|
-
*
|
|
6293
|
-
* ```ts
|
|
6294
|
-
* // Non-rooted
|
|
6295
|
-
* combinePaths("path", "to", "file.ext") === "path/to/file.ext"
|
|
6296
|
-
* combinePaths("path", "dir", "..", "to", "file.ext") === "path/dir/../to/file.ext"
|
|
6297
|
-
* // POSIX
|
|
6298
|
-
* combinePaths("/path", "to", "file.ext") === "/path/to/file.ext"
|
|
6299
|
-
* combinePaths("/path", "/to", "file.ext") === "/to/file.ext"
|
|
6300
|
-
* // DOS
|
|
6301
|
-
* combinePaths("c:/path", "to", "file.ext") === "c:/path/to/file.ext"
|
|
6302
|
-
* combinePaths("c:/path", "c:/to", "file.ext") === "c:/to/file.ext"
|
|
6303
|
-
* // URL
|
|
6304
|
-
* combinePaths("file:///path", "to", "file.ext") === "file:///path/to/file.ext"
|
|
6305
|
-
* combinePaths("file:///path", "file:///to", "file.ext") === "file:///to/file.ext"
|
|
6306
|
-
* ```
|
|
6307
|
-
*/
|
|
6308
|
-
function combinePaths(path) {
|
|
6309
|
-
var paths = [];
|
|
6310
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
6311
|
-
paths[_i - 1] = arguments[_i];
|
|
6312
|
-
}
|
|
6313
|
-
if (path)
|
|
6314
|
-
path = normalizeSlashes(path);
|
|
6315
|
-
for (var _a = 0, paths_1 = paths; _a < paths_1.length; _a++) {
|
|
6316
|
-
var relativePath = paths_1[_a];
|
|
6317
|
-
if (!relativePath)
|
|
6318
|
-
continue;
|
|
6319
|
-
relativePath = normalizeSlashes(relativePath);
|
|
6320
|
-
if (!path || getRootLength(relativePath) !== 0) {
|
|
6321
|
-
path = relativePath;
|
|
6322
|
-
}
|
|
6323
|
-
else {
|
|
6324
|
-
path = ensureTrailingDirectorySeparator(path) + relativePath;
|
|
6325
|
-
}
|
|
6326
|
-
}
|
|
6327
|
-
return path;
|
|
6328
|
-
}
|
|
6329
|
-
ts.combinePaths = combinePaths;
|
|
6330
|
-
/**
|
|
6331
|
-
* Combines and resolves paths. If a path is absolute, it replaces any previous path. Any
|
|
6332
|
-
* `.` and `..` path components are resolved. Trailing directory separators are preserved.
|
|
6333
|
-
*
|
|
6334
|
-
* ```ts
|
|
6335
|
-
* resolvePath("/path", "to", "file.ext") === "path/to/file.ext"
|
|
6336
|
-
* resolvePath("/path", "to", "file.ext/") === "path/to/file.ext/"
|
|
6337
|
-
* resolvePath("/path", "dir", "..", "to", "file.ext") === "path/to/file.ext"
|
|
6338
|
-
* ```
|
|
6339
|
-
*/
|
|
6340
|
-
function resolvePath(path) {
|
|
6341
|
-
var paths = [];
|
|
6342
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
6343
|
-
paths[_i - 1] = arguments[_i];
|
|
6344
|
-
}
|
|
6345
|
-
return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
|
|
6346
|
-
}
|
|
6347
|
-
ts.resolvePath = resolvePath;
|
|
6348
|
-
/**
|
|
6349
|
-
* Parse a path into an array containing a root component (at index 0) and zero or more path
|
|
6350
|
-
* components (at indices > 0). The result is normalized.
|
|
6351
|
-
* If the path is relative, the root component is `""`.
|
|
6352
|
-
* If the path is absolute, the root component includes the first path separator (`/`).
|
|
6353
|
-
*
|
|
6354
|
-
* ```ts
|
|
6355
|
-
* getNormalizedPathComponents("to/dir/../file.ext", "/path/") === ["/", "path", "to", "file.ext"]
|
|
6356
|
-
* ```
|
|
6357
|
-
*/
|
|
6358
|
-
function getNormalizedPathComponents(path, currentDirectory) {
|
|
6359
|
-
return reducePathComponents(getPathComponents(path, currentDirectory));
|
|
6360
|
-
}
|
|
6361
|
-
ts.getNormalizedPathComponents = getNormalizedPathComponents;
|
|
6362
|
-
function getNormalizedAbsolutePath(fileName, currentDirectory) {
|
|
6363
|
-
return getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
|
|
6364
|
-
}
|
|
6365
|
-
ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
|
|
6366
|
-
function normalizePath(path) {
|
|
6367
|
-
path = normalizeSlashes(path);
|
|
6368
|
-
// Most paths don't require normalization
|
|
6369
|
-
if (!relativePathSegmentRegExp.test(path)) {
|
|
6370
|
-
return path;
|
|
6371
|
-
}
|
|
6372
|
-
// Some paths only require cleanup of `/./` or leading `./`
|
|
6373
|
-
var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
|
|
6374
|
-
if (simplified !== path) {
|
|
6375
|
-
path = simplified;
|
|
6376
|
-
if (!relativePathSegmentRegExp.test(path)) {
|
|
6377
|
-
return path;
|
|
6378
|
-
}
|
|
6379
|
-
}
|
|
6380
|
-
// Other paths require full normalization
|
|
6381
|
-
var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
|
|
6382
|
-
return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
|
|
6383
|
-
}
|
|
6384
|
-
ts.normalizePath = normalizePath;
|
|
6385
|
-
function getPathWithoutRoot(pathComponents) {
|
|
6386
|
-
if (pathComponents.length === 0)
|
|
6387
|
-
return "";
|
|
6388
|
-
return pathComponents.slice(1).join(ts.directorySeparator);
|
|
6389
|
-
}
|
|
6390
|
-
function getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory) {
|
|
6391
|
-
return getPathWithoutRoot(getNormalizedPathComponents(fileName, currentDirectory));
|
|
6392
|
-
}
|
|
6393
|
-
ts.getNormalizedAbsolutePathWithoutRoot = getNormalizedAbsolutePathWithoutRoot;
|
|
6394
|
-
function toPath(fileName, basePath, getCanonicalFileName) {
|
|
6395
|
-
var nonCanonicalizedPath = isRootedDiskPath(fileName)
|
|
6396
|
-
? normalizePath(fileName)
|
|
6397
|
-
: getNormalizedAbsolutePath(fileName, basePath);
|
|
6398
|
-
return getCanonicalFileName(nonCanonicalizedPath);
|
|
6399
|
-
}
|
|
6400
|
-
ts.toPath = toPath;
|
|
6401
|
-
function normalizePathAndParts(path) {
|
|
6402
|
-
path = normalizeSlashes(path);
|
|
6403
|
-
var _a = reducePathComponents(getPathComponents(path)), root = _a[0], parts = _a.slice(1);
|
|
6404
|
-
if (parts.length) {
|
|
6405
|
-
var joinedParts = root + parts.join(ts.directorySeparator);
|
|
6406
|
-
return { path: hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(joinedParts) : joinedParts, parts: parts };
|
|
6407
|
-
}
|
|
6408
|
-
else {
|
|
6409
|
-
return { path: root, parts: parts };
|
|
6410
|
-
}
|
|
6411
|
-
}
|
|
6412
|
-
ts.normalizePathAndParts = normalizePathAndParts;
|
|
6413
|
-
function removeTrailingDirectorySeparator(path) {
|
|
6414
|
-
if (hasTrailingDirectorySeparator(path)) {
|
|
6415
|
-
return path.substr(0, path.length - 1);
|
|
6416
|
-
}
|
|
6417
|
-
return path;
|
|
6418
|
-
}
|
|
6419
|
-
ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator;
|
|
6420
|
-
function ensureTrailingDirectorySeparator(path) {
|
|
6421
|
-
if (!hasTrailingDirectorySeparator(path)) {
|
|
6422
|
-
return path + ts.directorySeparator;
|
|
6423
|
-
}
|
|
6424
|
-
return path;
|
|
6425
|
-
}
|
|
6426
|
-
ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator;
|
|
6427
|
-
/**
|
|
6428
|
-
* Ensures a path is either absolute (prefixed with `/` or `c:`) or dot-relative (prefixed
|
|
6429
|
-
* with `./` or `../`) so as not to be confused with an unprefixed module name.
|
|
6430
|
-
*
|
|
6431
|
-
* ```ts
|
|
6432
|
-
* ensurePathIsNonModuleName("/path/to/file.ext") === "/path/to/file.ext"
|
|
6433
|
-
* ensurePathIsNonModuleName("./path/to/file.ext") === "./path/to/file.ext"
|
|
6434
|
-
* ensurePathIsNonModuleName("../path/to/file.ext") === "../path/to/file.ext"
|
|
6435
|
-
* ensurePathIsNonModuleName("path/to/file.ext") === "./path/to/file.ext"
|
|
6436
|
-
* ```
|
|
6437
|
-
*/
|
|
6438
|
-
function ensurePathIsNonModuleName(path) {
|
|
6439
|
-
return !pathIsAbsolute(path) && !pathIsRelative(path) ? "./" + path : path;
|
|
6440
|
-
}
|
|
6441
|
-
ts.ensurePathIsNonModuleName = ensurePathIsNonModuleName;
|
|
6442
|
-
function changeAnyExtension(path, ext, extensions, ignoreCase) {
|
|
6443
|
-
var pathext = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(path, extensions, ignoreCase) : getAnyExtensionFromPath(path);
|
|
6444
|
-
return pathext ? path.slice(0, path.length - pathext.length) + (ts.startsWith(ext, ".") ? ext : "." + ext) : path;
|
|
6445
|
-
}
|
|
6446
|
-
ts.changeAnyExtension = changeAnyExtension;
|
|
6447
|
-
//// Path Comparisons
|
|
6448
|
-
// check path for these segments: '', '.'. '..'
|
|
6449
|
-
var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
|
|
6450
|
-
function comparePathsWorker(a, b, componentComparer) {
|
|
6451
|
-
if (a === b)
|
|
6452
|
-
return 0 /* EqualTo */;
|
|
6453
|
-
if (a === undefined)
|
|
6454
|
-
return -1 /* LessThan */;
|
|
6455
|
-
if (b === undefined)
|
|
6456
|
-
return 1 /* GreaterThan */;
|
|
6457
|
-
// NOTE: Performance optimization - shortcut if the root segments differ as there would be no
|
|
6458
|
-
// need to perform path reduction.
|
|
6459
|
-
var aRoot = a.substring(0, getRootLength(a));
|
|
6460
|
-
var bRoot = b.substring(0, getRootLength(b));
|
|
6461
|
-
var result = ts.compareStringsCaseInsensitive(aRoot, bRoot);
|
|
6462
|
-
if (result !== 0 /* EqualTo */) {
|
|
6463
|
-
return result;
|
|
6464
|
-
}
|
|
6465
|
-
// NOTE: Performance optimization - shortcut if there are no relative path segments in
|
|
6466
|
-
// the non-root portion of the path
|
|
6467
|
-
var aRest = a.substring(aRoot.length);
|
|
6468
|
-
var bRest = b.substring(bRoot.length);
|
|
6469
|
-
if (!relativePathSegmentRegExp.test(aRest) && !relativePathSegmentRegExp.test(bRest)) {
|
|
6470
|
-
return componentComparer(aRest, bRest);
|
|
6471
|
-
}
|
|
6472
|
-
// The path contains a relative path segment. Normalize the paths and perform a slower component
|
|
6473
|
-
// by component comparison.
|
|
6474
|
-
var aComponents = reducePathComponents(getPathComponents(a));
|
|
6475
|
-
var bComponents = reducePathComponents(getPathComponents(b));
|
|
6476
|
-
var sharedLength = Math.min(aComponents.length, bComponents.length);
|
|
6477
|
-
for (var i = 1; i < sharedLength; i++) {
|
|
6478
|
-
var result_2 = componentComparer(aComponents[i], bComponents[i]);
|
|
6479
|
-
if (result_2 !== 0 /* EqualTo */) {
|
|
6480
|
-
return result_2;
|
|
6481
|
-
}
|
|
6482
|
-
}
|
|
6483
|
-
return ts.compareValues(aComponents.length, bComponents.length);
|
|
6484
|
-
}
|
|
6485
|
-
/**
|
|
6486
|
-
* Performs a case-sensitive comparison of two paths. Path roots are always compared case-insensitively.
|
|
6487
|
-
*/
|
|
6488
|
-
function comparePathsCaseSensitive(a, b) {
|
|
6489
|
-
return comparePathsWorker(a, b, ts.compareStringsCaseSensitive);
|
|
6490
|
-
}
|
|
6491
|
-
ts.comparePathsCaseSensitive = comparePathsCaseSensitive;
|
|
6492
|
-
/**
|
|
6493
|
-
* Performs a case-insensitive comparison of two paths.
|
|
6494
|
-
*/
|
|
6495
|
-
function comparePathsCaseInsensitive(a, b) {
|
|
6496
|
-
return comparePathsWorker(a, b, ts.compareStringsCaseInsensitive);
|
|
6497
|
-
}
|
|
6498
|
-
ts.comparePathsCaseInsensitive = comparePathsCaseInsensitive;
|
|
6499
|
-
function comparePaths(a, b, currentDirectory, ignoreCase) {
|
|
6500
|
-
if (typeof currentDirectory === "string") {
|
|
6501
|
-
a = combinePaths(currentDirectory, a);
|
|
6502
|
-
b = combinePaths(currentDirectory, b);
|
|
6503
|
-
}
|
|
6504
|
-
else if (typeof currentDirectory === "boolean") {
|
|
6505
|
-
ignoreCase = currentDirectory;
|
|
6506
|
-
}
|
|
6507
|
-
return comparePathsWorker(a, b, ts.getStringComparer(ignoreCase));
|
|
6508
|
-
}
|
|
6509
|
-
ts.comparePaths = comparePaths;
|
|
6510
|
-
function containsPath(parent, child, currentDirectory, ignoreCase) {
|
|
6511
|
-
if (typeof currentDirectory === "string") {
|
|
6512
|
-
parent = combinePaths(currentDirectory, parent);
|
|
6513
|
-
child = combinePaths(currentDirectory, child);
|
|
6514
|
-
}
|
|
6515
|
-
else if (typeof currentDirectory === "boolean") {
|
|
6516
|
-
ignoreCase = currentDirectory;
|
|
6517
|
-
}
|
|
6518
|
-
if (parent === undefined || child === undefined)
|
|
6519
|
-
return false;
|
|
6520
|
-
if (parent === child)
|
|
6521
|
-
return true;
|
|
6522
|
-
var parentComponents = reducePathComponents(getPathComponents(parent));
|
|
6523
|
-
var childComponents = reducePathComponents(getPathComponents(child));
|
|
6524
|
-
if (childComponents.length < parentComponents.length) {
|
|
6525
|
-
return false;
|
|
6526
|
-
}
|
|
6527
|
-
var componentEqualityComparer = ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive;
|
|
6528
|
-
for (var i = 0; i < parentComponents.length; i++) {
|
|
6529
|
-
var equalityComparer = i === 0 ? ts.equateStringsCaseInsensitive : componentEqualityComparer;
|
|
6530
|
-
if (!equalityComparer(parentComponents[i], childComponents[i])) {
|
|
6531
|
-
return false;
|
|
6532
|
-
}
|
|
6533
|
-
}
|
|
6534
|
-
return true;
|
|
6535
|
-
}
|
|
6536
|
-
ts.containsPath = containsPath;
|
|
6537
|
-
/**
|
|
6538
|
-
* Determines whether `fileName` starts with the specified `directoryName` using the provided path canonicalization callback.
|
|
6539
|
-
* Comparison is case-sensitive between the canonical paths.
|
|
6540
|
-
*
|
|
6541
|
-
* Use `containsPath` if file names are not already reduced and absolute.
|
|
6542
|
-
*/
|
|
6543
|
-
function startsWithDirectory(fileName, directoryName, getCanonicalFileName) {
|
|
6544
|
-
var canonicalFileName = getCanonicalFileName(fileName);
|
|
6545
|
-
var canonicalDirectoryName = getCanonicalFileName(directoryName);
|
|
6546
|
-
return ts.startsWith(canonicalFileName, canonicalDirectoryName + "/") || ts.startsWith(canonicalFileName, canonicalDirectoryName + "\\");
|
|
6547
|
-
}
|
|
6548
|
-
ts.startsWithDirectory = startsWithDirectory;
|
|
6549
|
-
//// Relative Paths
|
|
6550
|
-
function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) {
|
|
6551
|
-
var fromComponents = reducePathComponents(getPathComponents(from));
|
|
6552
|
-
var toComponents = reducePathComponents(getPathComponents(to));
|
|
6553
|
-
var start;
|
|
6554
|
-
for (start = 0; start < fromComponents.length && start < toComponents.length; start++) {
|
|
6555
|
-
var fromComponent = getCanonicalFileName(fromComponents[start]);
|
|
6556
|
-
var toComponent = getCanonicalFileName(toComponents[start]);
|
|
6557
|
-
var comparer = start === 0 ? ts.equateStringsCaseInsensitive : stringEqualityComparer;
|
|
6558
|
-
if (!comparer(fromComponent, toComponent))
|
|
6559
|
-
break;
|
|
6560
|
-
}
|
|
6561
|
-
if (start === 0) {
|
|
6562
|
-
return toComponents;
|
|
6563
|
-
}
|
|
6564
|
-
var components = toComponents.slice(start);
|
|
6565
|
-
var relative = [];
|
|
6566
|
-
for (; start < fromComponents.length; start++) {
|
|
6567
|
-
relative.push("..");
|
|
6568
|
-
}
|
|
6569
|
-
return __spreadArray(__spreadArray([""], relative, true), components, true);
|
|
6570
|
-
}
|
|
6571
|
-
ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
|
|
6572
|
-
function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
|
|
6573
|
-
ts.Debug.assert((getRootLength(fromDirectory) > 0) === (getRootLength(to) > 0), "Paths must either both be absolute or both be relative");
|
|
6574
|
-
var getCanonicalFileName = typeof getCanonicalFileNameOrIgnoreCase === "function" ? getCanonicalFileNameOrIgnoreCase : ts.identity;
|
|
6575
|
-
var ignoreCase = typeof getCanonicalFileNameOrIgnoreCase === "boolean" ? getCanonicalFileNameOrIgnoreCase : false;
|
|
6576
|
-
var pathComponents = getPathComponentsRelativeTo(fromDirectory, to, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive, getCanonicalFileName);
|
|
6577
|
-
return getPathFromPathComponents(pathComponents);
|
|
6578
|
-
}
|
|
6579
|
-
ts.getRelativePathFromDirectory = getRelativePathFromDirectory;
|
|
6580
|
-
function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) {
|
|
6581
|
-
return !isRootedDiskPath(absoluteOrRelativePath)
|
|
6582
|
-
? absoluteOrRelativePath
|
|
6583
|
-
: getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
|
|
6584
|
-
}
|
|
6585
|
-
ts.convertToRelativePath = convertToRelativePath;
|
|
6586
|
-
function getRelativePathFromFile(from, to, getCanonicalFileName) {
|
|
6587
|
-
return ensurePathIsNonModuleName(getRelativePathFromDirectory(getDirectoryPath(from), to, getCanonicalFileName));
|
|
6588
|
-
}
|
|
6589
|
-
ts.getRelativePathFromFile = getRelativePathFromFile;
|
|
6590
|
-
function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
|
|
6591
|
-
var pathComponents = getPathComponentsRelativeTo(resolvePath(currentDirectory, directoryPathOrUrl), resolvePath(currentDirectory, relativeOrAbsolutePath), ts.equateStringsCaseSensitive, getCanonicalFileName);
|
|
6592
|
-
var firstComponent = pathComponents[0];
|
|
6593
|
-
if (isAbsolutePathAnUrl && isRootedDiskPath(firstComponent)) {
|
|
6594
|
-
var prefix = firstComponent.charAt(0) === ts.directorySeparator ? "file://" : "file:///";
|
|
6595
|
-
pathComponents[0] = prefix + firstComponent;
|
|
6596
|
-
}
|
|
6597
|
-
return getPathFromPathComponents(pathComponents);
|
|
6598
|
-
}
|
|
6599
|
-
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
|
|
6600
|
-
function forEachAncestorDirectory(directory, callback) {
|
|
6601
|
-
while (true) {
|
|
6602
|
-
var result = callback(directory);
|
|
6603
|
-
if (result !== undefined) {
|
|
6604
|
-
return result;
|
|
6605
|
-
}
|
|
6606
|
-
var parentPath = getDirectoryPath(directory);
|
|
6607
|
-
if (parentPath === directory) {
|
|
6608
|
-
return undefined;
|
|
6609
|
-
}
|
|
6610
|
-
directory = parentPath;
|
|
6611
|
-
}
|
|
6612
|
-
}
|
|
6613
|
-
ts.forEachAncestorDirectory = forEachAncestorDirectory;
|
|
6614
|
-
function isNodeModulesDirectory(dirPath) {
|
|
6615
|
-
return ts.endsWith(dirPath, "/node_modules");
|
|
6616
|
-
}
|
|
6617
|
-
ts.isNodeModulesDirectory = isNodeModulesDirectory;
|
|
6618
|
-
})(ts || (ts = {}));
|
|
6619
5921
|
var ts;
|
|
6620
5922
|
(function (ts) {
|
|
6621
5923
|
/**
|
|
@@ -8048,6 +7350,704 @@ var ts;
|
|
|
8048
7350
|
ts.Debug.isDebugging = true;
|
|
8049
7351
|
}
|
|
8050
7352
|
})(ts || (ts = {}));
|
|
7353
|
+
/* @internal */
|
|
7354
|
+
var ts;
|
|
7355
|
+
(function (ts) {
|
|
7356
|
+
/**
|
|
7357
|
+
* Internally, we represent paths as strings with '/' as the directory separator.
|
|
7358
|
+
* When we make system calls (eg: LanguageServiceHost.getDirectory()),
|
|
7359
|
+
* we expect the host to correctly handle paths in our specified format.
|
|
7360
|
+
*/
|
|
7361
|
+
ts.directorySeparator = "/";
|
|
7362
|
+
ts.altDirectorySeparator = "\\";
|
|
7363
|
+
var urlSchemeSeparator = "://";
|
|
7364
|
+
var backslashRegExp = /\\/g;
|
|
7365
|
+
//// Path Tests
|
|
7366
|
+
/**
|
|
7367
|
+
* Determines whether a charCode corresponds to `/` or `\`.
|
|
7368
|
+
*/
|
|
7369
|
+
function isAnyDirectorySeparator(charCode) {
|
|
7370
|
+
return charCode === 47 /* slash */ || charCode === 92 /* backslash */;
|
|
7371
|
+
}
|
|
7372
|
+
ts.isAnyDirectorySeparator = isAnyDirectorySeparator;
|
|
7373
|
+
/**
|
|
7374
|
+
* Determines whether a path starts with a URL scheme (e.g. starts with `http://`, `ftp://`, `file://`, etc.).
|
|
7375
|
+
*/
|
|
7376
|
+
function isUrl(path) {
|
|
7377
|
+
return getEncodedRootLength(path) < 0;
|
|
7378
|
+
}
|
|
7379
|
+
ts.isUrl = isUrl;
|
|
7380
|
+
/**
|
|
7381
|
+
* Determines whether a path is an absolute disk path (e.g. starts with `/`, or a dos path
|
|
7382
|
+
* like `c:`, `c:\` or `c:/`).
|
|
7383
|
+
*/
|
|
7384
|
+
function isRootedDiskPath(path) {
|
|
7385
|
+
return getEncodedRootLength(path) > 0;
|
|
7386
|
+
}
|
|
7387
|
+
ts.isRootedDiskPath = isRootedDiskPath;
|
|
7388
|
+
/**
|
|
7389
|
+
* Determines whether a path consists only of a path root.
|
|
7390
|
+
*/
|
|
7391
|
+
function isDiskPathRoot(path) {
|
|
7392
|
+
var rootLength = getEncodedRootLength(path);
|
|
7393
|
+
return rootLength > 0 && rootLength === path.length;
|
|
7394
|
+
}
|
|
7395
|
+
ts.isDiskPathRoot = isDiskPathRoot;
|
|
7396
|
+
/**
|
|
7397
|
+
* Determines whether a path starts with an absolute path component (i.e. `/`, `c:/`, `file://`, etc.).
|
|
7398
|
+
*
|
|
7399
|
+
* ```ts
|
|
7400
|
+
* // POSIX
|
|
7401
|
+
* pathIsAbsolute("/path/to/file.ext") === true
|
|
7402
|
+
* // DOS
|
|
7403
|
+
* pathIsAbsolute("c:/path/to/file.ext") === true
|
|
7404
|
+
* // URL
|
|
7405
|
+
* pathIsAbsolute("file:///path/to/file.ext") === true
|
|
7406
|
+
* // Non-absolute
|
|
7407
|
+
* pathIsAbsolute("path/to/file.ext") === false
|
|
7408
|
+
* pathIsAbsolute("./path/to/file.ext") === false
|
|
7409
|
+
* ```
|
|
7410
|
+
*/
|
|
7411
|
+
function pathIsAbsolute(path) {
|
|
7412
|
+
return getEncodedRootLength(path) !== 0;
|
|
7413
|
+
}
|
|
7414
|
+
ts.pathIsAbsolute = pathIsAbsolute;
|
|
7415
|
+
/**
|
|
7416
|
+
* Determines whether a path starts with a relative path component (i.e. `.` or `..`).
|
|
7417
|
+
*/
|
|
7418
|
+
function pathIsRelative(path) {
|
|
7419
|
+
return /^\.\.?($|[\\/])/.test(path);
|
|
7420
|
+
}
|
|
7421
|
+
ts.pathIsRelative = pathIsRelative;
|
|
7422
|
+
/**
|
|
7423
|
+
* Determines whether a path is neither relative nor absolute, e.g. "path/to/file".
|
|
7424
|
+
* Also known misleadingly as "non-relative".
|
|
7425
|
+
*/
|
|
7426
|
+
function pathIsBareSpecifier(path) {
|
|
7427
|
+
return !pathIsAbsolute(path) && !pathIsRelative(path);
|
|
7428
|
+
}
|
|
7429
|
+
ts.pathIsBareSpecifier = pathIsBareSpecifier;
|
|
7430
|
+
function hasExtension(fileName) {
|
|
7431
|
+
return ts.stringContains(getBaseFileName(fileName), ".");
|
|
7432
|
+
}
|
|
7433
|
+
ts.hasExtension = hasExtension;
|
|
7434
|
+
function fileExtensionIs(path, extension) {
|
|
7435
|
+
return path.length > extension.length && ts.endsWith(path, extension);
|
|
7436
|
+
}
|
|
7437
|
+
ts.fileExtensionIs = fileExtensionIs;
|
|
7438
|
+
function fileExtensionIsOneOf(path, extensions) {
|
|
7439
|
+
for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {
|
|
7440
|
+
var extension = extensions_1[_i];
|
|
7441
|
+
if (fileExtensionIs(path, extension)) {
|
|
7442
|
+
return true;
|
|
7443
|
+
}
|
|
7444
|
+
}
|
|
7445
|
+
return false;
|
|
7446
|
+
}
|
|
7447
|
+
ts.fileExtensionIsOneOf = fileExtensionIsOneOf;
|
|
7448
|
+
/**
|
|
7449
|
+
* Determines whether a path has a trailing separator (`/` or `\\`).
|
|
7450
|
+
*/
|
|
7451
|
+
function hasTrailingDirectorySeparator(path) {
|
|
7452
|
+
return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1));
|
|
7453
|
+
}
|
|
7454
|
+
ts.hasTrailingDirectorySeparator = hasTrailingDirectorySeparator;
|
|
7455
|
+
//// Path Parsing
|
|
7456
|
+
function isVolumeCharacter(charCode) {
|
|
7457
|
+
return (charCode >= 97 /* a */ && charCode <= 122 /* z */) ||
|
|
7458
|
+
(charCode >= 65 /* A */ && charCode <= 90 /* Z */);
|
|
7459
|
+
}
|
|
7460
|
+
function getFileUrlVolumeSeparatorEnd(url, start) {
|
|
7461
|
+
var ch0 = url.charCodeAt(start);
|
|
7462
|
+
if (ch0 === 58 /* colon */)
|
|
7463
|
+
return start + 1;
|
|
7464
|
+
if (ch0 === 37 /* percent */ && url.charCodeAt(start + 1) === 51 /* _3 */) {
|
|
7465
|
+
var ch2 = url.charCodeAt(start + 2);
|
|
7466
|
+
if (ch2 === 97 /* a */ || ch2 === 65 /* A */)
|
|
7467
|
+
return start + 3;
|
|
7468
|
+
}
|
|
7469
|
+
return -1;
|
|
7470
|
+
}
|
|
7471
|
+
/**
|
|
7472
|
+
* Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files").
|
|
7473
|
+
* If the root is part of a URL, the twos-complement of the root length is returned.
|
|
7474
|
+
*/
|
|
7475
|
+
function getEncodedRootLength(path) {
|
|
7476
|
+
if (!path)
|
|
7477
|
+
return 0;
|
|
7478
|
+
var ch0 = path.charCodeAt(0);
|
|
7479
|
+
// POSIX or UNC
|
|
7480
|
+
if (ch0 === 47 /* slash */ || ch0 === 92 /* backslash */) {
|
|
7481
|
+
if (path.charCodeAt(1) !== ch0)
|
|
7482
|
+
return 1; // POSIX: "/" (or non-normalized "\")
|
|
7483
|
+
var p1 = path.indexOf(ch0 === 47 /* slash */ ? ts.directorySeparator : ts.altDirectorySeparator, 2);
|
|
7484
|
+
if (p1 < 0)
|
|
7485
|
+
return path.length; // UNC: "//server" or "\\server"
|
|
7486
|
+
return p1 + 1; // UNC: "//server/" or "\\server\"
|
|
7487
|
+
}
|
|
7488
|
+
// DOS
|
|
7489
|
+
if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58 /* colon */) {
|
|
7490
|
+
var ch2 = path.charCodeAt(2);
|
|
7491
|
+
if (ch2 === 47 /* slash */ || ch2 === 92 /* backslash */)
|
|
7492
|
+
return 3; // DOS: "c:/" or "c:\"
|
|
7493
|
+
if (path.length === 2)
|
|
7494
|
+
return 2; // DOS: "c:" (but not "c:d")
|
|
7495
|
+
}
|
|
7496
|
+
// URL
|
|
7497
|
+
var schemeEnd = path.indexOf(urlSchemeSeparator);
|
|
7498
|
+
if (schemeEnd !== -1) {
|
|
7499
|
+
var authorityStart = schemeEnd + urlSchemeSeparator.length;
|
|
7500
|
+
var authorityEnd = path.indexOf(ts.directorySeparator, authorityStart);
|
|
7501
|
+
if (authorityEnd !== -1) { // URL: "file:///", "file://server/", "file://server/path"
|
|
7502
|
+
// For local "file" URLs, include the leading DOS volume (if present).
|
|
7503
|
+
// Per https://www.ietf.org/rfc/rfc1738.txt, a host of "" or "localhost" is a
|
|
7504
|
+
// special case interpreted as "the machine from which the URL is being interpreted".
|
|
7505
|
+
var scheme = path.slice(0, schemeEnd);
|
|
7506
|
+
var authority = path.slice(authorityStart, authorityEnd);
|
|
7507
|
+
if (scheme === "file" && (authority === "" || authority === "localhost") &&
|
|
7508
|
+
isVolumeCharacter(path.charCodeAt(authorityEnd + 1))) {
|
|
7509
|
+
var volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2);
|
|
7510
|
+
if (volumeSeparatorEnd !== -1) {
|
|
7511
|
+
if (path.charCodeAt(volumeSeparatorEnd) === 47 /* slash */) {
|
|
7512
|
+
// URL: "file:///c:/", "file://localhost/c:/", "file:///c%3a/", "file://localhost/c%3a/"
|
|
7513
|
+
return ~(volumeSeparatorEnd + 1);
|
|
7514
|
+
}
|
|
7515
|
+
if (volumeSeparatorEnd === path.length) {
|
|
7516
|
+
// URL: "file:///c:", "file://localhost/c:", "file:///c$3a", "file://localhost/c%3a"
|
|
7517
|
+
// but not "file:///c:d" or "file:///c%3ad"
|
|
7518
|
+
return ~volumeSeparatorEnd;
|
|
7519
|
+
}
|
|
7520
|
+
}
|
|
7521
|
+
}
|
|
7522
|
+
return ~(authorityEnd + 1); // URL: "file://server/", "http://server/"
|
|
7523
|
+
}
|
|
7524
|
+
return ~path.length; // URL: "file://server", "http://server"
|
|
7525
|
+
}
|
|
7526
|
+
// relative
|
|
7527
|
+
return 0;
|
|
7528
|
+
}
|
|
7529
|
+
/**
|
|
7530
|
+
* Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files").
|
|
7531
|
+
*
|
|
7532
|
+
* For example:
|
|
7533
|
+
* ```ts
|
|
7534
|
+
* getRootLength("a") === 0 // ""
|
|
7535
|
+
* getRootLength("/") === 1 // "/"
|
|
7536
|
+
* getRootLength("c:") === 2 // "c:"
|
|
7537
|
+
* getRootLength("c:d") === 0 // ""
|
|
7538
|
+
* getRootLength("c:/") === 3 // "c:/"
|
|
7539
|
+
* getRootLength("c:\\") === 3 // "c:\\"
|
|
7540
|
+
* getRootLength("//server") === 7 // "//server"
|
|
7541
|
+
* getRootLength("//server/share") === 8 // "//server/"
|
|
7542
|
+
* getRootLength("\\\\server") === 7 // "\\\\server"
|
|
7543
|
+
* getRootLength("\\\\server\\share") === 8 // "\\\\server\\"
|
|
7544
|
+
* getRootLength("file:///path") === 8 // "file:///"
|
|
7545
|
+
* getRootLength("file:///c:") === 10 // "file:///c:"
|
|
7546
|
+
* getRootLength("file:///c:d") === 8 // "file:///"
|
|
7547
|
+
* getRootLength("file:///c:/path") === 11 // "file:///c:/"
|
|
7548
|
+
* getRootLength("file://server") === 13 // "file://server"
|
|
7549
|
+
* getRootLength("file://server/path") === 14 // "file://server/"
|
|
7550
|
+
* getRootLength("http://server") === 13 // "http://server"
|
|
7551
|
+
* getRootLength("http://server/path") === 14 // "http://server/"
|
|
7552
|
+
* ```
|
|
7553
|
+
*/
|
|
7554
|
+
function getRootLength(path) {
|
|
7555
|
+
var rootLength = getEncodedRootLength(path);
|
|
7556
|
+
return rootLength < 0 ? ~rootLength : rootLength;
|
|
7557
|
+
}
|
|
7558
|
+
ts.getRootLength = getRootLength;
|
|
7559
|
+
function getDirectoryPath(path) {
|
|
7560
|
+
path = normalizeSlashes(path);
|
|
7561
|
+
// If the path provided is itself the root, then return it.
|
|
7562
|
+
var rootLength = getRootLength(path);
|
|
7563
|
+
if (rootLength === path.length)
|
|
7564
|
+
return path;
|
|
7565
|
+
// return the leading portion of the path up to the last (non-terminal) directory separator
|
|
7566
|
+
// but not including any trailing directory separator.
|
|
7567
|
+
path = removeTrailingDirectorySeparator(path);
|
|
7568
|
+
return path.slice(0, Math.max(rootLength, path.lastIndexOf(ts.directorySeparator)));
|
|
7569
|
+
}
|
|
7570
|
+
ts.getDirectoryPath = getDirectoryPath;
|
|
7571
|
+
function getBaseFileName(path, extensions, ignoreCase) {
|
|
7572
|
+
path = normalizeSlashes(path);
|
|
7573
|
+
// if the path provided is itself the root, then it has not file name.
|
|
7574
|
+
var rootLength = getRootLength(path);
|
|
7575
|
+
if (rootLength === path.length)
|
|
7576
|
+
return "";
|
|
7577
|
+
// return the trailing portion of the path starting after the last (non-terminal) directory
|
|
7578
|
+
// separator but not including any trailing directory separator.
|
|
7579
|
+
path = removeTrailingDirectorySeparator(path);
|
|
7580
|
+
var name = path.slice(Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator) + 1));
|
|
7581
|
+
var extension = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(name, extensions, ignoreCase) : undefined;
|
|
7582
|
+
return extension ? name.slice(0, name.length - extension.length) : name;
|
|
7583
|
+
}
|
|
7584
|
+
ts.getBaseFileName = getBaseFileName;
|
|
7585
|
+
function tryGetExtensionFromPath(path, extension, stringEqualityComparer) {
|
|
7586
|
+
if (!ts.startsWith(extension, "."))
|
|
7587
|
+
extension = "." + extension;
|
|
7588
|
+
if (path.length >= extension.length && path.charCodeAt(path.length - extension.length) === 46 /* dot */) {
|
|
7589
|
+
var pathExtension = path.slice(path.length - extension.length);
|
|
7590
|
+
if (stringEqualityComparer(pathExtension, extension)) {
|
|
7591
|
+
return pathExtension;
|
|
7592
|
+
}
|
|
7593
|
+
}
|
|
7594
|
+
}
|
|
7595
|
+
function getAnyExtensionFromPathWorker(path, extensions, stringEqualityComparer) {
|
|
7596
|
+
if (typeof extensions === "string") {
|
|
7597
|
+
return tryGetExtensionFromPath(path, extensions, stringEqualityComparer) || "";
|
|
7598
|
+
}
|
|
7599
|
+
for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) {
|
|
7600
|
+
var extension = extensions_2[_i];
|
|
7601
|
+
var result = tryGetExtensionFromPath(path, extension, stringEqualityComparer);
|
|
7602
|
+
if (result)
|
|
7603
|
+
return result;
|
|
7604
|
+
}
|
|
7605
|
+
return "";
|
|
7606
|
+
}
|
|
7607
|
+
function getAnyExtensionFromPath(path, extensions, ignoreCase) {
|
|
7608
|
+
// Retrieves any string from the final "." onwards from a base file name.
|
|
7609
|
+
// Unlike extensionFromPath, which throws an exception on unrecognized extensions.
|
|
7610
|
+
if (extensions) {
|
|
7611
|
+
return getAnyExtensionFromPathWorker(removeTrailingDirectorySeparator(path), extensions, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive);
|
|
7612
|
+
}
|
|
7613
|
+
var baseFileName = getBaseFileName(path);
|
|
7614
|
+
var extensionIndex = baseFileName.lastIndexOf(".");
|
|
7615
|
+
if (extensionIndex >= 0) {
|
|
7616
|
+
return baseFileName.substring(extensionIndex);
|
|
7617
|
+
}
|
|
7618
|
+
return "";
|
|
7619
|
+
}
|
|
7620
|
+
ts.getAnyExtensionFromPath = getAnyExtensionFromPath;
|
|
7621
|
+
function pathComponents(path, rootLength) {
|
|
7622
|
+
var root = path.substring(0, rootLength);
|
|
7623
|
+
var rest = path.substring(rootLength).split(ts.directorySeparator);
|
|
7624
|
+
if (rest.length && !ts.lastOrUndefined(rest))
|
|
7625
|
+
rest.pop();
|
|
7626
|
+
return __spreadArray([root], rest, true);
|
|
7627
|
+
}
|
|
7628
|
+
/**
|
|
7629
|
+
* Parse a path into an array containing a root component (at index 0) and zero or more path
|
|
7630
|
+
* components (at indices > 0). The result is not normalized.
|
|
7631
|
+
* If the path is relative, the root component is `""`.
|
|
7632
|
+
* If the path is absolute, the root component includes the first path separator (`/`).
|
|
7633
|
+
*
|
|
7634
|
+
* ```ts
|
|
7635
|
+
* // POSIX
|
|
7636
|
+
* getPathComponents("/path/to/file.ext") === ["/", "path", "to", "file.ext"]
|
|
7637
|
+
* getPathComponents("/path/to/") === ["/", "path", "to"]
|
|
7638
|
+
* getPathComponents("/") === ["/"]
|
|
7639
|
+
* // DOS
|
|
7640
|
+
* getPathComponents("c:/path/to/file.ext") === ["c:/", "path", "to", "file.ext"]
|
|
7641
|
+
* getPathComponents("c:/path/to/") === ["c:/", "path", "to"]
|
|
7642
|
+
* getPathComponents("c:/") === ["c:/"]
|
|
7643
|
+
* getPathComponents("c:") === ["c:"]
|
|
7644
|
+
* // URL
|
|
7645
|
+
* getPathComponents("http://typescriptlang.org/path/to/file.ext") === ["http://typescriptlang.org/", "path", "to", "file.ext"]
|
|
7646
|
+
* getPathComponents("http://typescriptlang.org/path/to/") === ["http://typescriptlang.org/", "path", "to"]
|
|
7647
|
+
* getPathComponents("http://typescriptlang.org/") === ["http://typescriptlang.org/"]
|
|
7648
|
+
* getPathComponents("http://typescriptlang.org") === ["http://typescriptlang.org"]
|
|
7649
|
+
* getPathComponents("file://server/path/to/file.ext") === ["file://server/", "path", "to", "file.ext"]
|
|
7650
|
+
* getPathComponents("file://server/path/to/") === ["file://server/", "path", "to"]
|
|
7651
|
+
* getPathComponents("file://server/") === ["file://server/"]
|
|
7652
|
+
* getPathComponents("file://server") === ["file://server"]
|
|
7653
|
+
* getPathComponents("file:///path/to/file.ext") === ["file:///", "path", "to", "file.ext"]
|
|
7654
|
+
* getPathComponents("file:///path/to/") === ["file:///", "path", "to"]
|
|
7655
|
+
* getPathComponents("file:///") === ["file:///"]
|
|
7656
|
+
* getPathComponents("file://") === ["file://"]
|
|
7657
|
+
*/
|
|
7658
|
+
function getPathComponents(path, currentDirectory) {
|
|
7659
|
+
if (currentDirectory === void 0) { currentDirectory = ""; }
|
|
7660
|
+
path = combinePaths(currentDirectory, path);
|
|
7661
|
+
return pathComponents(path, getRootLength(path));
|
|
7662
|
+
}
|
|
7663
|
+
ts.getPathComponents = getPathComponents;
|
|
7664
|
+
//// Path Formatting
|
|
7665
|
+
/**
|
|
7666
|
+
* Formats a parsed path consisting of a root component (at index 0) and zero or more path
|
|
7667
|
+
* segments (at indices > 0).
|
|
7668
|
+
*
|
|
7669
|
+
* ```ts
|
|
7670
|
+
* getPathFromPathComponents(["/", "path", "to", "file.ext"]) === "/path/to/file.ext"
|
|
7671
|
+
* ```
|
|
7672
|
+
*/
|
|
7673
|
+
function getPathFromPathComponents(pathComponents) {
|
|
7674
|
+
if (pathComponents.length === 0)
|
|
7675
|
+
return "";
|
|
7676
|
+
var root = pathComponents[0] && ensureTrailingDirectorySeparator(pathComponents[0]);
|
|
7677
|
+
return root + pathComponents.slice(1).join(ts.directorySeparator);
|
|
7678
|
+
}
|
|
7679
|
+
ts.getPathFromPathComponents = getPathFromPathComponents;
|
|
7680
|
+
//// Path Normalization
|
|
7681
|
+
/**
|
|
7682
|
+
* Normalize path separators, converting `\` into `/`.
|
|
7683
|
+
*/
|
|
7684
|
+
function normalizeSlashes(path) {
|
|
7685
|
+
var index = path.indexOf("\\");
|
|
7686
|
+
if (index === -1) {
|
|
7687
|
+
return path;
|
|
7688
|
+
}
|
|
7689
|
+
backslashRegExp.lastIndex = index; // prime regex with known position
|
|
7690
|
+
return path.replace(backslashRegExp, ts.directorySeparator);
|
|
7691
|
+
}
|
|
7692
|
+
ts.normalizeSlashes = normalizeSlashes;
|
|
7693
|
+
/**
|
|
7694
|
+
* Reduce an array of path components to a more simplified path by navigating any
|
|
7695
|
+
* `"."` or `".."` entries in the path.
|
|
7696
|
+
*/
|
|
7697
|
+
function reducePathComponents(components) {
|
|
7698
|
+
if (!ts.some(components))
|
|
7699
|
+
return [];
|
|
7700
|
+
var reduced = [components[0]];
|
|
7701
|
+
for (var i = 1; i < components.length; i++) {
|
|
7702
|
+
var component = components[i];
|
|
7703
|
+
if (!component)
|
|
7704
|
+
continue;
|
|
7705
|
+
if (component === ".")
|
|
7706
|
+
continue;
|
|
7707
|
+
if (component === "..") {
|
|
7708
|
+
if (reduced.length > 1) {
|
|
7709
|
+
if (reduced[reduced.length - 1] !== "..") {
|
|
7710
|
+
reduced.pop();
|
|
7711
|
+
continue;
|
|
7712
|
+
}
|
|
7713
|
+
}
|
|
7714
|
+
else if (reduced[0])
|
|
7715
|
+
continue;
|
|
7716
|
+
}
|
|
7717
|
+
reduced.push(component);
|
|
7718
|
+
}
|
|
7719
|
+
return reduced;
|
|
7720
|
+
}
|
|
7721
|
+
ts.reducePathComponents = reducePathComponents;
|
|
7722
|
+
/**
|
|
7723
|
+
* Combines paths. If a path is absolute, it replaces any previous path. Relative paths are not simplified.
|
|
7724
|
+
*
|
|
7725
|
+
* ```ts
|
|
7726
|
+
* // Non-rooted
|
|
7727
|
+
* combinePaths("path", "to", "file.ext") === "path/to/file.ext"
|
|
7728
|
+
* combinePaths("path", "dir", "..", "to", "file.ext") === "path/dir/../to/file.ext"
|
|
7729
|
+
* // POSIX
|
|
7730
|
+
* combinePaths("/path", "to", "file.ext") === "/path/to/file.ext"
|
|
7731
|
+
* combinePaths("/path", "/to", "file.ext") === "/to/file.ext"
|
|
7732
|
+
* // DOS
|
|
7733
|
+
* combinePaths("c:/path", "to", "file.ext") === "c:/path/to/file.ext"
|
|
7734
|
+
* combinePaths("c:/path", "c:/to", "file.ext") === "c:/to/file.ext"
|
|
7735
|
+
* // URL
|
|
7736
|
+
* combinePaths("file:///path", "to", "file.ext") === "file:///path/to/file.ext"
|
|
7737
|
+
* combinePaths("file:///path", "file:///to", "file.ext") === "file:///to/file.ext"
|
|
7738
|
+
* ```
|
|
7739
|
+
*/
|
|
7740
|
+
function combinePaths(path) {
|
|
7741
|
+
var paths = [];
|
|
7742
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
7743
|
+
paths[_i - 1] = arguments[_i];
|
|
7744
|
+
}
|
|
7745
|
+
if (path)
|
|
7746
|
+
path = normalizeSlashes(path);
|
|
7747
|
+
for (var _a = 0, paths_1 = paths; _a < paths_1.length; _a++) {
|
|
7748
|
+
var relativePath = paths_1[_a];
|
|
7749
|
+
if (!relativePath)
|
|
7750
|
+
continue;
|
|
7751
|
+
relativePath = normalizeSlashes(relativePath);
|
|
7752
|
+
if (!path || getRootLength(relativePath) !== 0) {
|
|
7753
|
+
path = relativePath;
|
|
7754
|
+
}
|
|
7755
|
+
else {
|
|
7756
|
+
path = ensureTrailingDirectorySeparator(path) + relativePath;
|
|
7757
|
+
}
|
|
7758
|
+
}
|
|
7759
|
+
return path;
|
|
7760
|
+
}
|
|
7761
|
+
ts.combinePaths = combinePaths;
|
|
7762
|
+
/**
|
|
7763
|
+
* Combines and resolves paths. If a path is absolute, it replaces any previous path. Any
|
|
7764
|
+
* `.` and `..` path components are resolved. Trailing directory separators are preserved.
|
|
7765
|
+
*
|
|
7766
|
+
* ```ts
|
|
7767
|
+
* resolvePath("/path", "to", "file.ext") === "path/to/file.ext"
|
|
7768
|
+
* resolvePath("/path", "to", "file.ext/") === "path/to/file.ext/"
|
|
7769
|
+
* resolvePath("/path", "dir", "..", "to", "file.ext") === "path/to/file.ext"
|
|
7770
|
+
* ```
|
|
7771
|
+
*/
|
|
7772
|
+
function resolvePath(path) {
|
|
7773
|
+
var paths = [];
|
|
7774
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
7775
|
+
paths[_i - 1] = arguments[_i];
|
|
7776
|
+
}
|
|
7777
|
+
return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
|
|
7778
|
+
}
|
|
7779
|
+
ts.resolvePath = resolvePath;
|
|
7780
|
+
/**
|
|
7781
|
+
* Parse a path into an array containing a root component (at index 0) and zero or more path
|
|
7782
|
+
* components (at indices > 0). The result is normalized.
|
|
7783
|
+
* If the path is relative, the root component is `""`.
|
|
7784
|
+
* If the path is absolute, the root component includes the first path separator (`/`).
|
|
7785
|
+
*
|
|
7786
|
+
* ```ts
|
|
7787
|
+
* getNormalizedPathComponents("to/dir/../file.ext", "/path/") === ["/", "path", "to", "file.ext"]
|
|
7788
|
+
* ```
|
|
7789
|
+
*/
|
|
7790
|
+
function getNormalizedPathComponents(path, currentDirectory) {
|
|
7791
|
+
return reducePathComponents(getPathComponents(path, currentDirectory));
|
|
7792
|
+
}
|
|
7793
|
+
ts.getNormalizedPathComponents = getNormalizedPathComponents;
|
|
7794
|
+
function getNormalizedAbsolutePath(fileName, currentDirectory) {
|
|
7795
|
+
return getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
|
|
7796
|
+
}
|
|
7797
|
+
ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
|
|
7798
|
+
function normalizePath(path) {
|
|
7799
|
+
path = normalizeSlashes(path);
|
|
7800
|
+
// Most paths don't require normalization
|
|
7801
|
+
if (!relativePathSegmentRegExp.test(path)) {
|
|
7802
|
+
return path;
|
|
7803
|
+
}
|
|
7804
|
+
// Some paths only require cleanup of `/./` or leading `./`
|
|
7805
|
+
var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
|
|
7806
|
+
if (simplified !== path) {
|
|
7807
|
+
path = simplified;
|
|
7808
|
+
if (!relativePathSegmentRegExp.test(path)) {
|
|
7809
|
+
return path;
|
|
7810
|
+
}
|
|
7811
|
+
}
|
|
7812
|
+
// Other paths require full normalization
|
|
7813
|
+
var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
|
|
7814
|
+
return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
|
|
7815
|
+
}
|
|
7816
|
+
ts.normalizePath = normalizePath;
|
|
7817
|
+
function getPathWithoutRoot(pathComponents) {
|
|
7818
|
+
if (pathComponents.length === 0)
|
|
7819
|
+
return "";
|
|
7820
|
+
return pathComponents.slice(1).join(ts.directorySeparator);
|
|
7821
|
+
}
|
|
7822
|
+
function getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory) {
|
|
7823
|
+
return getPathWithoutRoot(getNormalizedPathComponents(fileName, currentDirectory));
|
|
7824
|
+
}
|
|
7825
|
+
ts.getNormalizedAbsolutePathWithoutRoot = getNormalizedAbsolutePathWithoutRoot;
|
|
7826
|
+
function toPath(fileName, basePath, getCanonicalFileName) {
|
|
7827
|
+
var nonCanonicalizedPath = isRootedDiskPath(fileName)
|
|
7828
|
+
? normalizePath(fileName)
|
|
7829
|
+
: getNormalizedAbsolutePath(fileName, basePath);
|
|
7830
|
+
return getCanonicalFileName(nonCanonicalizedPath);
|
|
7831
|
+
}
|
|
7832
|
+
ts.toPath = toPath;
|
|
7833
|
+
function normalizePathAndParts(path) {
|
|
7834
|
+
path = normalizeSlashes(path);
|
|
7835
|
+
var _a = reducePathComponents(getPathComponents(path)), root = _a[0], parts = _a.slice(1);
|
|
7836
|
+
if (parts.length) {
|
|
7837
|
+
var joinedParts = root + parts.join(ts.directorySeparator);
|
|
7838
|
+
return { path: hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(joinedParts) : joinedParts, parts: parts };
|
|
7839
|
+
}
|
|
7840
|
+
else {
|
|
7841
|
+
return { path: root, parts: parts };
|
|
7842
|
+
}
|
|
7843
|
+
}
|
|
7844
|
+
ts.normalizePathAndParts = normalizePathAndParts;
|
|
7845
|
+
function removeTrailingDirectorySeparator(path) {
|
|
7846
|
+
if (hasTrailingDirectorySeparator(path)) {
|
|
7847
|
+
return path.substr(0, path.length - 1);
|
|
7848
|
+
}
|
|
7849
|
+
return path;
|
|
7850
|
+
}
|
|
7851
|
+
ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator;
|
|
7852
|
+
function ensureTrailingDirectorySeparator(path) {
|
|
7853
|
+
if (!hasTrailingDirectorySeparator(path)) {
|
|
7854
|
+
return path + ts.directorySeparator;
|
|
7855
|
+
}
|
|
7856
|
+
return path;
|
|
7857
|
+
}
|
|
7858
|
+
ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator;
|
|
7859
|
+
/**
|
|
7860
|
+
* Ensures a path is either absolute (prefixed with `/` or `c:`) or dot-relative (prefixed
|
|
7861
|
+
* with `./` or `../`) so as not to be confused with an unprefixed module name.
|
|
7862
|
+
*
|
|
7863
|
+
* ```ts
|
|
7864
|
+
* ensurePathIsNonModuleName("/path/to/file.ext") === "/path/to/file.ext"
|
|
7865
|
+
* ensurePathIsNonModuleName("./path/to/file.ext") === "./path/to/file.ext"
|
|
7866
|
+
* ensurePathIsNonModuleName("../path/to/file.ext") === "../path/to/file.ext"
|
|
7867
|
+
* ensurePathIsNonModuleName("path/to/file.ext") === "./path/to/file.ext"
|
|
7868
|
+
* ```
|
|
7869
|
+
*/
|
|
7870
|
+
function ensurePathIsNonModuleName(path) {
|
|
7871
|
+
return !pathIsAbsolute(path) && !pathIsRelative(path) ? "./" + path : path;
|
|
7872
|
+
}
|
|
7873
|
+
ts.ensurePathIsNonModuleName = ensurePathIsNonModuleName;
|
|
7874
|
+
function changeAnyExtension(path, ext, extensions, ignoreCase) {
|
|
7875
|
+
var pathext = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(path, extensions, ignoreCase) : getAnyExtensionFromPath(path);
|
|
7876
|
+
return pathext ? path.slice(0, path.length - pathext.length) + (ts.startsWith(ext, ".") ? ext : "." + ext) : path;
|
|
7877
|
+
}
|
|
7878
|
+
ts.changeAnyExtension = changeAnyExtension;
|
|
7879
|
+
//// Path Comparisons
|
|
7880
|
+
// check path for these segments: '', '.'. '..'
|
|
7881
|
+
var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
|
|
7882
|
+
function comparePathsWorker(a, b, componentComparer) {
|
|
7883
|
+
if (a === b)
|
|
7884
|
+
return 0 /* EqualTo */;
|
|
7885
|
+
if (a === undefined)
|
|
7886
|
+
return -1 /* LessThan */;
|
|
7887
|
+
if (b === undefined)
|
|
7888
|
+
return 1 /* GreaterThan */;
|
|
7889
|
+
// NOTE: Performance optimization - shortcut if the root segments differ as there would be no
|
|
7890
|
+
// need to perform path reduction.
|
|
7891
|
+
var aRoot = a.substring(0, getRootLength(a));
|
|
7892
|
+
var bRoot = b.substring(0, getRootLength(b));
|
|
7893
|
+
var result = ts.compareStringsCaseInsensitive(aRoot, bRoot);
|
|
7894
|
+
if (result !== 0 /* EqualTo */) {
|
|
7895
|
+
return result;
|
|
7896
|
+
}
|
|
7897
|
+
// NOTE: Performance optimization - shortcut if there are no relative path segments in
|
|
7898
|
+
// the non-root portion of the path
|
|
7899
|
+
var aRest = a.substring(aRoot.length);
|
|
7900
|
+
var bRest = b.substring(bRoot.length);
|
|
7901
|
+
if (!relativePathSegmentRegExp.test(aRest) && !relativePathSegmentRegExp.test(bRest)) {
|
|
7902
|
+
return componentComparer(aRest, bRest);
|
|
7903
|
+
}
|
|
7904
|
+
// The path contains a relative path segment. Normalize the paths and perform a slower component
|
|
7905
|
+
// by component comparison.
|
|
7906
|
+
var aComponents = reducePathComponents(getPathComponents(a));
|
|
7907
|
+
var bComponents = reducePathComponents(getPathComponents(b));
|
|
7908
|
+
var sharedLength = Math.min(aComponents.length, bComponents.length);
|
|
7909
|
+
for (var i = 1; i < sharedLength; i++) {
|
|
7910
|
+
var result_2 = componentComparer(aComponents[i], bComponents[i]);
|
|
7911
|
+
if (result_2 !== 0 /* EqualTo */) {
|
|
7912
|
+
return result_2;
|
|
7913
|
+
}
|
|
7914
|
+
}
|
|
7915
|
+
return ts.compareValues(aComponents.length, bComponents.length);
|
|
7916
|
+
}
|
|
7917
|
+
/**
|
|
7918
|
+
* Performs a case-sensitive comparison of two paths. Path roots are always compared case-insensitively.
|
|
7919
|
+
*/
|
|
7920
|
+
function comparePathsCaseSensitive(a, b) {
|
|
7921
|
+
return comparePathsWorker(a, b, ts.compareStringsCaseSensitive);
|
|
7922
|
+
}
|
|
7923
|
+
ts.comparePathsCaseSensitive = comparePathsCaseSensitive;
|
|
7924
|
+
/**
|
|
7925
|
+
* Performs a case-insensitive comparison of two paths.
|
|
7926
|
+
*/
|
|
7927
|
+
function comparePathsCaseInsensitive(a, b) {
|
|
7928
|
+
return comparePathsWorker(a, b, ts.compareStringsCaseInsensitive);
|
|
7929
|
+
}
|
|
7930
|
+
ts.comparePathsCaseInsensitive = comparePathsCaseInsensitive;
|
|
7931
|
+
function comparePaths(a, b, currentDirectory, ignoreCase) {
|
|
7932
|
+
if (typeof currentDirectory === "string") {
|
|
7933
|
+
a = combinePaths(currentDirectory, a);
|
|
7934
|
+
b = combinePaths(currentDirectory, b);
|
|
7935
|
+
}
|
|
7936
|
+
else if (typeof currentDirectory === "boolean") {
|
|
7937
|
+
ignoreCase = currentDirectory;
|
|
7938
|
+
}
|
|
7939
|
+
return comparePathsWorker(a, b, ts.getStringComparer(ignoreCase));
|
|
7940
|
+
}
|
|
7941
|
+
ts.comparePaths = comparePaths;
|
|
7942
|
+
function containsPath(parent, child, currentDirectory, ignoreCase) {
|
|
7943
|
+
if (typeof currentDirectory === "string") {
|
|
7944
|
+
parent = combinePaths(currentDirectory, parent);
|
|
7945
|
+
child = combinePaths(currentDirectory, child);
|
|
7946
|
+
}
|
|
7947
|
+
else if (typeof currentDirectory === "boolean") {
|
|
7948
|
+
ignoreCase = currentDirectory;
|
|
7949
|
+
}
|
|
7950
|
+
if (parent === undefined || child === undefined)
|
|
7951
|
+
return false;
|
|
7952
|
+
if (parent === child)
|
|
7953
|
+
return true;
|
|
7954
|
+
var parentComponents = reducePathComponents(getPathComponents(parent));
|
|
7955
|
+
var childComponents = reducePathComponents(getPathComponents(child));
|
|
7956
|
+
if (childComponents.length < parentComponents.length) {
|
|
7957
|
+
return false;
|
|
7958
|
+
}
|
|
7959
|
+
var componentEqualityComparer = ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive;
|
|
7960
|
+
for (var i = 0; i < parentComponents.length; i++) {
|
|
7961
|
+
var equalityComparer = i === 0 ? ts.equateStringsCaseInsensitive : componentEqualityComparer;
|
|
7962
|
+
if (!equalityComparer(parentComponents[i], childComponents[i])) {
|
|
7963
|
+
return false;
|
|
7964
|
+
}
|
|
7965
|
+
}
|
|
7966
|
+
return true;
|
|
7967
|
+
}
|
|
7968
|
+
ts.containsPath = containsPath;
|
|
7969
|
+
/**
|
|
7970
|
+
* Determines whether `fileName` starts with the specified `directoryName` using the provided path canonicalization callback.
|
|
7971
|
+
* Comparison is case-sensitive between the canonical paths.
|
|
7972
|
+
*
|
|
7973
|
+
* Use `containsPath` if file names are not already reduced and absolute.
|
|
7974
|
+
*/
|
|
7975
|
+
function startsWithDirectory(fileName, directoryName, getCanonicalFileName) {
|
|
7976
|
+
var canonicalFileName = getCanonicalFileName(fileName);
|
|
7977
|
+
var canonicalDirectoryName = getCanonicalFileName(directoryName);
|
|
7978
|
+
return ts.startsWith(canonicalFileName, canonicalDirectoryName + "/") || ts.startsWith(canonicalFileName, canonicalDirectoryName + "\\");
|
|
7979
|
+
}
|
|
7980
|
+
ts.startsWithDirectory = startsWithDirectory;
|
|
7981
|
+
//// Relative Paths
|
|
7982
|
+
function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) {
|
|
7983
|
+
var fromComponents = reducePathComponents(getPathComponents(from));
|
|
7984
|
+
var toComponents = reducePathComponents(getPathComponents(to));
|
|
7985
|
+
var start;
|
|
7986
|
+
for (start = 0; start < fromComponents.length && start < toComponents.length; start++) {
|
|
7987
|
+
var fromComponent = getCanonicalFileName(fromComponents[start]);
|
|
7988
|
+
var toComponent = getCanonicalFileName(toComponents[start]);
|
|
7989
|
+
var comparer = start === 0 ? ts.equateStringsCaseInsensitive : stringEqualityComparer;
|
|
7990
|
+
if (!comparer(fromComponent, toComponent))
|
|
7991
|
+
break;
|
|
7992
|
+
}
|
|
7993
|
+
if (start === 0) {
|
|
7994
|
+
return toComponents;
|
|
7995
|
+
}
|
|
7996
|
+
var components = toComponents.slice(start);
|
|
7997
|
+
var relative = [];
|
|
7998
|
+
for (; start < fromComponents.length; start++) {
|
|
7999
|
+
relative.push("..");
|
|
8000
|
+
}
|
|
8001
|
+
return __spreadArray(__spreadArray([""], relative, true), components, true);
|
|
8002
|
+
}
|
|
8003
|
+
ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
|
|
8004
|
+
function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
|
|
8005
|
+
ts.Debug.assert((getRootLength(fromDirectory) > 0) === (getRootLength(to) > 0), "Paths must either both be absolute or both be relative");
|
|
8006
|
+
var getCanonicalFileName = typeof getCanonicalFileNameOrIgnoreCase === "function" ? getCanonicalFileNameOrIgnoreCase : ts.identity;
|
|
8007
|
+
var ignoreCase = typeof getCanonicalFileNameOrIgnoreCase === "boolean" ? getCanonicalFileNameOrIgnoreCase : false;
|
|
8008
|
+
var pathComponents = getPathComponentsRelativeTo(fromDirectory, to, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive, getCanonicalFileName);
|
|
8009
|
+
return getPathFromPathComponents(pathComponents);
|
|
8010
|
+
}
|
|
8011
|
+
ts.getRelativePathFromDirectory = getRelativePathFromDirectory;
|
|
8012
|
+
function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) {
|
|
8013
|
+
return !isRootedDiskPath(absoluteOrRelativePath)
|
|
8014
|
+
? absoluteOrRelativePath
|
|
8015
|
+
: getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
|
|
8016
|
+
}
|
|
8017
|
+
ts.convertToRelativePath = convertToRelativePath;
|
|
8018
|
+
function getRelativePathFromFile(from, to, getCanonicalFileName) {
|
|
8019
|
+
return ensurePathIsNonModuleName(getRelativePathFromDirectory(getDirectoryPath(from), to, getCanonicalFileName));
|
|
8020
|
+
}
|
|
8021
|
+
ts.getRelativePathFromFile = getRelativePathFromFile;
|
|
8022
|
+
function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
|
|
8023
|
+
var pathComponents = getPathComponentsRelativeTo(resolvePath(currentDirectory, directoryPathOrUrl), resolvePath(currentDirectory, relativeOrAbsolutePath), ts.equateStringsCaseSensitive, getCanonicalFileName);
|
|
8024
|
+
var firstComponent = pathComponents[0];
|
|
8025
|
+
if (isAbsolutePathAnUrl && isRootedDiskPath(firstComponent)) {
|
|
8026
|
+
var prefix = firstComponent.charAt(0) === ts.directorySeparator ? "file://" : "file:///";
|
|
8027
|
+
pathComponents[0] = prefix + firstComponent;
|
|
8028
|
+
}
|
|
8029
|
+
return getPathFromPathComponents(pathComponents);
|
|
8030
|
+
}
|
|
8031
|
+
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
|
|
8032
|
+
function forEachAncestorDirectory(directory, callback) {
|
|
8033
|
+
while (true) {
|
|
8034
|
+
var result = callback(directory);
|
|
8035
|
+
if (result !== undefined) {
|
|
8036
|
+
return result;
|
|
8037
|
+
}
|
|
8038
|
+
var parentPath = getDirectoryPath(directory);
|
|
8039
|
+
if (parentPath === directory) {
|
|
8040
|
+
return undefined;
|
|
8041
|
+
}
|
|
8042
|
+
directory = parentPath;
|
|
8043
|
+
}
|
|
8044
|
+
}
|
|
8045
|
+
ts.forEachAncestorDirectory = forEachAncestorDirectory;
|
|
8046
|
+
function isNodeModulesDirectory(dirPath) {
|
|
8047
|
+
return ts.endsWith(dirPath, "/node_modules");
|
|
8048
|
+
}
|
|
8049
|
+
ts.isNodeModulesDirectory = isNodeModulesDirectory;
|
|
8050
|
+
})(ts || (ts = {}));
|
|
8051
8051
|
// <auto-generated />
|
|
8052
8052
|
// generated from './diagnosticMessages.json' in 'src/compiler'
|
|
8053
8053
|
/* @internal */
|
|
@@ -47057,8 +47057,8 @@ var ts;
|
|
|
47057
47057
|
TypeFacts[TypeFacts["AllTypeofNE"] = 556800] = "AllTypeofNE";
|
|
47058
47058
|
TypeFacts[TypeFacts["EmptyObjectFacts"] = 16777215] = "EmptyObjectFacts";
|
|
47059
47059
|
// Masks
|
|
47060
|
-
TypeFacts[TypeFacts["OrFactsMask"] =
|
|
47061
|
-
TypeFacts[TypeFacts["AndFactsMask"] =
|
|
47060
|
+
TypeFacts[TypeFacts["OrFactsMask"] = 8256] = "OrFactsMask";
|
|
47061
|
+
TypeFacts[TypeFacts["AndFactsMask"] = 16768959] = "AndFactsMask";
|
|
47062
47062
|
})(TypeFacts || (TypeFacts = {}));
|
|
47063
47063
|
var typeofEQFacts = new ts.Map(ts.getEntries({
|
|
47064
47064
|
string: 1 /* TypeofEQString */,
|
|
@@ -68166,7 +68166,10 @@ var ts;
|
|
|
68166
68166
|
(type === falseType || type === regularFalseType) ? 12121864 /* FalseStrictFacts */ : 7927560 /* TrueStrictFacts */ :
|
|
68167
68167
|
(type === falseType || type === regularFalseType) ? 12580616 /* FalseFacts */ : 16774920 /* TrueFacts */;
|
|
68168
68168
|
}
|
|
68169
|
-
if (flags & 524288 /* Object */
|
|
68169
|
+
if (flags & 524288 /* Object */) {
|
|
68170
|
+
if (ignoreObjects) {
|
|
68171
|
+
return 16768959 /* AndFactsMask */; // This is the identity element for computing type facts of intersection.
|
|
68172
|
+
}
|
|
68170
68173
|
return ts.getObjectFlags(type) & 16 /* Anonymous */ && isEmptyObjectType(type) ?
|
|
68171
68174
|
strictNullChecks ? 16318463 /* EmptyObjectStrictFacts */ : 16777215 /* EmptyObjectFacts */ :
|
|
68172
68175
|
isFunctionObjectType(type) ?
|
|
@@ -68214,7 +68217,7 @@ var ts;
|
|
|
68214
68217
|
oredFacts |= f;
|
|
68215
68218
|
andedFacts &= f;
|
|
68216
68219
|
}
|
|
68217
|
-
return oredFacts &
|
|
68220
|
+
return oredFacts & 8256 /* OrFactsMask */ | andedFacts & 16768959 /* AndFactsMask */;
|
|
68218
68221
|
}
|
|
68219
68222
|
function getTypeWithFacts(type, include) {
|
|
68220
68223
|
return filterType(type, function (t) { return (getTypeFacts(t) & include) !== 0; });
|
|
@@ -70174,6 +70177,9 @@ var ts;
|
|
|
70174
70177
|
return getTypeOfSymbol(symbol);
|
|
70175
70178
|
}
|
|
70176
70179
|
function checkIdentifier(node, checkMode) {
|
|
70180
|
+
if (ts.isThisInTypeQuery(node)) {
|
|
70181
|
+
return checkThisExpression(node);
|
|
70182
|
+
}
|
|
70177
70183
|
var symbol = getResolvedSymbol(node);
|
|
70178
70184
|
if (symbol === unknownSymbol) {
|
|
70179
70185
|
return errorType;
|
|
@@ -71965,7 +71971,8 @@ var ts;
|
|
|
71965
71971
|
var links = getNodeLinks(node.expression);
|
|
71966
71972
|
if (!links.resolvedType) {
|
|
71967
71973
|
if ((ts.isTypeLiteralNode(node.parent.parent) || ts.isClassLike(node.parent.parent) || ts.isInterfaceDeclaration(node.parent.parent))
|
|
71968
|
-
&& ts.isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 101 /* InKeyword */
|
|
71974
|
+
&& ts.isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 101 /* InKeyword */
|
|
71975
|
+
&& node.parent.kind !== 171 /* GetAccessor */ && node.parent.kind !== 172 /* SetAccessor */) {
|
|
71969
71976
|
return links.resolvedType = errorType;
|
|
71970
71977
|
}
|
|
71971
71978
|
links.resolvedType = checkExpression(node.expression);
|
|
@@ -75913,6 +75920,10 @@ var ts;
|
|
|
75913
75920
|
return restParameter.escapedName;
|
|
75914
75921
|
}
|
|
75915
75922
|
function getParameterIdentifierNameAtPosition(signature, pos) {
|
|
75923
|
+
var _a;
|
|
75924
|
+
if (((_a = signature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 315 /* JSDocFunctionType */) {
|
|
75925
|
+
return undefined;
|
|
75926
|
+
}
|
|
75916
75927
|
var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
75917
75928
|
if (pos < paramCount) {
|
|
75918
75929
|
var param = signature.parameters[pos];
|
|
@@ -84677,7 +84688,10 @@ var ts;
|
|
|
84677
84688
|
case 80 /* PrivateIdentifier */:
|
|
84678
84689
|
case 205 /* PropertyAccessExpression */:
|
|
84679
84690
|
case 160 /* QualifiedName */:
|
|
84680
|
-
|
|
84691
|
+
if (!ts.isThisInTypeQuery(node)) {
|
|
84692
|
+
return getSymbolOfNameOrPropertyAccessExpression(node);
|
|
84693
|
+
}
|
|
84694
|
+
// falls through
|
|
84681
84695
|
case 108 /* ThisKeyword */:
|
|
84682
84696
|
var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
|
|
84683
84697
|
if (ts.isFunctionLike(container)) {
|
|
@@ -94651,6 +94665,7 @@ var ts;
|
|
|
94651
94665
|
var exportedVariableStatement = false;
|
|
94652
94666
|
var enabledSubstitutions;
|
|
94653
94667
|
var enclosingFunctionFlags;
|
|
94668
|
+
var parametersWithPrecedingObjectRestOrSpread;
|
|
94654
94669
|
var enclosingSuperContainerFlags = 0;
|
|
94655
94670
|
var hierarchyFacts = 0;
|
|
94656
94671
|
var currentSourceFile;
|
|
@@ -95107,6 +95122,7 @@ var ts;
|
|
|
95107
95122
|
/*incrementor*/ undefined,
|
|
95108
95123
|
/*statement*/ convertForOfStatementHead(node, getValue)),
|
|
95109
95124
|
/*location*/ node), 256 /* NoTokenTrailingSourceMaps */);
|
|
95125
|
+
ts.setOriginalNode(forStatement, node);
|
|
95110
95126
|
return factory.createTryStatement(factory.createBlock([
|
|
95111
95127
|
factory.restoreEnclosingLabel(forStatement, outermostLabeledStatement)
|
|
95112
95128
|
]), factory.createCatchClause(factory.createVariableDeclaration(catchVariable), ts.setEmitFlags(factory.createBlock([
|
|
@@ -95124,7 +95140,19 @@ var ts;
|
|
|
95124
95140
|
]), 1 /* SingleLine */))
|
|
95125
95141
|
]));
|
|
95126
95142
|
}
|
|
95143
|
+
function parameterVisitor(node) {
|
|
95144
|
+
ts.Debug.assertNode(node, ts.isParameter);
|
|
95145
|
+
return visitParameter(node);
|
|
95146
|
+
}
|
|
95127
95147
|
function visitParameter(node) {
|
|
95148
|
+
if (parametersWithPrecedingObjectRestOrSpread === null || parametersWithPrecedingObjectRestOrSpread === void 0 ? void 0 : parametersWithPrecedingObjectRestOrSpread.has(node)) {
|
|
95149
|
+
return factory.updateParameterDeclaration(node,
|
|
95150
|
+
/*decorators*/ undefined,
|
|
95151
|
+
/*modifiers*/ undefined, node.dotDotDotToken, ts.isBindingPattern(node.name) ? factory.getGeneratedNameForNode(node) : node.name,
|
|
95152
|
+
/*questionToken*/ undefined,
|
|
95153
|
+
/*type*/ undefined,
|
|
95154
|
+
/*initializer*/ undefined);
|
|
95155
|
+
}
|
|
95128
95156
|
if (node.transformFlags & 32768 /* ContainsObjectRestOrSpread */) {
|
|
95129
95157
|
// Binding patterns are converted into a generated name and are
|
|
95130
95158
|
// evaluated inside the function body.
|
|
@@ -95136,85 +95164,119 @@ var ts;
|
|
|
95136
95164
|
}
|
|
95137
95165
|
return ts.visitEachChild(node, visitor, context);
|
|
95138
95166
|
}
|
|
95167
|
+
function collectParametersWithPrecedingObjectRestOrSpread(node) {
|
|
95168
|
+
var parameters;
|
|
95169
|
+
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
|
|
95170
|
+
var parameter = _a[_i];
|
|
95171
|
+
if (parameters) {
|
|
95172
|
+
parameters.add(parameter);
|
|
95173
|
+
}
|
|
95174
|
+
else if (parameter.transformFlags & 32768 /* ContainsObjectRestOrSpread */) {
|
|
95175
|
+
parameters = new ts.Set();
|
|
95176
|
+
}
|
|
95177
|
+
}
|
|
95178
|
+
return parameters;
|
|
95179
|
+
}
|
|
95139
95180
|
function visitConstructorDeclaration(node) {
|
|
95140
95181
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95141
|
-
|
|
95182
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95183
|
+
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95184
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95142
95185
|
var updated = factory.updateConstructorDeclaration(node,
|
|
95143
|
-
/*decorators*/ undefined, node.modifiers, ts.visitParameterList(node.parameters,
|
|
95186
|
+
/*decorators*/ undefined, node.modifiers, ts.visitParameterList(node.parameters, parameterVisitor, context), transformFunctionBody(node));
|
|
95144
95187
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95188
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95145
95189
|
return updated;
|
|
95146
95190
|
}
|
|
95147
95191
|
function visitGetAccessorDeclaration(node) {
|
|
95148
95192
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95149
|
-
|
|
95193
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95194
|
+
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95195
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95150
95196
|
var updated = factory.updateGetAccessorDeclaration(node,
|
|
95151
|
-
/*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters,
|
|
95197
|
+
/*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, parameterVisitor, context),
|
|
95152
95198
|
/*type*/ undefined, transformFunctionBody(node));
|
|
95153
95199
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95200
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95154
95201
|
return updated;
|
|
95155
95202
|
}
|
|
95156
95203
|
function visitSetAccessorDeclaration(node) {
|
|
95157
95204
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95158
|
-
|
|
95205
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95206
|
+
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95207
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95159
95208
|
var updated = factory.updateSetAccessorDeclaration(node,
|
|
95160
|
-
/*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters,
|
|
95209
|
+
/*decorators*/ undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, parameterVisitor, context), transformFunctionBody(node));
|
|
95161
95210
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95211
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95162
95212
|
return updated;
|
|
95163
95213
|
}
|
|
95164
95214
|
function visitMethodDeclaration(node) {
|
|
95165
95215
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95216
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95166
95217
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95218
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95167
95219
|
var updated = factory.updateMethodDeclaration(node,
|
|
95168
95220
|
/*decorators*/ undefined, enclosingFunctionFlags & 1 /* Generator */
|
|
95169
95221
|
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
|
|
95170
95222
|
: node.modifiers, enclosingFunctionFlags & 2 /* Async */
|
|
95171
95223
|
? undefined
|
|
95172
95224
|
: node.asteriskToken, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNode(/*questionToken*/ undefined, visitor, ts.isToken),
|
|
95173
|
-
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters,
|
|
95225
|
+
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters, parameterVisitor, context),
|
|
95174
95226
|
/*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */
|
|
95175
95227
|
? transformAsyncGeneratorFunctionBody(node)
|
|
95176
95228
|
: transformFunctionBody(node));
|
|
95177
95229
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95230
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95178
95231
|
return updated;
|
|
95179
95232
|
}
|
|
95180
95233
|
function visitFunctionDeclaration(node) {
|
|
95181
95234
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95235
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95182
95236
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95237
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95183
95238
|
var updated = factory.updateFunctionDeclaration(node,
|
|
95184
95239
|
/*decorators*/ undefined, enclosingFunctionFlags & 1 /* Generator */
|
|
95185
95240
|
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
|
|
95186
95241
|
: node.modifiers, enclosingFunctionFlags & 2 /* Async */
|
|
95187
95242
|
? undefined
|
|
95188
95243
|
: node.asteriskToken, node.name,
|
|
95189
|
-
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters,
|
|
95244
|
+
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters, parameterVisitor, context),
|
|
95190
95245
|
/*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */
|
|
95191
95246
|
? transformAsyncGeneratorFunctionBody(node)
|
|
95192
95247
|
: transformFunctionBody(node));
|
|
95193
95248
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95249
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95194
95250
|
return updated;
|
|
95195
95251
|
}
|
|
95196
95252
|
function visitArrowFunction(node) {
|
|
95197
95253
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95254
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95198
95255
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95256
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95199
95257
|
var updated = factory.updateArrowFunction(node, node.modifiers,
|
|
95200
|
-
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters,
|
|
95258
|
+
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters, parameterVisitor, context),
|
|
95201
95259
|
/*type*/ undefined, node.equalsGreaterThanToken, transformFunctionBody(node));
|
|
95202
95260
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95261
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95203
95262
|
return updated;
|
|
95204
95263
|
}
|
|
95205
95264
|
function visitFunctionExpression(node) {
|
|
95206
95265
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
95266
|
+
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
95207
95267
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
95268
|
+
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
95208
95269
|
var updated = factory.updateFunctionExpression(node, enclosingFunctionFlags & 1 /* Generator */
|
|
95209
95270
|
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
|
|
95210
95271
|
: node.modifiers, enclosingFunctionFlags & 2 /* Async */
|
|
95211
95272
|
? undefined
|
|
95212
95273
|
: node.asteriskToken, node.name,
|
|
95213
|
-
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters,
|
|
95274
|
+
/*typeParameters*/ undefined, ts.visitParameterList(node.parameters, parameterVisitor, context),
|
|
95214
95275
|
/*type*/ undefined, enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */
|
|
95215
95276
|
? transformAsyncGeneratorFunctionBody(node)
|
|
95216
95277
|
: transformFunctionBody(node));
|
|
95217
95278
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
95279
|
+
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
95218
95280
|
return updated;
|
|
95219
95281
|
}
|
|
95220
95282
|
function transformAsyncGeneratorFunctionBody(node) {
|
|
@@ -95275,16 +95337,71 @@ var ts;
|
|
|
95275
95337
|
return body;
|
|
95276
95338
|
}
|
|
95277
95339
|
function appendObjectRestAssignmentsIfNeeded(statements, node) {
|
|
95340
|
+
var containsPrecedingObjectRestOrSpread = false;
|
|
95278
95341
|
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
|
|
95279
95342
|
var parameter = _a[_i];
|
|
95280
|
-
if (
|
|
95281
|
-
|
|
95282
|
-
|
|
95343
|
+
if (containsPrecedingObjectRestOrSpread) {
|
|
95344
|
+
if (ts.isBindingPattern(parameter.name)) {
|
|
95345
|
+
// In cases where a binding pattern is simply '[]' or '{}',
|
|
95346
|
+
// we usually don't want to emit a var declaration; however, in the presence
|
|
95347
|
+
// of an initializer, we must emit that expression to preserve side effects.
|
|
95348
|
+
//
|
|
95349
|
+
// NOTE: see `insertDefaultValueAssignmentForBindingPattern` in es2015.ts
|
|
95350
|
+
if (parameter.name.elements.length > 0) {
|
|
95351
|
+
var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, factory.getGeneratedNameForNode(parameter));
|
|
95352
|
+
if (ts.some(declarations)) {
|
|
95353
|
+
var declarationList = factory.createVariableDeclarationList(declarations);
|
|
95354
|
+
var statement = factory.createVariableStatement(/*modifiers*/ undefined, declarationList);
|
|
95355
|
+
ts.setEmitFlags(statement, 1048576 /* CustomPrologue */);
|
|
95356
|
+
statements = ts.append(statements, statement);
|
|
95357
|
+
}
|
|
95358
|
+
}
|
|
95359
|
+
else if (parameter.initializer) {
|
|
95360
|
+
var name = factory.getGeneratedNameForNode(parameter);
|
|
95361
|
+
var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
|
|
95362
|
+
var assignment = factory.createAssignment(name, initializer);
|
|
95363
|
+
var statement = factory.createExpressionStatement(assignment);
|
|
95364
|
+
ts.setEmitFlags(statement, 1048576 /* CustomPrologue */);
|
|
95365
|
+
statements = ts.append(statements, statement);
|
|
95366
|
+
}
|
|
95367
|
+
}
|
|
95368
|
+
else if (parameter.initializer) {
|
|
95369
|
+
// Converts a parameter initializer into a function body statement, i.e.:
|
|
95370
|
+
//
|
|
95371
|
+
// function f(x = 1) { }
|
|
95372
|
+
//
|
|
95373
|
+
// becomes
|
|
95374
|
+
//
|
|
95375
|
+
// function f(x) {
|
|
95376
|
+
// if (typeof x === "undefined") { x = 1; }
|
|
95377
|
+
// }
|
|
95378
|
+
var name = factory.cloneNode(parameter.name);
|
|
95379
|
+
ts.setTextRange(name, parameter.name);
|
|
95380
|
+
ts.setEmitFlags(name, 48 /* NoSourceMap */);
|
|
95381
|
+
var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
|
|
95382
|
+
ts.addEmitFlags(initializer, 48 /* NoSourceMap */ | 1536 /* NoComments */);
|
|
95383
|
+
var assignment = factory.createAssignment(name, initializer);
|
|
95384
|
+
ts.setTextRange(assignment, parameter);
|
|
95385
|
+
ts.setEmitFlags(assignment, 1536 /* NoComments */);
|
|
95386
|
+
var block = factory.createBlock([factory.createExpressionStatement(assignment)]);
|
|
95387
|
+
ts.setTextRange(block, parameter);
|
|
95388
|
+
ts.setEmitFlags(block, 1 /* SingleLine */ | 32 /* NoTrailingSourceMap */ | 384 /* NoTokenSourceMaps */ | 1536 /* NoComments */);
|
|
95389
|
+
var typeCheck = factory.createTypeCheck(factory.cloneNode(parameter.name), "undefined");
|
|
95390
|
+
var statement = factory.createIfStatement(typeCheck, block);
|
|
95391
|
+
ts.startOnNewLine(statement);
|
|
95392
|
+
ts.setTextRange(statement, parameter);
|
|
95393
|
+
ts.setEmitFlags(statement, 384 /* NoTokenSourceMaps */ | 32 /* NoTrailingSourceMap */ | 1048576 /* CustomPrologue */ | 1536 /* NoComments */);
|
|
95394
|
+
statements = ts.append(statements, statement);
|
|
95395
|
+
}
|
|
95396
|
+
}
|
|
95397
|
+
else if (parameter.transformFlags & 32768 /* ContainsObjectRestOrSpread */) {
|
|
95398
|
+
containsPrecedingObjectRestOrSpread = true;
|
|
95399
|
+
var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1 /* ObjectRest */, factory.getGeneratedNameForNode(parameter),
|
|
95283
95400
|
/*doNotRecordTempVariablesInLine*/ false,
|
|
95284
95401
|
/*skipInitializer*/ true);
|
|
95285
95402
|
if (ts.some(declarations)) {
|
|
95286
|
-
var
|
|
95287
|
-
/*modifiers*/ undefined,
|
|
95403
|
+
var declarationList = factory.createVariableDeclarationList(declarations);
|
|
95404
|
+
var statement = factory.createVariableStatement(/*modifiers*/ undefined, declarationList);
|
|
95288
95405
|
ts.setEmitFlags(statement, 1048576 /* CustomPrologue */);
|
|
95289
95406
|
statements = ts.append(statements, statement);
|
|
95290
95407
|
}
|
|
@@ -98535,10 +98652,12 @@ var ts;
|
|
|
98535
98652
|
// variables declared in the loop initializer that will be changed inside the loop
|
|
98536
98653
|
var loopOutParameters = [];
|
|
98537
98654
|
if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3 /* BlockScoped */)) {
|
|
98538
|
-
var
|
|
98655
|
+
var hasCapturedBindingsInForHead = shouldConvertInitializerOfForStatement(node) ||
|
|
98656
|
+
shouldConvertConditionOfForStatement(node) ||
|
|
98657
|
+
shouldConvertIncrementorOfForStatement(node);
|
|
98539
98658
|
for (var _i = 0, _a = loopInitializer.declarations; _i < _a.length; _i++) {
|
|
98540
98659
|
var decl = _a[_i];
|
|
98541
|
-
processLoopVariableDeclaration(node, decl, loopParameters, loopOutParameters,
|
|
98660
|
+
processLoopVariableDeclaration(node, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead);
|
|
98542
98661
|
}
|
|
98543
98662
|
}
|
|
98544
98663
|
var currentState = { loopParameters: loopParameters, loopOutParameters: loopOutParameters };
|
|
@@ -98892,27 +99011,33 @@ var ts;
|
|
|
98892
99011
|
caseClauses.push(factory.createCaseClause(factory.createStringLiteral(labelMarker), statements));
|
|
98893
99012
|
});
|
|
98894
99013
|
}
|
|
98895
|
-
function processLoopVariableDeclaration(container, decl, loopParameters, loopOutParameters,
|
|
99014
|
+
function processLoopVariableDeclaration(container, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead) {
|
|
98896
99015
|
var name = decl.name;
|
|
98897
99016
|
if (ts.isBindingPattern(name)) {
|
|
98898
99017
|
for (var _i = 0, _a = name.elements; _i < _a.length; _i++) {
|
|
98899
99018
|
var element = _a[_i];
|
|
98900
99019
|
if (!ts.isOmittedExpression(element)) {
|
|
98901
|
-
processLoopVariableDeclaration(container, element, loopParameters, loopOutParameters,
|
|
99020
|
+
processLoopVariableDeclaration(container, element, loopParameters, loopOutParameters, hasCapturedBindingsInForHead);
|
|
98902
99021
|
}
|
|
98903
99022
|
}
|
|
98904
99023
|
}
|
|
98905
99024
|
else {
|
|
98906
99025
|
loopParameters.push(factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, name));
|
|
98907
99026
|
var checkFlags = resolver.getNodeCheckFlags(decl);
|
|
98908
|
-
if (checkFlags & 4194304 /* NeedsLoopOutParameter */ ||
|
|
99027
|
+
if (checkFlags & 4194304 /* NeedsLoopOutParameter */ || hasCapturedBindingsInForHead) {
|
|
98909
99028
|
var outParamName = factory.createUniqueName("out_" + ts.idText(name));
|
|
98910
99029
|
var flags = 0;
|
|
98911
99030
|
if (checkFlags & 4194304 /* NeedsLoopOutParameter */) {
|
|
98912
99031
|
flags |= 1 /* Body */;
|
|
98913
99032
|
}
|
|
98914
|
-
if (ts.isForStatement(container)
|
|
98915
|
-
|
|
99033
|
+
if (ts.isForStatement(container)) {
|
|
99034
|
+
if (container.initializer && resolver.isBindingCapturedByNode(container.initializer, decl)) {
|
|
99035
|
+
flags |= 2 /* Initializer */;
|
|
99036
|
+
}
|
|
99037
|
+
if (container.condition && resolver.isBindingCapturedByNode(container.condition, decl) ||
|
|
99038
|
+
container.incrementor && resolver.isBindingCapturedByNode(container.incrementor, decl)) {
|
|
99039
|
+
flags |= 1 /* Body */;
|
|
99040
|
+
}
|
|
98916
99041
|
}
|
|
98917
99042
|
loopOutParameters.push({ flags: flags, originalName: name, outParamName: outParamName });
|
|
98918
99043
|
}
|
|
@@ -142045,7 +142170,7 @@ var ts;
|
|
|
142045
142170
|
if (typeChecker.isArgumentsSymbol(symbol)) {
|
|
142046
142171
|
return "local var" /* localVariableElement */;
|
|
142047
142172
|
}
|
|
142048
|
-
if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location)) {
|
|
142173
|
+
if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location) || ts.isThisInTypeQuery(location)) {
|
|
142049
142174
|
return "parameter" /* parameterElement */;
|
|
142050
142175
|
}
|
|
142051
142176
|
var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
|
|
@@ -142140,7 +142265,7 @@ var ts;
|
|
|
142140
142265
|
var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
|
|
142141
142266
|
var symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */;
|
|
142142
142267
|
var hasAddedSymbolInfo = false;
|
|
142143
|
-
var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location);
|
|
142268
|
+
var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location) || ts.isThisInTypeQuery(location);
|
|
142144
142269
|
var type;
|
|
142145
142270
|
var printer;
|
|
142146
142271
|
var documentationFromAlias;
|