vscode-apollo 1.19.3 → 1.20.1

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 (156) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +14 -0
  3. package/.circleci/config.yml +82 -0
  4. package/.eslintrc.js +10 -0
  5. package/.gitattributes +1 -0
  6. package/.github/workflows/build-prs.yml +57 -0
  7. package/.github/workflows/release.yml +114 -0
  8. package/.gitleaks.toml +26 -0
  9. package/.nvmrc +1 -0
  10. package/.prettierrc +5 -0
  11. package/.vscode/launch.json +61 -0
  12. package/.vscode/settings.json +16 -0
  13. package/.vscode/tasks.json +18 -0
  14. package/.vscodeignore +17 -1
  15. package/CHANGELOG.md +178 -1
  16. package/LICENSE +2 -2
  17. package/README.md +9 -9
  18. package/codegen.yml +12 -0
  19. package/images/IconRun.svg +8 -0
  20. package/jest.config.ts +11 -0
  21. package/package.json +102 -22
  22. package/renovate.json +23 -0
  23. package/src/__mocks__/fs.js +3 -0
  24. package/src/__tests__/statusBar.test.ts +8 -7
  25. package/src/debug.ts +2 -5
  26. package/src/env/fetch/fetch.ts +32 -0
  27. package/src/env/fetch/global.ts +30 -0
  28. package/src/env/fetch/index.d.ts +2 -0
  29. package/src/env/fetch/index.ts +2 -0
  30. package/src/env/fetch/url.ts +9 -0
  31. package/src/env/index.ts +4 -0
  32. package/src/env/polyfills/array.ts +17 -0
  33. package/src/env/polyfills/index.ts +2 -0
  34. package/src/env/polyfills/object.ts +7 -0
  35. package/src/env/typescript-utility-types.ts +2 -0
  36. package/src/extension.ts +106 -37
  37. package/src/language-server/__tests__/diagnostics.test.ts +86 -0
  38. package/src/language-server/__tests__/document.test.ts +187 -0
  39. package/src/language-server/__tests__/fileSet.test.ts +46 -0
  40. package/src/language-server/__tests__/fixtures/starwarsSchema.ts +1917 -0
  41. package/src/language-server/config/__tests__/config.ts +128 -0
  42. package/src/language-server/config/__tests__/loadConfig.ts +508 -0
  43. package/src/language-server/config/__tests__/utils.ts +106 -0
  44. package/src/language-server/config/config.ts +219 -0
  45. package/src/language-server/config/index.ts +3 -0
  46. package/src/language-server/config/loadConfig.ts +228 -0
  47. package/src/language-server/config/utils.ts +56 -0
  48. package/src/language-server/diagnostics.ts +109 -0
  49. package/src/language-server/document.ts +277 -0
  50. package/src/language-server/engine/GraphQLDataSource.ts +124 -0
  51. package/src/language-server/engine/index.ts +105 -0
  52. package/src/language-server/engine/operations/frontendUrlRoot.ts +7 -0
  53. package/src/language-server/engine/operations/schemaTagsAndFieldStats.ts +24 -0
  54. package/src/language-server/errors/__tests__/NoMissingClientDirectives.test.ts +220 -0
  55. package/src/language-server/errors/logger.ts +58 -0
  56. package/src/language-server/errors/validation.ts +277 -0
  57. package/src/language-server/fileSet.ts +65 -0
  58. package/src/language-server/format.ts +48 -0
  59. package/src/language-server/graphqlTypes.ts +7176 -0
  60. package/src/language-server/index.ts +29 -0
  61. package/src/language-server/languageProvider.ts +798 -0
  62. package/src/language-server/loadingHandler.ts +64 -0
  63. package/src/language-server/project/base.ts +399 -0
  64. package/src/language-server/project/client.ts +602 -0
  65. package/src/language-server/project/defaultClientSchema.ts +45 -0
  66. package/src/language-server/project/service.ts +48 -0
  67. package/src/language-server/providers/schema/__tests__/file.ts +150 -0
  68. package/src/language-server/providers/schema/base.ts +15 -0
  69. package/src/language-server/providers/schema/endpoint.ts +157 -0
  70. package/src/language-server/providers/schema/engine.ts +197 -0
  71. package/src/language-server/providers/schema/file.ts +167 -0
  72. package/src/language-server/providers/schema/index.ts +75 -0
  73. package/src/language-server/server.ts +252 -0
  74. package/src/language-server/typings/codemirror.d.ts +4 -0
  75. package/src/language-server/typings/graphql.d.ts +27 -0
  76. package/src/language-server/utilities/__tests__/graphql.test.ts +411 -0
  77. package/src/language-server/utilities/__tests__/uri.ts +55 -0
  78. package/src/language-server/utilities/debouncer.ts +8 -0
  79. package/src/language-server/utilities/debug.ts +89 -0
  80. package/src/language-server/utilities/graphql.ts +432 -0
  81. package/src/language-server/utilities/index.ts +3 -0
  82. package/src/language-server/utilities/source.ts +182 -0
  83. package/src/language-server/utilities/uri.ts +19 -0
  84. package/src/language-server/workspace.ts +262 -0
  85. package/src/languageServerClient.ts +19 -12
  86. package/src/messages.ts +84 -0
  87. package/src/statusBar.ts +5 -5
  88. package/src/tools/__tests__/buildServiceDefinition.test.ts +491 -0
  89. package/src/tools/__tests__/snapshotSerializers/astSerializer.ts +19 -0
  90. package/src/tools/__tests__/snapshotSerializers/graphQLTypeSerializer.ts +14 -0
  91. package/src/tools/buildServiceDefinition.ts +241 -0
  92. package/src/tools/index.ts +6 -0
  93. package/src/tools/schema/index.ts +2 -0
  94. package/src/tools/schema/resolveObject.ts +18 -0
  95. package/src/tools/schema/resolverMap.ts +23 -0
  96. package/src/tools/utilities/graphql.ts +22 -0
  97. package/src/tools/utilities/index.ts +3 -0
  98. package/src/tools/utilities/invariant.ts +5 -0
  99. package/src/tools/utilities/predicates.ts +5 -0
  100. package/src/utils.ts +1 -16
  101. package/syntaxes/graphql.js.json +3 -3
  102. package/syntaxes/graphql.json +13 -9
  103. package/syntaxes/graphql.lua.json +51 -0
  104. package/syntaxes/graphql.rb.json +1 -1
  105. package/tsconfig.build.json +4 -0
  106. package/tsconfig.json +20 -7
  107. package/create-server-symlink.js +0 -8
  108. package/lib/debug.d.ts +0 -11
  109. package/lib/debug.d.ts.map +0 -1
  110. package/lib/debug.js +0 -48
  111. package/lib/debug.js.map +0 -1
  112. package/lib/extension.d.ts +0 -4
  113. package/lib/extension.d.ts.map +0 -1
  114. package/lib/extension.js +0 -187
  115. package/lib/extension.js.map +0 -1
  116. package/lib/languageServerClient.d.ts +0 -4
  117. package/lib/languageServerClient.d.ts.map +0 -1
  118. package/lib/languageServerClient.js +0 -57
  119. package/lib/languageServerClient.js.map +0 -1
  120. package/lib/statusBar.d.ts +0 -24
  121. package/lib/statusBar.d.ts.map +0 -1
  122. package/lib/statusBar.js +0 -46
  123. package/lib/statusBar.js.map +0 -1
  124. package/lib/testRunner/index.d.ts +0 -3
  125. package/lib/testRunner/index.d.ts.map +0 -1
  126. package/lib/testRunner/index.js +0 -49
  127. package/lib/testRunner/index.js.map +0 -1
  128. package/lib/testRunner/jest-config.d.ts +0 -14
  129. package/lib/testRunner/jest-config.d.ts.map +0 -1
  130. package/lib/testRunner/jest-config.js +0 -18
  131. package/lib/testRunner/jest-config.js.map +0 -1
  132. package/lib/testRunner/jest-vscode-environment.d.ts +0 -2
  133. package/lib/testRunner/jest-vscode-environment.d.ts.map +0 -1
  134. package/lib/testRunner/jest-vscode-environment.js +0 -19
  135. package/lib/testRunner/jest-vscode-environment.js.map +0 -1
  136. package/lib/testRunner/jest-vscode-framework-setup.d.ts +0 -1
  137. package/lib/testRunner/jest-vscode-framework-setup.d.ts.map +0 -1
  138. package/lib/testRunner/jest-vscode-framework-setup.js +0 -3
  139. package/lib/testRunner/jest-vscode-framework-setup.js.map +0 -1
  140. package/lib/testRunner/vscode-test-script.d.ts +0 -2
  141. package/lib/testRunner/vscode-test-script.d.ts.map +0 -1
  142. package/lib/testRunner/vscode-test-script.js +0 -23
  143. package/lib/testRunner/vscode-test-script.js.map +0 -1
  144. package/lib/utils.d.ts +0 -18
  145. package/lib/utils.d.ts.map +0 -1
  146. package/lib/utils.js +0 -52
  147. package/lib/utils.js.map +0 -1
  148. package/src/testRunner/README.md +0 -23
  149. package/src/testRunner/index.ts +0 -72
  150. package/src/testRunner/jest-config.ts +0 -17
  151. package/src/testRunner/jest-vscode-environment.ts +0 -25
  152. package/src/testRunner/jest-vscode-framework-setup.ts +0 -10
  153. package/src/testRunner/jest.d.ts +0 -37
  154. package/src/testRunner/vscode-test-script.ts +0 -38
  155. package/tsconfig.test.json +0 -4
  156. 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,4 @@
