typescript 4.6.0-dev.20220114 → 4.6.0-dev.20220118

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/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.20220114";
72
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
73
73
  var NativeCollections;
74
74
  (function (NativeCollections) {
75
75
  function tryGetNativeMap() {
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.20220114";
103
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
104
104
  /* @internal */
105
105
  var Comparison;
106
106
  (function (Comparison) {
@@ -129113,7 +129113,7 @@ var ts;
129113
129113
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
129114
129114
  }
129115
129115
  function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext) {
129116
- var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129116
+ var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129117
129117
  // Verify if the file is JSX language variant
129118
129118
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
129119
129119
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -129124,7 +129124,7 @@ var ts;
129124
129124
  var entries = ts.createSortedArray();
129125
129125
  if (isUncheckedFile(sourceFile, compilerOptions)) {
129126
129126
  var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries,
129127
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129127
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129128
129128
  getJSCompletionEntries(sourceFile, location.pos, uniqueNames, ts.getEmitScriptTarget(compilerOptions), entries); // TODO: GH#18217
129129
129129
  }
129130
129130
  else {
@@ -129132,7 +129132,7 @@ var ts;
129132
129132
  return undefined;
129133
129133
  }
129134
129134
  getCompletionEntriesFromSymbols(symbols, entries,
129135
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129135
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129136
129136
  }
129137
129137
  if (keywordFilters !== 0 /* None */) {
129138
129138
  var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -129238,7 +129238,7 @@ var ts;
129238
129238
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
129239
129239
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* string */, kindModifiers: "" /* none */, sortText: SortText.LocationPriority };
129240
129240
  }
129241
- function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext) {
129241
+ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
129242
129242
  var _a, _b;
129243
129243
  var insertText;
129244
129244
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -129309,8 +129309,7 @@ var ts;
129309
129309
  source = CompletionSource.ClassMemberSnippet;
129310
129310
  }
129311
129311
  }
129312
- var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location);
129313
- if (kind === "JSX attribute" /* jsxAttribute */ && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129312
+ if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129314
129313
  var useBraces_1 = preferences.jsxAttributeCompletionStyle === "braces";
129315
129314
  var type = typeChecker.getTypeOfSymbolAtLocation(symbol, location);
129316
129315
  // If is boolean like or undefined, don't return a snippet we want just to return the completion.
@@ -129348,7 +129347,7 @@ var ts;
129348
129347
  // entries (like JavaScript identifier entries).
129349
129348
  return {
129350
129349
  name: name,
129351
- kind: kind,
129350
+ kind: ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location),
129352
129351
  kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
129353
129352
  sortText: sortText,
129354
129353
  source: source,
@@ -129644,7 +129643,7 @@ var ts;
129644
129643
  return CompletionSource.ThisProperty;
129645
129644
  }
129646
129645
  }
129647
- function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
129646
+ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag) {
129648
129647
  var _a;
129649
129648
  var start = ts.timestamp();
129650
129649
  var variableDeclaration = getVariableDeclaration(location);
@@ -129665,7 +129664,7 @@ var ts;
129665
129664
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
129666
129665
  var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
129667
129666
  var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
129668
- var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext);
129667
+ var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
129669
129668
  if (!entry) {
129670
129669
  continue;
129671
129670
  }
@@ -130259,6 +130258,7 @@ var ts;
130259
130258
  symbolToSortTextIdMap: symbolToSortTextIdMap,
130260
130259
  isTypeOnlyLocation: isTypeOnlyLocation,
130261
130260
  isJsxIdentifierExpected: isJsxIdentifierExpected,
130261
+ isRightOfOpenTag: isRightOfOpenTag,
130262
130262
  importCompletionNode: importCompletionNode,
130263
130263
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
130264
130264
  };
@@ -145238,7 +145238,11 @@ var ts;
145238
145238
  oldTags[i] = merged;
145239
145239
  return !!merged;
145240
145240
  }); });
145241
- var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true)));
145241
+ var tags = __spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true);
145242
+ var jsDoc = ts.singleOrUndefined(parent.jsDoc);
145243
+ var comment = jsDoc && ts.positionsAreOnSameLine(jsDoc.pos, jsDoc.end, sourceFile) && !ts.length(comments) ? undefined :
145244
+ ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n")));
145245
+ var tag = ts.factory.createJSDocComment(comment, ts.factory.createNodeArray(tags));
145242
145246
  var host = updateJSDocHost(parent);
145243
145247
  this.insertJsdocCommentBefore(sourceFile, host, tag);
145244
145248
  };
@@ -145668,6 +145672,8 @@ var ts;
145668
145672
  }
145669
145673
  case 339 /* JSDocReturnTag */:
145670
145674
  return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
145675
+ case 341 /* JSDocTypeTag */:
145676
+ return ts.factory.createJSDocTypeTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
145671
145677
  }
145672
145678
  }
145673
145679
  // find first non-whitespace position in the leading trivia of the node
@@ -149510,10 +149516,15 @@ var ts;
149510
149516
  if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
149511
149517
  return ts.compareBooleans(allowsImportingSpecifier(b.moduleSpecifier), allowsImportingSpecifier(a.moduleSpecifier))
149512
149518
  || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
149519
+ || ts.compareBooleans(isOnlyDotsAndSlashes(a.moduleSpecifier), isOnlyDotsAndSlashes(b.moduleSpecifier))
149513
149520
  || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
149514
149521
  }
149515
149522
  return 0 /* EqualTo */;
149516
149523
  }
149524
+ var notDotOrSlashPattern = /[^.\/]/;
149525
+ function isOnlyDotsAndSlashes(path) {
149526
+ return !notDotOrSlashPattern.test(path);
149527
+ }
149517
149528
  function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
149518
149529
  if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
149519
149530
  return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
