vscode-apollo 1.19.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +14 -0
  3. package/.circleci/config.yml +91 -0
  4. package/.eslintrc.js +10 -0
  5. package/.git-blame-ignore-revs +2 -0
  6. package/.gitattributes +1 -0
  7. package/.github/workflows/release.yml +95 -0
  8. package/.gitleaks.toml +26 -0
  9. package/.nvmrc +1 -0
  10. package/.prettierrc +5 -0
  11. package/.vscode/launch.json +66 -0
  12. package/.vscode/settings.json +16 -0
  13. package/.vscode/tasks.json +60 -0
  14. package/.vscodeignore +28 -1
  15. package/CHANGELOG.md +250 -1
  16. package/CODEOWNERS +4 -0
  17. package/LICENSE +2 -2
  18. package/README.md +104 -55
  19. package/codegen.yml +12 -0
  20. package/graphql.configuration.json +5 -1
  21. package/images/IconRun.svg +8 -0
  22. package/images/marketplace/apollo-wordmark.png +0 -0
  23. package/jest.config.ts +21 -0
  24. package/jest.e2e.config.js +17 -0
  25. package/package.json +102 -23
  26. package/renovate.json +30 -0
  27. package/sampleWorkspace/clientSchema/apollo.config.cjs +10 -0
  28. package/sampleWorkspace/clientSchema/src/clientSchema.js +16 -0
  29. package/sampleWorkspace/clientSchema/src/test.js +18 -0
  30. package/sampleWorkspace/fixtures/starwarsSchema.graphql +299 -0
  31. package/sampleWorkspace/httpSchema/apollo.config.ts +8 -0
  32. package/sampleWorkspace/httpSchema/src/test.js +9 -0
  33. package/sampleWorkspace/localSchema/apollo.config.js +8 -0
  34. package/sampleWorkspace/localSchema/src/test.js +8 -0
  35. package/sampleWorkspace/localSchemaArray/apollo.config.js +12 -0
  36. package/sampleWorkspace/localSchemaArray/planets.graphql +20 -0
  37. package/sampleWorkspace/localSchemaArray/src/test.js +12 -0
  38. package/sampleWorkspace/sampleWorkspace.code-workspace +20 -0
  39. package/sampleWorkspace/spotifyGraph/apollo.config.mjs +5 -0
  40. package/sampleWorkspace/spotifyGraph/src/test.js +11 -0
  41. package/src/__e2e__/mockServer.js +117 -0
  42. package/src/__e2e__/mocks.js +13094 -0
  43. package/src/__e2e__/run.js +23 -0
  44. package/src/__e2e__/runTests.js +44 -0
  45. package/src/__e2e__/setup.js +1 -0
  46. package/src/__e2e__/vscode-environment.js +16 -0
  47. package/src/__e2e__/vscode.js +1 -0
  48. package/src/__mocks__/fs.js +3 -0
  49. package/src/__tests__/statusBar.test.ts +8 -7
  50. package/src/build.js +57 -0
  51. package/src/debug.ts +2 -5
  52. package/src/env/index.ts +1 -0
  53. package/src/env/typescript-utility-types.ts +2 -0
  54. package/src/extension.ts +265 -170
  55. package/src/language-server/__e2e__/clientSchema.e2e.ts +147 -0
  56. package/src/language-server/__e2e__/httpSchema.e2e.ts +21 -0
  57. package/src/language-server/__e2e__/localSchema.e2e.ts +25 -0
  58. package/src/language-server/__e2e__/localSchemaArray.e2e.ts +31 -0
  59. package/src/language-server/__e2e__/studioGraph.e2e.ts +65 -0
  60. package/src/language-server/__e2e__/utils.ts +151 -0
  61. package/src/language-server/__tests__/diagnostics.test.ts +86 -0
  62. package/src/language-server/__tests__/document.test.ts +187 -0
  63. package/src/language-server/__tests__/fileSet.test.ts +46 -0
  64. package/src/language-server/__tests__/fixtures/starwarsSchema.ts +1917 -0
  65. package/src/language-server/config/__tests__/config.ts +54 -0
  66. package/src/language-server/config/__tests__/loadConfig.ts +384 -0
  67. package/src/language-server/config/__tests__/utils.ts +99 -0
  68. package/src/language-server/config/config.ts +284 -0
  69. package/src/language-server/config/index.ts +3 -0
  70. package/src/language-server/config/loadConfig.ts +101 -0
  71. package/src/language-server/config/utils.ts +45 -0
  72. package/src/language-server/diagnostics.ts +118 -0
  73. package/src/language-server/document.ts +277 -0
  74. package/src/language-server/engine/index.ts +123 -0
  75. package/src/language-server/engine/operations/frontendUrlRoot.ts +15 -0
  76. package/src/language-server/engine/operations/schemaTagsAndFieldStats.ts +32 -0
  77. package/src/language-server/errors/__tests__/NoMissingClientDirectives.test.ts +225 -0
  78. package/src/language-server/errors/logger.ts +58 -0
  79. package/src/language-server/errors/validation.ts +274 -0
  80. package/src/language-server/fileSet.ts +63 -0
  81. package/src/language-server/format.ts +48 -0
  82. package/src/language-server/graphqlTypes.ts +16741 -0
  83. package/src/language-server/index.ts +28 -0
  84. package/src/language-server/languageProvider.ts +795 -0
  85. package/src/language-server/loadingHandler.ts +47 -0
  86. package/src/language-server/project/base.ts +406 -0
  87. package/src/language-server/project/client.ts +568 -0
  88. package/src/language-server/project/defaultClientSchema.ts +70 -0
  89. package/src/language-server/providers/schema/__tests__/file.ts +191 -0
  90. package/src/language-server/providers/schema/base.ts +15 -0
  91. package/src/language-server/providers/schema/endpoint.ts +138 -0
  92. package/src/language-server/providers/schema/engine.ts +204 -0
  93. package/src/language-server/providers/schema/file.ts +176 -0
  94. package/src/language-server/providers/schema/index.ts +59 -0
  95. package/src/language-server/server.ts +274 -0
  96. package/src/language-server/typings/graphql.d.ts +27 -0
  97. package/src/language-server/utilities/__tests__/graphql.test.ts +399 -0
  98. package/src/language-server/utilities/__tests__/uri.ts +55 -0
  99. package/src/language-server/utilities/debouncer.ts +8 -0
  100. package/src/language-server/utilities/debug.ts +90 -0
  101. package/src/language-server/utilities/graphql.ts +433 -0
  102. package/src/language-server/utilities/index.ts +3 -0
  103. package/src/language-server/utilities/source.ts +182 -0
  104. package/src/language-server/utilities/uri.ts +19 -0
  105. package/src/language-server/workspace.ts +254 -0
  106. package/src/languageServerClient.ts +22 -15
  107. package/src/messages.ts +75 -0
  108. package/src/statusBar.ts +5 -5
  109. package/src/tools/__tests__/buildServiceDefinition.test.ts +491 -0
  110. package/src/tools/__tests__/snapshotSerializers/astSerializer.ts +19 -0
  111. package/src/tools/__tests__/snapshotSerializers/graphQLTypeSerializer.ts +14 -0
  112. package/src/tools/buildServiceDefinition.ts +241 -0
  113. package/src/tools/index.ts +6 -0
  114. package/src/tools/schema/index.ts +2 -0
  115. package/src/tools/schema/resolveObject.ts +18 -0
  116. package/src/tools/schema/resolverMap.ts +23 -0
  117. package/src/tools/utilities/graphql.ts +22 -0
  118. package/src/tools/utilities/index.ts +3 -0
  119. package/src/tools/utilities/invariant.ts +5 -0
  120. package/src/tools/utilities/predicates.ts +5 -0
  121. package/src/utils.ts +7 -21
  122. package/syntaxes/graphql.dart.json +2 -4
  123. package/syntaxes/graphql.ex.json +1 -4
  124. package/syntaxes/graphql.js.json +3 -3
  125. package/syntaxes/graphql.json +13 -9
  126. package/syntaxes/graphql.lua.json +51 -0
  127. package/syntaxes/graphql.rb.json +1 -1
  128. package/tsconfig.build.json +11 -0
  129. package/tsconfig.json +22 -7
  130. package/create-server-symlink.js +0 -8
  131. package/lib/debug.d.ts +0 -11
  132. package/lib/debug.d.ts.map +0 -1
  133. package/lib/debug.js +0 -48
  134. package/lib/debug.js.map +0 -1
  135. package/lib/extension.d.ts +0 -4
  136. package/lib/extension.d.ts.map +0 -1
  137. package/lib/extension.js +0 -187
  138. package/lib/extension.js.map +0 -1
  139. package/lib/languageServerClient.d.ts +0 -4
  140. package/lib/languageServerClient.d.ts.map +0 -1
  141. package/lib/languageServerClient.js +0 -57
  142. package/lib/languageServerClient.js.map +0 -1
  143. package/lib/statusBar.d.ts +0 -24
  144. package/lib/statusBar.d.ts.map +0 -1
  145. package/lib/statusBar.js +0 -46
  146. package/lib/statusBar.js.map +0 -1
  147. package/lib/testRunner/index.d.ts +0 -3
  148. package/lib/testRunner/index.d.ts.map +0 -1
  149. package/lib/testRunner/index.js +0 -49
  150. package/lib/testRunner/index.js.map +0 -1
  151. package/lib/testRunner/jest-config.d.ts +0 -14
  152. package/lib/testRunner/jest-config.d.ts.map +0 -1
  153. package/lib/testRunner/jest-config.js +0 -18
  154. package/lib/testRunner/jest-config.js.map +0 -1
  155. package/lib/testRunner/jest-vscode-environment.d.ts +0 -2
  156. package/lib/testRunner/jest-vscode-environment.d.ts.map +0 -1
  157. package/lib/testRunner/jest-vscode-environment.js +0 -19
  158. package/lib/testRunner/jest-vscode-environment.js.map +0 -1
  159. package/lib/testRunner/jest-vscode-framework-setup.d.ts +0 -1
  160. package/lib/testRunner/jest-vscode-framework-setup.d.ts.map +0 -1
  161. package/lib/testRunner/jest-vscode-framework-setup.js +0 -3
  162. package/lib/testRunner/jest-vscode-framework-setup.js.map +0 -1
  163. package/lib/testRunner/vscode-test-script.d.ts +0 -2
  164. package/lib/testRunner/vscode-test-script.d.ts.map +0 -1
  165. package/lib/testRunner/vscode-test-script.js +0 -23
  166. package/lib/testRunner/vscode-test-script.js.map +0 -1
  167. package/lib/utils.d.ts +0 -18
  168. package/lib/utils.d.ts.map +0 -1
  169. package/lib/utils.js +0 -52
  170. package/lib/utils.js.map +0 -1
  171. package/src/testRunner/README.md +0 -23
  172. package/src/testRunner/index.ts +0 -72
  173. package/src/testRunner/jest-config.ts +0 -17
  174. package/src/testRunner/jest-vscode-environment.ts +0 -25
  175. package/src/testRunner/jest-vscode-framework-setup.ts +0 -10
  176. package/src/testRunner/jest.d.ts +0 -37
  177. package/src/testRunner/vscode-test-script.ts +0 -38
  178. package/tsconfig.test.json +0 -4
  179. package/tsconfig.tsbuildinfo +0 -2486
