typescript 4.7.0-dev.20220421 → 4.7.0-dev.20220422

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.
@@ -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.20220421";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220422";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -18487,10 +18487,10 @@ var ts;
18487
18487
  return ts.combinePaths(newDirPath, sourceFilePath);
18488
18488
  }
18489
18489
  ts.getSourceFilePathInNewDirWorker = getSourceFilePathInNewDirWorker;
18490
- function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) {
18491
- host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
18490
+ function writeFile(host, diagnostics, fileName, text, writeByteOrderMark, sourceFiles, data) {
18491
+ host.writeFile(fileName, text, writeByteOrderMark, function (hostErrorMessage) {
18492
18492
  diagnostics.add(createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
18493
- }, sourceFiles);
18493
+ }, sourceFiles, data);
18494
18494
  }
18495
18495
  ts.writeFile = writeFile;
18496
18496
  function ensureDirectoriesExist(directoryPath, createDirectory, directoryExists) {
@@ -73626,6 +73626,7 @@ var ts;
73626
73626
  }
73627
73627
  }
73628
73628
  else {
73629
+ error(attributeDecl.expression, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
73629
73630
  typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType;
73630
73631
  }
73631
73632
  }
@@ -110160,6 +110161,7 @@ var ts;
110160
110161
  else {
110161
110162
  printer.writeFile(sourceFile, writer, sourceMapGenerator);
110162
110163
  }
110164
+ var sourceMapUrlPos;
110163
110165
  if (sourceMapGenerator) {
110164
110166
  if (sourceMapDataList) {
110165
110167
  sourceMapDataList.push({
@@ -110171,6 +110173,7 @@ var ts;
110171
110173
  if (sourceMappingURL) {
110172
110174
  if (!writer.isAtStartOfLine())
110173
110175
  writer.rawWrite(newLine);
110176
+ sourceMapUrlPos = writer.getTextPos();
110174
110177
  writer.writeComment("//# " + "sourceMappingURL" + "=" + sourceMappingURL); // Tools can sometimes see this line as a source mapping url comment
110175
110178
  }
110176
110179
  // Write the source map
@@ -110183,7 +110186,7 @@ var ts;
110183
110186
  writer.writeLine();
110184
110187
  }
110185
110188
  // Write the output file
110186
- ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles);
110189
+ ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles, { sourceMapUrlPos: sourceMapUrlPos });
110187
110190
  // Reset state
110188
110191
  writer.clear();
110189
110192
  }
@@ -115650,7 +115653,11 @@ var ts;
115650
115653
  return newValue;
115651
115654
  };
115652
115655
  if (originalWriteFile) {
115653
- host.writeFile = function (fileName, data, writeByteOrderMark, onError, sourceFiles) {
115656
+ host.writeFile = function (fileName, data) {
115657
+ var rest = [];
115658
+ for (var _i = 2; _i < arguments.length; _i++) {
115659
+ rest[_i - 2] = arguments[_i];
115660
+ }
115654
115661
  var key = toPath(fileName);
115655
115662
  fileExistsCache.delete(key);
115656
115663
  var value = readFileCache.get(key);
@@ -115664,7 +115671,7 @@ var ts;
115664
115671
  sourceFileCache.delete(key);
115665
115672
  }
115666
115673
  }
115667
- originalWriteFile.call(host, fileName, data, writeByteOrderMark, onError, sourceFiles);
115674
+ originalWriteFile.call.apply(originalWriteFile, __spreadArray([host, fileName, data], rest, false));
115668
115675
  };
115669
115676
  }
115670
115677
  // directoryExists
@@ -116597,6 +116604,7 @@ var ts;
116597
116604
  useCaseSensitiveFileNames: function () { return host.useCaseSensitiveFileNames(); },
116598
116605
  getFileIncludeReasons: function () { return fileReasons; },
116599
116606
  structureIsReused: structureIsReused,
116607
+ writeFile: writeFile,
116600
116608
  };
116601
116609
  onProgramCreateComplete();
116602
116610
  // Add file processingDiagnostics
@@ -117094,7 +117102,7 @@ var ts;
117094
117102
  getProjectReferenceRedirect: getProjectReferenceRedirect,
