vscode-apollo 1.20.0 → 2.0.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 (109) hide show
  1. package/.circleci/config.yml +27 -18
  2. package/.git-blame-ignore-revs +2 -0
  3. package/.nvmrc +1 -1
  4. package/.vscode/launch.json +9 -4
  5. package/.vscode/tasks.json +58 -16
  6. package/.vscodeignore +12 -1
  7. package/CHANGELOG.md +84 -0
  8. package/CODEOWNERS +4 -0
  9. package/README.md +97 -48
  10. package/graphql.configuration.json +5 -1
  11. package/images/marketplace/apollo-wordmark.png +0 -0
  12. package/jest.config.ts +14 -4
  13. package/jest.e2e.config.js +17 -0
  14. package/package.json +67 -68
  15. package/renovate.json +7 -0
  16. package/sampleWorkspace/clientSchema/apollo.config.cjs +10 -0
  17. package/sampleWorkspace/clientSchema/src/clientSchema.js +16 -0
  18. package/sampleWorkspace/clientSchema/src/test.js +18 -0
  19. package/sampleWorkspace/fixtures/starwarsSchema.graphql +299 -0
  20. package/sampleWorkspace/httpSchema/apollo.config.ts +8 -0
  21. package/sampleWorkspace/httpSchema/src/test.js +9 -0
  22. package/sampleWorkspace/localSchema/apollo.config.js +8 -0
  23. package/sampleWorkspace/localSchema/src/test.js +8 -0
  24. package/sampleWorkspace/localSchemaArray/apollo.config.js +12 -0
  25. package/sampleWorkspace/localSchemaArray/planets.graphql +20 -0
  26. package/sampleWorkspace/localSchemaArray/src/test.js +12 -0
  27. package/sampleWorkspace/sampleWorkspace.code-workspace +20 -0
  28. package/sampleWorkspace/spotifyGraph/apollo.config.mjs +5 -0
  29. package/sampleWorkspace/spotifyGraph/src/test.js +11 -0
  30. package/src/__e2e__/mockServer.js +117 -0
  31. package/src/__e2e__/mocks.js +13094 -0
  32. package/src/__e2e__/run.js +23 -0
  33. package/src/__e2e__/runTests.js +44 -0
  34. package/src/__e2e__/setup.js +1 -0
  35. package/src/__e2e__/vscode-environment.js +16 -0
  36. package/src/__e2e__/vscode.js +1 -0
  37. package/src/build.js +57 -0
  38. package/src/env/index.ts +0 -3
  39. package/src/extension.ts +251 -225
  40. package/src/language-server/__e2e__/clientSchema.e2e.ts +147 -0
  41. package/src/language-server/__e2e__/httpSchema.e2e.ts +21 -0
  42. package/src/language-server/__e2e__/localSchema.e2e.ts +25 -0
  43. package/src/language-server/__e2e__/localSchemaArray.e2e.ts +31 -0
  44. package/src/language-server/__e2e__/studioGraph.e2e.ts +65 -0
  45. package/src/language-server/__e2e__/utils.ts +151 -0
  46. package/src/language-server/__tests__/diagnostics.test.ts +8 -8
  47. package/src/language-server/__tests__/fileSet.test.ts +1 -1
  48. package/src/language-server/__tests__/fixtures/starwarsSchema.ts +2 -2
  49. package/src/language-server/config/__tests__/config.ts +22 -96
  50. package/src/language-server/config/__tests__/loadConfig.ts +120 -220
  51. package/src/language-server/config/__tests__/utils.ts +22 -29
  52. package/src/language-server/config/config.ts +221 -156
  53. package/src/language-server/config/loadConfig.ts +32 -153
  54. package/src/language-server/config/loadTsConfig.ts +70 -0
  55. package/src/language-server/config/utils.ts +5 -16
  56. package/src/language-server/diagnostics.ts +17 -8
  57. package/src/language-server/document.ts +16 -16
  58. package/src/language-server/engine/index.ts +57 -39
  59. package/src/language-server/engine/operations/frontendUrlRoot.ts +9 -1
  60. package/src/language-server/engine/operations/schemaTagsAndFieldStats.ts +9 -1
  61. package/src/language-server/errors/__tests__/NoMissingClientDirectives.test.ts +10 -5
  62. package/src/language-server/errors/logger.ts +1 -1
  63. package/src/language-server/errors/validation.ts +20 -23
  64. package/src/language-server/fileSet.ts +10 -12
  65. package/src/language-server/format.ts +1 -1
  66. package/src/language-server/graphqlTypes.ts +13020 -3455
  67. package/src/language-server/index.ts +0 -1
  68. package/src/language-server/languageProvider.ts +29 -32
  69. package/src/language-server/loadingHandler.ts +10 -27
  70. package/src/language-server/project/base.ts +32 -25
  71. package/src/language-server/project/client.ts +80 -114
  72. package/src/language-server/project/defaultClientSchema.ts +29 -4
  73. package/src/language-server/providers/schema/__tests__/file.ts +60 -19
  74. package/src/language-server/providers/schema/base.ts +2 -2
  75. package/src/language-server/providers/schema/endpoint.ts +15 -34
  76. package/src/language-server/providers/schema/engine.ts +25 -18
  77. package/src/language-server/providers/schema/file.ts +41 -32
  78. package/src/language-server/providers/schema/index.ts +5 -21
  79. package/src/language-server/server.ts +72 -50
  80. package/src/language-server/typings/graphql.d.ts +3 -3
  81. package/src/language-server/utilities/__tests__/graphql.test.ts +42 -54
  82. package/src/language-server/utilities/debouncer.ts +1 -1
  83. package/src/language-server/utilities/debug.ts +6 -5
  84. package/src/language-server/utilities/graphql.ts +17 -16
  85. package/src/language-server/utilities/source.ts +16 -16
  86. package/src/language-server/utilities/uri.ts +2 -2
  87. package/src/language-server/workspace.ts +29 -37
  88. package/src/languageServerClient.ts +4 -4
  89. package/src/messages.ts +38 -47
  90. package/src/tools/__tests__/buildServiceDefinition.test.ts +2 -2
  91. package/src/tools/buildServiceDefinition.ts +11 -11
  92. package/src/tools/schema/resolveObject.ts +1 -1
  93. package/src/tools/utilities/predicates.ts +1 -1
  94. package/src/utils.ts +7 -6
  95. package/syntaxes/graphql.dart.json +2 -4
  96. package/syntaxes/graphql.ex.json +1 -4
  97. package/tsconfig.build.json +8 -1
  98. package/tsconfig.json +5 -3
  99. package/src/env/fetch/fetch.ts +0 -32
  100. package/src/env/fetch/global.ts +0 -30
  101. package/src/env/fetch/index.d.ts +0 -2
  102. package/src/env/fetch/index.ts +0 -2
  103. package/src/env/fetch/url.ts +0 -9
  104. package/src/env/polyfills/array.ts +0 -17
  105. package/src/env/polyfills/index.ts +0 -2
  106. package/src/env/polyfills/object.ts +0 -7
  107. package/src/language-server/engine/GraphQLDataSource.ts +0 -124
  108. package/src/language-server/project/service.ts +0 -48
  109. package/src/language-server/typings/codemirror.d.ts +0 -4
