typescript 4.6.0-dev.20211108 → 4.6.0-dev.20211112

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.
@@ -111,7 +111,7 @@ interface BigInt64Array {
111
111
  * Returns the item located at the specified index.
112
112
  * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.
113
113
  */
114
- at(index: number): number | undefined;
114
+ at(index: number): bigint | undefined;
115
115
  }
116
116
 
117
117
  interface BigUint64Array {
@@ -119,5 +119,5 @@ interface BigUint64Array {
119
119
  * Returns the item located at the specified index.
120
120
  * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.
121
121
  */
122
- at(index: number): number | undefined;
122
+ at(index: number): bigint | undefined;
123
123
  }
package/lib/tsc.js CHANGED
@@ -69,7 +69,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  var ts;
70
70
  (function (ts) {
71
71
  ts.versionMajorMinor = "4.6";
72
- ts.version = ts.versionMajorMinor + ".0-dev.20211108";
72
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
73
73
  var NativeCollections;
74
74
  (function (NativeCollections) {
75
75
  function tryGetNativeMap() {
@@ -4976,7 +4976,7 @@ var ts;
4976
4976
  }
4977
4977
  }
4978
4978
  function readDirectory(path, extensions, excludes, includes, depth) {
4979
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
4979
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
4980
4980
  }
4981
4981
  function fileSystemEntryExists(path, entryKind) {
4982
4982
  var originalStackTraceLimit = Error.stackTraceLimit;
@@ -15876,7 +15876,7 @@ var ts;
15876
15876
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
15877
15877
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
15878
15878
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
15879
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
15879
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
15880
15880
  };
15881
15881
  }
15882
15882
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -15884,7 +15884,7 @@ var ts;
15884
15884
  return new RegExp(pattern, useCaseSensitiveFileNames ? "" : "i");
15885
15885
  }
15886
15886
  ts.getRegexFromPattern = getRegexFromPattern;
15887
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
15887
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
15888
15888
  path = ts.normalizePath(path);
15889
15889
  currentDirectory = ts.normalizePath(currentDirectory);
15890
15890
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -15895,20 +15895,18 @@ var ts;
15895
15895
  var visited = new ts.Map();
15896
15896
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
15897
15897
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
15898
- var absoluteBasePath = _a[_i];
15899
- if (directoryExists(absoluteBasePath)) {
15900
- visitDirectory(absoluteBasePath, depth);
15901
- }
15898
+ var basePath = _a[_i];
15899
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
15902
15900
  }
15903
15901
  return ts.flatten(results);
15904
- function visitDirectory(absolutePath, depth) {
15902
+ function visitDirectory(path, absolutePath, depth) {
15905
15903
  var canonicalPath = toCanonical(realpath(absolutePath));
15906
15904
  if (visited.has(canonicalPath))
15907
15905
  return;
15908
15906
  visited.set(canonicalPath, true);
15909
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
15907
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
15910
15908
  var _loop_1 = function (current) {
15911
- var name = ts.combinePaths(absolutePath, current);
15909
+ var name = ts.combinePaths(path, current);
15912
15910
  var absoluteName = ts.combinePaths(absolutePath, current);
15913
15911
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
15914
15912
  return "continue";
@@ -15936,27 +15934,28 @@ var ts;
15936
15934
  }
15937
15935
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
15938
15936
  var current = _d[_c];
15937
+ var name = ts.combinePaths(path, current);
15939
15938
  var absoluteName = ts.combinePaths(absolutePath, current);
15940
15939
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
15941
15940
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
15942
- visitDirectory(absoluteName, depth);
15941
+ visitDirectory(name, absoluteName, depth);
15943
15942
  }
15944
15943
  }
15945
15944
  }
15946
15945
  }
15947
15946
  ts.matchFiles = matchFiles;
15948
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
15949
- var basePaths = [absoluteTsconfigPath];
15947
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
15948
+ var basePaths = [path];
15950
15949
  if (includes) {
15951
15950
  var includeBasePaths = [];
15952
15951
  for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) {
15953
15952
  var include = includes_1[_i];
15954
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
15955
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
15953
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
15954
+ includeBasePaths.push(getIncludeBasePath(absolute));
15956
15955
  }
15957
15956
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
15958
15957
  var _loop_2 = function (includeBasePath) {
15959
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
15958
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
15960
15959
  basePaths.push(includeBasePath);
15961
15960
  }
15962
15961
  };
@@ -92714,7 +92713,7 @@ var ts;
92714
92713
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
92715
92714
  var rootSymLinkResult;
92716
92715
  if (rootResult !== undefined) {
92717
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
92716
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
92718
92717
  }
92719
92718
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
92720
92719
  function getFileSystemEntries(dir) {
package/lib/tsserver.js CHANGED
@@ -100,7 +100,7 @@ var ts;
100
100
  // The following is baselined as a literal template type without intervention
101
101
  /** The version of the TypeScript compiler release */
102
102
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
103
- ts.version = ts.versionMajorMinor + ".0-dev.20211108";
103
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
104
104
  /* @internal */
105
105
  var Comparison;
106
106
  (function (Comparison) {
@@ -7767,7 +7767,7 @@ var ts;
7767
7767
  }
7768
7768
  }
7769
7769
  function readDirectory(path, extensions, excludes, includes, depth) {
7770
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
7770
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
7771
7771
  }
7772
7772
  function fileSystemEntryExists(path, entryKind) {
7773
7773
  // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -20045,7 +20045,7 @@ var ts;
20045
20045
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
20046
20046
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
20047
20047
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
20048
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
20048
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
20049
20049
  };
20050
20050
  }
20051
20051
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -20054,7 +20054,7 @@ var ts;
20054
20054
  }
20055
20055
  ts.getRegexFromPattern = getRegexFromPattern;
20056
20056
  /** @param path directory of the tsconfig.json */
20057
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
20057
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
20058
20058
  path = ts.normalizePath(path);
