@gqlbase/plugins 0.0.2 → 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 -2
- package/dist/base/index.d.ts.map +1 -1
- package/dist/base/index.js +6 -2
- 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/{base → relay}/NodeInterfacePlugin.d.ts +1 -0
- package/dist/relay/NodeInterfacePlugin.d.ts.map +1 -0
- package/dist/{base → relay}/NodeInterfacePlugin.js +20 -6
- 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/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;IAkBhC,OAAO,CAAC,kBAAkB;IAoG1B,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 "string":
|
|
188
|
+
return this._createStringLikeFilterInput(inputName, node.name);
|
|
189
|
+
case "int":
|
|
190
|
+
case "float":
|
|
191
|
+
return this._createNumberLikeFilterInput(inputName, node.name);
|
|
192
|
+
case "boolean":
|
|
193
|
+
return this._createBooleanLikeFilterInput(inputName, node.name);
|
|
194
|
+
case "id":
|
|
195
|
+
return this._createIDLikeFilterInput(inputName, node.name);
|
|
196
|
+
default:
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
_createFilterInput(target) {
|
|
201
|
+
const filterInputName = pascalCase(target.name, "filter", "input");
|
|
202
|
+
let filterInput = this.context.document.getNode(filterInputName);
|
|
203
|
+
if (filterInput && !(filterInput instanceof InputObjectNode)) {
|
|
204
|
+
throw new TransformerPluginExecutionError(this.name, `Type ${filterInputName} is not an input type`);
|
|
205
|
+
}
|
|
206
|
+
if (!filterInput) {
|
|
207
|
+
filterInput = InputObjectNode.create(filterInputName);
|
|
208
|
+
for (const field of target.fields ?? []) {
|
|
209
|
+
if (shouldSkipFieldFromFilterInput(field)) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
const typeName = field.type.getTypeName();
|
|
213
|
+
const inputName = pascalCase(typeName, "filter", "input");
|
|
214
|
+
if (isBuildInScalar(typeName)) {
|
|
215
|
+
filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (this.context.document.hasNode(inputName)) {
|
|
219
|
+
filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const typeDef = this.context.document.getNodeOrThrow(typeName);
|
|
223
|
+
if (isObjectLike(typeDef)) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
this.context.logger.debug(`Processing filter input for field ${field.name} of type ${typeName}. Filter input name: ${inputName}`);
|
|
227
|
+
if (isListTypeNode(field.type) && (isScalar(typeDef) || isEnum(typeDef))) {
|
|
228
|
+
const listFilterInputName = pascalCase(typeDef.name, "list", "filter", "input");
|
|
229
|
+
this.context.logger.debug(`Creating list filter input ${listFilterInputName} for list of type ${typeDef.name}`);
|
|
230
|
+
if (!this.context.document.hasNode(listFilterInputName)) {
|
|
231
|
+
const listFilterInput = this._createListLikeFilterInput(listFilterInputName, typeName);
|
|
232
|
+
this.context.document.addNode(listFilterInput);
|
|
233
|
+
}
|
|
234
|
+
filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(listFilterInputName)));
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (isScalar(typeDef)) {
|
|
238
|
+
this.context.logger.debug(`Creating scalar filter input ${inputName} for scalar ${typeDef.name}`);
|
|
239
|
+
const scalarFilterInput = this._createScalarFilterInput(typeDef, inputName);
|
|
240
|
+
if (scalarFilterInput) {
|
|
241
|
+
this.context.document.addNode(scalarFilterInput);
|
|
242
|
+
filterInput.addField(InputValueNode.create(field.name, NamedTypeNode.create(inputName)));
|
|
243
|
+
}
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
if (isEnum(typeDef)) {
|
|
247
|
+
this.context.logger.debug(`Creating enum filter input ${inputName} for enum ${typeDef.name}`);
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|