@@ -0,0 +1,254 @@
1
+ import {
2
+ WorkspaceFolder,
3
+ NotificationHandler,
4
+ PublishDiagnosticsParams,
5
+ } from "vscode-languageserver/node";
6
+ import { QuickPickItem } from "vscode";
7
+ import { GraphQLProject, DocumentUri } from "./project/base";
8
+ import { dirname } from "path";
9
+ import { globSync } from "glob";
10
+ import { loadConfig, ApolloConfig, isClientConfig } from "./config";
11
+ import { LanguageServerLoadingHandler } from "./loadingHandler";
12
+ import { ServiceID, SchemaTag, ClientIdentity } from "./engine";
13
+ import { GraphQLClientProject, isClientProject } from "./project/client";
14
+ import { URI } from "vscode-uri";
15
+ import { Debug } from "./utilities";
16
+ import type { EngineDecoration } from "../messages";
17
+ import { equal } from "@wry/equality";
18
+
19
+ export interface WorkspaceConfig {
20
+ clientIdentity: ClientIdentity;
21
+ }
22
+
23
+ export class GraphQLWorkspace {
24
+ private _onDiagnostics?: NotificationHandler<PublishDiagnosticsParams>;
25
+ private _onDecorations?: NotificationHandler<EngineDecoration[]>;
26
+ private _onSchemaTags?: NotificationHandler<[ServiceID, SchemaTag[]]>;
27
+ private _onConfigFilesFound?: NotificationHandler<(ApolloConfig | Error)[]>;
28
+ private _projectForFileCache: Map<string, GraphQLProject> = new Map();
29
+
30
+ private projectsByFolderUri: Map<string, GraphQLProject[]> = new Map();
31
+
32
+ constructor(
33
+ private LanguageServerLoadingHandler: LanguageServerLoadingHandler,
34
+ private config: WorkspaceConfig,
35
+ ) {}
36
+
37
+ onDiagnostics(handler: NotificationHandler<PublishDiagnosticsParams>) {
38
+ this._onDiagnostics = handler;
39
+ }
40
+
41
+ onDecorations(handler: NotificationHandler<EngineDecoration[]>) {
42
+ this._onDecorations = handler;
43
+ }
44
+
45
+ onSchemaTags(handler: NotificationHandler<[ServiceID, SchemaTag[]]>) {
46
+ this._onSchemaTags = handler;
47
+ }
48
+
49
+ onConfigFilesFound(handler: NotificationHandler<(ApolloConfig | Error)[]>) {
50
+ this._onConfigFilesFound = handler;
51
+ }
52
+
53
+ private createProject({
54
+ config,
55
+ folder,
56
+ }: {
57
+ config: ApolloConfig;
58
+ folder: WorkspaceFolder;
59
+ }) {
60
+ const { clientIdentity } = this.config;
61
+ const project = isClientConfig(config)
62
+ ? new GraphQLClientProject({
63
+ config,
64
+ loadingHandler: this.LanguageServerLoadingHandler,
65
+ configFolderURI: URI.parse(folder.uri),
66
+ clientIdentity,
67
+ })
68
+ : (() => {
69
+ throw new Error("TODO rover project");
70
+ })();
71
+
72
+ project.onDiagnostics((params) => {
73
+ this._onDiagnostics && this._onDiagnostics(params);
74
+ });
75
+
76
+ if (isClientProject(project)) {
77
+ project.onDecorations((params) => {
78
+ this._onDecorations && this._onDecorations(params);
79
+ });
80
+
81
+ project.onSchemaTags((tags) => {
82
+ this._onSchemaTags && this._onSchemaTags(tags);
83
+ });
84
+ }
85
+
86
+ // after a project has loaded, we do an initial validation to surface errors
87
+ // on the start of the language server. Instead of doing this in the
88
+ // base class which is used by codegen and other tools
89
+ project.whenReady.then(() => project.validate());
90
+
91
+ return project;
92
+ }
93
+
94
+ async addProjectsInFolder(folder: WorkspaceFolder) {
95
+ // load all possible workspace projects (contains possible config)
96
+ // see if we can move this detection to cosmiconfig
97
+ /*
98
+
99
+ - monorepo (GraphQLWorkspace) as WorkspaceFolder
100
+ -- engine-api (GraphQLProject)
101
+ -- engine-frontend (GraphQLProject)
102
+
103
+ OR
104
+
105
+ - vscode workspace (fullstack)
106
+ -- ~/:user/client (GraphQLProject) as WorkspaceFolder
107
+ -- ~/:user/server (GraphQLProject) as WorkspaceFolder
108
+
109
+ */
110
+ const apolloConfigFiles: string[] = globSync(
111
+ "**/apollo.config.@(js|ts|cjs|mjs)",
112
+ {
113
+ cwd: URI.parse(folder.uri).fsPath,
114
+ absolute: true,
115
+ ignore: "**/node_modules/**",
116
+ },
117
+ );
118
+
119
+ // only have unique possible folders
120
+ const apolloConfigFolders = new Set<string>(apolloConfigFiles.map(dirname));
121
+
122
+ // go from possible folders to known array of configs
123
+ let foundConfigs: (ApolloConfig | Error)[] = [];
124
+
125
+ const projectConfigs = Array.from(apolloConfigFolders).map((configFolder) =>
126
+ loadConfig({ configPath: configFolder })
127
+ .then((config) => {
128
+ if (config) {
129
+ foundConfigs.push(config);
130
+ const projectForConfig = this.createProject({ config, folder });
131
+
132
+ const existingProjects =
133
+ this.projectsByFolderUri.get(folder.uri) || [];
134
+
135
+ this.projectsByFolderUri.set(folder.uri, [
136
+ ...existingProjects,
137
+ projectForConfig,
138
+ ]);
139
+ } else {
140
+ Debug.error(
141
+ `Workspace failed to load config from: ${configFolder}/`,
142
+ );
143
+ }
144
+ })
145
+ .catch((error) => foundConfigs.push(error)),
146
+ );
147
+
148
+ await Promise.all(projectConfigs);
149
+
150
+ if (this._onConfigFilesFound) {
151
+ this._onConfigFilesFound(foundConfigs);
152
+ }
153
+ }
154
+
155
+ reloadService() {
156
+ this._projectForFileCache.clear();
157
+ this.projectsByFolderUri.forEach((projects, uri) => {
158
+ this.projectsByFolderUri.set(
159
+ uri,
160
+ projects.map((project) => {
161
+ project.clearAllDiagnostics();
162
+ return this.createProject({
163
+ config: project.config,
164
+ folder: { uri } as WorkspaceFolder,
165
+ });
166
+ }),
167
+ );
168
+ });
169
+ }
170
+
171
+ async reloadProjectForConfig(configUri: DocumentUri) {
172
+ const configPath = dirname(URI.parse(configUri).fsPath);
173
+ let config: ApolloConfig | null;
174
+ let error;
175
+ try {
176
+ config = await loadConfig({ configPath });
177
+ } catch (e: any) {
178
+ config = null;
179
+ error = e;
180
+ }
181
+
182
+ const project = this.projectForFile(configUri);
183
+
184
+ if (this._onConfigFilesFound) {
185
+ this._onConfigFilesFound([config || error]);
186
+ }
187
+ // If project exists, update the config
188
+ if (project && config) {
189
+ if (equal(project.config.rawConfig, config.rawConfig)) {
190
+ return;
191
+ }
192
+ await Promise.all(project.updateConfig(config));
193
+ this.reloadService();
194
+ }
195
+
196
+ // If project doesn't exist (new config file), create the project and add to workspace
197
+ if (!project && config) {
198
+ const folderUri = URI.file(configPath).toString();
199
+
200
+ const newProject = this.createProject({
201
+ config,
202
+ folder: { uri: folderUri } as WorkspaceFolder,
203
+ });
204
+
205
+ const existingProjects = this.projectsByFolderUri.get(folderUri) || [];
206
+ this.projectsByFolderUri.set(folderUri, [
207
+ ...existingProjects,
208
+ newProject,
209
+ ]);
210
+ this.reloadService();
211
+ }
212
+ }
213
+
214
+ updateSchemaTag(selection: QuickPickItem) {
215
+ const serviceID = selection.detail;
216
+ if (!serviceID) return;
217
+
218
+ this.projectsByFolderUri.forEach((projects) => {
219
+ projects.forEach((project) => {
220
+ if (isClientProject(project) && project.serviceID === serviceID) {
221
+ project.updateSchemaTag(selection.label);
222
+ }
223
+ });
224
+ });
225
+ }
226
+
227
+ removeProjectsInFolder(folder: WorkspaceFolder) {
228
+ const projects = this.projectsByFolderUri.get(folder.uri);
229
+ if (projects) {
230
+ projects.forEach((project) => project.clearAllDiagnostics());
231
+ this.projectsByFolderUri.delete(folder.uri);
232
+ }
233
+ }
234
+
235
+ get projects(): GraphQLProject[] {
236
+ return Array.from(this.projectsByFolderUri.values()).flat();
237
+ }
238
+
239
+ projectForFile(uri: DocumentUri): GraphQLProject | undefined {
240
+ const cachedResult = this._projectForFileCache.get(uri);
241
+ if (cachedResult) {
242
+ return cachedResult;
243
+ }
244
+
245
+ for (const projects of this.projectsByFolderUri.values()) {
246
+ const project = projects.find((project) => project.includesFile(uri));
247
+ if (project) {
248
+ this._projectForFileCache.set(uri, project);
249
+ return project;
250
+ }
251
+ }
252
+ return undefined;
253
+ }
254
+ }
@@ -2,26 +2,27 @@ import {
2
2
  ServerOptions,
3
3
  TransportKind,
4
4
  LanguageClientOptions,
5
- LanguageClient
6
- } from "vscode-languageclient";
5
+ LanguageClient,
6
+ RevealOutputChannelOn,
7
+ } from "vscode-languageclient/node";
7
8
  import { workspace, OutputChannel } from "vscode";
