@hyper-fetch/graphql 1.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.
package/.eslintrc.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": ["../../.eslintrc.json"],
3
+ "parserOptions": {
4
+ "project": ["./tsconfig.json", "./__tests__/tsconfig.json"]
5
+ }
6
+ }
package/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # ๐ŸŽก Hyper Fetch GraphQL
2
+
3
+ <p>
4
+ <a href="https://bettertyped.com/">
5
+ <img src="https://custom-icon-badges.demolab.com/static/v1?label=&message=BetterTyped&color=333&logo=BT" />
6
+ </a>
7
+ <a href="https://github.com/BetterTyped/hyper-fetch">
8
+ <img src="https://custom-icon-badges.demolab.com/github/stars/BetterTyped/hyper-fetch?logo=star&color=118ab2" />
9
+ </a>
10
+ <a href="https://github.com/BetterTyped/hyper-fetch/blob/main/License.md">
11
+ <img src="https://custom-icon-badges.demolab.com/github/license/BetterTyped/hyper-fetch?logo=law&color=yellow" />
12
+ </a>
13
+ <a href="https://www.npmjs.com/package/@hyper-fetch/graphql">
14
+ <img src="https://custom-icon-badges.demolab.com/npm/v/@hyper-fetch/graphql.svg?logo=npm&color=e76f51" />
15
+ </a>
16
+ <a href="https://api.codeclimate.com/v1/badges/eade9435e75ecea0c004/test_coverage">
17
+ <img src="https://api.codeclimate.com/v1/badges/eade9435e75ecea0c004/test_coverage" />
18
+ </a>
19
+ <a href="https://github.com/BetterTyped/hyper-fetch">
20
+ <img src="https://custom-icon-badges.demolab.com/badge/typescript-%23007ACC.svg?logo=typescript&logoColor=white" />
21
+ </a>
22
+ <a href="https://github.com/BetterTyped/hyper-fetch">
23
+ <img src="https://custom-icon-badges.demolab.com/badge/-GraphQL-E10098?logo=graphql&logoColor=white" />
24
+ </a>
25
+ <a href="https://www.npmjs.com/package/@hyper-fetch/graphql">
26
+ <img src="https://custom-icon-badges.demolab.com/bundlephobia/minzip/@hyper-fetch/graphql?color=64BC4B&logo=package" />
27
+ </a>
28
+ </p>
29
+
30
+ ## About
31
+
32
+ **`Hyper Fetch GraphQL`** is adapter for Hyper Fetch. It enables seamless communication with GraphQL APIs in Node.js and
33
+ browser environments, simplifying the retrieval and manipulation of data. Benefit from the convenience and efficiency of
34
+ Hyper Fetch for your GraphQL-powered projects.
35
+
36
+ ## Features
37
+
38
+ ๐Ÿ”ฎ **Simple setup** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/basic/setup)
39
+
40
+ ๐ŸŽฏ **Request cancellation** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/advanced/cancellation)
41
+
42
+ โœจ **Window Focus/Blur Events** -
43
+ [Read more](https://hyperfetch.bettertyped.com/docs/guides/react/core/window-focus-blur)
44
+
45
+ ๐Ÿš€ **Queueing** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/advanced/queueing)
46
+
47
+ ๐Ÿ’Ž **Automatic caching** - [Read more](https://hyperfetch.bettertyped.com/docs/documentation/core/cache)
48
+
49
+ ๐Ÿช„ **Persistence** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/advanced/persistence)
50
+
51
+ ๐ŸŽŠ **SSR Support** - [Read more](https://hyperfetch.bettertyped.com/docs/documentation/getting-started/environment)
52
+
53
+ ๐Ÿ”‹ **Offline First** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/advanced/offline)
54
+
55
+ ๐Ÿ“ก **Built-in adapter** - [Read more](https://hyperfetch.bettertyped.com/docs/documentation/core/adapter)
56
+
57
+ ๐Ÿงช **Easy to test** - [Read more](https://hyperfetch.bettertyped.com/docs/documentation/getting-started/testing)
58
+
59
+ ๐ŸŽŸ **Authentication** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/basic/authentication)
60
+
61
+ ๐Ÿ’ก **Prefetching** - [Read more](https://hyperfetch.bettertyped.com/docs/guides/advanced/prefetching)
62
+
63
+ ## Help me keep working on this project โค๏ธ
64
+
65
+ - [Become a Sponsor on GitHub](https://github.com/sponsors/prc5)
66
+
67
+ ## Sources
68
+
69
+ - #### [Installation](https://hyperfetch.bettertyped.com/docs/documentation/getting-started/installation)
70
+ - #### [Docs](https://hyperfetch.bettertyped.com/)
71
+ - #### [API](https://hyperfetch.bettertyped.com/api/)
72
+ - #### [NPM](https://www.npmjs.com/package/@hyper-fetch/graphql)
73
+ - #### [Guides](https://hyperfetch.bettertyped.com/guides/Basic/Setup)
@@ -0,0 +1,160 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var __async = (__this, __arguments, generator) => {
19
+ return new Promise((resolve, reject) => {
20
+ var fulfilled = (value) => {
21
+ try {
22
+ step(generator.next(value));
23
+ } catch (e) {
24
+ reject(e);
25
+ }
26
+ };
27
+ var rejected = (value) => {
28
+ try {
29
+ step(generator.throw(value));
30
+ } catch (e) {
31
+ reject(e);
32
+ }
33
+ };
34
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
35
+ step((generator = generator.apply(__this, __arguments)).next());
36
+ });
37
+ };
38
+
39
+ // src/index.ts
40
+ var src_exports = {};
41
+ __export(src_exports, {
42
+ GraphQlMethod: () => GraphQlMethod,
43
+ defaultTimeout: () => defaultTimeout,
44
+ getRequestValues: () => getRequestValues,
45
+ gqlExtra: () => gqlExtra,
46
+ graphqlAdapter: () => graphqlAdapter
47
+ });
48
+ module.exports = __toCommonJS(src_exports);
49
+
50
+ // src/adapter/adapter.browser.ts
51
+ var import_core = require("@hyper-fetch/core");
52
+ var adapter = (request, requestId) => __async(void 0, null, function* () {
53
+ const {
54
+ makeRequest,
55
+ config,
56
+ headers,
57
+ onError,
58
+ onResponseEnd,
59
+ onTimeoutError,
60
+ onRequestEnd,
61
+ createAbortListener,
62
+ onResponseProgress,
63
+ onRequestProgress,
64
+ onResponseStart,
65
+ onBeforeRequest,
66
+ onRequestStart,
67
+ onSuccess
68
+ } = yield (0, import_core.getAdapterBindings)(request, requestId, 0, gqlExtra);
69
+ const { fullUrl, payload, method } = getRequestValues(request);
70
+ return makeRequest((resolve) => {
71
+ const xhr = new XMLHttpRequest();
72
+ xhr.timeout = defaultTimeout;
73
+ const abort = () => xhr.abort();
74
+ Object.entries(config).forEach(([name, value]) => {
75
+ xhr[name] = value;
76
+ });
77
+ xhr.open(method, fullUrl, true);
78
+ Object.entries(headers).forEach(([name, value]) => xhr.setRequestHeader(name, value));
79
+ const unmountListener = createAbortListener(0, gqlExtra, abort, resolve);
80
+ xhr.upload.onprogress = onRequestProgress;
81
+ xhr.onloadstart = () => {
82
+ onRequestEnd();
83
+ onResponseStart();
84
+ };
85
+ xhr.onprogress = onResponseProgress;
86
+ xhr.onloadend = () => {
87
+ onResponseEnd();
88
+ unmountListener();
89
+ };
90
+ xhr.ontimeout = () => onTimeoutError(0, gqlExtra, resolve);
91
+ xhr.onreadystatechange = (e) => {
92
+ const event = e;
93
+ const finishedState = 4;
94
+ if (event.target && event.target.readyState === finishedState) {
95
+ const { status } = event.target;
96
+ const success = String(status).startsWith("2") || String(status).startsWith("3");
97
+ const responseHeaders = (0, import_core.getResponseHeaders)(xhr.getAllResponseHeaders());
98
+ if (success) {
99
+ const data = (0, import_core.parseResponse)(event.target.response);
100
+ onSuccess(data, status, { headers: responseHeaders }, resolve);
101
+ } else {
102
+ const data = (0, import_core.parseErrorResponse)(event.target.response);
103
+ onError(data, status, { headers: responseHeaders }, resolve);
104
+ }
105
+ }
106
+ };
107
+ onBeforeRequest();
108
+ onRequestStart();
109
+ xhr.send(payload);
110
+ });
111
+ });
112
+
113
+ // src/adapter/adapter.ts
114
+ var import_core2 = require("@hyper-fetch/core");
115
+ var import_printer = require("graphql/language/printer");
116
+ var graphqlAdapter = (client) => {
117
+ const adapter2 = (request, requestId) => __async(void 0, null, function* () {
118
+ if (typeof XMLHttpRequest !== "undefined") {
119
+ return adapter(request, requestId);
120
+ }
121
+ return adapter(request, requestId);
122
+ });
123
+ const mapper = (endpoint) => {
124
+ if (typeof endpoint === "string") {
125
+ return endpoint;
126
+ }
127
+ return (0, import_printer.print)(endpoint);
128
+ };
129
+ return client.setDefaultMethod(import_core2.HttpMethodsEnum.post).setEndpointMapper(mapper).setAdapter(() => adapter2);
130
+ };
131
+
132
+ // src/adapter/adapter.types.ts
133
+ var GraphQlMethod = /* @__PURE__ */ ((GraphQlMethod2) => {
134
+ GraphQlMethod2["POST"] = "POST";
135
+ GraphQlMethod2["GET"] = "GET";
136
+ return GraphQlMethod2;
137
+ })(GraphQlMethod || {});
138
+
139
+ // src/adapter/adapter.utils.ts
140
+ var import_core3 = require("@hyper-fetch/core");
141
+ var getRequestValues = (request) => {
142
+ const { method } = request;
143
+ const isPostRequest = request.method === import_core3.HttpMethodsEnum.post;
144
+ const query = request.endpoint;
145
+ const variables = request.data;
146
+ const fullUrl = isPostRequest ? request.client.url : request.client.url + request.client.stringifyQueryParams({ query, variables });
147
+ const payload = isPostRequest ? JSON.stringify({
148
+ query,
149
+ variables
150
+ }) : null;
151
+ return { fullUrl, payload, method };
152
+ };
153
+
154
+ // src/adapter/adapter.constants.ts
155
+ var import_core4 = require("@hyper-fetch/core");
156
+ var defaultTimeout = import_core4.DateInterval.second * 5;
157
+ var gqlExtra = {
158
+ headers: {}
159
+ };
160
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts", "../../src/adapter/adapter.browser.ts", "../../src/adapter/adapter.ts", "../../src/adapter/adapter.types.ts", "../../src/adapter/adapter.utils.ts", "../../src/adapter/adapter.constants.ts"],
4
+ "sourcesContent": ["// rollup client entry point\n\nexport * from \"./adapter\";\n", "import { getAdapterBindings, getResponseHeaders, parseResponse, parseErrorResponse } from \"@hyper-fetch/core\";\n\nimport { gqlExtra, GraphQLAdapterType, defaultTimeout, getRequestValues } from \"adapter\";\n\nexport const adapter: GraphQLAdapterType = async (request, requestId) => {\n const {\n makeRequest,\n config,\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 } = await getAdapterBindings<GraphQLAdapterType>(request, requestId, 0, gqlExtra);\n\n const { fullUrl, payload, method } = getRequestValues(request);\n\n return makeRequest((resolve) => {\n const xhr = new XMLHttpRequest();\n xhr.timeout = defaultTimeout;\n\n const abort = () => xhr.abort();\n\n // Inject xhr options\n Object.entries(config).forEach(([name, value]) => {\n xhr[name] = value;\n });\n\n // Open connection\n xhr.open(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(0, gqlExtra, abort, resolve);\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 xhr.ontimeout = () => onTimeoutError(0, gqlExtra, resolve);\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 success = String(status).startsWith(\"2\") || String(status).startsWith(\"3\");\n const responseHeaders = getResponseHeaders(xhr.getAllResponseHeaders());\n\n if (success) {\n const data = parseResponse(event.target.response);\n onSuccess(data, status, { headers: responseHeaders }, resolve);\n } else {\n // delay to finish after onabort/ontimeout\n const data = parseErrorResponse(event.target.response);\n onError(data, status, { headers: responseHeaders }, resolve);\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\";\nimport { HttpMethodsEnum, ClientInstance } from \"@hyper-fetch/core\";\nimport { print } from \"graphql/language/printer\";\n\nimport { GraphQLAdapterType, GraphQlEndpointType } from \"adapter\";\n\nexport const graphqlAdapter = (client: ClientInstance) => {\n const adapter: GraphQLAdapterType = async (request, requestId) => {\n if (typeof XMLHttpRequest !== \"undefined\") {\n return browser.adapter(request, requestId);\n }\n return server.adapter(request, requestId);\n };\n\n const mapper = <E extends GraphQlEndpointType>(endpoint: E): string => {\n if (typeof endpoint === \"string\") {\n return endpoint;\n }\n return print(endpoint);\n };\n\n return client\n .setDefaultMethod(HttpMethodsEnum.post)\n .setEndpointMapper(mapper)\n .setAdapter(() => adapter);\n};\n", "import { AdapterType, NegativeTypes, 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 };\n\nexport type GraphQlEndpointType = string | DocumentNode;\n\nexport type GraphQLAdapterType = AdapterType<\n Partial<XMLHttpRequest>,\n GraphQlMethod,\n number,\n GraphQlExtraType,\n QueryParamsType | string,\n GraphQlEndpointType\n>;\n\n// Extract\n\ntype GqlParamType = boolean | string | number | Record<string, any> | NegativeTypes;\n\nexport type ExtractGqlRouteParams<T extends string> = string extends T\n ? NegativeTypes\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 NegativeTypes ? {} : 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 NegativeTypes ? {} : ExtractGqlRouteParams<QueryRest>)\n : NegativeTypes\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 : NegativeTypes;\n\nexport type GqlParameter<T extends string, Rest extends string> = T extends `${infer Param}:${string}!`\n ? { [k in Param]: GqlParamType } & (ExtractGqlRouteParams<Rest> extends NegativeTypes\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 NegativeTypes\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : ExtractGqlRouteParams<Rest>)\n : NegativeTypes;\n", "import { RequestInstance, HttpMethodsEnum } from \"@hyper-fetch/core\";\n\nexport const getRequestValues = (request: RequestInstance) => {\n const { method } = request;\n\n const isPostRequest = request.method === HttpMethodsEnum.post;\n\n const query = request.endpoint;\n const variables = request.data;\n\n const fullUrl = isPostRequest\n ? request.client.url\n : request.client.url + request.client.stringifyQueryParams({ query, variables });\n\n const payload = isPostRequest\n ? JSON.stringify({\n query,\n variables,\n })\n : null;\n\n return { fullUrl, payload, method };\n};\n", "import { DateInterval } from \"@hyper-fetch/core\";\n\nimport { GraphQlExtraType } from \"./adapter.types\";\n\nexport const defaultTimeout = DateInterval.second * 5;\n\nexport const gqlExtra: GraphQlExtraType = {\n headers: {},\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_core", "adapter", "GraphQlMethod", "import_core", "import_core"]
7
+ }
@@ -0,0 +1,139 @@
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/adapter.browser.ts
23
+ import { getAdapterBindings, getResponseHeaders, parseResponse, parseErrorResponse } from "@hyper-fetch/core";
24
+ var adapter = (request, requestId) => __async(void 0, null, function* () {
25
+ const {
26
+ makeRequest,
27
+ config,
28
+ headers,
29
+ onError,
30
+ onResponseEnd,
31
+ onTimeoutError,
32
+ onRequestEnd,
33
+ createAbortListener,
34
+ onResponseProgress,
35
+ onRequestProgress,
36
+ onResponseStart,
37
+ onBeforeRequest,
38
+ onRequestStart,
39
+ onSuccess
40
+ } = yield getAdapterBindings(request, requestId, 0, gqlExtra);
41
+ const { fullUrl, payload, method } = getRequestValues(request);
42
+ return makeRequest((resolve) => {
43
+ const xhr = new XMLHttpRequest();
44
+ xhr.timeout = defaultTimeout;
45
+ const abort = () => xhr.abort();
46
+ Object.entries(config).forEach(([name, value]) => {
47
+ xhr[name] = value;
48
+ });
49
+ xhr.open(method, fullUrl, true);
50
+ Object.entries(headers).forEach(([name, value]) => xhr.setRequestHeader(name, value));
51
+ const unmountListener = createAbortListener(0, gqlExtra, abort, resolve);
52
+ xhr.upload.onprogress = onRequestProgress;
53
+ xhr.onloadstart = () => {
54
+ onRequestEnd();
55
+ onResponseStart();
56
+ };
57
+ xhr.onprogress = onResponseProgress;
58
+ xhr.onloadend = () => {
59
+ onResponseEnd();
60
+ unmountListener();
61
+ };
62
+ xhr.ontimeout = () => onTimeoutError(0, gqlExtra, resolve);
63
+ xhr.onreadystatechange = (e) => {
64
+ const event = e;
65
+ const finishedState = 4;
66
+ if (event.target && event.target.readyState === finishedState) {
67
+ const { status } = event.target;
68
+ const success = String(status).startsWith("2") || String(status).startsWith("3");
69
+ const responseHeaders = getResponseHeaders(xhr.getAllResponseHeaders());
70
+ if (success) {
71
+ const data = parseResponse(event.target.response);
72
+ onSuccess(data, status, { headers: responseHeaders }, resolve);
73
+ } else {
74
+ const data = parseErrorResponse(event.target.response);
75
+ onError(data, status, { headers: responseHeaders }, resolve);
76
+ }
77
+ }
78
+ };
79
+ onBeforeRequest();
80
+ onRequestStart();
81
+ xhr.send(payload);
82
+ });
83
+ });
84
+
85
+ // src/adapter/adapter.ts
86
+ import { HttpMethodsEnum } from "@hyper-fetch/core";
87
+ import { print } from "graphql/language/printer";
88
+ var graphqlAdapter = (client) => {
89
+ const adapter2 = (request, requestId) => __async(void 0, null, function* () {
90
+ if (typeof XMLHttpRequest !== "undefined") {
91
+ return adapter(request, requestId);
92
+ }
93
+ return adapter(request, requestId);
94
+ });
95
+ const mapper = (endpoint) => {
96
+ if (typeof endpoint === "string") {
97
+ return endpoint;
98
+ }
99
+ return print(endpoint);
100
+ };
101
+ return client.setDefaultMethod(HttpMethodsEnum.post).setEndpointMapper(mapper).setAdapter(() => adapter2);
102
+ };
103
+
104
+ // src/adapter/adapter.types.ts
105
+ var GraphQlMethod = /* @__PURE__ */ ((GraphQlMethod2) => {
106
+ GraphQlMethod2["POST"] = "POST";
107
+ GraphQlMethod2["GET"] = "GET";
108
+ return GraphQlMethod2;
109
+ })(GraphQlMethod || {});
110
+
111
+ // src/adapter/adapter.utils.ts
112
+ import { HttpMethodsEnum as HttpMethodsEnum2 } from "@hyper-fetch/core";
113
+ var getRequestValues = (request) => {
114
+ const { method } = request;
115
+ const isPostRequest = request.method === HttpMethodsEnum2.post;
116
+ const query = request.endpoint;
117
+ const variables = request.data;
118
+ const fullUrl = isPostRequest ? request.client.url : request.client.url + request.client.stringifyQueryParams({ query, variables });
119
+ const payload = isPostRequest ? JSON.stringify({
120
+ query,
121
+ variables
122
+ }) : null;
123
+ return { fullUrl, payload, method };
124
+ };
125
+
126
+ // src/adapter/adapter.constants.ts
127
+ import { DateInterval } from "@hyper-fetch/core";
128
+ var defaultTimeout = DateInterval.second * 5;
129
+ var gqlExtra = {
130
+ headers: {}
131
+ };
132
+ export {
133
+ GraphQlMethod,
134
+ defaultTimeout,
135
+ getRequestValues,
136
+ gqlExtra,
137
+ graphqlAdapter
138
+ };
139
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/adapter/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 { getAdapterBindings, getResponseHeaders, parseResponse, parseErrorResponse } from \"@hyper-fetch/core\";\n\nimport { gqlExtra, GraphQLAdapterType, defaultTimeout, getRequestValues } from \"adapter\";\n\nexport const adapter: GraphQLAdapterType = async (request, requestId) => {\n const {\n makeRequest,\n config,\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 } = await getAdapterBindings<GraphQLAdapterType>(request, requestId, 0, gqlExtra);\n\n const { fullUrl, payload, method } = getRequestValues(request);\n\n return makeRequest((resolve) => {\n const xhr = new XMLHttpRequest();\n xhr.timeout = defaultTimeout;\n\n const abort = () => xhr.abort();\n\n // Inject xhr options\n Object.entries(config).forEach(([name, value]) => {\n xhr[name] = value;\n });\n\n // Open connection\n xhr.open(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(0, gqlExtra, abort, resolve);\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 xhr.ontimeout = () => onTimeoutError(0, gqlExtra, resolve);\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 success = String(status).startsWith(\"2\") || String(status).startsWith(\"3\");\n const responseHeaders = getResponseHeaders(xhr.getAllResponseHeaders());\n\n if (success) {\n const data = parseResponse(event.target.response);\n onSuccess(data, status, { headers: responseHeaders }, resolve);\n } else {\n // delay to finish after onabort/ontimeout\n const data = parseErrorResponse(event.target.response);\n onError(data, status, { headers: responseHeaders }, resolve);\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\";\nimport { HttpMethodsEnum, ClientInstance } from \"@hyper-fetch/core\";\nimport { print } from \"graphql/language/printer\";\n\nimport { GraphQLAdapterType, GraphQlEndpointType } from \"adapter\";\n\nexport const graphqlAdapter = (client: ClientInstance) => {\n const adapter: GraphQLAdapterType = async (request, requestId) => {\n if (typeof XMLHttpRequest !== \"undefined\") {\n return browser.adapter(request, requestId);\n }\n return server.adapter(request, requestId);\n };\n\n const mapper = <E extends GraphQlEndpointType>(endpoint: E): string => {\n if (typeof endpoint === \"string\") {\n return endpoint;\n }\n return print(endpoint);\n };\n\n return client\n .setDefaultMethod(HttpMethodsEnum.post)\n .setEndpointMapper(mapper)\n .setAdapter(() => adapter);\n};\n", "import { AdapterType, NegativeTypes, 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 };\n\nexport type GraphQlEndpointType = string | DocumentNode;\n\nexport type GraphQLAdapterType = AdapterType<\n Partial<XMLHttpRequest>,\n GraphQlMethod,\n number,\n GraphQlExtraType,\n QueryParamsType | string,\n GraphQlEndpointType\n>;\n\n// Extract\n\ntype GqlParamType = boolean | string | number | Record<string, any> | NegativeTypes;\n\nexport type ExtractGqlRouteParams<T extends string> = string extends T\n ? NegativeTypes\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 NegativeTypes ? {} : 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 NegativeTypes ? {} : ExtractGqlRouteParams<QueryRest>)\n : NegativeTypes\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 : NegativeTypes;\n\nexport type GqlParameter<T extends string, Rest extends string> = T extends `${infer Param}:${string}!`\n ? { [k in Param]: GqlParamType } & (ExtractGqlRouteParams<Rest> extends NegativeTypes\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 NegativeTypes\n ? // eslint-disable-next-line @typescript-eslint/ban-types\n {}\n : ExtractGqlRouteParams<Rest>)\n : NegativeTypes;\n", "import { RequestInstance, HttpMethodsEnum } from \"@hyper-fetch/core\";\n\nexport const getRequestValues = (request: RequestInstance) => {\n const { method } = request;\n\n const isPostRequest = request.method === HttpMethodsEnum.post;\n\n const query = request.endpoint;\n const variables = request.data;\n\n const fullUrl = isPostRequest\n ? request.client.url\n : request.client.url + request.client.stringifyQueryParams({ query, variables });\n\n const payload = isPostRequest\n ? JSON.stringify({\n query,\n variables,\n })\n : null;\n\n return { fullUrl, payload, method };\n};\n", "import { DateInterval } from \"@hyper-fetch/core\";\n\nimport { GraphQlExtraType } from \"./adapter.types\";\n\nexport const defaultTimeout = DateInterval.second * 5;\n\nexport const gqlExtra: GraphQlExtraType = {\n headers: {},\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["adapter", "GraphQlMethod", "HttpMethodsEnum"]
7
+ }