@hyper-fetch/graphql 7.5.2 → 8.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 (48) hide show
  1. package/{.eslintrc.json → .eslintrc copy.json } +1 -1
  2. package/.eslintrc.cjs +12 -0
  3. package/__tests__/constants/mutations.constants.ts +15 -0
  4. package/__tests__/constants/queries.constants.ts +24 -0
  5. package/__tests__/e2e/e2e.graphql-server.ts +135 -0
  6. package/__tests__/e2e/e2e.graphql.spec.ts +486 -0
  7. package/__tests__/features/adapter/adapter.browser.spec.ts +259 -0
  8. package/__tests__/features/adapter/adapter.server.spec.ts +234 -0
  9. package/__tests__/features/adapter/adapter.utils.spec.ts +86 -0
  10. package/__tests__/request-module.d.ts +12 -0
  11. package/__tests__/shared/callbacks.shared.ts +11 -0
  12. package/__tests__/shared/index.ts +2 -0
  13. package/__tests__/shared/progress.shared.ts +40 -0
  14. package/__tests__/tsconfig.json +23 -0
  15. package/__tests__/vitest.setup.ts +10 -0
  16. package/dist/adapter/adapter.constants.d.ts +4 -0
  17. package/dist/adapter/adapter.constants.d.ts.map +1 -0
  18. package/dist/adapter/adapter.d.ts +3 -0
  19. package/dist/adapter/adapter.d.ts.map +1 -0
  20. package/dist/adapter/adapter.types.d.ts +24 -0
  21. package/dist/adapter/adapter.types.d.ts.map +1 -0
  22. package/dist/adapter/adapter.utils.d.ts +9 -0
  23. package/dist/adapter/adapter.utils.d.ts.map +1 -0
  24. package/dist/adapter/http-adapter.fetch.d.ts +3 -0
  25. package/dist/adapter/http-adapter.fetch.d.ts.map +1 -0
  26. package/dist/adapter/index.d.ts +6 -0
  27. package/dist/adapter/index.d.ts.map +1 -0
  28. package/dist/index.d.ts +2 -34
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.mjs +183 -0
  31. package/dist/index.mjs.map +1 -0
  32. package/package.json +10 -25
  33. package/project.json +4 -0
  34. package/src/adapter/adapter.constants.ts +1 -1
  35. package/src/adapter/adapter.ts +3 -8
  36. package/src/adapter/adapter.types.ts +7 -3
  37. package/src/adapter/adapter.utils.ts +8 -3
  38. package/src/adapter/http-adapter.fetch.ts +186 -0
  39. package/src/adapter/index.ts +1 -0
  40. package/tsconfig.base.json +2 -6
  41. package/tsconfig.json +2 -6
  42. package/vite.config.ts +45 -0
  43. package/dist/browser/index.js +0 -191
  44. package/dist/browser/index.js.map +0 -7
  45. package/dist/index.js +0 -330
  46. package/dist/index.js.map +0 -7
  47. package/src/adapter/http-adapter.browser.ts +0 -148
  48. package/src/adapter/http-adapter.server.ts +0 -148
