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,241 @@
1
+ import {
2
+ GraphQLSchema,
3
+ DocumentNode,
4
+ TypeDefinitionNode,
5
+ DirectiveDefinitionNode,
6
+ isTypeDefinitionNode,
7
+ TypeExtensionNode,
8
+ isTypeExtensionNode,
9
+ GraphQLError,
10
+ buildASTSchema,
11
+ Kind,
12
+ extendSchema,
13
+ isObjectType,
14
+ SchemaDefinitionNode,
15
+ OperationTypeNode,
16
+ SchemaExtensionNode,
17
+ } from "graphql";
18
+ import { isNode, isDocumentNode } from "./utilities/graphql";
19
+ import { GraphQLResolverMap } from "./schema/resolverMap";
20
+ import { isNotNullOrUndefined } from "./utilities/predicates";
21
+
22
+ export interface GraphQLSchemaModule {
23
+ typeDefs: DocumentNode;
24
+ resolvers?: GraphQLResolverMap<any>;
25
+ }
26
+
27
+ interface GraphQLServiceDefinition {
28
+ schema?: GraphQLSchema;
29
+ errors?: GraphQLError[];
30
+ }
31
+
32
+ export function buildServiceDefinition(
33
+ modules: GraphQLSchemaModule[],
34
+ ): GraphQLServiceDefinition {
35
+ const errors: GraphQLError[] = [];
36
+
37
+ const typeDefinitionsMap: {
38
+ [name: string]: TypeDefinitionNode[];
39
+ } = Object.create(null);
40
+
41
+ const typeExtensionsMap: {
42
+ [name: string]: TypeExtensionNode[];
43
+ } = Object.create(null);
44
+
45
+ const directivesMap: {
46
+ [name: string]: DirectiveDefinitionNode[];
47
+ } = Object.create(null);
48
+
49
+ const schemaDefinitions: SchemaDefinitionNode[] = [];
50
+ const schemaExtensions: SchemaExtensionNode[] = [];
51
+
52
+ for (let module of modules) {
53
+ if (isNode(module) && isDocumentNode(module)) {
54
+ module = { typeDefs: module };
55
+ }
56
+ for (const definition of module.typeDefs.definitions) {
57
+ if (isTypeDefinitionNode(definition)) {
58
+ const typeName = definition.name.value;
59
+
60
+ if (typeDefinitionsMap[typeName]) {
61
+ typeDefinitionsMap[typeName].push(definition);
62
+ } else {
63
+ typeDefinitionsMap[typeName] = [definition];
64
+ }
65
+ } else if (isTypeExtensionNode(definition)) {
66
+ const typeName = definition.name.value;
67
+
68
+ if (typeExtensionsMap[typeName]) {
69
+ typeExtensionsMap[typeName].push(definition);
70
+ } else {
71
+ typeExtensionsMap[typeName] = [definition];
72
+ }
73
+ } else if (definition.kind === Kind.DIRECTIVE_DEFINITION) {
74
+ const directiveName = definition.name.value;
75
+
76
+ if (directivesMap[directiveName]) {
77
+ directivesMap[directiveName].push(definition);
78
+ } else {
79
+ directivesMap[directiveName] = [definition];
80
+ }
81
+ } else if (definition.kind === Kind.SCHEMA_DEFINITION) {
82
+ schemaDefinitions.push(definition);
83
+ } else if (definition.kind === Kind.SCHEMA_EXTENSION) {
84
+ schemaExtensions.push(definition);
85
+ }
86
+ }
87
+ }
88
+
89
+ for (const [typeName, typeDefinitions] of Object.entries(
90
+ typeDefinitionsMap,
91
+ )) {
92
+ if (typeDefinitions.length > 1) {
93
+ errors.push(
94
+ new GraphQLError(
95
+ `Type "${typeName}" was defined more than once.`,
96
+ typeDefinitions,
97
+ ),
98
+ );
99
+ }
100
+ }
101
+
102
+ for (const [directiveName, directives] of Object.entries(directivesMap)) {
103
+ if (directives.length > 1) {
104
+ errors.push(
105
+ new GraphQLError(
106
+ `Directive "${directiveName}" was defined more than once.`,
107
+ directives,
108
+ ),
109
+ );
110
+ }
111
+ }
112
+
113
+ let operationTypeMap: { [operation in OperationTypeNode]?: string };
114
+
115
+ if (schemaDefinitions.length > 0 || schemaExtensions.length > 0) {
116
+ operationTypeMap = {};
117
+
118
+ // We should report an error if more than one schema definition is included,
119
+ // but this matches the current 'last definition wins' behavior of `buildASTSchema`.
120
+ const schemaDefinition = schemaDefinitions[schemaDefinitions.length - 1];
121
+
122
+ const operationTypes = [schemaDefinition, ...schemaExtensions]
123
+ .map((node) => node.operationTypes)
124
+ .filter(isNotNullOrUndefined)
125
+ .flat();
126
+
127
+ for (const operationType of operationTypes) {
128
+ const typeName = operationType.type.name.value;
129
+ const operation = operationType.operation;
130
+
131
+ if (operationTypeMap[operation]) {
132
+ throw new GraphQLError(
133
+ `Must provide only one ${operation} type in schema.`,
134
+ [schemaDefinition],
135
+ );
136
+ }
137
+ if (!(typeDefinitionsMap[typeName] || typeExtensionsMap[typeName])) {
138
+ throw new GraphQLError(
139
+ `Specified ${operation} type "${typeName}" not found in document.`,
140
+ [schemaDefinition],
141
+ );
142
+ }
143
+ operationTypeMap[operation] = typeName;
144
+ }
145
+ } else {
146
+ operationTypeMap = {
147
+ query: "Query",
148
+ mutation: "Mutation",
149
+ subscription: "Subscription",
150
+ };
151
+ }
152
+
153
+ for (const [typeName, typeExtensions] of Object.entries(typeExtensionsMap)) {
154
+ if (!typeDefinitionsMap[typeName]) {
155
+ if (Object.values(operationTypeMap).includes(typeName)) {
156
+ typeDefinitionsMap[typeName] = [
157
+ {
158
+ kind: Kind.OBJECT_TYPE_DEFINITION,
159
+ name: {
160
+ kind: Kind.NAME,
161
+ value: typeName,
162
+ },
163
+ },
164
+ ];
165
+ } else {
166
+ errors.push(
167
+ new GraphQLError(
168
+ `Cannot extend type "${typeName}" because it does not exist in the existing schema.`,
169
+ typeExtensions,
170
+ ),
171
+ );
172
+ }
173
+ }
174
+ }
175
+
176
+ if (errors.length > 0) {
177
+ return { errors };
178
+ }
179
+
180
+ try {
181
+ const typeDefinitions = Object.values(typeDefinitionsMap).flat();
182
+ const directives = Object.values(directivesMap).flat();
183
+
184
+ let schema = buildASTSchema({
185
+ kind: Kind.DOCUMENT,
186
+ definitions: [...typeDefinitions, ...directives],
187
+ });
188
+
189
+ const typeExtensions = Object.values(typeExtensionsMap).flat();
190
+
191
+ if (typeExtensions.length > 0) {
192
+ schema = extendSchema(schema, {
193
+ kind: Kind.DOCUMENT,
194
+ definitions: typeExtensions,
195
+ });
196
+ }
197
+
198
+ for (const module of modules) {
199
+ if (!module.resolvers) continue;
200
+
201
+ addResolversToSchema(schema, module.resolvers);
202
+ }
203
+
204
+ return { schema };
205
+ } catch (error: any) {
206
+ return { errors: [error] };
207
+ }
208
+ }
209
+
210
+ function addResolversToSchema(
211
+ schema: GraphQLSchema,
212
+ resolvers: GraphQLResolverMap<unknown>,
213
+ ) {
214
+ for (const [typeName, fieldConfigs] of Object.entries(resolvers)) {
215
+ const type = schema.getType(typeName);
216
+ if (!isObjectType(type)) continue;
217
+
218
+ const fieldMap = type.getFields();
219
+
220
+ for (const [fieldName, fieldConfig] of Object.entries(fieldConfigs)) {
221
+ if (fieldName.startsWith("__")) {
222
+ (type as any)[fieldName.substring(2)] = fieldConfig;
223
+ continue;
224
+ }
225
+
226
+ const field = fieldMap[fieldName];
227
+ if (!field) continue;
228
+
229
+ if (typeof fieldConfig === "function") {
230
+ field.resolve = fieldConfig;
231
+ } else {
232
+ if (fieldConfig.resolve) {
233
+ field.resolve = fieldConfig.resolve;
234
+ }
235
+ if (fieldConfig.subscribe) {
236
+ field.subscribe = fieldConfig.subscribe;
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
@@ -0,0 +1,6 @@
1
+ import "../env";
2
+
3
+ export * from "./utilities";
4
+
5
+ export * from "./schema";
6
+ export * from "./buildServiceDefinition";
@@ -0,0 +1,2 @@
1
+ export * from "./resolverMap";
2
+ export * from "./resolveObject";
@@ -0,0 +1,18 @@
1
+ import { GraphQLResolveInfo, FieldNode } from "graphql";
2
+
3
+ export type GraphQLObjectResolver<TSource, TContext> = (
4
+ source: TSource,
5
+ fields: Record<string, ReadonlyArray<FieldNode>>,
6
+ context: TContext,
7
+ info: GraphQLResolveInfo,
8
+ ) => any;
9
+
10
+ declare module "graphql/type/definition" {
11
+ interface GraphQLObjectType {
12
+ resolveObject?: GraphQLObjectResolver<any, any>;
13
+ }
14
+
15
+ interface GraphQLObjectTypeConfig<TSource, TContext> {
16
+ resolveObject?: GraphQLObjectResolver<TSource, TContext>;
17
+ }
18
+ }
@@ -0,0 +1,23 @@
1
+ import { GraphQLFieldResolver } from "graphql";
2
+
3
+ export interface GraphQLResolverMap<TContext> {
4
+ [typeName: string]: {
5
+ [fieldName: string]:
6
+ | GraphQLFieldResolver<unknown, TContext>
7
+ | {
8
+ requires?: string;
9
+ resolve: GraphQLFieldResolver<unknown, TContext>;
10
+ subscribe?: undefined;
11
+ }
12
+ | {
13
+ requires?: string;
14
+ resolve?: undefined;
15
+ subscribe: GraphQLFieldResolver<unknown, TContext>;
16
+ }
17
+ | {
18
+ requires?: string;
19
+ resolve: GraphQLFieldResolver<unknown, TContext>;
20
+ subscribe: GraphQLFieldResolver<unknown, TContext>;
21
+ };
22
+ };
23
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ ASTNode,
3
+ TypeDefinitionNode,
4
+ TypeExtensionNode,
5
+ DocumentNode,
6
+ Kind,
7
+ } from "graphql";
8
+
9
+ // FIXME: We should add proper type guards for these predicate functions
10
+ // to `@types/graphql`.
11
+ declare module "graphql/language/predicates" {
12
+ function isTypeDefinitionNode(node: ASTNode): node is TypeDefinitionNode;
13
+ function isTypeExtensionNode(node: ASTNode): node is TypeExtensionNode;
14
+ }
15
+
16
+ export function isNode(maybeNode: any): maybeNode is ASTNode {
17
+ return maybeNode && typeof maybeNode.kind === "string";
18
+ }
19
+
20
+ export function isDocumentNode(node: ASTNode): node is DocumentNode {
21
+ return isNode(node) && node.kind === Kind.DOCUMENT;
22
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./invariant";
2
+ export * from "./predicates";
3
+ export * from "./graphql";
@@ -0,0 +1,5 @@
1
+ export function invariant(condition: any, message: string) {
2
+ if (!condition) {
3
+ throw new Error(message);
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ export function isNotNullOrUndefined<T>(
2
+ value: T | null | undefined,
3
+ ): value is T {
4
+ return value !== null && typeof value !== "undefined";
5
+ }
package/src/utils.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { LanguageClient } from "vscode-languageclient";
1
+ import { LanguageClient } from "vscode-languageclient/node";
2
+ import type { ProjectStats } from "./messages";
2
3
 
3
4
  export const timeSince = (date: number) => {
4
5
  const seconds = Math.floor((+new Date() - date) / 1000);
@@ -17,32 +18,17 @@ export const timeSince = (date: number) => {
17
18
 
18
19
  export const printNoFileOpenMessage = (
19
20
  client: LanguageClient,
20
- extVersion: string
21
+ extVersion: string,
21
22
  ) => {
22
23
  client.outputChannel.appendLine("------------------------------");
23
24
  client.outputChannel.appendLine(`🚀 Apollo GraphQL v${extVersion}`);
24
25
  client.outputChannel.appendLine("------------------------------");
25
26
  };
26
27
 
27
- export interface TypeStats {
28
- service?: number;
29
- client?: number;
30
- total?: number;
31
- }
32
-
33
- export interface ProjectStats {
34
- type: string;
35
- loaded: boolean;
36
- serviceId?: string;
37
- types?: TypeStats;
38
- tag?: string;
39
- lastFetch?: number;
40
- }
41
-
42
28
  export const printStatsToClientOutputChannel = (
43
29
  client: LanguageClient,
44
30
  stats: ProjectStats,
45
- extVersion: string
31
+ extVersion: string,
46
32
  ) => {
47
33
  client.outputChannel.appendLine("------------------------------");
48
34
  client.outputChannel.appendLine(`🚀 Apollo GraphQL v${extVersion}`);
@@ -52,7 +38,7 @@ export const printStatsToClientOutputChannel = (
52
38
  client.outputChannel.appendLine(
53
39
  "❌ Service stats could not be loaded. This may be because you're missing an apollo.config.js file " +
54
40
  "or it is misconfigured. For more information about configuring Apollo projects, " +
55
- "see the guide here (https://go.apollo.dev/t/config)."
41
+ "see the guide here (https://go.apollo.dev/t/config).",
56
42
  );
57
43
  return;
58
44
  }
@@ -69,12 +55,12 @@ export const printStatsToClientOutputChannel = (
69
55
  client.outputChannel.appendLine(
70
56
  `📈 Number of Types: ${stats.types.total} (${
71
57
  stats.types.client
72
- } client ${stats.types.client === 1 ? "type" : "types"})`
58
+ } client ${stats.types.client === 1 ? "type" : "types"})`,
73
59
  );
74
60
 
75
61
  if (stats.lastFetch && timeSince(stats.lastFetch)) {
76
62
  client.outputChannel.appendLine(
77
- `🗓 Last Fetched ${timeSince(stats.lastFetch)} Ago`
63
+ `🗓 Last Fetched ${timeSince(stats.lastFetch)} Ago`,
78
64
  );
79
65
  }
80
66
  client.outputChannel.appendLine("------------------------------");
@@ -1,7 +1,5 @@
1
1
  {
2
- "fileTypes": [
3
- "dart"
4
- ],
2
+ "fileTypes": ["dart"],
5
3
  "injectionSelector": "L:source -string -comment",
6
4
  "patterns": [
7
5
  {
@@ -37,4 +35,4 @@
37
35
  }
38
36
  ],
39
37
  "scopeName": "inline.graphql.dart"
40
- }
38
+ }
@@ -1,8 +1,5 @@
1
1
  {
2
- "fileTypes": [
3
- "ex",
4
- "exs"
5
- ],
2
+ "fileTypes": ["ex", "exs"],
6
3
  "injectionSelector": "L:source -string -comment",
7
4
  "patterns": [
8
5
  {
@@ -1,11 +1,11 @@
1
1
  {
2
- "fileTypes": ["js", "jsx", "ts", "tsx", "vue"],
2
+ "fileTypes": ["js", "jsx", "ts", "tsx", "vue", "svelte"],
3
3
  "injectionSelector": "L:source -string -comment",
4
4
  "patterns": [
5
5
  {
6
6
  "name": "taggedTemplates",
7
7
  "contentName": "meta.embedded.block.graphql",
8
- "begin": "(Relay\\.QL|gql|graphql(\\.experimental)?)(`)",
8
+ "begin": "(Relay\\.QL|gql|graphql(\\.experimental)?)\\(?(`)",
9
9
  "beginCaptures": {
10
10
  "1": {
11
11
  "name": "entity.name.function.tagged-template.js"
@@ -14,7 +14,7 @@
14
14
  "name": "punctuation.definition.string.template.begin.js"
15
15
  }
16
16
  },
17
- "end": "`",
17
+ "end": "`\\)?",
18
18
  "endCaptures": {
19
19
  "0": {
20
20
  "name": "punctuation.definition.string.template.end.js"
@@ -65,7 +65,7 @@
65
65
  "patterns": [
66
66
  {
67
67
  "begin": "\\s*\\b(implements)\\b\\s*",
68
- "end": "\\s*(?={)",
68
+ "end": "\\s*(?=[{@])",
69
69
  "beginCaptures": {
70
70
  "1": { "name": "keyword.implements.graphql.RRR" }
71
71
  },
@@ -119,15 +119,16 @@
119
119
  { "include": "#graphql-type-object" },
120
120
  { "include": "#graphql-colon" },
121
121
  { "include": "#graphql-input-types" },
122
- { "include": "#graphql-directive"},
122
+ { "include": "#graphql-directive" },
123
123
  { "include": "#literal-quasi-embedded" }
124
124
  ]
125
125
  },
126
126
  "graphql-schema": {
127
- "begin": "\\s*\\b(schema)\\b",
128
- "end": "(?<=})",
127
+ "begin": "\\s*\\b(extend)?\\b\\s*\\b(schema)\\b",
128
+ "end": "\\s*(?!\\s|#|{|@|$)",
129
129
  "beginCaptures": {
130
- "1": { "name": "keyword.schema.graphql" }
130
+ "1": { "name": "keyword.extend.graphql" },
131
+ "2": { "name": "keyword.schema.graphql" }
131
132
  },
132
133
  "patterns": [
133
134
  {
@@ -165,6 +166,7 @@
165
166
  { "include": "#graphql-skip-newlines" }
166
167
  ]
167
168
  },
169
+ { "include": "#graphql-directive" },
168
170
  { "include": "#graphql-comment" },
169
171
  { "include": "#graphql-skip-newlines" }
170
172
  ]
@@ -261,7 +263,8 @@
261
263
  { "include": "#graphql-input-types" },
262
264
  { "include": "#graphql-variable-assignment" },
263
265
  { "include": "#literal-quasi-embedded" },
264
- { "include": "#graphql-skip-newlines" }
266
+ { "include": "#graphql-skip-newlines" },
267
+ { "include": "#graphql-directive" }
265
268
  ]
266
269
  },
267
270
  "graphql-input-types": {
@@ -295,7 +298,7 @@
295
298
  "match": "\\s*\\b(scalar)\\b\\s*([_A-Za-z][_0-9A-Za-z]*)",
296
299
  "captures": {
297
300
  "1": { "name": "keyword.scalar.graphql" },
298
- "2": { "name": "entity.scalar.graphql" }
301
+ "2": { "name": "support.type.enum.graphql" }
299
302
  }
300
303
  },
301
304
  "graphql-scalar-type": {
@@ -533,12 +536,13 @@
533
536
  },
534
537
  "patterns": [
535
538
  { "include": "#graphql-object-type" },
536
-
539
+ { "include": "#graphql-directive" },
537
540
  { "include": "#graphql-comment" },
538
541
  { "include": "#graphql-enum-value" },
539
542
  { "include": "#literal-quasi-embedded" }
540
543
  ]
541
- }
544
+ },
545
+ { "include": "#graphql-directive" }
542
546
  ]
543
547
  },
544
548
  "graphql-enum-value": {
@@ -0,0 +1,51 @@
1
+ {
2
+ "fileTypes": ["lua", "luau"],
3
+ "injectionSelector": "L:source -string -comment",
4
+ "patterns": [
5
+ {
6
+ "contentName": "meta.embedded.block.graphql",
7
+ "begin": "(--\\[\\[)\\s*(gql)\\s*(\\]\\])\\s*(\\[\\[)",
8
+ "beginCaptures": {
9
+ "1": {
10
+ "name": "comment.block.lua"
11
+ },
12
+ "2": {
13
+ "name": "entity.name.function.lua"
14
+ },
15
+ "3": {
16
+ "name": "comment.block.lua"
17
+ },
18
+ "4": {
19
+ "name": "string.quoted.double.lua"
20
+ }
21
+ },
22
+ "end": "(\\]\\])",
23
+ "endCaptures": {
24
+ "1": {
25
+ "name": "string.quoted.double.lua"
26
+ }
27
+ },
28
+ "patterns": [{ "include": "source.graphql" }]
29
+ },
30
+ {
31
+ "contentName": "meta.embedded.block.graphql",
32
+ "begin": "(gql)\\(?\\s*(\\[\\[)",
33
+ "beginCaptures": {
34
+ "1": {
35
+ "name": "entity.name.function.lua"
36
+ },
37
+ "2": {
38
+ "name": "string.quoted.double.lua"
39
+ }
40
+ },
41
+ "end": "(\\]\\])",
42
+ "endCaptures": {
43
+ "1": {
44
+ "name": "string.quoted.double.lua"
45
+ }
46
+ },
47
+ "patterns": [{ "include": "source.graphql" }]
48
+ }
49
+ ],
50
+ "scopeName": "inline.graphql.lua"
51
+ }
@@ -4,7 +4,7 @@
4
4
  "patterns": [
5
5
  {
6
6
  "contentName": "meta.embedded.block.graphql",
7
- "begin": "(?=(?><<[-~](['\"]?)((?:[_\\w]+_|)GRAPHQL)\\b\\1))",
7
+ "begin": "(?><<[-~](['\"`]?)((?:[_\\w]+_|)GRAPHQL)\\b\\1)",
8
8
  "beginCaptures": {
9
9
  "0": {
10
10
  "name": "punctuation.definition.string.begin.ruby"
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": [
4
+ "./lib",
5
+ "**/__tests__/*",
6
+ "**/__e2e__/*",
7
+ "**/__mocks__/*",
8
+ "./sampleWorkspace",
9
+ "jest.config.ts"
10
+ ]
11
+ }
package/tsconfig.json CHANGED
@@ -1,12 +1,27 @@
1
1
  {
2
- "extends": "../../tsconfig.base",
3
2
  "compilerOptions": {
4
3
  "rootDir": "./src",
5
- "outDir": "./lib"
4
+ "outDir": "./lib",
5
+ "target": "es2020",
6
+ "module": "commonjs",
7
+ "moduleResolution": "node",
8
+ "esModuleInterop": true,
9
+ "sourceMap": true,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "removeComments": true,
13
+ "allowJs": true,
14
+ "strict": true,
15
+ "noImplicitAny": true,
16
+ "noImplicitReturns": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "noUnusedParameters": false,
19
+ "noUnusedLocals": false,
20
+ "forceConsistentCasingInFileNames": true,
21
+ "lib": ["es2020", "esnext.asynciterable"],
22
+ "types": ["node", "jest"],
23
+ "baseUrl": "."
6
24
  },
7
- "exclude": ["**/__tests__/*", "**/__mocks__/*", "./lib"],
8
- "references": [
9
- { "path": "../apollo-env" },
10
- { "path": "../apollo-language-server" }
11
- ]
25
+ "include": ["./src"],
26
+ "exclude": ["./lib", "jest.config.ts", "./sampleWorkspace"]
12
27
  }
@@ -1,8 +0,0 @@
1
- const symlinkDir = require("symlink-dir");
2
-
3
- symlinkDir(
4
- "../apollo-language-server",
5
- "./node_modules/apollo-language-server"
6
- ).then(result => {
7
- console.log(result);
8
- });
package/lib/debug.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { OutputChannel } from "vscode";
2
- export declare class Debug {
3
- private static outputConsole?;
4
- static SetOutputConsole(outputConsole: OutputChannel): void;
5
- static info(message: string, _stack?: string): void;
6
- static error(message: string, stack?: string): void;
7
- static warning(message: string, _stack?: string): void;
8
- static clear(): void;
9
- private static showConsole;
10
- }
11
- //# sourceMappingURL=debug.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,aAAa,EAAE,MAAM,QAAQ,CAAC;AAmB1D,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAgB;WAE/B,gBAAgB,CAAC,aAAa,EAAE,aAAa;WAO7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;WAarC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAarC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;WAexC,KAAK;IAMnB,OAAO,CAAC,MAAM,CAAC,WAAW;CAI3B"}