@@ -154126,35 +154137,34 @@ var ts;
154126
154137
  codefix.registerCodeFix({
154127
154138
  errorCodes: errorCodes,
154128
154139
  getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) {
154129
- var propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start);
154130
- if (!propertyDeclaration)
154140
+ var info = getInfo(context.sourceFile, context.span.start);
154141
+ if (!info)
154131
154142
  return;
154132
- var result = [
154133
- getActionForAddMissingUndefinedType(context, propertyDeclaration),
154134
- getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration)
154135
- ];
154136
- ts.append(result, getActionForAddMissingInitializer(context, propertyDeclaration));
154143
+ var result = [];
154144
+ ts.append(result, getActionForAddMissingUndefinedType(context, info));
154145
+ ts.append(result, getActionForAddMissingDefiniteAssignmentAssertion(context, info));
154146
+ ts.append(result, getActionForAddMissingInitializer(context, info));
154137
154147
  return result;
154138
154148
  },
154139
154149
  fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer],
154140
154150
  getAllCodeActions: function (context) {
154141
154151
  return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
154142
- var propertyDeclaration = getPropertyDeclaration(diag.file, diag.start);
154143
- if (!propertyDeclaration)
154152
+ var info = getInfo(diag.file, diag.start);
154153
+ if (!info)
154144
154154
  return;
154145
154155
  switch (context.fixId) {
154146
154156
  case fixIdAddDefiniteAssignmentAssertions:
154147
- addDefiniteAssignmentAssertion(changes, diag.file, propertyDeclaration);
154157
+ addDefiniteAssignmentAssertion(changes, diag.file, info.prop);
154148
154158
  break;
154149
154159
  case fixIdAddUndefinedType:
154150
- addUndefinedType(changes, diag.file, propertyDeclaration);
154160
+ addUndefinedType(changes, diag.file, info);
154151
154161
  break;
154152
154162
  case fixIdAddInitializer:
154153
154163
  var checker = context.program.getTypeChecker();
154154
- var initializer = getInitializer(checker, propertyDeclaration);
154164
+ var initializer = getInitializer(checker, info.prop);
154155
154165
  if (!initializer)
154156
154166
  return;
154157
- addInitializer(changes, diag.file, propertyDeclaration, initializer);
154167
+ addInitializer(changes, diag.file, info.prop, initializer);
154158
154168
  break;
154159
154169
  default:
154160
154170
  ts.Debug.fail(JSON.stringify(context.fixId));
@@ -154162,35 +154172,50 @@ var ts;
154162
154172
  });
154163
154173
  },
154164
154174
  });
154165
- function getPropertyDeclaration(sourceFile, pos) {
154175
+ function getInfo(sourceFile, pos) {
154166
154176
  var token = ts.getTokenAtPosition(sourceFile, pos);
154167
- return ts.isIdentifier(token) ? ts.cast(token.parent, ts.isPropertyDeclaration) : undefined;
154177
+ if (ts.isIdentifier(token) && ts.isPropertyDeclaration(token.parent)) {
154178
+ var type = ts.getEffectiveTypeAnnotationNode(token.parent);
154179
+ if (type) {
154180
+ return { type: type, prop: token.parent, isJs: ts.isInJSFile(token.parent) };
154181
+ }
154182
+ }
154183
+ return undefined;
154168
154184
  }
154169
- function getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) {
154170
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, propertyDeclaration); });
154171
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, propertyDeclaration.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154185
+ function getActionForAddMissingDefiniteAssignmentAssertion(context, info) {
154186
+ if (info.isJs)
154187
+ return undefined;
154188
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, info.prop); });
154189
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, info.prop.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154172
154190
  }
154173
154191
  function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154174
154192
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, ts.factory.createToken(53 /* ExclamationToken */), propertyDeclaration.type, propertyDeclaration.initializer);
154175
154193
  changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property);
154176
154194
  }
154177
- function getActionForAddMissingUndefinedType(context, propertyDeclaration) {
154178
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, propertyDeclaration); });
154179
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154195
+ function getActionForAddMissingUndefinedType(context, info) {
154196
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, info); });
154197
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, info.prop.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154180
154198
  }
154181
- function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154199
+ function addUndefinedType(changeTracker, sourceFile, info) {
154182
154200
  var undefinedTypeNode = ts.factory.createKeywordTypeNode(152 /* UndefinedKeyword */);
154183
- var type = propertyDeclaration.type; // TODO: GH#18217
154184
- var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
154185
- changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
154201
+ var types = ts.isUnionTypeNode(info.type) ? info.type.types.concat(undefinedTypeNode) : [info.type, undefinedTypeNode];
154202
+ var unionTypeNode = ts.factory.createUnionTypeNode(types);
154203
+ if (info.isJs) {
154204
+ changeTracker.addJSDocTags(sourceFile, info.prop, [ts.factory.createJSDocTypeTag(/*tagName*/ undefined, ts.factory.createJSDocTypeExpression(unionTypeNode))]);
154205
+ }
154206
+ else {
154207
+ changeTracker.replaceNode(sourceFile, info.type, unionTypeNode);
154208
+ }
154186
154209
  }
154187
- function getActionForAddMissingInitializer(context, propertyDeclaration) {
154210
+ function getActionForAddMissingInitializer(context, info) {
154211
+ if (info.isJs)
154212
+ return undefined;
154188
154213
  var checker = context.program.getTypeChecker();
154189
- var initializer = getInitializer(checker, propertyDeclaration);
154214
+ var initializer = getInitializer(checker, info.prop);
154190
154215
  if (!initializer)
154191
154216
  return undefined;
154192
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, propertyDeclaration, initializer); });
154193
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, propertyDeclaration.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154217
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, info.prop, initializer); });
154218
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, info.prop.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154194
154219
  }
154195
154220
  function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) {
154196
154221
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, propertyDeclaration.questionToken, propertyDeclaration.type, initializer);
@@ -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.20220114";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -129724,7 +129724,7 @@ var ts;
129724
129724
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
129725
129725
  }
