@schema-hub/zod-graphql-fake-client 0.0.13 → 0.0.15
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/package.json +10 -8
- package/readme.md +12 -6
- package/sbom.cdx.json +50 -0
- package/zod-graphql-fake-client/fake-client.d.ts +21 -4
- package/zod-graphql-fake-client/fake-client.d.ts.map +1 -1
- package/zod-graphql-fake-client/fake-client.js +128 -62
- package/zod-graphql-fake-client/fake-client.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "Mathias Schreck <schreck.mathias@gmail.com>",
|
|
3
|
-
"dependencies": {
|
|
4
|
-
"@schema-hub/zod-graphql-query-builder": "0.0.12"
|
|
5
|
-
},
|
|
6
3
|
"description": "Fake GraphQL client for testing @schema-hub/zod-graphql-client",
|
|
7
4
|
"engines": {
|
|
8
|
-
"node": "^
|
|
5
|
+
"node": "^24 || ^26"
|
|
6
|
+
},
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./zod-graphql-fake-client/fake-client.js",
|
|
10
|
+
"types": "./zod-graphql-fake-client/fake-client.d.ts"
|
|
11
|
+
}
|
|
9
12
|
},
|
|
10
13
|
"keywords": [
|
|
11
14
|
"fake-graphql-client",
|
|
12
15
|
"testing-client"
|
|
13
16
|
],
|
|
14
17
|
"license": "MIT",
|
|
15
|
-
"main": "zod-graphql-fake-client/fake-client.js",
|
|
16
18
|
"name": "@schema-hub/zod-graphql-fake-client",
|
|
17
19
|
"peerDependencies": {
|
|
18
|
-
"@schema-hub/zod-graphql-client": "0.0.
|
|
20
|
+
"@schema-hub/zod-graphql-client": "0.0.15"
|
|
19
21
|
},
|
|
20
22
|
"repository": {
|
|
21
23
|
"type": "git",
|
|
22
24
|
"url": "git+ssh://git@github.com/enormora/schema-hub.git"
|
|
23
25
|
},
|
|
26
|
+
"sideEffects": false,
|
|
24
27
|
"type": "module",
|
|
25
|
-
"
|
|
26
|
-
"version": "0.0.13"
|
|
28
|
+
"version": "0.0.15"
|
|
27
29
|
}
|
package/readme.md
CHANGED
|
@@ -47,20 +47,26 @@ const client = createFakeGraphqlClient({ results: customResults });
|
|
|
47
47
|
|
|
48
48
|
The order of the array matters, so the first result will be returned by the first `query()` or `mutate()` call.
|
|
49
49
|
|
|
50
|
-
### Inspecting
|
|
50
|
+
### Inspecting Operations
|
|
51
51
|
|
|
52
|
-
The fake GraphQL client keeps track of
|
|
52
|
+
The fake GraphQL client keeps track of every operation sent to it (without actually making any network calls), allowing inspection during tests. Each recorded operation captures the schema, the resolved request payload, the parsed variable values, the operation name, and the per-call options.
|
|
53
53
|
|
|
54
54
|
```typescript
|
|
55
55
|
import { createFakeGraphqlClient } from '@schema-hub/zod-graphql-fake-client';
|
|
56
56
|
|
|
57
57
|
const client = createFakeGraphqlClient();
|
|
58
58
|
|
|
59
|
-
// Inspect the payload of the first operation
|
|
59
|
+
// Inspect just the request payload of the first operation
|
|
60
60
|
const firstPayload = client.inspectFirstOperationPayload();
|
|
61
61
|
console.log(firstPayload);
|
|
62
62
|
|
|
63
|
-
// Inspect the payload
|
|
64
|
-
const
|
|
65
|
-
console.log(
|
|
63
|
+
// Inspect the full recorded operation (payload + values + options + schema)
|
|
64
|
+
const firstOperation = client.inspectFirstOperation();
|
|
65
|
+
console.log(firstOperation);
|
|
66
|
+
|
|
67
|
+
// Inspect by index
|
|
68
|
+
const secondOperation = client.inspectOperation(1);
|
|
69
|
+
console.log(secondOperation);
|
|
66
70
|
```
|
|
71
|
+
|
|
72
|
+
`findOperation`, `findAllOperations`, and `findOperationOrThrow` accept a matcher that can filter recorded operations by `operationName`, `type`, `schema`, or a custom predicate function.
|
package/sbom.cdx.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
|
|
3
|
+
"bomFormat": "CycloneDX",
|
|
4
|
+
"specVersion": "1.6",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"metadata": {
|
|
7
|
+
"tools": {
|
|
8
|
+
"components": [
|
|
9
|
+
{
|
|
10
|
+
"type": "application",
|
|
11
|
+
"name": "packtory",
|
|
12
|
+
"version": "0.0.26"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"component": {
|
|
17
|
+
"type": "library",
|
|
18
|
+
"name": "@schema-hub/zod-graphql-fake-client",
|
|
19
|
+
"version": "0.0.15",
|
|
20
|
+
"bom-ref": "pkg:npm/@schema-hub/zod-graphql-fake-client@0.0.15",
|
|
21
|
+
"purl": "pkg:npm/@schema-hub/zod-graphql-fake-client@0.0.15"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"components": [
|
|
25
|
+
{
|
|
26
|
+
"type": "library",
|
|
27
|
+
"name": "@schema-hub/zod-graphql-client",
|
|
28
|
+
"version": "0.0.15",
|
|
29
|
+
"bom-ref": "pkg:npm/@schema-hub/zod-graphql-client@0.0.15",
|
|
30
|
+
"scope": "optional",
|
|
31
|
+
"licenses": [
|
|
32
|
+
{
|
|
33
|
+
"expression": "MIT"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"purl": "pkg:npm/@schema-hub/zod-graphql-client@0.0.15"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"dependencies": [
|
|
40
|
+
{
|
|
41
|
+
"ref": "pkg:npm/@schema-hub/zod-graphql-client@0.0.15"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"ref": "pkg:npm/@schema-hub/zod-graphql-fake-client@0.0.15",
|
|
45
|
+
"dependsOn": [
|
|
46
|
+
"pkg:npm/@schema-hub/zod-graphql-client@0.0.15"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -1,10 +1,27 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type
|
|
1
|
+
import type { GraphqlClient, OperationErrorDetails, QuerySchema } from '@schema-hub/zod-graphql-client';
|
|
2
|
+
import { type GraphqlOverHttpOperationRequestPayload, type OperationOptions, type OperationType } from '@schema-hub/zod-graphql-client/zod-graphql-client/operation-payload.d.ts';
|
|
3
|
+
export type RecordedOperation = {
|
|
4
|
+
readonly type: OperationType;
|
|
5
|
+
readonly schema: QuerySchema;
|
|
6
|
+
readonly payload: GraphqlOverHttpOperationRequestPayload;
|
|
7
|
+
readonly operationName: string | undefined;
|
|
8
|
+
readonly values: Record<string, unknown>;
|
|
9
|
+
readonly options: OperationOptions;
|
|
10
|
+
};
|
|
11
|
+
export type OperationMatcherObject = {
|
|
12
|
+
readonly operationName?: string;
|
|
13
|
+
readonly type?: OperationType;
|
|
14
|
+
readonly schema?: QuerySchema;
|
|
15
|
+
};
|
|
16
|
+
export type OperationMatcher = OperationMatcherObject | ((recorded: RecordedOperation) => boolean);
|
|
3
17
|
export type FakeGraphqlClient = GraphqlClient & {
|
|
4
18
|
readonly inspectOperationPayload: (index: number) => GraphqlOverHttpOperationRequestPayload;
|
|
5
19
|
readonly inspectFirstOperationPayload: () => GraphqlOverHttpOperationRequestPayload;
|
|
6
|
-
readonly
|
|
7
|
-
readonly
|
|
20
|
+
readonly inspectOperation: (index: number) => RecordedOperation;
|
|
21
|
+
readonly inspectFirstOperation: () => RecordedOperation;
|
|
22
|
+
readonly findOperation: (matcher: OperationMatcher) => RecordedOperation | undefined;
|
|
23
|
+
readonly findOperationOrThrow: (matcher: OperationMatcher) => RecordedOperation;
|
|
24
|
+
readonly findAllOperations: (matcher: OperationMatcher) => readonly RecordedOperation[];
|
|
8
25
|
};
|
|
9
26
|
type FakeSuccessData = {
|
|
10
27
|
error?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-client.d.ts","sourceRoot":"","sources":["../../../../source/zod-graphql-fake-client/fake-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fake-client.d.ts","sourceRoot":"","sources":["../../../../source/zod-graphql-fake-client/fake-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,aAAa,EACb,qBAAqB,EAErB,WAAW,EACd,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,KAAK,sCAAsC,EAG3C,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAErB,MAAM,4CAA4C,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;IACzD,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,CAAC,CAAC,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAEnG,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,sCAAsC,CAAC;IAC5F,QAAQ,CAAC,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;IACpF,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,iBAAiB,CAAC;IAChE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,iBAAiB,GAAG,SAAS,CAAC;IACrF,QAAQ,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;IAChF,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,SAAS,iBAAiB,EAAE,CAAC;CAC3F,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE7D,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACnC,CAAC;AAmMF,wBAAgB,uBAAuB,CAAC,aAAa,GAAE,iBAAsB,GAAG,iBAAiB,CAahG"}
|
|
@@ -1,81 +1,147 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
1
|
+
import { extractDataOrThrow } from '@schema-hub/zod-graphql-client/zod-graphql-client/client.js';
|
|
2
|
+
import { buildOperationPayload, resolveOperationInputs } from '@schema-hub/zod-graphql-client/zod-graphql-client/operation-payload.js';
|
|
3
|
+
function operationMatchesObject(matcher, recorded) {
|
|
4
|
+
const nameMatches = matcher.operationName === undefined ||
|
|
5
|
+
recorded.operationName === matcher.operationName;
|
|
6
|
+
const typeMatches = matcher.type === undefined || recorded.type === matcher.type;
|
|
7
|
+
const schemaMatches = matcher.schema === undefined || recorded.schema === matcher.schema;
|
|
8
|
+
return nameMatches && typeMatches && schemaMatches;
|
|
9
|
+
}
|
|
10
|
+
function operationMatches(matcher, recorded) {
|
|
11
|
+
if (typeof matcher === 'function') {
|
|
12
|
+
return matcher(recorded);
|
|
13
|
+
}
|
|
14
|
+
return operationMatchesObject(matcher, recorded);
|
|
15
|
+
}
|
|
16
|
+
function describeMatcherObject(matcher) {
|
|
17
|
+
const parts = [];
|
|
18
|
+
if (matcher.operationName !== undefined) {
|
|
19
|
+
parts.push(`operationName=${matcher.operationName}`);
|
|
20
|
+
}
|
|
21
|
+
if (matcher.type !== undefined) {
|
|
22
|
+
parts.push(`type=${matcher.type}`);
|
|
23
|
+
}
|
|
24
|
+
if (matcher.schema !== undefined) {
|
|
25
|
+
parts.push('schema=<schema>');
|
|
26
|
+
}
|
|
27
|
+
return parts.length === 0 ? '{}' : `{ ${parts.join(', ')} }`;
|
|
28
|
+
}
|
|
29
|
+
function describeMatcher(matcher) {
|
|
30
|
+
if (typeof matcher === 'function') {
|
|
31
|
+
return 'predicate function';
|
|
32
|
+
}
|
|
33
|
+
return describeMatcherObject(matcher);
|
|
34
|
+
}
|
|
35
|
+
function buildOperationFinders(recordedOperations) {
|
|
36
|
+
function findOperation(matcher) {
|
|
37
|
+
return recordedOperations.find((recorded) => {
|
|
38
|
+
return operationMatches(matcher, recorded);
|
|
27
39
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
}
|
|
41
|
+
function findAllOperations(matcher) {
|
|
42
|
+
return recordedOperations.filter((recorded) => {
|
|
43
|
+
return operationMatches(matcher, recorded);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function findOperationOrThrow(matcher) {
|
|
47
|
+
const recorded = findOperation(matcher);
|
|
48
|
+
if (recorded === undefined) {
|
|
49
|
+
throw new Error(`No operation recorded matching ${describeMatcher(matcher)}`);
|
|
31
50
|
}
|
|
32
|
-
return
|
|
51
|
+
return recorded;
|
|
52
|
+
}
|
|
53
|
+
return { findOperation, findAllOperations, findOperationOrThrow };
|
|
54
|
+
}
|
|
55
|
+
const defaultResult = { data: {} };
|
|
56
|
+
function recordAndRespond(state, invocation) {
|
|
57
|
+
const resolution = resolveOperationInputs(invocation.target, invocation.valuesOrOptions, invocation.maybeOptions);
|
|
58
|
+
if (!resolution.success) {
|
|
59
|
+
return resolution;
|
|
60
|
+
}
|
|
61
|
+
const inputs = resolution.data;
|
|
62
|
+
const payload = buildOperationPayload({
|
|
63
|
+
schema: inputs.schema,
|
|
64
|
+
operationType: invocation.type,
|
|
65
|
+
operationName: inputs.operationName,
|
|
66
|
+
variableDefinitions: inputs.variableDefinitions,
|
|
67
|
+
variableValues: inputs.variableValues
|
|
68
|
+
});
|
|
69
|
+
const result = state.results[state.recordedOperations.length] ?? defaultResult;
|
|
70
|
+
state.recordedOperations.push({
|
|
71
|
+
type: invocation.type,
|
|
72
|
+
schema: inputs.schema,
|
|
73
|
+
payload,
|
|
74
|
+
operationName: inputs.operationName,
|
|
75
|
+
values: inputs.variableValues,
|
|
76
|
+
options: inputs.options
|
|
77
|
+
});
|
|
78
|
+
if (result.error !== undefined) {
|
|
79
|
+
return { success: false, errorDetails: result.error };
|
|
80
|
+
}
|
|
81
|
+
return { success: true, data: result.data };
|
|
82
|
+
}
|
|
83
|
+
function buildClientMethods(state) {
|
|
84
|
+
async function query(handle, ...rest) {
|
|
85
|
+
return recordAndRespond(state, {
|
|
86
|
+
type: 'query',
|
|
87
|
+
target: handle,
|
|
88
|
+
valuesOrOptions: rest[0],
|
|
89
|
+
maybeOptions: rest[1]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async function mutate(handle, ...rest) {
|
|
93
|
+
return recordAndRespond(state, {
|
|
94
|
+
type: 'mutation',
|
|
95
|
+
target: handle,
|
|
96
|
+
valuesOrOptions: rest[0],
|
|
97
|
+
maybeOptions: rest[1]
|
|
98
|
+
});
|
|
33
99
|
}
|
|
34
|
-
async function
|
|
35
|
-
return
|
|
100
|
+
async function queryOrThrow(handle, ...rest) {
|
|
101
|
+
return extractDataOrThrow(await query(handle, ...rest));
|
|
36
102
|
}
|
|
37
|
-
async function
|
|
38
|
-
return
|
|
103
|
+
async function mutateOrThrow(handle, ...rest) {
|
|
104
|
+
return extractDataOrThrow(await mutate(handle, ...rest));
|
|
39
105
|
}
|
|
106
|
+
return { query, queryOrThrow, mutate, mutateOrThrow };
|
|
107
|
+
}
|
|
108
|
+
function buildInspectors(recordedOperations) {
|
|
40
109
|
function inspectOperationPayload(index) {
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
110
|
+
const recorded = recordedOperations[index];
|
|
111
|
+
if (recorded === undefined) {
|
|
43
112
|
throw new Error(`No query payload at index ${index} recorded`);
|
|
44
113
|
}
|
|
45
|
-
return payload;
|
|
114
|
+
return recorded.payload;
|
|
46
115
|
}
|
|
47
|
-
function
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
throw new Error(`No
|
|
116
|
+
function inspectOperation(index) {
|
|
117
|
+
const recorded = recordedOperations[index];
|
|
118
|
+
if (recorded === undefined) {
|
|
119
|
+
throw new Error(`No operation at index ${index} recorded`);
|
|
51
120
|
}
|
|
52
|
-
return
|
|
121
|
+
return recorded;
|
|
53
122
|
}
|
|
54
123
|
return {
|
|
55
|
-
query,
|
|
56
|
-
async queryOrThrow(schema, options) {
|
|
57
|
-
const result = await query(schema, options);
|
|
58
|
-
if (result.success) {
|
|
59
|
-
return result.data;
|
|
60
|
-
}
|
|
61
|
-
throw new GraphqlOperationError(result.errorDetails);
|
|
62
|
-
},
|
|
63
|
-
mutate,
|
|
64
|
-
async mutateOrThrow(schema, options) {
|
|
65
|
-
const result = await mutate(schema, options);
|
|
66
|
-
if (result.success) {
|
|
67
|
-
return result.data;
|
|
68
|
-
}
|
|
69
|
-
throw new GraphqlOperationError(result.errorDetails);
|
|
70
|
-
},
|
|
71
124
|
inspectOperationPayload,
|
|
72
|
-
inspectFirstOperationPayload() {
|
|
125
|
+
inspectFirstOperationPayload: () => {
|
|
73
126
|
return inspectOperationPayload(0);
|
|
74
127
|
},
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return
|
|
128
|
+
inspectOperation,
|
|
129
|
+
inspectFirstOperation: () => {
|
|
130
|
+
return inspectOperation(0);
|
|
78
131
|
}
|
|
79
132
|
};
|
|
80
133
|
}
|
|
134
|
+
export function createFakeGraphqlClient(clientOptions = {}) {
|
|
135
|
+
const { results = [] } = clientOptions;
|
|
136
|
+
const recordedOperations = [];
|
|
137
|
+
const state = { results, recordedOperations };
|
|
138
|
+
const clientMethods = buildClientMethods(state);
|
|
139
|
+
const inspectors = buildInspectors(recordedOperations);
|
|
140
|
+
const finders = buildOperationFinders(recordedOperations);
|
|
141
|
+
return {
|
|
142
|
+
...clientMethods,
|
|
143
|
+
...inspectors,
|
|
144
|
+
...finders
|
|
145
|
+
};
|
|
146
|
+
}
|
|
81
147
|
//# sourceMappingURL=fake-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-client.js","sourceRoot":"","sources":["../../../../source/zod-graphql-fake-client/fake-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fake-client.js","sourceRoot":"","sources":["../../../../source/zod-graphql-fake-client/fake-client.ts"],"names":[],"mappings":"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"}
|