Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package typescript for openSUSE:Factory 
checked in at 2024-04-08 17:39:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/typescript (Old)
 and      /work/SRC/openSUSE:Factory/.typescript.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "typescript"

Mon Apr  8 17:39:15 2024 rev:23 rq:1165994 version:5.4.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/typescript/typescript.changes    2024-03-22 
15:35:21.457448331 +0100
+++ /work/SRC/openSUSE:Factory/.typescript.new.1905/typescript.changes  
2024-04-08 17:51:39.228316496 +0200
@@ -1,0 +2,15 @@
+Sun Apr  7 16:09:40 UTC 2024 - Andrea Manzini <[email protected]>
+
+- Update to version 5.4.4
+  * Fix: Incorrect Path Resolution for Type Imports in TypeScript Declarations
+  * Fix: "Inferred type cannot be named" error caused by adding paths to 
tsconfig
+  * Fix: Incorrect parameter hint is highlighted when arguments contain spread 
syntax
+  * Fix: Fixed a regression related to determining argument index when spread 
elements are involved
+  * Fix: Directories dont check modified time when sending "change" event
+  * Fix: "Expression produces a union type that is too complex to represent" 
when using interfaces 
+         with large number of params for filtering and narrowing down certain 
keys
+  * Watch events Enhancements
+
+- Add empty %check section to the .spec
+
+-------------------------------------------------------------------

Old:
----
  typescript-5.4.3.tgz

New:
----
  typescript-5.4.4.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ typescript.spec ++++++
--- /var/tmp/diff_new_pack.3oT0Di/_old  2024-04-08 17:51:39.724334802 +0200
+++ /var/tmp/diff_new_pack.3oT0Di/_new  2024-04-08 17:51:39.724334802 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           typescript
-Version:        5.4.3
+Version:        5.4.4
 Release:        0
 Summary:        A language for application scale JavaScript development
 License:        Apache-2.0
@@ -54,6 +54,8 @@
 
 %fdupes %{buildroot}
 
+%check
+
 %files
 %license LICENSE.txt ThirdPartyNoticeText.txt
 %doc README.md

++++++ typescript-5.4.3.tgz -> typescript-5.4.4.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/lib/tsc.js new/package/lib/tsc.js
--- old/package/lib/tsc.js      1985-10-26 09:15:00.000000000 +0100
+++ new/package/lib/tsc.js      1985-10-26 09:15:00.000000000 +0100
@@ -18,7 +18,7 @@
 
 // src/compiler/corePublic.ts
 var versionMajorMinor = "5.4";
-var version = "5.4.3";
+var version = "5.4.4";
 
 // src/compiler/core.ts
 var emptyArray = [];
@@ -4145,14 +4145,17 @@
     pollingIntervalQueue(pollingInterval).pollScheduled = 
host.setTimeout(pollingInterval === 250 /* Low */ ? pollLowPollingIntervalQueue 
: pollPollingIntervalQueue, pollingInterval, pollingInterval === 250 /* Low */ 
? "pollLowPollingIntervalQueue" : "pollPollingIntervalQueue", 
pollingIntervalQueue(pollingInterval));
   }
 }
-function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2) {
+function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp) {
   const fileWatcherCallbacks = createMultiMap();
+  const fileTimestamps = fsWatchWithTimestamp ? /* @__PURE__ */ new Map() : 
void 0;
   const dirWatchers = /* @__PURE__ */ new Map();
   const toCanonicalName = 
createGetCanonicalFileName(useCaseSensitiveFileNames2);
   return nonPollingWatchFile;
   function nonPollingWatchFile(fileName, callback, _pollingInterval, 
fallbackOptions) {
     const filePath = toCanonicalName(fileName);
-    fileWatcherCallbacks.add(filePath, callback);
+    if (fileWatcherCallbacks.add(filePath, callback).length === 1 && 
fileTimestamps) {
+      fileTimestamps.set(filePath, getModifiedTime3(fileName) || 
missingFileModifiedTime);
+    }
     const dirPath = getDirectoryPath(filePath) || ".";
     const watcher = dirWatchers.get(dirPath) || 
createDirectoryWatcher(getDirectoryPath(fileName) || ".", dirPath, 
fallbackOptions);
     watcher.referenceCount++;
@@ -4172,14 +4175,31 @@
     const watcher = fsWatch(
       dirName,
       1 /* Directory */,
-      (_eventName, relativeFileName, modifiedTime) => {
+      (eventName, relativeFileName) => {
         if (!isString(relativeFileName))
           return;
         const fileName = getNormalizedAbsolutePath(relativeFileName, dirName);
-        const callbacks = fileName && 
fileWatcherCallbacks.get(toCanonicalName(fileName));
+        const filePath = toCanonicalName(fileName);
+        const callbacks = fileName && fileWatcherCallbacks.get(filePath);
         if (callbacks) {
+          let currentModifiedTime;
+          let eventKind = 1 /* Changed */;
+          if (fileTimestamps) {
+            const existingTime = fileTimestamps.get(filePath);
+            if (eventName === "change") {
+              currentModifiedTime = getModifiedTime3(fileName) || 
missingFileModifiedTime;
+              if (currentModifiedTime.getTime() === existingTime.getTime())
+                return;
+            }
+            currentModifiedTime || (currentModifiedTime = 
getModifiedTime3(fileName) || missingFileModifiedTime);
+            fileTimestamps.set(filePath, currentModifiedTime);
+            if (existingTime === missingFileModifiedTime)
+              eventKind = 0 /* Created */;
+            else if (currentModifiedTime === missingFileModifiedTime)
+              eventKind = 2 /* Deleted */;
+          }
           for (const fileCallback of callbacks) {
-            fileCallback(fileName, 1 /* Changed */, modifiedTime);
+            fileCallback(fileName, eventKind, currentModifiedTime);
           }
         }
       },
@@ -4573,7 +4593,7 @@
         );
       case 5 /* UseFsEventsOnParentDirectory */:
         if (!nonPollingWatchFile) {
-          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2);
+          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp);
         }
         return nonPollingWatchFile(fileName, callback, pollingInterval, 
getFallbackOptions(options));
       default:
@@ -4748,7 +4768,7 @@
         return watchPresentFileSystemEntryWithFsWatchFile();
       }
       try {
-        const presentWatcher = (!fsWatchWithTimestamp ? fsWatchWorker : 
fsWatchWorkerHandlingTimestamp)(
+        const presentWatcher = (entryKind === 1 /* Directory */ || 
!fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)(
           fileOrDirectory,
           recursive,
           inodeWatching ? callbackChangingToMissingFileSystemEntry : callback
@@ -42862,13 +42882,21 @@
     }
     const nearestTargetPackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, getDirectoryPath(modulePath));
     const nearestSourcePackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory);