117095
117103
  isSourceOfProjectReferenceRedirect: isSourceOfProjectReferenceRedirect,
117096
117104
  getSymlinkCache: getSymlinkCache,
117097
- writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }),
117105
+ writeFile: writeFileCallback || writeFile,
117098
117106
  isEmitBlocked: isEmitBlocked,
117099
117107
  readFile: function (f) { return host.readFile(f); },
117100
117108
  fileExists: function (f) {
@@ -117114,6 +117122,9 @@ var ts;
117114
117122
  getFileIncludeReasons: program.getFileIncludeReasons,
117115
117123
  };
117116
117124
  }
117125
+ function writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
117126
+ host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
117127
+ }
117117
117128
  function emitBuildInfo(writeFileCallback) {
117118
117129
  ts.Debug.assert(!ts.outFile(options));
117119
117130
  ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "emitBuildInfo", {}, /*separateBeginAndEnd*/ true);
@@ -119556,6 +119567,7 @@ var ts;
119556
119567
  }
119557
119568
  }
119558
119569
  }
119570
+ BuilderState.updateExportedModules = updateExportedModules;
119559
119571
  /**
119560
119572
  * Updates the exported modules from cache into state's exported modules map
119561
119573
  * This should be called whenever it is safe to commit the state of the builder
@@ -120520,7 +120532,43 @@ var ts;
120520
120532
  return toAffectedFileEmitResult(state,
120521
120533
  // When whole program is affected, do emit only once (eg when --out or --outFile is specified)
120522
120534
  // Otherwise just affected file
120523
- ts.Debug.checkDefined(state.program).emit(affected === state.program ? undefined : affected, writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles || emitKind === 0 /* DtsOnly */, customTransformers), affected, emitKind, isPendingEmitFile);
120535
+ ts.Debug.checkDefined(state.program).emit(affected === state.program ? undefined : affected, affected !== state.program && ts.getEmitDeclarations(state.compilerOptions) && !customTransformers ?
120536
+ getWriteFileUpdatingSignatureCallback(writeFile) :
120537
+ writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles || emitKind === 0 /* DtsOnly */, customTransformers), affected, emitKind, isPendingEmitFile);
120538
+ }
120539
+ function getWriteFileUpdatingSignatureCallback(writeFile) {
120540
+ return function (fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
120541
+ var _a;
120542
+ if (ts.isDeclarationFileName(fileName)) {
120543
+ ts.Debug.assert((sourceFiles === null || sourceFiles === void 0 ? void 0 : sourceFiles.length) === 1);
120544
+ var file = sourceFiles[0];
120545
+ var info = state.fileInfos.get(file.resolvedPath);
120546
+ var signature = ((_a = state.currentAffectedFilesSignatures) === null || _a === void 0 ? void 0 : _a.get(file.resolvedPath)) || info.signature;
120547
+ if (signature === file.version) {
120548
+ var newSignature = (computeHash || ts.generateDjb2Hash)((data === null || data === void 0 ? void 0 : data.sourceMapUrlPos) !== undefined ? text.substring(0, data.sourceMapUrlPos) : text);
120549
+ if (newSignature !== file.version) { // Update it
120550
+ if (host.storeFilesChangingSignatureDuringEmit)
120551
+ (state.filesChangingSignature || (state.filesChangingSignature = new ts.Set())).add(file.resolvedPath);
120552
+ if (state.exportedModulesMap)
120553
+ ts.BuilderState.updateExportedModules(file, file.exportedModulesFromDeclarationEmit, state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap()));
120554
+ if (state.affectedFiles && state.affectedFilesIndex < state.affectedFiles.length) {
120555
+ state.currentAffectedFilesSignatures.set(file.resolvedPath, newSignature);
120556
+ }
120557
+ else {
120558
+ info.signature = newSignature;
120559
+ if (state.exportedModulesMap)
120560
+ ts.BuilderState.updateExportedFilesMapFromCache(state, state.currentAffectedFilesExportedModulesMap);
120561
+ }
120562
+ }
120563
+ }
120564
+ }
120565
+ if (writeFile)
120566
+ writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120567
+ else if (host.writeFile)
120568
+ host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120569
+ else
120570
+ state.program.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120571
+ };
120524
120572
  }
