@vertikalx/vtx-backend-client 1.0.0-dev.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 (52) hide show
  1. package/LICENSE.md +12 -0
  2. package/index.d.ts +25 -0
  3. package/index.js +44 -0
  4. package/index.js.map +1 -0
  5. package/index.ts +65 -0
  6. package/package.json +15 -0
  7. package/runtime/batcher.d.ts +36 -0
  8. package/runtime/batcher.js +123 -0
  9. package/runtime/batcher.js.map +1 -0
  10. package/runtime/batcher.ts +275 -0
  11. package/runtime/createClient.d.ts +23 -0
  12. package/runtime/createClient.js +28 -0
  13. package/runtime/createClient.js.map +1 -0
  14. package/runtime/createClient.ts +68 -0
  15. package/runtime/error.d.ts +15 -0
  16. package/runtime/error.js +19 -0
  17. package/runtime/error.js.map +1 -0
  18. package/runtime/error.ts +29 -0
  19. package/runtime/fetcher.d.ts +10 -0
  20. package/runtime/fetcher.js +68 -0
  21. package/runtime/fetcher.js.map +1 -0
  22. package/runtime/fetcher.ts +97 -0
  23. package/runtime/generateGraphqlOperation.d.ts +30 -0
  24. package/runtime/generateGraphqlOperation.js +134 -0
  25. package/runtime/generateGraphqlOperation.js.map +1 -0
  26. package/runtime/generateGraphqlOperation.ts +225 -0
  27. package/runtime/index.d.ts +11 -0
  28. package/runtime/index.js +17 -0
  29. package/runtime/index.js.map +1 -0
  30. package/runtime/index.ts +13 -0
  31. package/runtime/linkTypeMap.d.ts +9 -0
  32. package/runtime/linkTypeMap.js +95 -0
  33. package/runtime/linkTypeMap.js.map +1 -0
  34. package/runtime/linkTypeMap.ts +156 -0
  35. package/runtime/typeSelection.d.ts +28 -0
  36. package/runtime/typeSelection.js +3 -0
  37. package/runtime/typeSelection.js.map +1 -0
  38. package/runtime/typeSelection.ts +95 -0
  39. package/runtime/types.d.ts +55 -0
  40. package/runtime/types.js +3 -0
  41. package/runtime/types.js.map +1 -0
  42. package/runtime/types.ts +69 -0
  43. package/schema.d.ts +406 -0
  44. package/schema.graphql +162 -0
  45. package/schema.js +109 -0
  46. package/schema.js.map +1 -0
  47. package/schema.ts +420 -0
  48. package/tsconfig.lib.tsbuildinfo +1 -0
  49. package/types.d.ts +207 -0
  50. package/types.js +518 -0
  51. package/types.js.map +1 -0
  52. package/types.ts +515 -0
