@gqlbase/plugins 0.0.6 → 0.0.8

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 (129) hide show
  1. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.d.ts +31 -0
  2. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.d.ts.map +1 -0
  3. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.js +139 -0
  4. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.js.map +1 -0
  5. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.utils.d.ts +18 -0
  6. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.utils.d.ts.map +1 -0
  7. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.utils.js +8 -0
  8. package/dist/appsync/AppSyncSchemaGeneratorPlugin/AppSyncSchemaGeneratorPlugin.utils.js.map +1 -0
  9. package/dist/appsync/AppSyncSchemaGeneratorPlugin/index.d.ts +3 -0
  10. package/dist/appsync/AppSyncSchemaGeneratorPlugin/index.d.ts.map +1 -0
  11. package/dist/appsync/AppSyncSchemaGeneratorPlugin/index.js +2 -0
  12. package/dist/appsync/AppSyncSchemaGeneratorPlugin/index.js.map +1 -0
  13. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.d.ts +33 -0
  14. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.d.ts.map +1 -0
  15. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.js +91 -0
  16. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.js.map +1 -0
  17. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.utils.d.ts +29 -0
  18. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.utils.d.ts.map +1 -0
  19. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.utils.js +53 -0
  20. package/dist/appsync/AppSyncUtilsPlugin/AppSyncUtilsPlugin.utils.js.map +1 -0
  21. package/dist/appsync/AppSyncUtilsPlugin/index.d.ts +3 -0
  22. package/dist/appsync/AppSyncUtilsPlugin/index.d.ts.map +1 -0
  23. package/dist/appsync/AppSyncUtilsPlugin/index.js +3 -0
  24. package/dist/appsync/AppSyncUtilsPlugin/index.js.map +1 -0
  25. package/dist/appsync/appSyncPreset.d.ts +17 -0
  26. package/dist/appsync/appSyncPreset.d.ts.map +1 -0
  27. package/dist/appsync/appSyncPreset.js +21 -0
  28. package/dist/appsync/appSyncPreset.js.map +1 -0
  29. package/dist/appsync/index.d.ts +2 -0
  30. package/dist/appsync/index.d.ts.map +1 -0
  31. package/dist/appsync/index.js +2 -0
  32. package/dist/appsync/index.js.map +1 -0
  33. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.d.ts +55 -0
  34. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.d.ts.map +1 -0
  35. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.js +100 -0
  36. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.js.map +1 -0
  37. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.utils.d.ts +3 -0
  38. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.utils.d.ts.map +1 -0
  39. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.utils.js +4 -0
  40. package/dist/base/InterfaceUtilsPlugin/InterfaceUtilsPlugin.utils.js.map +1 -0
  41. package/dist/base/InterfaceUtilsPlugin/index.d.ts +3 -0
  42. package/dist/base/InterfaceUtilsPlugin/index.d.ts.map +1 -0
  43. package/dist/base/InterfaceUtilsPlugin/index.js +3 -0
  44. package/dist/base/InterfaceUtilsPlugin/index.js.map +1 -0
  45. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.d.ts +9 -3
  46. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.d.ts.map +1 -1
  47. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.js +26 -16
  48. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.js.map +1 -1
  49. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.d.ts +19 -9
  50. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.d.ts.map +1 -1
  51. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.js +11 -11
  52. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.js.map +1 -1
  53. package/dist/base/RelationsPlugin/RelationsPlugin.d.ts +13 -8
  54. package/dist/base/RelationsPlugin/RelationsPlugin.d.ts.map +1 -1
  55. package/dist/base/RelationsPlugin/RelationsPlugin.js +30 -46
  56. package/dist/base/RelationsPlugin/RelationsPlugin.js.map +1 -1
  57. package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts +5 -3
  58. package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts.map +1 -1
  59. package/dist/base/RelationsPlugin/RelationsPlugin.utils.js +26 -1
  60. package/dist/base/RelationsPlugin/RelationsPlugin.utils.js.map +1 -1
  61. package/dist/base/RelationsPlugin/index.d.ts +1 -1
  62. package/dist/base/RelationsPlugin/index.d.ts.map +1 -1
  63. package/dist/base/RelationsPlugin/index.js +1 -1
  64. package/dist/base/RelationsPlugin/index.js.map +1 -1
  65. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.d.ts +28 -0
  66. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.d.ts.map +1 -0
  67. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.js +33 -0
  68. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.js.map +1 -0
  69. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.utils.d.ts +14 -0
  70. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.utils.d.ts.map +1 -0
  71. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.utils.js +39 -0
  72. package/dist/base/RfcFeaturesPlugin/RfcFeaturesPlugin.utils.js.map +1 -0
  73. package/dist/base/RfcFeaturesPlugin/index.d.ts +3 -0
  74. package/dist/base/RfcFeaturesPlugin/index.d.ts.map +1 -0
  75. package/dist/base/RfcFeaturesPlugin/index.js +3 -0
  76. package/dist/base/RfcFeaturesPlugin/index.js.map +1 -0
  77. package/dist/base/ScalarsPlugin/ScalarsPlugin.utils.d.ts +15 -0
  78. package/dist/base/ScalarsPlugin/ScalarsPlugin.utils.d.ts.map +1 -0
  79. package/dist/base/ScalarsPlugin/ScalarsPlugin.utils.js +16 -0
  80. package/dist/base/ScalarsPlugin/ScalarsPlugin.utils.js.map +1 -0
  81. package/dist/base/ScalarsPlugin/index.d.ts +1 -0
  82. package/dist/base/ScalarsPlugin/index.d.ts.map +1 -1
  83. package/dist/base/ScalarsPlugin/index.js +1 -0
  84. package/dist/base/ScalarsPlugin/index.js.map +1 -1
  85. package/dist/base/basePreset.d.ts +2 -0
  86. package/dist/base/basePreset.d.ts.map +1 -1
  87. package/dist/base/basePreset.js +6 -0
  88. package/dist/base/basePreset.js.map +1 -1
  89. package/dist/base/index.d.ts +2 -0
  90. package/dist/base/index.d.ts.map +1 -1
  91. package/dist/base/index.js +2 -0
  92. package/dist/base/index.js.map +1 -1
  93. package/dist/index.d.ts +4 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +4 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/relay/ConnectionPlugin/ConnectionPlugin.d.ts +63 -0
  98. package/dist/relay/ConnectionPlugin/ConnectionPlugin.d.ts.map +1 -0
  99. package/dist/relay/ConnectionPlugin/ConnectionPlugin.js +156 -0
  100. package/dist/relay/ConnectionPlugin/ConnectionPlugin.js.map +1 -0
  101. package/dist/relay/ConnectionPlugin/ConnectionPlugin.utils.d.ts +4 -0
  102. package/dist/relay/ConnectionPlugin/ConnectionPlugin.utils.d.ts.map +1 -0
  103. package/dist/relay/ConnectionPlugin/ConnectionPlugin.utils.js +26 -0
  104. package/dist/relay/ConnectionPlugin/ConnectionPlugin.utils.js.map +1 -0
  105. package/dist/relay/ConnectionPlugin/index.d.ts +3 -0
  106. package/dist/relay/ConnectionPlugin/index.d.ts.map +1 -0
  107. package/dist/relay/ConnectionPlugin/index.js +3 -0
  108. package/dist/relay/ConnectionPlugin/index.js.map +1 -0
  109. package/dist/relay/{NodeInterfacePlugin.d.ts → NodeInterfacePlugin/NodeInterfacePlugin.d.ts} +30 -6
  110. package/dist/relay/NodeInterfacePlugin/NodeInterfacePlugin.d.ts.map +1 -0
  111. package/dist/relay/{NodeInterfacePlugin.js → NodeInterfacePlugin/NodeInterfacePlugin.js} +37 -27
  112. package/dist/relay/NodeInterfacePlugin/NodeInterfacePlugin.js.map +1 -0
  113. package/dist/relay/NodeInterfacePlugin/index.d.ts +2 -0
  114. package/dist/relay/NodeInterfacePlugin/index.d.ts.map +1 -0
  115. package/dist/relay/NodeInterfacePlugin/index.js +2 -0
  116. package/dist/relay/NodeInterfacePlugin/index.js.map +1 -0
  117. package/dist/relay/index.d.ts +3 -2
  118. package/dist/relay/index.d.ts.map +1 -1
  119. package/dist/relay/index.js +3 -2
  120. package/dist/relay/index.js.map +1 -1
  121. package/dist/relay/relayPreset.js +2 -2
  122. package/dist/relay/relayPreset.js.map +1 -1
  123. package/package.json +7 -3
  124. package/dist/relay/ConnectionPlugin.d.ts +0 -46
  125. package/dist/relay/ConnectionPlugin.d.ts.map +0 -1
  126. package/dist/relay/ConnectionPlugin.js +0 -200
  127. package/dist/relay/ConnectionPlugin.js.map +0 -1
  128. package/dist/relay/NodeInterfacePlugin.d.ts.map +0 -1
  129. package/dist/relay/NodeInterfacePlugin.js.map +0 -1