129726
129726
  function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext) {
129727
- var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129727
+ var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129728
129728
  // Verify if the file is JSX language variant
129729
129729
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
129730
129730
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -129735,7 +129735,7 @@ var ts;
129735
129735
  var entries = ts.createSortedArray();
129736
129736
  if (isUncheckedFile(sourceFile, compilerOptions)) {
129737
129737
  var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries,
129738
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129738
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129739
129739
  getJSCompletionEntries(sourceFile, location.pos, uniqueNames, ts.getEmitScriptTarget(compilerOptions), entries); // TODO: GH#18217
129740
129740
  }
129741
129741
  else {
@@ -129743,7 +129743,7 @@ var ts;
129743
129743
  return undefined;
129744
129744
  }
129745
129745
  getCompletionEntriesFromSymbols(symbols, entries,
129746
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129746
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129747
129747
  }
129748
129748
  if (keywordFilters !== 0 /* None */) {
129749
129749
  var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -129849,7 +129849,7 @@ var ts;
129849
129849
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
129850
129850
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* string */, kindModifiers: "" /* none */, sortText: SortText.LocationPriority };
129851
129851
  }
129852
- function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext) {
129852
+ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
129853
129853
  var _a, _b;
129854
129854
  var insertText;
129855
129855
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -129920,8 +129920,7 @@ var ts;
129920
129920
  source = CompletionSource.ClassMemberSnippet;
129921
129921
  }
129922
129922
  }
129923
- var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location);
129924
- if (kind === "JSX attribute" /* jsxAttribute */ && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129923
+ if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129925
129924
  var useBraces_1 = preferences.jsxAttributeCompletionStyle === "braces";
129926
129925
  var type = typeChecker.getTypeOfSymbolAtLocation(symbol, location);
129927
129926
  // If is boolean like or undefined, don't return a snippet we want just to return the completion.
@@ -129959,7 +129958,7 @@ var ts;
129959
129958
  // entries (like JavaScript identifier entries).
129960
129959
  return {
129961
129960
  name: name,
129962
- kind: kind,
129961
+ kind: ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location),
129963
129962
  kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
129964
129963
  sortText: sortText,
129965
129964
  source: source,
@@ -130255,7 +130254,7 @@ var ts;
130255
130254
  return CompletionSource.ThisProperty;
130256
130255
  }
130257
130256
  }
130258
- function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
130257
+ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag) {
130259
130258
  var _a;
130260
130259
  var start = ts.timestamp();
130261
130260
  var variableDeclaration = getVariableDeclaration(location);
@@ -130276,7 +130275,7 @@ var ts;
130276
130275
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
130277
130276
  var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
130278
130277
  var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
130279
- var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext);
130278
+ var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
130280
130279
  if (!entry) {
130281
130280
  continue;
130282
130281
  }
@@ -130870,6 +130869,7 @@ var ts;
130870
130869
  symbolToSortTextIdMap: symbolToSortTextIdMap,
130871
130870
  isTypeOnlyLocation: isTypeOnlyLocation,
130872
130871
  isJsxIdentifierExpected: isJsxIdentifierExpected,
130872
+ isRightOfOpenTag: isRightOfOpenTag,
130873
130873
  importCompletionNode: importCompletionNode,
130874
130874
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
130875
130875
  };
@@ -145849,7 +145849,11 @@ var ts;
145849
145849
  oldTags[i] = merged;
145850
145850
  return !!merged;
145851
145851
  }); });
145852
- var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true)));
145852
+ var tags = __spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true);
145853
+ var jsDoc = ts.singleOrUndefined(parent.jsDoc);
145854
+ var comment = jsDoc && ts.positionsAreOnSameLine(jsDoc.pos, jsDoc.end, sourceFile) && !ts.length(comments) ? undefined :
145855
+ ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n")));
145856
+ var tag = ts.factory.createJSDocComment(comment, ts.factory.createNodeArray(tags));
145853
145857
  var host = updateJSDocHost(parent);
145854
145858
  this.insertJsdocCommentBefore(sourceFile, host, tag);
145855
145859
  };
@@ -146279,6 +146283,8 @@ var ts;
146279
146283
  }
146280
146284
  case 339 /* JSDocReturnTag */:
146281
146285
  return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146286
+ case 341 /* JSDocTypeTag */:
146287
+ return ts.factory.createJSDocTypeTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146282
146288
  }
146283
146289
  }
146284
146290
  // find first non-whitespace position in the leading trivia of the node
@@ -150121,10 +150127,15 @@ var ts;
150121
150127
  if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
150122
150128
  return ts.compareBooleans(allowsImportingSpecifier(b.moduleSpecifier), allowsImportingSpecifier(a.moduleSpecifier))
150123
150129
  || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
150130
+ || ts.compareBooleans(isOnlyDotsAndSlashes(a.moduleSpecifier), isOnlyDotsAndSlashes(b.moduleSpecifier))
150124
150131
  || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
150125
150132
  }
150126
150133
  return 0 /* EqualTo */;
150127
150134
  }
150135
+ var notDotOrSlashPattern = /[^.\/]/;
150136
+ function isOnlyDotsAndSlashes(path) {
150137
+ return !notDotOrSlashPattern.test(path);
150138
+ }
150128
150139
  function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
150129
150140
  if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
150130
150141
  return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
@@ -154737,35 +154748,34 @@ var ts;
154737
154748
  codefix.registerCodeFix({
154738
154749
  errorCodes: errorCodes,
154739
154750
  getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) {
154740
- var propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start);
154741
- if (!propertyDeclaration)
154751
+ var info = getInfo(context.sourceFile, context.span.start);
154752
+ if (!info)
154742
154753
  return;
154743
- var result = [
154744
- getActionForAddMissingUndefinedType(context, propertyDeclaration),
154745
- getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration)
154746
- ];
154747
- ts.append(result, getActionForAddMissingInitializer(context, propertyDeclaration));
154754
+ var result = [];
154755
+ ts.append(result, getActionForAddMissingUndefinedType(context, info));
154756
+ ts.append(result, getActionForAddMissingDefiniteAssignmentAssertion(context, info));
154757
+ ts.append(result, getActionForAddMissingInitializer(context, info));
154748
154758
  return result;
