@gqlbase/plugins 0.0.2 → 0.0.5

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 (89) hide show
  1. package/dist/base/ModelPlugin/ModelPlugin.d.ts +97 -0
  2. package/dist/base/ModelPlugin/ModelPlugin.d.ts.map +1 -0
  3. package/dist/base/ModelPlugin/ModelPlugin.js +405 -0
  4. package/dist/base/ModelPlugin/ModelPlugin.js.map +1 -0
  5. package/dist/base/ModelPlugin/ModelPlugin.utils.d.ts +31 -0
  6. package/dist/base/ModelPlugin/ModelPlugin.utils.d.ts.map +1 -0
  7. package/dist/base/ModelPlugin/ModelPlugin.utils.js +57 -0
  8. package/dist/base/ModelPlugin/ModelPlugin.utils.js.map +1 -0
  9. package/dist/base/ModelPlugin/index.d.ts +3 -0
  10. package/dist/base/ModelPlugin/index.d.ts.map +1 -0
  11. package/dist/base/ModelPlugin/index.js +3 -0
  12. package/dist/base/ModelPlugin/index.js.map +1 -0
  13. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.d.ts +23 -0
  14. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.d.ts.map +1 -0
  15. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.js +161 -0
  16. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.js.map +1 -0
  17. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.d.ts +12 -0
  18. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.d.ts.map +1 -0
  19. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.js +30 -0
  20. package/dist/base/ModelTypesGeneratorPlugin/ModelTypesGeneratorPlugin.utils.js.map +1 -0
  21. package/dist/base/ModelTypesGeneratorPlugin/index.d.ts +2 -0
  22. package/dist/base/ModelTypesGeneratorPlugin/index.d.ts.map +1 -0
  23. package/dist/base/ModelTypesGeneratorPlugin/index.js +2 -0
  24. package/dist/base/ModelTypesGeneratorPlugin/index.js.map +1 -0
  25. package/dist/base/RelationsPlugin/RelationsPlugin.d.ts +60 -0
  26. package/dist/base/RelationsPlugin/RelationsPlugin.d.ts.map +1 -0
  27. package/dist/base/RelationsPlugin/RelationsPlugin.js +188 -0
  28. package/dist/base/RelationsPlugin/RelationsPlugin.js.map +1 -0
  29. package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts +19 -0
  30. package/dist/base/RelationsPlugin/RelationsPlugin.utils.d.ts.map +1 -0
  31. package/dist/base/RelationsPlugin/RelationsPlugin.utils.js +30 -0
  32. package/dist/base/RelationsPlugin/RelationsPlugin.utils.js.map +1 -0
  33. package/dist/base/RelationsPlugin/index.d.ts +3 -0
  34. package/dist/base/RelationsPlugin/index.d.ts.map +1 -0
  35. package/dist/base/RelationsPlugin/index.js +3 -0
  36. package/dist/base/RelationsPlugin/index.js.map +1 -0
  37. package/dist/base/ScalarsPlugin/ScalarsPlugin.d.ts +56 -0
  38. package/dist/base/ScalarsPlugin/ScalarsPlugin.d.ts.map +1 -0
  39. package/dist/base/ScalarsPlugin/ScalarsPlugin.js +140 -0
  40. package/dist/base/ScalarsPlugin/ScalarsPlugin.js.map +1 -0
  41. package/dist/base/ScalarsPlugin/index.d.ts +2 -0
  42. package/dist/base/ScalarsPlugin/index.d.ts.map +1 -0
  43. package/dist/base/ScalarsPlugin/index.js +2 -0
  44. package/dist/base/ScalarsPlugin/index.js.map +1 -0
  45. package/dist/base/SchemaGeneratorPlugin.d.ts +7 -0
  46. package/dist/base/SchemaGeneratorPlugin.d.ts.map +1 -0
  47. package/dist/base/SchemaGeneratorPlugin.js +14 -0
  48. package/dist/base/SchemaGeneratorPlugin.js.map +1 -0
  49. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.d.ts +17 -0
  50. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.d.ts.map +1 -0
  51. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.js +66 -0
  52. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.js.map +1 -0
  53. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.d.ts +25 -0
  54. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.d.ts.map +1 -0
  55. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.js +38 -0
  56. package/dist/base/UtilitiesPlugin/UtilitiesPlugin.utils.js.map +1 -0
  57. package/dist/base/UtilitiesPlugin/index.d.ts +3 -0
  58. package/dist/base/UtilitiesPlugin/index.d.ts.map +1 -0
  59. package/dist/base/UtilitiesPlugin/index.js +3 -0
  60. package/dist/base/UtilitiesPlugin/index.js.map +1 -0
  61. package/dist/base/basePreset.d.ts +15 -0
  62. package/dist/base/basePreset.d.ts.map +1 -0
  63. package/dist/base/basePreset.js +30 -0
  64. package/dist/base/basePreset.js.map +1 -0
  65. package/dist/base/index.d.ts +6 -2
  66. package/dist/base/index.d.ts.map +1 -1
  67. package/dist/base/index.js +7 -2
  68. package/dist/base/index.js.map +1 -0
  69. package/dist/relay/ConnectionPlugin.d.ts +46 -0
  70. package/dist/relay/ConnectionPlugin.d.ts.map +1 -0
  71. package/dist/relay/ConnectionPlugin.js +200 -0
  72. package/dist/relay/ConnectionPlugin.js.map +1 -0
  73. package/dist/{base → relay}/NodeInterfacePlugin.d.ts +1 -0
  74. package/dist/relay/NodeInterfacePlugin.d.ts.map +1 -0
  75. package/dist/{base → relay}/NodeInterfacePlugin.js +20 -6
  76. package/dist/relay/NodeInterfacePlugin.js.map +1 -0
  77. package/dist/relay/index.d.ts +3 -0
  78. package/dist/relay/index.d.ts.map +1 -0
  79. package/dist/relay/index.js +3 -0
  80. package/dist/relay/index.js.map +1 -0
  81. package/dist/relay/relayPreset.d.ts +11 -0
  82. package/dist/relay/relayPreset.d.ts.map +1 -0
  83. package/dist/relay/relayPreset.js +15 -0
  84. package/dist/relay/relayPreset.js.map +1 -0
  85. package/package.json +3 -3
  86. package/dist/base/ModelPlugin.d.ts +0 -59
  87. package/dist/base/ModelPlugin.d.ts.map +0 -1
  88. package/dist/base/ModelPlugin.js +0 -222
  89. package/dist/base/NodeInterfacePlugin.d.ts.map +0 -1