20059
20059
  currentDirectory = ts.normalizePath(currentDirectory);
20060
20060
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -20067,20 +20067,18 @@ var ts;
20067
20067
  var visited = new ts.Map();
20068
20068
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
20069
20069
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
20070
- var absoluteBasePath = _a[_i];
20071
- if (directoryExists(absoluteBasePath)) {
20072
- visitDirectory(absoluteBasePath, depth);
20073
- }
20070
+ var basePath = _a[_i];
20071
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
20074
20072
  }
20075
20073
  return ts.flatten(results);
20076
- function visitDirectory(absolutePath, depth) {
20074
+ function visitDirectory(path, absolutePath, depth) {
20077
20075
  var canonicalPath = toCanonical(realpath(absolutePath));
20078
20076
  if (visited.has(canonicalPath))
20079
20077
  return;
20080
20078
  visited.set(canonicalPath, true);
20081
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
20079
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
20082
20080
  var _loop_1 = function (current) {
20083
- var name = ts.combinePaths(absolutePath, current);
20081
+ var name = ts.combinePaths(path, current);
20084
20082
  var absoluteName = ts.combinePaths(absolutePath, current);
20085
20083
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
20086
20084
  return "continue";
@@ -20108,10 +20106,11 @@ var ts;
20108
20106
  }
20109
20107
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
20110
20108
  var current = _d[_c];
20109
+ var name = ts.combinePaths(path, current);
20111
20110
  var absoluteName = ts.combinePaths(absolutePath, current);
20112
20111
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
20113
20112
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
20114
- visitDirectory(absoluteName, depth);
20113
+ visitDirectory(name, absoluteName, depth);
20115
20114
  }
20116
20115
  }
20117
20116
  }
@@ -20119,11 +20118,10 @@ var ts;
20119
20118
  ts.matchFiles = matchFiles;
20120
20119
  /**
20121
20120
  * Computes the unique non-wildcard base paths amongst the provided include patterns.
20122
- * @returns Absolute directory paths
20123
20121
  */
20124
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
20122
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
20125
20123
  // Storage for our results in the form of literal paths (e.g. the paths as written by the user).
20126
- var basePaths = [absoluteTsconfigPath];
20124
+ var basePaths = [path];
20127
20125
  if (includes) {
20128
20126
  // Storage for literal base paths amongst the include patterns.
20129
20127
  var includeBasePaths = [];
@@ -20131,14 +20129,14 @@ var ts;
20131
20129
  var include = includes_1[_i];
20132
20130
  // We also need to check the relative paths by converting them to absolute and normalizing
20133
20131
  // in case they escape the base path (e.g "..\somedirectory")
20134
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
20132
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
20135
20133
  // Append the literal and canonical candidate base paths.
20136
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
20134
+ includeBasePaths.push(getIncludeBasePath(absolute));
20137
20135
  }
20138
20136
  // Sort the offsets array using either the literal or canonical path representations.
20139
20137
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
20140
20138
  var _loop_2 = function (includeBasePath) {
20141
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
20139
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
20142
20140
  basePaths.push(includeBasePath);
20143
20141
  }
20144
20142
  };
@@ -85908,8 +85906,7 @@ var ts;
85908
85906
  }
85909
85907
  // Modifiers are never allowed on properties except for 'async' on a method declaration
85910
85908
  if (prop.modifiers) {
85911
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
85912
- for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
85909
+ for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
85913
85910
  var mod = _c[_b];
85914
85911
  if (mod.kind !== 131 /* AsyncKeyword */ || prop.kind !== 168 /* MethodDeclaration */) {
85915
85912
  grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
@@ -112526,7 +112523,7 @@ var ts;
112526
112523
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
112527
112524
  var rootSymLinkResult;
112528
112525
  if (rootResult !== undefined) {
112529
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
112526
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
112530
112527
  }
112531
112528
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
112532
112529
  function getFileSystemEntries(dir) {
@@ -128726,9 +128723,6 @@ var ts;
128726
128723
  insertText = ts.escapeSnippetText(name) + "={$1}";
128727
128724
  isSnippet = true;
128728
128725
  }
128729
- if (isSnippet) {
128730
- replacementSpan = ts.createTextSpanFromNode(location, sourceFile);
128731
- }
128732
128726
  }
128733
128727
  if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
128734
128728
  return undefined;
@@ -128813,7 +128807,7 @@ var ts;
128813
128807
  removeComments: true,
128814
128808
  module: options.module,
128815
128809
  target: options.target,
128816
- omitTrailingSemicolon: true,
128810
+ omitTrailingSemicolon: false,
128817
128811
  newLine: ts.getNewLineKind(ts.getNewLineCharacter(options, ts.maybeBind(host, host.getNewLine))),
128818
128812
  });
128819
128813
  var importAdder = ts.codefix.createImportAdder(sourceFile, program, preferences, host);
@@ -128871,7 +128865,7 @@ var ts;
128871
128865
  completionNodes.push(node);
128872
128866
  }, body, 2 /* Property */, isAbstract);
128873
128867
  if (completionNodes.length) {
128874
- insertText = printer.printSnippetList(1 /* MultiLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
128868
+ insertText = printer.printSnippetList(1 /* MultiLine */ | 131072 /* NoTrailingNewLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
128875
128869
  }
128876
128870
  return { insertText: insertText, isSnippet: isSnippet, importAdder: importAdder };
128877
128871
  }
@@ -131065,6 +131059,8 @@ var ts;
131065
131059
  // function f<T>(x: T) {}
131066
131060
  // f({ abc/**/: "" }) // `abc` is a member of `T` but only because it declares itself
131067
131061
  function hasDeclarationOtherThanSelf(member) {
131062
+ if (!ts.length(member.declarations))
131063
+ return true;
131068
131064
  return ts.some(member.declarations, function (decl) { return decl.parent !== obj; });
131069
131065
  }
131070
131066
  }
@@ -133781,7 +133777,7 @@ var ts;
133781
133777
  var token = _a[_i];
