From 8eb3367164dd9cdc9c0b85424ed39ab28eff2312 Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Tue, 2 Apr 2024 20:38:05 +0000 Subject: [PATCH] Bump version to 5.4.4 and LKG --- lib/tsc.js | 64 ++++++++++--- lib/tsserver.js | 188 +++++++++++++++++++++++-------------- lib/typescript.d.ts | 8 +- lib/typescript.js | 188 +++++++++++++++++++++++-------------- lib/typingsInstaller.js | 36 +++++-- package-lock.json | 4 +- package.json | 2 +- src/compiler/corePublic.ts | 2 +- 8 files changed, 327 insertions(+), 165 deletions(-) diff --git a/lib/tsc.js b/lib/tsc.js index e6dcc303eb9c7..eb9b776f9c9d8 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -18,7 +18,7 @@ and limitations under the License. // 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 @@ function createDynamicPriorityPollingWatchFile(host) { 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 @@ function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFi 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 @@ function createSystemWatchFunctions({ ); 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 @@ function createSystemWatchFunctions({ 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 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im } 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 @@ function createTypeChecker(host) { 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 @@ function createTypeChecker(host) { introducesError = true; return { introducesError, node }; } + const meaning = getMeaningOfEntityNameReference(node); const sym = resolveEntityName( leftmost, - -1 /* All */, + meaning, /*ignoreErrors*/ true, /*dontResolveAlias*/ @@ -50077,13 +50110,13 @@ function createTypeChecker(host) { 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 @@ function createTypeChecker(host) { } 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 --git a/lib/tsserver.js b/lib/tsserver.js index bc0e83fb4070a..6a1c0318396c8 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -2340,7 +2340,7 @@ module.exports = __toCommonJS(server_exports); // 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 @@ function createDynamicPriorityPollingWatchFile(host) { 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 @@ function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFi 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 @@ function createSystemWatchFunctions({ ); 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 @@ function createSystemWatchFunctions({ 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 @@ function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, im } 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 @@ function createTypeChecker(host) { 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 @@ function createTypeChecker(host) { introducesError = true; return { introducesError, node }; } + const meaning = getMeaningOfEntityNameReference(node); const sym = resolveEntityName( leftmost, - -1 /* All */, + meaning, /*ignoreErrors*/ true, /*dontResolveAlias*/ @@ -54821,13 +54854,13 @@ function createTypeChecker(host) { 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 @@ function createTypeChecker(host) { } 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 @@ function getContextualType(previousToken, position, sourceFile, checker) { 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 @@ function getArgumentOrParameterListInfo(node, position, sourceFile, checker) { 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 @@ function getArgumentOrParameterListAndIndex(node, sourceFile, checker) { 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 @@ function chooseBetterSymbol(s) { 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 @@ function getSpreadElementCount(node, checker) { } 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 @@ function createWatchFactoryHostUsingWatchEvents(service, canUseWatchEvents) { 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 createWatchFactoryHostUsingWatchEvents(service, canUseWatchEvents) { } }; } - 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 --git a/lib/typescript.d.ts b/lib/typescript.d.ts index a131733463740..ae8aa63c572e0 100644 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1510,12 +1510,13 @@ declare namespace ts { } 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 @@ declare namespace ts { readonly id: number; readonly path: string; readonly recursive: boolean; + readonly ignoreUpdate?: boolean; } type CloseFileWatcherEventName = "closeFileWatcher"; interface CloseFileWatcherEvent extends Event { diff --git a/lib/typescript.js b/lib/typescript.js index 7014c9a443241..018350e49dbc2 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -35,7 +35,7 @@ var ts = (() => { "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 @@ ${lanes.join("\n")} 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 @@ ${lanes.join("\n")} 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 @@ ${lanes.join("\n")} ); 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 @@ ${lanes.join("\n")} 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 @@ ${lanes.join("\n")} } 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 @@ ${lanes.join("\n")} 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 @@ ${lanes.join("\n")} introducesError = true; return { introducesError, node }; } + const meaning = getMeaningOfEntityNameReference(node); const sym = resolveEntityName( leftmost, - -1 /* All */, + meaning, /*ignoreErrors*/ true, /*dontResolveAlias*/ @@ -52576,13 +52609,13 @@ ${lanes.join("\n")} 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 @@ ${lanes.join("\n")} } 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 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} 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 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} 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 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} 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 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} 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 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} } 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 @@ ${options.prefix}` : "\n" : options.prefix 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 @@ ${options.prefix}` : "\n" : options.prefix } }; } - 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 --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index b629c7681e98a..9c8eb8b080270 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -54,7 +54,7 @@ var path = __toESM(require("path")); // 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 @@ function createDynamicPriorityPollingWatchFile(host) { 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 @@ function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFi 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 @@ function createSystemWatchFunctions({ ); 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 @@ function createSystemWatchFunctions({ return watchPresentFileSystemEntryWithFsWatchFile(); } try { - const presentWatcher = (!fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)( + const presentWatcher = (entryKind === 1 /* Directory */ || !fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)( fileOrDirectory, recursive, inodeWatching ? callbackChangingToMissingFileSystemEntry : callback diff --git a/package-lock.json b/package-lock.json index 0f3b38bbadadb..81ae0832de0a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "typescript", - "version": "5.4.3", + "version": "5.4.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "typescript", - "version": "5.4.3", + "version": "5.4.4", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index f6b9ceca6dc33..96a0b9aefca81 100644 --- a/package.json +++ b/package.json @@ -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": [ diff --git a/src/compiler/corePublic.ts b/src/compiler/corePublic.ts index 6684032a0969a..cea0a82974f1c 100644 --- a/src/compiler/corePublic.ts +++ b/src/compiler/corePublic.ts @@ -4,7 +4,7 @@ export const versionMajorMinor = "5.4"; // The following is baselined as a literal template type without intervention /** The version of the TypeScript compiler release */ // eslint-disable-next-line @typescript-eslint/no-inferrable-types -export const version = "5.4.3" as string; +export const version = "5.4.4" as string; /** * Type of objects whose values are all of the same type.