1
- import { LanguageClient } from "vscode-languageclient";
1
+ import type { LanguageClient, ProjectStats } from "./messages";
2
2
 
3
3
  export const timeSince = (date: number) => {
4
4
  const seconds = Math.floor((+new Date() - date) / 1000);
@@ -24,21 +24,6 @@ export const printNoFileOpenMessage = (
24
24
  client.outputChannel.appendLine("------------------------------");
25
25
  };
26
26
 
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
27
  export const printStatsToClientOutputChannel = (
43
28
  client: LanguageClient,
44
29
  stats: ProjectStats,
@@ -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,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["./lib", "**/__tests__/*", "**/__mocks__/*", "jest.config.ts"]
4
+ }
package/tsconfig.json CHANGED
@@ -1,12 +1,25 @@
1
1
  {
2
- "extends": "../../tsconfig.base",
3
2
  "compilerOptions": {
4
3
  "rootDir": "./src",
5
- "outDir": "./lib"
4
+ "outDir": "./lib",
5
+ "target": "es2017",
6
+ "module": "commonjs",
7
+ "moduleResolution": "node",
8
+ "esModuleInterop": true,
9
+ "sourceMap": true,
10
+ "declaration": true,
11
+ "declarationMap": true,
12
+ "removeComments": true,
13
+ "strict": true,
14
+ "noImplicitAny": true,
15
+ "noImplicitReturns": true,
16
+ "noFallthroughCasesInSwitch": true,
17
+ "noUnusedParameters": false,
18
+ "noUnusedLocals": false,
19
+ "forceConsistentCasingInFileNames": true,
20
+ "lib": ["es2017", "esnext.asynciterable"],
21
+ "types": ["node", "jest"],
22
+ "baseUrl": "."
6
23
  },
7
- "exclude": ["**/__tests__/*", "**/__mocks__/*", "./lib"],
8
- "references": [
9
- { "path": "../apollo-env" },
10
- { "path": "../apollo-language-server" }
11
- ]
24
+ "exclude": ["./lib", "jest.config.ts"]
12
25
  }
@@ -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"}
package/lib/debug.js DELETED
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Debug = void 0;
4
- const createAndTrimStackTrace = () => {
5
- let stack = new Error().stack;
6
- return stack && stack.split("\n").length > 2
7
- ? stack
8
- .split("\n")
9
- .slice(3, 7)
10
- .join("\n")
11
- : stack;
12
- };
13
- class Debug {
14
- static SetOutputConsole(outputConsole) {
15
- this.outputConsole = outputConsole;
16
- }
17
- static info(message, _stack) {
18
- if (!this.outputConsole)
19
- return;
20
- this.outputConsole.appendLine(`[INFO] ${message}`);
21
- }
22
- static error(message, stack) {
23
- if (!this.outputConsole)
24
- return;
25
- const stackTrace = stack || createAndTrimStackTrace();
26
- Debug.showConsole();
27
- this.outputConsole.appendLine(`[ERROR] ${message}`);
28
- stackTrace && this.outputConsole.appendLine(stackTrace);
29
- }
30
- static warning(message, _stack) {
31
- if (!this.outputConsole)
32
- return;
33
- this.outputConsole.appendLine(`[WARN] ${message}`);
34
- }
35
- static clear() {
36
- if (!this.outputConsole)
37
- return;
38
- this.outputConsole.clear();
39
- this.outputConsole.dispose();
40
- }
41
- static showConsole() {
42
- if (!this.outputConsole)
43
- return;
44
- this.outputConsole.show();
45
- }
46
- }
47
- exports.Debug = Debug;
48
- //# sourceMappingURL=debug.js.map
package/lib/debug.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":";;;AAQA,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,IAAI,KAAK,GAAuB,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAElD,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,KAAK;aACF,KAAK,CAAC,IAAI,CAAC;aACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC,CAAC;AAEF,MAAa,KAAK;IAGT,MAAM,CAAC,gBAAgB,CAAC,aAA4B;QACzD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAKM,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,MAAe;QAKjD,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAMM,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,KAAc;QACjD,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,KAAK,IAAI,uBAAuB,EAAE,CAAC;QACtD,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACpD,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAOM,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,MAAe;QACpD,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAYM,MAAM,CAAC,KAAK;QACjB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAEO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF;AA7DD,sBA6DC"}
@@ -1,4 +0,0 @@
1
- import { ExtensionContext } from "vscode";
2
- export declare function activate(context: ExtensionContext): void;
3
- export declare function deactivate(): Thenable<void> | void;
4
- //# sourceMappingURL=extension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,gBAAgB,EAQjB,MAAM,QAAQ,CAAC;AA+BhB,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,QA6MjD;AAED,wBAAgB,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAIlD"}