154749
154759
  },
154750
154760
  fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer],
154751
154761
  getAllCodeActions: function (context) {
154752
154762
  return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
154753
- var propertyDeclaration = getPropertyDeclaration(diag.file, diag.start);
154754
- if (!propertyDeclaration)
154763
+ var info = getInfo(diag.file, diag.start);
154764
+ if (!info)
154755
154765
  return;
154756
154766
  switch (context.fixId) {
154757
154767
  case fixIdAddDefiniteAssignmentAssertions:
154758
- addDefiniteAssignmentAssertion(changes, diag.file, propertyDeclaration);
154768
+ addDefiniteAssignmentAssertion(changes, diag.file, info.prop);
154759
154769
  break;
154760
154770
  case fixIdAddUndefinedType:
154761
- addUndefinedType(changes, diag.file, propertyDeclaration);
154771
+ addUndefinedType(changes, diag.file, info);
154762
154772
  break;
154763
154773
  case fixIdAddInitializer:
154764
154774
  var checker = context.program.getTypeChecker();
154765
- var initializer = getInitializer(checker, propertyDeclaration);
154775
+ var initializer = getInitializer(checker, info.prop);
154766
154776
  if (!initializer)
154767
154777
  return;
154768
- addInitializer(changes, diag.file, propertyDeclaration, initializer);
154778
+ addInitializer(changes, diag.file, info.prop, initializer);
154769
154779
  break;
154770
154780
  default:
154771
154781
  ts.Debug.fail(JSON.stringify(context.fixId));
@@ -154773,35 +154783,50 @@ var ts;
154773
154783
  });
154774
154784
  },
154775
154785
  });
154776
- function getPropertyDeclaration(sourceFile, pos) {
154786
+ function getInfo(sourceFile, pos) {
154777
154787
  var token = ts.getTokenAtPosition(sourceFile, pos);
154778
- return ts.isIdentifier(token) ? ts.cast(token.parent, ts.isPropertyDeclaration) : undefined;
154788
+ if (ts.isIdentifier(token) && ts.isPropertyDeclaration(token.parent)) {
154789
+ var type = ts.getEffectiveTypeAnnotationNode(token.parent);
154790
+ if (type) {
154791
+ return { type: type, prop: token.parent, isJs: ts.isInJSFile(token.parent) };
154792
+ }
154793
+ }
154794
+ return undefined;
154779
154795
  }
154780
- function getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) {
154781
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, propertyDeclaration); });
154782
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, propertyDeclaration.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154796
+ function getActionForAddMissingDefiniteAssignmentAssertion(context, info) {
154797
+ if (info.isJs)
154798
+ return undefined;
154799
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, info.prop); });
154800
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, info.prop.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154783
154801
  }
154784
154802
  function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154785
154803
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, ts.factory.createToken(53 /* ExclamationToken */), propertyDeclaration.type, propertyDeclaration.initializer);
154786
154804
  changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property);
154787
154805
  }
154788
- function getActionForAddMissingUndefinedType(context, propertyDeclaration) {
154789
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, propertyDeclaration); });
154790
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154806
+ function getActionForAddMissingUndefinedType(context, info) {
154807
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, info); });
154808
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, info.prop.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154791
154809
  }
154792
- function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154810
+ function addUndefinedType(changeTracker, sourceFile, info) {
154793
154811
  var undefinedTypeNode = ts.factory.createKeywordTypeNode(152 /* UndefinedKeyword */);
154794
- var type = propertyDeclaration.type; // TODO: GH#18217
154795
- var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
154796
- changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
154812
+ var types = ts.isUnionTypeNode(info.type) ? info.type.types.concat(undefinedTypeNode) : [info.type, undefinedTypeNode];
154813
+ var unionTypeNode = ts.factory.createUnionTypeNode(types);
154814
+ if (info.isJs) {
154815
+ changeTracker.addJSDocTags(sourceFile, info.prop, [ts.factory.createJSDocTypeTag(/*tagName*/ undefined, ts.factory.createJSDocTypeExpression(unionTypeNode))]);
154816
+ }
154817
+ else {
154818
+ changeTracker.replaceNode(sourceFile, info.type, unionTypeNode);
154819
+ }
154797
154820
  }
154798
- function getActionForAddMissingInitializer(context, propertyDeclaration) {
154821
+ function getActionForAddMissingInitializer(context, info) {
154822
+ if (info.isJs)
154823
+ return undefined;
154799
154824
  var checker = context.program.getTypeChecker();
154800
- var initializer = getInitializer(checker, propertyDeclaration);
154825
+ var initializer = getInitializer(checker, info.prop);
154801
154826
  if (!initializer)
154802
154827
  return undefined;
154803
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, propertyDeclaration, initializer); });
154804
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, propertyDeclaration.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154828
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, info.prop, initializer); });
154829
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, info.prop.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154805
154830
  }
154806
154831
  function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) {
154807
154832
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, propertyDeclaration.questionToken, propertyDeclaration.type, initializer);
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.20220114";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -129724,7 +129724,7 @@ var ts;
129724
129724
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
129725
129725
  }