-    if (nearestSourcePackageJson !== nearestTargetPackageJson) {
+    const ignoreCase = !hostUsesCaseSensitiveFileNames(host);
+    if (!packageJsonPathsAreEqual(nearestTargetPackageJson, 
nearestSourcePackageJson, ignoreCase)) {
       return maybeNonRelative;
     }
     return relativePath;
   }
   return isPathRelativeToParent(maybeNonRelative) || 
countPathComponents(relativePath) < countPathComponents(maybeNonRelative) ? 
relativePath : maybeNonRelative;
 }
+function packageJsonPathsAreEqual(a, b, ignoreCase) {
+  if (a === b)
+    return true;
+  if (a === void 0 || b === void 0)
+    return false;
+  return comparePaths(a, b, ignoreCase) === 0 /* EqualTo */;
+}
 function countPathComponents(path) {
   let count = 0;
   for (let i = startsWith(path, "./") ? 2 : 0; i < path.length; i++) {
@@ -47996,15 +48024,19 @@
       return true;
     }
   }
-  function isEntityNameVisible(entityName, enclosingDeclaration) {
+  function getMeaningOfEntityNameReference(entityName) {
     let meaning;
     if (entityName.parent.kind === 186 /* TypeQuery */ || 
entityName.parent.kind === 233 /* ExpressionWithTypeArguments */ && 
!isPartOfTypeNode(entityName.parent) || entityName.parent.kind === 167 /* 
ComputedPropertyName */) {
       meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
-    } else if (entityName.kind === 166 /* QualifiedName */ || entityName.kind 
=== 211 /* PropertyAccessExpression */ || entityName.parent.kind === 271 /* 
ImportEqualsDeclaration */) {
+    } else if (entityName.kind === 166 /* QualifiedName */ || entityName.kind 
=== 211 /* PropertyAccessExpression */ || entityName.parent.kind === 271 /* 
ImportEqualsDeclaration */ || entityName.parent.kind === 166 /* QualifiedName 
*/ && entityName.parent.left === entityName || entityName.parent.kind === 211 
/* PropertyAccessExpression */ && entityName.parent.expression === entityName 
|| entityName.parent.kind === 212 /* ElementAccessExpression */ && 
entityName.parent.expression === entityName) {
       meaning = 1920 /* Namespace */;
     } else {
       meaning = 788968 /* Type */;
     }
+    return meaning;
+  }
+  function isEntityNameVisible(entityName, enclosingDeclaration) {
+    const meaning = getMeaningOfEntityNameReference(entityName);
     const firstIdentifier = getFirstIdentifier(entityName);
     const symbol = resolveName(
       enclosingDeclaration,
@@ -50065,9 +50097,10 @@
         introducesError = true;
         return { introducesError, node };
       }
+      const meaning = getMeaningOfEntityNameReference(node);
       const sym = resolveEntityName(
         leftmost,
-        -1 /* All */,
+        meaning,
         /*ignoreErrors*/
         true,
         /*dontResolveAlias*/
@@ -50077,13 +50110,13 @@
         if (isSymbolAccessible(
           sym,
           context.enclosingDeclaration,
-          -1 /* All */,
+          meaning,
           /*shouldComputeAliasesToMakeVisible*/
           false
         ).accessibility !== 0 /* Accessible */) {
           introducesError = true;
         } else {
-          context.tracker.trackSymbol(sym, context.enclosingDeclaration, -1 /* 
All */);
+          context.tracker.trackSymbol(sym, context.enclosingDeclaration, 
meaning);
           includePrivateSymbol == null ? void 0 : includePrivateSymbol(sym);
         }
         if (isIdentifier(node)) {
@@ -57990,6 +58023,9 @@
         } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && 
(t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) 
{
           removeFromEach(typeSet, 65536 /* Null */);
           result = getUnionType([getIntersectionType(typeSet), nullType], 1 /* 
Literal */, aliasSymbol, aliasTypeArguments);
+        } else if (typeSet.length >= 4) {
+          const middle = Math.floor(typeSet.length / 2);
+          result = getIntersectionType([getIntersectionType(typeSet.slice(0, 
middle)), getIntersectionType(typeSet.slice(middle))], aliasSymbol, 
aliasTypeArguments);
         } else {
           if (!checkCrossProductUnion(typeSet)) {
             return errorType;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/lib/tsserver.js new/package/lib/tsserver.js
--- old/package/lib/tsserver.js 1985-10-26 09:15:00.000000000 +0100
+++ new/package/lib/tsserver.js 1985-10-26 09:15:00.000000000 +0100
@@ -2340,7 +2340,7 @@
 
 // src/compiler/corePublic.ts
 var versionMajorMinor = "5.4";
-var version = "5.4.3";
+var version = "5.4.4";
 var Comparison = /* @__PURE__ */ ((Comparison3) => {
   Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
   Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -7688,14 +7688,17 @@
     pollingIntervalQueue(pollingInterval).pollScheduled = 
host.setTimeout(pollingInterval === 250 /* Low */ ? pollLowPollingIntervalQueue 
: pollPollingIntervalQueue, pollingInterval, pollingInterval === 250 /* Low */ 
? "pollLowPollingIntervalQueue" : "pollPollingIntervalQueue", 
pollingIntervalQueue(pollingInterval));
   }
 }
-function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2) {
+function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp) {
   const fileWatcherCallbacks = createMultiMap();
+  const fileTimestamps = fsWatchWithTimestamp ? /* @__PURE__ */ new Map() : 
void 0;
   const dirWatchers = /* @__PURE__ */ new Map();
   const toCanonicalName = 
createGetCanonicalFileName(useCaseSensitiveFileNames2);
   return nonPollingWatchFile;
   function nonPollingWatchFile(fileName, callback, _pollingInterval, 
fallbackOptions) {
     const filePath = toCanonicalName(fileName);
-    fileWatcherCallbacks.add(filePath, callback);
+    if (fileWatcherCallbacks.add(filePath, callback).length === 1 && 
fileTimestamps) {
+      fileTimestamps.set(filePath, getModifiedTime3(fileName) || 
missingFileModifiedTime);
+    }
     const dirPath = getDirectoryPath(filePath) || ".";
     const watcher = dirWatchers.get(dirPath) || 
createDirectoryWatcher(getDirectoryPath(fileName) || ".", dirPath, 
fallbackOptions);
     watcher.referenceCount++;
@@ -7715,14 +7718,31 @@
     const watcher = fsWatch(
       dirName,
       1 /* Directory */,
-      (_eventName, relativeFileName, modifiedTime) => {
+      (eventName, relativeFileName) => {
         if (!isString(relativeFileName))
           return;
         const fileName = getNormalizedAbsolutePath(relativeFileName, dirName);
-        const callbacks = fileName && 
fileWatcherCallbacks.get(toCanonicalName(fileName));
+        const filePath = toCanonicalName(fileName);
+        const callbacks = fileName && fileWatcherCallbacks.get(filePath);
         if (callbacks) {
+          let currentModifiedTime;
+          let eventKind = 1 /* Changed */;
+          if (fileTimestamps) {
+            const existingTime = fileTimestamps.get(filePath);
+            if (eventName === "change") {
+              currentModifiedTime = getModifiedTime3(fileName) || 
missingFileModifiedTime;
+              if (currentModifiedTime.getTime() === existingTime.getTime())
+                return;
+            }
+            currentModifiedTime || (currentModifiedTime = 
getModifiedTime3(fileName) || missingFileModifiedTime);
+            fileTimestamps.set(filePath, currentModifiedTime);
+            if (existingTime === missingFileModifiedTime)
+              eventKind = 0 /* Created */;
+            else if (currentModifiedTime === missingFileModifiedTime)
+              eventKind = 2 /* Deleted */;
+          }
           for (const fileCallback of callbacks) {
-            fileCallback(fileName, 1 /* Changed */, modifiedTime);
+            fileCallback(fileName, eventKind, currentModifiedTime);
           }
         }
       },
@@ -8121,7 +8141,7 @@
         );
       case 5 /* UseFsEventsOnParentDirectory */:
         if (!nonPollingWatchFile) {
-          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2);
+          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp);
         }
         return nonPollingWatchFile(fileName, callback, pollingInterval, 
getFallbackOptions(options));
       default:
@@ -8296,7 +8316,7 @@
         return watchPresentFileSystemEntryWithFsWatchFile();
       }
       try {
-        const presentWatcher = (!fsWatchWithTimestamp ? fsWatchWorker : 
fsWatchWorkerHandlingTimestamp)(
+        const presentWatcher = (entryKind === 1 /* Directory */ || 
!fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)(
           fileOrDirectory,
           recursive,
           inodeWatching ? callbackChangingToMissingFileSystemEntry : callback
@@ -47606,13 +47626,21 @@
     }
     const nearestTargetPackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, getDirectoryPath(modulePath));
     const nearestSourcePackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory);
-    if (nearestSourcePackageJson !== nearestTargetPackageJson) {
+    const ignoreCase = !hostUsesCaseSensitiveFileNames(host);
+    if (!packageJsonPathsAreEqual(nearestTargetPackageJson, 
nearestSourcePackageJson, ignoreCase)) {
       return maybeNonRelative;
     }
     return relativePath;
   }
   return isPathRelativeToParent(maybeNonRelative) || 
countPathComponents(relativePath) < countPathComponents(maybeNonRelative) ? 
relativePath : maybeNonRelative;
 }
+function packageJsonPathsAreEqual(a, b, ignoreCase) {
+  if (a === b)
+    return true;
+  if (a === void 0 || b === void 0)
+    return false;
+  return comparePaths(a, b, ignoreCase) === 0 /* EqualTo */;
+}
 function countPathComponents(path) {
   let count = 0;
   for (let i = startsWith(path, "./") ? 2 : 0; i < path.length; i++) {
@@ -52740,15 +52768,19 @@
       return true;
     }
   }
-  function isEntityNameVisible(entityName, enclosingDeclaration) {
+  function getMeaningOfEntityNameReference(entityName) {
     let meaning;
     if (entityName.parent.kind === 186 /* TypeQuery */ || 
entityName.parent.kind === 233 /* ExpressionWithTypeArguments */ && 
!isPartOfTypeNode(entityName.parent) || entityName.parent.kind === 167 /* 
ComputedPropertyName */) {
       meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
-    } else if (entityName.kind === 166 /* QualifiedName */ || entityName.kind 
=== 211 /* PropertyAccessExpression */ || entityName.parent.kind === 271 /* 
ImportEqualsDeclaration */) {
+    } else if (entityName.kind === 166 /* QualifiedName */ || entityName.kind 
=== 211 /* PropertyAccessExpression */ || entityName.parent.kind === 271 /* 
ImportEqualsDeclaration */ || entityName.parent.kind === 166 /* QualifiedName 
*/ && entityName.parent.left === entityName || entityName.parent.kind === 211 
/* PropertyAccessExpression */ && entityName.parent.expression === entityName 
|| entityName.parent.kind === 212 /* ElementAccessExpression */ && 
entityName.parent.expression === entityName) {
       meaning = 1920 /* Namespace */;
     } else {
       meaning = 788968 /* Type */;
     }
+    return meaning;
+  }
+  function isEntityNameVisible(entityName, enclosingDeclaration) {
+    const meaning = getMeaningOfEntityNameReference(entityName);
     const firstIdentifier = getFirstIdentifier(entityName);
     const symbol = resolveName(
       enclosingDeclaration,
@@ -54809,9 +54841,10 @@
         introducesError = true;
         return { introducesError, node };
       }
+      const meaning = getMeaningOfEntityNameReference(node);
       const sym = resolveEntityName(
         leftmost,
-        -1 /* All */,
+        meaning,
         /*ignoreErrors*/
         true,
         /*dontResolveAlias*/
@@ -54821,13 +54854,13 @@
         if (isSymbolAccessible(
           sym,
           context.enclosingDeclaration,
-          -1 /* All */,
+          meaning,
           /*shouldComputeAliasesToMakeVisible*/
           false
         ).accessibility !== 0 /* Accessible */) {
           introducesError = true;
         } else {
-          context.tracker.trackSymbol(sym, context.enclosingDeclaration, -1 /* 
All */);
+          context.tracker.trackSymbol(sym, context.enclosingDeclaration, 
meaning);
           includePrivateSymbol == null ? void 0 : includePrivateSymbol(sym);
         }
         if (isIdentifier(node)) {
@@ -62734,6 +62767,9 @@
         } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && 
(t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) 
{
           removeFromEach(typeSet, 65536 /* Null */);
           result = getUnionType([getIntersectionType(typeSet), nullType], 1 /* 
Literal */, aliasSymbol, aliasTypeArguments);
+        } else if (typeSet.length >= 4) {
+          const middle = Math.floor(typeSet.length / 2);
+          result = getIntersectionType([getIntersectionType(typeSet.slice(0, 
middle)), getIntersectionType(typeSet.slice(middle))], aliasSymbol, 
aliasTypeArguments);
         } else {
           if (!checkCrossProductUnion(typeSet)) {
             return errorType;
@@ -160728,10 +160764,7 @@
       return isJsxExpression(parent2) && !isJsxElement(parent2.parent) && 
!isJsxFragment(parent2.parent) ? 
checker.getContextualTypeForJsxAttribute(parent2.parent) : void 0;
     default:
       const argInfo = 
ts_SignatureHelp_exports.getArgumentInfoForCompletions(previousToken, position, 
sourceFile, checker);
-      return argInfo ? (
-        // At `,`, treat this as the next argument after the comma.
-        checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, 
argInfo.argumentIndex + (previousToken.kind === 28 /* CommaToken */ ? 1 : 0))
-      ) : isEqualityOperatorKind(previousToken.kind) && 
isBinaryExpression(parent2) && 
isEqualityOperatorKind(parent2.operatorToken.kind) ? (
+      return argInfo ? 
checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, 
argInfo.argumentIndex) : isEqualityOperatorKind(previousToken.kind) && 
isBinaryExpression(parent2) && 
isEqualityOperatorKind(parent2.operatorToken.kind) ? (
         // completion at `x ===/**/` should be for the right side
         checker.getTypeAtLocation(parent2.left)
       ) : checker.getContextualType(previousToken, 4 /* Completions */) || 
checker.getContextualType(previousToken);
@@ -169099,12 +169132,7 @@
   if (!info)
     return void 0;
   const { list, argumentIndex } = info;
-  const argumentCount = getArgumentCount(
-    list,
-    /*ignoreTrailingComma*/
-    isInString(sourceFile, position, node),
-    checker
-  );
+  const argumentCount = getArgumentCount(checker, list);
   if (argumentIndex !== 0) {
     Debug.assertLessThan(argumentIndex, argumentCount);
   }
@@ -169116,7 +169144,7 @@
     return { list: getChildListThatStartsWithOpenerToken(node.parent, node, 
sourceFile), argumentIndex: 0 };
   } else {
     const list = findContainingList(node);
-    return list && { list, argumentIndex: getArgumentIndex(list, node, 
checker) };
+    return list && { list, argumentIndex: getArgumentIndex(checker, list, 
node) };
   }
 }
 function getImmediatelyContainingArgumentInfo(node, position, sourceFile, 
checker) {
@@ -169246,24 +169274,6 @@
     return isFunctionTypeNode(d) ? (_a = tryCast(d.parent, canHaveSymbol)) == 
null ? void 0 : _a.symbol : void 0;
   }) || s : s;
 }
-function getArgumentIndex(argumentsList, node, checker) {
-  const args = argumentsList.getChildren();
-  let argumentIndex = 0;
-  for (let pos = 0; pos < length(args); pos++) {
-    const child = args[pos];
-    if (child === node) {
-      break;
-    }
-    if (isSpreadElement(child)) {
-      argumentIndex = argumentIndex + getSpreadElementCount(child, checker) + 
(pos > 0 ? pos : 0);
-    } else {
-      if (child.kind !== 28 /* CommaToken */) {
-        argumentIndex++;
-      }
-    }
-  }
-  return argumentIndex;
-}
 function getSpreadElementCount(node, checker) {
   const spreadType = checker.getTypeAtLocation(node.expression);
   if (checker.isTupleType(spreadType)) {
@@ -169276,19 +169286,48 @@
   }
   return 0;
 }
-function getArgumentCount(argumentsList, ignoreTrailingComma, checker) {
-  const listChildren = argumentsList.getChildren();
-  let argumentCount = 0;
-  for (const child of listChildren) {
+function getArgumentIndex(checker, argumentsList, node) {
+  return getArgumentIndexOrCount(checker, argumentsList, node);
+}
+function getArgumentCount(checker, argumentsList) {
+  return getArgumentIndexOrCount(
+    checker,
+    argumentsList,
+    /*node*/
+    void 0
+  );
+}
+function getArgumentIndexOrCount(checker, argumentsList, node) {
+  const args = argumentsList.getChildren();
+  let argumentIndex = 0;
+  let skipComma = false;
+  for (const child of args) {
+    if (node && child === node) {
+      if (!skipComma && child.kind === 28 /* CommaToken */) {
+        argumentIndex++;
+      }
+      return argumentIndex;
+    }
     if (isSpreadElement(child)) {
-      argumentCount = argumentCount + getSpreadElementCount(child, checker);
+      argumentIndex += getSpreadElementCount(child, checker);
+      skipComma = true;
+      continue;
     }
+    if (child.kind !== 28 /* CommaToken */) {
+      argumentIndex++;
+      skipComma = true;
+      continue;
+    }
+    if (skipComma) {
+      skipComma = false;
+      continue;
+    }
+    argumentIndex++;
   }
-  argumentCount = argumentCount + countWhere(listChildren, (arg) => arg.kind 
!== 28 /* CommaToken */);
-  if (!ignoreTrailingComma && listChildren.length > 0 && 
last(listChildren).kind === 28 /* CommaToken */) {
-    argumentCount++;
+  if (node) {
+    return argumentIndex;
   }
-  return argumentCount;
+  return args.length && last(args).kind === 28 /* CommaToken */ ? 
argumentIndex + 1 : argumentIndex;
 }
 function getArgumentIndexForTemplatePiece(spanIndex, node, position, 
sourceFile) {
   Debug.assert(position >= node.getStart(), "Assumed 'position' could not 
occur before node.");
@@ -181088,7 +181127,16 @@
       recursive ? watchedDirectoriesRecursive : watchedDirectories,
       path,
       callback,
-      (id) => ({ eventName: CreateDirectoryWatcherEvent, data: { id, path, 
recursive: !!recursive } })
+      (id) => ({
+        eventName: CreateDirectoryWatcherEvent,
+        data: {
+          id,
+          path,
+          recursive: !!recursive,
+          // Special case node_modules as we watch it for changes to closed 
script infos as well
+          ignoreUpdate: !path.endsWith("/node_modules") ? true : void 0
+        }
+      })
     );
   }
   function getOrCreateFileWatcher({ pathToId, idToCallbacks }, path, callback, 
event) {
@@ -181115,24 +181163,28 @@
       }
     };
   }
-  function onWatchChange({ id, path, eventType }) {
-    onFileWatcherCallback(id, path, eventType);
-    onDirectoryWatcherCallback(watchedDirectories, id, path, eventType);
-    onDirectoryWatcherCallback(watchedDirectoriesRecursive, id, path, 
eventType);
+  function onWatchChange(args) {
+    if (isArray(args))
+      args.forEach(onWatchChangeRequestArgs);
+    else
+      onWatchChangeRequestArgs(args);
   }
-  function onFileWatcherCallback(id, eventPath, eventType) {
-    var _a;
-    (_a = watchedFiles.idToCallbacks.get(id)) == null ? void 0 : 
_a.forEach((callback) => {
-      const eventKind = eventType === "create" ? 0 /* Created */ : eventType 
=== "delete" ? 2 /* Deleted */ : 1 /* Changed */;
-      callback(eventPath, eventKind);
-    });
+  function onWatchChangeRequestArgs({ id, created, deleted, updated }) {
+    onWatchEventType(id, created, 0 /* Created */);
+    onWatchEventType(id, deleted, 2 /* Deleted */);
+    onWatchEventType(id, updated, 1 /* Changed */);
   }
-  function onDirectoryWatcherCallback({ idToCallbacks }, id, eventPath, 
eventType) {
-    var _a;
-    if (eventType === "update")
+  function onWatchEventType(id, paths, eventKind) {
+    if (!(paths == null ? void 0 : paths.length))
       return;
-    (_a = idToCallbacks.get(id)) == null ? void 0 : _a.forEach((callback) => {
-      callback(eventPath);
+    forEachCallback(watchedFiles, id, paths, (callback, eventPath) => 
callback(eventPath, eventKind));
+    forEachCallback(watchedDirectories, id, paths, (callback, eventPath) => 
callback(eventPath));
+    forEachCallback(watchedDirectoriesRecursive, id, paths, (callback, 
eventPath) => callback(eventPath));
+  }
+  function forEachCallback(hostWatcherMap, id, eventPaths, cb) {
+    var _a;
+    (_a = hostWatcherMap.idToCallbacks.get(id)) == null ? void 0 : 
_a.forEach((callback) => {
+      eventPaths.forEach((eventPath) => cb(callback, 
normalizeSlashes(eventPath)));
     });
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/lib/typescript.d.ts 
new/package/lib/typescript.d.ts
--- old/package/lib/typescript.d.ts     1985-10-26 09:15:00.000000000 +0100
+++ new/package/lib/typescript.d.ts     1985-10-26 09:15:00.000000000 +0100
@@ -1510,12 +1510,13 @@
             }
             interface WatchChangeRequest extends Request {
                 command: CommandTypes.WatchChange;
-                arguments: WatchChangeRequestArgs;
+                arguments: WatchChangeRequestArgs | readonly 
WatchChangeRequestArgs[];
             }
             interface WatchChangeRequestArgs {
                 id: number;
-                path: string;
-                eventType: "create" | "delete" | "update";
+                created?: string[];
+                deleted?: string[];
+                updated?: string[];
             }
             /**
              * Request to obtain the list of files that should be regenerated 
if target file is recompiled.
@@ -2452,6 +2453,7 @@
                 readonly id: number;
                 readonly path: string;
                 readonly recursive: boolean;
+                readonly ignoreUpdate?: boolean;
             }
             type CloseFileWatcherEventName = "closeFileWatcher";
             interface CloseFileWatcherEvent extends Event {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/lib/typescript.js 
new/package/lib/typescript.js
--- old/package/lib/typescript.js       1985-10-26 09:15:00.000000000 +0100
+++ new/package/lib/typescript.js       1985-10-26 09:15:00.000000000 +0100
@@ -35,7 +35,7 @@
     "src/compiler/corePublic.ts"() {
       "use strict";
       versionMajorMinor = "5.4";
-      version = "5.4.3";
+      version = "5.4.4";
       Comparison = /* @__PURE__ */ ((Comparison3) => {
         Comparison3[Comparison3["LessThan"] = -1] = "LessThan";
         Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo";
@@ -5423,14 +5423,17 @@
       pollingIntervalQueue(pollingInterval).pollScheduled = 
host.setTimeout(pollingInterval === 250 /* Low */ ? pollLowPollingIntervalQueue 
: pollPollingIntervalQueue, pollingInterval, pollingInterval === 250 /* Low */ 
? "pollLowPollingIntervalQueue" : "pollPollingIntervalQueue", 
pollingIntervalQueue(pollingInterval));
     }
   }
-  function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2) {
+  function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp) {
     const fileWatcherCallbacks = createMultiMap();
+    const fileTimestamps = fsWatchWithTimestamp ? /* @__PURE__ */ new Map() : 
void 0;
     const dirWatchers = /* @__PURE__ */ new Map();
     const toCanonicalName = 
createGetCanonicalFileName(useCaseSensitiveFileNames2);
     return nonPollingWatchFile;
     function nonPollingWatchFile(fileName, callback, _pollingInterval, 
fallbackOptions) {
       const filePath = toCanonicalName(fileName);
-      fileWatcherCallbacks.add(filePath, callback);
+      if (fileWatcherCallbacks.add(filePath, callback).length === 1 && 
fileTimestamps) {
+        fileTimestamps.set(filePath, getModifiedTime3(fileName) || 
missingFileModifiedTime);
+      }
       const dirPath = getDirectoryPath(filePath) || ".";
       const watcher = dirWatchers.get(dirPath) || 
createDirectoryWatcher(getDirectoryPath(fileName) || ".", dirPath, 
fallbackOptions);
       watcher.referenceCount++;
@@ -5450,14 +5453,31 @@
       const watcher = fsWatch(
         dirName,
         1 /* Directory */,
-        (_eventName, relativeFileName, modifiedTime) => {
+        (eventName, relativeFileName) => {
           if (!isString(relativeFileName))
             return;
           const fileName = getNormalizedAbsolutePath(relativeFileName, 
dirName);
-          const callbacks = fileName && 
fileWatcherCallbacks.get(toCanonicalName(fileName));
+          const filePath = toCanonicalName(fileName);
+          const callbacks = fileName && fileWatcherCallbacks.get(filePath);
           if (callbacks) {
+            let currentModifiedTime;
+            let eventKind = 1 /* Changed */;
+            if (fileTimestamps) {
+              const existingTime = fileTimestamps.get(filePath);
+              if (eventName === "change") {
+                currentModifiedTime = getModifiedTime3(fileName) || 
missingFileModifiedTime;
+                if (currentModifiedTime.getTime() === existingTime.getTime())
+                  return;
+              }
+              currentModifiedTime || (currentModifiedTime = 
getModifiedTime3(fileName) || missingFileModifiedTime);
+              fileTimestamps.set(filePath, currentModifiedTime);
+              if (existingTime === missingFileModifiedTime)
+                eventKind = 0 /* Created */;
+              else if (currentModifiedTime === missingFileModifiedTime)
+                eventKind = 2 /* Deleted */;
+            }
             for (const fileCallback of callbacks) {
-              fileCallback(fileName, 1 /* Changed */, modifiedTime);
+              fileCallback(fileName, eventKind, currentModifiedTime);
             }
           }
         },
@@ -5849,7 +5869,7 @@
           );
         case 5 /* UseFsEventsOnParentDirectory */:
           if (!nonPollingWatchFile) {
-            nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2);
+            nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp);
           }
           return nonPollingWatchFile(fileName, callback, pollingInterval, 
getFallbackOptions(options));
         default:
@@ -6024,7 +6044,7 @@
           return watchPresentFileSystemEntryWithFsWatchFile();
         }
         try {
-          const presentWatcher = (!fsWatchWithTimestamp ? fsWatchWorker : 
fsWatchWorkerHandlingTimestamp)(
+          const presentWatcher = (entryKind === 1 /* Directory */ || 
!fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)(
             fileOrDirectory,
             recursive,
             inodeWatching ? callbackChangingToMissingFileSystemEntry : callback
@@ -45450,13 +45470,21 @@
       }
       const nearestTargetPackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, getDirectoryPath(modulePath));
       const nearestSourcePackageJson = 
getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory);
-      if (nearestSourcePackageJson !== nearestTargetPackageJson) {
+      const ignoreCase = !hostUsesCaseSensitiveFileNames(host);
+      if (!packageJsonPathsAreEqual(nearestTargetPackageJson, 
nearestSourcePackageJson, ignoreCase)) {
         return maybeNonRelative;
       }
       return relativePath;
     }
     return isPathRelativeToParent(maybeNonRelative) || 
countPathComponents(relativePath) < countPathComponents(maybeNonRelative) ? 
relativePath : maybeNonRelative;
   }
+  function packageJsonPathsAreEqual(a, b, ignoreCase) {
+    if (a === b)
+      return true;
+    if (a === void 0 || b === void 0)
+      return false;
+    return comparePaths(a, b, ignoreCase) === 0 /* EqualTo */;
+  }
   function countPathComponents(path) {
     let count = 0;
     for (let i = startsWith(path, "./") ? 2 : 0; i < path.length; i++) {
@@ -50495,15 +50523,19 @@
         return true;
       }
     }
-    function isEntityNameVisible(entityName, enclosingDeclaration) {
+    function getMeaningOfEntityNameReference(entityName) {
       let meaning;
       if (entityName.parent.kind === 186 /* TypeQuery */ || 
entityName.parent.kind === 233 /* ExpressionWithTypeArguments */ && 
!isPartOfTypeNode(entityName.parent) || entityName.parent.kind === 167 /* 
ComputedPropertyName */) {
         meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
-      } else if (entityName.kind === 166 /* QualifiedName */ || 
entityName.kind === 211 /* PropertyAccessExpression */ || 
entityName.parent.kind === 271 /* ImportEqualsDeclaration */) {
+      } else if (entityName.kind === 166 /* QualifiedName */ || 
entityName.kind === 211 /* PropertyAccessExpression */ || 
entityName.parent.kind === 271 /* ImportEqualsDeclaration */ || 
entityName.parent.kind === 166 /* QualifiedName */ && entityName.parent.left 
=== entityName || entityName.parent.kind === 211 /* PropertyAccessExpression */ 
&& entityName.parent.expression === entityName || entityName.parent.kind === 
212 /* ElementAccessExpression */ && entityName.parent.expression === 
entityName) {
         meaning = 1920 /* Namespace */;
       } else {
         meaning = 788968 /* Type */;
       }
+      return meaning;
+    }
+    function isEntityNameVisible(entityName, enclosingDeclaration) {
+      const meaning = getMeaningOfEntityNameReference(entityName);
       const firstIdentifier = getFirstIdentifier(entityName);
       const symbol = resolveName(
         enclosingDeclaration,
@@ -52564,9 +52596,10 @@
           introducesError = true;
           return { introducesError, node };
         }
+        const meaning = getMeaningOfEntityNameReference(node);
         const sym = resolveEntityName(
           leftmost,
-          -1 /* All */,
+          meaning,
           /*ignoreErrors*/
           true,
           /*dontResolveAlias*/
@@ -52576,13 +52609,13 @@
           if (isSymbolAccessible(
             sym,
             context.enclosingDeclaration,
-            -1 /* All */,
+            meaning,
             /*shouldComputeAliasesToMakeVisible*/
             false
           ).accessibility !== 0 /* Accessible */) {
             introducesError = true;
           } else {
-            context.tracker.trackSymbol(sym, context.enclosingDeclaration, -1 
/* All */);
+            context.tracker.trackSymbol(sym, context.enclosingDeclaration, 
meaning);
             includePrivateSymbol == null ? void 0 : includePrivateSymbol(sym);
           }
           if (isIdentifier(node)) {
@@ -60489,6 +60522,9 @@
           } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && 
(t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) 
{
             removeFromEach(typeSet, 65536 /* Null */);
             result = getUnionType([getIntersectionType(typeSet), nullType], 1 
/* Literal */, aliasSymbol, aliasTypeArguments);
+          } else if (typeSet.length >= 4) {
+            const middle = Math.floor(typeSet.length / 2);
+            result = getIntersectionType([getIntersectionType(typeSet.slice(0, 
middle)), getIntersectionType(typeSet.slice(middle))], aliasSymbol, 
aliasTypeArguments);
           } else {
             if (!checkCrossProductUnion(typeSet)) {
               return errorType;
@@ -159942,10 +159978,7 @@
         return isJsxExpression(parent2) && !isJsxElement(parent2.parent) && 
!isJsxFragment(parent2.parent) ? 
checker.getContextualTypeForJsxAttribute(parent2.parent) : void 0;
       default:
         const argInfo = 
ts_SignatureHelp_exports.getArgumentInfoForCompletions(previousToken, position, 
sourceFile, checker);
-        return argInfo ? (
-          // At `,`, treat this as the next argument after the comma.
-          checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, 
argInfo.argumentIndex + (previousToken.kind === 28 /* CommaToken */ ? 1 : 0))
-        ) : isEqualityOperatorKind(previousToken.kind) && 
isBinaryExpression(parent2) && 
isEqualityOperatorKind(parent2.operatorToken.kind) ? (
+        return argInfo ? 
checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, 
argInfo.argumentIndex) : isEqualityOperatorKind(previousToken.kind) && 
isBinaryExpression(parent2) && 
isEqualityOperatorKind(parent2.operatorToken.kind) ? (
           // completion at `x ===/**/` should be for the right side
           checker.getTypeAtLocation(parent2.left)
         ) : checker.getContextualType(previousToken, 4 /* Completions */) || 
checker.getContextualType(previousToken);
@@ -168509,12 +168542,7 @@
     if (!info)
       return void 0;
     const { list, argumentIndex } = info;
-    const argumentCount = getArgumentCount(
-      list,
-      /*ignoreTrailingComma*/
-      isInString(sourceFile, position, node),
-      checker
-    );
+    const argumentCount = getArgumentCount(checker, list);
     if (argumentIndex !== 0) {
       Debug.assertLessThan(argumentIndex, argumentCount);
     }
@@ -168526,7 +168554,7 @@
       return { list: getChildListThatStartsWithOpenerToken(node.parent, node, 
sourceFile), argumentIndex: 0 };
     } else {
       const list = findContainingList(node);
-      return list && { list, argumentIndex: getArgumentIndex(list, node, 
checker) };
+      return list && { list, argumentIndex: getArgumentIndex(checker, list, 
node) };
     }
   }
   function getImmediatelyContainingArgumentInfo(node, position, sourceFile, 
checker) {
@@ -168656,24 +168684,6 @@
       return isFunctionTypeNode(d) ? (_a = tryCast(d.parent, canHaveSymbol)) 
== null ? void 0 : _a.symbol : void 0;
     }) || s : s;
   }
-  function getArgumentIndex(argumentsList, node, checker) {
-    const args = argumentsList.getChildren();
-    let argumentIndex = 0;
-    for (let pos = 0; pos < length(args); pos++) {
-      const child = args[pos];
-      if (child === node) {
-        break;
-      }
-      if (isSpreadElement(child)) {
-        argumentIndex = argumentIndex + getSpreadElementCount(child, checker) 
+ (pos > 0 ? pos : 0);
-      } else {
-        if (child.kind !== 28 /* CommaToken */) {
-          argumentIndex++;
-        }
-      }
-    }
-    return argumentIndex;
-  }
   function getSpreadElementCount(node, checker) {
     const spreadType = checker.getTypeAtLocation(node.expression);
     if (checker.isTupleType(spreadType)) {
@@ -168686,19 +168696,48 @@
     }
     return 0;
   }
-  function getArgumentCount(argumentsList, ignoreTrailingComma, checker) {
-    const listChildren = argumentsList.getChildren();
-    let argumentCount = 0;
-    for (const child of listChildren) {
+  function getArgumentIndex(checker, argumentsList, node) {
+    return getArgumentIndexOrCount(checker, argumentsList, node);
+  }
+  function getArgumentCount(checker, argumentsList) {
+    return getArgumentIndexOrCount(
+      checker,
+      argumentsList,
+      /*node*/
+      void 0
+    );
+  }
+  function getArgumentIndexOrCount(checker, argumentsList, node) {
+    const args = argumentsList.getChildren();
+    let argumentIndex = 0;
+    let skipComma = false;
+    for (const child of args) {
+      if (node && child === node) {
+        if (!skipComma && child.kind === 28 /* CommaToken */) {
+          argumentIndex++;
+        }
+        return argumentIndex;
+      }
       if (isSpreadElement(child)) {
-        argumentCount = argumentCount + getSpreadElementCount(child, checker);
+        argumentIndex += getSpreadElementCount(child, checker);
+        skipComma = true;
+        continue;
+      }
+      if (child.kind !== 28 /* CommaToken */) {
+        argumentIndex++;
+        skipComma = true;
+        continue;
+      }
+      if (skipComma) {
+        skipComma = false;
+        continue;
       }
+      argumentIndex++;
     }
-    argumentCount = argumentCount + countWhere(listChildren, (arg) => arg.kind 
!== 28 /* CommaToken */);
-    if (!ignoreTrailingComma && listChildren.length > 0 && 
last(listChildren).kind === 28 /* CommaToken */) {
-      argumentCount++;
+    if (node) {
+      return argumentIndex;
     }
-    return argumentCount;
+    return args.length && last(args).kind === 28 /* CommaToken */ ? 
argumentIndex + 1 : argumentIndex;
   }
   function getArgumentIndexForTemplatePiece(spanIndex, node, position, 
sourceFile) {
     Debug.assert(position >= node.getStart(), "Assumed 'position' could not 
occur before node.");
@@ -178286,7 +178325,16 @@
         recursive ? watchedDirectoriesRecursive : watchedDirectories,
         path,
         callback,
-        (id) => ({ eventName: CreateDirectoryWatcherEvent, data: { id, path, 
recursive: !!recursive } })
+        (id) => ({
+          eventName: CreateDirectoryWatcherEvent,
+          data: {
+            id,
+            path,
+            recursive: !!recursive,
+            // Special case node_modules as we watch it for changes to closed 
script infos as well
+            ignoreUpdate: !path.endsWith("/node_modules") ? true : void 0
+          }
+        })
       );
     }
     function getOrCreateFileWatcher({ pathToId, idToCallbacks }, path, 
callback, event) {
@@ -178313,24 +178361,28 @@
         }
       };
     }
-    function onWatchChange({ id, path, eventType }) {
-      onFileWatcherCallback(id, path, eventType);
-      onDirectoryWatcherCallback(watchedDirectories, id, path, eventType);
-      onDirectoryWatcherCallback(watchedDirectoriesRecursive, id, path, 
eventType);
+    function onWatchChange(args) {
+      if (isArray(args))
+        args.forEach(onWatchChangeRequestArgs);
+      else
+        onWatchChangeRequestArgs(args);
     }
-    function onFileWatcherCallback(id, eventPath, eventType) {
-      var _a;
-      (_a = watchedFiles.idToCallbacks.get(id)) == null ? void 0 : 
_a.forEach((callback) => {
-        const eventKind = eventType === "create" ? 0 /* Created */ : eventType 
=== "delete" ? 2 /* Deleted */ : 1 /* Changed */;
-        callback(eventPath, eventKind);
-      });
+    function onWatchChangeRequestArgs({ id, created, deleted, updated }) {
+      onWatchEventType(id, created, 0 /* Created */);
+      onWatchEventType(id, deleted, 2 /* Deleted */);
+      onWatchEventType(id, updated, 1 /* Changed */);
     }
-    function onDirectoryWatcherCallback({ idToCallbacks }, id, eventPath, 
eventType) {
-      var _a;
-      if (eventType === "update")
+    function onWatchEventType(id, paths, eventKind) {
+      if (!(paths == null ? void 0 : paths.length))
         return;
-      (_a = idToCallbacks.get(id)) == null ? void 0 : _a.forEach((callback) => 
{
-        callback(eventPath);
+      forEachCallback(watchedFiles, id, paths, (callback, eventPath) => 
callback(eventPath, eventKind));
+      forEachCallback(watchedDirectories, id, paths, (callback, eventPath) => 
callback(eventPath));
+      forEachCallback(watchedDirectoriesRecursive, id, paths, (callback, 
eventPath) => callback(eventPath));
+    }
+    function forEachCallback(hostWatcherMap, id, eventPaths, cb) {
+      var _a;
+      (_a = hostWatcherMap.idToCallbacks.get(id)) == null ? void 0 : 
_a.forEach((callback) => {
+        eventPaths.forEach((eventPath) => cb(callback, 
normalizeSlashes(eventPath)));
       });
     }
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/lib/typingsInstaller.js 
new/package/lib/typingsInstaller.js
--- old/package/lib/typingsInstaller.js 1985-10-26 09:15:00.000000000 +0100
+++ new/package/lib/typingsInstaller.js 1985-10-26 09:15:00.000000000 +0100
@@ -54,7 +54,7 @@
 
 // src/compiler/corePublic.ts
 var versionMajorMinor = "5.4";
-var version = "5.4.3";
+var version = "5.4.4";
 
 // src/compiler/core.ts
 var emptyArray = [];
@@ -3560,14 +3560,17 @@
     pollingIntervalQueue(pollingInterval).pollScheduled = 
host.setTimeout(pollingInterval === 250 /* Low */ ? pollLowPollingIntervalQueue 
: pollPollingIntervalQueue, pollingInterval, pollingInterval === 250 /* Low */ 
? "pollLowPollingIntervalQueue" : "pollPollingIntervalQueue", 
pollingIntervalQueue(pollingInterval));
   }
 }
-function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2) {
+function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime2, fsWatchWithTimestamp) {
   const fileWatcherCallbacks = createMultiMap();
+  const fileTimestamps = fsWatchWithTimestamp ? /* @__PURE__ */ new Map() : 
void 0;
   const dirWatchers = /* @__PURE__ */ new Map();
   const toCanonicalName = 
createGetCanonicalFileName(useCaseSensitiveFileNames2);
   return nonPollingWatchFile;
   function nonPollingWatchFile(fileName, callback, _pollingInterval, 
fallbackOptions) {
     const filePath = toCanonicalName(fileName);
-    fileWatcherCallbacks.add(filePath, callback);
+    if (fileWatcherCallbacks.add(filePath, callback).length === 1 && 
fileTimestamps) {
+      fileTimestamps.set(filePath, getModifiedTime2(fileName) || 
missingFileModifiedTime);
+    }
     const dirPath = getDirectoryPath(filePath) || ".";
     const watcher = dirWatchers.get(dirPath) || 
createDirectoryWatcher(getDirectoryPath(fileName) || ".", dirPath, 
fallbackOptions);
     watcher.referenceCount++;
@@ -3587,14 +3590,31 @@
     const watcher = fsWatch(
       dirName,
       1 /* Directory */,
-      (_eventName, relativeFileName, modifiedTime) => {
+      (eventName, relativeFileName) => {
         if (!isString(relativeFileName))
           return;
         const fileName = getNormalizedAbsolutePath(relativeFileName, dirName);
-        const callbacks = fileName && 
fileWatcherCallbacks.get(toCanonicalName(fileName));
+        const filePath = toCanonicalName(fileName);
+        const callbacks = fileName && fileWatcherCallbacks.get(filePath);
         if (callbacks) {
+          let currentModifiedTime;
+          let eventKind = 1 /* Changed */;
+          if (fileTimestamps) {
+            const existingTime = fileTimestamps.get(filePath);
+            if (eventName === "change") {
+              currentModifiedTime = getModifiedTime2(fileName) || 
missingFileModifiedTime;
+              if (currentModifiedTime.getTime() === existingTime.getTime())
+                return;
+            }
+            currentModifiedTime || (currentModifiedTime = 
getModifiedTime2(fileName) || missingFileModifiedTime);
+            fileTimestamps.set(filePath, currentModifiedTime);
+            if (existingTime === missingFileModifiedTime)
+              eventKind = 0 /* Created */;
+            else if (currentModifiedTime === missingFileModifiedTime)
+              eventKind = 2 /* Deleted */;
+          }
           for (const fileCallback of callbacks) {
-            fileCallback(fileName, 1 /* Changed */, modifiedTime);
+            fileCallback(fileName, eventKind, currentModifiedTime);
           }
         }
       },
@@ -3985,7 +4005,7 @@
         );
       case 5 /* UseFsEventsOnParentDirectory */:
         if (!nonPollingWatchFile) {
-          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2);
+          nonPollingWatchFile = 
createUseFsEventsOnParentDirectoryWatchFile(fsWatch, 
useCaseSensitiveFileNames2, getModifiedTime2, fsWatchWithTimestamp);
         }
         return nonPollingWatchFile(fileName, callback, pollingInterval, 
getFallbackOptions(options));
       default:
@@ -4160,7 +4180,7 @@
         return watchPresentFileSystemEntryWithFsWatchFile();
       }
       try {
-        const presentWatcher = (!fsWatchWithTimestamp ? fsWatchWorker : 
fsWatchWorkerHandlingTimestamp)(
+        const presentWatcher = (entryKind === 1 /* Directory */ || 
!fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)(
           fileOrDirectory,
           recursive,
           inodeWatching ? callbackChangingToMissingFileSystemEntry : callback
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/package/package.json new/package/package.json
--- old/package/package.json    1985-10-26 09:15:00.000000000 +0100
+++ new/package/package.json    1985-10-26 09:15:00.000000000 +0100
@@ -2,7 +2,7 @@
     "name": "typescript",
     "author": "Microsoft Corp.",
     "homepage": "https://www.typescriptlang.org/";,
-    "version": "5.4.3",
+    "version": "5.4.4",
     "license": "Apache-2.0",
     "description": "TypeScript is a language for application scale JavaScript 
development",
     "keywords": [

Reply via email to