120525
120573
  /**
120526
120574
  * Emits the JavaScript and declaration files.
@@ -120577,7 +120625,9 @@ var ts;
120577
120625
  }
120578
120626
  }
120579
120627
  }
120580
- return ts.Debug.checkDefined(state.program).emit(targetSourceFile, writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles, customTransformers);
120628
+ return ts.Debug.checkDefined(state.program).emit(targetSourceFile, !ts.outFile(state.compilerOptions) && ts.getEmitDeclarations(state.compilerOptions) && !customTransformers ?
120629
+ getWriteFileUpdatingSignatureCallback(writeFile) :
120630
+ writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles, customTransformers);
120581
120631
  }
120582
120632
  /**
120583
120633
  * Return the semantic diagnostics for the next affected file or undefined if iteration is complete
@@ -122769,6 +122819,7 @@ var ts;
122769
122819
  createHash: ts.maybeBind(host, host.createHash),
122770
122820
  readDirectory: ts.maybeBind(host, host.readDirectory),
122771
122821
  disableUseFileVersionAsSignature: host.disableUseFileVersionAsSignature,
122822
+ storeFilesChangingSignatureDuringEmit: host.storeFilesChangingSignatureDuringEmit,
122772
122823
  };
122773
122824
  function writeFile(fileName, text, writeByteOrderMark, onError) {
122774
122825
  try {
@@ -122828,6 +122879,7 @@ var ts;
122828
122879
  createHash: ts.maybeBind(system, system.createHash),
122829
122880
  createProgram: createProgram || ts.createEmitAndSemanticDiagnosticsBuilderProgram,
122830
122881
  disableUseFileVersionAsSignature: system.disableUseFileVersionAsSignature,
122882
+ storeFilesChangingSignatureDuringEmit: system.storeFilesChangingSignatureDuringEmit,
122831
122883
  };
122832
122884
  }
122833
122885
  ts.createProgramHost = createProgramHost;
@@ -122916,6 +122968,7 @@ var ts;
122916
122968
  var host = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, system);
122917
122969
  host.createHash = ts.maybeBind(system, system.createHash);
122918
122970
  host.disableUseFileVersionAsSignature = system.disableUseFileVersionAsSignature;
122971
+ host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit;
122919
122972
  ts.setGetSourceFileAsHashVersioned(host, system);
122920
122973
  ts.changeCompilerHostLikeToUseCache(host, function (fileName) { return ts.toPath(fileName, host.getCurrentDirectory(), host.getCanonicalFileName); });
122921
122974
  return host;
@@ -132401,22 +132454,44 @@ var ts;
132401
132454
  }
132402
132455
  }
132403
132456
  function createSnippetPrinter(printerOptions) {
132457
+ var escapes;
132404
132458
  var baseWriter = ts.textChanges.createWriter(ts.getNewLineCharacter(printerOptions));
132405
132459
  var printer = ts.createPrinter(printerOptions, baseWriter);
132406
- var writer = __assign(__assign({}, baseWriter), { write: function (s) { return baseWriter.write(ts.escapeSnippetText(s)); }, nonEscapingWrite: baseWriter.write, writeLiteral: function (s) { return baseWriter.writeLiteral(ts.escapeSnippetText(s)); }, writeStringLiteral: function (s) { return baseWriter.writeStringLiteral(ts.escapeSnippetText(s)); }, writeSymbol: function (s, symbol) { return baseWriter.writeSymbol(ts.escapeSnippetText(s), symbol); }, writeParameter: function (s) { return baseWriter.writeParameter(ts.escapeSnippetText(s)); }, writeComment: function (s) { return baseWriter.writeComment(ts.escapeSnippetText(s)); }, writeProperty: function (s) { return baseWriter.writeProperty(ts.escapeSnippetText(s)); } });
132460
+ var writer = __assign(__assign({}, baseWriter), { write: function (s) { return escapingWrite(s, function () { return baseWriter.write(s); }); }, nonEscapingWrite: baseWriter.write, writeLiteral: function (s) { return escapingWrite(s, function () { return baseWriter.writeLiteral(s); }); }, writeStringLiteral: function (s) { return escapingWrite(s, function () { return baseWriter.writeStringLiteral(s); }); }, writeSymbol: function (s, symbol) { return escapingWrite(s, function () { return baseWriter.writeSymbol(s, symbol); }); }, writeParameter: function (s) { return escapingWrite(s, function () { return baseWriter.writeParameter(s); }); }, writeComment: function (s) { return escapingWrite(s, function () { return baseWriter.writeComment(s); }); }, writeProperty: function (s) { return escapingWrite(s, function () { return baseWriter.writeProperty(s); }); } });
132407
132461
  return {
132408
132462
  printSnippetList: printSnippetList,
132409
132463
  printAndFormatSnippetList: printAndFormatSnippetList,
132410
132464
  };
132465
+ // The formatter/scanner will have issues with snippet-escaped text,
132466
+ // so instead of writing the escaped text directly to the writer,
132467
+ // generate a set of changes that can be applied to the unescaped text
132468
+ // to escape it post-formatting.
132469
+ function escapingWrite(s, write) {
132470
+ var escaped = ts.escapeSnippetText(s);
132471
+ if (escaped !== s) {
132472
+ var start = baseWriter.getTextPos();
132473
+ write();
132474
+ var end = baseWriter.getTextPos();
132475
+ escapes = ts.append(escapes || (escapes = []), { newText: escaped, span: { start: start, length: end - start } });
132476
+ }
132477
+ else {
132478
+ write();
132479
+ }
132480
+ }
132411
132481
  /* Snippet-escaping version of `printer.printList`. */