133782
133778
  if (!ts.isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText)
133783
133779
  continue;
133784
- var referenceSymbol = checker.getSymbolAtLocation(token); // See GH#19955 for why the type annotation is necessary
133780
+ var referenceSymbol = checker.getSymbolAtLocation(token);
133785
133781
  if (referenceSymbol === symbol
133786
133782
  || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol
133787
133783
  || ts.isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) {
@@ -147839,8 +147835,6 @@ var ts;
147839
147835
  var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
147840
147836
  return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
147841
147837
  ? undefined
147842
- // (TODO: GH#18217)
147843
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
147844
147838
  : makeImportSpecifier(e.propertyName && e.propertyName.text, e.name.text);
147845
147839
  });
147846
147840
  if (importSpecifiers) {
@@ -155216,8 +155210,7 @@ var ts;
155216
155210
  return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
155217
155211
  }
155218
155212
  var statements = [];
155219
- var start2 = start; // TODO: GH#18217 Need to alias `start` to get this to compile. See https://github.com/Microsoft/TypeScript/issues/19955#issuecomment-344118248
155220
- for (var _i = 0, _a = start2.parent.statements; _i < _a.length; _i++) {
155213
+ for (var _i = 0, _a = start.parent.statements; _i < _a.length; _i++) {
155221
155214
  var statement = _a[_i];
155222
155215
  if (statement === start || statements.length) {
155223
155216
  var errors_1 = checkNode(statement);
@@ -159353,10 +159346,11 @@ var ts;
159353
159346
  }
159354
159347
  function findBaseOfDeclaration(checker, declaration, cb) {
159355
159348
  var _a;
159349
+ if (ts.hasStaticModifier(declaration))
159350
+ return;
159356
159351
  var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 170 /* Constructor */ ? declaration.parent.parent : declaration.parent;
159357
- if (!classOrInterfaceDeclaration) {
159352
+ if (!classOrInterfaceDeclaration)
159358
159353
  return;
159359
- }
159360
159354
  return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
159361
159355
  var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
159362
159356
  return symbol ? cb(symbol) : undefined;
@@ -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.20211108";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -7961,7 +7961,7 @@ var ts;
7961
7961
  }
7962
7962
  }
7963
7963
  function readDirectory(path, extensions, excludes, includes, depth) {
7964
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
7964
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
7965
7965
  }
7966
7966
  function fileSystemEntryExists(path, entryKind) {
7967
7967
  // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -20239,7 +20239,7 @@ var ts;
20239
20239
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
20240
20240
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
20241
20241
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
20242
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
20242
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
20243
20243
  };
20244
20244
  }
20245
20245
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -20248,7 +20248,7 @@ var ts;
20248
20248
  }
20249
20249
  ts.getRegexFromPattern = getRegexFromPattern;
20250
20250
  /** @param path directory of the tsconfig.json */
20251
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
20251
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
20252
20252
  path = ts.normalizePath(path);
20253
20253
  currentDirectory = ts.normalizePath(currentDirectory);
20254
20254
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -20261,20 +20261,18 @@ var ts;
20261
20261
  var visited = new ts.Map();
20262
20262
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
20263
20263
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
20264
- var absoluteBasePath = _a[_i];
20265
- if (directoryExists(absoluteBasePath)) {
20266
- visitDirectory(absoluteBasePath, depth);
20267
- }
20264
+ var basePath = _a[_i];
20265
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
20268
20266
  }
20269
20267
  return ts.flatten(results);
20270
- function visitDirectory(absolutePath, depth) {
20268
+ function visitDirectory(path, absolutePath, depth) {
20271
20269
  var canonicalPath = toCanonical(realpath(absolutePath));
20272
20270
  if (visited.has(canonicalPath))
20273
20271
  return;
20274
20272
  visited.set(canonicalPath, true);
20275
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
20273
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
20276
20274
  var _loop_1 = function (current) {
20277
- var name = ts.combinePaths(absolutePath, current);
20275
+ var name = ts.combinePaths(path, current);
20278
20276
  var absoluteName = ts.combinePaths(absolutePath, current);
20279
20277
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
20280
20278
  return "continue";
@@ -20302,10 +20300,11 @@ var ts;
20302
20300
  }
20303
20301
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
20304
20302
  var current = _d[_c];
20303
+ var name = ts.combinePaths(path, current);
20305
20304
  var absoluteName = ts.combinePaths(absolutePath, current);
20306
20305
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
20307
20306
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
20308
- visitDirectory(absoluteName, depth);
20307
+ visitDirectory(name, absoluteName, depth);
20309
20308
  }
20310
20309
  }
20311
20310
  }
@@ -20313,11 +20312,10 @@ var ts;
20313
20312
  ts.matchFiles = matchFiles;
20314
20313
  /**
20315
20314
  * Computes the unique non-wildcard base paths amongst the provided include patterns.
20316
- * @returns Absolute directory paths
20317
20315
  */
20318
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
20316
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
20319
20317
  // Storage for our results in the form of literal paths (e.g. the paths as written by the user).
20320
- var basePaths = [absoluteTsconfigPath];
20318
+ var basePaths = [path];
20321
20319
  if (includes) {
20322
20320
  // Storage for literal base paths amongst the include patterns.
20323
20321
  var includeBasePaths = [];
@@ -20325,14 +20323,14 @@ var ts;
20325
20323
  var include = includes_1[_i];
20326
20324
  // We also need to check the relative paths by converting them to absolute and normalizing
20327
20325
  // in case they escape the base path (e.g "..\somedirectory")
20328
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
20326
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
20329
20327
  // Append the literal and canonical candidate base paths.
20330
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
20328
+ includeBasePaths.push(getIncludeBasePath(absolute));
20331
20329
  }
20332
20330
  // Sort the offsets array using either the literal or canonical path representations.
