@snowtop/ent 0.1.0-alpha12 → 0.1.0-alpha121

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 (167) hide show
  1. package/action/action.d.ts +37 -31
  2. package/action/action.js +22 -7
  3. package/action/executor.d.ts +3 -3
  4. package/action/executor.js +8 -3
  5. package/action/experimental_action.d.ts +32 -22
  6. package/action/experimental_action.js +35 -9
  7. package/action/index.d.ts +2 -0
  8. package/action/index.js +7 -1
  9. package/action/orchestrator.d.ts +33 -14
  10. package/action/orchestrator.js +251 -54
  11. package/action/privacy.d.ts +2 -2
  12. package/action/relative_value.d.ts +47 -0
  13. package/action/relative_value.js +125 -0
  14. package/action/transaction.d.ts +10 -0
  15. package/action/transaction.js +23 -0
  16. package/auth/auth.d.ts +1 -1
  17. package/core/base.d.ts +60 -37
  18. package/core/base.js +7 -1
  19. package/core/clause.d.ts +84 -40
  20. package/core/clause.js +358 -64
  21. package/core/config.d.ts +12 -1
  22. package/core/config.js +7 -1
  23. package/core/const.d.ts +3 -0
  24. package/core/const.js +6 -0
  25. package/core/context.d.ts +6 -4
  26. package/core/context.js +20 -2
  27. package/core/convert.d.ts +1 -1
  28. package/core/date.js +1 -5
  29. package/core/db.d.ts +11 -8
  30. package/core/db.js +20 -8
  31. package/core/ent.d.ts +82 -30
  32. package/core/ent.js +632 -193
  33. package/core/global_schema.d.ts +7 -0
  34. package/core/global_schema.js +51 -0
  35. package/core/loaders/assoc_count_loader.d.ts +3 -2
  36. package/core/loaders/assoc_count_loader.js +10 -2
  37. package/core/loaders/assoc_edge_loader.d.ts +2 -2
  38. package/core/loaders/assoc_edge_loader.js +8 -11
  39. package/core/loaders/index.d.ts +1 -1
  40. package/core/loaders/index.js +1 -3
  41. package/core/loaders/index_loader.d.ts +3 -3
  42. package/core/loaders/loader.d.ts +2 -2
  43. package/core/loaders/loader.js +5 -5
  44. package/core/loaders/object_loader.d.ts +11 -10
  45. package/core/loaders/object_loader.js +70 -60
  46. package/core/loaders/query_loader.d.ts +7 -13
  47. package/core/loaders/query_loader.js +52 -11
  48. package/core/loaders/raw_count_loader.d.ts +2 -2
  49. package/core/loaders/raw_count_loader.js +5 -1
  50. package/core/logger.d.ts +1 -1
  51. package/core/logger.js +1 -0
  52. package/core/privacy.d.ts +25 -24
  53. package/core/privacy.js +21 -25
  54. package/core/query/assoc_query.d.ts +7 -6
  55. package/core/query/assoc_query.js +9 -1
  56. package/core/query/custom_clause_query.d.ts +27 -0
  57. package/core/query/custom_clause_query.js +84 -0
  58. package/core/query/custom_query.d.ts +20 -5
  59. package/core/query/custom_query.js +87 -12
  60. package/core/query/index.d.ts +1 -0
  61. package/core/query/index.js +3 -1
  62. package/core/query/query.d.ts +8 -4
  63. package/core/query/query.js +101 -53
  64. package/core/query/shared_assoc_test.d.ts +2 -1
  65. package/core/query/shared_assoc_test.js +35 -45
  66. package/core/query/shared_test.d.ts +8 -1
  67. package/core/query/shared_test.js +470 -236
  68. package/core/viewer.d.ts +3 -3
  69. package/core/viewer.js +1 -1
  70. package/graphql/graphql.d.ts +15 -7
  71. package/graphql/graphql.js +23 -7
  72. package/graphql/index.d.ts +1 -1
  73. package/graphql/index.js +3 -4
  74. package/graphql/query/connection_type.d.ts +9 -9
  75. package/graphql/query/edge_connection.d.ts +9 -9
  76. package/graphql/query/page_info.d.ts +1 -1
  77. package/graphql/query/shared_assoc_test.js +1 -1
  78. package/graphql/query/shared_edge_connection.js +1 -19
  79. package/graphql/scalars/orderby_direction.d.ts +2 -0
  80. package/graphql/scalars/orderby_direction.js +15 -0
  81. package/imports/index.d.ts +6 -1
  82. package/imports/index.js +19 -4
  83. package/index.d.ts +13 -5
  84. package/index.js +21 -7
  85. package/package.json +17 -16
  86. package/parse_schema/parse.d.ts +31 -9
  87. package/parse_schema/parse.js +152 -12
  88. package/schema/base_schema.d.ts +5 -3
  89. package/schema/base_schema.js +6 -0
  90. package/schema/field.d.ts +78 -21
  91. package/schema/field.js +219 -72
  92. package/schema/index.d.ts +2 -2
  93. package/schema/index.js +5 -1
  94. package/schema/json_field.d.ts +16 -4
  95. package/schema/json_field.js +32 -2
  96. package/schema/schema.d.ts +89 -20
  97. package/schema/schema.js +13 -14
  98. package/schema/struct_field.d.ts +15 -3
  99. package/schema/struct_field.js +71 -22
  100. package/schema/union_field.d.ts +1 -1
  101. package/scripts/custom_compiler.js +10 -6
  102. package/scripts/custom_graphql.js +124 -31
  103. package/scripts/migrate_v0.1.js +36 -0
  104. package/scripts/move_types.js +117 -0
  105. package/scripts/read_schema.js +20 -5
  106. package/testutils/action/complex_schemas.d.ts +69 -0
  107. package/testutils/action/complex_schemas.js +398 -0
  108. package/testutils/builder.d.ts +43 -47
  109. package/testutils/builder.js +76 -49
  110. package/testutils/db/fixture.d.ts +10 -0
  111. package/testutils/db/fixture.js +26 -0
  112. package/testutils/db/{test_db.d.ts → temp_db.d.ts} +24 -8
  113. package/testutils/db/{test_db.js → temp_db.js} +182 -45
  114. package/testutils/db/value.d.ts +7 -0
  115. package/testutils/db/value.js +251 -0
  116. package/testutils/db_mock.d.ts +16 -4
  117. package/testutils/db_mock.js +51 -6
  118. package/testutils/db_time_zone.d.ts +4 -0
  119. package/testutils/db_time_zone.js +41 -0
  120. package/testutils/ent-graphql-tests/index.d.ts +7 -1
  121. package/testutils/ent-graphql-tests/index.js +52 -23
  122. package/testutils/fake_data/const.d.ts +2 -1
  123. package/testutils/fake_data/const.js +3 -0
  124. package/testutils/fake_data/fake_contact.d.ts +8 -4
  125. package/testutils/fake_data/fake_contact.js +15 -8
  126. package/testutils/fake_data/fake_event.d.ts +5 -2
  127. package/testutils/fake_data/fake_event.js +9 -7
  128. package/testutils/fake_data/fake_tag.d.ts +36 -0
  129. package/testutils/fake_data/fake_tag.js +89 -0
  130. package/testutils/fake_data/fake_user.d.ts +10 -7
  131. package/testutils/fake_data/fake_user.js +18 -16
  132. package/testutils/fake_data/index.js +5 -1
  133. package/testutils/fake_data/internal.d.ts +2 -0
  134. package/testutils/fake_data/internal.js +7 -1
  135. package/testutils/fake_data/tag_query.d.ts +13 -0
  136. package/testutils/fake_data/tag_query.js +43 -0
  137. package/testutils/fake_data/test_helpers.d.ts +11 -4
  138. package/testutils/fake_data/test_helpers.js +28 -12
  139. package/testutils/fake_data/user_query.d.ts +13 -6
  140. package/testutils/fake_data/user_query.js +54 -22
  141. package/testutils/fake_log.d.ts +3 -3
  142. package/testutils/parse_sql.d.ts +6 -0
  143. package/testutils/parse_sql.js +16 -2
  144. package/testutils/test_edge_global_schema.d.ts +15 -0
  145. package/testutils/test_edge_global_schema.js +62 -0
  146. package/testutils/write.d.ts +2 -2
  147. package/testutils/write.js +33 -7
  148. package/tsc/ast.d.ts +25 -2
  149. package/tsc/ast.js +141 -17
  150. package/tsc/compilerOptions.js +5 -1
  151. package/tsc/move_generated.d.ts +1 -0
  152. package/tsc/move_generated.js +164 -0
  153. package/tsc/transform.d.ts +22 -0
  154. package/tsc/transform.js +181 -0
  155. package/tsc/transform_action.d.ts +22 -0
  156. package/tsc/transform_action.js +183 -0
  157. package/tsc/transform_ent.d.ts +17 -0
  158. package/tsc/transform_ent.js +60 -0
  159. package/tsc/transform_schema.d.ts +27 -0
  160. package/{scripts → tsc}/transform_schema.js +146 -117
  161. package/graphql/enums.d.ts +0 -3
  162. package/graphql/enums.js +0 -25
  163. package/scripts/move_generated.js +0 -142
  164. package/scripts/transform_code.js +0 -113
  165. package/scripts/transform_schema.d.ts +0 -1
  166. /package/scripts/{move_generated.d.ts → migrate_v0.1.d.ts} +0 -0
  167. /package/scripts/{transform_code.d.ts → move_types.d.ts} +0 -0