@@ -0,0 +1,97 @@
1
+ import { ITransformerPlugin } from "@gqlbase/core";
2
+ import type { ITransformerContext } from "@gqlbase/core/context";
3
+ import { DefinitionNode, ObjectNode } from "@gqlbase/core/definition";
4
+ import { ModelPluginOptions } from "./ModelPlugin.utils.js";
5
+ /**
6
+ * `@model` directive plugin.
7
+ *
8
+ * Automatically generates query and mutation fields for types annotated with `@model` directive.
9
+ * Supports customization of generated operations via directive arguments and plugin options.
10
+ *
11
+ * @important Depends on `RelationsPlugin` for handling relation fields, annotated with `@hasOne` and `@hasMany`.
12
+ *
13
+ * @example
14
+ *
15
+ * ```graphql
16
+ * # Before
17
+ *
18
+ * type Post `@model` {
19
+ * id: ID!
20
+ * title: String!
21
+ * content: String
22
+ * }
23
+ *
24
+ * # After
25
+ *
26
+ * type Post {
27
+ * id: ID!
28
+ * title: String!
29
+ * content: String
30
+ * }
31
+ *
32
+ * input PostFilterInput {
33
+ * id: IDFilterInput
34
+ * title: StringFilterInput
35
+ * content: StringFilterInput
36
+ * and: [PostFilterInput]
37
+ * or: [PostFilterInput]
38
+ * not: PostFilterInput
39
+ * }
40
+ *
41
+ * input CreatePostInput {
42
+ * id: ID
43
+ * title: String!
44
+ * content: String
45
+ * }
46
+ *
47
+ * input UpdatePostInput {
48
+ * id: ID!
49
+ * title: String
50
+ * content: String
51
+ * }
52
+ *
53
+ * type Query {
54
+ * getPost(id: ID!): Post `@hasOne`
55
+ * listPosts(filter: PostFilterInput): [Post] `@hasMany`
56
+ * }
57
+ *
58
+ * type Mutation {
59
+ * createPost(input: CreatePostInput!): Post
60
+ * updatePost(input: UpdatePostInput!): Post
61
+ * deletePost(id: ID!): Post
62
+ * }
63
+ * ```
64
+ */
65
+ export declare class ModelPlugin implements ITransformerPlugin {
66
+ readonly name = "ModelPlugin";
67
+ readonly context: ITransformerContext;
68
+ private _defaultOperations;
69
+ constructor(context: ITransformerContext, options?: ModelPluginOptions);
70
+ private _expandOperations;
71
+ private _getOperationNames;
72
+ private _createSizeFilterInput;
73
+ private _createSortDirection;
74
+ private _createStringLikeFilterInput;
75
+ private _createNumberLikeFilterInput;
76
+ private _createBooleanLikeFilterInput;
77
+ private _createIDLikeFilterInput;
78
+ private _createListLikeFilterInput;
79
+ private _createEnumLikeFilterInput;
80
+ private _createScalarFilterInput;
81
+ private _createFilterInput;
82
+ private _createMutationInput;
83
+ private _createGetQueryField;
84
+ /**
85
+ * TODO: Handle sort input
86
+ */
87
+ private _createListQueryField;
88
+ private _createDeleteMutationField;
89
+ private _createMutationField;
90
+ init(): void;
91
+ match(definition: DefinitionNode): definition is ObjectNode;
92
+ execute(definition: ObjectNode): void;
93
+ cleanup(definition: ObjectNode): void;
94
+ after(): void;
95
+ }
96
+ export declare const modelPlugin: (options?: ModelPluginOptions | undefined) => import("@gqlbase/core").IPluginFactory;
97
+ //# sourceMappingURL=ModelPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelPlugin.d.ts","sourceRoot":"","sources":["../../../src/base/ModelPlugin/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,EAWd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAUL,kBAAkB,EAInB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,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;IAOjE,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,4BAA4B;IAoBpC,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,kBAAkB;IAsF1B,OAAO,CAAC,oBAAoB;IA0D5B,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAoBrB,IAAI;IA4BJ,KAAK,CAAC,UAAU,EAAE,cAAc;IAIhC,OAAO,CAAC,UAAU,EAAE,UAAU;IA0B9B,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIrC,KAAK,IAAI,IAAI;CAGrB;AAED,eAAO,MAAM,WAAW,sFAAmC,CAAC"}
@@ -0,0 +1,405 @@
1
+ import { DirectiveDefinitionNode, DirectiveNode, EnumNode, FieldNode, InputObjectNode, InputValueNode, ListTypeNode, NamedTypeNode, NonNullTypeNode, ObjectNode, ScalarNode, } from "@gqlbase/core/definition";
2
+ import { createPluginFactory, getTypeHint, InternalDirective } from "@gqlbase/core/plugins";
3
+ import { TransformerPluginExecutionError } from "@gqlbase/shared/errors";
4
+ import { camelCase, pascalCase, pluralize } from "@gqlbase/shared/format";
5
+ import { isBuildInScalar } from "@gqlbase/shared/definition";
6
+ import { DEFAULT_READ_OPERATIONS, DEFAULT_WRITE_OPERATIONS, isEnum, isListTypeNode, isModel, isObjectLike, isScalar, ModelDirective, ModelOperation, shouldSkipFieldFromFilterInput, shouldSkipFieldFromMutationInput, } from "./ModelPlugin.utils.js";
7
+ /**
8
+ * `@model` directive plugin.
9
+ *
10
+ * Automatically generates query and mutation fields for types annotated with `@model` directive.
11
+ * Supports customization of generated operations via directive arguments and plugin options.
12
+ *
13
+ * @important Depends on `RelationsPlugin` for handling relation fields, annotated with `@hasOne` and `@hasMany`.
14
+ *
15
+ * @example
16
+ *
17
+ * ```graphql
18
+ * # Before
19
+ *
20
+ * type Post `@model` {
21
+ * id: ID!
22
+ * title: String!
23
+ * content: String
24
+ * }
25
+ *
26
+ * # After
27
+ *
28
+ * type Post {
29
+ * id: ID!
30
+ * title: String!
31
+ * content: String
32
+ * }
33
+ *
34
+ * input PostFilterInput {
35
+ * id: IDFilterInput
36
+ * title: StringFilterInput
37
+ * content: StringFilterInput
38
+ * and: [PostFilterInput]
39
+ * or: [PostFilterInput]
40
+ * not: PostFilterInput
41
+ * }
42
+ *
43
+ * input CreatePostInput {
44
+ * id: ID
45
+ * title: String!
46
+ * content: String
47
+ * }
48
+ *
49
+ * input UpdatePostInput {
50
+ * id: ID!
51
+ * title: String
52
+ * content: String
53
+ * }
54
+ *
55
+ * type Query {
56
+ * getPost(id: ID!): Post `@hasOne`
57
+ * listPosts(filter: PostFilterInput): [Post] `@hasMany`
58
+ * }
59
+ *
60
+ * type Mutation {
61
+ * createPost(input: CreatePostInput!): Post
62
+ * updatePost(input: UpdatePostInput!): Post
63
+ * deletePost(id: ID!): Post
64
+ * }
65
+ * ```
66
+ */
67
+ export class ModelPlugin {
68
+ name = "ModelPlugin";
69
+ context;
70
+ _defaultOperations;
71
+ constructor(context, options = { operations: ["read", "write"] }) {
72
+ this.context = context;
73
+ this._defaultOperations = this._expandOperations(options.operations);
74
+ }
75
+ _expandOperations(operations) {
76
+ const expandedOperations = new Set();
77
+ for (const operation of operations) {
78
+ if (operation === "read") {
79
+ DEFAULT_READ_OPERATIONS.forEach((op) => expandedOperations.add(op));
80
+ }
81
+ else if (operation === "write") {
82
+ DEFAULT_WRITE_OPERATIONS.forEach((op) => expandedOperations.add(op));
83
+ }
84
+ else {
85
+ expandedOperations.add(operation);
86
+ }
87
+ }
88
+ return Array.from(expandedOperations);
89
+ }
90
+ _getOperationNames(object) {
91
+ const directive = object.getDirective("model");
92
+ if (!directive) {
93
+ throw new TransformerPluginExecutionError(this.name, `@model directive not found for type ${object.name}`);
94
+ }
95
+ const args = directive.getArgumentsJSON();
96
+ if (args.operations && args.operations.length > 0) {
97
+ return this._expandOperations(args.operations);
98
+ }
99
+ return this._defaultOperations;
100
+ }
101
+ // #region Filter Inputs
102
+ _createSizeFilterInput() {
103
+ const input = InputObjectNode.create("SizeFilterInput", [
104
+ InputValueNode.create("ne", NamedTypeNode.create("Int")),
105
+ InputValueNode.create("eq", NamedTypeNode.create("Int")),
106
+ InputValueNode.create("le", NamedTypeNode.create("Int")),
107
+ InputValueNode.create("lt", NamedTypeNode.create("Int")),
108
+ InputValueNode.create("ge", NamedTypeNode.create("Int")),
109
+ InputValueNode.create("gt", NamedTypeNode.create("Int")),
110
+ InputValueNode.create("between", ListTypeNode.create(NonNullTypeNode.create("Int"))),
111
+ ]);
112
+ return input;
113
+ }
114
+ _createSortDirection() {
115
+ const enumNode = EnumNode.create("SortDirection", ["ASC", "DESC"]);
116
+ return enumNode;
117
+ }
118
+ _createStringLikeFilterInput(name, typeName) {
119
+ const input = InputObjectNode.create(name, [
120
+ InputValueNode.create("ne", NamedTypeNode.create(typeName)),
121
+ InputValueNode.create("eq", NamedTypeNode.create(typeName)),
122
+ InputValueNode.create("le", NamedTypeNode.create(typeName)),
123
+ InputValueNode.create("lt", NamedTypeNode.create(typeName)),
124
+ InputValueNode.create("ge", NamedTypeNode.create(typeName)),
125
+ InputValueNode.create("gt", NamedTypeNode.create(typeName)),
126
+ InputValueNode.create("in", ListTypeNode.create(NonNullTypeNode.create(typeName))),
127
+ InputValueNode.create("contains", NamedTypeNode.create(typeName)),
128
+ InputValueNode.create("notContains", NamedTypeNode.create(typeName)),
129
+ InputValueNode.create("between", ListTypeNode.create(NonNullTypeNode.create(typeName))),
130
+ InputValueNode.create("beginsWith", NamedTypeNode.create(typeName)),
131
+ InputValueNode.create("exists", NamedTypeNode.create("Boolean")),
132
+ InputValueNode.create("size", NamedTypeNode.create("SizeFilterInput")),
133
+ ]);
134
+ return input;
135
+ }
136
+ _createNumberLikeFilterInput(name, typeName) {
137
+ const input = InputObjectNode.create(name, [
138
+ InputValueNode.create("ne", NamedTypeNode.create(typeName)),
139
+ InputValueNode.create("eq", NamedTypeNode.create(typeName)),
140
+ InputValueNode.create("le", NamedTypeNode.create(typeName)),
141
+ InputValueNode.create("lt", NamedTypeNode.create(typeName)),
142
+ InputValueNode.create("ge", NamedTypeNode.create(typeName)),
143
+ InputValueNode.create("gt", NamedTypeNode.create(typeName)),
144
+ InputValueNode.create("in", ListTypeNode.create(NonNullTypeNode.create(typeName))),
145
+ InputValueNode.create("between", ListTypeNode.create(NonNullTypeNode.create(typeName))),
146
+ InputValueNode.create("exists", NamedTypeNode.create("Boolean")),
147
+ ]);
148
+ return input;
149
+ }
150
+ _createBooleanLikeFilterInput(name, typeName) {
151
+ const input = InputObjectNode.create(name, [
152
+ InputValueNode.create("ne", NamedTypeNode.create(typeName)),
153
+ InputValueNode.create("eq", NamedTypeNode.create(typeName)),
154
+ InputValueNode.create("exists", NamedTypeNode.create("Boolean")),
155
+ ]);
156
+ return input;
157
+ }
158
+ _createIDLikeFilterInput(name, typeName) {
159
+ const input = InputObjectNode.create(name, [
160
+ InputValueNode.create("ne", NamedTypeNode.create(typeName)),
161
+ InputValueNode.create("eq", NamedTypeNode.create(typeName)),
162
+ InputValueNode.create("in", ListTypeNode.create(NonNullTypeNode.create(typeName))),
163
+ InputValueNode.create("exists", NamedTypeNode.create("Boolean")),
164
+ ]);
165
+ return input;
166
+ }
167
+ _createListLikeFilterInput(name, typeName) {
168
+ const input = InputObjectNode.create(name, [
169
+ InputValueNode.create("contains", NamedTypeNode.create(typeName)),
170
+ InputValueNode.create("notContains", NamedTypeNode.create(typeName)),
171
+ InputValueNode.create("size", NamedTypeNode.create("SizeFilterInput")),
172
+ ]);
173
+ return input;
174
+ }
175
+ _createEnumLikeFilterInput(name, typeName) {
176
+ const input = InputObjectNode.create(name, [
177
+ InputValueNode.create("eq", NamedTypeNode.create(typeName)),
178
+ InputValueNode.create("ne", NamedTypeNode.create(typeName)),
179
+ InputValueNode.create("in", ListTypeNode.create(NonNullTypeNode.create(typeName))),
180
+ InputValueNode.create("exists", NamedTypeNode.create("Boolean")),
181
+ ]);
182
+ return input;
183
+ }
184
+ _createScalarFilterInput(node, inputName) {
185
+ const scalarType = getTypeHint(node);
186
+ switch (scalarType) {
187
+ case "id":
188
+ return this._createIDLikeFilterInput(inputName, node.name);
189
+ case "string":
190
+ return this._createStringLikeFilterInput(inputName, node.name);
191
+ case "number":
192
+ return this._createNumberLikeFilterInput(inputName, node.name);
193
+ case "boolean":
194
+ return this._createBooleanLikeFilterInput(inputName, node.name);
195
+ case "object":
196
+ return this._createBooleanLikeFilterInput(inputName, node.name);
197
+ case "unknown":
198
+ default: {
199
+ this.context.logger.warn(`Unknown type for scalar ${node.name}. Defaulting to minimal, bolean like, filter input.`);
200
+ return this._createBooleanLikeFilterInput(inputName, node.name);
201
+ }
202
+ }
203
+ }
204
+ _createFilterInput(target) {
205
+ const filterInputName = pascalCase(target.name, "filter", "input");
206
+ let filterInput = this.context.document.getNode(filterInputName);
207
+ if (filterInput && !(filterInput instanceof InputObjectNode)) {
208
+ throw new TransformerPluginExecutionError(this.name, `Type ${filterInputName} is not an input type`);
209
+ }
210
+ if (!filterInput) {
211
+ filterInput = InputObjectNode.create(filterInputName);
212
+ for (const field of target.fields ?? []) {
213
+ if (shouldSkipFieldFromFilterInput(field)) {
214
+ continue;
215
+ }
216
+ const typeName = field.type.getTypeName();
217
+ const inputName = pascalCase(typeName, "filter", "input");
218
+ if (isBuildInScalar(typeName)) {
219
+ filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
220
+ continue;
221
+ }
222
+ if (this.context.document.hasNode(inputName)) {
223
+ filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
224
+ continue;
225
+ }
226
+ const typeDef = this.context.document.getNodeOrThrow(typeName);
227
+ if (isObjectLike(typeDef)) {
228
+ continue;
229
+ }
230
+ if (isListTypeNode(field.type) && (isScalar(typeDef) || isEnum(typeDef))) {
231
+ const listFilterInputName = pascalCase(typeDef.name, "list", "filter", "input");
232
+ if (!this.context.document.hasNode(listFilterInputName)) {
233
+ const listFilterInput = this._createListLikeFilterInput(listFilterInputName, typeName);
234
+ this.context.document.addNode(listFilterInput);
235
+ }
236
+ filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(listFilterInputName)));
237
+ continue;
238
+ }
239
+ if (isScalar(typeDef)) {
240
+ const scalarFilterInput = this._createScalarFilterInput(typeDef, inputName);
241
+ if (scalarFilterInput) {
242
+ this.context.document.addNode(scalarFilterInput);
243
+ filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
244
+ }
245
+ continue;
246
+ }
247
+ if (isEnum(typeDef)) {
248
+ const enumFilterInput = this._createEnumLikeFilterInput(inputName, typeDef.name);
249
+ this.context.document.addNode(enumFilterInput);
250
+ filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
251
+ continue;
252
+ }
253
+ }
254
+ filterInput.addField(InputValueNode.create("and", ListTypeNode.create(filterInputName)));
255
+ filterInput.addField(InputValueNode.create("or", ListTypeNode.create(filterInputName)));
256
+ filterInput.addField(InputValueNode.create("not", NamedTypeNode.create(filterInputName)));
257
+ this.context.document.addNode(filterInput);
258
+ }
259
+ return filterInput;
260
+ }
261
+ _createMutationInput(model, inputName, requiredFields = []) {
262
+ const input = InputObjectNode.create(inputName);
263
+ for (const field of model.fields ?? []) {
264
+ if (shouldSkipFieldFromMutationInput(field)) {
265
+ continue;
266
+ }
267
+ const fieldTypeName = field.type.getTypeName();
268
+ if (requiredFields.includes(field.name)) {
269
+ input.addField(InputValueNode.create(field.name, NonNullTypeNode.create(fieldTypeName)));
270
+ continue;
271
+ }
272
+ // Buildin scalars
273
+ if (isBuildInScalar(fieldTypeName)) {
274
+ input.addField(InputValueNode.create(field.name, NamedTypeNode.create(fieldTypeName)));
275
+ continue;
276
+ }
277
+ const typeDef = this.context.document.getNode(fieldTypeName);
278
+ if (!typeDef) {
279
+ throw new TransformerPluginExecutionError(this.name, `Unknown type ${fieldTypeName}`);
280
+ }
281
+ if (typeDef instanceof ScalarNode || typeDef instanceof EnumNode) {
282
+ input.addField(InputValueNode.create(field.name, NamedTypeNode.create(fieldTypeName)));
283
+ continue;
284
+ }
285
+ if (typeDef instanceof ObjectNode) {
286
+ if (typeDef.hasDirective("model")) {
287
+ continue;
288
+ }
289
+ const inputName = pascalCase(fieldTypeName, "input");
290
+ if (!this.context.document.hasNode(inputName)) {
291
+ this._createMutationInput(typeDef, inputName);
292
+ }
293
+ input.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
294
+ }
295
+ }
296
+ this.context.document.addNode(input);
297
+ }
298
+ // #endregion Filter Inputs
299
+ // #region Operations
300
+ _createGetQueryField(model) {
301
+ const fieldName = camelCase("get", model.name);
302
+ const queryNode = this.context.document.getQueryNode();
303
+ if (!queryNode.hasField(fieldName)) {
304
+ const field = FieldNode.create(fieldName, NamedTypeNode.create(model.name), [InputValueNode.create("id", NonNullTypeNode.create("ID"))], [DirectiveNode.create("hasOne")]);
305
+ queryNode.addField(field);
306
+ }
307
+ }
308
+ /**
309
+ * TODO: Handle sort input
310
+ */
311
+ _createListQueryField(model) {
312
+ const fieldName = camelCase("list", pluralize(model.name));
313
+ const filterInputName = pascalCase(model.name, "filter", "input");
314
+ const queryNode = this.context.document.getQueryNode();
315
+ if (!this.context.document.hasNode(filterInputName)) {
316
+ this._createFilterInput(model);
317
+ }
318
+ let field = queryNode.getField(fieldName);
319
+ if (!field) {
320
+ field = FieldNode.create(fieldName, NamedTypeNode.create(model.name), null, [
321
+ DirectiveNode.create("hasMany"),
322
+ ]);
323
+ queryNode.addField(field);
324
+ }
325
+ if (!field.hasArgument("filter")) {
326
+ field.addArgument(InputValueNode.create("filter", NamedTypeNode.create(filterInputName)));
327
+ }
328
+ }
329
+ _createDeleteMutationField(model) {
330
+ const fieldName = camelCase("delete", model.name);
331
+ const mutationNode = this.context.document.getMutationNode();
332
+ if (!mutationNode.hasField(fieldName)) {
333
+ const field = FieldNode.create(fieldName, NamedTypeNode.create(model.name), [
334
+ InputValueNode.create("id", NonNullTypeNode.create(NamedTypeNode.create("ID"))),
335
+ ]);
336
+ mutationNode.addField(field);
337
+ }
338
+ }
339
+ _createMutationField(model, verb) {
340
+ const fieldName = camelCase(verb, model.name);
341
+ const inputName = pascalCase(verb, model.name, "input");
342
+ const mutationNode = this.context.document.getMutationNode();
343
+ if (!this.context.document.getNode(inputName)) {
344
+ this._createMutationInput(model, inputName, verb === "update" ? ["id"] : []);
345
+ }
346
+ if (!mutationNode.hasField(fieldName)) {
347
+ const field = FieldNode.create(fieldName, NamedTypeNode.create(model.name), [
348
+ InputValueNode.create("input", NonNullTypeNode.create(NamedTypeNode.create(inputName))),
349
+ ]);
350
+ mutationNode.addField(field);
351
+ }
352
+ }
353
+ // #endregion Operations
354
+ init() {
355
+ this.context.base
356
+ .addNode(EnumNode.create("ModelOperation", Object.values(ModelOperation), [
357
+ DirectiveNode.create(InternalDirective.INTERNAL),
358
+ ]))
359
+ .addNode(DirectiveDefinitionNode.create("model", ["OBJECT"], [
360
+ InputValueNode.create("operations", ListTypeNode.create(NonNullTypeNode.create("ModelOperation"))),
361
+ ]))
362
+ .addNode(this._createIDLikeFilterInput("IDFilterInput", "ID"))
363
+ .addNode(this._createStringLikeFilterInput("StringFilterInput", "String"))
364
+ .addNode(this._createNumberLikeFilterInput("IntFilterInput", "Int"))
365
+ .addNode(this._createNumberLikeFilterInput("FloatFilterInput", "Float"))
366
+ .addNode(this._createBooleanLikeFilterInput("BooleanFilterInput", "Boolean"))
367
+ .addNode(this._createSizeFilterInput())
368
+ .addNode(this._createSortDirection());
369
+ }
370
+ match(definition) {
371
+ return isModel(definition);
372
+ }
373
+ execute(definition) {
374
+ // 1. Add operation fields
375
+ const operations = this._getOperationNames(definition);
376
+ for (const verb of operations) {
377
+ switch (verb) {
378
+ case "get":
379
+ this._createGetQueryField(definition);
380
+ continue;
381
+ case "list":
382
+ this._createListQueryField(definition);
383
+ continue;
384
+ case "delete":
385
+ this._createDeleteMutationField(definition);
386
+ continue;
387
+ case "create":
388
+ case "upsert":
389
+ case "update":
390
+ this._createMutationField(definition, verb);
391
+ continue;
392
+ default:
393
+ continue;
394
+ }
395
+ }
396
+ }
397
+ cleanup(definition) {
398
+ definition.removeDirective(ModelDirective.MODEL);
399
+ }
400
+ after() {
401
+ this.context.document.removeNode(ModelDirective.MODEL).removeNode("ModelOperation");
402
+ }
403
+ }
404
+ export const modelPlugin = createPluginFactory(ModelPlugin);
405
+ //# sourceMappingURL=ModelPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelPlugin.js","sourceRoot":"","sources":["../../../src/base/ModelPlugin/ModelPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { DefinitionNode, EnumNode, FieldNode, InterfaceNode, ObjectNode, ScalarNode, TypeNode, UnionNode } from "@gqlbase/core/definition";
2
+ export interface ModelPluginOptions {
3
+ operations: OperationType[];
4
+ }
5
+ export declare const ModelDirective: {
6
+ readonly MODEL: "model";
7
+ };
8
+ export declare const ModelOperation: {
9
+ /** Shorthand for read operations (`get`, `list`) */
10
+ readonly READ: "read";
11
+ /** Shorthand for write operations (`create`, `update`, `delete`) */
12
+ readonly WRITE: "write";
13
+ readonly GET: "get";
14
+ readonly LIST: "list";
15
+ readonly CREATE: "create";
16
+ readonly UPDATE: "update";
17
+ readonly UPSERT: "upsert";
18
+ readonly DELETE: "delete";
19
+ };
20
+ export type OperationType = (typeof ModelOperation)[keyof typeof ModelOperation];
21
+ export declare const DEFAULT_READ_OPERATIONS: ["get", "list"];
22
+ export declare const DEFAULT_WRITE_OPERATIONS: ["create", "update", "delete"];
23
+ export declare const isModel: (definition: DefinitionNode) => definition is ObjectNode;
24
+ export declare const isObjectLike: (type: DefinitionNode) => type is ObjectNode | InterfaceNode | UnionNode;
25
+ export declare const isListTypeNode: (node: TypeNode) => boolean;
26
+ export declare const isScalar: (node: DefinitionNode) => node is ScalarNode;
27
+ export declare const isEnum: (node: DefinitionNode) => node is EnumNode;
28
+ export declare const shouldSkipFieldFromMutationInput: (field: FieldNode) => boolean;
29
+ export declare const shouldSkipFieldFromFilterInput: (field: FieldNode) => boolean;
30
+ export declare const shouldSkipFieldFromSortInput: (field: FieldNode) => boolean;
31
+ //# sourceMappingURL=ModelPlugin.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelPlugin.utils.d.ts","sourceRoot":"","sources":["../../../src/base/ModelPlugin/ModelPlugin.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,aAAa,EAGb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACV,MAAM,0BAA0B,CAAC;AAIlC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc;;CAEjB,CAAC;AAEX,eAAO,MAAM,cAAc;IACzB,oDAAoD;;IAGpD,oEAAoE;;;;;;;;CAgB5D,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEjF,eAAO,MAAM,uBAAuB,iBAAqD,CAAC;AAC1F,eAAO,MAAM,wBAAwB,gCAID,CAAC;AAErC,eAAO,MAAM,OAAO,GAAI,YAAY,cAAc,KAAG,UAAU,IAAI,UAElE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,MAAM,cAAc,KACnB,IAAI,IAAI,UAAU,GAAG,aAAa,GAAG,SAEvC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,QAAQ,KAAG,OAM/C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,cAAc,KAAG,IAAI,IAAI,UAEvD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,MAAM,cAAc,KAAG,IAAI,IAAI,QAErD,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAAI,OAAO,SAAS,KAAG,OAEnE,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,OAAO,SAAS,KAAG,OAEjE,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,SAAS,KAAG,OAE/D,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { EnumNode, InterfaceNode, ListTypeNode, NonNullTypeNode, ObjectNode, ScalarNode, UnionNode, } from "@gqlbase/core/definition";
2
+ import { isClientOnly, isReadOnly, isServerOnly, isWriteOnly } from "../UtilitiesPlugin/index.js";
3
+ import { isRelationField } from "../RelationsPlugin/index.js";
4
+ export const ModelDirective = {
5
+ MODEL: "model",
6
+ };
7
+ export const ModelOperation = {
8
+ /** Shorthand for read operations (`get`, `list`) */
9
+ READ: "read",
10
+ /** Shorthand for write operations (`create`, `update`, `delete`) */
11
+ WRITE: "write",
12
+ // Query operations
13
+ GET: "get",
14
+ LIST: "list",
15
+ // Mutation operations
16
+ CREATE: "create",
17
+ UPDATE: "update",
18
+ UPSERT: "upsert",
19
+ DELETE: "delete",
20
+ // TBD
21
+ // SYNC: "sync",
22
+ // SUBSCRIBE: "subscribe",
23
+ };
24
+ export const DEFAULT_READ_OPERATIONS = ["get", "list"];
25
+ export const DEFAULT_WRITE_OPERATIONS = [
26
+ "create",
27
+ "update",
28
+ "delete",
29
+ ];
30
+ export const isModel = (definition) => {
31
+ return definition instanceof ObjectNode && definition.hasDirective(ModelDirective.MODEL);
32
+ };
33
+ export const isObjectLike = (type) => {
34
+ return type instanceof ObjectNode || type instanceof InterfaceNode || type instanceof UnionNode;
35
+ };
36
+ export const isListTypeNode = (node) => {
37
+ if (node instanceof NonNullTypeNode && node.type instanceof ListTypeNode) {
38
+ return true;
39
+ }
40
+ return node instanceof ListTypeNode;
41
+ };
42
+ export const isScalar = (node) => {
43
+ return node instanceof ScalarNode;
44
+ };
45
+ export const isEnum = (node) => {
46
+ return node instanceof EnumNode;
47
+ };
48
+ export const shouldSkipFieldFromMutationInput = (field) => {
49
+ return isReadOnly(field) || isServerOnly(field) || isClientOnly(field) || isRelationField(field);
50
+ };
51
+ export const shouldSkipFieldFromFilterInput = (field) => {
52
+ return isWriteOnly(field) || isServerOnly(field) || isClientOnly(field) || isRelationField(field);
53
+ };
54
+ export const shouldSkipFieldFromSortInput = (field) => {
55
+ return isServerOnly(field) || isClientOnly(field);
56
+ };
57
+ //# sourceMappingURL=ModelPlugin.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelPlugin.utils.js","sourceRoot":"","sources":["../../../src/base/ModelPlugin/ModelPlugin.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAER,aAAa,EACb,YAAY,EACZ,eAAe,EACf,UAAU,EACV,UAAU,EAEV,SAAS,GACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,OAAO;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,oDAAoD;IACpD,IAAI,EAAE,MAAM;IAEZ,oEAAoE;IACpE,KAAK,EAAE,OAAO;IAEd,mBAAmB;IACnB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IAEZ,sBAAsB;IACtB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAEhB,MAAM;IACN,gBAAgB;IAChB,0BAA0B;CAClB,CAAC;AAIX,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAoC,CAAC;AAC1F,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ;IACR,QAAQ;IACR,QAAQ;CAC0B,CAAC;AAErC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,UAA0B,EAA4B,EAAE;IAC9E,OAAO,UAAU,YAAY,UAAU,IAAI,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAoB,EAC4B,EAAE;IAClD,OAAO,IAAI,YAAY,UAAU,IAAI,IAAI,YAAY,aAAa,IAAI,IAAI,YAAY,SAAS,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAc,EAAW,EAAE;IACxD,IAAI,IAAI,YAAY,eAAe,IAAI,IAAI,CAAC,IAAI,YAAY,YAAY,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,YAAY,YAAY,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAoB,EAAsB,EAAE;IACnE,OAAO,IAAI,YAAY,UAAU,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAoB,EAAoB,EAAE;IAC/D,OAAO,IAAI,YAAY,QAAQ,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAAgB,EAAW,EAAE;IAC5E,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACnG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,KAAgB,EAAW,EAAE;IAC1E,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACpG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAgB,EAAW,EAAE;IACxE,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModelPlugin, modelPlugin } from "./ModelPlugin.js";
2
+ export { ModelDirective, ModelOperation, isModel, isObjectLike, type OperationType, type ModelPluginOptions, } from "./ModelPlugin.utils.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/ModelPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,cAAc,EACd,OAAO,EACP,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ModelPlugin, modelPlugin } from "./ModelPlugin.js";
2
+ export { ModelDirective, ModelOperation, isModel, isObjectLike, } from "./ModelPlugin.utils.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/ModelPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,cAAc,EACd,OAAO,EACP,YAAY,GAGb,MAAM,wBAAwB,CAAC"}