@@ -0,0 +1,117 @@
1
+ // @ts-check
2
+ const http = require("http");
3
+ const {
4
+ parseRequestParams,
5
+ createHandler,
6
+ } = require("graphql-http/lib/use/http");
7
+ const { buildSchema } = require("graphql");
8
+ const { Trie } = require("@wry/trie");
9
+
10
+ function runMockServer(
11
+ /** @type {number} */ port,
12
+ onStart = (/** @type {number} */ port) => {},
13
+ ) {
14
+ const mocks = new Trie(false);
15
+
16
+ const server = http.createServer(async (req, res) => {
17
+ if (req.url === "/apollo") {
18
+ if (req.method === "POST") {
19
+ await handleApolloPost(req, res);
20
+ } else if (req.method === "PUT") {
21
+ await handleApolloPut(req, res);
22
+ }
23
+ } else if (req.url === "/graphql") {
24
+ schemaHandler(req, res);
25
+ } else {
26
+ res.writeHead(404).end();
27
+ }
28
+ });
29
+
30
+ server.on("error", (err) => {
31
+ console.log("Failed to start server", err);
32
+ });
33
+
34
+ console.log("Starting server...");
35
+ server.listen(port);
36
+ onStart(port);
37
+ console.log(`Server ready at: http://localhost:${port}`);
38
+ return {
39
+ [Symbol.dispose]() {
40
+ console.log("Closing server...");
41
+ server.close();
42
+ console.log("Server closed");
43
+ },
44
+ };
45
+
46
+ /**
47
+ * Mock GraphQL Endpoint Handler
48
+ * @param {http.IncomingMessage} req
49
+ * @param {http.ServerResponse} res
50
+ */
51
+ async function handleApolloPost(req, res) {
52
+ const { operationName, variables } =
53
+ /** @type{import("graphql-http/lib/common").RequestParams} */ (
54
+ await parseRequestParams(req, res)
55
+ );
56
+
57
+ const mock = mocks.peek(operationName, JSON.stringify(variables));
58
+ if (mock) {
59
+ res.writeHead(200, { "Content-Type": "application/json" });
60
+ res.end(JSON.stringify(mock.response));
61
+ } else {
62
+ console.warn("No mock available for %o", {
63
+ operationName,
64
+ variables,
65
+ });
66
+ res.writeHead(200).end(
67
+ JSON.stringify({
68
+ data: null,
69
+ errors: [
70
+ {
71
+ message: "No mock found.",
72
+ extensions: { operationName, variables },
73
+ },
74
+ ],
75
+ }),
76
+ );
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Handler to accept new GraphQL Mocks
82
+ * @param {http.IncomingMessage} req
83
+ * @param {http.ServerResponse} res
84
+ */
85
+ async function handleApolloPut(req, res) {
86
+ const body = await new Promise((resolve) => {
87
+ let body = "";
88
+ req.setEncoding("utf-8");
89
+ req.on("data", (chunk) => (body += chunk));
90
+ req.on("end", () => resolve(body));
91
+ });
92
+ const { operationName, variables, response } = JSON.parse(body);
93
+ mocks.lookup(operationName, JSON.stringify(variables)).response = response;
94
+ //console.info("mock loaded", { operationName, variables });
95
+ res.end();
96
+ }
97
+ }
98
+
99
+ const schema = buildSchema(`#graphql
100
+ type Book {
101
+ title: String
102
+ author: String
103
+ }
104
+
105
+ type Query {
106
+ books: [Book]
107
+ }
108
+ `);
109
+ const schemaHandler = createHandler({
110
+ schema,
111
+ });
112
+
113
+ if (require.main === module) {
114
+ runMockServer(7096, require("./mocks.js").loadDefaultMocks);
115
+ }
116
+
117
+ module.exports.runMockServer = runMockServer;