@@ -0,0 +1,156 @@
1
+ import { createPluginFactory, TransformerPluginBase } from "@gqlbase/core/plugins";
2
+ import { InputValueNode, InterfaceNode, ObjectNode, FieldNode, NonNullTypeNode, ListTypeNode, NamedTypeNode, DirectiveNode, ArgumentNode, ValueNode, } from "@gqlbase/core/definition";
3
+ import { TransformerPluginExecutionError } from "@gqlbase/shared/errors";
4
+ import { pascalCase } from "@gqlbase/shared/format";
5
+ import { RfcDirective, UtilityDirective } from "../../base/index.js";
6
+ import { isPaginationConnection, isRelationField, isValidRelationTarget, parseFieldRelation, } from "../../base/RelationsPlugin/index.js";
7
+ import { isRelayConnection, isRelayEdge } from "./ConnectionPlugin.utils.js";
8
+ /**
9
+ * Transforms many relationships into Relay compaticale connections, and adds the necessary fields and arguments to support cursor based pagination.
10
+ *
11
+ * @example
12
+ * ```graphql
13
+ * # Before
14
+ * type User {
15
+ * id: ID!
16
+ * name: String!
17
+ * posts: Post `@hasMany`
18
+ * }
19
+ *
20
+ * type Post {
21
+ * id: ID!
22
+ * title: String!
23
+ * }
24
+ *
25
+ * # After
26
+ * type User {
27
+ * id: ID!
28
+ * name: String!
29
+ * posts: PostConnection
30
+ * }
31
+ *
32
+ * type Post {
33
+ * id: ID!
34
+ * title: String!
35
+ * }
36
+ *
37
+ * type PostConnection {
38
+ * edges: [PostEdge]
39
+ * pageInfo: PageInfo!
40
+ * }
41
+ *
42
+ * type PostEdge {
43
+ * cursor: String
44
+ * node: Post
45
+ * }
46
+ *
47
+ * type PageInfo {
48
+ * hasNextPage: Boolean!
49
+ * hasPreviousPage: Boolean!
50
+ * startCursor: String
51
+ * endCursor: String
52
+ * }
53
+ *
54
+ * ```
55
+ */
56
+ export class ConnectionPlugin extends TransformerPluginBase {
57
+ constructor(context) {
58
+ super("ConnectionPlugin", context);
59
+ }
60
+ _getConnectionTarget(object, field) {
61
+ const target = this.context.document.getNode(field.type.getTypeName());
62
+ if (!target || !isValidRelationTarget(target)) {
63
+ throw new TransformerPluginExecutionError(this.name, `Type ${target?.name ?? "unknwon type"} is not a valid connection target for ${object.name}.${field.name} `);
64
+ }
65
+ if (isPaginationConnection(target)) {
66
+ throw new TransformerPluginExecutionError(this.name, `Unexpected conflicting pagination connection type ${target.name} used as a connection target for ${object.name}.${field.name}. Make sure you set "usePaginationTypes" to "false" when using relay ConnectionPlugin.`);
67
+ }
68
+ return target;
69
+ }
70
+ _getFieldConnection(object, field) {
71
+ if (!isRelationField(field)) {
72
+ return null;
73
+ }
74
+ const target = this._getConnectionTarget(object, field);
75
+ return parseFieldRelation(object, field, target);
76
+ }
77
+ _setConnectionArguments(field) {
78
+ if (!field.hasArgument("first")) {
79
+ field.addArgument(InputValueNode.create("first", NamedTypeNode.create("Int")));
80
+ }
81
+ if (!field.hasArgument("after")) {
82
+ field.addArgument(InputValueNode.create("after", NamedTypeNode.create("String")));
83
+ }
84
+ }
85
+ _createConnection(field, connection) {
86
+ const { target } = connection;
87
+ const hasSemanticNonNull = this.context.document.hasNode(RfcDirective.SEMANTIC_NON_NULL);
88
+ if (!isRelayConnection(target)) {
89
+ const connectionTypeName = pascalCase(target.name, "connection");
90
+ const edgeTypeName = pascalCase(target.name, "edge");
91
+ let connectionType = this.context.document.getNode(connectionTypeName);
92
+ let edgeType = this.context.document.getNode(edgeTypeName);
93
+ if (!connectionType) {
94
+ connectionType = ObjectNode.create(connectionTypeName, [
95
+ FieldNode.create("edges", ListTypeNode.create(NamedTypeNode.create(edgeTypeName)), null, hasSemanticNonNull
96
+ ? [
97
+ DirectiveNode.create(RfcDirective.SEMANTIC_NON_NULL, [
98
+ ArgumentNode.create("levels", ValueNode.list([ValueNode.int(0), ValueNode.int(1)])),
99
+ ]),
100
+ ]
101
+ : undefined),
102
+ FieldNode.create("pageInfo", NonNullTypeNode.create("PageInfo")),
103
+ ]);
104
+ this.context.document.addNode(connectionType);
105
+ }
106
+ if (!edgeType) {
107
+ edgeType = ObjectNode.create(edgeTypeName, [
108
+ FieldNode.create("cursor", NamedTypeNode.create("String"), null, [
109
+ DirectiveNode.create(UtilityDirective.CLIENT_ONLY),
110
+ ]),
111
+ FieldNode.create("node", NamedTypeNode.create(target.name), null, [
112
+ DirectiveNode.create(UtilityDirective.CLIENT_ONLY),
113
+ ]),
114
+ ]);
115
+ this.context.document.addNode(edgeType);
116
+ }
117
+ this._setConnectionArguments(field);
118
+ field.setType(NonNullTypeNode.create(connectionTypeName));
119
+ }
120
+ }
121
+ before() {
122
+ if (!this.context.document.hasNode("PageInfo")) {
123
+ this.context.document.addNode(ObjectNode.create("PageInfo", [
124
+ FieldNode.create("hasNextPage", NonNullTypeNode.create("Boolean")),
125
+ FieldNode.create("hasPreviousPage", NonNullTypeNode.create("Boolean")),
126
+ FieldNode.create("startCursor", NamedTypeNode.create("String")),
127
+ FieldNode.create("endCursor", NamedTypeNode.create("String")),
128
+ ]));
129
+ }
130
+ }
131
+ match(definition) {
132
+ if (definition instanceof InterfaceNode || definition instanceof ObjectNode) {
133
+ if (definition.name === "Mutation")
134
+ return false;
135
+ if (isRelayConnection(definition) || isRelayEdge(definition))
136
+ return false;
137
+ if (!definition.fields?.length)
138
+ return false;
139
+ return true;
140
+ }
141
+ return false;
142
+ }
143
+ execute(definition) {
144
+ for (const field of definition.fields ?? []) {
145
+ const connection = this._getFieldConnection(definition, field);
146
+ if (!connection) {
147
+ continue;
148
+ }
149
+ if (connection.type === "oneToMany") {
150
+ this._createConnection(field, connection);
151
+ }
152
+ }
153
+ }
154
+ }
155
+ export const connectionPlugin = createPluginFactory(ConnectionPlugin);
156
+ //# sourceMappingURL=ConnectionPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionPlugin.js","sourceRoot":"","sources":["../../../src/relay/ConnectionPlugin/ConnectionPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DefinitionNode } from "@gqlbase/core/definition";
2
+ export declare const isRelayConnection: (node: DefinitionNode) => boolean;
3
+ export declare const isRelayEdge: (node: DefinitionNode) => boolean;
4
+ //# sourceMappingURL=ConnectionPlugin.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionPlugin.utils.d.ts","sourceRoot":"","sources":["../../../src/relay/ConnectionPlugin/ConnectionPlugin.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAEtE,eAAO,MAAM,iBAAiB,GAAI,MAAM,cAAc,KAAG,OASxD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,cAAc,KAAG,OASlD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { ObjectNode } from "@gqlbase/core/definition";
2
+ export const isRelayConnection = (node) => {
3
+ if (node instanceof ObjectNode) {
4
+ if (!node.name.endsWith("Connection"))
5
+ return false;
6
+ if (!node.fields || node.fields.length < 2)
7
+ return false;
8
+ if (!node.hasField("edges") || !node.hasField("pageInfo"))
9
+ return false;
10
+ return true;
11
+ }
12
+ return false;
13
+ };
14
+ export const isRelayEdge = (node) => {
15
+ if (node instanceof ObjectNode) {
16
+ if (!node.name.endsWith("Edge"))
17
+ return false;
18
+ if (!node.fields || node.fields.length < 2)
19
+ return false;
20
+ if (!node.hasField("node") || !node.hasField("cursor"))
21
+ return false;
22
+ return true;
23
+ }
24
+ return false;
25
+ };
26
+ //# sourceMappingURL=ConnectionPlugin.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionPlugin.utils.js","sourceRoot":"","sources":["../../../src/relay/ConnectionPlugin/ConnectionPlugin.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAoB,EAAW,EAAE;IACjE,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAoB,EAAW,EAAE;IAC3D,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConnectionPlugin, connectionPlugin } from "./ConnectionPlugin.js";
2
+ export { isRelayConnection, isRelayEdge } from "./ConnectionPlugin.utils.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/relay/ConnectionPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConnectionPlugin, connectionPlugin } from "./ConnectionPlugin.js";
2
+ export { isRelayConnection, isRelayEdge } from "./ConnectionPlugin.utils.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relay/ConnectionPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,16 +1,40 @@
1
- import { type ITransformerPlugin } from "@gqlbase/core/plugins";
1
+ import { TransformerPluginBase } from "@gqlbase/core/plugins";
2
2
  import type { ITransformerContext } from "@gqlbase/core/context";