@@ -1,34 +1,36 @@
1
1
  import { Schema, Field, AssocEdge, AssocEdgeGroup, Action } from "../schema";
2
- import { ActionField, Type } from "../schema/schema";
2
+ import { ActionField, Type, GlobalSchema, TransformReadBetaResult } from "../schema/schema";
3
3
  declare enum NullableResult {
4
4
  CONTENTS = "contents",
5
5
  CONTENTS_AND_LIST = "contentsAndList",
6
6
  ITEM = "true"
7
7
  }
8
- declare type ProcessedActionField = Omit<ActionField, "nullable"> & {
8
+ type ProcessedActionField = Omit<ActionField, "nullable"> & {
9
9
  nullable?: NullableResult;
10
10
  };
11
- declare type ProcessedAssocEdge = Omit<AssocEdge, "actionOnlyFields" | "edgeActions"> & {
11
+ type ProcessedAssocEdge = Omit<AssocEdge, "actionOnlyFields" | "edgeActions"> & {
12
12
  patternName?: string;
13
13
  edgeActions?: OutputAction[];
14
14
  };
15
15
  interface TransformFlags {
16
16
  transformsSelect?: boolean;
17
17
  transformsDelete?: boolean;
18
+ transformsLoaderCodegen?: TransformReadBetaResult;
18
19
  transformsInsert?: boolean;
19
20
  transformsUpdate?: boolean;
20
21
  }
21
- declare type ProcessedSchema = Omit<Schema, "edges" | "actions" | "edgeGroups" | "fields"> & TransformFlags & {
22
+ type ProcessedSchema = Omit<Schema, "edges" | "actions" | "edgeGroups" | "fields"> & TransformFlags & {
22
23
  actions: OutputAction[];
23
24
  assocEdges: ProcessedAssocEdge[];
24
25
  assocEdgeGroups: ProcessedAssocEdgeGroup[];
25
26
  fields: ProcessedField[];
26
27
  schemaPath?: string;
28
+ patternNames?: string[];
27
29
  };
28
- declare type ProcessedAssocEdgeGroup = Omit<AssocEdgeGroup, "edgeAction"> & {
30
+ type ProcessedAssocEdgeGroup = Omit<AssocEdgeGroup, "edgeAction"> & {
29
31
  edgeAction?: OutputAction;
30
32
  };
31
- declare type OutputAction = Omit<Action, "actionOnlyFields"> & {
33
+ type OutputAction = Omit<Action, "actionOnlyFields"> & {
32
34
  actionOnlyFields?: ProcessedActionField[];
33
35
  };
34
36
  interface schemasDict {
@@ -38,13 +40,14 @@ interface ProcessedPattern {
38
40
  name: string;
39
41
  assocEdges: ProcessedAssocEdge[];
40
42
  fields: ProcessedField[];
43
+ disableMixin?: boolean;
41
44
  }
42
- declare type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> & {
45
+ type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> & {
43
46
  subFields?: ProcessedField[];
44
47
  listElemType?: ProcessedType;
45
48
  unionFields?: ProcessedField[];
46
49
  };
47
- declare type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type"> & {
50
+ type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type" | "serverDefault"> & {
48
51
  name: string;
49
52
  hasDefaultValueOnCreate?: boolean;
50
53
  hasDefaultValueOnEdit?: boolean;
@@ -52,6 +55,7 @@ declare type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOn
52
55
  hasFieldPrivacy?: boolean;
53
56
  derivedFields?: ProcessedField[];
54
57
  type: ProcessedType;
58
+ serverDefault?: string;
55
59
  };
56
60
  interface patternsDict {
57
61
  [key: string]: ProcessedPattern;
@@ -59,9 +63,27 @@ interface patternsDict {
59
63
  interface Result {
60
64
  schemas: schemasDict;
61
65
  patterns: patternsDict;
66
+ globalSchema?: ProcessedGlobalSchema;
67
+ config?: {
68
+ rome?: RomeConfig;
69
+ };
62
70
  }
63
71
  declare type PotentialSchemas = {
64
72
  [key: string]: any;
65
73
  };
66
- export declare function parseSchema(potentialSchemas: PotentialSchemas): Result;
74
+ export declare function parseSchema(potentialSchemas: PotentialSchemas, globalSchema?: GlobalSchema): Promise<Result>;
75
+ interface RomeConfig {
76
+ indentStyle?: string;
77
+ lineWidth?: number;
78
+ indentSize?: number;
79
+ quoteStyle?: string;
80
+ quoteProperties?: string;
81
+ trailingComma?: string;
82
+ }
83
+ interface ProcessedGlobalSchema {
84
+ globalEdges: ProcessedAssocEdge[];
85
+ extraEdgeFields: ProcessedField[];
86
+ initForEdges?: boolean;
87
+ globalFields?: ProcessedField[];
88
+ }
67
89
  export {};
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseSchema = void 0;
4
- function processFields(src, patternName) {
4
+ const cosmiconfig_1 = require("cosmiconfig");
5
+ const const_1 = require("../core/const");
6
+ const global_schema_1 = require("../core/global_schema");
7
+ async function processFields(src, patternName) {
5
8
  const ret = [];
6
9
  let m = {};
7
10
  if (Array.isArray(src)) {
@@ -36,6 +39,19 @@ function processFields(src, patternName) {
36
39
  else {
37
40
  delete f.polymorphic;
38
41
  }
42
+ if (field.private) {
43
+ // convert boolean into object
44
+ // we keep boolean as an option to keep API simple
45
+ if (typeof field.private === "boolean") {
46
+ f.private = {};
47
+ }
48
+ else {
49
+ f.private = field.private;
50
+ }
51
+ }
52
+ else {
53
+ delete f.private;
54
+ }
39
55
  // convert string to object to make API consumed by go simple
40
56
  if (f.fieldEdge && f.fieldEdge.inverseEdge) {
41
57
  if (typeof f.fieldEdge.inverseEdge === "string") {
@@ -47,26 +63,48 @@ function processFields(src, patternName) {
47
63
  if (patternName) {
48
64
  f.patternName = patternName;
49
65
  }
66
+ if (field.serverDefault !== undefined) {
67
+ f.serverDefault = await transformServerDefault(name, field, field.serverDefault);
68
+ }
50
69
  transformType(field.type);
51
70
  if (field.getDerivedFields) {
52
- f.derivedFields = processFields(field.getDerivedFields(name));
71
+ f.derivedFields = await processFields(field.getDerivedFields(name));
53
72
  }
54
73
  if (field.type.subFields) {
55
- f.type.subFields = processFields(field.type.subFields);
74
+ f.type.subFields = await processFields(field.type.subFields);
56
75
  }
57
76
  if (field.type.unionFields) {
58
- f.type.unionFields = processFields(field.type.unionFields);
77
+ f.type.unionFields = await processFields(field.type.unionFields);
59
78
  }
60
79
  if (field.type.listElemType &&
61
80
  field.type.listElemType.subFields &&
62
81
  // check to avoid ts-ignore below. exists just for tsc
63
82
  f.type.listElemType) {
64
- f.type.listElemType.subFields = processFields(field.type.listElemType.subFields);
83
+ f.type.listElemType.subFields = await processFields(field.type.listElemType.subFields);
65
84
  }
66
85
  ret.push(f);
67
86
  }
68
87
  return ret;
69
88
  }
89
+ async function transformServerDefault(name, f, value) {
90
+ if (f.valid) {
91
+ if (!(await f.valid(value))) {
92
+ throw new Error(`invalid value ${value} passed to field ${name}`);
93
+ }
94
+ }
95
+ if (f.format) {
96
+ value = await f.format(value);
97
+ }
98
+ switch (typeof value) {
99
+ case "boolean":
100
+ case "number":
101
+ case "bigint":
102
+ case "string":
103
+ return `${value}`;
104
+ default:
105
+ throw new Error(`invalid value ${value} passed to field ${name}`);
106
+ }
107
+ }
70
108
  function transformImportType(typ) {
71
109
  if (!typ.importType) {
72
110
  return;
@@ -108,12 +146,12 @@ function processEdgeGroups(processedSchema, edgeGroups) {
108
146
  processedSchema.assocEdgeGroups.push(group2);
109
147
  }
110
148
  }
111
- function processPattern(patterns, pattern, processedSchema) {
149
+ async function processPattern(patterns, pattern, processedSchema) {
112
150
  let ret = {
113
151
  ...pattern,
114
152
  };
115
153
  const name = pattern.name;
116
- const fields = processFields(pattern.fields, pattern.name);
154
+ const fields = await processFields(pattern.fields, pattern.name);
117
155
  processedSchema.fields.push(...fields);
118
156
  if (pattern.edges) {
119
157
  const edges = processEdges(pattern.edges, pattern.name);
@@ -122,6 +160,23 @@ function processPattern(patterns, pattern, processedSchema) {
122
160
  // flag transformsSelect
123
161
  if (pattern.transformRead) {
124
162
  ret.transformsSelect = true;
163
+ if (pattern.transformReadCodegen_BETA) {
164
+ const r = pattern.transformReadCodegen_BETA();
165
+ if (typeof r === "string") {
166
+ ret.transformsLoaderCodegen = {
167
+ code: r,
168
+ imports: [
169
+ {
170
+ importPath: const_1.PACKAGE,
171
+ import: "query",
172
+ },
173
+ ],
174
+ };
175
+ }
176
+ else {
177
+ ret.transformsLoaderCodegen = r;
178
+ }
179
+ }
125
180
  }
126
181
  if (patterns[name] === undefined) {
127
182
  // intentionally processing separately and not passing pattern.name
@@ -130,6 +185,7 @@ function processPattern(patterns, pattern, processedSchema) {
130
185
  name: pattern.name,
131
186
  assocEdges: edges,
132
187
  fields: fields,
188
+ disableMixin: pattern.disableMixin,
133
189
  };
134
190
  }
135
191
  else {
@@ -162,18 +218,29 @@ function processAction(action) {
162
218
  if (f.nullable === "contentsAndList") {
163
219
  f2.nullable = NullableResult.CONTENTS_AND_LIST;
164
220
  }
165
- else {
221
+ else if (f.nullable === "contents") {
166
222
  f2.nullable = NullableResult.CONTENTS;
167
223
  }
224
+ else if (f.nullable === "true") {
225
+ // shouldn't happen but ran into weirdness where it did...
226
+ f2.nullable = NullableResult.ITEM;
227
+ }
168
228
  }
169
229
  return f2;
170
230
  });
171
231
  ret.actionOnlyFields = actionOnlyFields;
172
232
  return ret;
173
233
  }
174
- function parseSchema(potentialSchemas) {
234
+ async function parseSchema(potentialSchemas, globalSchema) {
175
235
  let schemas = {};
176
236
  let patterns = {};
237
+ let parsedGlobalSchema;
238
+ if (globalSchema) {
239
+ parsedGlobalSchema = await parseGlobalSchema(globalSchema);
240
+ // set this so that we can use it, if we're trying to process server default or anything
241
+ // that ends up parsing,validating and formatting fields
242
+ (0, global_schema_1.setGlobalSchema)(globalSchema);
243
+ }
177
244
  for (const key in potentialSchemas) {
178
245
  const value = potentialSchemas[key];
179
246
  let schema;
@@ -189,6 +256,7 @@ function parseSchema(potentialSchemas) {
189
256
  }
190
257
  let processedSchema = {
191
258
  fields: [],
259
+ fieldOverrides: schema.fieldOverrides,
192
260
  schemaPath: schema.schemaPath,
193
261
  tableName: schema.tableName,
194
262
  enumTable: schema.enumTable,
@@ -202,14 +270,20 @@ function parseSchema(potentialSchemas) {
202
270
  };
203
271
  // let's put patterns first just so we have id, created_at, updated_at first
204
272
  // ¯\_(ツ)_/¯
273
+ let patternNames = [];
205
274
  if (schema.patterns) {
206
275
  for (const pattern of schema.patterns) {
207
- const ret = processPattern(patterns, pattern, processedSchema);
276
+ const ret = await processPattern(patterns, pattern, processedSchema);
277
+ patternNames.push(pattern.name);
208
278
  if (ret.transformsSelect) {
209
279
  if (processedSchema.transformsSelect) {
210
280
  throw new Error(`can only have one pattern which transforms default querying behavior`);
211
281
  }
212
282
  processedSchema.transformsSelect = true;
283
+ if (ret.transformsLoaderCodegen) {
284
+ processedSchema.transformsLoaderCodegen =
285
+ ret.transformsLoaderCodegen;
286
+ }
213
287
  }
214
288
  if (ret.transformsDelete) {
215
289
  if (processedSchema.transformsDelete) {
@@ -219,8 +293,9 @@ function parseSchema(potentialSchemas) {
219
293
  }
220
294
  }
221
295
  }
222
- const fields = processFields(schema.fields);
296
+ const fields = await processFields(schema.fields);
223
297
  processedSchema.fields.push(...fields);
298
+ processedSchema.patternNames = patternNames;
224
299
  if (schema.edges) {
225
300
  const edges = processEdges(schema.edges);
226
301
  processedSchema.assocEdges.push(...edges);
@@ -230,6 +305,71 @@ function parseSchema(potentialSchemas) {
230
305
  }
231
306
  schemas[key] = processedSchema;
232
307
  }
233
- return { schemas, patterns };
308
+ const rome = translatePrettier();
309
+ return {
310
+ schemas,
311
+ patterns,
312
+ globalSchema: parsedGlobalSchema,
313
+ config: {
314
+ rome,
315
+ },
316
+ };
234
317
  }
235
318
  exports.parseSchema = parseSchema;
319
+ function translatePrettier() {
320
+ const r = (0, cosmiconfig_1.cosmiconfigSync)("prettier").search();
321
+ if (!r) {
322
+ return;
323
+ }
324
+ const ret = {};
325
+ if (r.config.printWidth !== undefined) {
326
+ ret.lineWidth = parseInt(r.config.printWidth);
327
+ }
328
+ if (r.config.useTabs) {
329
+ ret.indentStyle = "tab";
330
+ }
331
+ else {
332
+ ret.indentStyle = "space";
333
+ }
334
+ if (r.config.tabWidth !== undefined) {
335
+ ret.indentSize = parseInt(r.config.tabWidth);
336
+ }
337
+ if (r.config.singleQuote) {
338
+ ret.quoteStyle = "single";
339
+ }
340
+ else {
341
+ ret.quoteStyle = "double";
342
+ }
343
+ if (r.config.quoteProps !== undefined) {
344
+ if (r.config.quoteProps === "consistent") {
345
+ // rome doesn't support this
346
+ ret.quoteProperties = "as-needed";
347
+ }
348
+ else {
349
+ ret.quoteProperties = r.config.quoteProps;
350
+ }
351
+ }
352
+ if (r.config.trailingComma !== undefined) {
353
+ ret.trailingComma = r.config.trailingComma;
354
+ }
355
+ return ret;
356
+ }
357
+ async function parseGlobalSchema(s) {
358
+ const ret = {
359
+ globalEdges: [],
360
+ extraEdgeFields: [],
361
+ initForEdges: !!s.extraEdgeFields ||
362
+ s.transformEdgeRead !== undefined ||
363
+ s.transformEdgeWrite !== undefined,
364
+ };
365
+ if (s.extraEdgeFields) {
366
+ ret.extraEdgeFields = await processFields(s.extraEdgeFields);
367
+ }
368
+ if (s.edges) {
369
+ ret.globalEdges = processEdges(s.edges);
370
+ }
371
+ if (s.fields) {
372
+ ret.globalFields = await processFields(s.fields);
373
+ }
374
+ return ret;
375
+ }
@@ -1,11 +1,12 @@
1
- import { Field, FieldMap, Pattern } from "./schema";
1
+ import { FieldMap, Pattern, FieldOverrideMap } from "./schema";
2
2
  import { Action, AssocEdgeGroup, Constraint, Edge, Index, Schema } from ".";
3
3
  export declare const Timestamps: Pattern;
4
4
  export declare const Node: Pattern;
5
5
  export interface SchemaConfig extends Schema {
6
6
  }
7
7
  export declare class EntSchema implements Schema {
8
- fields: FieldMap | Field[];
8
+ fields: FieldMap;
9
+ fieldOverrides: FieldOverrideMap | undefined;
9
10
  tableName: string | undefined;
10
11
  patterns: Pattern[];
11
12
  edges: Edge[] | undefined;
@@ -21,7 +22,8 @@ export declare class EntSchema implements Schema {
21
22
  constructor(cfg: SchemaConfig);
22
23
  }
23
24
  export declare class EntSchemaWithTZ implements Schema {
24
- fields: FieldMap | Field[];
25
+ fields: FieldMap;
26
+ fieldOverrides: FieldOverrideMap | undefined;
25
27
  tableName: string | undefined;
26
28
  patterns: Pattern[];
27
29
  edges: Edge[] | undefined;
@@ -17,6 +17,7 @@ let tsFields = {
17
17
  defaultValueOnCreate: () => {
18
18
  return new Date();
19
19
  },
20
+ onlyUpdateIfOtherFieldsBeingSet_BETA: true,
20
21
  defaultValueOnEdit: () => {
21
22
  return new Date();
22
23
  },
@@ -66,6 +67,7 @@ let nodeFieldsWithTZ = {
66
67
  exports.Node = {
67
68
  name: "node",
68
69
  fields: nodeFields,
70
+ disableMixin: true,
69
71
  };
70
72
  // Ent schema. has Node Pattern by default.
71
73
  // exists just to have less typing and easier for clients to implement
@@ -73,6 +75,7 @@ class EntSchema {
73
75
  constructor(cfg) {
74
76
  this.patterns = [exports.Node];
75
77
  this.fields = cfg.fields;
78
+ this.fieldOverrides = cfg.fieldOverrides;
76
79
  this.tableName = cfg.tableName;
77
80
  if (cfg.patterns) {
78
81
  this.patterns.push(...cfg.patterns);
@@ -95,9 +98,11 @@ class EntSchemaWithTZ {
95
98
  // default schema added
96
99
  name: "nodeWithTZ",
97
100
  fields: nodeFieldsWithTZ,
101
+ disableMixin: true,
98
102
  },
99
103
  ];
100
104
  this.fields = cfg.fields;
105
+ this.fieldOverrides = cfg.fieldOverrides;
101
106
  this.tableName = cfg.tableName;
102
107
  if (cfg.patterns) {
103
108
  this.patterns.push(...cfg.patterns);
@@ -131,6 +136,7 @@ class BaseEntSchemaWithTZ {
131
136
  // default schema added
132
137
  name: "nodeWithTZ",
133
138
  fields: nodeFieldsWithTZ,
139
+ disableMixin: true,
134
140
  },
135
141
  ];
136
142
  }
package/schema/field.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Builder } from "../action/action";
1
2
  import { Field, FieldMap, FieldOptions, ForeignKey, PolymorphicOptions, Type } from "./schema";
2
3
  export declare abstract class BaseField {
3
4
  name: string;
@@ -24,31 +25,36 @@ export declare class UUIDField extends BaseField implements Field {
24
25
  valid(val: any): Promise<boolean>;
25
26
  }
26
27
  export declare function UUIDType(options?: FieldOptions): UUIDField;
27
- export interface IntegerOptions extends FieldOptions {
28
- min?: number;
29
- max?: number;
28
+ export interface IntegerOptions extends NumberOptions<number> {
30
29
  }
31
- export declare class IntegerField extends BaseField implements Field {
30
+ export interface NumberOptions<T> extends FieldOptions {
31
+ min?: T;
32
+ max?: T;
33
+ }
34
+ export declare class NumberField<T> extends BaseField {
32
35
  type: Type;
33
36
  private validators;
34
37
  private options;
35
- constructor(options?: IntegerOptions);
36
- getOptions(): IntegerOptions;
38
+ constructor(options?: NumberOptions<T>);
39
+ getOptions(): NumberOptions<T>;
37
40
  private handleOptions;
38
- min(l: number): this;
39
- max(l: number): this;
41
+ min(l: T): this;
42
+ max(l: T): this;
40
43
  valid(val: any): boolean;
41
44
  validate(validator: (str: number) => boolean): this;
42
45
  }
46
+ export declare class IntegerField extends NumberField<number> implements Field {
47
+ type: Type;
48
+ }
43
49
  export declare function IntegerType(options?: IntegerOptions): IntegerField;
44
- export declare class BigIntegerField extends BaseField implements Field {
50
+ export declare class BigIntegerField extends NumberField<BigInt> implements Field {
45
51
  type: Type;
46
52
  }
47
- export declare function BigIntegerType(options: FieldOptions): BigIntegerField;
48
- export declare class FloatField extends BaseField implements Field {
53
+ export declare function BigIntegerType(options?: NumberOptions<BigInt>): BigIntegerField;
54
+ export declare class FloatField extends NumberField<number> implements Field {
49
55
  type: Type;
50
56
  }
51
- export declare function FloatType(options?: FieldOptions): FloatField;
57
+ export declare function FloatType(options?: NumberOptions<number>): FloatField;
52
58
  export declare class BooleanField extends BaseField implements Field {
53
59
  type: Type;
54
60
  }
@@ -88,6 +94,18 @@ export declare class StringField extends BaseField implements Field {
88
94
  trimLeft(): this;
89
95
  trimRight(): this;
90
96
  }
97
+ interface PolymorphicStringOptions extends StringOptions {
98
+ parentFieldToValidate: string;
99
+ types?: string[];
100
+ }
101
+ export declare class PolymorphicStringField extends StringField {
102
+ private opts;
103
+ private camelCaseVals;
104
+ constructor(opts: PolymorphicStringOptions);
105
+ validateWithFullData(val: any, b: Builder<any>): boolean;
106
+ valid(val: any): boolean;
107
+ format(val: any): any;
108
+ }
91
109
  export declare function StringType(options?: StringOptions): StringField;
92
110
  export interface TimestampOptions extends FieldOptions {
93
111
  withTimezone?: boolean;
@@ -118,31 +136,69 @@ export declare class DateField extends BaseField implements Field {
118
136
  format(val: any): any;
119
137
  }
120
138
  export declare function DateType(options?: FieldOptions): DateField;
121
- declare type EnumMap = {
139
+ declare type StringEnumMap = {
122
140
  [key: string]: string;
123
141
  };
142
+ /**
143
+ * @deprecated use StringEnumOptions
144
+ */
124
145
  export interface EnumOptions extends FieldOptions {
125
146
  values?: string[];
126
- map?: EnumMap;
147
+ map?: StringEnumMap;
127
148
  tsType?: string;
128
149
  graphQLType?: string;
129
150
  createEnumType?: boolean;
151
+ disableUnknownType?: boolean;
152
+ globalType?: string;
130
153
  }
154
+ /**
155
+ * @deprecated Use StringEnumField
156
+ */
131
157
  export declare class EnumField extends BaseField implements Field {
132
158
  type: Type;
133
159
  private values?;
134
160
  private map?;
135
- constructor(options: EnumOptions);
136
- convertForGQL(value: string): string;
137
- valid(val: any): boolean;
161
+ constructor(options: StringEnumOptions);
162
+ valid(val: any): Promise<boolean>;
163
+ format(val: any): any;
164
+ }
165
+ export declare class StringEnumField extends EnumField {
166
+ }
167
+ export interface PolymorphicStringEnumOptions extends EnumOptions {
168
+ parentFieldToValidate: string;
169
+ }
170
+ export interface StringEnumOptions extends EnumOptions {
171
+ }
172
+ export declare function EnumType(options: StringEnumOptions): EnumField;
173
+ declare type IntEnumMap = {
174
+ [key: string]: number;
175
+ };
176
+ export interface IntegerEnumOptions extends FieldOptions {
177
+ map?: IntEnumMap;
178
+ deprecated?: IntEnumMap;
179
+ tsType?: string;
180
+ graphQLType?: string;
181
+ disableUnknownType?: boolean;
182
+ globalType?: string;
183
+ }
184
+ export declare class IntegerEnumField extends BaseField implements Field {
185
+ type: Type;
186
+ private map;
187
+ constructor(options: IntegerEnumOptions);
188
+ valid(val: any): Promise<boolean>;
138
189
  format(val: any): any;
139
190
  }
140
- export declare function EnumType(options: EnumOptions): EnumField;
191
+ export declare function IntegerEnumType(options: IntegerEnumOptions): IntegerEnumField;
192
+ interface ListOptions extends FieldOptions {
193
+ disableJSONStringify?: boolean;
194
+ }
141
195
  export declare class ListField extends BaseField {
142
196
  private field;
197
+ private options?;
143
198
  type: Type;
144
199
  private validators;
145
- constructor(field: Field, options?: FieldOptions);
200
+ constructor(field: Field, options?: ListOptions | undefined);
201
+ __getElemField(): Field;
146
202
  validate(validator: (val: any[]) => boolean): this;
147
203
  valid(val: any): Promise<boolean>;
148
204
  private postgresVal;
@@ -153,7 +209,7 @@ export declare class ListField extends BaseField {
153
209
  range(start: any, stop: any): this;
154
210
  }
155
211
  export declare function StringListType(options?: StringOptions): ListField;
156
- export declare function IntListType(options: FieldOptions): ListField;
212
+ export declare function IntListType(options?: FieldOptions): ListField;
157
213
  export declare function IntegerListType(options?: FieldOptions): ListField;
158
214
  export declare function FloatListType(options?: FieldOptions): ListField;
159
215
  export declare function BigIntegerListType(options: FieldOptions): ListField;
@@ -163,6 +219,7 @@ export declare function TimestamptzListType(options?: TimestampOptions): ListFie
163
219
  export declare function TimeListType(options?: TimeOptions): ListField;
164
220
  export declare function TimetzListType(options: TimeOptions): ListField;
165
221
  export declare function DateListType(options?: FieldOptions): ListField;
166
- export declare function EnumListType(options: EnumOptions): ListField;
222
+ export declare function EnumListType(options: StringEnumOptions): ListField;
223
+ export declare function IntegerEnumListType(options: IntegerEnumOptions): ListField;
167
224
  export declare function UUIDListType(options?: FieldOptions): ListField;
168
225
  export {};