20333
20331
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
20334
20332
  var _loop_2 = function (includeBasePath) {
20335
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
20333
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
20336
20334
  basePaths.push(includeBasePath);
20337
20335
  }
20338
20336
  };
@@ -86102,8 +86100,7 @@ var ts;
86102
86100
  }
86103
86101
  // Modifiers are never allowed on properties except for 'async' on a method declaration
86104
86102
  if (prop.modifiers) {
86105
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
86106
- for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
86103
+ for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
86107
86104
  var mod = _c[_b];
86108
86105
  if (mod.kind !== 131 /* AsyncKeyword */ || prop.kind !== 168 /* MethodDeclaration */) {
86109
86106
  grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
@@ -112720,7 +112717,7 @@ var ts;
112720
112717
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
112721
112718
  var rootSymLinkResult;
112722
112719
  if (rootResult !== undefined) {
112723
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
112720
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
112724
112721
  }
112725
112722
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
112726
112723
  function getFileSystemEntries(dir) {
@@ -129308,9 +129305,6 @@ var ts;
129308
129305
  insertText = ts.escapeSnippetText(name) + "={$1}";
129309
129306
  isSnippet = true;
129310
129307
  }
129311
- if (isSnippet) {
129312
- replacementSpan = ts.createTextSpanFromNode(location, sourceFile);
129313
- }
129314
129308
  }
129315
129309
  if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
129316
129310
  return undefined;
@@ -129395,7 +129389,7 @@ var ts;
129395
129389
  removeComments: true,
129396
129390
  module: options.module,
129397
129391
  target: options.target,
129398
- omitTrailingSemicolon: true,
129392
+ omitTrailingSemicolon: false,
129399
129393
  newLine: ts.getNewLineKind(ts.getNewLineCharacter(options, ts.maybeBind(host, host.getNewLine))),
129400
129394
  });
129401
129395
  var importAdder = ts.codefix.createImportAdder(sourceFile, program, preferences, host);
@@ -129453,7 +129447,7 @@ var ts;
129453
129447
  completionNodes.push(node);
129454
129448
  }, body, 2 /* Property */, isAbstract);
129455
129449
  if (completionNodes.length) {
129456
- insertText = printer.printSnippetList(1 /* MultiLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129450
+ insertText = printer.printSnippetList(1 /* MultiLine */ | 131072 /* NoTrailingNewLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129457
129451
  }
129458
129452
  return { insertText: insertText, isSnippet: isSnippet, importAdder: importAdder };
129459
129453
  }
@@ -131647,6 +131641,8 @@ var ts;
131647
131641
  // function f<T>(x: T) {}
131648
131642
  // f({ abc/**/: "" }) // `abc` is a member of `T` but only because it declares itself
131649
131643
  function hasDeclarationOtherThanSelf(member) {
131644
+ if (!ts.length(member.declarations))
131645
+ return true;
131650
131646
  return ts.some(member.declarations, function (decl) { return decl.parent !== obj; });
131651
131647
  }
131652
131648
  }
@@ -134363,7 +134359,7 @@ var ts;
134363
134359
  var token = _a[_i];
134364
134360
  if (!ts.isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText)
134365
134361
  continue;
134366
- var referenceSymbol = checker.getSymbolAtLocation(token); // See GH#19955 for why the type annotation is necessary
134362
+ var referenceSymbol = checker.getSymbolAtLocation(token);
134367
134363
  if (referenceSymbol === symbol
134368
134364
  || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol
134369
134365
  || ts.isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) {
@@ -148421,8 +148417,6 @@ var ts;
148421
148417
  var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
148422
148418
  return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
148423
148419
  ? undefined
148424
- // (TODO: GH#18217)
148425
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
148426
148420
  : makeImportSpecifier(e.propertyName && e.propertyName.text, e.name.text);
148427
148421
  });
148428
148422
  if (importSpecifiers) {
@@ -155798,8 +155792,7 @@ var ts;
155798
155792
  return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
155799
155793
  }
155800
155794
  var statements = [];
155801
- var start2 = start; // TODO: GH#18217 Need to alias `start` to get this to compile. See https://github.com/Microsoft/TypeScript/issues/19955#issuecomment-344118248
155802
- for (var _i = 0, _a = start2.parent.statements; _i < _a.length; _i++) {
155795
+ for (var _i = 0, _a = start.parent.statements; _i < _a.length; _i++) {
155803
155796
  var statement = _a[_i];
155804
155797
  if (statement === start || statements.length) {
155805
155798
  var errors_1 = checkNode(statement);
@@ -159935,10 +159928,11 @@ var ts;
159935
159928
  }
159936
159929
  function findBaseOfDeclaration(checker, declaration, cb) {
159937
159930
  var _a;
159931
+ if (ts.hasStaticModifier(declaration))
159932
+ return;
159938
159933
  var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 170 /* Constructor */ ? declaration.parent.parent : declaration.parent;
159939
- if (!classOrInterfaceDeclaration) {
159934
+ if (!classOrInterfaceDeclaration)
159940
159935
  return;
159941
- }
159942
159936
  return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
159943
159937
  var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
159944
159938
  return symbol ? cb(symbol) : undefined;
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.20211108";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -7961,7 +7961,7 @@ var ts;
7961
7961
  }
7962
7962
  }
7963
7963
  function readDirectory(path, extensions, excludes, includes, depth) {
7964
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
7964
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
7965
7965
  }
7966
7966
  function fileSystemEntryExists(path, entryKind) {
7967
7967
  // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -20239,7 +20239,7 @@ var ts;
20239
20239
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
20240
20240
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
20241
20241
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
20242
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
20242
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
20243
20243
  };
20244
20244
  }
20245
20245
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -20248,7 +20248,7 @@ var ts;
20248
20248
  }
20249
20249
  ts.getRegexFromPattern = getRegexFromPattern;
20250
20250
  /** @param path directory of the tsconfig.json */
20251
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
20251
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
20252
20252
  path = ts.normalizePath(path);