132412
132482
  function printSnippetList(format, list, sourceFile) {
132483
+ var unescaped = printUnescapedSnippetList(format, list, sourceFile);
132484
+ return escapes ? ts.textChanges.applyChanges(unescaped, escapes) : unescaped;
132485
+ }
132486
+ function printUnescapedSnippetList(format, list, sourceFile) {
132487
+ escapes = undefined;
132413
132488
  writer.clear();
132414
132489
  printer.writeList(format, list, sourceFile, writer);
132415
132490
  return writer.getText();
132416
132491
  }
132417
132492
  function printAndFormatSnippetList(format, list, sourceFile, formatContext) {
132418
132493
  var syntheticFile = {
132419
- text: printSnippetList(format, list, sourceFile),
132494
+ text: printUnescapedSnippetList(format, list, sourceFile),
132420
132495
  getLineAndCharacterOfPosition: function (pos) {
132421
132496
  return ts.getLineAndCharacterOfPosition(this, pos);
132422
132497
  },
@@ -132428,7 +132503,10 @@ var ts;
132428
132503
  /* indentation */ 0,
132429
132504
  /* delta */ 0, __assign(__assign({}, formatContext), { options: formatOptions }));
132430
132505
  });
132431
- return ts.textChanges.applyChanges(syntheticFile.text, changes);
132506
+ var allChanges = escapes
132507
+ ? ts.stableSort(ts.concatenate(changes, escapes), function (a, b) { return ts.compareTextSpans(a.span, b.span); })
132508
+ : changes;
132509
+ return ts.textChanges.applyChanges(syntheticFile.text, allChanges);
132432
132510
  }
132433
132511
  }