129726
129726
  function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext) {
129727
- var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129727
+ var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129728
129728
  // Verify if the file is JSX language variant
129729
129729
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
129730
129730
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -129735,7 +129735,7 @@ var ts;
129735
129735
  var entries = ts.createSortedArray();
129736
129736
  if (isUncheckedFile(sourceFile, compilerOptions)) {
129737
129737
  var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries,
129738
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129738
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129739
129739
  getJSCompletionEntries(sourceFile, location.pos, uniqueNames, ts.getEmitScriptTarget(compilerOptions), entries); // TODO: GH#18217
129740
129740
  }
129741
129741
  else {
@@ -129743,7 +129743,7 @@ var ts;
129743
129743
  return undefined;
129744
129744
  }
129745
129745
  getCompletionEntriesFromSymbols(symbols, entries,
129746
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129746
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129747
129747
  }
129748
129748
  if (keywordFilters !== 0 /* None */) {
129749
129749
  var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -129849,7 +129849,7 @@ var ts;
129849
129849
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
129850
129850
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* string */, kindModifiers: "" /* none */, sortText: SortText.LocationPriority };
129851
129851
  }
129852
- function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext) {
129852
+ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
129853
129853
  var _a, _b;
129854
129854
  var insertText;
129855
129855
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -129920,8 +129920,7 @@ var ts;
129920
129920
  source = CompletionSource.ClassMemberSnippet;
129921
129921
  }
129922
129922
  }
129923
- var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location);
129924
- if (kind === "JSX attribute" /* jsxAttribute */ && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129923
+ if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129925
129924
  var useBraces_1 = preferences.jsxAttributeCompletionStyle === "braces";
129926
129925
  var type = typeChecker.getTypeOfSymbolAtLocation(symbol, location);
129927
129926
  // If is boolean like or undefined, don't return a snippet we want just to return the completion.
@@ -129959,7 +129958,7 @@ var ts;
129959
129958
  // entries (like JavaScript identifier entries).
129960
129959
  return {
129961
129960
  name: name,
129962
- kind: kind,
129961
+ kind: ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location),
129963
129962
  kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
129964
129963
  sortText: sortText,
129965
129964
  source: source,
@@ -130255,7 +130254,7 @@ var ts;
130255
130254
  return CompletionSource.ThisProperty;
130256
130255
  }
130257
130256
  }
130258
- function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
130257
+ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag) {
130259
130258
  var _a;
130260
130259
  var start = ts.timestamp();
130261
130260
  var variableDeclaration = getVariableDeclaration(location);
@@ -130276,7 +130275,7 @@ var ts;
130276
130275
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
130277
130276
  var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
130278
130277
  var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
130279
- var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext);
130278
+ var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
130280
130279
  if (!entry) {
130281
130280
  continue;
130282
130281
  }
@@ -130870,6 +130869,7 @@ var ts;
130870
130869
  symbolToSortTextIdMap: symbolToSortTextIdMap,
130871
130870
  isTypeOnlyLocation: isTypeOnlyLocation,
130872
130871
  isJsxIdentifierExpected: isJsxIdentifierExpected,
130872
+ isRightOfOpenTag: isRightOfOpenTag,
130873
130873
  importCompletionNode: importCompletionNode,
130874
130874
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
130875
130875
  };
@@ -145849,7 +145849,11 @@ var ts;
145849
145849
  oldTags[i] = merged;
145850
145850
  return !!merged;
145851
145851
  }); });
145852
- var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true)));
145852
+ var tags = __spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true);
145853
+ var jsDoc = ts.singleOrUndefined(parent.jsDoc);
145854
+ var comment = jsDoc && ts.positionsAreOnSameLine(jsDoc.pos, jsDoc.end, sourceFile) && !ts.length(comments) ? undefined :
145855
+ ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n")));
145856
+ var tag = ts.factory.createJSDocComment(comment, ts.factory.createNodeArray(tags));
145853
145857
  var host = updateJSDocHost(parent);
145854
145858
  this.insertJsdocCommentBefore(sourceFile, host, tag);
145855
145859
  };
@@ -146279,6 +146283,8 @@ var ts;
146279
146283
  }
146280
146284
  case 339 /* JSDocReturnTag */:
146281
146285
  return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146286
+ case 341 /* JSDocTypeTag */:
146287
+ return ts.factory.createJSDocTypeTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146282
146288
  }
146283
146289
  }
146284
146290
  // find first non-whitespace position in the leading trivia of the node
@@ -150121,10 +150127,15 @@ var ts;
150121
150127
  if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
150122
150128
  return ts.compareBooleans(allowsImportingSpecifier(b.moduleSpecifier), allowsImportingSpecifier(a.moduleSpecifier))
150123
150129
  || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
150130
+ || ts.compareBooleans(isOnlyDotsAndSlashes(a.moduleSpecifier), isOnlyDotsAndSlashes(b.moduleSpecifier))
150124
150131
  || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
150125
150132
  }
150126
150133
  return 0 /* EqualTo */;
150127
150134
  }
150135
+ var notDotOrSlashPattern = /[^.\/]/;
150136
+ function isOnlyDotsAndSlashes(path) {
150137
+ return !notDotOrSlashPattern.test(path);
150138
+ }
150128
150139
  function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
150129
150140
  if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
150130
150141
  return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
@@ -154737,35 +154748,34 @@ var ts;
154737
154748
  codefix.registerCodeFix({
154738
154749
  errorCodes: errorCodes,
154739
154750
  getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) {
154740
- var propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start);
154741
- if (!propertyDeclaration)
154751
+ var info = getInfo(context.sourceFile, context.span.start);
154752
+ if (!info)
154742
154753
  return;
154743
- var result = [
154744
- getActionForAddMissingUndefinedType(context, propertyDeclaration),
154745
- getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration)
154746
- ];
154747
- ts.append(result, getActionForAddMissingInitializer(context, propertyDeclaration));
154754
+ var result = [];
154755
+ ts.append(result, getActionForAddMissingUndefinedType(context, info));
154756
+ ts.append(result, getActionForAddMissingDefiniteAssignmentAssertion(context, info));
154757
+ ts.append(result, getActionForAddMissingInitializer(context, info));
154748
154758
  return result;
154749
154759
  },
154750
154760
  fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer],