3
3
  import { DefinitionNode, ObjectNode } from "@gqlbase/core/definition";
4
4
  /**
5
5
  * Adds a `Node` interface with an `id: ID!` field to the schema and ensures that all types that implement the `Node` interface also have the `id: ID!` field.
6
6
  *
7
- * @dependency ModelPlugin
7
+ * @definition
8
+ * ```graphql
9
+ * interface Node {
10
+ * id: ID!
11
+ * }
12
+ * ```
13
+ *
14
+ * @example
15
+ * ```graphql
16
+ * # Before
17
+ * type User `@model` {
18
+ * name: String!
19
+ * }
20
+ *
21
+ * # After
22
+ * interface Node {
23
+ * id: ID!
24
+ * }
25
+ *
26
+ * type User implements Node `@model` {
27
+ * id: ID!
28
+ * name: String!
29
+ * }
30
+ *
31
+ * type Query {
32
+ * node(id: ID!): Node @hasOne
33
+ * }
34
+ * ```
8
35
  */
9
- export declare class NodeInterfacePlugin implements ITransformerPlugin {
10
- readonly name = "NodeInterfacePlugin";
11
- readonly context: ITransformerContext;
36
+ export declare class NodeInterfacePlugin extends TransformerPluginBase {
12
37
  constructor(context: ITransformerContext);
13
- init(): void;
14
38
  match(definition: DefinitionNode): boolean;
15
39
  before(): void;
16
40
  execute(definition: ObjectNode): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeInterfacePlugin.d.ts","sourceRoot":"","sources":["../../../src/relay/NodeInterfacePlugin/NodeInterfacePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,cAAc,EAOd,UAAU,EACX,MAAM,0BAA0B,CAAC;AAIlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,qBAAa,mBAAoB,SAAQ,qBAAqB;gBAChD,OAAO,EAAE,mBAAmB;IAIxC,KAAK,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO;IAU1C,MAAM,IAAI,IAAI;IAyBd,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IA4B9B,KAAK,IAAI,IAAI;CAUrB;AAED,eAAO,MAAM,mBAAmB,uEAA2C,CAAC"}
@@ -1,20 +1,42 @@
1
- import { createPluginFactory } from "@gqlbase/core/plugins";
1
+ import { createPluginFactory, TransformerPluginBase } from "@gqlbase/core/plugins";
2
2
  import { DirectiveNode, FieldNode, InputValueNode, InterfaceNode, NamedTypeNode, NonNullTypeNode, ObjectNode, } from "@gqlbase/core/definition";
3
3
  import { InvalidDefinitionError, TransformerPluginExecutionError } from "@gqlbase/shared/errors";
4
- import { isModel } from "../base/index.js";
4
+ import { isModel } from "../../base/index.js";
5
5
  /**
6
6
  * Adds a `Node` interface with an `id: ID!` field to the schema and ensures that all types that implement the `Node` interface also have the `id: ID!` field.
7
7
  *
8
- * @dependency ModelPlugin
8
+ * @definition
9
+ * ```graphql
10
+ * interface Node {
11
+ * id: ID!
12
+ * }
13
+ * ```
14
+ *
15
+ * @example
16
+ * ```graphql
17
+ * # Before
18
+ * type User `@model` {
19
+ * name: String!
20
+ * }
21
+ *
22
+ * # After
23
+ * interface Node {
24
+ * id: ID!
25
+ * }
26
+ *
27
+ * type User implements Node `@model` {
28
+ * id: ID!
29
+ * name: String!
30
+ * }
31
+ *
32
+ * type Query {
33
+ * node(id: ID!): Node @hasOne
34
+ * }
35
+ * ```
9
36
  */
10
- export class NodeInterfacePlugin {
11
- name = "NodeInterfacePlugin";
12
- context;
37
+ export class NodeInterfacePlugin extends TransformerPluginBase {
13
38
  constructor(context) {
14
- this.context = context;
15
- }
16
- init() {
17
- // No initialization needed
39
+ super("NodeInterfacePlugin", context);
18
40
  }
19
41
  match(definition) {
20
42
  if (definition instanceof ObjectNode) {
@@ -25,15 +47,9 @@ export class NodeInterfacePlugin {
25
47
  return false;
26
48
  }
27
49
  before() {
28
- let node = this.context.document.getNode("Node");
29
- if (node) {
30
- if (!(node instanceof InterfaceNode)) {
31
- throw new InvalidDefinitionError("Node type must be an interface");
32
- }
33
- }
34
- else {
35
- node = InterfaceNode.create("Node", []);
36
- this.context.document.addNode(node);
50
+ const node = this.context.document.getOrCreateNode("Node", InterfaceNode.create("Node", []));
51
+ if (!(node instanceof InterfaceNode)) {
52
+ throw new InvalidDefinitionError("Node type must be an interface");
37
53
  }
38
54
  if (!node.hasField("id")) {
39
55
  node.addField(FieldNode.create("id", NonNullTypeNode.create(NamedTypeNode.create("ID"))));
@@ -44,10 +60,7 @@ export class NodeInterfacePlugin {
44
60
  }
45
61
  }
46
62
  execute(definition) {
47
- const nodeInterface = this.context.document.getNode("Node");
48
- if (!nodeInterface) {
49
- throw new TransformerPluginExecutionError(this.name, "Node Interface not found. Make sure you run `plugin.init()` before executing.");
50
- }
63
+ const nodeInterface = this.context.document.getNodeOrThrow("Node");
51
64
  // In definition has directive `@model` it should also implement `Node` interface
52
65
  if (isModel(definition) && !definition.hasInterface("Node")) {
53
66
  definition.addInterface(nodeInterface.name);
@@ -68,10 +81,7 @@ export class NodeInterfacePlugin {
68
81
  }
69
82
  }
70
83
  after() {
71
- const iface = this.context.document.getNode("Node");
72
- if (!iface || !(iface instanceof InterfaceNode)) {
73
- throw new TransformerPluginExecutionError(this.name, "Node Interface not found. Make sure you run `plugin.init()` before executing.");
74
- }
84
+ const iface = this.context.document.getNodeOrThrow("Node");
75
85
  // Node interface should have only 1 field, the `id`
76
86
  for (const field of iface.fields ?? []) {
77
87
  if (field.name !== "id") {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeInterfacePlugin.js","sourceRoot":"","sources":["../../../src/relay/NodeInterfacePlugin/NodeInterfacePlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/relay/NodeInterfacePlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relay/NodeInterfacePlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,4 @@
1
- export { ConnectionPlugin, ConnectionDirective, connectionPlugin, isConnectionNode, isEdgeNode, } from "./ConnectionPlugin.js";
2
- export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
1
+ export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin/index.js";
2
+ export { ConnectionPlugin, connectionPlugin, isRelayConnection, isRelayEdge, } from "./ConnectionPlugin/index.js";
3
+ export { relayPreset } from "./relayPreset.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,3 +1,4 @@
1
- export { ConnectionPlugin, ConnectionDirective, connectionPlugin, isConnectionNode, isEdgeNode, } from "./ConnectionPlugin.js";
2
- export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
1
+ export { NodeInterfacePlugin, nodeInterfacePlugin } from "./NodeInterfacePlugin/index.js";
2
+ export { ConnectionPlugin, connectionPlugin, isRelayConnection, isRelayEdge, } from "./ConnectionPlugin/index.js";
3
+ export { relayPreset } from "./relayPreset.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { connectionPlugin } from "./ConnectionPlugin.js";
2
- import { nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
1
+ import { connectionPlugin } from "./ConnectionPlugin/index.js";
2
+ import { nodeInterfacePlugin } from "./NodeInterfacePlugin/index.js";
3
3
  /**
4
4
  * A preset that includes all the Relay plugins
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"relayPreset.js","sourceRoot":"","sources":["../../src/relay/relayPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;;;GAQG;AAEH,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"relayPreset.js","sourceRoot":"","sources":["../../src/relay/relayPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE;;;;;;;;GAQG;AAEH,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACrD,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gqlbase/plugins",
3
3
  "description": "Collection of plugins and presets for gqlbase, providing common transformations and utilities that can be used in GraphQL schema transformation processes.",
4
- "version": "0.0.6",
4
+ "version": "0.0.8",
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
7
  "license": "MIT",
@@ -30,6 +30,10 @@
30
30
  "main": "dist/index.js",
31
31
  "types": "dist/index.d.ts",
32
32
  "exports": {
33
+ ".": {
34
+ "default": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ },
33
37
  "./*": {
34
38
  "default": "./dist/*/index.js",
35
39
  "types": "./dist/*/index.d.ts"
@@ -42,8 +46,8 @@
42
46
  "test": "vitest run"
43
47
  },
44
48
  "dependencies": {
45
- "@gqlbase/core": "^0.0.6",
46
- "@gqlbase/shared": "^0.0.6"
49
+ "@gqlbase/core": "^0.0.8",
50
+ "@gqlbase/shared": "^0.0.8"
47
51
  },
48
52
  "peerDependencies": {
49
53
  "graphql": ">=16"
@@ -1,46 +0,0 @@
1
- import { ITransformerContext } from "@gqlbase/core/context";
2
- import { ITransformerPlugin } from "@gqlbase/core/plugins";
3
- import { DefinitionNode, InterfaceNode, ObjectNode, UnionNode } from "@gqlbase/core/definition";
4
- export declare const ConnectionDirective: {
5
- readonly HAS_ONE: "hasOne";
6
- readonly HAS_MANY: "hasMany";
7
- };
8
- export declare const RelationType: {
9
- readonly ONE_TO_ONE: "oneToOne";
10
- readonly ONE_TO_MANY: "oneToMany";
11
- readonly MANY_TO_MANY: "manyToMany";
12
- };
13
- type Relation = (typeof RelationType)[keyof typeof RelationType];
14
- export declare const isConnectionNode: (node: DefinitionNode) => boolean;
15
- export declare const isEdgeNode: (node: DefinitionNode) => boolean;
16
- export interface DirectiveArgs {
17
- relation?: Relation;
18
- key?: string;
19
- }
20
- export interface FieldConnection {
21
- relation: Relation;
22
- target: ObjectNode | InterfaceNode | UnionNode;
23
- key?: string;
24
- }
25
- export declare class ConnectionPlugin implements ITransformerPlugin {
26
- readonly name = "ConnectionPlugin";
27
- readonly context: ITransformerContext;
28
- constructor(context: ITransformerContext);
29
- private _getConnectionTarget;
30
- private _getFieldConnection;
31
- private _setConnectionArguments;
32
- /**
33
- * For one-to-many connections user should be able to add the connection key via mutations.
34
- * By default the connection key is _writeOnly_ meaning we only add it to the mutation inputs.
35
- */
36
- private _setConnectionKey;
37
- private _createConnectionTypes;
38
- private _createEdgesConnection;
39
- init(): void;
40
- match(definition: DefinitionNode): boolean;
41
- normalize(definition: ObjectNode | InterfaceNode): void;
42
- execute(definition: ObjectNode | InterfaceNode): void;
43
- }
44
- export declare const connectionPlugin: (options?: unknown) => import("@gqlbase/core/plugins").IPluginFactory;
45
- export {};
46
- //# sourceMappingURL=ConnectionPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConnectionPlugin.d.ts","sourceRoot":"","sources":["../../src/relay/ConnectionPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAuB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACL,cAAc,EAEd,aAAa,EACb,UAAU,EAEV,SAAS,EAKV,MAAM,0BAA0B,CAAC;AAMlC,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC;AAEX,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,KAAK,QAAQ,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAEjE,eAAO,MAAM,gBAAgB,GAAI,MAAM,cAAc,KAAG,OASvD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,cAAc,KAAG,OASjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,SAAgB,IAAI,sBAAsB;IAC1C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;gBAE1B,OAAO,EAAE,mBAAmB;IAIxC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,mBAAmB;IAwD3B,OAAO,CAAC,uBAAuB;IAU/B;;;OAGG;IAEH,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,sBAAsB;IAQvB,IAAI,IAAI,IAAI;IAWZ,KAAK,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO;IAY1C,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAiCvD,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa;CAoBtD;AAED,eAAO,MAAM,gBAAgB,uEAAwC,CAAC"}