20253
20253
  currentDirectory = ts.normalizePath(currentDirectory);
20254
20254
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -20261,20 +20261,18 @@ var ts;
20261
20261
  var visited = new ts.Map();
20262
20262
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
20263
20263
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
20264
- var absoluteBasePath = _a[_i];
20265
- if (directoryExists(absoluteBasePath)) {
20266
- visitDirectory(absoluteBasePath, depth);
20267
- }
20264
+ var basePath = _a[_i];
20265
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
20268
20266
  }
20269
20267
  return ts.flatten(results);
20270
- function visitDirectory(absolutePath, depth) {
20268
+ function visitDirectory(path, absolutePath, depth) {
20271
20269
  var canonicalPath = toCanonical(realpath(absolutePath));
20272
20270
  if (visited.has(canonicalPath))
20273
20271
  return;
20274
20272
  visited.set(canonicalPath, true);
20275
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
20273
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
20276
20274
  var _loop_1 = function (current) {
20277
- var name = ts.combinePaths(absolutePath, current);
20275
+ var name = ts.combinePaths(path, current);
20278
20276
  var absoluteName = ts.combinePaths(absolutePath, current);
20279
20277
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
20280
20278
  return "continue";
@@ -20302,10 +20300,11 @@ var ts;
20302
20300
  }
20303
20301
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
20304
20302
  var current = _d[_c];
20303
+ var name = ts.combinePaths(path, current);
20305
20304
  var absoluteName = ts.combinePaths(absolutePath, current);
20306
20305
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
20307
20306
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
20308
- visitDirectory(absoluteName, depth);
20307
+ visitDirectory(name, absoluteName, depth);
20309
20308
  }
20310
20309
  }
20311
20310
  }
@@ -20313,11 +20312,10 @@ var ts;
20313
20312
  ts.matchFiles = matchFiles;
20314
20313
  /**
20315
20314
  * Computes the unique non-wildcard base paths amongst the provided include patterns.
20316
- * @returns Absolute directory paths
20317
20315
  */
20318
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
20316
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
20319
20317
  // Storage for our results in the form of literal paths (e.g. the paths as written by the user).
20320
- var basePaths = [absoluteTsconfigPath];
20318
+ var basePaths = [path];
20321
20319
  if (includes) {
20322
20320
  // Storage for literal base paths amongst the include patterns.
20323
20321
  var includeBasePaths = [];
@@ -20325,14 +20323,14 @@ var ts;
20325
20323
  var include = includes_1[_i];
20326
20324
  // We also need to check the relative paths by converting them to absolute and normalizing
20327
20325
  // in case they escape the base path (e.g "..\somedirectory")
20328
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
20326
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
20329
20327
  // Append the literal and canonical candidate base paths.
20330
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
20328
+ includeBasePaths.push(getIncludeBasePath(absolute));
20331
20329
  }
20332
20330
  // Sort the offsets array using either the literal or canonical path representations.
20333
20331
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
20334
20332
  var _loop_2 = function (includeBasePath) {
20335
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
20333
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
20336
20334
  basePaths.push(includeBasePath);
20337
20335
  }
20338
20336
  };
@@ -86102,8 +86100,7 @@ var ts;
86102
86100
  }
86103
86101
  // Modifiers are never allowed on properties except for 'async' on a method declaration
86104
86102
  if (prop.modifiers) {
86105
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
86106
- for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
86103
+ for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
86107
86104
  var mod = _c[_b];
86108
86105
  if (mod.kind !== 131 /* AsyncKeyword */ || prop.kind !== 168 /* MethodDeclaration */) {
86109
86106
  grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
@@ -112720,7 +112717,7 @@ var ts;
112720
112717
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
112721
112718
  var rootSymLinkResult;
112722
112719
  if (rootResult !== undefined) {
112723
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
112720
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
112724
112721
  }
112725
112722
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
112726
112723
  function getFileSystemEntries(dir) {
@@ -129308,9 +129305,6 @@ var ts;
129308
129305
  insertText = ts.escapeSnippetText(name) + "={$1}";
129309
129306
  isSnippet = true;
129310
129307
  }
129311
- if (isSnippet) {
129312
- replacementSpan = ts.createTextSpanFromNode(location, sourceFile);
129313
- }
129314
129308
  }
129315
129309
  if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
129316
129310
  return undefined;
@@ -129395,7 +129389,7 @@ var ts;
129395
129389
  removeComments: true,
129396
129390
  module: options.module,
129397
129391
  target: options.target,
129398
- omitTrailingSemicolon: true,
129392
+ omitTrailingSemicolon: false,
129399
129393
  newLine: ts.getNewLineKind(ts.getNewLineCharacter(options, ts.maybeBind(host, host.getNewLine))),
129400
129394
  });
129401
129395
  var importAdder = ts.codefix.createImportAdder(sourceFile, program, preferences, host);
@@ -129453,7 +129447,7 @@ var ts;
129453
129447
  completionNodes.push(node);
129454
129448
  }, body, 2 /* Property */, isAbstract);
129455
129449
  if (completionNodes.length) {
129456
- insertText = printer.printSnippetList(1 /* MultiLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129450
+ insertText = printer.printSnippetList(1 /* MultiLine */ | 131072 /* NoTrailingNewLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129457
129451
  }
129458
129452
  return { insertText: insertText, isSnippet: isSnippet, importAdder: importAdder };
129459
129453
  }
@@ -131647,6 +131641,8 @@ var ts;
131647
131641
  // function f<T>(x: T) {}
131648
131642
  // f({ abc/**/: "" }) // `abc` is a member of `T` but only because it declares itself
131649
131643
  function hasDeclarationOtherThanSelf(member) {
131644
+ if (!ts.length(member.declarations))
131645
+ return true;
131650
131646
  return ts.some(member.declarations, function (decl) { return decl.parent !== obj; });
131651
131647
  }
131652
131648
  }
@@ -134363,7 +134359,7 @@ var ts;
134363
134359
  var token = _a[_i];
