@luvio/graphql-parser 0.102.1 → 0.104.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/gql.d.ts +8 -0
- package/dist/luvioGraphqlParser.js +6323 -4521
- package/dist/luvioGraphqlParser.mjs +6320 -4520
- package/dist/main.d.ts +8 -5
- package/package.json +2 -2
- package/src/__tests__/main.spec.ts +49 -0
- package/src/gql.ts +9 -5
- package/src/main.ts +32 -16
package/dist/main.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { GraphQLSchema, GraphQLScalarType } from 'graphql';
|
|
1
|
+
import { GraphQLSchema, GraphQLScalarType, execute, buildSchema, getNamedType, isObjectType } from 'graphql';
|
|
2
2
|
import { buildASTSchema } from 'graphql/utilities';
|
|
3
3
|
import { LuvioDocumentNode, LuvioArgumentNode, LuvioDefinitionNode, LuvioObjectValueNode, LuvioOperationDefinitionNode, LuvioSelectionCustomFieldNode, LuvioSelectionNode, LuvioSelectionObjectFieldNode, LuvioSelectionScalarFieldNode, LuvioValueNode, LuvioFieldNode, LuvioVariableDefinitionNode, LuvioVariableNode, LuvioNamedTypeNode, LuvioListTypeNode, LuvioListValueNode, LuvioTypeNode } from './ast';
|
|
4
|
-
export declare function parseAndVisit(source: string): LuvioDocumentNode;
|
|
5
4
|
export type { GraphQLObjectType, GraphQLInterfaceType, GraphQLDirective, GraphQLUnionType, GraphQLNamedType, } from 'graphql/type';
|
|
6
|
-
export type { ListTypeNode, BooleanValueNode, EnumTypeDefinitionNode, FieldDefinitionNode, FloatValueNode, InterfaceTypeDefinitionNode, IntValueNode, NamedTypeNode, ObjectTypeDefinitionNode, StringValueNode, TypeNode, UnionTypeDefinitionNode, DocumentNode, OperationDefinitionNode, FieldNode, ArgumentNode, ValueNode, SelectionNode, SelectionSetNode, FragmentDefinitionNode, DirectiveNode, ObjectFieldNode, ScalarTypeDefinitionNode, InputObjectTypeDefinitionNode, } from 'graphql/language';
|
|
5
|
+
export type { ListTypeNode, BooleanValueNode, EnumTypeDefinitionNode, FieldDefinitionNode, FloatValueNode, InterfaceTypeDefinitionNode, IntValueNode, NamedTypeNode, ObjectTypeDefinitionNode, StringValueNode, TypeNode, UnionTypeDefinitionNode, DocumentNode, OperationDefinitionNode, FieldNode, ArgumentNode, ValueNode, SelectionNode, SelectionSetNode, FragmentDefinitionNode, DirectiveNode, ObjectFieldNode, ScalarTypeDefinitionNode, InputObjectTypeDefinitionNode, InlineFragmentNode, } from 'graphql/language';
|
|
7
6
|
export { ASTVisitor, parse, Kind, print, visit } from 'graphql/language';
|
|
8
7
|
export { isScalarType } from 'graphql/type';
|
|
9
8
|
export { stripIgnoredCharacters } from 'graphql/utilities';
|
|
10
|
-
export { gql,
|
|
9
|
+
export { gql, astResolver } from './gql';
|
|
11
10
|
export type { AstResolver } from './gql';
|
|
12
11
|
/**
|
|
13
12
|
* @deprecated - Schema-backed adapters will use standard graphql types re-exported from @luvio/graphql
|
|
14
13
|
*/
|
|
15
|
-
export { LuvioDocumentNode, LuvioArgumentNode, LuvioDefinitionNode, LuvioObjectValueNode, LuvioOperationDefinitionNode, LuvioSelectionCustomFieldNode, LuvioSelectionNode, LuvioSelectionObjectFieldNode, LuvioSelectionScalarFieldNode, LuvioValueNode, LuvioFieldNode, LuvioVariableDefinitionNode, LuvioVariableNode, LuvioNamedTypeNode, LuvioListTypeNode, LuvioListValueNode, LuvioTypeNode, GraphQLSchema, GraphQLScalarType, buildASTSchema, };
|
|
14
|
+
export { LuvioDocumentNode, LuvioArgumentNode, LuvioDefinitionNode, LuvioObjectValueNode, LuvioOperationDefinitionNode, LuvioSelectionCustomFieldNode, LuvioSelectionNode, LuvioSelectionObjectFieldNode, LuvioSelectionScalarFieldNode, LuvioValueNode, LuvioFieldNode, LuvioVariableDefinitionNode, LuvioVariableNode, LuvioNamedTypeNode, LuvioListTypeNode, LuvioListValueNode, LuvioTypeNode, GraphQLSchema, GraphQLScalarType, buildASTSchema, execute, buildSchema, getNamedType, isObjectType, };
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated In favor of gql tagged template literal
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseAndVisit(source: string): LuvioDocumentNode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luvio/graphql-parser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.104.0",
|
|
4
4
|
"description": "GraphQL parser for Luvio GraphQL adapter support",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"bundlesize": [
|
|
33
33
|
{
|
|
34
34
|
"path": "./dist/luvioGraphqlParser.js",
|
|
35
|
-
"maxSize": "
|
|
35
|
+
"maxSize": "70 kB",
|
|
36
36
|
"compression": "brotli"
|
|
37
37
|
}
|
|
38
38
|
],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as parser from '../main';
|
|
2
|
+
import { astResolver, parseDocument } from '../gql';
|
|
2
3
|
|
|
3
4
|
describe('LDS GraphQL Parser', () => {
|
|
4
5
|
describe('parseAndVisit', () => {
|
|
@@ -597,4 +598,52 @@ describe('LDS GraphQL Parser', () => {
|
|
|
597
598
|
expect(target).toStrictEqual(expected);
|
|
598
599
|
});
|
|
599
600
|
});
|
|
601
|
+
|
|
602
|
+
describe('metaschema', () => {
|
|
603
|
+
it('should be able to use luvio document node as key to get metaschema AST', () => {
|
|
604
|
+
const source = /* GraphQL */ `
|
|
605
|
+
query {
|
|
606
|
+
uiapi {
|
|
607
|
+
query {
|
|
608
|
+
Account(where: { Name: { like: "Account1" } }) @connection {
|
|
609
|
+
edges {
|
|
610
|
+
node @resource(type: "Record") {
|
|
611
|
+
Name {
|
|
612
|
+
value
|
|
613
|
+
displayValue
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
`;
|
|
622
|
+
|
|
623
|
+
const metaschemaSource = /* GraphQL */ `
|
|
624
|
+
query {
|
|
625
|
+
uiapi {
|
|
626
|
+
query {
|
|
627
|
+
Account(where: { Name: { like: "Account1" } })
|
|
628
|
+
@category(name: "recordQuery") {
|
|
629
|
+
edges {
|
|
630
|
+
node {
|
|
631
|
+
Name {
|
|
632
|
+
value
|
|
633
|
+
displayValue
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
`;
|
|
642
|
+
|
|
643
|
+
const target = parser.parseAndVisit(source);
|
|
644
|
+
const metaschemaAST = astResolver(target);
|
|
645
|
+
|
|
646
|
+
expect(metaschemaAST).toStrictEqual(parseDocument(metaschemaSource));
|
|
647
|
+
});
|
|
648
|
+
});
|
|
600
649
|
});
|
package/src/gql.ts
CHANGED
|
@@ -43,7 +43,7 @@ function operationKeyBuilder(inputString: string): string {
|
|
|
43
43
|
* @param inputString - operation string
|
|
44
44
|
* @returns DocumentNode
|
|
45
45
|
*/
|
|
46
|
-
function parseDocument(inputString: string): DocumentNode | null {
|
|
46
|
+
export function parseDocument(inputString: string): DocumentNode | null {
|
|
47
47
|
const operationKey = operationKeyBuilder(inputString);
|
|
48
48
|
const cachedDoc = docMap.get(operationKey);
|
|
49
49
|
if (cachedDoc !== undefined) {
|
|
@@ -85,9 +85,13 @@ function insertFragments(doc: DocumentNode, fragments: DefinitionNode[]): Docume
|
|
|
85
85
|
return doc;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
function
|
|
88
|
+
export function updateReferenceMapWithKnownKey(doc: DocumentNode, key: object): void {
|
|
89
|
+
referenceMap.set(key, doc);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function updateReferenceMapAndGetKey(doc: DocumentNode): object {
|
|
89
93
|
const key = ObjectCreate(null);
|
|
90
|
-
|
|
94
|
+
updateReferenceMapWithKnownKey(doc, key);
|
|
91
95
|
|
|
92
96
|
return key;
|
|
93
97
|
}
|
|
@@ -219,10 +223,10 @@ export function gql(
|
|
|
219
223
|
}
|
|
220
224
|
|
|
221
225
|
if (inputSubstitutionFragments.length === 0) {
|
|
222
|
-
return
|
|
226
|
+
return updateReferenceMapAndGetKey(document);
|
|
223
227
|
}
|
|
224
228
|
|
|
225
|
-
return
|
|
229
|
+
return updateReferenceMapAndGetKey(insertFragments(document, inputSubstitutionFragments));
|
|
226
230
|
}
|
|
227
231
|
|
|
228
232
|
/**
|
package/src/main.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
GraphQLSchema,
|
|
3
|
+
GraphQLScalarType,
|
|
4
|
+
execute,
|
|
5
|
+
buildSchema,
|
|
6
|
+
getNamedType,
|
|
7
|
+
isObjectType,
|
|
8
|
+
} from 'graphql';
|
|
3
9
|
import { buildASTSchema } from 'graphql/utilities';
|
|
4
10
|
|
|
5
11
|
import {
|
|
@@ -22,14 +28,8 @@ import {
|
|
|
22
28
|
LuvioTypeNode,
|
|
23
29
|
} from './ast';
|
|
24
30
|
import { transform } from './document';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
Deprecated - Remove after existing usages are removed.
|
|
28
|
-
*/
|
|
29
|
-
export function parseAndVisit(source: string): LuvioDocumentNode {
|
|
30
|
-
const ast = parse(source);
|
|
31
|
-
return transform(ast);
|
|
32
|
-
}
|
|
31
|
+
import { parseDocument, updateReferenceMapWithKnownKey } from './gql';
|
|
32
|
+
import { metaschemaMapper } from './metaschema';
|
|
33
33
|
|
|
34
34
|
export type {
|
|
35
35
|
GraphQLObjectType,
|
|
@@ -63,16 +63,12 @@ export type {
|
|
|
63
63
|
ObjectFieldNode,
|
|
64
64
|
ScalarTypeDefinitionNode,
|
|
65
65
|
InputObjectTypeDefinitionNode,
|
|
66
|
+
InlineFragmentNode,
|
|
66
67
|
} from 'graphql/language';
|
|
67
68
|
export { ASTVisitor, parse, Kind, print, visit } from 'graphql/language';
|
|
68
69
|
export { isScalarType } from 'graphql/type';
|
|
69
70
|
export { stripIgnoredCharacters } from 'graphql/utilities';
|
|
70
|
-
export {
|
|
71
|
-
gql,
|
|
72
|
-
enableAddMetaschemaDirective,
|
|
73
|
-
disableAddMetaschemaDirective,
|
|
74
|
-
astResolver,
|
|
75
|
-
} from './gql';
|
|
71
|
+
export { gql, astResolver } from './gql';
|
|
76
72
|
export type { AstResolver } from './gql';
|
|
77
73
|
|
|
78
74
|
/**
|
|
@@ -99,4 +95,24 @@ export {
|
|
|
99
95
|
GraphQLSchema,
|
|
100
96
|
GraphQLScalarType,
|
|
101
97
|
buildASTSchema,
|
|
98
|
+
execute,
|
|
99
|
+
buildSchema,
|
|
100
|
+
getNamedType,
|
|
101
|
+
isObjectType,
|
|
102
102
|
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @deprecated In favor of gql tagged template literal
|
|
106
|
+
*/
|
|
107
|
+
export function parseAndVisit(source: string): LuvioDocumentNode {
|
|
108
|
+
const ast = parseDocument(source);
|
|
109
|
+
const luvioDocumentNode = transform(ast!);
|
|
110
|
+
|
|
111
|
+
// In-place substitution of metaschema annotations
|
|
112
|
+
metaschemaMapper(ast!);
|
|
113
|
+
|
|
114
|
+
// Set the AST reference map with LuvioDocumentNode as the key
|
|
115
|
+
// ASTResolver will resolve it to metaschema mapped AST
|
|
116
|
+
updateReferenceMapWithKnownKey(ast!, luvioDocumentNode);
|
|
117
|
+
return luvioDocumentNode;
|
|
118
|
+
}
|