@@ -0,0 +1,186 @@
1
+ import type { QueryParamsType } from "@hyper-fetch/core";
2
+ import { parseResponse, getErrorMessage, Adapter, stringifyKey } from "@hyper-fetch/core";
3
+
4
+ import type {
5
+ GraphqlAdapterType,
6
+ GraphQlExtraType,
7
+ GraphQlEndpointType,
8
+ FetchGraphqlAdapterOptionsType,
9
+ } from "adapter";
10
+ import {
11
+ gqlExtra,
12
+ defaultTimeout,
13
+ getRequestValues,
14
+ GraphqlMethod,
15
+ gqlEndpointMapper,
16
+ gqlEndpointNameMapper,
17
+ } from "adapter";
18
+
19
+ export const getGqlAdapter = (): GraphqlAdapterType =>
20
+ new Adapter<
21
+ FetchGraphqlAdapterOptionsType,
22
+ GraphqlMethod,
23
+ number,
24
+ GraphQlExtraType,
25
+ QueryParamsType | string,
26
+ undefined,
27
+ GraphQlEndpointType
28
+ >({
29
+ name: "graphql",
30
+ defaultMethod: GraphqlMethod.POST,
31
+ defaultExtra: gqlExtra,
32
+ systemErrorStatus: 0,
33
+ systemErrorExtra: gqlExtra,
34
+ })
35
+ .onInitialize(({ client }) => {
36
+ client.setCacheKeyMapper((request) => {
37
+ return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;
38
+ });
39
+ client.setQueryKeyMapper((request) => {
40
+ return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;
41
+ });
42
+ client.setAbortKeyMapper((request) => {
43
+ return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${request.cancelable}`;
44
+ });
45
+ })
46
+ .setInternalErrorMapping((error) => [error])
47
+ .setDevtoolsEndpointGetter(gqlEndpointNameMapper)
48
+ .setEndpointMapper(gqlEndpointMapper)
49
+ .setFetcher(
50
+ async ({
51
+ request,
52
+ adapterOptions,
53
+ headers,
54
+ onError,
55
+ onResponseEnd,
56
+ onTimeoutError,
57
+ onRequestEnd,
58
+ createAbortListener,
59
+ getAbortController,
60
+ onResponseProgress,
61
+ onResponseStart,
62
+ onBeforeRequest,
63
+ onRequestStart,
64
+ onRequestProgress,
65
+ onSuccess,
66
+ }) => {
67
+ const { fullUrl, payload } = getRequestValues(request);
68
+
69
+ const controller = getAbortController();
70
+ const { timeout: timeoutMs = defaultTimeout, ...restOptions } = adapterOptions || {};
71
+
72
+ let timedOut = false;
73
+ let timeoutId: ReturnType<typeof setTimeout> | undefined;
74
+
75
+ const unmountListener = createAbortListener({
76
+ status: 0,
77
+ extra: gqlExtra,
78
+ });
79
+
80
+ if (timeoutMs > 0 && controller) {
81
+ timeoutId = setTimeout(() => {
82
+ timedOut = true;
83
+ unmountListener();
84
+ controller.abort();
85
+ }, timeoutMs);
86
+ }
87
+
88
+ onBeforeRequest();
89
+ onRequestStart();
90
+
91
+ try {
92
+ const init: RequestInit = {
93
+ method: request.method,
94
+ headers: headers as Record<string, string>,
95
+ signal: controller?.signal,
96
+ ...restOptions,
97
+ };
98
+
99
+ if (payload) {
100
+ init.body = payload;
101
+
102
+ if (typeof payload === "string") {
103
+ const total = new Blob([payload]).size;
104
+ onRequestProgress({ total, loaded: total } as ProgressEvent);
105
+ }
106
+ }
107
+
108
+ onRequestEnd();
109
+
110
+ const response = await fetch(fullUrl, init);
111
+
112
+ if (timeoutId) clearTimeout(timeoutId);
113
+
114
+ onResponseStart();
115
+
116
+ const responseHeaders: Record<string, string> = {};
117
+ response.headers.forEach((value, key) => {
118
+ responseHeaders[key] = value;
119
+ });
120
+
121
+ let body: string;
122
+
123
+ if (response.body && typeof response.body.getReader === "function") {
124
+ const reader = response.body.getReader();
125
+ const contentLength = parseInt(response.headers.get("content-length") || "0", 10);
126
+ let receivedLength = 0;
127
+ const chunks: Uint8Array[] = [];
128
+
129
+ // eslint-disable-next-line no-constant-condition
130
+ while (true) {
131
+ // eslint-disable-next-line no-await-in-loop
132
+ const { done, value } = await reader.read();
133
+ if (done) break;
134
+ chunks.push(value);
135
+ receivedLength += value.length;
136
+ onResponseProgress({ total: contentLength || receivedLength, loaded: receivedLength } as ProgressEvent);
137
+ }
138
+
139
+ const allChunks = new Uint8Array(receivedLength);
140
+ let position = 0;
141
+ // eslint-disable-next-line no-restricted-syntax
142
+ for (const chunk of chunks) {
143
+ allChunks.set(chunk, position);
144
+ position += chunk.length;
145
+ }
146
+ body = new TextDecoder().decode(allChunks);
147
+ } else {
148
+ body = await response.text();
149
+ }
150
+
151
+ onResponseEnd();
152
+ unmountListener();
153
+
154
+ const { status } = response;
155
+ const parsed = parseResponse(body);
156
+ const data = parsed?.data ?? null;
157
+ const errors = parsed?.errors || null;
158
+ const extensions = parsed?.extensions || {};
159
+ const failure = errors || status > 399 || status === 0;
160
+
161
+ if (failure) {
162
+ const error = errors || [getErrorMessage()];
163
+ onError({ error, status, extra: { headers: responseHeaders, extensions } });
164
+ } else {
165
+ onSuccess({
166
+ data,
167
+ error: errors,
168
+ status,
169
+ extra: { headers: responseHeaders, extensions },
170
+ });
171
+ }
172
+ } catch (err: any) {
173
+ if (timeoutId) clearTimeout(timeoutId);
174
+ unmountListener();
175
+
176
+ if (controller?.signal?.aborted) {
177
+ if (timedOut) {
178
+ onTimeoutError({ status: 0, extra: gqlExtra });
179
+ }
180
+ return;
181
+ }
182
+
183
+ onError({ error: err, status: 0, extra: gqlExtra });
184
+ }
185
+ },
186
+ );
@@ -2,3 +2,4 @@ export * from "./adapter";
2
2
  export * from "./adapter.types";
3
3
  export * from "./adapter.utils";
4
4
  export * from "./adapter.constants";
5
+ export * from "./http-adapter.fetch";
@@ -2,11 +2,7 @@
2
2
  "extends": "../../tsconfig.json",
3
3
  "compilerOptions": {
4
4
  "rootDir": "./src",
5
- "baseUrl": "./src",
6
- "paths": {
7
- "@browser-adapter": ["./adapter/http-adapter.browser.ts"],
8
- "@server-adapter": ["./adapter/http-adapter.browser.ts"]
9
- }
5
+ "baseUrl": "./src"
10
6
  },
11
- "exclude": ["dist", "jest.config.ts"]
7
+ "exclude": ["dist", "vite.config.ts"]
12
8
  }
package/tsconfig.json CHANGED
@@ -2,11 +2,7 @@
2
2
  "extends": "../../tsconfig.json",
3
3
  "compilerOptions": {
4
4
  "rootDir": ".",
5
- "baseUrl": "./src",
6
- "paths": {
7
- "@browser-adapter": ["./adapter/http-adapter.browser.ts"],
8
- "@server-adapter": ["./adapter/http-adapter.server.ts"]
9
- }
5
+ "baseUrl": "./src"
10
6
  },
11
- "exclude": ["node_modules", "dist", "jest.config.ts", "__tests__"]
7
+ "exclude": ["node_modules", "dist", "vite.config.ts", "__tests__"]
12
8
  }
package/vite.config.ts ADDED
@@ -0,0 +1,45 @@
1
+ /// <reference types="vitest/config" />
2
+ import { defineConfig } from "vite";
3
+ import dts from "vite-plugin-dts";
4
+ import tsconfigPaths from "vite-tsconfig-paths";
5
+ import path from "path";
6
+ import { getDtsCompilerOptionsForPackage } from "../../scripts/vite-dts-internal-paths";
7
+ import { getRollupExternalsFromPackageJson } from "../../scripts/vite-lib-externals-from-package";
8
+
9
+ export default defineConfig({
10
+ build: {
11
+ lib: {
12
+ entry: "src/index.ts",
13
+ formats: ["es"],
14
+ fileName: "index",
15
+ },
16
+ sourcemap: true,
17
+ minify: false,
18
+ rollupOptions: {
19
+ external: [...getRollupExternalsFromPackageJson(__dirname), "graphql", "graphql-tag"],
20
+ },
21
+ },
22
+ plugins: [
23
+ dts({
24
+ entryRoot: "src",
25
+ compilerOptions: getDtsCompilerOptionsForPackage(__dirname),
26
+ }),
27
+ tsconfigPaths(),
28
+ ],
29
+ test: {
30
+ globals: true,
31
+ environment: "node",
32
+ setupFiles: ["./__tests__/vitest.setup.ts"],
33
+ include: ["__tests__/**/*.spec.{ts,tsx}", "src/**/*.spec.{ts,tsx}"],
34
+ coverage: {
35
+ provider: "v8",
36
+ include: ["src/**/*.{ts,tsx}"],
37
+ exclude: ["**/*.spec.*", "**/types.*", "**/constants.*", "**/index.ts"],
38
+ },
39
+ alias: {
40
+ "@hyper-fetch/core": path.resolve(__dirname, "../core/src/index.ts"),
41
+ "@hyper-fetch/sockets": path.resolve(__dirname, "../sockets/src/index.ts"),
42
+ "@hyper-fetch/testing": path.resolve(__dirname, "../testing/src/index.ts"),
43
+ },
44
+ },
45
+ });
@@ -1,191 +0,0 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
-
22
- // src/adapter/http-adapter.browser.ts
23
- import {
24
- getResponseHeaders,
25
- parseResponse,
26
- getErrorMessage,
27
- Adapter,
28
- stringifyKey
29
- } from "@hyper-fetch/core";
30
- var getGqlAdapter = () => new Adapter({
31
- name: "graphql-browser",
32
- defaultMethod: "POST" /* POST */,
33
- defaultExtra: gqlExtra,
34
- systemErrorStatus: 0,
35
- systemErrorExtra: gqlExtra
36
- }).onInitialize(({ client }) => {
37
- client.setCacheKeyMapper((request) => {
38
- return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;
39
- });
40
- client.setQueryKeyMapper((request) => {
41
- return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;
42
- });
43
- client.setAbortKeyMapper((request) => {
44
- return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${request.cancelable}`;
45
- });
46
- }).setInternalErrorMapping((error) => [error]).setDevtoolsEndpointGetter(gqlEndpointNameMapper).setEndpointMapper(gqlEndpointMapper).setFetcher(
47
- (_0) => __async(null, [_0], function* ({
48
- request,
49
- adapterOptions,
50
- headers,
51
- onError,
52
- onResponseEnd,
53
- onTimeoutError,
54
- onRequestEnd,
55
- createAbortListener,
56
- onResponseProgress,
57
- onRequestProgress,
58
- onResponseStart,
59
- onBeforeRequest,
60
- onRequestStart,
61
- onSuccess
62
- }) {
63
- const { fullUrl, payload } = getRequestValues(request);
64
- const xhr = new XMLHttpRequest();
65
- xhr.timeout = defaultTimeout;
66
- const onAbort = () => xhr.abort();
67
- if (adapterOptions) {
68
- Object.entries(adapterOptions).forEach(([name, value]) => {
69
- xhr[name] = value;
70
- });
71
- }
72
- xhr.open(request.method, fullUrl, true);
73
- Object.entries(headers).forEach(([name, value]) => xhr.setRequestHeader(name, value));
74
- const unmountListener = createAbortListener({ status: 0, extra: gqlExtra, onAbort });
75
- xhr.upload.onprogress = onRequestProgress;
76
- xhr.onloadstart = () => {
77
- onRequestEnd();
78
- onResponseStart();
79
- };
80
- xhr.onprogress = onResponseProgress;
81
- xhr.onloadend = () => {
82
- onResponseEnd();
83
- unmountListener();
84
- };
85
- xhr.ontimeout = () => onTimeoutError({ status: 0, extra: gqlExtra });
86
- xhr.onreadystatechange = (e) => {
87
- var _a;
88
- const event = e;
89
- const finishedState = 4;
90
- if (event.target && event.target.readyState === finishedState) {
91
- const { status } = event.target;
92
- const response = parseResponse(event.target.response);
93
- const data = (_a = response.data) != null ? _a : null;
94
- const errors = (response == null ? void 0 : response.errors) || null;
95
- const extensions = (response == null ? void 0 : response.extensions) || {};
96
- const failure = (response == null ? void 0 : response.errors) || status > 399 || status === 0;
97
- const responseHeaders = getResponseHeaders(xhr.getAllResponseHeaders());
98
- if (failure) {
99
- const error = errors || [getErrorMessage()];
100
- onError({ error, status, extra: { headers: responseHeaders, extensions } });
101
- } else {
102
- onSuccess({
103
- data,
104
- error: errors,
105
- status,
106
- extra: { headers: responseHeaders, extensions }
107
- });
108
- }
109
- }
110
- };
111
- onBeforeRequest();
112
- onRequestStart();
113
- xhr.send(payload);
114
- })
115
- );
116
-
117
- // src/adapter/adapter.ts
118
- var GraphqlAdapter = () => {
119
- if (typeof XMLHttpRequest !== "undefined") {
120
- return getGqlAdapter();
121
- }
122
- return getGqlAdapter();
123
- };
124
-
125
- // src/adapter/adapter.types.ts
126
- var GraphqlMethod = /* @__PURE__ */ ((GraphqlMethod2) => {
127
- GraphqlMethod2["POST"] = "POST";
128
- GraphqlMethod2["GET"] = "GET";
129
- return GraphqlMethod2;
130
- })(GraphqlMethod || {});
131
-
132
- // src/adapter/adapter.utils.ts
133
- import { HttpMethods, stringifyQueryParams } from "@hyper-fetch/core";
134
- import { print, parse } from "graphql";
135
- var getRequestValues = (request) => {
136
- const isPostRequest = request.method === HttpMethods.POST;
137
- const query = request.endpoint;
138
- const variables = request.payload;
139
- const fullUrl = isPostRequest ? request.client.url : request.client.url + stringifyQueryParams({ query, variables });
140
- const payload = isPostRequest ? JSON.stringify({
141
- query,
142
- variables
143
- }) : null;
144
- return { fullUrl, payload };
145
- };
146
- var gqlEndpointMapper = (endpoint) => {
147
- if (typeof endpoint === "string") {
148
- return endpoint;
149
- }
150
- return print(endpoint);
151
- };
152
- var gqlEndpointNameMapper = (endpoint) => {
153
- var _a;
154
- try {
155
- const ast = parse(endpoint);
156
- const operationDefinition = ast.definitions.find(
157
- (def) => def.kind === "OperationDefinition"
158
- );
159
- if (operationDefinition) {
160
- if ((_a = operationDefinition.name) == null ? void 0 : _a.value) {
161
- return operationDefinition.name.value;
162
- }
163
- const selection = operationDefinition.selectionSet.selections[0];
164
- if ((selection == null ? void 0 : selection.kind) === "Field") {
165
- return selection.name.value;
166
- }
167
- }
168
- } catch (error) {
169
- }
170
- const clearedQuery = endpoint.replace(/(query|mutation|subscription)/, "").replace(/[{}().,:]/g, " ").trim();
171
- const [name] = clearedQuery.split(" ");
172
- return name || "graphql-request";
173
- };
174
-
175
- // src/adapter/adapter.constants.ts
176
- import { Time } from "@hyper-fetch/core";
177
- var defaultTimeout = Time.SEC * 5;
178
- var gqlExtra = {
179
- headers: {},
180
- extensions: {}
181
- };
182
- export {
183
- GraphqlAdapter,
184
- GraphqlMethod,
185
- defaultTimeout,
186
- getRequestValues,
187
- gqlEndpointMapper,
188
- gqlEndpointNameMapper,
189
- gqlExtra
190
- };
191
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/adapter/http-adapter.browser.ts", "../../src/adapter/adapter.ts", "../../src/adapter/adapter.types.ts", "../../src/adapter/adapter.utils.ts", "../../src/adapter/adapter.constants.ts"],
4
- "sourcesContent": ["import {\n getResponseHeaders,\n parseResponse,\n getErrorMessage,\n Adapter,\n QueryParamsType,\n stringifyKey,\n} from \"@hyper-fetch/core\";\n\nimport {\n gqlExtra,\n GraphqlAdapterType,\n defaultTimeout,\n getRequestValues,\n GraphqlMethod,\n GraphQlExtraType,\n GraphQlEndpointType,\n gqlEndpointMapper,\n gqlEndpointNameMapper,\n} from \"adapter\";\n\nexport const getGqlAdapter = (): GraphqlAdapterType =>\n new Adapter<\n Partial<XMLHttpRequest>,\n GraphqlMethod,\n number,\n GraphQlExtraType,\n QueryParamsType | string,\n undefined,\n GraphQlEndpointType\n >({\n name: \"graphql-browser\",\n defaultMethod: GraphqlMethod.POST,\n defaultExtra: gqlExtra,\n systemErrorStatus: 0,\n systemErrorExtra: gqlExtra,\n })\n .onInitialize(({ client }) => {\n client.setCacheKeyMapper((request) => {\n return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;\n });\n client.setQueryKeyMapper((request) => {\n return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${stringifyKey(request.params)}-${stringifyKey(request.queryParams)}`;\n });\n client.setAbortKeyMapper((request) => {\n return `${request.method}_${gqlEndpointNameMapper(request.endpoint)}-${request.cancelable}`;\n });\n })\n .setInternalErrorMapping((error) => [error])\n .setDevtoolsEndpointGetter(gqlEndpointNameMapper)\n .setEndpointMapper(gqlEndpointMapper)\n .setFetcher(\n async ({\n request,\n adapterOptions,\n headers,\n onError,\n onResponseEnd,\n onTimeoutError,\n onRequestEnd,\n createAbortListener,\n onResponseProgress,\n onRequestProgress,\n onResponseStart,\n onBeforeRequest,\n onRequestStart,\n onSuccess,\n }) => {\n const { fullUrl, payload } = getRequestValues(request);\n\n const xhr = new XMLHttpRequest();\n xhr.timeout = defaultTimeout;\n\n const onAbort = () => xhr.abort();\n\n // Inject xhr options\n if (adapterOptions) {\n Object.entries(adapterOptions).forEach(([name, value]) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n xhr[name] = value;\n });\n }\n\n // Open connection\n xhr.open(request.method, fullUrl, true);\n\n // Set Headers\n Object.entries(headers).forEach(([name, value]) => xhr.setRequestHeader(name, value as string));\n\n // Listen to abort signal\n const unmountListener = createAbortListener({ status: 0, extra: gqlExtra, onAbort });\n\n // Request handlers\n xhr.upload.onprogress = onRequestProgress;\n\n // Response handlers\n xhr.onloadstart = (): void => {\n onRequestEnd();\n onResponseStart();\n };\n\n xhr.onprogress = onResponseProgress;\n\n xhr.onloadend = () => {\n onResponseEnd();\n unmountListener();\n };\n\n /* istanbul ignore next */\n xhr.ontimeout = () => onTimeoutError({ status: 0, extra: gqlExtra });\n\n // Data handler\n xhr.onreadystatechange = (e: Event) => {\n const event = e as unknown as ProgressEvent<XMLHttpRequest>;\n const finishedState = 4;\n\n if (event.target && event.target.readyState === finishedState) {\n const { status } = event.target;\n const response = parseResponse(event.target.response);\n const data = response.data ?? null;\n const errors = response?.errors || null;\n const extensions = response?.extensions || {};\n const failure = response?.errors || status > 399 || status === 0;\n const responseHeaders = getResponseHeaders(xhr.getAllResponseHeaders());\n\n if (failure) {\n const error = errors || [getErrorMessage()];\n // delay to finish after onabort/ontimeout\n onError({ error, status, extra: { headers: responseHeaders, extensions } });\n } else {\n onSuccess({\n data,\n error: errors,\n status,\n extra: { headers: responseHeaders, extensions },\n });\n }\n }\n };\n\n // Start request\n onBeforeRequest();\n onRequestStart();\n\n xhr.send(payload);\n },\n );\n", "import * as browser from \"@browser-adapter\";\nimport * as server from \"@server-adapter\";\n\nimport { GraphqlAdapterType } from \"./adapter.types\";\n\nexport const GraphqlAdapter = (): GraphqlAdapterType => {\n if (typeof XMLHttpRequest !== \"undefined\") {\n return browser.getGqlAdapter();\n }\n return server.getGqlAdapter();\n};\n", "import { Adapter, EmptyTypes, QueryParamsType } from \"@hyper-fetch/core\";\nimport { DocumentNode } from \"graphql/language/ast\";\n\nexport enum GraphqlMethod {\n POST = \"POST\",\n GET = \"GET\",\n}\n\nexport type GraphQlExtraType = { headers: HeadersInit; extensions: Record<string, any> };\n\nexport type GraphQlEndpointType = string | DocumentNode;\n\nexport type GraphqlAdapterType = Adapter<\n Partial<XMLHttpRequest>,\n GraphqlMethod,\n number,\n GraphQlExtraType,\n QueryParamsType | string,\n undefined,\n GraphQlEndpointType,\n (endpoint: GraphQlEndpointType) => string\n>;\n\n// Extract\n\ntype GqlParamType = boolean | string | number | Record<string, any> | EmptyTypes;\n\nexport type ExtractGqlRouteParams<T extends string> = string extends T\n ? EmptyTypes\n : T extends `${string}query ${infer Parameters} {${infer QueryRest}`\n ? Parameters extends `${string}$${infer Param},${infer Rest}`\n ? GqlParameter<Param, Rest> &\n // eslint-disable-next-line @typescript-eslint/ban-types\n (ExtractGqlRouteParams<QueryRest> extends EmptyTypes ? {} : ExtractGqlRouteParams<QueryRest>)\n : Parameters extends `${string}$${infer Param})${infer Rest}`\n ? GqlParameter<Param, Rest> &\n // eslint-disable-next-line @typescript-eslint/ban-types\n (ExtractGqlRouteParams<QueryRest> extends EmptyTypes ? {} : ExtractGqlRouteParams<QueryRest>)\n : EmptyTypes\n : T extends `${string}$${infer Parameters},${infer Rest}`\n ? GqlParameter<Parameters, Rest>\n : T extends `${string}$${infer Parameters})${infer Rest}`\n ? GqlParameter<Parameters, Rest>\n : EmptyTypes;\n\nexport type GqlParameter<T extends string, Rest extends string> = T extends `${infer Param}:${string}!`\n ? { [k in Param]: GqlParamType } & (ExtractGqlRouteParams<Rest> extends EmptyTypes\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : ExtractGqlRouteParams<Rest>)\n : T extends `${infer Param}:${string}`\n ? { [k in Param]?: GqlParamType } & (ExtractGqlRouteParams<Rest> extends EmptyTypes\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : ExtractGqlRouteParams<Rest>)\n : EmptyTypes;\n", "import { RequestInstance, HttpMethods, stringifyQueryParams } from \"@hyper-fetch/core\";\nimport { print, parse, OperationDefinitionNode } from \"graphql\";\n\nimport { GraphQlEndpointType } from \"adapter\";\n\nexport const getRequestValues = <R extends RequestInstance>(request: R) => {\n const isPostRequest = request.method === HttpMethods.POST;\n\n const query = request.endpoint;\n const variables = request.payload;\n\n const fullUrl = isPostRequest ? request.client.url : request.client.url + stringifyQueryParams({ query, variables });\n\n const payload = isPostRequest\n ? JSON.stringify({\n query,\n variables,\n })\n : null;\n\n return { fullUrl, payload };\n};\n\nexport const gqlEndpointMapper = <E extends GraphQlEndpointType>(endpoint: E): string => {\n if (typeof endpoint === \"string\") {\n return endpoint;\n }\n return print(endpoint);\n};\n\nexport const gqlEndpointNameMapper = (endpoint: string): string => {\n try {\n const ast = parse(endpoint);\n const operationDefinition = ast.definitions.find(\n (def): def is OperationDefinitionNode => def.kind === \"OperationDefinition\",\n );\n\n if (operationDefinition) {\n if (operationDefinition.name?.value) {\n return operationDefinition.name.value;\n }\n\n const selection = operationDefinition.selectionSet.selections[0];\n if (selection?.kind === \"Field\") {\n return selection.name.value;\n }\n }\n } catch (error) {\n // We can ignore this error and just return some fallback\n }\n\n // Fallback for invalid gql queries or something else\n const clearedQuery = endpoint\n .replace(/(query|mutation|subscription)/, \"\")\n .replace(/[{}().,:]/g, \" \")\n .trim();\n const [name] = clearedQuery.split(\" \");\n\n return name || \"graphql-request\";\n};\n", "import { Time } from \"@hyper-fetch/core\";\n\nimport { GraphQlExtraType } from \"./adapter.types\";\n\nexport const defaultTimeout = Time.SEC * 5;\n\nexport const gqlExtra: GraphQlExtraType = {\n headers: {},\n extensions: {},\n};\n"],
5
- "mappings": "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",
6
- "names": ["GraphqlMethod"]
7
- }