134364
134360
  if (!ts.isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText)
134365
134361
  continue;
134366
- var referenceSymbol = checker.getSymbolAtLocation(token); // See GH#19955 for why the type annotation is necessary
134362
+ var referenceSymbol = checker.getSymbolAtLocation(token);
134367
134363
  if (referenceSymbol === symbol
134368
134364
  || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol
134369
134365
  || ts.isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) {
@@ -148421,8 +148417,6 @@ var ts;
148421
148417
  var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
148422
148418
  return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
148423
148419
  ? undefined
148424
- // (TODO: GH#18217)
148425
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
148426
148420
  : makeImportSpecifier(e.propertyName && e.propertyName.text, e.name.text);
148427
148421
  });
148428
148422
  if (importSpecifiers) {
@@ -155798,8 +155792,7 @@ var ts;
155798
155792
  return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
155799
155793
  }
155800
155794
  var statements = [];
155801
- var start2 = start; // TODO: GH#18217 Need to alias `start` to get this to compile. See https://github.com/Microsoft/TypeScript/issues/19955#issuecomment-344118248
155802
- for (var _i = 0, _a = start2.parent.statements; _i < _a.length; _i++) {
155795
+ for (var _i = 0, _a = start.parent.statements; _i < _a.length; _i++) {
155803
155796
  var statement = _a[_i];
155804
155797
  if (statement === start || statements.length) {
155805
155798
  var errors_1 = checkNode(statement);
@@ -159935,10 +159928,11 @@ var ts;
159935
159928
  }
159936
159929
  function findBaseOfDeclaration(checker, declaration, cb) {
159937
159930
  var _a;
159931
+ if (ts.hasStaticModifier(declaration))
159932
+ return;
159938
159933
  var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 170 /* Constructor */ ? declaration.parent.parent : declaration.parent;
159939
- if (!classOrInterfaceDeclaration) {
159934
+ if (!classOrInterfaceDeclaration)
159940
159935
  return;
159941
- }
159942
159936
  return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
159943
159937
  var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
159944
159938
  return symbol ? cb(symbol) : undefined;
@@ -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.20211108";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -7961,7 +7961,7 @@ var ts;
7961
7961
  }
7962
7962
  }
7963
7963
  function readDirectory(path, extensions, excludes, includes, depth) {
7964
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
7964
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
7965
7965
  }
7966
7966
  function fileSystemEntryExists(path, entryKind) {
7967
7967
  // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -20239,7 +20239,7 @@ var ts;
20239
20239
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
20240
20240
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
20241
20241
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
20242
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
20242
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
20243
20243
  };
20244
20244
  }
20245
20245
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -20248,7 +20248,7 @@ var ts;
20248
20248
  }
20249
20249
  ts.getRegexFromPattern = getRegexFromPattern;
20250
20250
  /** @param path directory of the tsconfig.json */
20251
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
20251
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
20252
20252
  path = ts.normalizePath(path);
20253
20253
  currentDirectory = ts.normalizePath(currentDirectory);
20254
20254
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -20261,20 +20261,18 @@ var ts;
20261
20261
  var visited = new ts.Map();
20262
20262
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
20263
20263
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
20264
- var absoluteBasePath = _a[_i];
20265
- if (directoryExists(absoluteBasePath)) {
20266
- visitDirectory(absoluteBasePath, depth);
20267
- }
20264
+ var basePath = _a[_i];
20265
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
20268
20266
  }
20269
20267
  return ts.flatten(results);
20270
- function visitDirectory(absolutePath, depth) {
20268
+ function visitDirectory(path, absolutePath, depth) {
20271
20269
  var canonicalPath = toCanonical(realpath(absolutePath));
20272
20270
  if (visited.has(canonicalPath))
20273
20271
  return;
20274
20272
  visited.set(canonicalPath, true);
20275
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
20273
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
20276
20274
  var _loop_1 = function (current) {
20277
- var name = ts.combinePaths(absolutePath, current);
20275
+ var name = ts.combinePaths(path, current);
20278
20276
  var absoluteName = ts.combinePaths(absolutePath, current);
20279
20277
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
20280
20278
  return "continue";
@@ -20302,10 +20300,11 @@ var ts;
20302
20300
  }
20303
20301
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
20304
20302
  var current = _d[_c];
20303
+ var name = ts.combinePaths(path, current);
20305
20304
  var absoluteName = ts.combinePaths(absolutePath, current);
20306
20305
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
20307
20306
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
20308
- visitDirectory(absoluteName, depth);
20307
+ visitDirectory(name, absoluteName, depth);
20309
20308
  }
20310
20309
  }
20311
20310
  }
@@ -20313,11 +20312,10 @@ var ts;
20313
20312
  ts.matchFiles = matchFiles;
20314
20313
  /**
20315
20314
  * Computes the unique non-wildcard base paths amongst the provided include patterns.
20316
- * @returns Absolute directory paths
20317
20315
  */
20318
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
20316
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
20319
20317
  // Storage for our results in the form of literal paths (e.g. the paths as written by the user).
20320
- var basePaths = [absoluteTsconfigPath];
20318
+ var basePaths = [path];
20321
20319
  if (includes) {
20322
20320
  // Storage for literal base paths amongst the include patterns.
20323
20321
  var includeBasePaths = [];
@@ -20325,14 +20323,14 @@ var ts;
20325
20323
  var include = includes_1[_i];
20326
20324
  // We also need to check the relative paths by converting them to absolute and normalizing
20327
20325
  // in case they escape the base path (e.g "..\somedirectory")
20328
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
20326
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
20329
20327
  // Append the literal and canonical candidate base paths.
20330
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
20328
+ includeBasePaths.push(getIncludeBasePath(absolute));
20331
20329
  }
20332
20330
  // Sort the offsets array using either the literal or canonical path representations.