132434
132512
  function originToCompletionEntryData(origin) {
@@ -2172,7 +2172,9 @@ declare namespace ts {
2172
2172
  export type ResolvedConfigFileName = string & {
2173
2173
  _isResolvedConfigFileName: never;
2174
2174
  };
2175
- export type WriteFileCallback = (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: readonly SourceFile[]) => void;
2175
+ export interface WriteFileCallbackData {
2176
+ }
2177
+ export type WriteFileCallback = (fileName: string, text: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: readonly SourceFile[], data?: WriteFileCallbackData) => void;
2176
2178
  export class OperationCanceledException {
2177
2179
  }
2178
2180
  export interface CancellationToken {
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.20220421";
297
+ ts.version = ts.versionMajorMinor + ".0-dev.20220422";
298
298
  /* @internal */
299
299
  var Comparison;
300
300
  (function (Comparison) {
@@ -18487,10 +18487,10 @@ var ts;
18487
18487
  return ts.combinePaths(newDirPath, sourceFilePath);
18488
18488
  }
18489
18489
  ts.getSourceFilePathInNewDirWorker = getSourceFilePathInNewDirWorker;
18490
- function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) {
18491
- host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
18490
+ function writeFile(host, diagnostics, fileName, text, writeByteOrderMark, sourceFiles, data) {
18491
+ host.writeFile(fileName, text, writeByteOrderMark, function (hostErrorMessage) {
18492
18492
  diagnostics.add(createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
18493
- }, sourceFiles);
18493
+ }, sourceFiles, data);
18494
18494
  }
18495
18495
  ts.writeFile = writeFile;
18496
18496
  function ensureDirectoriesExist(directoryPath, createDirectory, directoryExists) {
@@ -73626,6 +73626,7 @@ var ts;
73626
73626
  }
73627
73627
  }
73628
73628
  else {
73629
+ error(attributeDecl.expression, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
73629
73630
  typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType;
73630
73631
  }
73631
73632
  }
@@ -110160,6 +110161,7 @@ var ts;
110160
110161
  else {
110161
110162
  printer.writeFile(sourceFile, writer, sourceMapGenerator);
110162
110163
  }
110164
+ var sourceMapUrlPos;
110163
110165
  if (sourceMapGenerator) {
110164
110166
  if (sourceMapDataList) {
110165
110167
  sourceMapDataList.push({
@@ -110171,6 +110173,7 @@ var ts;
110171
110173
  if (sourceMappingURL) {
110172
110174
  if (!writer.isAtStartOfLine())
110173
110175
  writer.rawWrite(newLine);
110176
+ sourceMapUrlPos = writer.getTextPos();
110174
110177
  writer.writeComment("//# " + "sourceMappingURL" + "=" + sourceMappingURL); // Tools can sometimes see this line as a source mapping url comment
110175
110178
  }
110176
110179
  // Write the source map
@@ -110183,7 +110186,7 @@ var ts;
110183
110186
  writer.writeLine();
110184
110187
  }
110185
110188
  // Write the output file
110186
- ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles);
110189
+ ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles, { sourceMapUrlPos: sourceMapUrlPos });
110187
110190
  // Reset state
110188
110191
  writer.clear();
110189
110192
  }
@@ -115650,7 +115653,11 @@ var ts;
115650
115653
  return newValue;
115651
115654
  };
115652
115655
  if (originalWriteFile) {
115653
- host.writeFile = function (fileName, data, writeByteOrderMark, onError, sourceFiles) {
115656
+ host.writeFile = function (fileName, data) {
115657
+ var rest = [];
115658
+ for (var _i = 2; _i < arguments.length; _i++) {
115659
+ rest[_i - 2] = arguments[_i];
115660
+ }
115654
115661
  var key = toPath(fileName);
115655
115662
  fileExistsCache.delete(key);
115656
115663
  var value = readFileCache.get(key);
@@ -115664,7 +115671,7 @@ var ts;
115664
115671
  sourceFileCache.delete(key);
115665
115672
  }
115666
115673
  }
115667
- originalWriteFile.call(host, fileName, data, writeByteOrderMark, onError, sourceFiles);
115674
+ originalWriteFile.call.apply(originalWriteFile, __spreadArray([host, fileName, data], rest, false));
115668
115675
  };
115669
115676
  }
115670
115677
  // directoryExists
@@ -116597,6 +116604,7 @@ var ts;
116597
116604
  useCaseSensitiveFileNames: function () { return host.useCaseSensitiveFileNames(); },
116598
116605
  getFileIncludeReasons: function () { return fileReasons; },
116599
116606
  structureIsReused: structureIsReused,
116607
+ writeFile: writeFile,
116600
116608
  };
116601
116609
  onProgramCreateComplete();
116602
116610
  // Add file processingDiagnostics
@@ -117094,7 +117102,7 @@ var ts;
117094
117102
  getProjectReferenceRedirect: getProjectReferenceRedirect,