154751
154761
  getAllCodeActions: function (context) {
154752
154762
  return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
154753
- var propertyDeclaration = getPropertyDeclaration(diag.file, diag.start);
154754
- if (!propertyDeclaration)
154763
+ var info = getInfo(diag.file, diag.start);
154764
+ if (!info)
154755
154765
  return;
154756
154766
  switch (context.fixId) {
154757
154767
  case fixIdAddDefiniteAssignmentAssertions:
154758
- addDefiniteAssignmentAssertion(changes, diag.file, propertyDeclaration);
154768
+ addDefiniteAssignmentAssertion(changes, diag.file, info.prop);
154759
154769
  break;
154760
154770
  case fixIdAddUndefinedType:
154761
- addUndefinedType(changes, diag.file, propertyDeclaration);
154771
+ addUndefinedType(changes, diag.file, info);
154762
154772
  break;
154763
154773
  case fixIdAddInitializer:
154764
154774
  var checker = context.program.getTypeChecker();
154765
- var initializer = getInitializer(checker, propertyDeclaration);
154775
+ var initializer = getInitializer(checker, info.prop);
154766
154776
  if (!initializer)
154767
154777
  return;
154768
- addInitializer(changes, diag.file, propertyDeclaration, initializer);
154778
+ addInitializer(changes, diag.file, info.prop, initializer);
154769
154779
  break;
154770
154780
  default:
154771
154781
  ts.Debug.fail(JSON.stringify(context.fixId));
@@ -154773,35 +154783,50 @@ var ts;
154773
154783
  });
154774
154784
  },
154775
154785
  });
154776
- function getPropertyDeclaration(sourceFile, pos) {
154786
+ function getInfo(sourceFile, pos) {
154777
154787
  var token = ts.getTokenAtPosition(sourceFile, pos);
154778
- return ts.isIdentifier(token) ? ts.cast(token.parent, ts.isPropertyDeclaration) : undefined;
154788
+ if (ts.isIdentifier(token) && ts.isPropertyDeclaration(token.parent)) {
154789
+ var type = ts.getEffectiveTypeAnnotationNode(token.parent);
154790
+ if (type) {
154791
+ return { type: type, prop: token.parent, isJs: ts.isInJSFile(token.parent) };
154792
+ }
154793
+ }
154794
+ return undefined;
154779
154795
  }
154780
- function getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) {
154781
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, propertyDeclaration); });
154782
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, propertyDeclaration.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154796
+ function getActionForAddMissingDefiniteAssignmentAssertion(context, info) {
154797
+ if (info.isJs)
154798
+ return undefined;
154799
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, info.prop); });
154800
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, info.prop.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154783
154801
  }
154784
154802
  function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154785
154803
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, ts.factory.createToken(53 /* ExclamationToken */), propertyDeclaration.type, propertyDeclaration.initializer);
154786
154804
  changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property);
154787
154805
  }
154788
- function getActionForAddMissingUndefinedType(context, propertyDeclaration) {
154789
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, propertyDeclaration); });
154790
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154806
+ function getActionForAddMissingUndefinedType(context, info) {
154807
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, info); });
154808
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, info.prop.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154791
154809
  }
154792
- function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154810
+ function addUndefinedType(changeTracker, sourceFile, info) {
154793
154811
  var undefinedTypeNode = ts.factory.createKeywordTypeNode(152 /* UndefinedKeyword */);
154794
- var type = propertyDeclaration.type; // TODO: GH#18217
154795
- var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
154796
- changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
154812
+ var types = ts.isUnionTypeNode(info.type) ? info.type.types.concat(undefinedTypeNode) : [info.type, undefinedTypeNode];
154813
+ var unionTypeNode = ts.factory.createUnionTypeNode(types);
154814
+ if (info.isJs) {
154815
+ changeTracker.addJSDocTags(sourceFile, info.prop, [ts.factory.createJSDocTypeTag(/*tagName*/ undefined, ts.factory.createJSDocTypeExpression(unionTypeNode))]);
154816
+ }
154817
+ else {
154818
+ changeTracker.replaceNode(sourceFile, info.type, unionTypeNode);
154819
+ }
154797
154820
  }
154798
- function getActionForAddMissingInitializer(context, propertyDeclaration) {
154821
+ function getActionForAddMissingInitializer(context, info) {
154822
+ if (info.isJs)
154823
+ return undefined;
154799
154824
  var checker = context.program.getTypeChecker();
154800
- var initializer = getInitializer(checker, propertyDeclaration);
154825
+ var initializer = getInitializer(checker, info.prop);
154801
154826
  if (!initializer)
154802
154827
  return undefined;
154803
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, propertyDeclaration, initializer); });
154804
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, propertyDeclaration.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154828
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, info.prop, initializer); });
154829
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, info.prop.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154805
154830
  }
154806
154831
  function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) {
154807
154832
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, propertyDeclaration.questionToken, propertyDeclaration.type, initializer);
@@ -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.20220114";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -129724,7 +129724,7 @@ var ts;
129724
129724
  return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
129725
129725
  }
129726
129726
  function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext) {
129727
- var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129727
+ var symbols = completionData.symbols, contextToken = completionData.contextToken, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, isRightOfOpenTag = completionData.isRightOfOpenTag, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
129728
129728
  // Verify if the file is JSX language variant
129729
129729
  if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
129730
129730
  var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -129735,7 +129735,7 @@ var ts;
129735
129735
  var entries = ts.createSortedArray();
129736
129736
  if (isUncheckedFile(sourceFile, compilerOptions)) {
129737
129737
  var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries,
129738
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129738
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129739
129739
  getJSCompletionEntries(sourceFile, location.pos, uniqueNames, ts.getEmitScriptTarget(compilerOptions), entries); // TODO: GH#18217
129740
129740
  }
129741
129741
  else {
@@ -129743,7 +129743,7 @@ var ts;
129743
129743
  return undefined;
129744
129744
  }
129745
129745
  getCompletionEntriesFromSymbols(symbols, entries,
129746
- /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
129746
+ /*replacementToken*/ undefined, contextToken, location, sourceFile, host, program, ts.getEmitScriptTarget(compilerOptions), log, completionKind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag);
129747
129747
  }
