@smartive/graphql-magic 9.1.3 → 11.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.
Files changed (124) hide show
  1. package/.eslintrc +2 -10
  2. package/.github/workflows/release.yml +1 -1
  3. package/.gqmrc.json +6 -0
  4. package/CHANGELOG.md +1 -6
  5. package/README.md +1 -1
  6. package/dist/bin/gqm.cjs +676 -324
  7. package/dist/cjs/index.cjs +1016 -561
  8. package/dist/esm/api/execute.js +1 -1
  9. package/dist/esm/api/execute.js.map +1 -1
  10. package/dist/esm/client/mutations.d.ts +2 -2
  11. package/dist/esm/client/mutations.js +5 -4
  12. package/dist/esm/client/mutations.js.map +1 -1
  13. package/dist/esm/client/queries.d.ts +12 -17
  14. package/dist/esm/client/queries.js +30 -50
  15. package/dist/esm/client/queries.js.map +1 -1
  16. package/dist/esm/context.d.ts +1 -2
  17. package/dist/esm/db/generate.d.ts +3 -3
  18. package/dist/esm/db/generate.js +31 -29
  19. package/dist/esm/db/generate.js.map +1 -1
  20. package/dist/esm/errors.d.ts +1 -1
  21. package/dist/esm/errors.js +2 -2
  22. package/dist/esm/errors.js.map +1 -1
  23. package/dist/esm/migrations/generate.d.ts +3 -4
  24. package/dist/esm/migrations/generate.js +114 -107
  25. package/dist/esm/migrations/generate.js.map +1 -1
  26. package/dist/esm/models/index.d.ts +1 -0
  27. package/dist/esm/models/index.js +1 -0
  28. package/dist/esm/models/index.js.map +1 -1
  29. package/dist/esm/models/model-definitions.d.ts +189 -0
  30. package/dist/esm/models/model-definitions.js +2 -0
  31. package/dist/esm/models/model-definitions.js.map +1 -0
  32. package/dist/esm/models/models.d.ts +128 -174
  33. package/dist/esm/models/models.js +411 -1
  34. package/dist/esm/models/models.js.map +1 -1
  35. package/dist/esm/models/mutation-hook.d.ts +2 -2
  36. package/dist/esm/models/utils.d.ts +35 -497
  37. package/dist/esm/models/utils.js +21 -144
  38. package/dist/esm/models/utils.js.map +1 -1
  39. package/dist/esm/permissions/check.d.ts +3 -3
  40. package/dist/esm/permissions/check.js +19 -12
  41. package/dist/esm/permissions/check.js.map +1 -1
  42. package/dist/esm/permissions/generate.js +6 -6
  43. package/dist/esm/permissions/generate.js.map +1 -1
  44. package/dist/esm/resolvers/filters.d.ts +8 -0
  45. package/dist/esm/resolvers/filters.js +28 -25
  46. package/dist/esm/resolvers/filters.js.map +1 -1
  47. package/dist/esm/resolvers/index.d.ts +1 -0
  48. package/dist/esm/resolvers/index.js +1 -0
  49. package/dist/esm/resolvers/index.js.map +1 -1
  50. package/dist/esm/resolvers/mutations.js +85 -21
  51. package/dist/esm/resolvers/mutations.js.map +1 -1
  52. package/dist/esm/resolvers/node.d.ts +13 -15
  53. package/dist/esm/resolvers/node.js +41 -36
  54. package/dist/esm/resolvers/node.js.map +1 -1
  55. package/dist/esm/resolvers/resolver.js +19 -49
  56. package/dist/esm/resolvers/resolver.js.map +1 -1
  57. package/dist/esm/resolvers/resolvers.d.ts +1 -8
  58. package/dist/esm/resolvers/resolvers.js +15 -7
  59. package/dist/esm/resolvers/resolvers.js.map +1 -1
  60. package/dist/esm/resolvers/selects.d.ts +3 -0
  61. package/dist/esm/resolvers/selects.js +50 -0
  62. package/dist/esm/resolvers/selects.js.map +1 -0
  63. package/dist/esm/resolvers/utils.d.ts +12 -4
  64. package/dist/esm/resolvers/utils.js +30 -22
  65. package/dist/esm/resolvers/utils.js.map +1 -1
  66. package/dist/esm/schema/generate.d.ts +4 -4
  67. package/dist/esm/schema/generate.js +122 -131
  68. package/dist/esm/schema/generate.js.map +1 -1
  69. package/dist/esm/schema/utils.d.ts +1 -1
  70. package/dist/esm/schema/utils.js +2 -1
  71. package/dist/esm/schema/utils.js.map +1 -1
  72. package/knexfile.ts +31 -0
  73. package/migrations/20230912185644_setup.ts +127 -0
  74. package/package.json +16 -14
  75. package/src/api/execute.ts +1 -1
  76. package/src/bin/gqm/gqm.ts +16 -16
  77. package/src/bin/gqm/parse-models.ts +5 -5
  78. package/src/bin/gqm/settings.ts +13 -4
  79. package/src/bin/gqm/static-eval.ts +5 -0
  80. package/src/bin/gqm/templates.ts +23 -3
  81. package/src/client/mutations.ts +11 -5
  82. package/src/client/queries.ts +44 -81
  83. package/src/context.ts +1 -2
  84. package/src/db/generate.ts +41 -41
  85. package/src/errors.ts +2 -2
  86. package/src/migrations/generate.ts +165 -146
  87. package/src/models/index.ts +1 -0
  88. package/src/models/model-definitions.ts +168 -0
  89. package/src/models/models.ts +510 -166
  90. package/src/models/mutation-hook.ts +2 -2
  91. package/src/models/utils.ts +53 -187
  92. package/src/permissions/check.ts +34 -16
  93. package/src/permissions/generate.ts +6 -6
  94. package/src/resolvers/filters.ts +44 -28
  95. package/src/resolvers/index.ts +1 -0
  96. package/src/resolvers/mutations.ts +98 -36
  97. package/src/resolvers/node.ts +79 -51
  98. package/src/resolvers/resolver.ts +20 -74
  99. package/src/resolvers/resolvers.ts +18 -7
  100. package/src/resolvers/selects.ts +78 -0
  101. package/src/resolvers/utils.ts +41 -25
  102. package/src/schema/generate.ts +106 -127
  103. package/src/schema/utils.ts +2 -1
  104. package/tests/api/__snapshots__/inheritance.spec.ts.snap +83 -0
  105. package/tests/api/inheritance.spec.ts +130 -0
  106. package/tests/generated/api/index.ts +1174 -0
  107. package/tests/generated/client/index.ts +1163 -0
  108. package/tests/generated/client/mutations.ts +109 -0
  109. package/tests/generated/db/index.ts +291 -0
  110. package/tests/generated/db/knex.ts +14 -0
  111. package/tests/generated/models.json +675 -0
  112. package/tests/generated/schema.graphql +325 -0
  113. package/tests/unit/__snapshots__/resolve.spec.ts.snap +23 -0
  114. package/tests/unit/queries.spec.ts +5 -5
  115. package/tests/unit/resolve.spec.ts +8 -8
  116. package/tests/utils/database/knex.ts +5 -13
  117. package/tests/utils/database/seed.ts +57 -18
  118. package/tests/utils/models.ts +62 -7
  119. package/tests/utils/server.ts +5 -5
  120. package/tsconfig.eslint.json +1 -0
  121. package/tests/unit/__snapshots__/generate.spec.ts.snap +0 -128
  122. package/tests/unit/generate.spec.ts +0 -8
  123. package/tests/utils/database/schema.ts +0 -64
  124. package/tests/utils/generate-migration.ts +0 -24
