@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 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.1.0",
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.1.0",
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) => requestListeners.push(listener),
375
- addResponseListener: (listener) => responseListeners.push(
376
- listener),
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
- addResponseListener: (listener: IResponseListener) => void
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avantstay/graphql-ts-client",
3
- "version": "12.1.0",
3
+ "version": "12.2.0",
4
4
  "description": "GraphQL Typescript Client Generator",
5
5
  "homepage": "https://github.com/avantstay/graphql-ts-client",
6
6
  "bugs": {
@@ -54,8 +54,32 @@ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
54
54
  errorsParser
55
55
  });
56
56
  const client = {
57
- addRequestListener: (listener) => requestListeners.push(listener),
58
- addResponseListener: (listener) => responseListeners.push(listener),
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) => requestListeners.push(listener),
109
- addResponseListener: (listener) => responseListeners.push(listener),
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
- addResponseListener: (listener: IResponseListener) => void
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
@@ -97,8 +97,10 @@ export interface BookSearchParamsSomeRequiredSelection {
97
97
  }
98
98
 
99
99
  export declare const myApiClient: {
100
- addRequestListener: (listener: IRequestListener) => void
101
- addResponseListener: (listener: IResponseListener) => void
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
@@ -83,8 +83,32 @@ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
83
83
  errorsParser
84
84
  });
85
85
  const myApiClient = {
86
- addRequestListener: (listener) => requestListeners.push(listener),
87
- addResponseListener: (listener) => responseListeners.push(listener),
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
  },
@@ -55,8 +55,32 @@ let apiEndpoint = getApiEndpointCreator({
55
55
  errorsParser
56
56
  });
57
57
  const myApiClient = {
58
- addRequestListener: (listener) => requestListeners.push(listener),
59
- addResponseListener: (listener) => responseListeners.push(listener),
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) => requestListeners.push(listener),
396
- addResponseListener: (listener) => responseListeners.push(
397
- listener),
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
- addResponseListener: (listener: IResponseListener) => void
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,