@@ -0,0 +1,68 @@
1
+ // @ts-nocheck
2
+
3
+ import { type BatchOptions, createFetcher } from './fetcher'
4
+ import type { ExecutionResult, LinkedType } from './types'
5
+ import {
6
+ generateGraphqlOperation,
7
+ type GraphqlOperation,
8
+ } from './generateGraphqlOperation'
9
+
10
+ export type Headers =
11
+ | HeadersInit
12
+ | (() => HeadersInit)
13
+ | (() => Promise<HeadersInit>)
14
+
15
+ export type BaseFetcher = (
16
+ operation: GraphqlOperation | GraphqlOperation[],
17
+ ) => Promise<ExecutionResult | ExecutionResult[]>
18
+
19
+ export type ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {
20
+ url?: string
21
+ batch?: BatchOptions | boolean
22
+ fetcher?: BaseFetcher
23
+ fetch?: Function
24
+ headers?: Headers
25
+ }
26
+
27
+ export const createClient = ({
28
+ queryRoot,
29
+ mutationRoot,
30
+ subscriptionRoot,
31
+ ...options
32
+ }: ClientOptions & {
33
+ queryRoot?: LinkedType
34
+ mutationRoot?: LinkedType
35
+ subscriptionRoot?: LinkedType
36
+ }) => {
37
+ const fetcher = createFetcher(options)
38
+ const client: {
39
+ query?: Function
40
+ mutation?: Function
41
+ } = {}
42
+
43
+ if (queryRoot) {
44
+ client.query = (request: any) => {
45
+ if (!queryRoot) throw new Error('queryRoot argument is missing')
46
+
47
+ const resultPromise = fetcher(
48
+ generateGraphqlOperation('query', queryRoot, request),
49
+ )
50
+
51
+ return resultPromise
52
+ }
53
+ }
54
+ if (mutationRoot) {
55
+ client.mutation = (request: any) => {
56
+ if (!mutationRoot)
57
+ throw new Error('mutationRoot argument is missing')
58
+
59
+ const resultPromise = fetcher(
60
+ generateGraphqlOperation('mutation', mutationRoot, request),
61
+ )
62
+
63
+ return resultPromise
64
+ }
65
+ }
66
+
67
+ return client as any
68
+ }
@@ -0,0 +1,15 @@
1
+ export declare class GenqlError extends Error {
2
+ errors: Array<GraphqlError>;
3
+ data?: any;
4
+ constructor(errors: any[], data: any);
5
+ }
6
+ interface GraphqlError {
7
+ message: string;
8
+ locations?: Array<{
9
+ line: number;
10
+ column: number;
11
+ }>;
12
+ path?: string[];
13
+ extensions?: Record<string, any>;
14
+ }
15
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenqlError = void 0;
4
+ class GenqlError extends Error {
5
+ constructor(errors, data) {
6
+ let message = Array.isArray(errors)
7
+ ? errors.map((x) => x?.message || '').join('\n')
8
+ : '';
9
+ if (!message) {
10
+ message = 'GraphQL error';
11
+ }
12
+ super(message);
13
+ this.errors = [];
14
+ this.errors = errors;
15
+ this.data = data;
16
+ }
17
+ }
18
+ exports.GenqlError = GenqlError;
19
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../libs/vtx-backend-client/runtime/error.ts"],"names":[],"mappings":";;;AACA,MAAa,UAAW,SAAQ,KAAK;IAMjC,YAAY,MAAa,EAAE,IAAS;QAChC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,EAAE,CAAA;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,eAAe,CAAA;QAC7B,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,CAAA;QAZlB,WAAM,GAAwB,EAAE,CAAA;QAa5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;CACJ;AAjBD,gCAiBC"}
@@ -0,0 +1,29 @@
1
+ // @ts-nocheck
2
+ export class GenqlError extends Error {
3
+ errors: Array<GraphqlError> = []
4
+ /**
5
+ * Partial data returned by the server
6
+ */
7
+ data?: any
8
+ constructor(errors: any[], data: any) {
9
+ let message = Array.isArray(errors)
10
+ ? errors.map((x) => x?.message || '').join('\n')
11
+ : ''
12
+ if (!message) {
13
+ message = 'GraphQL error'
14
+ }
15
+ super(message)
16
+ this.errors = errors
17
+ this.data = data
18
+ }
19
+ }
20
+
21
+ interface GraphqlError {
22
+ message: string
23
+ locations?: Array<{
24
+ line: number
25
+ column: number
26
+ }>
27
+ path?: string[]
28
+ extensions?: Record<string, any>
29
+ }
@@ -0,0 +1,10 @@
1
+ import type { ClientOptions } from './createClient';
2
+ import type { GraphqlOperation } from './generateGraphqlOperation';
3
+ export interface Fetcher {
4
+ (gql: GraphqlOperation): Promise<any>;
5
+ }
6
+ export type BatchOptions = {
7
+ batchInterval?: number;
8
+ maxBatchSize?: number;
9
+ };
10
+ export declare const createFetcher: ({ url, headers, fetcher, fetch: _fetch, batch, ...rest }: ClientOptions) => Fetcher;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFetcher = void 0;
4
+ const batcher_1 = require("./batcher");
5
+ const error_1 = require("./error");
6
+ const DEFAULT_BATCH_OPTIONS = {
7
+ maxBatchSize: 10,
8
+ batchInterval: 40,
9
+ };
10
+ const createFetcher = ({ url, headers = {}, fetcher, fetch: _fetch, batch = false, ...rest }) => {
11
+ if (!url && !fetcher) {
12
+ throw new Error('url or fetcher is required');
13
+ }
14
+ fetcher = fetcher || (async (body) => {
15
+ let headersObject = typeof headers == 'function' ? await headers() : headers;
16
+ headersObject = headersObject || {};
17
+ if (typeof fetch === 'undefined' && !_fetch) {
18
+ throw new Error('Global `fetch` function is not available, pass a fetch polyfill to Genql `createClient`');
19
+ }
20
+ let fetchImpl = _fetch || fetch;
21
+ const res = await fetchImpl(url, {
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ ...headersObject,
25
+ },
26
+ method: 'POST',
27
+ body: JSON.stringify(body),
28
+ ...rest,
29
+ });
30
+ if (!res.ok) {
31
+ throw new Error(`${res.statusText}: ${await res.text()}`);
32
+ }
33
+ const json = await res.json();
34
+ return json;
35
+ });
36
+ if (!batch) {
37
+ return async (body) => {
38
+ const json = await fetcher(body);
39
+ if (Array.isArray(json)) {
40
+ return json.map((json) => {
41
+ if (json?.errors?.length) {
42
+ throw new error_1.GenqlError(json.errors || [], json.data);
43
+ }
44
+ return json.data;
45
+ });
46
+ }
47
+ else {
48
+ if (json?.errors?.length) {
49
+ throw new error_1.GenqlError(json.errors || [], json.data);
50
+ }
51
+ return json.data;
52
+ }
53
+ };
54
+ }
55
+ const batcher = new batcher_1.QueryBatcher(async (batchedQuery) => {
56
+ const json = await fetcher(batchedQuery);
57
+ return json;
58
+ }, batch === true ? DEFAULT_BATCH_OPTIONS : batch);
59
+ return async ({ query, variables }) => {
60
+ const json = await batcher.fetch(query, variables);
61
+ if (json?.data) {
62
+ return json.data;
63
+ }
64
+ throw new Error('Genql batch fetcher returned unexpected result ' + JSON.stringify(json));
65
+ };
66
+ };
67
+ exports.createFetcher = createFetcher;
68
+ //# sourceMappingURL=fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../../libs/vtx-backend-client/runtime/fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ // @ts-nocheck
2
+ import { QueryBatcher } from './batcher'
3
+
4
+ import type { ClientOptions } from './createClient'
5
+ import type { GraphqlOperation } from './generateGraphqlOperation'
6
+ import { GenqlError } from './error'
7
+
8
+ export interface Fetcher {
9
+ (gql: GraphqlOperation): Promise<any>
10
+ }
11
+
12
+ export type BatchOptions = {
13
+ batchInterval?: number // ms
14
+ maxBatchSize?: number
15
+ }
16
+
17
+ const DEFAULT_BATCH_OPTIONS = {
18
+ maxBatchSize: 10,
19
+ batchInterval: 40,
20
+ }
21
+
22
+ export const createFetcher = ({
23
+ url,
24
+ headers = {},
25
+ fetcher,
26
+ fetch: _fetch,
27
+ batch = false,
28
+ ...rest
29
+ }: ClientOptions): Fetcher => {
30
+ if (!url && !fetcher) {
31
+ throw new Error('url or fetcher is required')
32
+ }
33
+
34
+ fetcher = fetcher || (async (body) => {
35
+ let headersObject =
36
+ typeof headers == 'function' ? await headers() : headers
37
+ headersObject = headersObject || {}
38
+ if (typeof fetch === 'undefined' && !_fetch) {
39
+ throw new Error(
40
+ 'Global `fetch` function is not available, pass a fetch polyfill to Genql `createClient`',
41
+ )
42
+ }
43
+ let fetchImpl = _fetch || fetch
44
+ const res = await fetchImpl(url!, {
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ ...headersObject,
48
+ },
49
+ method: 'POST',
50
+ body: JSON.stringify(body),
51
+ ...rest,
52
+ })
53
+ if (!res.ok) {
54
+ throw new Error(`${res.statusText}: ${await res.text()}`)
55
+ }
56
+ const json = await res.json()
57
+ return json
58
+ })
59
+
60
+ if (!batch) {
61
+ return async (body) => {
62
+ const json = await fetcher!(body)
63
+ if (Array.isArray(json)) {
64
+ return json.map((json) => {
65
+ if (json?.errors?.length) {
66
+ throw new GenqlError(json.errors || [], json.data)
67
+ }
68
+ return json.data
69
+ })
70
+ } else {
71
+ if (json?.errors?.length) {
72
+ throw new GenqlError(json.errors || [], json.data)
73
+ }
74
+ return json.data
75
+ }
76
+ }
77
+ }
78
+
79
+ const batcher = new QueryBatcher(
80
+ async (batchedQuery) => {
81
+ // console.log(batchedQuery) // [{ query: 'query{user{age}}', variables: {} }, ...]
82
+ const json = await fetcher!(batchedQuery)
83
+ return json as any
84
+ },
85
+ batch === true ? DEFAULT_BATCH_OPTIONS : batch,
86
+ )
87
+
88
+ return async ({ query, variables }) => {
89
+ const json = await batcher.fetch(query, variables)
90
+ if (json?.data) {
91
+ return json.data
92
+ }
93
+ throw new Error(
94
+ 'Genql batch fetcher returned unexpected result ' + JSON.stringify(json),
95
+ )
96
+ }
97
+ }
@@ -0,0 +1,30 @@
1
+ import type { LinkedField, LinkedType } from './types';
2
+ export interface Args {
3
+ [arg: string]: any | undefined;
4
+ }
5
+ export interface Fields {
6
+ [field: string]: Request;
7
+ }
8
+ export type Request = boolean | number | Fields;
9
+ export interface Variables {
10
+ [name: string]: {
11
+ value: any;
12
+ typing: [LinkedType, string];
13
+ };
14
+ }
15
+ export interface Context {
16
+ root: LinkedType;
17
+ varCounter: number;
18
+ variables: Variables;
19
+ fragmentCounter: number;
20
+ fragments: string[];
21
+ }
22
+ export interface GraphqlOperation {
23
+ query: string;
24
+ variables?: {
25
+ [name: string]: any;
26
+ };
27
+ operationName?: string;
28
+ }
29
+ export declare const generateGraphqlOperation: (operation: 'query' | 'mutation' | 'subscription', root: LinkedType, fields?: Fields) => GraphqlOperation;
30
+ export declare const getFieldFromPath: (root: LinkedType | undefined, path: string[]) => LinkedField;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFieldFromPath = exports.generateGraphqlOperation = void 0;
4
+ const parseRequest = (request, ctx, path) => {
5
+ if (typeof request === 'object' && '__args' in request) {
6
+ const args = request.__args;
7
+ let fields = { ...request };
8
+ delete fields.__args;
9
+ const argNames = Object.keys(args);
10
+ if (argNames.length === 0) {
11
+ return parseRequest(fields, ctx, path);
12
+ }
13
+ const field = (0, exports.getFieldFromPath)(ctx.root, path);
14
+ const argStrings = argNames.map((argName) => {
15
+ ctx.varCounter++;
16
+ const varName = `v${ctx.varCounter}`;
17
+ const typing = field.args && field.args[argName];
18
+ if (!typing) {
19
+ throw new Error(`no typing defined for argument \`${argName}\` in path \`${path.join('.')}\``);
20
+ }
21
+ ctx.variables[varName] = {
22
+ value: args[argName],
23
+ typing,
24
+ };
25
+ return `${argName}:$${varName}`;
26
+ });
27
+ return `(${argStrings})${parseRequest(fields, ctx, path)}`;
28
+ }
29
+ else if (typeof request === 'object' && Object.keys(request).length > 0) {
30
+ const fields = request;
31
+ const fieldNames = Object.keys(fields).filter((k) => Boolean(fields[k]));
32
+ if (fieldNames.length === 0) {
33
+ throw new Error(`field selection should not be empty: ${path.join('.')}`);
34
+ }
35
+ const type = path.length > 0 ? (0, exports.getFieldFromPath)(ctx.root, path).type : ctx.root;
36
+ const scalarFields = type.scalar;
37
+ let scalarFieldsFragment;
38
+ if (fieldNames.includes('__scalar')) {
39
+ const falsyFieldNames = new Set(Object.keys(fields).filter((k) => !Boolean(fields[k])));
40
+ if (scalarFields?.length) {
41
+ ctx.fragmentCounter++;
42
+ scalarFieldsFragment = `f${ctx.fragmentCounter}`;
43
+ ctx.fragments.push(`fragment ${scalarFieldsFragment} on ${type.name}{${scalarFields
44
+ .filter((f) => !falsyFieldNames.has(f))
45
+ .join(',')}}`);
46
+ }
47
+ }
48
+ const fieldsSelection = fieldNames
49
+ .filter((f) => !['__scalar', '__name'].includes(f))
50
+ .map((f) => {
51
+ const parsed = parseRequest(fields[f], ctx, [...path, f]);
52
+ if (f.startsWith('on_')) {
53
+ ctx.fragmentCounter++;
54
+ const implementationFragment = `f${ctx.fragmentCounter}`;
55
+ const typeMatch = f.match(/^on_(.+)/);
56
+ if (!typeMatch || !typeMatch[1])
57
+ throw new Error('match failed');
58
+ ctx.fragments.push(`fragment ${implementationFragment} on ${typeMatch[1]}${parsed}`);
59
+ return `...${implementationFragment}`;
60
+ }
61
+ else {
62
+ return `${f}${parsed}`;
63
+ }
64
+ })
65
+ .concat(scalarFieldsFragment ? [`...${scalarFieldsFragment}`] : [])
66
+ .join(',');
67
+ return `{${fieldsSelection}}`;
68
+ }
69
+ else {
70
+ return '';
71
+ }
72
+ };
73
+ const generateGraphqlOperation = (operation, root, fields) => {
74
+ const ctx = {
75
+ root: root,
76
+ varCounter: 0,
77
+ variables: {},
78
+ fragmentCounter: 0,
79
+ fragments: [],
80
+ };
81
+ const result = parseRequest(fields, ctx, []);
82
+ const varNames = Object.keys(ctx.variables);
83
+ const varsString = varNames.length > 0
84
+ ? `(${varNames.map((v) => {
85
+ const variableType = ctx.variables[v].typing[1];
86
+ return `$${v}:${variableType}`;
87
+ })})`
88
+ : '';
89
+ const operationName = fields?.__name || '';
90
+ return {
91
+ query: [
92
+ `${operation} ${operationName}${varsString}${result}`,
93
+ ...ctx.fragments,
94
+ ].join(','),
95
+ variables: Object.keys(ctx.variables).reduce((r, v) => {
96
+ r[v] = ctx.variables[v].value;
97
+ return r;
98
+ }, {}),
99
+ ...(operationName ? { operationName: operationName.toString() } : {}),
100
+ };
101
+ };
102
+ exports.generateGraphqlOperation = generateGraphqlOperation;
103
+ const getFieldFromPath = (root, path) => {
104
+ let current;
105
+ if (!root)
106
+ throw new Error('root type is not provided');
107
+ if (path.length === 0)
108
+ throw new Error(`path is empty`);
109
+ path.forEach((f) => {
110
+ const type = current ? current.type : root;
111
+ if (!type.fields)
112
+ throw new Error(`type \`${type.name}\` does not have fields`);
113
+ const possibleTypes = Object.keys(type.fields)
114
+ .filter((i) => i.startsWith('on_'))
115
+ .reduce((types, fieldName) => {
116
+ const field = type.fields && type.fields[fieldName];
117
+ if (field)
118
+ types.push(field.type);
119
+ return types;
120
+ }, [type]);
121
+ let field = null;
122
+ possibleTypes.forEach((type) => {
123
+ const found = type.fields && type.fields[f];
124
+ if (found)
125
+ field = found;
126
+ });
127
+ if (!field)
128
+ throw new Error(`type \`${type.name}\` does not have a field \`${f}\``);
129
+ current = field;
130
+ });
131
+ return current;
132
+ };
133
+ exports.getFieldFromPath = getFieldFromPath;
134
+ //# sourceMappingURL=generateGraphqlOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateGraphqlOperation.js","sourceRoot":"","sources":["../../../../libs/vtx-backend-client/runtime/generateGraphqlOperation.ts"],"names":[],"mappings":"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"}