@avantstay/graphql-ts-client 10.5.1 → 10.6.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.
@@ -1,13 +1,13 @@
1
- import { C as ClientConfig, I as IResponseListener, E as Endpoint } from './types-85e628f6.js';
1
+ import { C as ClientConfig, I as IResponseListener, E as Endpoint } from './types-4ecbabdf.js';
2
2
 
3
- declare const getApiEndpointCreator: (apiConfig: {
4
- getClient: () => ClientConfig;
5
- responseListeners: IResponseListener[];
6
- typesTree: any;
7
- maxAge: number;
8
- verbose: boolean;
9
- formatGraphQL: any;
10
- errorsParser?: ((errors: any[]) => any) | undefined;
3
+ declare const getApiEndpointCreator: (apiConfig: {
4
+ getClient: () => ClientConfig;
5
+ responseListeners: IResponseListener[];
6
+ typesTree: any;
7
+ maxAge: number;
8
+ verbose: boolean;
9
+ formatGraphQL: any;
10
+ errorsParser?: ((errors: any[]) => any) | undefined;
11
11
  }) => <I = any, O = any, E = any>(kind: 'mutation' | 'query', queryName: string) => Endpoint<I, O, E>;
12
12
 
13
13
  export { getApiEndpointCreator };
package/dist/index.d.ts CHANGED
@@ -1,22 +1,24 @@
1
1
  import { PathLike } from 'fs';
2
- export { C as ClientConfig, c as DeepReplace, D as Defined, E as Endpoint, G as GraphQLClientError, I as IResponseListener, J as JsonOutput, L as LogInfo, M as Maybe, P as Projection, d as RawEndpoint, b as Replacement, R as ResponseData, a as ResponseListenerInfo, U as Unpacked } from './types-85e628f6.js';
2
+ export { C as ClientConfig, c as DeepReplace, D as Defined, E as Endpoint, G as GraphQLClientError, I as IResponseListener, J as JsonOutput, L as LogInfo, M as Maybe, P as Projection, d as RawEndpoint, b as Replacement, R as ResponseData, a as ResponseListenerInfo, U as Unpacked } from './types-4ecbabdf.js';
3
3
 
4
- type IClientOptions = {
5
- output?: PathLike;
6
- clientName?: string;
7
- headers?: {
8
- [key: string]: string;
9
- };
10
- introspectionEndpoint?: string;
11
- endpoint: string;
12
- verbose?: boolean;
13
- formatGraphQL?: boolean;
14
- skipCache?: boolean;
15
- errorsParser?: (errors: any[]) => any;
16
- };
17
- declare function generateTypescriptClient({ introspectionEndpoint, output, ...options }: IClientOptions): Promise<{
18
- typings: string;
19
- js: string;
20
- }>;
4
+ type IClientOptions = {
5
+ output?: PathLike;
6
+ clientName?: string;
7
+ headers?: {
8
+ [key: string]: string;
9
+ };
10
+ introspectionEndpoint?: string;
11
+ endpoint: string;
12
+ verbose?: boolean;
13
+ formatGraphQL?: boolean;
14
+ skipCache?: boolean;
15
+ errorsParser?: (errors: any[]) => any;
16
+ };
17
+ type Client = {
18
+ typings: string;
19
+ js: string;
20
+ };
21
+ declare function generateTypescriptClient({ introspectionEndpoint, ...options }: IClientOptions): Promise<Client>;
22
+ declare function generateTypescriptClientFromSDL(SDL: string, options: IClientOptions): Client;
21
23
 
22
- export { generateTypescriptClient };
24
+ export { generateTypescriptClient, generateTypescriptClientFromSDL };
package/dist/index.js CHANGED
@@ -464,6 +464,9 @@ __export(src_exports, {
464
464
  },
465
465
  generateTypescriptClient: function() {
466
466
  return generateTypescriptClient;
467
+ },
468
+ generateTypescriptClientFromSDL: function() {
469
+ return generateTypescriptClientFromSDL;
467
470
  }
468
471
  });
469
472
  module.exports = __toCommonJS(src_exports);
@@ -484,7 +487,7 @@ var prettier = __toESM(require("prettier"));
484
487
  // package.json
485
488
  var package_default = {
486
489
  name: "@avantstay/graphql-ts-client",
487
- version: "10.5.1",
490
+ version: "10.6.0",
488
491
  description: "GraphQL Typescript Client Generator",
489
492
  author: "Wellington Guimaraes",
490
493
  license: "MIT",
@@ -570,6 +573,9 @@ var package_default = {
570
573
  tslib: "^2.3.1",
571
574
  tsup: "^6.5.0",
572
575
  typescript: "^4.9.4"
576
+ },
577
+ publishConfig: {
578
+ "@avantstay:registry": "https://registry.npmjs.org/"
573
579
  }
574
580
  };
575
581
  // src/generateTypescriptClient.ts
@@ -906,19 +912,43 @@ function _fetchIntrospection() {
906
912
  });