8
9
 
9
10
  const { version, referenceID } = require("../package.json");
10
11
 
11
12
  export function getLanguageServerClient(
12
13
  serverModule: string,
13
- outputChannel: OutputChannel
14
+ outputChannel: OutputChannel,
14
15
  ) {
15
16
  const env = {
16
17
  APOLLO_CLIENT_NAME: "Apollo VS Code",
17
18
  APOLLO_CLIENT_VERSION: version,
18
19
  APOLLO_CLIENT_REFERENCE_ID: referenceID,
19
- NODE_TLS_REJECT_UNAUTHORIZED: 0
20
+ NODE_TLS_REJECT_UNAUTHORIZED: 0,
20
21
  };
21
22
 
22
23
  const debugOptions = {
23
24
  execArgv: ["--nolazy", "--inspect=6009"],
24
- env
25
+ env,
25
26
  };
26
27
 
27
28
  const serverOptions: ServerOptions = {
@@ -29,14 +30,14 @@ export function getLanguageServerClient(
29
30
  module: serverModule,
30
31
  transport: TransportKind.ipc,
31
32
  options: {
32
- env
33
- }
33
+ env,
34
+ },
34
35
  },
35
36
  debug: {
36
37
  module: serverModule,
37
38
  transport: TransportKind.ipc,
38
- options: debugOptions
39
- }
39
+ options: debugOptions,
40
+ },
40
41
  };