129748
129748
  if (keywordFilters !== 0 /* None */) {
129749
129749
  var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -129849,7 +129849,7 @@ var ts;
129849
129849
  function createCompletionEntryForLiteral(sourceFile, preferences, literal) {
129850
129850
  return { name: completionNameForLiteral(sourceFile, preferences, literal), kind: "string" /* string */, kindModifiers: "" /* none */, sortText: SortText.LocationPriority };
129851
129851
  }
129852
- function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext) {
129852
+ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag) {
129853
129853
  var _a, _b;
129854
129854
  var insertText;
129855
129855
  var replacementSpan = ts.getReplacementSpanForContextToken(replacementToken);
@@ -129920,8 +129920,7 @@ var ts;
129920
129920
  source = CompletionSource.ClassMemberSnippet;
129921
129921
  }
129922
129922
  }
129923
- var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location);
129924
- if (kind === "JSX attribute" /* jsxAttribute */ && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129923
+ if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none") {
129925
129924
  var useBraces_1 = preferences.jsxAttributeCompletionStyle === "braces";
129926
129925
  var type = typeChecker.getTypeOfSymbolAtLocation(symbol, location);
129927
129926
  // If is boolean like or undefined, don't return a snippet we want just to return the completion.
@@ -129959,7 +129958,7 @@ var ts;
129959
129958
  // entries (like JavaScript identifier entries).
129960
129959
  return {
129961
129960
  name: name,
129962
- kind: kind,
129961
+ kind: ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, location),
129963
129962
  kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
129964
129963
  sortText: sortText,
129965
129964
  source: source,
@@ -130255,7 +130254,7 @@ var ts;
130255
130254
  return CompletionSource.ThisProperty;
130256
130255
  }
130257
130256
  }
130258
- function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
130257
+ function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap, isJsxIdentifierExpected, isRightOfOpenTag) {
130259
130258
  var _a;
130260
130259
  var start = ts.timestamp();
130261
130260
  var variableDeclaration = getVariableDeclaration(location);
@@ -130276,7 +130275,7 @@ var ts;
130276
130275
  var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
130277
130276
  var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
130278
130277
  var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
130279
- var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext);
130278
+ var entry = createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences, kind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag);
130280
130279
  if (!entry) {
130281
130280
  continue;
130282
130281
  }
@@ -130870,6 +130869,7 @@ var ts;
130870
130869
  symbolToSortTextIdMap: symbolToSortTextIdMap,
130871
130870
  isTypeOnlyLocation: isTypeOnlyLocation,
130872
130871
  isJsxIdentifierExpected: isJsxIdentifierExpected,
130872
+ isRightOfOpenTag: isRightOfOpenTag,
130873
130873
  importCompletionNode: importCompletionNode,
130874
130874
  hasUnresolvedAutoImports: hasUnresolvedAutoImports,
130875
130875
  };
@@ -145849,7 +145849,11 @@ var ts;
145849
145849
  oldTags[i] = merged;
145850
145850
  return !!merged;
145851
145851
  }); });
145852
- var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true)));
145852
+ var tags = __spreadArray(__spreadArray([], oldTags, true), unmergedNewTags, true);
145853
+ var jsDoc = ts.singleOrUndefined(parent.jsDoc);
145854
+ var comment = jsDoc && ts.positionsAreOnSameLine(jsDoc.pos, jsDoc.end, sourceFile) && !ts.length(comments) ? undefined :
145855
+ ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n")));
145856
+ var tag = ts.factory.createJSDocComment(comment, ts.factory.createNodeArray(tags));
145853
145857
  var host = updateJSDocHost(parent);
145854
145858
  this.insertJsdocCommentBefore(sourceFile, host, tag);
145855
145859
  };
@@ -146279,6 +146283,8 @@ var ts;
146279
146283
  }
146280
146284
  case 339 /* JSDocReturnTag */:
146281
146285
  return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146286
+ case 341 /* JSDocTypeTag */:
146287
+ return ts.factory.createJSDocTypeTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
146282
146288
  }
146283
146289
  }
146284
146290
  // find first non-whitespace position in the leading trivia of the node
@@ -150121,10 +150127,15 @@ var ts;
150121
150127
  if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
150122
150128
  return ts.compareBooleans(allowsImportingSpecifier(b.moduleSpecifier), allowsImportingSpecifier(a.moduleSpecifier))
150123
150129
  || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
150130
+ || ts.compareBooleans(isOnlyDotsAndSlashes(a.moduleSpecifier), isOnlyDotsAndSlashes(b.moduleSpecifier))
150124
150131
  || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
150125
150132
  }
150126
150133
  return 0 /* EqualTo */;
150127
150134
  }
150135
+ var notDotOrSlashPattern = /[^.\/]/;
150136
+ function isOnlyDotsAndSlashes(path) {
150137
+ return !notDotOrSlashPattern.test(path);
150138
+ }
150128
150139
  function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
150129
150140
  if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
150130
150141
  return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
@@ -154737,35 +154748,34 @@ var ts;
154737
154748
  codefix.registerCodeFix({
154738
154749
  errorCodes: errorCodes,
154739
154750
  getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) {
154740
- var propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start);
154741
- if (!propertyDeclaration)
154751
+ var info = getInfo(context.sourceFile, context.span.start);
154752
+ if (!info)
154742
154753
  return;
154743
- var result = [
154744
- getActionForAddMissingUndefinedType(context, propertyDeclaration),
154745
- getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration)
154746
- ];
154747
- ts.append(result, getActionForAddMissingInitializer(context, propertyDeclaration));
154754
+ var result = [];
154755
+ ts.append(result, getActionForAddMissingUndefinedType(context, info));
154756
+ ts.append(result, getActionForAddMissingDefiniteAssignmentAssertion(context, info));
154757
+ ts.append(result, getActionForAddMissingInitializer(context, info));
154748
154758
  return result;