117095
117103
  isSourceOfProjectReferenceRedirect: isSourceOfProjectReferenceRedirect,
117096
117104
  getSymlinkCache: getSymlinkCache,
117097
- writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }),
117105
+ writeFile: writeFileCallback || writeFile,
117098
117106
  isEmitBlocked: isEmitBlocked,
117099
117107
  readFile: function (f) { return host.readFile(f); },
117100
117108
  fileExists: function (f) {
@@ -117114,6 +117122,9 @@ var ts;
117114
117122
  getFileIncludeReasons: program.getFileIncludeReasons,
117115
117123
  };
117116
117124
  }
117125
+ function writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
117126
+ host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
117127
+ }
117117
117128
  function emitBuildInfo(writeFileCallback) {
117118
117129
  ts.Debug.assert(!ts.outFile(options));
117119
117130
  ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "emitBuildInfo", {}, /*separateBeginAndEnd*/ true);
@@ -119556,6 +119567,7 @@ var ts;
119556
119567
  }
119557
119568
  }
119558
119569
  }
119570
+ BuilderState.updateExportedModules = updateExportedModules;
119559
119571
  /**
119560
119572
  * Updates the exported modules from cache into state's exported modules map
119561
119573
  * This should be called whenever it is safe to commit the state of the builder
@@ -120520,7 +120532,43 @@ var ts;
120520
120532
  return toAffectedFileEmitResult(state,
120521
120533
  // When whole program is affected, do emit only once (eg when --out or --outFile is specified)
120522
120534
  // Otherwise just affected file
120523
- ts.Debug.checkDefined(state.program).emit(affected === state.program ? undefined : affected, writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles || emitKind === 0 /* DtsOnly */, customTransformers), affected, emitKind, isPendingEmitFile);
120535
+ ts.Debug.checkDefined(state.program).emit(affected === state.program ? undefined : affected, affected !== state.program && ts.getEmitDeclarations(state.compilerOptions) && !customTransformers ?
120536
+ getWriteFileUpdatingSignatureCallback(writeFile) :
120537
+ writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles || emitKind === 0 /* DtsOnly */, customTransformers), affected, emitKind, isPendingEmitFile);
120538
+ }
120539
+ function getWriteFileUpdatingSignatureCallback(writeFile) {
120540
+ return function (fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
120541
+ var _a;
120542
+ if (ts.isDeclarationFileName(fileName)) {
120543
+ ts.Debug.assert((sourceFiles === null || sourceFiles === void 0 ? void 0 : sourceFiles.length) === 1);
120544
+ var file = sourceFiles[0];
120545
+ var info = state.fileInfos.get(file.resolvedPath);
120546
+ var signature = ((_a = state.currentAffectedFilesSignatures) === null || _a === void 0 ? void 0 : _a.get(file.resolvedPath)) || info.signature;
120547
+ if (signature === file.version) {
120548
+ var newSignature = (computeHash || ts.generateDjb2Hash)((data === null || data === void 0 ? void 0 : data.sourceMapUrlPos) !== undefined ? text.substring(0, data.sourceMapUrlPos) : text);
120549
+ if (newSignature !== file.version) { // Update it
120550
+ if (host.storeFilesChangingSignatureDuringEmit)
120551
+ (state.filesChangingSignature || (state.filesChangingSignature = new ts.Set())).add(file.resolvedPath);
120552
+ if (state.exportedModulesMap)
120553
+ ts.BuilderState.updateExportedModules(file, file.exportedModulesFromDeclarationEmit, state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap()));
120554
+ if (state.affectedFiles && state.affectedFilesIndex < state.affectedFiles.length) {
120555
+ state.currentAffectedFilesSignatures.set(file.resolvedPath, newSignature);
120556
+ }
120557
+ else {
120558
+ info.signature = newSignature;
120559
+ if (state.exportedModulesMap)
120560
+ ts.BuilderState.updateExportedFilesMapFromCache(state, state.currentAffectedFilesExportedModulesMap);
120561
+ }
120562
+ }
120563
+ }
120564
+ }
120565
+ if (writeFile)
120566
+ writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120567
+ else if (host.writeFile)
120568
+ host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120569
+ else
120570
+ state.program.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
120571
+ };
120524
120572
  }