41
42
 
42
43
  const clientOptions: LanguageClientOptions = {
@@ -47,27 +48,33 @@ export function getLanguageServerClient(
47
48
  "javascriptreact",
48
49
  "typescriptreact",
49
50
  "vue",
51
+ "svelte",
50
52
  "python",
51
53
  "ruby",
52
54
  "dart",
53
55
  "reason",
54
- "elixir"
56
+ "elixir",
55
57
  ],
56
58
  synchronize: {
57
59
  fileEvents: [
58
60
  workspace.createFileSystemWatcher("**/.env?(.local)"),
59
61
  workspace.createFileSystemWatcher(
60
- "**/*.{graphql,js,ts,jsx,tsx,vue,py,rb,dart,re,ex,exs}"
61
- )
62
- ]
62
+ "**/*.{graphql,js,ts,cjs,mjs,jsx,tsx,vue,svelte,py,rb,dart,re,ex,exs}",
63
+ ),
64
+ ],
63
65
  },
64
- outputChannel
66
+ outputChannel,
67
+ revealOutputChannelOn: workspace
68
+ .getConfiguration("apollographql")
69
+ .get("debug.revealOutputOnLanguageServerError")
70
+ ? RevealOutputChannelOn.Error
71
+ : RevealOutputChannelOn.Never,
65
72
  };
