@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.
- package/action/action.d.ts +37 -31
- package/action/action.js +22 -7
- package/action/executor.d.ts +3 -3
- package/action/executor.js +8 -3
- package/action/experimental_action.d.ts +32 -22
- package/action/experimental_action.js +35 -9
- package/action/index.d.ts +2 -0
- package/action/index.js +7 -1
- package/action/orchestrator.d.ts +33 -14
- package/action/orchestrator.js +251 -54
- package/action/privacy.d.ts +2 -2
- package/action/relative_value.d.ts +47 -0
- package/action/relative_value.js +125 -0
- package/action/transaction.d.ts +10 -0
- package/action/transaction.js +23 -0
- package/auth/auth.d.ts +1 -1
- package/core/base.d.ts +60 -37
- package/core/base.js +7 -1
- package/core/clause.d.ts +84 -40
- package/core/clause.js +358 -64
- package/core/config.d.ts +12 -1
- package/core/config.js +7 -1
- package/core/const.d.ts +3 -0
- package/core/const.js +6 -0
- package/core/context.d.ts +6 -4
- package/core/context.js +20 -2
- package/core/convert.d.ts +1 -1
- package/core/date.js +1 -5
- package/core/db.d.ts +11 -8
- package/core/db.js +20 -8
- package/core/ent.d.ts +82 -30
- package/core/ent.js +632 -193
- package/core/global_schema.d.ts +7 -0
- package/core/global_schema.js +51 -0
- package/core/loaders/assoc_count_loader.d.ts +3 -2
- package/core/loaders/assoc_count_loader.js +10 -2
- package/core/loaders/assoc_edge_loader.d.ts +2 -2
- package/core/loaders/assoc_edge_loader.js +8 -11
- package/core/loaders/index.d.ts +1 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/index_loader.d.ts +3 -3
- package/core/loaders/loader.d.ts +2 -2
- package/core/loaders/loader.js +5 -5
- package/core/loaders/object_loader.d.ts +11 -10
- package/core/loaders/object_loader.js +70 -60
- package/core/loaders/query_loader.d.ts +7 -13
- package/core/loaders/query_loader.js +52 -11
- package/core/loaders/raw_count_loader.d.ts +2 -2
- package/core/loaders/raw_count_loader.js +5 -1
- package/core/logger.d.ts +1 -1
- package/core/logger.js +1 -0
- package/core/privacy.d.ts +25 -24
- package/core/privacy.js +21 -25
- package/core/query/assoc_query.d.ts +7 -6
- package/core/query/assoc_query.js +9 -1
- package/core/query/custom_clause_query.d.ts +27 -0
- package/core/query/custom_clause_query.js +84 -0
- package/core/query/custom_query.d.ts +20 -5
- package/core/query/custom_query.js +87 -12
- package/core/query/index.d.ts +1 -0
- package/core/query/index.js +3 -1
- package/core/query/query.d.ts +8 -4
- package/core/query/query.js +101 -53
- package/core/query/shared_assoc_test.d.ts +2 -1
- package/core/query/shared_assoc_test.js +35 -45
- package/core/query/shared_test.d.ts +8 -1
- package/core/query/shared_test.js +470 -236
- package/core/viewer.d.ts +3 -3
- package/core/viewer.js +1 -1
- package/graphql/graphql.d.ts +15 -7
- package/graphql/graphql.js +23 -7
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +3 -4
- package/graphql/query/connection_type.d.ts +9 -9
- package/graphql/query/edge_connection.d.ts +9 -9
- package/graphql/query/page_info.d.ts +1 -1
- package/graphql/query/shared_assoc_test.js +1 -1
- package/graphql/query/shared_edge_connection.js +1 -19
- package/graphql/scalars/orderby_direction.d.ts +2 -0
- package/graphql/scalars/orderby_direction.js +15 -0
- package/imports/index.d.ts +6 -1
- package/imports/index.js +19 -4
- package/index.d.ts +13 -5
- package/index.js +21 -7
- package/package.json +17 -16
- package/parse_schema/parse.d.ts +31 -9
- package/parse_schema/parse.js +152 -12
- package/schema/base_schema.d.ts +5 -3
- package/schema/base_schema.js +6 -0
- package/schema/field.d.ts +78 -21
- package/schema/field.js +219 -72
- package/schema/index.d.ts +2 -2
- package/schema/index.js +5 -1
- package/schema/json_field.d.ts +16 -4
- package/schema/json_field.js +32 -2
- package/schema/schema.d.ts +89 -20
- package/schema/schema.js +13 -14
- package/schema/struct_field.d.ts +15 -3
- package/schema/struct_field.js +71 -22
- package/schema/union_field.d.ts +1 -1
- package/scripts/custom_compiler.js +10 -6
- package/scripts/custom_graphql.js +124 -31
- package/scripts/migrate_v0.1.js +36 -0
- package/scripts/move_types.js +117 -0
- package/scripts/read_schema.js +20 -5
- package/testutils/action/complex_schemas.d.ts +69 -0
- package/testutils/action/complex_schemas.js +398 -0
- package/testutils/builder.d.ts +43 -47
- package/testutils/builder.js +76 -49
- package/testutils/db/fixture.d.ts +10 -0
- package/testutils/db/fixture.js +26 -0
- package/testutils/db/{test_db.d.ts → temp_db.d.ts} +24 -8
- package/testutils/db/{test_db.js → temp_db.js} +182 -45
- package/testutils/db/value.d.ts +7 -0
- package/testutils/db/value.js +251 -0
- package/testutils/db_mock.d.ts +16 -4
- package/testutils/db_mock.js +51 -6
- package/testutils/db_time_zone.d.ts +4 -0
- package/testutils/db_time_zone.js +41 -0
- package/testutils/ent-graphql-tests/index.d.ts +7 -1
- package/testutils/ent-graphql-tests/index.js +52 -23
- package/testutils/fake_data/const.d.ts +2 -1
- package/testutils/fake_data/const.js +3 -0
- package/testutils/fake_data/fake_contact.d.ts +8 -4
- package/testutils/fake_data/fake_contact.js +15 -8
- package/testutils/fake_data/fake_event.d.ts +5 -2
- package/testutils/fake_data/fake_event.js +9 -7
- package/testutils/fake_data/fake_tag.d.ts +36 -0
- package/testutils/fake_data/fake_tag.js +89 -0
- package/testutils/fake_data/fake_user.d.ts +10 -7
- package/testutils/fake_data/fake_user.js +18 -16
- package/testutils/fake_data/index.js +5 -1
- package/testutils/fake_data/internal.d.ts +2 -0
- package/testutils/fake_data/internal.js +7 -1
- package/testutils/fake_data/tag_query.d.ts +13 -0
- package/testutils/fake_data/tag_query.js +43 -0
- package/testutils/fake_data/test_helpers.d.ts +11 -4
- package/testutils/fake_data/test_helpers.js +28 -12
- package/testutils/fake_data/user_query.d.ts +13 -6
- package/testutils/fake_data/user_query.js +54 -22
- package/testutils/fake_log.d.ts +3 -3
- package/testutils/parse_sql.d.ts +6 -0
- package/testutils/parse_sql.js +16 -2
- package/testutils/test_edge_global_schema.d.ts +15 -0
- package/testutils/test_edge_global_schema.js +62 -0
- package/testutils/write.d.ts +2 -2
- package/testutils/write.js +33 -7
- package/tsc/ast.d.ts +25 -2
- package/tsc/ast.js +141 -17
- package/tsc/compilerOptions.js +5 -1
- package/tsc/move_generated.d.ts +1 -0
- package/tsc/move_generated.js +164 -0
- package/tsc/transform.d.ts +22 -0
- package/tsc/transform.js +181 -0
- package/tsc/transform_action.d.ts +22 -0
- package/tsc/transform_action.js +183 -0
- package/tsc/transform_ent.d.ts +17 -0
- package/tsc/transform_ent.js +60 -0
- package/tsc/transform_schema.d.ts +27 -0
- package/{scripts → tsc}/transform_schema.js +146 -117
- package/graphql/enums.d.ts +0 -3
- package/graphql/enums.js +0 -25
- package/scripts/move_generated.js +0 -142
- package/scripts/transform_code.js +0 -113
- package/scripts/transform_schema.d.ts +0 -1
- /package/scripts/{move_generated.d.ts → migrate_v0.1.d.ts} +0 -0
- /package/scripts/{transform_code.d.ts → move_types.d.ts} +0 -0
package/parse_schema/parse.d.ts
CHANGED
|
@@ -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
|
-
|
|
8
|
+
type ProcessedActionField = Omit<ActionField, "nullable"> & {
|
|
9
9
|
nullable?: NullableResult;
|
|
10
10
|
};
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
30
|
+
type ProcessedAssocEdgeGroup = Omit<AssocEdgeGroup, "edgeAction"> & {
|
|
29
31
|
edgeAction?: OutputAction;
|
|
30
32
|
};
|
|
31
|
-
|
|
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
|
-
|
|
45
|
+
type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> & {
|
|
43
46
|
subFields?: ProcessedField[];
|
|
44
47
|
listElemType?: ProcessedType;
|
|
45
48
|
unionFields?: ProcessedField[];
|
|
46
49
|
};
|
|
47
|
-
|
|
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 {};
|
package/parse_schema/parse.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseSchema = void 0;
|
|
4
|
-
|
|
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
|
-
|
|
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
|
+
}
|
package/schema/base_schema.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
25
|
+
fields: FieldMap;
|
|
26
|
+
fieldOverrides: FieldOverrideMap | undefined;
|
|
25
27
|
tableName: string | undefined;
|
|
26
28
|
patterns: Pattern[];
|
|
27
29
|
edges: Edge[] | undefined;
|
package/schema/base_schema.js
CHANGED
|
@@ -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
|
|
28
|
-
min?: number;
|
|
29
|
-
max?: number;
|
|
28
|
+
export interface IntegerOptions extends NumberOptions<number> {
|
|
30
29
|
}
|
|
31
|
-
export
|
|
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?:
|
|
36
|
-
getOptions():
|
|
38
|
+
constructor(options?: NumberOptions<T>);
|
|
39
|
+
getOptions(): NumberOptions<T>;
|
|
37
40
|
private handleOptions;
|
|
38
|
-
min(l:
|
|
39
|
-
max(l:
|
|
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
|
|
50
|
+
export declare class BigIntegerField extends NumberField<BigInt> implements Field {
|
|
45
51
|
type: Type;
|
|
46
52
|
}
|
|
47
|
-
export declare function BigIntegerType(options
|
|
48
|
-
export declare class FloatField extends
|
|
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?:
|
|
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
|
|
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?:
|
|
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:
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
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?:
|
|
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
|
|
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:
|
|
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 {};
|