120525
120573
  /**
120526
120574
  * Emits the JavaScript and declaration files.
@@ -120577,7 +120625,9 @@ var ts;
120577
120625
  }
120578
120626
  }
120579
120627
  }
120580
- return ts.Debug.checkDefined(state.program).emit(targetSourceFile, writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles, customTransformers);
120628
+ return ts.Debug.checkDefined(state.program).emit(targetSourceFile, !ts.outFile(state.compilerOptions) && ts.getEmitDeclarations(state.compilerOptions) && !customTransformers ?
120629
+ getWriteFileUpdatingSignatureCallback(writeFile) :
120630
+ writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles, customTransformers);
120581
120631
  }
120582
120632
  /**
120583
120633
  * Return the semantic diagnostics for the next affected file or undefined if iteration is complete
@@ -122769,6 +122819,7 @@ var ts;
122769
122819
  createHash: ts.maybeBind(host, host.createHash),
122770
122820
  readDirectory: ts.maybeBind(host, host.readDirectory),
122771
122821
  disableUseFileVersionAsSignature: host.disableUseFileVersionAsSignature,
122822
+ storeFilesChangingSignatureDuringEmit: host.storeFilesChangingSignatureDuringEmit,
122772
122823
  };
122773
122824
  function writeFile(fileName, text, writeByteOrderMark, onError) {
122774
122825
  try {
@@ -122828,6 +122879,7 @@ var ts;
122828
122879
  createHash: ts.maybeBind(system, system.createHash),
122829
122880
  createProgram: createProgram || ts.createEmitAndSemanticDiagnosticsBuilderProgram,
122830
122881
  disableUseFileVersionAsSignature: system.disableUseFileVersionAsSignature,
122882
+ storeFilesChangingSignatureDuringEmit: system.storeFilesChangingSignatureDuringEmit,
122831
122883
  };
122832
122884
  }
122833
122885
  ts.createProgramHost = createProgramHost;
@@ -122916,6 +122968,7 @@ var ts;
122916
122968
  var host = ts.createCompilerHostWorker(options, /*setParentNodes*/ undefined, system);
122917
122969
  host.createHash = ts.maybeBind(system, system.createHash);
122918
122970
  host.disableUseFileVersionAsSignature = system.disableUseFileVersionAsSignature;
122971
+ host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit;
122919
122972
  ts.setGetSourceFileAsHashVersioned(host, system);
122920
122973
  ts.changeCompilerHostLikeToUseCache(host, function (fileName) { return ts.toPath(fileName, host.getCurrentDirectory(), host.getCanonicalFileName); });
122921
122974
  return host;
@@ -132401,22 +132454,44 @@ var ts;
132401
132454
  }
132402
132455
  }