154749
154759
  },
154750
154760
  fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer],
154751
154761
  getAllCodeActions: function (context) {
154752
154762
  return codefix.codeFixAll(context, errorCodes, function (changes, diag) {
154753
- var propertyDeclaration = getPropertyDeclaration(diag.file, diag.start);
154754
- if (!propertyDeclaration)
154763
+ var info = getInfo(diag.file, diag.start);
154764
+ if (!info)
154755
154765
  return;
154756
154766
  switch (context.fixId) {
154757
154767
  case fixIdAddDefiniteAssignmentAssertions:
154758
- addDefiniteAssignmentAssertion(changes, diag.file, propertyDeclaration);
154768
+ addDefiniteAssignmentAssertion(changes, diag.file, info.prop);
154759
154769
  break;
154760
154770
  case fixIdAddUndefinedType:
154761
- addUndefinedType(changes, diag.file, propertyDeclaration);
154771
+ addUndefinedType(changes, diag.file, info);
154762
154772
  break;
154763
154773
  case fixIdAddInitializer:
154764
154774
  var checker = context.program.getTypeChecker();
154765
- var initializer = getInitializer(checker, propertyDeclaration);
154775
+ var initializer = getInitializer(checker, info.prop);
154766
154776
  if (!initializer)
154767
154777
  return;
154768
- addInitializer(changes, diag.file, propertyDeclaration, initializer);
154778
+ addInitializer(changes, diag.file, info.prop, initializer);
154769
154779
  break;
154770
154780
  default:
154771
154781
  ts.Debug.fail(JSON.stringify(context.fixId));
@@ -154773,35 +154783,50 @@ var ts;
154773
154783
  });
154774
154784
  },
154775
154785
  });
154776
- function getPropertyDeclaration(sourceFile, pos) {
154786
+ function getInfo(sourceFile, pos) {
154777
154787
  var token = ts.getTokenAtPosition(sourceFile, pos);
154778
- return ts.isIdentifier(token) ? ts.cast(token.parent, ts.isPropertyDeclaration) : undefined;
154788
+ if (ts.isIdentifier(token) && ts.isPropertyDeclaration(token.parent)) {
154789
+ var type = ts.getEffectiveTypeAnnotationNode(token.parent);
154790
+ if (type) {
154791
+ return { type: type, prop: token.parent, isJs: ts.isInJSFile(token.parent) };
154792
+ }
154793
+ }
154794
+ return undefined;
154779
154795
  }
154780
- function getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) {
154781
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, propertyDeclaration); });
154782
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, propertyDeclaration.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154796
+ function getActionForAddMissingDefiniteAssignmentAssertion(context, info) {
154797
+ if (info.isJs)
154798
+ return undefined;
154799
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, info.prop); });
154800
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, info.prop.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties);
154783
154801
  }
154784
154802
  function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154785
154803
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, ts.factory.createToken(53 /* ExclamationToken */), propertyDeclaration.type, propertyDeclaration.initializer);
154786
154804
  changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property);
154787
154805
  }
154788
- function getActionForAddMissingUndefinedType(context, propertyDeclaration) {
154789
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, propertyDeclaration); });
154790
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154806
+ function getActionForAddMissingUndefinedType(context, info) {
154807
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, info); });
154808
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, info.prop.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
154791
154809
  }
154792
- function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
154810
+ function addUndefinedType(changeTracker, sourceFile, info) {
154793
154811
  var undefinedTypeNode = ts.factory.createKeywordTypeNode(152 /* UndefinedKeyword */);
154794
- var type = propertyDeclaration.type; // TODO: GH#18217
154795
- var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
154796
- changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
154812
+ var types = ts.isUnionTypeNode(info.type) ? info.type.types.concat(undefinedTypeNode) : [info.type, undefinedTypeNode];
154813
+ var unionTypeNode = ts.factory.createUnionTypeNode(types);
154814
+ if (info.isJs) {
154815
+ changeTracker.addJSDocTags(sourceFile, info.prop, [ts.factory.createJSDocTypeTag(/*tagName*/ undefined, ts.factory.createJSDocTypeExpression(unionTypeNode))]);
154816
+ }
154817
+ else {
154818
+ changeTracker.replaceNode(sourceFile, info.type, unionTypeNode);
154819
+ }
154797
154820
  }
154798
- function getActionForAddMissingInitializer(context, propertyDeclaration) {
154821
+ function getActionForAddMissingInitializer(context, info) {
154822
+ if (info.isJs)
154823
+ return undefined;
154799
154824
  var checker = context.program.getTypeChecker();
154800
- var initializer = getInitializer(checker, propertyDeclaration);
154825
+ var initializer = getInitializer(checker, info.prop);
154801
154826
  if (!initializer)
154802
154827
  return undefined;
154803
- var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, propertyDeclaration, initializer); });
154804
- return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, propertyDeclaration.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154828
+ var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, info.prop, initializer); });
154829
+ return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, info.prop.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties);
154805
154830
  }
154806
154831
  function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) {
154807
154832
  var property = ts.factory.updatePropertyDeclaration(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, propertyDeclaration.questionToken, propertyDeclaration.type, initializer);
@@ -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.20220114";
92
+ ts.version = ts.versionMajorMinor + ".0-dev.20220118";
93
93
  /* @internal */
94
94
  var Comparison;
95
95
  (function (Comparison) {
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.20220114",
5
+ "version": "4.6.0-dev.20220118",
6
6
  "license": "Apache-2.0",
7
7
  "description": "TypeScript is a language for application scale JavaScript development",
8
8
  "keywords": [