@avantstay/graphql-ts-client 12.1.0 → 12.2.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/dist/index.js +3 -3
- package/dist/index.mjs +27 -6
- package/package.json +1 -1
- package/src/__snapshots__/generateTypescriptClient.test.ts.snap +56 -6
- package/src/__testClient.d.ts +4 -2
- package/src/__testClient.js +26 -2
- package/src/__testClient.mjs +26 -2
- package/src/generateTypescriptClient.test.ts +50 -0
- package/src/generateTypescriptClient.ts +26 -5
package/dist/index.js
CHANGED
|
@@ -487,7 +487,7 @@ var prettier = __toESM(require("prettier"));
|
|
|
487
487
|
// package.json
|
|
488
488
|
var package_default = {
|
|
489
489
|
name: "@avantstay/graphql-ts-client",
|
|
490
|
-
version: "12.
|
|
490
|
+
version: "12.2.0",
|
|
491
491
|
description: "GraphQL Typescript Client Generator",
|
|
492
492
|
homepage: "https://github.com/avantstay/graphql-ts-client",
|
|
493
493
|
bugs: {
|
|
@@ -810,7 +810,7 @@ function generateClientCode(types, options) {
|
|
|
810
810
|
selection: false,
|
|
811
811
|
outputType: "js"
|
|
812
812
|
});
|
|
813
|
-
}).join("\n"), "\n\n // Schema Resolution Tree\n ").concat(getTypesTreeCode(forInputExtraction), "\n\n let verbose = ").concat(Boolean(options.verbose), "\n let headers = {}\n let url = '").concat(options.endpoint, "'\n let retryConfig = {\n max: 0,\n before: undefined,\n waitBeforeRetry: 0\n }\n let requestListeners = []\n let responseListeners = []\n let errorsParser = ").concat(options.errorsParser, "\n // noinspection JSUnusedLocalSymbols\n let apiEndpoint = getApiEndpointCreator({\n getClient: () => ({ url, headers, retryConfig }),\n requestListeners,\n responseListeners,\n maxAge: 30000,\n verbose,\n typesTree,\n formatGraphQL,\n errorsParser\n })\n\n export const ").concat(clientName, " = {\n addRequestListener: (listener) => requestListeners.push(listener),\n addResponseListener: (listener) => responseListeners.push(\n listener),\n setHeader: (key, value) => {\n headers[key] = value\n },\n setHeaders: (newHeaders) => {\n headers = newHeaders\n },\n setRetryConfig: (options) => {\n if (!Number.isInteger(options.max) || options.max < 0) {\n throw new Error('retryOptions.max should be a non-negative integer')\n }\n \n retryConfig = { \n max: options.max,\n waitBeforeRetry: options.waitBeforeRetry,\n before: options.before \n }\n },\n setUrl: (_url) => url = _url,\n queries: {\n ").concat(queries.map(function(query) {
|
|
813
|
+
}).join("\n"), "\n\n // Schema Resolution Tree\n ").concat(getTypesTreeCode(forInputExtraction), "\n\n let verbose = ").concat(Boolean(options.verbose), "\n let headers = {}\n let url = '").concat(options.endpoint, "'\n let retryConfig = {\n max: 0,\n before: undefined,\n waitBeforeRetry: 0\n }\n let requestListeners = []\n let responseListeners = []\n let errorsParser = ").concat(options.errorsParser, "\n // noinspection JSUnusedLocalSymbols\n let apiEndpoint = getApiEndpointCreator({\n getClient: () => ({ url, headers, retryConfig }),\n requestListeners,\n responseListeners,\n maxAge: 30000,\n verbose,\n typesTree,\n formatGraphQL,\n errorsParser\n })\n\n export const ").concat(clientName, " = {\n addRequestListener: (listener) => {\n requestListeners.push(listener)\n return () => {\n const index = requestListeners.indexOf(listener)\n if (index > -1) requestListeners.splice(index, 1)\n }\n },\n removeRequestListener: (listener) => {\n const index = requestListeners.indexOf(listener)\n if (index > -1) requestListeners.splice(index, 1)\n },\n addResponseListener: (listener) => {\n responseListeners.push(listener)\n return () => {\n const index = responseListeners.indexOf(listener)\n if (index > -1) responseListeners.splice(index, 1)\n }\n },\n removeResponseListener: (listener) => {\n const index = responseListeners.indexOf(listener)\n if (index > -1) responseListeners.splice(index, 1)\n },\n setHeader: (key, value) => {\n headers[key] = value\n },\n setHeaders: (newHeaders) => {\n headers = newHeaders\n },\n setRetryConfig: (options) => {\n if (!Number.isInteger(options.max) || options.max < 0) {\n throw new Error('retryOptions.max should be a non-negative integer')\n }\n \n retryConfig = { \n max: options.max,\n waitBeforeRetry: options.waitBeforeRetry,\n before: options.before \n }\n },\n setUrl: (_url) => url = _url,\n queries: {\n ").concat(queries.map(function(query) {
|
|
814
814
|
return gqlEndpointToCode("query", query, "js");
|
|
815
815
|
}).join(",\n"), "\n },\n mutations: {\n ").concat(mutations.map(function(mutation) {
|
|
816
816
|
return gqlEndpointToCode("mutation", mutation, "js");
|
|
@@ -842,7 +842,7 @@ function generateClientCode(types, options) {
|
|
|
842
842
|
selection: true,
|
|
843
843
|
outputType: "ts"
|
|
844
844
|
});
|
|
845
|
-
}).join("\n"), "\n \n export declare const ").concat(clientName, ": {\n addRequestListener: (listener: IRequestListener) => void\n addResponseListener: (listener: IResponseListener) => void\n setHeader: (key: string, value: string) => void\n setHeaders: (newHeaders: { [k: string]: string }) => void,\n setUrl: (url: string) => void,\n setRetryConfig: (options: { max: number, waitBeforeRetry?: number, before?: IResponseListener }) => void\n queries: {\n ").concat(queries.map(function(q) {
|
|
845
|
+
}).join("\n"), "\n \n export declare const ").concat(clientName, ": {\n addRequestListener: (listener: IRequestListener) => () => void\n removeRequestListener: (listener: IRequestListener) => void\n addResponseListener: (listener: IResponseListener) => () => void\n removeResponseListener: (listener: IResponseListener) => void\n setHeader: (key: string, value: string) => void\n setHeaders: (newHeaders: { [k: string]: string }) => void,\n setUrl: (url: string) => void,\n setRetryConfig: (options: { max: number, waitBeforeRetry?: number, before?: IResponseListener }) => void\n queries: {\n ").concat(queries.map(function(q) {
|
|
846
846
|
return gqlEndpointToCode("query", q, "ts");
|
|
847
847
|
}).join(",\n"), "\n },\n mutations: {\n ").concat(mutations.map(function(q) {
|
|
848
848
|
return gqlEndpointToCode("mutation", q, "ts");
|
package/dist/index.mjs
CHANGED
|
@@ -24,7 +24,7 @@ import * as prettier from "prettier";
|
|
|
24
24
|
// package.json
|
|
25
25
|
var package_default = {
|
|
26
26
|
name: "@avantstay/graphql-ts-client",
|
|
27
|
-
version: "12.
|
|
27
|
+
version: "12.2.0",
|
|
28
28
|
description: "GraphQL Typescript Client Generator",
|
|
29
29
|
homepage: "https://github.com/avantstay/graphql-ts-client",
|
|
30
30
|
bugs: {
|
|
@@ -371,9 +371,28 @@ function generateClientCode(types, options) {
|
|
|
371
371
|
})
|
|
372
372
|
|
|
373
373
|
export const ${clientName} = {
|
|
374
|
-
addRequestListener: (listener) =>
|
|
375
|
-
|
|
376
|
-
|
|
374
|
+
addRequestListener: (listener) => {
|
|
375
|
+
requestListeners.push(listener)
|
|
376
|
+
return () => {
|
|
377
|
+
const index = requestListeners.indexOf(listener)
|
|
378
|
+
if (index > -1) requestListeners.splice(index, 1)
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
removeRequestListener: (listener) => {
|
|
382
|
+
const index = requestListeners.indexOf(listener)
|
|
383
|
+
if (index > -1) requestListeners.splice(index, 1)
|
|
384
|
+
},
|
|
385
|
+
addResponseListener: (listener) => {
|
|
386
|
+
responseListeners.push(listener)
|
|
387
|
+
return () => {
|
|
388
|
+
const index = responseListeners.indexOf(listener)
|
|
389
|
+
if (index > -1) responseListeners.splice(index, 1)
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
removeResponseListener: (listener) => {
|
|
393
|
+
const index = responseListeners.indexOf(listener)
|
|
394
|
+
if (index > -1) responseListeners.splice(index, 1)
|
|
395
|
+
},
|
|
377
396
|
setHeader: (key, value) => {
|
|
378
397
|
headers[key] = value
|
|
379
398
|
},
|
|
@@ -434,8 +453,10 @@ function generateClientCode(types, options) {
|
|
|
434
453
|
${objectTypes.filter((it) => it.name !== "Query").map((it) => gqlSchemaToCode(it, { selection: true, outputType: "ts" })).join("\n")}
|
|
435
454
|
|
|
436
455
|
export declare const ${clientName}: {
|
|
437
|
-
addRequestListener: (listener: IRequestListener) => void
|
|
438
|
-
|
|
456
|
+
addRequestListener: (listener: IRequestListener) => () => void
|
|
457
|
+
removeRequestListener: (listener: IRequestListener) => void
|
|
458
|
+
addResponseListener: (listener: IResponseListener) => () => void
|
|
459
|
+
removeResponseListener: (listener: IResponseListener) => void
|
|
439
460
|
setHeader: (key: string, value: string) => void
|
|
440
461
|
setHeaders: (newHeaders: { [k: string]: string }) => void,
|
|
441
462
|
setUrl: (url: string) => void,
|
package/package.json
CHANGED
|
@@ -54,8 +54,32 @@ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
|
|
|
54
54
|
errorsParser
|
|
55
55
|
});
|
|
56
56
|
const client = {
|
|
57
|
-
addRequestListener: (listener) =>
|
|
58
|
-
|
|
57
|
+
addRequestListener: (listener) => {
|
|
58
|
+
requestListeners.push(listener);
|
|
59
|
+
return () => {
|
|
60
|
+
const index = requestListeners.indexOf(listener);
|
|
61
|
+
if (index > -1)
|
|
62
|
+
requestListeners.splice(index, 1);
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
removeRequestListener: (listener) => {
|
|
66
|
+
const index = requestListeners.indexOf(listener);
|
|
67
|
+
if (index > -1)
|
|
68
|
+
requestListeners.splice(index, 1);
|
|
69
|
+
},
|
|
70
|
+
addResponseListener: (listener) => {
|
|
71
|
+
responseListeners.push(listener);
|
|
72
|
+
return () => {
|
|
73
|
+
const index = responseListeners.indexOf(listener);
|
|
74
|
+
if (index > -1)
|
|
75
|
+
responseListeners.splice(index, 1);
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
removeResponseListener: (listener) => {
|
|
79
|
+
const index = responseListeners.indexOf(listener);
|
|
80
|
+
if (index > -1)
|
|
81
|
+
responseListeners.splice(index, 1);
|
|
82
|
+
},
|
|
59
83
|
setHeader: (key, value) => {
|
|
60
84
|
headers[key] = value;
|
|
61
85
|
},
|
|
@@ -105,8 +129,32 @@ let apiEndpoint = getApiEndpointCreator({
|
|
|
105
129
|
errorsParser
|
|
106
130
|
});
|
|
107
131
|
const client = {
|
|
108
|
-
addRequestListener: (listener) =>
|
|
109
|
-
|
|
132
|
+
addRequestListener: (listener) => {
|
|
133
|
+
requestListeners.push(listener);
|
|
134
|
+
return () => {
|
|
135
|
+
const index = requestListeners.indexOf(listener);
|
|
136
|
+
if (index > -1)
|
|
137
|
+
requestListeners.splice(index, 1);
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
removeRequestListener: (listener) => {
|
|
141
|
+
const index = requestListeners.indexOf(listener);
|
|
142
|
+
if (index > -1)
|
|
143
|
+
requestListeners.splice(index, 1);
|
|
144
|
+
},
|
|
145
|
+
addResponseListener: (listener) => {
|
|
146
|
+
responseListeners.push(listener);
|
|
147
|
+
return () => {
|
|
148
|
+
const index = responseListeners.indexOf(listener);
|
|
149
|
+
if (index > -1)
|
|
150
|
+
responseListeners.splice(index, 1);
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
removeResponseListener: (listener) => {
|
|
154
|
+
const index = responseListeners.indexOf(listener);
|
|
155
|
+
if (index > -1)
|
|
156
|
+
responseListeners.splice(index, 1);
|
|
157
|
+
},
|
|
110
158
|
setHeader: (key, value) => {
|
|
111
159
|
headers[key] = value;
|
|
112
160
|
},
|
|
@@ -167,8 +215,10 @@ export interface Query {
|
|
|
167
215
|
// Selection Types
|
|
168
216
|
|
|
169
217
|
export declare const client: {
|
|
170
|
-
addRequestListener: (listener: IRequestListener) => void
|
|
171
|
-
|
|
218
|
+
addRequestListener: (listener: IRequestListener) => () => void
|
|
219
|
+
removeRequestListener: (listener: IRequestListener) => void
|
|
220
|
+
addResponseListener: (listener: IResponseListener) => () => void
|
|
221
|
+
removeResponseListener: (listener: IResponseListener) => void
|
|
172
222
|
setHeader: (key: string, value: string) => void
|
|
173
223
|
setHeaders: (newHeaders: { [k: string]: string }) => void
|
|
174
224
|
setUrl: (url: string) => void
|
package/src/__testClient.d.ts
CHANGED
|
@@ -97,8 +97,10 @@ export interface BookSearchParamsSomeRequiredSelection {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
export declare const myApiClient: {
|
|
100
|
-
addRequestListener: (listener: IRequestListener) => void
|
|
101
|
-
|
|
100
|
+
addRequestListener: (listener: IRequestListener) => () => void
|
|
101
|
+
removeRequestListener: (listener: IRequestListener) => void
|
|
102
|
+
addResponseListener: (listener: IResponseListener) => () => void
|
|
103
|
+
removeResponseListener: (listener: IResponseListener) => void
|
|
102
104
|
setHeader: (key: string, value: string) => void
|
|
103
105
|
setHeaders: (newHeaders: { [k: string]: string }) => void
|
|
104
106
|
setUrl: (url: string) => void
|
package/src/__testClient.js
CHANGED
|
@@ -83,8 +83,32 @@ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
|
|
|
83
83
|
errorsParser
|
|
84
84
|
});
|
|
85
85
|
const myApiClient = {
|
|
86
|
-
addRequestListener: (listener) =>
|
|
87
|
-
|
|
86
|
+
addRequestListener: (listener) => {
|
|
87
|
+
requestListeners.push(listener);
|
|
88
|
+
return () => {
|
|
89
|
+
const index = requestListeners.indexOf(listener);
|
|
90
|
+
if (index > -1)
|
|
91
|
+
requestListeners.splice(index, 1);
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
removeRequestListener: (listener) => {
|
|
95
|
+
const index = requestListeners.indexOf(listener);
|
|
96
|
+
if (index > -1)
|
|
97
|
+
requestListeners.splice(index, 1);
|
|
98
|
+
},
|
|
99
|
+
addResponseListener: (listener) => {
|
|
100
|
+
responseListeners.push(listener);
|
|
101
|
+
return () => {
|
|
102
|
+
const index = responseListeners.indexOf(listener);
|
|
103
|
+
if (index > -1)
|
|
104
|
+
responseListeners.splice(index, 1);
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
removeResponseListener: (listener) => {
|
|
108
|
+
const index = responseListeners.indexOf(listener);
|
|
109
|
+
if (index > -1)
|
|
110
|
+
responseListeners.splice(index, 1);
|
|
111
|
+
},
|
|
88
112
|
setHeader: (key, value) => {
|
|
89
113
|
headers[key] = value;
|
|
90
114
|
},
|
package/src/__testClient.mjs
CHANGED
|
@@ -55,8 +55,32 @@ let apiEndpoint = getApiEndpointCreator({
|
|
|
55
55
|
errorsParser
|
|
56
56
|
});
|
|
57
57
|
const myApiClient = {
|
|
58
|
-
addRequestListener: (listener) =>
|
|
59
|
-
|
|
58
|
+
addRequestListener: (listener) => {
|
|
59
|
+
requestListeners.push(listener);
|
|
60
|
+
return () => {
|
|
61
|
+
const index = requestListeners.indexOf(listener);
|
|
62
|
+
if (index > -1)
|
|
63
|
+
requestListeners.splice(index, 1);
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
removeRequestListener: (listener) => {
|
|
67
|
+
const index = requestListeners.indexOf(listener);
|
|
68
|
+
if (index > -1)
|
|
69
|
+
requestListeners.splice(index, 1);
|
|
70
|
+
},
|
|
71
|
+
addResponseListener: (listener) => {
|
|
72
|
+
responseListeners.push(listener);
|
|
73
|
+
return () => {
|
|
74
|
+
const index = responseListeners.indexOf(listener);
|
|
75
|
+
if (index > -1)
|
|
76
|
+
responseListeners.splice(index, 1);
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
removeResponseListener: (listener) => {
|
|
80
|
+
const index = responseListeners.indexOf(listener);
|
|
81
|
+
if (index > -1)
|
|
82
|
+
responseListeners.splice(index, 1);
|
|
83
|
+
},
|
|
60
84
|
setHeader: (key, value) => {
|
|
61
85
|
headers[key] = value;
|
|
62
86
|
},
|
|
@@ -172,6 +172,56 @@ describe('Generated Client', () => {
|
|
|
172
172
|
expect(responseData?.response.errors.length).toBeGreaterThan(0)
|
|
173
173
|
})
|
|
174
174
|
|
|
175
|
+
it('removeRequestListener removes a previously added request listener', async () => {
|
|
176
|
+
let callCount = 0
|
|
177
|
+
const listener = () => { callCount++ }
|
|
178
|
+
|
|
179
|
+
client.addRequestListener(listener)
|
|
180
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
181
|
+
expect(callCount).toBe(1)
|
|
182
|
+
|
|
183
|
+
client.removeRequestListener(listener)
|
|
184
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
185
|
+
expect(callCount).toBe(1)
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('removeResponseListener removes a previously added response listener', async () => {
|
|
189
|
+
let callCount = 0
|
|
190
|
+
const listener = () => { callCount++ }
|
|
191
|
+
|
|
192
|
+
client.addResponseListener(listener)
|
|
193
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
194
|
+
expect(callCount).toBe(1)
|
|
195
|
+
|
|
196
|
+
client.removeResponseListener(listener)
|
|
197
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
198
|
+
expect(callCount).toBe(1)
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
it('addRequestListener returns an unsubscribe function', async () => {
|
|
202
|
+
let callCount = 0
|
|
203
|
+
const unsubscribe = client.addRequestListener(() => { callCount++ })
|
|
204
|
+
|
|
205
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
206
|
+
expect(callCount).toBe(1)
|
|
207
|
+
|
|
208
|
+
unsubscribe()
|
|
209
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
210
|
+
expect(callCount).toBe(1)
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
it('addResponseListener returns an unsubscribe function', async () => {
|
|
214
|
+
let callCount = 0
|
|
215
|
+
const unsubscribe = client.addResponseListener(() => { callCount++ })
|
|
216
|
+
|
|
217
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
218
|
+
expect(callCount).toBe(1)
|
|
219
|
+
|
|
220
|
+
unsubscribe()
|
|
221
|
+
await client.queries.booksWithoutParams({ title: true })
|
|
222
|
+
expect(callCount).toBe(1)
|
|
223
|
+
})
|
|
224
|
+
|
|
175
225
|
it('should generate proper code from SDL', () => {
|
|
176
226
|
const sdlString = `
|
|
177
227
|
type Query {
|
|
@@ -392,9 +392,28 @@ function generateClientCode(types: ReadonlyArray<IntrospectionType>, options: Om
|
|
|
392
392
|
})
|
|
393
393
|
|
|
394
394
|
export const ${clientName} = {
|
|
395
|
-
addRequestListener: (listener) =>
|
|
396
|
-
|
|
397
|
-
|
|
395
|
+
addRequestListener: (listener) => {
|
|
396
|
+
requestListeners.push(listener)
|
|
397
|
+
return () => {
|
|
398
|
+
const index = requestListeners.indexOf(listener)
|
|
399
|
+
if (index > -1) requestListeners.splice(index, 1)
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
removeRequestListener: (listener) => {
|
|
403
|
+
const index = requestListeners.indexOf(listener)
|
|
404
|
+
if (index > -1) requestListeners.splice(index, 1)
|
|
405
|
+
},
|
|
406
|
+
addResponseListener: (listener) => {
|
|
407
|
+
responseListeners.push(listener)
|
|
408
|
+
return () => {
|
|
409
|
+
const index = responseListeners.indexOf(listener)
|
|
410
|
+
if (index > -1) responseListeners.splice(index, 1)
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
removeResponseListener: (listener) => {
|
|
414
|
+
const index = responseListeners.indexOf(listener)
|
|
415
|
+
if (index > -1) responseListeners.splice(index, 1)
|
|
416
|
+
},
|
|
398
417
|
setHeader: (key, value) => {
|
|
399
418
|
headers[key] = value
|
|
400
419
|
},
|
|
@@ -464,8 +483,10 @@ function generateClientCode(types: ReadonlyArray<IntrospectionType>, options: Om
|
|
|
464
483
|
.join('\n')}
|
|
465
484
|
|
|
466
485
|
export declare const ${clientName}: {
|
|
467
|
-
addRequestListener: (listener: IRequestListener) => void
|
|
468
|
-
|
|
486
|
+
addRequestListener: (listener: IRequestListener) => () => void
|
|
487
|
+
removeRequestListener: (listener: IRequestListener) => void
|
|
488
|
+
addResponseListener: (listener: IResponseListener) => () => void
|
|
489
|
+
removeResponseListener: (listener: IResponseListener) => void
|
|
469
490
|
setHeader: (key: string, value: string) => void
|
|
470
491
|
setHeaders: (newHeaders: { [k: string]: string }) => void,
|
|
471
492
|
setUrl: (url: string) => void,
|