Skip to content

Commit 34b9d09

Browse files
committed
Update project on PackageInstalledResponse
As with `SetTypings`, new typings have been installed so the project should be updated and the client should be notified (via event). Changed PackageInstalledResponse from "event" to "action" for the sake of explicitness. Fixes microsoft#20084.
1 parent 6513bed commit 34b9d09

File tree

7 files changed

+22
-17
lines changed

7 files changed

+22
-17
lines changed

src/server/editorServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ namespace ts.server {
534534
}
535535
}
536536

537-
updateTypingsForProject(response: SetTypings | InvalidateCachedTypings): void {
537+
updateTypingsForProject(response: SetTypings | InvalidateCachedTypings | PackageInstalledResponse): void {
538538
const project = this.findProject(response.projectName);
539539
if (!project) {
540540
return;

src/server/project.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ namespace ts.server {
251251
return this.typingsCache.isKnownTypesPackageName(name);
252252
}
253253
installPackage(options: InstallPackageOptions): Promise<ApplyCodeActionCommandResult> {
254-
return this.typingsCache.installPackage({ ...options, projectRootPath: this.toPath(this.currentDirectory) });
254+
return this.typingsCache.installPackage({ ...options, projectName: this.projectName, projectRootPath: this.toPath(this.currentDirectory) });
255255
}
256256
private get typingsCache(): TypingsCache {
257257
return this.projectService.typingsCache;

src/server/server.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ namespace ts.server {
297297
return false;
298298
}
299299

300-
installPackage(options: InstallPackageOptionsWithProjectRootPath): Promise<ApplyCodeActionCommandResult> {
300+
installPackage(options: InstallPackageOptionsWithProject): Promise<ApplyCodeActionCommandResult> {
301301
const rq: InstallPackageRequest = { kind: "installPackage", ...options };
302302
this.send(rq);
303303
Debug.assert(this.packageInstalledPromise === undefined);
@@ -416,7 +416,7 @@ namespace ts.server {
416416
case EventTypesRegistry:
417417
this.typesRegistryCache = ts.createMapFromTemplate(response.typesRegistry);
418418
break;
419-
case EventPackageInstalled: {
419+
case ActionPackageInstalled: {
420420
const { success, message } = response;
421421
if (success) {
422422
this.packageInstalledPromise.resolve({ successMessage: message });
@@ -425,6 +425,11 @@ namespace ts.server {
425425
this.packageInstalledPromise.reject(message);
426426
}
427427
this.packageInstalledPromise = undefined;
428+
429+
this.projectService.updateTypingsForProject(response);
430+
431+
// The behavior is the same as for setTypings, so send the same event.
432+
this.event(response, "setTypings");
428433
break;
429434
}
430435
case EventInitializationFailed:

src/server/shared.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace ts.server {
44
export const ActionSet: ActionSet = "action::set";
55
export const ActionInvalidate: ActionInvalidate = "action::invalidate";
6+
export const ActionPackageInstalled: ActionPackageInstalled = "action::packageInstalled";
67
export const EventTypesRegistry: EventTypesRegistry = "event::typesRegistry";
7-
export const EventPackageInstalled: EventPackageInstalled = "event::packageInstalled";
88
export const EventBeginInstallTypes: EventBeginInstallTypes = "event::beginInstallTypes";
99
export const EventEndInstallTypes: EventEndInstallTypes = "event::endInstallTypes";
1010
export const EventInitializationFailed: EventInitializationFailed = "event::initializationFailed";

src/server/types.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ declare namespace ts.server {
5353
readonly kind: "typesRegistry";
5454
}
5555

56-
export interface InstallPackageRequest {
56+
export interface InstallPackageRequest extends TypingInstallerRequestWithProjectName {
5757
readonly kind: "installPackage";
5858
readonly fileName: Path;
5959
readonly packageName: string;
@@ -62,14 +62,14 @@ declare namespace ts.server {
6262

6363
export type ActionSet = "action::set";
6464
export type ActionInvalidate = "action::invalidate";
65+
export type ActionPackageInstalled = "action::packageInstalled";
6566
export type EventTypesRegistry = "event::typesRegistry";
66-
export type EventPackageInstalled = "event::packageInstalled";
6767
export type EventBeginInstallTypes = "event::beginInstallTypes";
6868
export type EventEndInstallTypes = "event::endInstallTypes";
6969
export type EventInitializationFailed = "event::initializationFailed";
7070

7171
export interface TypingInstallerResponse {
72-
readonly kind: ActionSet | ActionInvalidate | EventTypesRegistry | EventPackageInstalled | EventBeginInstallTypes | EventEndInstallTypes | EventInitializationFailed;
72+
readonly kind: ActionSet | ActionInvalidate | EventTypesRegistry | ActionPackageInstalled | EventBeginInstallTypes | EventEndInstallTypes | EventInitializationFailed;
7373
}
7474
/* @internal */
7575
export type TypingInstallerResponseUnion = SetTypings | InvalidateCachedTypings | TypesRegistryResponse | PackageInstalledResponse | InstallTypes | InitializationFailedResponse;
@@ -80,9 +80,8 @@ declare namespace ts.server {
8080
readonly typesRegistry: MapLike<void>;
8181
}
8282

83-
/* @internal */
84-
export interface PackageInstalledResponse extends TypingInstallerResponse {
85-
readonly kind: EventPackageInstalled;
83+
export interface PackageInstalledResponse extends ProjectResponse {
84+
readonly kind: ActionPackageInstalled;
8685
readonly success: boolean;
8786
readonly message: string;
8887
}

src/server/typingsCache.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/// <reference path="project.ts"/>
22

33
namespace ts.server {
4-
export interface InstallPackageOptionsWithProjectRootPath extends InstallPackageOptions {
4+
export interface InstallPackageOptionsWithProject extends InstallPackageOptions {
5+
projectName: string;
56
projectRootPath: Path;
67
}
78

89
export interface ITypingsInstaller {
910
isKnownTypesPackageName(name: string): boolean;
10-
installPackage(options: InstallPackageOptionsWithProjectRootPath): Promise<ApplyCodeActionCommandResult>;
11+
installPackage(options: InstallPackageOptionsWithProject): Promise<ApplyCodeActionCommandResult>;
1112
enqueueInstallTypingsRequest(p: Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray<string>): void;
1213
attach(projectService: ProjectService): void;
1314
onProjectClosed(p: Project): void;
@@ -90,7 +91,7 @@ namespace ts.server {
9091
return this.installer.isKnownTypesPackageName(name);
9192
}
9293

93-
installPackage(options: InstallPackageOptionsWithProjectRootPath): Promise<ApplyCodeActionCommandResult> {
94+
installPackage(options: InstallPackageOptionsWithProject): Promise<ApplyCodeActionCommandResult> {
9495
return this.installer.installPackage(options);
9596
}
9697

src/server/typingsInstaller/nodeTypingsInstaller.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,17 @@ namespace ts.server.typingsInstaller {
150150
break;
151151
}
152152
case "installPackage": {
153-
const { fileName, packageName, projectRootPath } = req;
153+
const { fileName, packageName, projectName, projectRootPath } = req;
154154
const cwd = getDirectoryOfPackageJson(fileName, this.installTypingHost) || projectRootPath;
155155
if (cwd) {
156156
this.installWorker(-1, [packageName], cwd, success => {
157157
const message = success ? `Package ${packageName} installed.` : `There was an error installing ${packageName}.`;
158-
const response: PackageInstalledResponse = { kind: EventPackageInstalled, success, message };
158+
const response: PackageInstalledResponse = { kind: ActionPackageInstalled, projectName, success, message };
159159
this.sendResponse(response);
160160
});
161161
}
162162
else {
163-
const response: PackageInstalledResponse = { kind: EventPackageInstalled, success: false, message: "Could not determine a project root path." };
163+
const response: PackageInstalledResponse = { kind: ActionPackageInstalled, projectName, success: false, message: "Could not determine a project root path." };
164164
this.sendResponse(response);
165165
}
166166
break;

0 commit comments

Comments
 (0)