@smartive/graphql-magic 9.1.2 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +2 -10
- package/.github/workflows/release.yml +1 -1
- package/.gqmrc.json +6 -0
- package/CHANGELOG.md +2 -2
- package/README.md +1 -1
- package/dist/bin/gqm.cjs +684 -330
- package/dist/cjs/index.cjs +998 -554
- package/dist/esm/api/execute.js +1 -1
- package/dist/esm/api/execute.js.map +1 -1
- package/dist/esm/client/mutations.d.ts +2 -2
- package/dist/esm/client/mutations.js +5 -4
- package/dist/esm/client/mutations.js.map +1 -1
- package/dist/esm/client/queries.d.ts +12 -17
- package/dist/esm/client/queries.js +30 -50
- package/dist/esm/client/queries.js.map +1 -1
- package/dist/esm/context.d.ts +1 -2
- package/dist/esm/db/generate.d.ts +3 -3
- package/dist/esm/db/generate.js +31 -29
- package/dist/esm/db/generate.js.map +1 -1
- package/dist/esm/migrations/generate.d.ts +3 -4
- package/dist/esm/migrations/generate.js +114 -107
- package/dist/esm/migrations/generate.js.map +1 -1
- package/dist/esm/models/index.d.ts +1 -0
- package/dist/esm/models/index.js +1 -0
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/models/model-definitions.d.ts +189 -0
- package/dist/esm/models/model-definitions.js +2 -0
- package/dist/esm/models/model-definitions.js.map +1 -0
- package/dist/esm/models/models.d.ts +128 -174
- package/dist/esm/models/models.js +411 -1
- package/dist/esm/models/models.js.map +1 -1
- package/dist/esm/models/mutation-hook.d.ts +2 -2
- package/dist/esm/models/utils.d.ts +35 -497
- package/dist/esm/models/utils.js +21 -144
- package/dist/esm/models/utils.js.map +1 -1
- package/dist/esm/permissions/check.d.ts +3 -3
- package/dist/esm/permissions/check.js +14 -7
- package/dist/esm/permissions/check.js.map +1 -1
- package/dist/esm/permissions/generate.js +6 -6
- package/dist/esm/permissions/generate.js.map +1 -1
- package/dist/esm/resolvers/filters.d.ts +8 -0
- package/dist/esm/resolvers/filters.js +28 -25
- package/dist/esm/resolvers/filters.js.map +1 -1
- package/dist/esm/resolvers/index.d.ts +1 -0
- package/dist/esm/resolvers/index.js +1 -0
- package/dist/esm/resolvers/index.js.map +1 -1
- package/dist/esm/resolvers/mutations.js +85 -21
- package/dist/esm/resolvers/mutations.js.map +1 -1
- package/dist/esm/resolvers/node.d.ts +13 -15
- package/dist/esm/resolvers/node.js +41 -36
- package/dist/esm/resolvers/node.js.map +1 -1
- package/dist/esm/resolvers/resolver.js +19 -49
- package/dist/esm/resolvers/resolver.js.map +1 -1
- package/dist/esm/resolvers/resolvers.d.ts +1 -8
- package/dist/esm/resolvers/resolvers.js +15 -7
- package/dist/esm/resolvers/resolvers.js.map +1 -1
- package/dist/esm/resolvers/selects.d.ts +3 -0
- package/dist/esm/resolvers/selects.js +50 -0
- package/dist/esm/resolvers/selects.js.map +1 -0
- package/dist/esm/resolvers/utils.d.ts +12 -4
- package/dist/esm/resolvers/utils.js +30 -22
- package/dist/esm/resolvers/utils.js.map +1 -1
- package/dist/esm/schema/generate.d.ts +4 -4
- package/dist/esm/schema/generate.js +122 -131
- package/dist/esm/schema/generate.js.map +1 -1
- package/dist/esm/schema/utils.d.ts +1 -1
- package/dist/esm/schema/utils.js +2 -1
- package/dist/esm/schema/utils.js.map +1 -1
- package/knexfile.ts +31 -0
- package/migrations/20230912185644_setup.ts +127 -0
- package/package.json +16 -14
- package/src/api/execute.ts +1 -1
- package/src/bin/gqm/gqm.ts +25 -23
- package/src/bin/gqm/parse-models.ts +5 -5
- package/src/bin/gqm/settings.ts +13 -4
- package/src/bin/gqm/static-eval.ts +5 -0
- package/src/bin/gqm/templates.ts +23 -3
- package/src/client/mutations.ts +11 -5
- package/src/client/queries.ts +43 -80
- package/src/context.ts +1 -2
- package/src/db/generate.ts +41 -41
- package/src/migrations/generate.ts +165 -146
- package/src/models/index.ts +1 -0
- package/src/models/model-definitions.ts +168 -0
- package/src/models/models.ts +510 -166
- package/src/models/mutation-hook.ts +2 -2
- package/src/models/utils.ts +53 -187
- package/src/permissions/check.ts +19 -11
- package/src/permissions/generate.ts +6 -6
- package/src/resolvers/filters.ts +44 -28
- package/src/resolvers/index.ts +1 -0
- package/src/resolvers/mutations.ts +98 -36
- package/src/resolvers/node.ts +79 -51
- package/src/resolvers/resolver.ts +20 -74
- package/src/resolvers/resolvers.ts +18 -7
- package/src/resolvers/selects.ts +77 -0
- package/src/resolvers/utils.ts +41 -25
- package/src/schema/generate.ts +106 -127
- package/src/schema/utils.ts +2 -1
- package/tests/api/__snapshots__/inheritance.spec.ts.snap +83 -0
- package/tests/api/inheritance.spec.ts +130 -0
- package/tests/generated/api/index.ts +1174 -0
- package/tests/generated/client/index.ts +1163 -0
- package/tests/generated/client/mutations.ts +109 -0
- package/tests/generated/db/index.ts +291 -0
- package/tests/generated/db/knex.ts +14 -0
- package/tests/generated/models.json +675 -0
- package/tests/generated/schema.graphql +325 -0
- package/tests/unit/__snapshots__/resolve.spec.ts.snap +23 -0
- package/tests/unit/queries.spec.ts +5 -5
- package/tests/unit/resolve.spec.ts +8 -8
- package/tests/utils/database/knex.ts +5 -13
- package/tests/utils/database/seed.ts +57 -18
- package/tests/utils/models.ts +62 -7
- package/tests/utils/server.ts +5 -5
- package/tsconfig.eslint.json +1 -0
- package/tests/unit/__snapshots__/generate.spec.ts.snap +0 -128
- package/tests/unit/generate.spec.ts +0 -8
- package/tests/utils/database/schema.ts +0 -64
- package/tests/utils/generate-migration.ts +0 -24
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-definitions.js","sourceRoot":"","sources":["../../../src/models/model-definitions.ts"],"names":[],"mappings":""}
|
|
@@ -1,204 +1,158 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export type
|
|
1
|
+
import { CustomFieldDefinition, EnumFieldDefinition, FloatFieldDefinition, IDFieldDefinition, InputModelDefinition, IntFieldDefinition, InterfaceModelDefinition, JsonFieldDefinition, ObjectModelDefinition, OrderBy, PrimitiveFieldDefinition, RawEnumModelDefinition, StringFieldDefinition, UploadFieldDefinition } from '..';
|
|
2
|
+
import { BooleanFieldDefinition, DateTimeFieldDefinition, EntityFieldDefinition, EntityModelDefinition, EnumModelDefinition, ModelDefinition, ModelDefinitions, ObjectFieldDefinition, RelationFieldDefinition } from './model-definitions';
|
|
3
|
+
export type ObjectField = ObjectFieldDefinition;
|
|
4
|
+
export type EntityField = EntityFieldDefinition;
|
|
5
|
+
export type PrimitiveField = PrimitiveFieldDefinition;
|
|
6
|
+
export type IDField = IDFieldDefinition;
|
|
7
|
+
export type BooleanField = BooleanFieldDefinition;
|
|
8
|
+
export type StringField = StringFieldDefinition;
|
|
9
|
+
export type DateTimeField = DateTimeFieldDefinition;
|
|
10
|
+
export type IntField = IntFieldDefinition;
|
|
11
|
+
export type FloatField = FloatFieldDefinition;
|
|
12
|
+
export type UploadField = UploadFieldDefinition;
|
|
13
|
+
export type JsonField = JsonFieldDefinition;
|
|
14
|
+
export type EnumField = EnumFieldDefinition;
|
|
15
|
+
export type CustomField = CustomFieldDefinition;
|
|
16
|
+
export type RelationField = Omit<RelationFieldDefinition, 'foreignKey'> & {
|
|
17
|
+
foreignKey: string;
|
|
18
|
+
};
|
|
19
|
+
export declare class Models {
|
|
20
|
+
models: Model[];
|
|
21
|
+
private modelsByName;
|
|
22
|
+
scalars: ScalarModel[];
|
|
23
|
+
rawEnums: RawEnumModel[];
|
|
24
|
+
enums: EnumModel[];
|
|
25
|
+
inputs: InputModel[];
|
|
26
|
+
interfaces: InterfaceModel[];
|
|
27
|
+
objects: ObjectModel[];
|
|
28
|
+
entities: EntityModel[];
|
|
29
|
+
definitions: ModelDefinitions;
|
|
30
|
+
constructor(definitions: ModelDefinitions);
|
|
31
|
+
getModel<K extends keyof ModelKindToClassMapping>(name: string, kind?: K): ModelKindToClassMapping[K];
|
|
32
|
+
}
|
|
33
|
+
export declare abstract class Model {
|
|
34
|
+
models: Models;
|
|
6
35
|
name: string;
|
|
7
|
-
plural
|
|
8
|
-
description
|
|
9
|
-
|
|
36
|
+
plural: string;
|
|
37
|
+
description: string;
|
|
38
|
+
constructor(models: Models, definition: ModelDefinition);
|
|
39
|
+
}
|
|
40
|
+
export declare class ScalarModel extends Model {
|
|
10
41
|
kind: 'scalar';
|
|
11
|
-
}
|
|
42
|
+
}
|
|
43
|
+
export declare class EnumModel extends Model {
|
|
12
44
|
kind: 'enum';
|
|
13
45
|
values: string[];
|
|
14
46
|
deleted?: true;
|
|
15
|
-
|
|
47
|
+
constructor(models: Models, definition: EnumModelDefinition);
|
|
48
|
+
}
|
|
49
|
+
export declare class RawEnumModel extends Model {
|
|
16
50
|
kind: 'raw-enum';
|
|
17
51
|
values: string[];
|
|
18
|
-
|
|
52
|
+
constructor(models: Models, definition: RawEnumModelDefinition);
|
|
53
|
+
}
|
|
54
|
+
export declare class InterfaceModel extends Model {
|
|
19
55
|
kind: 'interface';
|
|
20
|
-
fields:
|
|
21
|
-
|
|
22
|
-
|
|
56
|
+
fields: EntityField[];
|
|
57
|
+
constructor(models: Models, definition: InterfaceModelDefinition);
|
|
58
|
+
}
|
|
59
|
+
export declare class InputModel extends Model {
|
|
60
|
+
kind: 'model';
|
|
23
61
|
fields: ObjectField[];
|
|
24
|
-
|
|
62
|
+
constructor(models: Models, definition: InputModelDefinition);
|
|
63
|
+
}
|
|
64
|
+
export declare class ObjectModel extends Model {
|
|
25
65
|
kind: 'object';
|
|
26
66
|
fields: ObjectField[];
|
|
27
|
-
|
|
67
|
+
constructor(models: Models, definition: ObjectModelDefinition);
|
|
68
|
+
}
|
|
69
|
+
export declare class EntityModel extends Model {
|
|
28
70
|
kind: 'entity';
|
|
71
|
+
root?: boolean;
|
|
72
|
+
parent?: string;
|
|
29
73
|
interfaces?: string[];
|
|
30
74
|
queriable?: boolean;
|
|
31
75
|
listQueriable?: boolean;
|
|
32
76
|
creatable?: boolean | {
|
|
33
|
-
createdBy?: Partial<
|
|
34
|
-
createdAt?: Partial<
|
|
77
|
+
createdBy?: Partial<RelationFieldDefinition>;
|
|
78
|
+
createdAt?: Partial<DateTimeFieldDefinition>;
|
|
35
79
|
};
|
|
36
80
|
updatable?: boolean | {
|
|
37
|
-
updatedBy?: Partial<
|
|
38
|
-
updatedAt?: Partial<
|
|
81
|
+
updatedBy?: Partial<RelationFieldDefinition>;
|
|
82
|
+
updatedAt?: Partial<DateTimeFieldDefinition>;
|
|
39
83
|
};
|
|
40
84
|
deletable?: boolean | {
|
|
41
|
-
deleted?: Partial<
|
|
42
|
-
deletedBy?: Partial<
|
|
43
|
-
deletedAt?: Partial<
|
|
85
|
+
deleted?: Partial<BooleanFieldDefinition>;
|
|
86
|
+
deletedBy?: Partial<RelationFieldDefinition>;
|
|
87
|
+
deletedAt?: Partial<DateTimeFieldDefinition>;
|
|
44
88
|
};
|
|
45
89
|
displayField?: string;
|
|
46
90
|
defaultOrderBy?: OrderBy;
|
|
47
|
-
fields:
|
|
91
|
+
fields: EntityField[];
|
|
48
92
|
deleted?: true;
|
|
49
93
|
oldName?: string;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
94
|
+
fieldsByName: Record<string, EntityField>;
|
|
95
|
+
fieldsByColumnName: Record<string, EntityField>;
|
|
96
|
+
private _relations;
|
|
97
|
+
private _relationsByName;
|
|
98
|
+
private _reverseRelations;
|
|
99
|
+
private _reverseRelationsByName;
|
|
100
|
+
private _manyToManyRelations;
|
|
101
|
+
private _manyToManyRelationsByName;
|
|
102
|
+
pluralField: string;
|
|
103
|
+
slug: string;
|
|
104
|
+
labelPlural: string;
|
|
105
|
+
label: string;
|
|
106
|
+
private _parentModel;
|
|
107
|
+
constructor(models: Models, definition: EntityModelDefinition);
|
|
108
|
+
getField(name: string): EntityFieldDefinition;
|
|
109
|
+
get relations(): NormalRelation[];
|
|
110
|
+
get relationsByName(): Record<string, NormalRelation>;
|
|
111
|
+
getRelation(name: string): NormalRelation;
|
|
112
|
+
get reverseRelations(): ReverseRelation[];
|
|
113
|
+
get reverseRelationsByName(): Record<string, ReverseRelation>;
|
|
114
|
+
getReverseRelation(name: string): ReverseRelation;
|
|
115
|
+
get manyToManyRelations(): ManyToManyRelation[];
|
|
116
|
+
get manyToManyRelationsByName(): Record<string, ManyToManyRelation>;
|
|
117
|
+
getManyToManyRelation(name: string): ManyToManyRelation;
|
|
118
|
+
get parentModel(): EntityModel;
|
|
119
|
+
get rootModel(): EntityModel;
|
|
120
|
+
}
|
|
121
|
+
declare const MODEL_KIND_TO_CLASS_MAPPING: {
|
|
122
|
+
entity: typeof EntityModel;
|
|
123
|
+
enum: typeof EnumModel;
|
|
124
|
+
input: typeof InputModel;
|
|
125
|
+
interface: typeof InterfaceModel;
|
|
126
|
+
object: typeof ObjectModel;
|
|
127
|
+
'raw-enum': typeof RawEnumModel;
|
|
128
|
+
scalar: typeof ScalarModel;
|
|
76
129
|
};
|
|
77
|
-
type
|
|
78
|
-
|
|
79
|
-
kind?: 'primitive' | undefined;
|
|
80
|
-
} & ({
|
|
81
|
-
type: 'ID';
|
|
82
|
-
} | {
|
|
83
|
-
type: 'Boolean';
|
|
84
|
-
} | {
|
|
85
|
-
type: 'String';
|
|
86
|
-
stringType?: 'email' | 'url' | 'phone';
|
|
87
|
-
large?: true;
|
|
88
|
-
maxLength?: number;
|
|
89
|
-
} | {
|
|
90
|
-
type: 'DateTime';
|
|
91
|
-
dateTimeType?: 'year' | 'date' | 'datetime' | 'year_and_month';
|
|
92
|
-
endOfDay?: boolean;
|
|
93
|
-
} | ({
|
|
94
|
-
type: 'Int';
|
|
95
|
-
intType?: 'currency';
|
|
96
|
-
} & BaseNumberType) | ({
|
|
97
|
-
type: 'Float';
|
|
98
|
-
floatType?: 'currency' | 'percentage';
|
|
99
|
-
double?: boolean;
|
|
100
|
-
precision?: number;
|
|
101
|
-
scale?: number;
|
|
102
|
-
} & BaseNumberType) | {
|
|
103
|
-
type: 'Upload';
|
|
104
|
-
})) | {
|
|
105
|
-
kind: 'enum';
|
|
106
|
-
type: string;
|
|
107
|
-
possibleValues?: Value[];
|
|
108
|
-
} | {
|
|
109
|
-
kind: 'custom';
|
|
110
|
-
type: string;
|
|
130
|
+
type ModelKindToClassMapping = {
|
|
131
|
+
[K in keyof typeof MODEL_KIND_TO_CLASS_MAPPING]: InstanceType<(typeof MODEL_KIND_TO_CLASS_MAPPING)[K]>;
|
|
111
132
|
};
|
|
112
|
-
export
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
type: string;
|
|
116
|
-
} | {
|
|
117
|
-
kind: 'relation';
|
|
118
|
-
type: string;
|
|
119
|
-
toOne?: boolean;
|
|
120
|
-
reverse?: string;
|
|
121
|
-
foreignKey?: string;
|
|
122
|
-
onDelete?: 'cascade' | 'set-null';
|
|
123
|
-
}) & {
|
|
124
|
-
primary?: boolean;
|
|
125
|
-
unique?: boolean;
|
|
126
|
-
filterable?: boolean | {
|
|
127
|
-
default?: Value;
|
|
128
|
-
};
|
|
129
|
-
searchable?: boolean;
|
|
130
|
-
orderable?: boolean;
|
|
131
|
-
comparable?: boolean;
|
|
132
|
-
queriable?: boolean | {
|
|
133
|
-
roles?: string[];
|
|
134
|
-
};
|
|
135
|
-
creatable?: boolean | {
|
|
136
|
-
roles?: string[];
|
|
137
|
-
};
|
|
138
|
-
updatable?: boolean | {
|
|
139
|
-
roles?: string[];
|
|
140
|
-
};
|
|
141
|
-
generated?: boolean;
|
|
142
|
-
tooltip?: string;
|
|
143
|
-
required?: boolean;
|
|
144
|
-
indent?: boolean;
|
|
145
|
-
hidden?: boolean;
|
|
146
|
-
deleted?: true;
|
|
147
|
-
oldName?: string;
|
|
148
|
-
meta?: Record<string, unknown>;
|
|
149
|
-
};
|
|
150
|
-
export type PrimitiveField = Extract<ModelField, {
|
|
151
|
-
kind?: 'primitive' | undefined;
|
|
152
|
-
}>;
|
|
153
|
-
export type IDField = Extract<PrimitiveField, {
|
|
154
|
-
type: 'ID';
|
|
155
|
-
}>;
|
|
156
|
-
export type BooleanField = Extract<PrimitiveField, {
|
|
157
|
-
type: 'Boolean';
|
|
158
|
-
}>;
|
|
159
|
-
export type StringField = Extract<PrimitiveField, {
|
|
160
|
-
type: 'String';
|
|
161
|
-
}>;
|
|
162
|
-
export type DateTimeField = Extract<PrimitiveField, {
|
|
163
|
-
type: 'DateTime';
|
|
164
|
-
}>;
|
|
165
|
-
export type IntField = Extract<PrimitiveField, {
|
|
166
|
-
type: 'Int';
|
|
167
|
-
}>;
|
|
168
|
-
export type FloatField = Extract<PrimitiveField, {
|
|
169
|
-
type: 'Float';
|
|
170
|
-
}>;
|
|
171
|
-
export type UploadField = Extract<PrimitiveField, {
|
|
172
|
-
type: 'Upload';
|
|
173
|
-
}>;
|
|
174
|
-
export type JsonField = Extract<ModelField, {
|
|
175
|
-
kind: 'json';
|
|
176
|
-
}>;
|
|
177
|
-
export type EnumField = Extract<ModelField, {
|
|
178
|
-
kind: 'enum';
|
|
179
|
-
}>;
|
|
180
|
-
export type CustomField = Extract<ModelField, {
|
|
181
|
-
kind: 'custom';
|
|
182
|
-
}>;
|
|
183
|
-
export type RelationField = Extract<ModelField, {
|
|
184
|
-
kind: 'relation';
|
|
185
|
-
}>;
|
|
186
|
-
export type Models = Model[];
|
|
187
|
-
export type Model = EntityModel & {
|
|
188
|
-
fieldsByName: Record<string, ModelField>;
|
|
189
|
-
relations: Relation[];
|
|
190
|
-
relationsByName: Record<string, Relation>;
|
|
191
|
-
reverseRelations: ReverseRelation[];
|
|
192
|
-
reverseRelationsByName: Record<string, ReverseRelation>;
|
|
193
|
-
};
|
|
194
|
-
export type Relation = {
|
|
133
|
+
export declare abstract class Relation {
|
|
134
|
+
name: string;
|
|
135
|
+
sourceModel: EntityModel;
|
|
195
136
|
field: RelationField;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
export
|
|
200
|
-
model: Model;
|
|
137
|
+
targetModel: EntityModel;
|
|
138
|
+
constructor(name: string, sourceModel: EntityModel, field: RelationField, targetModel: EntityModel);
|
|
139
|
+
}
|
|
140
|
+
export declare class NormalRelation extends Relation {
|
|
201
141
|
field: RelationField;
|
|
202
|
-
|
|
203
|
-
|
|
142
|
+
reverse: ReverseRelation;
|
|
143
|
+
constructor(sourceModel: EntityModel, field: RelationField, targetModel: EntityModel);
|
|
144
|
+
}
|
|
145
|
+
export declare class ReverseRelation extends Relation {
|
|
146
|
+
reverse: NormalRelation;
|
|
147
|
+
constructor(reverse: NormalRelation);
|
|
148
|
+
}
|
|
149
|
+
export declare class ManyToManyRelation {
|
|
150
|
+
name: string;
|
|
151
|
+
sourceModel: EntityModel;
|
|
152
|
+
relationFromSource: ReverseRelation;
|
|
153
|
+
relationModel: EntityModel;
|
|
154
|
+
relationToTarget: NormalRelation;
|
|
155
|
+
targetModel: EntityModel;
|
|
156
|
+
constructor(relationFromSource: ReverseRelation, relationToTarget: NormalRelation);
|
|
157
|
+
}
|
|
204
158
|
export {};
|