20333
20331
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
20334
20332
  var _loop_2 = function (includeBasePath) {
20335
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
20333
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
20336
20334
  basePaths.push(includeBasePath);
20337
20335
  }
20338
20336
  };
@@ -86102,8 +86100,7 @@ var ts;
86102
86100
  }
86103
86101
  // Modifiers are never allowed on properties except for 'async' on a method declaration
86104
86102
  if (prop.modifiers) {
86105
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
86106
- for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
86103
+ for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
86107
86104
  var mod = _c[_b];
86108
86105
  if (mod.kind !== 131 /* AsyncKeyword */ || prop.kind !== 168 /* MethodDeclaration */) {
86109
86106
  grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
@@ -112720,7 +112717,7 @@ var ts;
112720
112717
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
112721
112718
  var rootSymLinkResult;
112722
112719
  if (rootResult !== undefined) {
112723
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
112720
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
112724
112721
  }
112725
112722
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
112726
112723
  function getFileSystemEntries(dir) {
@@ -129308,9 +129305,6 @@ var ts;
129308
129305
  insertText = ts.escapeSnippetText(name) + "={$1}";
129309
129306
  isSnippet = true;
129310
129307
  }
129311
- if (isSnippet) {
129312
- replacementSpan = ts.createTextSpanFromNode(location, sourceFile);
129313
- }
129314
129308
  }
129315
129309
  if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
129316
129310
  return undefined;
@@ -129395,7 +129389,7 @@ var ts;
129395
129389
  removeComments: true,
129396
129390
  module: options.module,
129397
129391
  target: options.target,
129398
- omitTrailingSemicolon: true,
129392
+ omitTrailingSemicolon: false,
129399
129393
  newLine: ts.getNewLineKind(ts.getNewLineCharacter(options, ts.maybeBind(host, host.getNewLine))),
129400
129394
  });
129401
129395
  var importAdder = ts.codefix.createImportAdder(sourceFile, program, preferences, host);
@@ -129453,7 +129447,7 @@ var ts;
129453
129447
  completionNodes.push(node);
129454
129448
  }, body, 2 /* Property */, isAbstract);
129455
129449
  if (completionNodes.length) {
129456
- insertText = printer.printSnippetList(1 /* MultiLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129450
+ insertText = printer.printSnippetList(1 /* MultiLine */ | 131072 /* NoTrailingNewLine */, ts.factory.createNodeArray(completionNodes), sourceFile);
129457
129451
  }
129458
129452
  return { insertText: insertText, isSnippet: isSnippet, importAdder: importAdder };
129459
129453
  }
@@ -131647,6 +131641,8 @@ var ts;
131647
131641
  // function f<T>(x: T) {}
131648
131642
  // f({ abc/**/: "" }) // `abc` is a member of `T` but only because it declares itself
131649
131643
  function hasDeclarationOtherThanSelf(member) {
131644
+ if (!ts.length(member.declarations))
131645
+ return true;
131650
131646
  return ts.some(member.declarations, function (decl) { return decl.parent !== obj; });
131651
131647
  }
131652
131648
  }
@@ -134363,7 +134359,7 @@ var ts;
134363
134359
  var token = _a[_i];
134364
134360
  if (!ts.isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText)
134365
134361
  continue;
134366
- var referenceSymbol = checker.getSymbolAtLocation(token); // See GH#19955 for why the type annotation is necessary
134362
+ var referenceSymbol = checker.getSymbolAtLocation(token);
134367
134363
  if (referenceSymbol === symbol
134368
134364
  || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol
134369
134365
  || ts.isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) {
@@ -148421,8 +148417,6 @@ var ts;
148421
148417
  var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
148422
148418
  return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
148423
148419
  ? undefined
148424
- // (TODO: GH#18217)
148425
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
148426
148420
  : makeImportSpecifier(e.propertyName && e.propertyName.text, e.name.text);
148427
148421
  });
148428
148422
  if (importSpecifiers) {
@@ -155798,8 +155792,7 @@ var ts;
155798
155792
  return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
155799
155793
  }
155800
155794
  var statements = [];
155801
- var start2 = start; // TODO: GH#18217 Need to alias `start` to get this to compile. See https://github.com/Microsoft/TypeScript/issues/19955#issuecomment-344118248
155802
- for (var _i = 0, _a = start2.parent.statements; _i < _a.length; _i++) {
155795
+ for (var _i = 0, _a = start.parent.statements; _i < _a.length; _i++) {
155803
155796
  var statement = _a[_i];
155804
155797
  if (statement === start || statements.length) {
155805
155798
  var errors_1 = checkNode(statement);
@@ -159935,10 +159928,11 @@ var ts;
159935
159928
  }
159936
159929
  function findBaseOfDeclaration(checker, declaration, cb) {
159937
159930
  var _a;
159931
+ if (ts.hasStaticModifier(declaration))
159932
+ return;
159938
159933
  var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 170 /* Constructor */ ? declaration.parent.parent : declaration.parent;
159939
- if (!classOrInterfaceDeclaration) {
159934
+ if (!classOrInterfaceDeclaration)
159940
159935
  return;
159941
- }
159942
159936
  return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
159943
159937
  var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
159944
159938
  return symbol ? cb(symbol) : undefined;
@@ -89,7 +89,7 @@ var ts;
89
89
  // The following is baselined as a literal template type without intervention
90
90
  /** The version of the TypeScript compiler release */
91
91
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
92
- ts.version = ts.versionMajorMinor + ".0-dev.20211108";
92
+ ts.version = ts.versionMajorMinor + ".0-dev.20211112";
93
93
  /* @internal */
94
94
  var Comparison;
95
95
  (function (Comparison) {
@@ -7756,7 +7756,7 @@ var ts;
7756
7756
  }
7757
7757
  }
7758
7758
  function readDirectory(path, extensions, excludes, includes, depth) {
7759
- return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
7759
+ return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
7760
7760
  }
7761
7761
  function fileSystemEntryExists(path, entryKind) {
7762
7762
  // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -20034,7 +20034,7 @@ var ts;
20034
20034
  includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
20035
20035
  includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
20036
20036
  excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
20037
- basePaths: getBasePaths(absolutePath, includes, useCaseSensitiveFileNames)
20037
+ basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
20038
20038
  };
20039
20039
  }
20040
20040
  ts.getFileMatcherPatterns = getFileMatcherPatterns;
@@ -20043,7 +20043,7 @@ var ts;
20043
20043
  }
20044
20044
  ts.getRegexFromPattern = getRegexFromPattern;
20045
20045
  /** @param path directory of the tsconfig.json */
20046
- function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
20046
+ function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
20047
20047
  path = ts.normalizePath(path);
20048
20048
  currentDirectory = ts.normalizePath(currentDirectory);
20049
20049
  var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -20056,20 +20056,18 @@ var ts;
20056
20056
  var visited = new ts.Map();
20057
20057
  var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
20058
20058
  for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
20059
- var absoluteBasePath = _a[_i];
20060
- if (directoryExists(absoluteBasePath)) {
20061
- visitDirectory(absoluteBasePath, depth);
20062
- }
20059
+ var basePath = _a[_i];
20060
+ visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
20063
20061
  }