66
73
 
67
74
  return new LanguageClient(
68
75
  "apollographql",
69
76
  "Apollo GraphQL",
70
77
  serverOptions,
71
- clientOptions
78
+ clientOptions,
72
79
  );
73
80
  }
@@ -0,0 +1,75 @@
1
+ import { QuickPickItem } from "vscode";
2
+ import { NotificationType, RequestType } from "vscode-jsonrpc";
3
+ import { Range } from "vscode-languageclient/node";
4
+
5
+ export interface TypeStats {
6
+ service?: number;
7
+ client?: number;
8
+ total?: number;
9
+ }
10
+
11
+ export type ProjectStats =
12
+ | {
13
+ type: string;
14
+ loaded: true;
15
+ serviceId?: string;
16
+ types?: TypeStats;
17
+ tag?: string;
18
+ lastFetch?: number;
19
+ }
20
+ | { loaded: false };
21
+
22
+ export type EngineDecoration =
23
+ | {
24
+ type: "text";
25
+ document: string;
26
+ message: string;
27
+ range: Range;
28
+ }
29
+ | {
30
+ type: "runGlyph";
31
+ document: string;
32
+ range: Range;
33
+ hoverMessage: string;
34
+ };
35
+
36
+ export const LanguageServerRequests = {
37
+ FileStats: new RequestType<{ uri: string }, ProjectStats, unknown>(
38
+ "apollographql/fileStats",
39
+ ),
40
+ };
41
+
42
+ /**
43
+ * Notifications sent to the language server
44
+ */
45
+ export const LanguageServerCommands = {
46
+ GetStats: new NotificationType<{ uri: string }>("apollographql/getStats"),
47
+ ReloadService: new NotificationType<void>("apollographql/reloadService"),
48
+ TagSelected: new NotificationType<QuickPickItem>("apollographql/tagSelected"),
49
+ };
50
+
51
+ /**
52
+ * Notifications sent from the language server
53
+ */
54
+ export const LanguageServerNotifications = {
55
+ StatsLoaded: new NotificationType<ProjectStats>("apollographql/statsLoaded"),
56
+ ConfigFilesFound: new NotificationType<string>(
57
+ "apollographql/configFilesFound",
58
+ ),
59
+ TagsLoaded: new NotificationType<string>("apollographql/tagsLoaded"),
60
+ LoadingComplete: new NotificationType<number>(
61
+ "apollographql/loadingComplete",
62
+ ),
63
+ Loading: new NotificationType<{
64
+ message: string;
65
+ token: number;
66
+ }>("apollographql/loading"),
67
+ EngineDecorations: new NotificationType<{
68
+ decorations: EngineDecoration[];
69
+ }>("apollographql/engineDecorations"),
70
+ ServerDebugMessage: new NotificationType<{
71
+ type: "info" | "warning" | "error" | "errorTelemetry";
72
+ message: string;
73
+ stack?: string;
74
+ }>("serverDebugMessage"),
75
+ };
package/src/statusBar.ts CHANGED
@@ -24,7 +24,7 @@ export default class ApolloStatusBar {
24
24
  protected changeState({
25
25
  hasActiveTextEditor,
26
26
  text,
27
- tooltip
27
+ tooltip,
28
28
  }: StateChangeInput) {
29
29
  if (!hasActiveTextEditor) {
30
30
  this.statusBarItem.hide();
@@ -39,25 +39,25 @@ export default class ApolloStatusBar {
39
39
  public showLoadingState({ hasActiveTextEditor }: LoadingInput) {
40
40
  this.changeState({
41
41
  hasActiveTextEditor,
42
- text: ApolloStatusBar.loadingStateText
42
+ text: ApolloStatusBar.loadingStateText,
43
43
  });
44
44
  }
45
45
 
46
46
  public showLoadedState({ hasActiveTextEditor }: LoadingInput) {
47
47
  this.changeState({
48
48
  hasActiveTextEditor,
49
- text: ApolloStatusBar.loadedStateText
49
+ text: ApolloStatusBar.loadedStateText,
50
50
  });
51
51
  }
52
52
 
53
53
  public showWarningState({
54
54
  hasActiveTextEditor,
55
- tooltip
55
+ tooltip,
56
56
  }: LoadingInput & { tooltip: string }) {
57
57
  this.changeState({
58
58
  hasActiveTextEditor,
59
59
  text: ApolloStatusBar.warningText,
60
- tooltip
60
+ tooltip,
61
61
  });
62
62
  }
63
63