@@ -0,0 +1,168 @@
1
+ import { Field } from '..';
2
+ import type { OrderBy } from '../resolvers/arguments';
3
+ import type { Value } from '../values';
4
+
5
+ type BaseNumberType = {
6
+ unit?: 'million';
7
+ min?: number;
8
+ max?: number;
9
+ };
10
+
11
+ type FieldDefinitionBase = Omit<Field, 'type'>;
12
+
13
+ type FieldDefinitionBase2 =
14
+ | ({ kind?: 'primitive' | undefined } & (
15
+ | { type: 'ID' }
16
+ | { type: 'Boolean' }
17
+ | {
18
+ type: 'String';
19
+ stringType?: 'email' | 'url' | 'phone';
20
+ large?: true;
21
+ maxLength?: number;
22
+ }
23
+ | {
24
+ type: 'DateTime';
25
+ dateTimeType?: 'year' | 'date' | 'datetime' | 'year_and_month';
26
+ endOfDay?: boolean;
27
+ }
28
+ | ({
29
+ type: 'Int';
30
+ intType?: 'currency';
31
+ } & BaseNumberType)
32
+ | ({
33
+ type: 'Float';
34
+ floatType?: 'currency' | 'percentage';
35
+ double?: boolean;
36
+ precision?: number;
37
+ scale?: number;
38
+ } & BaseNumberType)
39
+ | { type: 'Upload' }
40
+ ))
41
+ | { kind: 'enum'; type: string; possibleValues?: Value[] }
42
+ | { kind: 'custom'; type: string };
43
+
44
+ export type ObjectFieldDefinition = FieldDefinitionBase & FieldDefinitionBase2;
45
+
46
+ export type EntityFieldDefinition = FieldDefinitionBase &
47
+ (
48
+ | FieldDefinitionBase2
49
+ | { kind: 'json'; type: string }
50
+ | {
51
+ kind: 'relation';
52
+ type: string;
53
+ toOne?: boolean;
54
+ reverse?: string;
55
+ foreignKey?: string;
56
+ onDelete?: 'cascade' | 'set-null';
57
+ }
58
+ ) & {
59
+ primary?: boolean;
60
+ unique?: boolean;
61
+ filterable?:
62
+ | boolean
63
+ | {
64
+ default?: Value;
65
+ };
66
+ searchable?: boolean;
67
+ orderable?: boolean;
68
+ comparable?: boolean;
69
+ queriable?:
70
+ | boolean
71
+ | {
72
+ roles?: string[];
73
+ };
74
+ creatable?:
75
+ | boolean
76
+ | {
77
+ roles?: string[];
78
+ };
79
+ updatable?:
80
+ | boolean
81
+ | {
82
+ roles?: string[];
83
+ };
84
+ // The tooltip is "hidden" behind an icon in the admin forms
85
+ tooltip?: string;
86
+ // If true the field must be filled within forms but can be null in the database
87
+ required?: boolean;
88
+ indent?: boolean;
89
+ // If true the field is hidden in the admin interface
90
+ hidden?: boolean;
91
+
92
+ // Temporary fields for the generation of migrations
93
+ deleted?: true;
94
+ oldName?: string;
95
+
96
+ // For your additional information about the field
97
+ meta?: Record<string, unknown>;
98
+
99
+ // Set by graphql-magic, leave empty
100
+ generated?: boolean;
101
+ inherited?: boolean;
102
+ };
103
+
104
+ export type PrimitiveFieldDefinition = Extract<EntityFieldDefinition, { kind?: 'primitive' | undefined }>;
105
+ export type IDFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'ID' }>;
106
+ export type BooleanFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'Boolean' }>;
107
+ export type StringFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'String' }>;
108
+ export type DateTimeFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'DateTime' }>;
109
+ export type IntFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'Int' }>;
110
+ export type FloatFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'Float' }>;
111
+ export type UploadFieldDefinition = Extract<PrimitiveFieldDefinition, { type: 'Upload' }>;
112
+ export type JsonFieldDefinition = Extract<EntityFieldDefinition, { kind: 'json' }>;
113
+ export type EnumFieldDefinition = Extract<EntityFieldDefinition, { kind: 'enum' }>;
114
+ export type CustomFieldDefinition = Extract<EntityFieldDefinition, { kind: 'custom' }>;
115
+ export type RelationFieldDefinition = Extract<EntityFieldDefinition, { kind: 'relation' }>;
116
+
117
+ export type ModelDefinition = {
118
+ name: string;
119
+ plural?: string;
120
+ description?: string;
121
+ } & (
122
+ | { kind: 'scalar' }
123
+ | { kind: 'enum'; values: string[]; deleted?: true }
124
+ | { kind: 'raw-enum'; values: string[] }
125
+ | { kind: 'interface'; fields: EntityFieldDefinition[] }
126
+ | {
127
+ kind: 'input';
128
+ fields: ObjectFieldDefinition[];
129
+ }
130
+ | {
131
+ kind: 'object';
132
+ fields: ObjectFieldDefinition[];
133
+ }
134
+ | {
135
+ kind: 'entity';
136
+ root?: boolean;
137
+ parent?: string;
138
+ interfaces?: string[];
139
+ queriable?: boolean;
140
+ listQueriable?: boolean;
141
+ creatable?: boolean | { createdBy?: Partial<RelationFieldDefinition>; createdAt?: Partial<DateTimeFieldDefinition> };
142
+ updatable?: boolean | { updatedBy?: Partial<RelationFieldDefinition>; updatedAt?: Partial<DateTimeFieldDefinition> };
143
+ deletable?:
144
+ | boolean
145
+ | {
146
+ deleted?: Partial<BooleanFieldDefinition>;
147
+ deletedBy?: Partial<RelationFieldDefinition>;
148
+ deletedAt?: Partial<DateTimeFieldDefinition>;
149
+ };
150
+ displayField?: string;
151
+ defaultOrderBy?: OrderBy;
152
+ fields: EntityFieldDefinition[];
153
+
154
+ // temporary fields for the generation of migrations
155
+ deleted?: true;
156
+ oldName?: string;
157
+ }
158
+ );
159
+
160
+ export type ScalarModelDefinition = Extract<ModelDefinition, { kind: 'scalar' }>;
161
+ export type EnumModelDefinition = Extract<ModelDefinition, { kind: 'enum' }>;
162
+ export type RawEnumModelDefinition = Extract<ModelDefinition, { kind: 'raw-enum' }>;
163
+ export type InterfaceModelDefinition = Extract<ModelDefinition, { kind: 'interface' }>;
164
+ export type ObjectModelDefinition = Extract<ModelDefinition, { kind: 'object' }>;
165
+ export type InputModelDefinition = Extract<ModelDefinition, { kind: 'input' }>;
166
+ export type EntityModelDefinition = Extract<ModelDefinition, { kind: 'entity' }>;
167
+
168
+ export type ModelDefinitions = ModelDefinition[];