20064
20062
  return ts.flatten(results);
20065
- function visitDirectory(absolutePath, depth) {
20063
+ function visitDirectory(path, absolutePath, depth) {
20066
20064
  var canonicalPath = toCanonical(realpath(absolutePath));
20067
20065
  if (visited.has(canonicalPath))
20068
20066
  return;
20069
20067
  visited.set(canonicalPath, true);
20070
- var _a = getFileSystemEntries(absolutePath), files = _a.files, directories = _a.directories;
20068
+ var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
20071
20069
  var _loop_1 = function (current) {
20072
- var name = ts.combinePaths(absolutePath, current);
20070
+ var name = ts.combinePaths(path, current);
20073
20071
  var absoluteName = ts.combinePaths(absolutePath, current);
20074
20072
  if (extensions && !ts.fileExtensionIsOneOf(name, extensions))
20075
20073
  return "continue";
@@ -20097,10 +20095,11 @@ var ts;
20097
20095
  }
20098
20096
  for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) {
20099
20097
  var current = _d[_c];
20098
+ var name = ts.combinePaths(path, current);
20100
20099
  var absoluteName = ts.combinePaths(absolutePath, current);
20101
20100
  if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
20102
20101
  (!excludeRegex || !excludeRegex.test(absoluteName))) {
20103
- visitDirectory(absoluteName, depth);
20102
+ visitDirectory(name, absoluteName, depth);
20104
20103
  }
20105
20104
  }
20106
20105
  }
@@ -20108,11 +20107,10 @@ var ts;
20108
20107
  ts.matchFiles = matchFiles;
20109
20108
  /**
20110
20109
  * Computes the unique non-wildcard base paths amongst the provided include patterns.
20111
- * @returns Absolute directory paths
20112
20110
  */
20113
- function getBasePaths(absoluteTsconfigPath, includes, useCaseSensitiveFileNames) {
20111
+ function getBasePaths(path, includes, useCaseSensitiveFileNames) {
20114
20112
  // Storage for our results in the form of literal paths (e.g. the paths as written by the user).
20115
- var basePaths = [absoluteTsconfigPath];
20113
+ var basePaths = [path];
20116
20114
  if (includes) {
20117
20115
  // Storage for literal base paths amongst the include patterns.
20118
20116
  var includeBasePaths = [];
@@ -20120,14 +20118,14 @@ var ts;
20120
20118
  var include = includes_1[_i];
20121
20119
  // We also need to check the relative paths by converting them to absolute and normalizing
20122
20120
  // in case they escape the base path (e.g "..\somedirectory")
20123
- var absoluteIncludePath = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(absoluteTsconfigPath, include));
20121
+ var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(ts.combinePaths(path, include));
20124
20122
  // Append the literal and canonical candidate base paths.
20125
- includeBasePaths.push(getIncludeBasePath(absoluteIncludePath));
20123
+ includeBasePaths.push(getIncludeBasePath(absolute));
20126
20124
  }
20127
20125
  // Sort the offsets array using either the literal or canonical path representations.
20128
20126
  includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
20129
20127
  var _loop_2 = function (includeBasePath) {
20130
- if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, absoluteTsconfigPath, !useCaseSensitiveFileNames); })) {
20128
+ if (ts.every(basePaths, function (basePath) { return !ts.containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
20131
20129
  basePaths.push(includeBasePath);
20132
20130
  }
20133
20131
  };
@@ -85897,8 +85895,7 @@ var ts;
85897
85895
  }
85898
85896
  // Modifiers are never allowed on properties except for 'async' on a method declaration
85899
85897
  if (prop.modifiers) {
85900
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
85901
- for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
85898
+ for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
85902
85899
  var mod = _c[_b];
85903
85900
  if (mod.kind !== 131 /* AsyncKeyword */ || prop.kind !== 168 /* MethodDeclaration */) {
85904
85901
  grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
@@ -112515,7 +112512,7 @@ var ts;
112515
112512
  var rootResult = tryReadDirectory(rootDir, rootDirPath);
112516
112513
  var rootSymLinkResult;
112517
112514
  if (rootResult !== undefined) {
112518
- return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
112515
+ return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
112519
112516
  }
112520
112517
  return host.readDirectory(rootDir, extensions, excludes, includes, depth);
112521
112518
  function getFileSystemEntries(dir) {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "typescript",
3
3
  "author": "Microsoft Corp.",
4
4
  "homepage": "https://www.typescriptlang.org/",
5
- "version": "4.6.0-dev.20211108",
5
+ "version": "4.6.0-dev.20211112",
6
6
  "license": "Apache-2.0",
7
7
  "description": "TypeScript is a language for application scale JavaScript development",
8
8
  "keywords": [