@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.
Files changed (120) 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 +2 -2
  5. package/README.md +1 -1
  6. package/dist/bin/gqm.cjs +684 -330
  7. package/dist/cjs/index.cjs +998 -554
  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/migrations/generate.d.ts +3 -4
  21. package/dist/esm/migrations/generate.js +114 -107
  22. package/dist/esm/migrations/generate.js.map +1 -1
  23. package/dist/esm/models/index.d.ts +1 -0
  24. package/dist/esm/models/index.js +1 -0
  25. package/dist/esm/models/index.js.map +1 -1
  26. package/dist/esm/models/model-definitions.d.ts +189 -0
  27. package/dist/esm/models/model-definitions.js +2 -0
  28. package/dist/esm/models/model-definitions.js.map +1 -0
  29. package/dist/esm/models/models.d.ts +128 -174
  30. package/dist/esm/models/models.js +411 -1
  31. package/dist/esm/models/models.js.map +1 -1
  32. package/dist/esm/models/mutation-hook.d.ts +2 -2
  33. package/dist/esm/models/utils.d.ts +35 -497
  34. package/dist/esm/models/utils.js +21 -144
  35. package/dist/esm/models/utils.js.map +1 -1
  36. package/dist/esm/permissions/check.d.ts +3 -3
  37. package/dist/esm/permissions/check.js +14 -7
  38. package/dist/esm/permissions/check.js.map +1 -1
  39. package/dist/esm/permissions/generate.js +6 -6
  40. package/dist/esm/permissions/generate.js.map +1 -1
  41. package/dist/esm/resolvers/filters.d.ts +8 -0
  42. package/dist/esm/resolvers/filters.js +28 -25
  43. package/dist/esm/resolvers/filters.js.map +1 -1
  44. package/dist/esm/resolvers/index.d.ts +1 -0
  45. package/dist/esm/resolvers/index.js +1 -0
  46. package/dist/esm/resolvers/index.js.map +1 -1
  47. package/dist/esm/resolvers/mutations.js +85 -21
  48. package/dist/esm/resolvers/mutations.js.map +1 -1
  49. package/dist/esm/resolvers/node.d.ts +13 -15
  50. package/dist/esm/resolvers/node.js +41 -36
  51. package/dist/esm/resolvers/node.js.map +1 -1
  52. package/dist/esm/resolvers/resolver.js +19 -49
  53. package/dist/esm/resolvers/resolver.js.map +1 -1
  54. package/dist/esm/resolvers/resolvers.d.ts +1 -8
  55. package/dist/esm/resolvers/resolvers.js +15 -7
  56. package/dist/esm/resolvers/resolvers.js.map +1 -1
  57. package/dist/esm/resolvers/selects.d.ts +3 -0
  58. package/dist/esm/resolvers/selects.js +50 -0
  59. package/dist/esm/resolvers/selects.js.map +1 -0
  60. package/dist/esm/resolvers/utils.d.ts +12 -4
  61. package/dist/esm/resolvers/utils.js +30 -22
  62. package/dist/esm/resolvers/utils.js.map +1 -1
  63. package/dist/esm/schema/generate.d.ts +4 -4
  64. package/dist/esm/schema/generate.js +122 -131
  65. package/dist/esm/schema/generate.js.map +1 -1
  66. package/dist/esm/schema/utils.d.ts +1 -1
  67. package/dist/esm/schema/utils.js +2 -1
  68. package/dist/esm/schema/utils.js.map +1 -1
  69. package/knexfile.ts +31 -0
  70. package/migrations/20230912185644_setup.ts +127 -0
  71. package/package.json +16 -14
  72. package/src/api/execute.ts +1 -1
  73. package/src/bin/gqm/gqm.ts +25 -23
  74. package/src/bin/gqm/parse-models.ts +5 -5
  75. package/src/bin/gqm/settings.ts +13 -4
  76. package/src/bin/gqm/static-eval.ts +5 -0
  77. package/src/bin/gqm/templates.ts +23 -3
  78. package/src/client/mutations.ts +11 -5
  79. package/src/client/queries.ts +43 -80
  80. package/src/context.ts +1 -2
  81. package/src/db/generate.ts +41 -41
  82. package/src/migrations/generate.ts +165 -146
  83. package/src/models/index.ts +1 -0
  84. package/src/models/model-definitions.ts +168 -0
  85. package/src/models/models.ts +510 -166
  86. package/src/models/mutation-hook.ts +2 -2
  87. package/src/models/utils.ts +53 -187
  88. package/src/permissions/check.ts +19 -11
  89. package/src/permissions/generate.ts +6 -6
  90. package/src/resolvers/filters.ts +44 -28
  91. package/src/resolvers/index.ts +1 -0
  92. package/src/resolvers/mutations.ts +98 -36
  93. package/src/resolvers/node.ts +79 -51
  94. package/src/resolvers/resolver.ts +20 -74
  95. package/src/resolvers/resolvers.ts +18 -7
  96. package/src/resolvers/selects.ts +77 -0
  97. package/src/resolvers/utils.ts +41 -25
  98. package/src/schema/generate.ts +106 -127
  99. package/src/schema/utils.ts +2 -1
  100. package/tests/api/__snapshots__/inheritance.spec.ts.snap +83 -0
  101. package/tests/api/inheritance.spec.ts +130 -0
  102. package/tests/generated/api/index.ts +1174 -0
  103. package/tests/generated/client/index.ts +1163 -0
  104. package/tests/generated/client/mutations.ts +109 -0
  105. package/tests/generated/db/index.ts +291 -0
  106. package/tests/generated/db/knex.ts +14 -0
  107. package/tests/generated/models.json +675 -0
  108. package/tests/generated/schema.graphql +325 -0
  109. package/tests/unit/__snapshots__/resolve.spec.ts.snap +23 -0
  110. package/tests/unit/queries.spec.ts +5 -5
  111. package/tests/unit/resolve.spec.ts +8 -8
  112. package/tests/utils/database/knex.ts +5 -13
  113. package/tests/utils/database/seed.ts +57 -18
  114. package/tests/utils/models.ts +62 -7
  115. package/tests/utils/server.ts +5 -5
  116. package/tsconfig.eslint.json +1 -0
  117. package/tests/unit/__snapshots__/generate.spec.ts.snap +0 -128
  118. package/tests/unit/generate.spec.ts +0 -8
  119. package/tests/utils/database/schema.ts +0 -64
  120. 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[];