@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/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, enableAddMetaschemaDirective, disableAddMetaschemaDirective, astResolver, } from './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.102.1",
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": "58 kB",
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 createReference(document: DocumentNode): object {
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
- referenceMap.set(key, document);
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 createReference(document);
226
+ return updateReferenceMapAndGetKey(document);
223
227
  }
224
228
 
225
- return createReference(insertFragments(document, inputSubstitutionFragments));
229
+ return updateReferenceMapAndGetKey(insertFragments(document, inputSubstitutionFragments));
226
230
  }
227
231
 
228
232
  /**
package/src/main.ts CHANGED
@@ -1,5 +1,11 @@
1
- import { parse } from 'graphql/language';
2
- import { GraphQLSchema, GraphQLScalarType } from 'graphql';
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
+ }