907
913
  return _fetchIntrospection.apply(this, arguments);
908
914
  }
915
+ function generateClient(introspectionTypes, _param) {
916
+ var output = _param.output, restOptions = _objectWithoutProperties(_param, [
917
+ "output"
918
+ ]);
919
+ var _generateClientCode = generateClientCode(introspectionTypes, restOptions), js = _generateClientCode.js, typings = _generateClientCode.typings;
920
+ if (output && typeof output === "string") {
921
+ var outputDir = import_path.default.dirname(output);
922
+ if (!fs.existsSync(outputDir)) {
923
+ fs.mkdirSync(outputDir, {
924
+ recursive: true
925
+ });
926
+ }
927
+ fs.writeFileSync(output.replace(/(\.(ts|js))?$/, ".d.ts"), typings, {
928
+ encoding: "utf8"
929
+ });
930
+ fs.writeFileSync(output.replace(/(\.(ts|js))?$/, ".js"), js, {
931
+ encoding: "utf8"
932
+ });
933
+ }
934
+ return {
935
+ js: js,
936
+ typings: typings
937
+ };
938
+ }
909
939
  function generateTypescriptClient(_param) {
910
940
  return _generateTypescriptClient.apply(this, arguments);
911
941
  }
912
942
  function _generateTypescriptClient() {
913
943
  _generateTypescriptClient = _asyncToGenerator(function(_param) {
914
- var introspectionEndpoint, output, options, types, _generateClientCode, js, typings, outputDir;
944
+ var introspectionEndpoint, options, _options_clientName, introspectionTypes;
915
945
  return __generator(this, function(_state) {
916
946
  switch(_state.label){
917
947
  case 0:
918
- introspectionEndpoint = _param.introspectionEndpoint, output = _param.output, options = _objectWithoutProperties(_param, [
919
- "introspectionEndpoint",
920
- "output"
948
+ introspectionEndpoint = _param.introspectionEndpoint, options = _objectWithoutProperties(_param, [
949
+ "introspectionEndpoint"
921
950
  ]);
951
+ console.log("Generating TypeScript client (name: ".concat((_options_clientName = options.clientName) !== null && _options_clientName !== void 0 ? _options_clientName : "n/a", ")"));
922
952
  (0, import_axios_retry.default)(import_axios.default, {
923
953
  retries: 5,
924
954
  retryDelay: function(retryCount) {
@@ -932,34 +962,24 @@ function _generateTypescriptClient() {
932
962
  }))
933
963
  ];
934
964
  case 1:
935
- types = _state.sent();
936
- _generateClientCode = generateClientCode(types, options), js = _generateClientCode.js, typings = _generateClientCode.typings;
937
- if (output && typeof output === "string") {
938
- outputDir = import_path.default.dirname(output);
939
- if (!fs.existsSync(outputDir)) {
940
- fs.mkdirSync(outputDir, {
941
- recursive: true
942
- });
943
- }
944
- fs.writeFileSync(output.replace(/(\.(ts|js))?$/, ".d.ts"), typings, {
945
- encoding: "utf8"
946
- });
947
- fs.writeFileSync(output.replace(/(\.(ts|js))?$/, ".js"), js, {
948
- encoding: "utf8"
949
- });
950
- }
965
+ introspectionTypes = _state.sent();
951
966
  return [
952
967
  2,
953
- {
954
- js: js,
955
- typings: typings
956
- }
968
+ generateClient(introspectionTypes, options)
957
969
  ];
958
970
  }
959
971
  });
960
972
  });
961
973
  return _generateTypescriptClient.apply(this, arguments);
962
974
  }
975
+ function generateTypescriptClientFromSDL(SDL, options) {
976
+ var _data;
977
+ var _options_clientName;
978
+ console.log("Generating TypeScript client from SDL (name: ".concat((_options_clientName = options.clientName) !== null && _options_clientName !== void 0 ? _options_clientName : "n/a", ")"));
979
+ var graphqlSchemaObj = (0, import_graphql.buildSchema)(SDL);
980
+ var introspectionTypes = (_data = (0, import_graphql.graphqlSync)(graphqlSchemaObj, new import_graphql.Source((0, import_graphql.getIntrospectionQuery)())).data) === null || _data === void 0 ? void 0 : _data.__schema.types;
981
+ return generateClient(introspectionTypes, options);
982
+ }
963
983
  // src/types.ts
964
984
  var GraphQLClientError = /*#__PURE__*/ function(Error1) {
965
985
  _inherits(GraphQLClientError1, Error1);
@@ -993,5 +1013,6 @@ var GraphQLClientError = /*#__PURE__*/ function(Error1) {
993
1013
  // Annotate the CommonJS export names for ESM import in node:
994
1014
  0 && (module.exports = {
995
1015
  GraphQLClientError: GraphQLClientError,
996
- generateTypescriptClient: generateTypescriptClient
1016
+ generateTypescriptClient: generateTypescriptClient,
1017
+ generateTypescriptClientFromSDL: generateTypescriptClientFromSDL
997
1018
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avantstay/graphql-ts-client",
3
- "version": "10.5.1",
3
+ "version": "10.6.0",
4
4
  "description": "GraphQL Typescript Client Generator",
5
5
  "author": "Wellington Guimaraes",
6
6
  "license": "MIT",
@@ -8,8 +8,8 @@
8
8
  "typings": "dist/index.d.ts",
9
9
  "scripts": {
10
10
  "build": "tsup src/index.ts src/endpoint.ts --dts",
11
- "test": "cross-env GQL_CLIENT_DIST_PATH='.' jest --watch",
12
- "prepublishOnly": "yarn build"
11
+ "test": "cross-env GQL_CLIENT_DIST_PATH='.' jest --watch"
12
+
13
13
  },
14
14
  "files": [
15
15
  "dist",
@@ -86,5 +86,8 @@
86
86
  "tslib": "^2.3.1",
87
87
  "tsup": "^6.5.0",
88
88
  "typescript": "^4.9.4"
89
+ },
90
+ "publishConfig": {
91
+ "@avantstay:registry": "https://registry.npmjs.org/"
89
92
  }
90
93
  }
@@ -0,0 +1,133 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Generated Client should generate proper code from SDL 1`] = `
4
+ {
5
+ "js": "var __create = Object.create;
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
12
+ var __export = (target, all) => {
13
+ __markAsModule(target);
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __reExport = (target, module2, desc) => {
18
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
19
+ for (let key of __getOwnPropNames(module2))
20
+ if (!__hasOwnProp.call(target, key) && key !== "default")
21
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
22
+ }
23
+ return target;
24
+ };
25
+ var __toModule = (module2) => {
26
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
27
+ };
28
+ __export(exports, {
29
+ client: () => client,
30
+ default: () => stdin_default
31
+ });
32
+ var import_endpoint = __toModule(require("../dist/endpoint"));
33
+ const formatGraphQL = (query) => query;
34
+ const typesTree = {};
35
+ let verbose = false;
36
+ let headers = {};
37
+ let url = "https://sample.endpoint.com/graphl";
38
+ let retryConfig = {
39
+ max: 0,
40
+ before: void 0,
41
+ waitBeforeRetry: 0
42
+ };
43
+ let responseListeners = [];
44
+ let errorsParser = void 0;
45
+ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
46
+ getClient: () => ({ url, headers, retryConfig }),
47
+ responseListeners,
48
+ maxAge: 3e4,
49
+ verbose,
50
+ typesTree,
51
+ formatGraphQL,
52
+ errorsParser
53
+ });
54
+ const client = {
55
+ addResponseListener: (listener) => responseListeners.push(listener),
56
+ setHeader: (key, value) => {
57
+ headers[key] = value;
58
+ },
59
+ setHeaders: (newHeaders) => {
60
+ headers = newHeaders;
61
+ },
62
+ setRetryConfig: (options) => {
63
+ if (!Number.isInteger(options.max) || options.max < 0) {
64
+ throw new Error("retryOptions.max should be a non-negative integer");
65
+ }
66
+ retryConfig = {
67
+ max: options.max,
68
+ waitBeforeRetry: options.waitBeforeRetry,
69
+ before: options.before
70
+ };
71
+ },
72
+ setUrl: (_url) => url = _url,
73
+ queries: {
74
+ hello: apiEndpoint("query", "hello")
75
+ },
76
+ mutations: {}
77
+ };
78
+ var stdin_default = client;
79
+ ",
80
+ "typings": "// noinspection TypeScriptUnresolvedVariable, ES6UnusedImports, JSUnusedLocalSymbols, TypeScriptCheckImport
81
+ import { DeepRequired } from "ts-essentials"
82
+ import { Maybe, IResponseListener, Endpoint } from "../dist"
83
+
84
+ // Scalars
85
+ export type IDate = string | Date
86
+
87
+ // Enums
88
+
89
+ type AllEnums = never
90
+
91
+ // Args
92
+ export interface HelloArgs {}
93
+
94
+ // Input/Output Types
95
+
96
+ /**
97
+ * @deprecated Avoid directly using this interface. Instead, create a type alias based on the query/mutation return type.
98
+ */
99
+
100
+ export interface Query {
101
+ hello?: string
102
+ }
103
+
104
+ // Selection Types
105
+
106
+ export declare const client: {
107
+ addResponseListener: (listener: IResponseListener) => void
108
+ setHeader: (key: string, value: string) => void
109
+ setHeaders: (newHeaders: { [k: string]: string }) => void
110
+ setUrl: (url: string) => void
111
+ setRetryConfig: (options: {
112
+ max: number
113
+ waitBeforeRetry?: number
114
+ before?: IResponseListener
115
+ }) => void
116
+ queries: {
117
+ hello: Endpoint<
118
+ {
119
+ __headers?: { [key: string]: string }
120
+ __retry?: boolean
121
+ __alias?: string
122
+ },
123
+ string,
124
+ AllEnums
125
+ >
126
+ }
127
+ mutations: {}
128
+ }
129
+
130
+ export default client
131
+ ",
132
+ }
133
+ `;
@@ -1,6 +1,6 @@
1
1
  // noinspection TypeScriptUnresolvedVariable, ES6UnusedImports, JSUnusedLocalSymbols, TypeScriptCheckImport
2
2
  import { DeepRequired } from "ts-essentials"
3
- import { Maybe, IResponseListener, Endpoint } from "."
3
+ import { Maybe, IResponseListener, Endpoint } from "../dist"
4
4
 
5
5
  // Scalars
6
6
  export type IDate = string | Date
@@ -4,37 +4,31 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
7
8
  var __export = (target, all) => {
9
+ __markAsModule(target);
8
10
  for (var name in all)
9
11
  __defProp(target, name, { get: all[name], enumerable: true });
10
12
  };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
16
18
  }
17
- return to;
19
+ return target;
18
20
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var stdin_exports = {};
29
- __export(stdin_exports, {
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
30
25
  BookType: () => BookType,
31
26
  default: () => stdin_default,
32
27
  myApiClient: () => myApiClient
33
28
  });
34
- module.exports = __toCommonJS(stdin_exports);
35
- var import_endpoint = require("./endpoint");
36
- var import_standalone = require("prettier/standalone");
37
- var import_parser_graphql = __toESM(require("prettier/parser-graphql"));
29
+ var import_endpoint = __toModule(require("../dist/endpoint"));
30
+ var import_standalone = __toModule(require("prettier/standalone"));
31
+ var import_parser_graphql = __toModule(require("prettier/parser-graphql"));
38
32
  const formatGraphQL = (query) => (0, import_standalone.format)(query, { parser: "graphql", plugins: [import_parser_graphql.default] });
39
33
  const BookType = {
40
34
  dolor: "DOLOR",
@@ -87,9 +81,7 @@ let apiEndpoint = (0, import_endpoint.getApiEndpointCreator)({
87
81
  errorsParser
88
82
  });
89
83
  const myApiClient = {
90
- addResponseListener: (listener) => responseListeners.push(
91
- listener
92
- ),
84
+ addResponseListener: (listener) => responseListeners.push(listener),
93
85
  setHeader: (key, value) => {
94
86
  headers[key] = value;
95
87
  },
@@ -1,6 +1,6 @@
1
1
  import { ApolloServer } from 'apollo-server'
2
2
  import * as path from 'path'
3
- import { generateTypescriptClient } from './generateTypescriptClient'
3
+ import { generateTypescriptClient, generateTypescriptClientFromSDL } from './generateTypescriptClient'
4
4
  import { startServer } from './testServer'
5
5
  import { GraphQLClientError, ResponseListenerInfo } from './types'
6
6
 
@@ -124,4 +124,13 @@ describe('Generated Client', () => {
124
124
  expect(responseData?.queryName).toBe('failingQuery')
125
125
  expect(responseData?.response.errors.length).toBeGreaterThan(0)
126
126
  })
127
+
128
+ it('should generate proper code from SDL', ()=>{
129
+ const sdlString = `
130
+ type Query {
131
+ hello: String
132
+ }
133
+ `;
134
+ expect(generateTypescriptClientFromSDL(sdlString, {endpoint: 'https://sample.endpoint.com/graphl'})).toMatchSnapshot()
135
+ })
127
136
  })
@@ -5,6 +5,8 @@ import * as esbuild from 'esbuild'
5
5
  import * as fs from 'fs'
6
6
  import { PathLike } from 'fs'
7
7
  import {
8
+ buildSchema,
9
+ graphqlSync,
8
10
  getIntrospectionQuery,
9
11
  IntrospectionEnumType,
10
12
  IntrospectionField,
@@ -13,6 +15,7 @@ import {
13
15
  IntrospectionObjectType,
14
16
  IntrospectionOutputTypeRef,
15
17
  IntrospectionType,
18
+ Source,
16
19
  } from 'graphql'
17
20
  import { kebabCase } from 'lodash'
18
21
  import orderBy from 'lodash/orderBy'
@@ -479,7 +482,7 @@ function generateClientCode(types: ReadonlyArray<IntrospectionType>, options: Om
479
482
  return output
480
483
  }
481
484
 
482
- async function fetchIntrospection({ endpoint, headers }: FetchIntrospectionOptions) {
485
+ async function fetchIntrospection({ endpoint, headers }: FetchIntrospectionOptions): Promise<ReadonlyArray<IntrospectionType>> {
483
486
  const introspectionCacheFileName = `gql-ts-client__introspection__${kebabCase(endpoint)}.json`
484
487
  const introspectionCacheFilePath = path.resolve(tempDir, introspectionCacheFileName)
485
488
 
@@ -522,15 +525,10 @@ async function fetchIntrospection({ endpoint, headers }: FetchIntrospectionOptio
522
525
  return types
523
526
  }
524
527
 
525
- export async function generateTypescriptClient({ introspectionEndpoint, output, ...options }: IClientOptions): Promise<{ typings: string; js: string }> {
526
- axiosRetry(axios, { retries: 5, retryDelay: retryCount => 1000 * 2 ** retryCount })
527
-
528
- const types = await fetchIntrospection({
529
- ...options,
530
- endpoint: introspectionEndpoint || options.endpoint,
531
- })
528
+ type Client = { typings: string; js: string }
532
529
 
533
- const { js, typings } = generateClientCode(types, options)
530
+ function generateClient(introspectionTypes: ReadonlyArray<IntrospectionType>, {output,...restOptions}: IClientOptions): Client {
531
+ const { js, typings } = generateClientCode(introspectionTypes, restOptions)
534
532
 
535
533
  if (output && typeof output === 'string') {
536
534
  const outputDir = path.dirname(output)
@@ -545,3 +543,26 @@ export async function generateTypescriptClient({ introspectionEndpoint, output,
545
543
 
546
544
  return { js, typings }
547
545
  }
546
+
547
+ export async function generateTypescriptClient({ introspectionEndpoint, ...options }: IClientOptions): Promise<Client> {
548
+ console.log(`Generating TypeScript client (name: ${options.clientName ?? 'n/a'})`)
549
+
550
+ axiosRetry(axios, { retries: 5, retryDelay: retryCount => 1000 * 2 ** retryCount })
551
+
552
+ const introspectionTypes = await fetchIntrospection({
553
+ ...options,
554
+ endpoint: introspectionEndpoint || options.endpoint,
555
+ })
556
+
557
+ return generateClient(introspectionTypes, options)
558
+
559
+ }
560
+
561
+ export function generateTypescriptClientFromSDL(SDL: string, options: IClientOptions): Client {
562
+ console.log(`Generating TypeScript client from SDL (name: ${options.clientName ?? 'n/a'})`);
563
+
564
+ const graphqlSchemaObj = buildSchema(SDL);
565
+ const introspectionTypes = graphqlSync(graphqlSchemaObj, new Source(getIntrospectionQuery())).data?.__schema.types as IntrospectionType[]
566
+
567
+ return generateClient(introspectionTypes, options)
568
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { generateTypescriptClient } from './generateTypescriptClient'
1
+ export { generateTypescriptClient, generateTypescriptClientFromSDL } from './generateTypescriptClient'
2
2
 
3
3
  export * from './types'
@@ -1,69 +0,0 @@
1
- type Maybe<T> = null | undefined | T;
2
- type Defined<T> = Exclude<T, undefined>;
3
- type ResponseData = {
4
- data: any;
5
- warnings: any;
6
- headers: any;
7
- status?: number;
8
- errors: {
9
- message: string;
10
- }[];
11
- };
12
- type ResponseListenerInfo = {
13
- queryName: string;
14
- query: string;
15
- variables: any;
16
- response: ResponseData;
17
- };
18
- type IResponseListener = (info: ResponseListenerInfo) => void | Promise<void>;
19
- type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
20
- type Projection<Selection, Base, E = never> = Base extends Array<any> ? ArrayElement<Base> extends Date | string | number | boolean | null | undefined | E ? ArrayElement<Base>[] : Projection<Defined<Selection>, ArrayElement<Base>, E>[] : Base extends Date | string | number | boolean | null | E ? Selection extends undefined ? Base | undefined : Base : {
21
- [k in keyof Selection & keyof Base]: Selection[k] extends boolean ? Base[k] : Base[k] extends Array<infer A> ? Projection<Defined<Selection[k]>, A, E>[] : Projection<Defined<Selection[k]>, Base[k], E>;
22
- };
23
- type Unpacked<T> = T extends (infer U)[] ? U : T extends (...args: any[]) => infer U ? U : T extends Promise<infer U> ? U : T;
24
- type Replacement<M extends [any, any], T> = M extends any ? ([T] extends [M[0]] ? M[1] : never) : never;
25
- type DeepReplace<T, Ignore, M extends [any, any]> = {
26
- [P in keyof T]: T[P] extends M[0] ? T[P] extends Ignore ? T[P] extends object ? DeepReplace<T[P], Ignore, M> : T[P] : Replacement<M, T[P]> : T[P] extends object ? DeepReplace<T[P], Ignore, M> : T[P];
27
- };
28
- type RawEndpoint<I, O, E> = <S extends I>(jsonQuery?: S) => Promise<{
29
- data: Projection<S, O, E>;
30
- errors: any[];
31
- warnings: any[];
32
- headers: any;
33
- status: any;
34
- }>;
35
- type JsonOutput<O, ToBeIgnored> = DeepReplace<O, ToBeIgnored, [string | Date, string]>;
36
- type Endpoint<I, O, E> = (<S extends I>(jsonQuery?: S) => Promise<Projection<S, JsonOutput<O, E>, E>>) & {
37
- memo: <S extends I>(jsonQuery?: S) => Promise<Projection<S, JsonOutput<O, E>, E>>;
38
- memoRaw: RawEndpoint<I, JsonOutput<O, E>, E>;
39
- raw: RawEndpoint<I, JsonOutput<O, E>, E>;
40
- };
41
- type ClientConfig = {
42
- url: string;
43
- headers: {
44
- [key: string]: string;
45
- };
46
- retryConfig: {
47
- max: number;
48
- waitBeforeRetry?: number;
49
- before: IResponseListener;
50
- };
51
- };
52
- type LogInfo = {
53
- query: string;
54
- variables: any;
55
- formatGraphQL: any;
56
- kind: string;
57
- queryName: string;
58
- response?: any;
59
- error?: Error;
60
- duration: number;
61
- };
62
- declare class GraphQLClientError extends Error {
63
- responseData: ResponseData;
64
- constructor(responseData: ResponseData);
65
- get message(): string;
66
- get response(): ResponseData;
67
- }
68
-
69
- export { ClientConfig as C, Defined as D, Endpoint as E, GraphQLClientError as G, IResponseListener as I, JsonOutput as J, LogInfo as L, Maybe as M, Projection as P, ResponseData as R, Unpacked as U, ResponseListenerInfo as a, Replacement as b, DeepReplace as c, RawEndpoint as d };