132403
132456
  function createSnippetPrinter(printerOptions) {
132457
+ var escapes;
132404
132458
  var baseWriter = ts.textChanges.createWriter(ts.getNewLineCharacter(printerOptions));
132405
132459
  var printer = ts.createPrinter(printerOptions, baseWriter);
132406
- var writer = __assign(__assign({}, baseWriter), { write: function (s) { return baseWriter.write(ts.escapeSnippetText(s)); }, nonEscapingWrite: baseWriter.write, writeLiteral: function (s) { return baseWriter.writeLiteral(ts.escapeSnippetText(s)); }, writeStringLiteral: function (s) { return baseWriter.writeStringLiteral(ts.escapeSnippetText(s)); }, writeSymbol: function (s, symbol) { return baseWriter.writeSymbol(ts.escapeSnippetText(s), symbol); }, writeParameter: function (s) { return baseWriter.writeParameter(ts.escapeSnippetText(s)); }, writeComment: function (s) { return baseWriter.writeComment(ts.escapeSnippetText(s)); }, writeProperty: function (s) { return baseWriter.writeProperty(ts.escapeSnippetText(s)); } });
132460
+ var writer = __assign(__assign({}, baseWriter), { write: function (s) { return escapingWrite(s, function () { return baseWriter.write(s); }); }, nonEscapingWrite: baseWriter.write, writeLiteral: function (s) { return escapingWrite(s, function () { return baseWriter.writeLiteral(s); }); }, writeStringLiteral: function (s) { return escapingWrite(s, function () { return baseWriter.writeStringLiteral(s); }); }, writeSymbol: function (s, symbol) { return escapingWrite(s, function () { return baseWriter.writeSymbol(s, symbol); }); }, writeParameter: function (s) { return escapingWrite(s, function () { return baseWriter.writeParameter(s); }); }, writeComment: function (s) { return escapingWrite(s, function () { return baseWriter.writeComment(s); }); }, writeProperty: function (s) { return escapingWrite(s, function () { return baseWriter.writeProperty(s); }); } });
132407
132461
  return {
132408
132462
  printSnippetList: printSnippetList,
132409
132463
  printAndFormatSnippetList: printAndFormatSnippetList,
132410
132464
  };
132465
+ // The formatter/scanner will have issues with snippet-escaped text,
132466
+ // so instead of writing the escaped text directly to the writer,
132467
+ // generate a set of changes that can be applied to the unescaped text
132468
+ // to escape it post-formatting.
132469
+ function escapingWrite(s, write) {
132470
+ var escaped = ts.escapeSnippetText(s);
132471
+ if (escaped !== s) {
132472
+ var start = baseWriter.getTextPos();
132473
+ write();
132474
+ var end = baseWriter.getTextPos();
132475
+ escapes = ts.append(escapes || (escapes = []), { newText: escaped, span: { start: start, length: end - start } });
132476
+ }
132477
+ else {
132478
+ write();
132479
+ }
132480
+ }
132411
132481
  /* Snippet-escaping version of `printer.printList`. */
132412
132482
  function printSnippetList(format, list, sourceFile) {
132483
+ var unescaped = printUnescapedSnippetList(format, list, sourceFile);
132484
+ return escapes ? ts.textChanges.applyChanges(unescaped, escapes) : unescaped;
132485
+ }
132486
+ function printUnescapedSnippetList(format, list, sourceFile) {
132487
+ escapes = undefined;
132413
132488
  writer.clear();
132414
132489
  printer.writeList(format, list, sourceFile, writer);
132415
132490
  return writer.getText();
132416
132491
  }
132417
132492
  function printAndFormatSnippetList(format, list, sourceFile, formatContext) {
132418
132493
  var syntheticFile = {
132419
- text: printSnippetList(format, list, sourceFile),
132494
+ text: printUnescapedSnippetList(format, list, sourceFile),
132420
132495
  getLineAndCharacterOfPosition: function (pos) {
132421
132496
  return ts.getLineAndCharacterOfPosition(this, pos);
132422
132497
  },
@@ -132428,7 +132503,10 @@ var ts;
132428
132503
  /* indentation */ 0,
132429
132504
  /* delta */ 0, __assign(__assign({}, formatContext), { options: formatOptions }));
132430
132505
  });
132431
- return ts.textChanges.applyChanges(syntheticFile.text, changes);
132506
+ var allChanges = escapes
132507
+ ? ts.stableSort(ts.concatenate(changes, escapes), function (a, b) { return ts.compareTextSpans(a.span, b.span); })
132508
+ : changes;
132509
+ return ts.textChanges.applyChanges(syntheticFile.text, allChanges);
132432
132510
  }
132433
132511
  }
132434
132512
  function originToCompletionEntryData(origin) {
@@ -2172,7 +2172,9 @@ declare namespace ts {
2172
2172
  export type ResolvedConfigFileName = string & {
2173
2173
  _isResolvedConfigFileName: never;
2174
2174
  };
2175
- export type WriteFileCallback = (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: readonly SourceFile[]) => void;
2175
+ export interface WriteFileCallbackData {
2176
+ }
2177
+ export type WriteFileCallback = (fileName: string, text: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: readonly SourceFile[], data?: WriteFileCallbackData) => void;
2176
2178
  export class OperationCanceledException {
2177
2179
  }
2178
2180
  export interface CancellationToken {