@gqlbase/plugins 0.0.1 → 0.0.4
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/base/ModelPlugin/ModelPlugin.d.ts +97 -0
- package/dist/base/ModelPlugin/ModelPlugin.d.ts.map +1 -0
- package/dist/base/ModelPlugin/ModelPlugin.js +405 -0
- package/dist/base/ModelPlugin/ModelPlugin.js.map +1 -0
- package/dist/base/ModelPlugin/ModelPlugin.utils.d.ts +31 -0
- package/dist/base/ModelPlugin/ModelPlugin.utils.d.ts.map +1 -0
- package/dist/base/ModelPlugin/ModelPlugin.utils.js +57 -0
- package/dist/base/ModelPlugin/ModelPlugin.utils.js.map +1 -0
- package/dist/base/ModelPlugin/index.d.ts +3 -0
- package/dist/base/ModelPlugin/index.d.ts.map +1 -0
- package/dist/base/ModelPlugin/index.js +3 -0
- package/dist/base/ModelPlugin/index.js.map +1 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.d.ts +60 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.d.ts.map +1 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.js +188 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.js.map +1 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts +19 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts.map +1 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.utils.js +30 -0
- package/dist/base/RelationsPlugin/RelationsPlugin.utils.js.map +1 -0
- package/dist/base/RelationsPlugin/index.d.ts +3 -0
- package/dist/base/RelationsPlugin/index.d.ts.map +1 -0
- package/dist/base/RelationsPlugin/index.js +3 -0
- package/dist/base/RelationsPlugin/index.js.map +1 -0
- package/dist/base/SchemaGeneratorPlugin.d.ts +7 -0
- package/dist/base/SchemaGeneratorPlugin.d.ts.map +1 -0
- package/dist/base/SchemaGeneratorPlugin.js +13 -0
- package/dist/base/SchemaGeneratorPlugin.js.map +1 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.d.ts +17 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.d.ts.map +1 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.js +66 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.js.map +1 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.d.ts +25 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.d.ts.map +1 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.js +38 -0
- package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.js.map +1 -0
- package/dist/base/UtilitiesPlugin/index.d.ts +3 -0
- package/dist/base/UtilitiesPlugin/index.d.ts.map +1 -0
- package/dist/base/UtilitiesPlugin/index.js +3 -0
- package/dist/base/UtilitiesPlugin/index.js.map +1 -0
- package/dist/base/basePreset.d.ts +13 -0
- package/dist/base/basePreset.d.ts.map +1 -0
- package/dist/base/basePreset.js +19 -0
- package/dist/base/basePreset.js.map +1 -0
- package/dist/base/index.d.ts +5 -1
- package/dist/base/index.d.ts.map +1 -1
- package/dist/base/index.js +6 -1
- package/dist/base/index.js.map +1 -0
- package/dist/relay/ConnectionPlugin.d.ts +46 -0
- package/dist/relay/ConnectionPlugin.d.ts.map +1 -0
- package/dist/relay/ConnectionPlugin.js +200 -0
- package/dist/relay/ConnectionPlugin.js.map +1 -0
- package/dist/relay/NodeInterfacePlugin.d.ts +20 -0
- package/dist/relay/NodeInterfacePlugin.d.ts.map +1 -0
- package/dist/relay/NodeInterfacePlugin.js +84 -0
- package/dist/relay/NodeInterfacePlugin.js.map +1 -0
- package/dist/relay/index.d.ts +3 -0
- package/dist/relay/index.d.ts.map +1 -0
- package/dist/relay/index.js +3 -0
- package/dist/relay/index.js.map +1 -0
- package/dist/relay/relayPreset.d.ts +11 -0
- package/dist/relay/relayPreset.d.ts.map +1 -0
- package/dist/relay/relayPreset.js +15 -0
- package/dist/relay/relayPreset.js.map +1 -0
- package/package.json +3 -3
- package/dist/base/ModelPlugin.d.ts +0 -59
- package/dist/base/ModelPlugin.d.ts.map +0 -1
- package/dist/base/ModelPlugin.js +0 -222
package/dist/base/index.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { ModelPlugin, ModelDirective, ModelOperation, modelPlugin, isModel, } from "./ModelPlugin/index.js";
|
|
2
|
+
export { RelationsPlugin, relationPlugin, RelationDirective, isRelationField, isOneRelationship, isManyRelationship, } from "./RelationsPlugin/index.js";
|
|
3
|
+
export { UtilitiesPlugin, UtilityDirective, utilsPlugin, isReadOnly, isClientOnly, isCreateOnly, isFilterOnly, isServerOnly, isUpdateOnly, isWriteOnly, } from "./UtilitiesPlugin/index.js";
|
|
4
|
+
export { SchemaGeneratorPlugin, schemaGeneratorPlugin } from "./SchemaGeneratorPlugin.js";
|
|
5
|
+
export { basePreset } from "./basePreset.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,EACd,cAAc,EACd,WAAW,EACX,OAAO,GACR,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { createPluginFactory } from "@gqlbase/core/plugins";
|
|
2
|
+
import { InputValueNode, InterfaceNode, ObjectNode, FieldNode, UnionNode, NonNullTypeNode, ListTypeNode, NamedTypeNode, DirectiveNode, } from "@gqlbase/core/definition";
|
|
3
|
+
import { TransformerPluginExecutionError } from "@gqlbase/shared/errors";
|
|
4
|
+
import { camelCase, pascalCase } from "@gqlbase/shared/format";
|
|
5
|
+
import { UtilityDirective } from "../base/index.js";
|
|
6
|
+
import { isRelationField } from "../base/RelationsPlugin/index.js";
|
|
7
|
+
export const ConnectionDirective = {
|
|
8
|
+
HAS_ONE: "hasOne",
|
|
9
|
+
HAS_MANY: "hasMany",
|
|
10
|
+
};
|
|
11
|
+
export const RelationType = {
|
|
12
|
+
ONE_TO_ONE: "oneToOne",
|
|
13
|
+
ONE_TO_MANY: "oneToMany",
|
|
14
|
+
MANY_TO_MANY: "manyToMany",
|
|
15
|
+
};
|
|
16
|
+
export const isConnectionNode = (node) => {
|
|
17
|
+
if (node instanceof ObjectNode) {
|
|
18
|
+
if (!node.name.endsWith("Connection"))
|
|
19
|
+
return false;
|
|
20
|
+
if (!node.fields || node.fields.length < 2)
|
|
21
|
+
return false;
|
|
22
|
+
if (!node.hasField("edges") || !node.hasField("pageInfo"))
|
|
23
|
+
return false;
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
};
|
|
28
|
+
export const isEdgeNode = (node) => {
|
|
29
|
+
if (node instanceof ObjectNode) {
|
|
30
|
+
if (!node.name.endsWith("Edge"))
|
|
31
|
+
return false;
|
|
32
|
+
if (!node.fields || node.fields.length < 2)
|
|
33
|
+
return false;
|
|
34
|
+
if (!node.hasField("node") || !node.hasField("cursor"))
|
|
35
|
+
return false;
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
40
|
+
export class ConnectionPlugin {
|
|
41
|
+
name = "ConnectionPlugin";
|
|
42
|
+
context;
|
|
43
|
+
constructor(context) {
|
|
44
|
+
this.context = context;
|
|
45
|
+
}
|
|
46
|
+
_getConnectionTarget(field) {
|
|
47
|
+
const fieldType = this.context.document.getNode(field.type.getTypeName());
|
|
48
|
+
if (isRelationField(field)) {
|
|
49
|
+
return fieldType;
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
_getFieldConnection(object, field) {
|
|
54
|
+
const target = this._getConnectionTarget(field);
|
|
55
|
+
if (!target)
|
|
56
|
+
return null;
|
|
57
|
+
if (!(target instanceof ObjectNode) &&
|
|
58
|
+
!(target instanceof InterfaceNode) &&
|
|
59
|
+
!(target instanceof UnionNode)) {
|
|
60
|
+
throw new TransformerPluginExecutionError(this.name, `Type ${target.name} is not a valid connection target for ${object.name}.${field.name} `);
|
|
61
|
+
}
|
|
62
|
+
let directive = field.getDirective(ConnectionDirective.HAS_ONE);
|
|
63
|
+
if (directive) {
|
|
64
|
+
if (field.hasDirective(ConnectionDirective.HAS_MANY)) {
|
|
65
|
+
throw new TransformerPluginExecutionError(this.name, `Multiple connection directive detected for field: ${field.name}`);
|
|
66
|
+
}
|
|
67
|
+
const args = directive.getArgumentsJSON();
|
|
68
|
+
return {
|
|
69
|
+
relation: RelationType.ONE_TO_ONE,
|
|
70
|
+
target: target,
|
|
71
|
+
key: args.key ?? camelCase(field.name, "id"),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
directive = field.getDirective(ConnectionDirective.HAS_MANY);
|
|
75
|
+
if (directive) {
|
|
76
|
+
const args = directive.getArgumentsJSON();
|
|
77
|
+
return {
|
|
78
|
+
relation: args.relation ?? RelationType.ONE_TO_MANY,
|
|
79
|
+
target: target,
|
|
80
|
+
key: args.key,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
throw new TransformerPluginExecutionError(this.name, `Could not find connection directive: ${field.name}`);
|
|
84
|
+
}
|
|
85
|
+
_setConnectionArguments(field) {
|
|
86
|
+
if (!field.hasArgument("first")) {
|
|
87
|
+
field.addArgument(InputValueNode.create("first", NamedTypeNode.create("Int")));
|
|
88
|
+
}
|
|
89
|
+
if (!field.hasArgument("after")) {
|
|
90
|
+
field.addArgument(InputValueNode.create("after", NamedTypeNode.create("String")));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* For one-to-many connections user should be able to add the connection key via mutations.
|
|
95
|
+
* By default the connection key is _writeOnly_ meaning we only add it to the mutation inputs.
|
|
96
|
+
*/
|
|
97
|
+
_setConnectionKey(node, key, isPrivate = false) {
|
|
98
|
+
if (!node.hasField(key)) {
|
|
99
|
+
node.addField(FieldNode.create(key, NamedTypeNode.create("ID"), null, [
|
|
100
|
+
isPrivate
|
|
101
|
+
? DirectiveNode.create(UtilityDirective.SERVER_ONLY)
|
|
102
|
+
: DirectiveNode.create(UtilityDirective.WRITE_ONLY),
|
|
103
|
+
]));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
_createConnectionTypes(field, connection) {
|
|
107
|
+
const { target } = connection;
|
|
108
|
+
if (!isConnectionNode(target)) {
|
|
109
|
+
const connectionTypeName = pascalCase(target.name, "connection");
|
|
110
|
+
const edgeTypeName = pascalCase(target.name, "edge");
|
|
111
|
+
let connectionType = this.context.document.getNode(connectionTypeName);
|
|
112
|
+
let edgeType = this.context.document.getNode(edgeTypeName);
|
|
113
|
+
if (!connectionType) {
|
|
114
|
+
connectionType = ObjectNode.create(connectionTypeName, [
|
|
115
|
+
FieldNode.create("edges", NonNullTypeNode.create(ListTypeNode.create(NonNullTypeNode.create(edgeTypeName)))),
|
|
116
|
+
FieldNode.create("pageInfo", NonNullTypeNode.create("PageInfo")),
|
|
117
|
+
]);
|
|
118
|
+
this.context.document.addNode(connectionType);
|
|
119
|
+
}
|
|
120
|
+
if (!edgeType) {
|
|
121
|
+
edgeType = ObjectNode.create(`${target.name}Edge`, [
|
|
122
|
+
FieldNode.create("cursor", NamedTypeNode.create("String"), null, [
|
|
123
|
+
DirectiveNode.create(UtilityDirective.CLIENT_ONLY),
|
|
124
|
+
]),
|
|
125
|
+
FieldNode.create("node", NamedTypeNode.create(target.name), null, [
|
|
126
|
+
DirectiveNode.create(UtilityDirective.CLIENT_ONLY),
|
|
127
|
+
]),
|
|
128
|
+
]);
|
|
129
|
+
this.context.document.addNode(edgeType);
|
|
130
|
+
}
|
|
131
|
+
this._setConnectionArguments(field);
|
|
132
|
+
field.setType(NonNullTypeNode.create(connectionTypeName));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
_createEdgesConnection(parent, field, connection) {
|
|
136
|
+
this._createConnectionTypes(field, connection);
|
|
137
|
+
}
|
|
138
|
+
init() {
|
|
139
|
+
this.context.base.addNode(ObjectNode.create("PageInfo", [
|
|
140
|
+
FieldNode.create("hasNextPage", NamedTypeNode.create("Boolean")),
|
|
141
|
+
FieldNode.create("hasPreviousPage", NamedTypeNode.create("Boolean")),
|
|
142
|
+
FieldNode.create("startCursor", NamedTypeNode.create("String")),
|
|
143
|
+
FieldNode.create("endCursor", NamedTypeNode.create("String")),
|
|
144
|
+
]));
|
|
145
|
+
}
|
|
146
|
+
match(definition) {
|
|
147
|
+
if (definition instanceof InterfaceNode || definition instanceof ObjectNode) {
|
|
148
|
+
if (definition.name === "Mutation")
|
|
149
|
+
return false;
|
|
150
|
+
if (isConnectionNode(definition) || isEdgeNode(definition))
|
|
151
|
+
return false;
|
|
152
|
+
if (!definition.fields?.length)
|
|
153
|
+
return false;
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
normalize(definition) {
|
|
159
|
+
for (const field of definition.fields ?? []) {
|
|
160
|
+
const connection = this._getFieldConnection(definition, field);
|
|
161
|
+
if (!connection) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (connection.relation === RelationType.ONE_TO_ONE && connection.key) {
|
|
165
|
+
this._setConnectionKey(definition, connection.key, true);
|
|
166
|
+
}
|
|
167
|
+
if (connection.relation === RelationType.ONE_TO_MANY &&
|
|
168
|
+
!isConnectionNode(connection.target)) {
|
|
169
|
+
const sourceKey = connection.key ?? camelCase(definition.name, "id");
|
|
170
|
+
if (connection.target instanceof UnionNode) {
|
|
171
|
+
for (const type of connection.target.types ?? []) {
|
|
172
|
+
const unionType = this.context.document.getNode(type.getTypeName());
|
|
173
|
+
if (unionType instanceof ObjectNode || unionType instanceof InterfaceNode) {
|
|
174
|
+
this._setConnectionKey(unionType, sourceKey, false);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this._setConnectionKey(connection.target, sourceKey, false);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
execute(definition) {
|
|
185
|
+
if (!definition.fields) {
|
|
186
|
+
throw new TransformerPluginExecutionError(this.name, "Definition does not have any fields. Make sure you run `match` before calling `execute`.");
|
|
187
|
+
}
|
|
188
|
+
for (const field of definition.fields) {
|
|
189
|
+
const connection = this._getFieldConnection(definition, field);
|
|
190
|
+
if (!connection) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (connection.relation === RelationType.ONE_TO_MANY) {
|
|
194
|
+
this._createEdgesConnection(definition, field, connection);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export const connectionPlugin = createPluginFactory(ConnectionPlugin);
|
|
200
|
+
//# sourceMappingURL=ConnectionPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionPlugin.js","sourceRoot":"","sources":["../../src/relay/ConnectionPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAEL,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;CAClB,CAAC;AAIX,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAoB,EAAW,EAAE;IAChE,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,UAAU,GAAG,CAAC,IAAoB,EAAW,EAAE;IAC1D,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;AAaF,MAAM,OAAO,gBAAgB;IACX,IAAI,GAAG,kBAAkB,CAAC;IACjC,OAAO,CAAsB;IAEtC,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,oBAAoB,CAAC,KAAgB;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAE1E,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,mBAAmB,CACzB,MAAkC,EAClC,KAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,IACE,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC;YAC/B,CAAC,CAAC,MAAM,YAAY,aAAa,CAAC;YAClC,CAAC,CAAC,MAAM,YAAY,SAAS,CAAC,EAC9B,CAAC;YACD,MAAM,IAAI,+BAA+B,CACvC,IAAI,CAAC,IAAI,EACT,QAAQ,MAAM,CAAC,IAAI,yCAAyC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CACzF,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,+BAA+B,CACvC,IAAI,CAAC,IAAI,EACT,qDAAqD,KAAK,CAAC,IAAI,EAAE,CAClE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,EAAmB,CAAC;YAE3D,OAAO;gBACL,QAAQ,EAAE,YAAY,CAAC,UAAU;gBACjC,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;aAC7C,CAAC;QACJ,CAAC;QAED,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,EAAuC,CAAC;YAE/E,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,WAAW;gBACnD,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,+BAA+B,CACvC,IAAI,CAAC,IAAI,EACT,wCAAwC,KAAK,CAAC,IAAI,EAAE,CACrD,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,KAAgB;QAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;;OAGG;IAEK,iBAAiB,CAAC,IAAgC,EAAE,GAAW,EAAE,SAAS,GAAG,KAAK;QACxF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CACX,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;gBACtD,SAAS;oBACP,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;oBACpD,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC;aACtD,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAgB,EAAE,UAA2B;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACjE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAErD,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAe,CAAC;YACrF,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAe,CAAC;YAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBACrD,SAAS,CAAC,MAAM,CACd,OAAO,EACP,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAClF;oBACD,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBACjE,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,MAAM,EAAE;oBACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE;wBAC/D,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;qBACnD,CAAC;oBACF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;wBAChE,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;qBACnD,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACpC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,sBAAsB,CAC5B,MAAkC,EAClC,KAAgB,EAChB,UAA2B;QAE3B,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CACvB,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;YAC5B,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChE,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/D,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC9D,CAAC,CACH,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,UAA0B;QACrC,IAAI,UAAU,YAAY,aAAa,IAAI,UAAU,YAAY,UAAU,EAAE,CAAC;YAC5E,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACjD,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;gBAAE,OAAO,KAAK,CAAC;YAE7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,SAAS,CAAC,UAAsC;QACrD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAC;YAED,IACE,UAAU,CAAC,QAAQ,KAAK,YAAY,CAAC,WAAW;gBAChD,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EACpC,CAAC;gBACD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAErE,IAAI,UAAU,CAAC,MAAM,YAAY,SAAS,EAAE,CAAC;oBAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;wBACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;wBAEpE,IAAI,SAAS,YAAY,UAAU,IAAI,SAAS,YAAY,aAAa,EAAE,CAAC;4BAC1E,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;wBACtD,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEM,OAAO,CAAC,UAAsC;QACnD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,+BAA+B,CACvC,IAAI,CAAC,IAAI,EACT,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;gBACrD,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ITransformerPlugin } from "@gqlbase/core/plugins";
|
|
2
|
+
import type { ITransformerContext } from "@gqlbase/core/context";
|
|
3
|
+
import { DefinitionNode, ObjectNode } from "@gqlbase/core/definition";
|
|
4
|
+
/**
|
|
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
|
+
*
|
|
7
|
+
* @dependency ModelPlugin
|
|
8
|
+
*/
|
|
9
|
+
export declare class NodeInterfacePlugin implements ITransformerPlugin {
|
|
10
|
+
readonly name = "NodeInterfacePlugin";
|
|
11
|
+
readonly context: ITransformerContext;
|
|
12
|
+
constructor(context: ITransformerContext);
|
|
13
|
+
init(): void;
|
|
14
|
+
match(definition: DefinitionNode): boolean;
|
|
15
|
+
before(): void;
|
|
16
|
+
execute(definition: ObjectNode): void;
|
|
17
|
+
after(): void;
|
|
18
|
+
}
|
|
19
|
+
export declare const nodeInterfacePlugin: (options?: unknown) => import("@gqlbase/core/plugins").IPluginFactory;
|
|
20
|
+
//# sourceMappingURL=NodeInterfacePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeInterfacePlugin.d.ts","sourceRoot":"","sources":["../../src/relay/NodeInterfacePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,cAAc,EAOd,UAAU,EACX,MAAM,0BAA0B,CAAC;AAIlC;;;;GAIG;AAEH,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,SAAgB,IAAI,yBAAyB;IAC7C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;gBAE1B,OAAO,EAAE,mBAAmB;IAIjC,IAAI,IAAI,IAAI;IAInB,KAAK,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO;IAU1C,MAAM,IAAI,IAAI;IA8Bd,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAmC9B,KAAK,IAAI,IAAI;CAiBrB;AAED,eAAO,MAAM,mBAAmB,uEAA2C,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createPluginFactory } from "@gqlbase/core/plugins";
|
|
2
|
+
import { DirectiveNode, FieldNode, InputValueNode, InterfaceNode, NamedTypeNode, NonNullTypeNode, ObjectNode, } from "@gqlbase/core/definition";
|
|
3
|
+
import { InvalidDefinitionError, TransformerPluginExecutionError } from "@gqlbase/shared/errors";
|
|
4
|
+
import { isModel } from "../base/index.js";
|
|
5
|
+
/**
|
|
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
|
+
*
|
|
8
|
+
* @dependency ModelPlugin
|
|
9
|
+
*/
|
|
10
|
+
export class NodeInterfacePlugin {
|
|
11
|
+
name = "NodeInterfacePlugin";
|
|
12
|
+
context;
|
|
13
|
+
constructor(context) {
|
|
14
|
+
this.context = context;
|
|
15
|
+
}
|
|
16
|
+
init() {
|
|
17
|
+
// No initialization needed
|
|
18
|
+
}
|
|
19
|
+
match(definition) {
|
|
20
|
+
if (definition instanceof ObjectNode) {
|
|
21
|
+
if (definition.hasInterface("Node") || isModel(definition)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
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);
|
|
37
|
+
}
|
|
38
|
+
if (!node.hasField("id")) {
|
|
39
|
+
node.addField(FieldNode.create("id", NonNullTypeNode.create(NamedTypeNode.create("ID"))));
|
|
40
|
+
}
|
|
41
|
+
const queryNode = this.context.document.getQueryNode();
|
|
42
|
+
if (!queryNode.hasField("node")) {
|
|
43
|
+
queryNode.addField(FieldNode.create("node", NamedTypeNode.create("Node"), [InputValueNode.create("id", NonNullTypeNode.create(NamedTypeNode.create("ID")))], [DirectiveNode.create("hasOne")]));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
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
|
+
}
|
|
51
|
+
// In definition has directive `@model` it should also implement `Node` interface
|
|
52
|
+
if (isModel(definition) && !definition.hasInterface("Node")) {
|
|
53
|
+
definition.addInterface(nodeInterface.name);
|
|
54
|
+
}
|
|
55
|
+
// Make sure that all fields declared by `Node` interface are declared by definition as well
|
|
56
|
+
const nodeFields = nodeInterface.fields ?? [];
|
|
57
|
+
for (const field of nodeFields) {
|
|
58
|
+
if (!definition.hasField(field.name)) {
|
|
59
|
+
definition.addField(FieldNode.fromDefinition(field.serialize()));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const nodeFieldTypeName = field.type.getTypeName();
|
|
63
|
+
const fieldTypename = definition.getField(field.name)?.type.getTypeName();
|
|
64
|
+
if (nodeFieldTypeName !== fieldTypename) {
|
|
65
|
+
throw new TransformerPluginExecutionError(this.name, `Field ${field.name} in ${definition.name} has different type than the one declared in Node interface. Expected ${nodeFieldTypeName}, got ${fieldTypename}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
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
|
+
}
|
|
75
|
+
// Node interface should have only 1 field, the `id`
|
|
76
|
+
for (const field of iface.fields ?? []) {
|
|
77
|
+
if (field.name !== "id") {
|
|
78
|
+
iface.removeField(field.name);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export const nodeInterfacePlugin = createPluginFactory(NodeInterfacePlugin);
|
|
84
|
+
//# sourceMappingURL=NodeInterfacePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeInterfacePlugin.js","sourceRoot":"","sources":["../../src/relay/NodeInterfacePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A preset that includes all the Relay plugins
|
|
3
|
+
*
|
|
4
|
+
* Inludes:
|
|
5
|
+
* - `NodeInterfacePlugin`
|
|
6
|
+
* - `ConnectionPlugin`
|
|
7
|
+
*
|
|
8
|
+
* @returns An array of plugin factories.
|
|
9
|
+
*/
|
|
10
|
+
export declare function relayPreset(): import("@gqlbase/core").IPluginFactory[];
|
|
11
|
+
//# sourceMappingURL=relayPreset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayPreset.d.ts","sourceRoot":"","sources":["../../src/relay/relayPreset.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,wBAAgB,WAAW,6CAE1B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { connectionPlugin } from "./ConnectionPlugin.js";
|
|
2
|
+
import { nodeInterfacePlugin } from "./NodeInterfacePlugin.js";
|
|
3
|
+
/**
|
|
4
|
+
* A preset that includes all the Relay plugins
|
|
5
|
+
*
|
|
6
|
+
* Inludes:
|
|
7
|
+
* - `NodeInterfacePlugin`
|
|
8
|
+
* - `ConnectionPlugin`
|
|
9
|
+
*
|
|
10
|
+
* @returns An array of plugin factories.
|
|
11
|
+
*/
|
|
12
|
+
export function relayPreset() {
|
|
13
|
+
return [nodeInterfacePlugin(), connectionPlugin()];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=relayPreset.js.map
|
|
@@ -0,0 +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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gqlbase/plugins",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Collection of plugins and presets for gqlbase, providing common transformations and utilities that can be used in GraphQL schema transformation processes.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"test": "vitest run"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@gqlbase/core": "
|
|
46
|
-
"@gqlbase/shared": "
|
|
45
|
+
"@gqlbase/core": "^0.0.4",
|
|
46
|
+
"@gqlbase/shared": "^0.0.4"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"graphql": ">=16"
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { ITransformerPlugin } from "@gqlbase/core";
|
|
2
|
-
import type { ITransformerContext } from "@gqlbase/core/context";
|
|
3
|
-
import { DefinitionNode, ObjectNode } from "@gqlbase/core/definition";
|
|
4
|
-
export declare const ModelDirective: {
|
|
5
|
-
readonly MODEL: "model";
|
|
6
|
-
};
|
|
7
|
-
export declare const ModelOperation: {
|
|
8
|
-
readonly GET: "get";
|
|
9
|
-
readonly LIST: "list";
|
|
10
|
-
readonly SYNC: "sync";
|
|
11
|
-
readonly SUBSCRIBE: "subscribe";
|
|
12
|
-
readonly CREATE: "create";
|
|
13
|
-
readonly UPDATE: "update";
|
|
14
|
-
readonly UPSERT: "upsert";
|
|
15
|
-
readonly DELETE: "delete";
|
|
16
|
-
readonly READ: "read";
|
|
17
|
-
readonly WRITE: "write";
|
|
18
|
-
};
|
|
19
|
-
type OperationType = (typeof ModelOperation)[keyof typeof ModelOperation];
|
|
20
|
-
export declare const DEFAULT_READ_OPERATIONS: OperationType[];
|
|
21
|
-
export declare const DEFAULT_WRITE_OPERATIONS: OperationType[];
|
|
22
|
-
export declare const isModel: (definition: DefinitionNode) => definition is ObjectNode;
|
|
23
|
-
export interface ModelPluginOptions {
|
|
24
|
-
operations: OperationType[];
|
|
25
|
-
}
|
|
26
|
-
export declare class ModelPlugin implements ITransformerPlugin {
|
|
27
|
-
readonly name = "ModelPlugin";
|
|
28
|
-
readonly context: ITransformerContext;
|
|
29
|
-
private _defaultOperations;
|
|
30
|
-
constructor(context: ITransformerContext, options?: ModelPluginOptions);
|
|
31
|
-
private _expandOperations;
|
|
32
|
-
private _getOperationNames;
|
|
33
|
-
private _createGetQuery;
|
|
34
|
-
private _createListQuery;
|
|
35
|
-
private _shouldSkipFieldFromMutationInput;
|
|
36
|
-
private _isBuildInScalarType;
|
|
37
|
-
/**
|
|
38
|
-
* For each field in the model
|
|
39
|
-
* 1. If has `@readOnly` or connection directives - skip
|
|
40
|
-
* 2. If scalar or enum - add to input;
|
|
41
|
-
* 3. If union - skip;
|
|
42
|
-
* 4. If object or interface - check definition;
|
|
43
|
-
* 4.1 If `@model` - skip;
|
|
44
|
-
* 4.2 If implements `Node` interface - skip
|
|
45
|
-
* 4.3 If fields are `@readOnly` - skip;
|
|
46
|
-
*/
|
|
47
|
-
private _createMutationInput;
|
|
48
|
-
private _createDeleteMutationField;
|
|
49
|
-
private _createMutationField;
|
|
50
|
-
private _createMutation;
|
|
51
|
-
init(): void;
|
|
52
|
-
match(definition: DefinitionNode): definition is ObjectNode;
|
|
53
|
-
execute(definition: ObjectNode): void;
|
|
54
|
-
cleanup(definition: ObjectNode): void;
|
|
55
|
-
after(): void;
|
|
56
|
-
}
|
|
57
|
-
export declare const modelPlugin: (options?: ModelPluginOptions | undefined) => import("@gqlbase/core").IPluginFactory;
|
|
58
|
-
export {};
|
|
59
|
-
//# sourceMappingURL=ModelPlugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPlugin.d.ts","sourceRoot":"","sources":["../../src/base/ModelPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,cAAc,EAUd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAKlC,eAAO,MAAM,cAAc;;CAEjB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,KAAK,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAE1E,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAAoB,CAAC;AACxE,eAAO,MAAM,wBAAwB,EAAE,aAAa,EAAmC,CAAC;AAExF,eAAO,MAAM,OAAO,GAAI,YAAY,cAAc,KAAG,UAAU,IAAI,UAElE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,qBAAa,WAAY,YAAW,kBAAkB;IACpD,SAAgB,IAAI,iBAAiB;IACrC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,OAAO,CAAC,kBAAkB,CAAkB;gBAG1C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,kBAAsD;IASjE,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iCAAiC;IAUzC,OAAO,CAAC,oBAAoB;IAI5B;;;;;;;;;OASG;IAEH,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,eAAe;IAehB,IAAI;IAqBJ,KAAK,CAAC,UAAU,EAAE,cAAc;IAIhC,OAAO,CAAC,UAAU,EAAE,UAAU;IAwB9B,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIrC,KAAK,IAAI,IAAI;CAGrB;AAED,eAAO,MAAM,WAAW,sFAAmC,CAAC"}
|