@snowtop/ent 0.1.0-alpha1 → 0.1.0-alpha100
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 +38 -30
- package/action/action.js +22 -7
- package/action/executor.d.ts +4 -4
- 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 +48 -16
- package/action/orchestrator.js +343 -81
- 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 +54 -27
- package/core/base.js +23 -1
- package/core/clause.d.ts +105 -3
- package/core/clause.js +563 -30
- package/core/config.d.ts +30 -1
- package/core/config.js +24 -1
- package/core/context.d.ts +5 -3
- package/core/context.js +20 -2
- package/core/convert.d.ts +1 -1
- package/core/date.js +1 -5
- package/core/db.d.ts +14 -11
- package/core/db.js +22 -8
- package/core/ent.d.ts +82 -28
- package/core/ent.js +692 -202
- 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 +3 -3
- package/core/loaders/assoc_edge_loader.js +13 -15
- package/core/loaders/index.d.ts +1 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/index_loader.d.ts +2 -2
- package/core/loaders/index_loader.js +1 -0
- package/core/loaders/loader.js +5 -5
- package/core/loaders/object_loader.d.ts +13 -7
- package/core/loaders/object_loader.js +95 -32
- package/core/loaders/query_loader.d.ts +6 -12
- 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 +26 -25
- package/core/privacy.js +23 -24
- 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 +26 -0
- package/core/query/custom_clause_query.js +78 -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 +469 -236
- package/core/viewer.d.ts +4 -3
- package/core/viewer.js +5 -1
- package/graphql/builtins/connection.js +3 -3
- package/graphql/builtins/edge.js +2 -2
- package/graphql/builtins/node.js +1 -1
- package/graphql/graphql.d.ts +17 -9
- package/graphql/graphql.js +47 -30
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +3 -4
- package/graphql/mutations/union.d.ts +2 -0
- package/graphql/mutations/union.js +35 -0
- package/graphql/node_resolver.d.ts +0 -1
- package/graphql/query/connection_type.d.ts +9 -9
- package/graphql/query/connection_type.js +6 -6
- package/graphql/query/edge_connection.d.ts +9 -9
- package/graphql/query/page_info.d.ts +1 -1
- package/graphql/query/page_info.js +4 -4
- package/graphql/query/shared_assoc_test.js +3 -3
- package/graphql/query/shared_edge_connection.js +1 -19
- package/graphql/scalars/time.d.ts +1 -1
- package/imports/index.d.ts +6 -1
- package/imports/index.js +19 -4
- package/index.d.ts +23 -1
- package/index.js +32 -6
- package/package.json +18 -17
- package/parse_schema/parse.d.ts +45 -8
- package/parse_schema/parse.js +193 -15
- package/schema/base_schema.d.ts +38 -1
- package/schema/base_schema.js +53 -2
- package/schema/field.d.ts +75 -21
- package/schema/field.js +185 -72
- package/schema/index.d.ts +4 -2
- package/schema/index.js +15 -2
- package/schema/json_field.d.ts +13 -1
- package/schema/json_field.js +28 -1
- package/schema/schema.d.ts +125 -10
- package/schema/schema.js +133 -5
- package/schema/struct_field.d.ts +27 -0
- package/schema/struct_field.js +138 -0
- package/schema/union_field.d.ts +23 -0
- package/schema/union_field.js +79 -0
- package/scripts/custom_compiler.js +10 -6
- package/scripts/custom_graphql.js +224 -36
- package/scripts/{transform_schema.d.ts → migrate_v0.1.d.ts} +0 -0
- package/scripts/migrate_v0.1.js +36 -0
- package/scripts/move_types.d.ts +1 -0
- package/scripts/move_types.js +117 -0
- package/scripts/read_schema.js +35 -6
- package/testutils/action/complex_schemas.d.ts +69 -0
- package/testutils/action/complex_schemas.js +398 -0
- package/testutils/builder.d.ts +52 -49
- package/testutils/builder.js +143 -44
- package/testutils/context/test_context.d.ts +2 -2
- package/testutils/context/test_context.js +7 -1
- 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} +26 -9
- package/testutils/db/{test_db.js → temp_db.js} +190 -46
- 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 +9 -1
- package/testutils/ent-graphql-tests/index.js +53 -25
- 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 +10 -10
- package/testutils/fake_data/fake_contact.js +23 -21
- package/testutils/fake_data/fake_event.d.ts +8 -9
- package/testutils/fake_data/fake_event.js +25 -28
- 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 -11
- package/testutils/fake_data/fake_user.js +20 -23
- 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 +29 -13
- 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 +44 -0
- package/tsc/ast.js +277 -0
- package/tsc/compilerOptions.d.ts +6 -0
- package/tsc/compilerOptions.js +45 -2
- 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 +59 -0
- package/tsc/transform_schema.d.ts +27 -0
- package/tsc/transform_schema.js +383 -0
- package/graphql/enums.d.ts +0 -3
- package/graphql/enums.js +0 -25
- package/scripts/transform_schema.js +0 -288
package/testutils/builder.d.ts
CHANGED
|
@@ -1,79 +1,81 @@
|
|
|
1
|
-
import { Ent, ID, Viewer, Data, EntConstructor } from "../core/base";
|
|
1
|
+
import { Ent, ID, Viewer, Data, EntConstructor, PrivacyPolicy } from "../core/base";
|
|
2
2
|
import { Orchestrator } from "../action/orchestrator";
|
|
3
3
|
import { Action, Builder, Changeset, WriteOperation, Validator, Trigger, Observer } from "../action";
|
|
4
|
-
import { Schema } from "../schema";
|
|
5
|
-
|
|
4
|
+
import { FieldMap, Schema } from "../schema";
|
|
5
|
+
import { SchemaConfig, EntSchema } from "../schema/base_schema";
|
|
6
|
+
import { FieldInfoMap } from "../schema/schema";
|
|
7
|
+
import { Clause } from "src/core/clause";
|
|
8
|
+
export declare class BaseEnt {
|
|
9
|
+
viewer: Viewer;
|
|
10
|
+
readonly data: Data;
|
|
11
|
+
readonly id: ID;
|
|
12
|
+
constructor(viewer: Viewer, data: Data);
|
|
13
|
+
getKey(): string;
|
|
14
|
+
getPrivacyPolicy(): PrivacyPolicy;
|
|
15
|
+
__setRawDBData(data: Data): void;
|
|
16
|
+
}
|
|
17
|
+
export declare class User extends BaseEnt implements Ent {
|
|
6
18
|
viewer: Viewer;
|
|
7
19
|
data: Data;
|
|
8
|
-
id: ID;
|
|
9
20
|
accountID: string;
|
|
10
21
|
nodeType: string;
|
|
11
|
-
privacyPolicy: import("../core/base").PrivacyPolicy<Ent>;
|
|
12
22
|
firstName: string;
|
|
13
23
|
constructor(viewer: Viewer, data: Data);
|
|
14
24
|
}
|
|
15
|
-
export declare class Event implements Ent {
|
|
16
|
-
viewer: Viewer;
|
|
17
|
-
data: Data;
|
|
18
|
-
id: ID;
|
|
25
|
+
export declare class Event extends BaseEnt implements Ent {
|
|
19
26
|
accountID: string;
|
|
20
27
|
nodeType: string;
|
|
21
|
-
privacyPolicy: import("../core/base").PrivacyPolicy<Ent>;
|
|
22
|
-
constructor(viewer: Viewer, data: Data);
|
|
23
28
|
}
|
|
24
|
-
export declare class Contact implements Ent {
|
|
25
|
-
viewer: Viewer;
|
|
26
|
-
data: Data;
|
|
27
|
-
id: ID;
|
|
29
|
+
export declare class Contact extends BaseEnt implements Ent {
|
|
28
30
|
accountID: string;
|
|
29
31
|
nodeType: string;
|
|
30
|
-
|
|
31
|
-
constructor(viewer: Viewer, data: Data);
|
|
32
|
+
getPrivacyPolicy(): PrivacyPolicy<this>;
|
|
32
33
|
}
|
|
33
|
-
export declare class Group implements Ent {
|
|
34
|
-
viewer: Viewer;
|
|
35
|
-
data: Data;
|
|
36
|
-
id: ID;
|
|
34
|
+
export declare class Group extends BaseEnt implements Ent {
|
|
37
35
|
accountID: string;
|
|
38
36
|
nodeType: string;
|
|
39
|
-
|
|
40
|
-
constructor(viewer: Viewer, data: Data);
|
|
37
|
+
getPrivacyPolicy(): PrivacyPolicy<this>;
|
|
41
38
|
}
|
|
42
|
-
export declare class Message implements Ent {
|
|
43
|
-
viewer: Viewer;
|
|
44
|
-
data: Data;
|
|
45
|
-
id: ID;
|
|
39
|
+
export declare class Message extends BaseEnt implements Ent {
|
|
46
40
|
accountID: string;
|
|
47
41
|
nodeType: string;
|
|
48
|
-
privacyPolicy: import("../core/base").PrivacyPolicy<Ent>;
|
|
49
|
-
constructor(viewer: Viewer, data: Data);
|
|
50
42
|
}
|
|
51
|
-
export declare class Address implements Ent {
|
|
52
|
-
viewer: Viewer;
|
|
53
|
-
data: Data;
|
|
54
|
-
id: ID;
|
|
43
|
+
export declare class Address extends BaseEnt implements Ent {
|
|
55
44
|
accountID: string;
|
|
56
45
|
nodeType: string;
|
|
57
|
-
privacyPolicy: import("../core/base").PrivacyPolicy<Ent>;
|
|
58
|
-
constructor(viewer: Viewer, data: Data);
|
|
59
46
|
}
|
|
60
47
|
export interface BuilderSchema<T extends Ent> extends Schema {
|
|
61
48
|
ent: EntConstructor<T>;
|
|
62
49
|
}
|
|
50
|
+
export declare class EntBuilderSchema<T extends Ent> extends EntSchema {
|
|
51
|
+
ent: EntConstructor<T>;
|
|
52
|
+
constructor(ent: EntConstructor<T>, cfg: SchemaConfig);
|
|
53
|
+
}
|
|
54
|
+
export declare function getBuilderSchema<T extends Ent>(cfg: SchemaConfig, ent: EntConstructor<T>): BuilderSchema<T>;
|
|
55
|
+
export declare function getBuilderSchemaFromFields<T extends Ent>(fields: FieldMap, ent: EntConstructor<T>, opts?: Partial<Exclude<SchemaConfig, "fields">>): BuilderSchema<T>;
|
|
56
|
+
export declare function getBuilderSchemaTZFromFields<T extends Ent>(fields: FieldMap, ent: EntConstructor<T>): BuilderSchema<T>;
|
|
63
57
|
export declare function getSchemaName(value: BuilderSchema<Ent>): string;
|
|
64
58
|
export declare function getTableName(value: BuilderSchema<Ent>): string;
|
|
65
|
-
export declare
|
|
59
|
+
export declare function getFieldInfo(value: BuilderSchema<Ent>): FieldInfoMap;
|
|
60
|
+
type MaybeNull<T extends Ent> = T | null;
|
|
61
|
+
type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
|
|
62
|
+
export declare class SimpleBuilder<T extends Ent, TExistingEnt extends TMaybleNullableEnt<T> = MaybeNull<T>> implements Builder<T, Viewer, TExistingEnt> {
|
|
66
63
|
viewer: Viewer;
|
|
67
64
|
private schema;
|
|
68
65
|
operation: WriteOperation;
|
|
69
|
-
existingEnt:
|
|
70
|
-
ent: EntConstructor<T>;
|
|
66
|
+
existingEnt: TExistingEnt;
|
|
67
|
+
ent: EntConstructor<T, Viewer>;
|
|
71
68
|
placeholderID: ID;
|
|
72
|
-
orchestrator: Orchestrator<T, Data>;
|
|
69
|
+
orchestrator: Orchestrator<T, Data, Viewer, TExistingEnt>;
|
|
73
70
|
fields: Map<string, any>;
|
|
74
71
|
nodeType: string;
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
m: Map<string, any>;
|
|
73
|
+
constructor(viewer: Viewer, schema: BuilderSchema<T>, fields: Map<string, any>, operation: WriteOperation, existingEnt: TExistingEnt, action?: Action<T, SimpleBuilder<T, TExistingEnt>, Viewer, Data, TExistingEnt> | undefined, expressions?: Map<string, Clause>);
|
|
74
|
+
getInput(): Data;
|
|
75
|
+
updateInput(input: Data): void;
|
|
76
|
+
storeData(k: string, v: any): void;
|
|
77
|
+
getStoredData(k: string): any;
|
|
78
|
+
build(): Promise<Changeset>;
|
|
77
79
|
editedEnt(): Promise<T | null>;
|
|
78
80
|
editedEntX(): Promise<T>;
|
|
79
81
|
save(): Promise<void>;
|
|
@@ -84,20 +86,21 @@ export declare class SimpleBuilder<T extends Ent> implements Builder<T> {
|
|
|
84
86
|
interface viewerEntLoadFunc {
|
|
85
87
|
(data: Data): Viewer | Promise<Viewer>;
|
|
86
88
|
}
|
|
87
|
-
export declare class SimpleAction<T extends Ent> implements Action<T, SimpleBuilder<T>, Data> {
|
|
89
|
+
export declare class SimpleAction<T extends Ent, TExistingEnt extends TMaybleNullableEnt<T> = MaybeNull<T>> implements Action<T, SimpleBuilder<T, TExistingEnt>, Viewer, Data, TExistingEnt> {
|
|
88
90
|
viewer: Viewer;
|
|
89
91
|
private fields;
|
|
90
|
-
builder: SimpleBuilder<T>;
|
|
91
|
-
validators: Validator<SimpleBuilder<T>, Data>[];
|
|
92
|
-
triggers: Trigger<SimpleBuilder<T>, Data>[];
|
|
93
|
-
observers: Observer<SimpleBuilder<T>, Data>[];
|
|
92
|
+
builder: SimpleBuilder<T, TExistingEnt>;
|
|
94
93
|
viewerForEntLoad: viewerEntLoadFunc | undefined;
|
|
95
|
-
constructor(viewer: Viewer, schema: BuilderSchema<T>, fields: Map<string, any>, operation
|
|
96
|
-
|
|
94
|
+
constructor(viewer: Viewer, schema: BuilderSchema<T>, fields: Map<string, any>, operation: WriteOperation | undefined, existingEnt: TExistingEnt, expressions?: Map<string, Clause>);
|
|
95
|
+
getTriggers(): (Trigger<T, SimpleBuilder<T>> | Array<Trigger<T, SimpleBuilder<T>>>)[];
|
|
96
|
+
getValidators(): Validator<T, SimpleBuilder<T>>[];
|
|
97
|
+
getObservers(): Observer<T, SimpleBuilder<T>>[];
|
|
98
|
+
getPrivacyPolicy(): PrivacyPolicy<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>>;
|
|
97
99
|
getInput(): Data;
|
|
98
|
-
changeset(): Promise<Changeset
|
|
100
|
+
changeset(): Promise<Changeset>;
|
|
99
101
|
valid(): Promise<boolean>;
|
|
100
102
|
validX(): Promise<void>;
|
|
103
|
+
validWithErrors(): Promise<Error[]>;
|
|
101
104
|
save(): Promise<T | null>;
|
|
102
105
|
saveX(): Promise<T>;
|
|
103
106
|
editedEnt(): Promise<T | null>;
|
package/testutils/builder.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SimpleAction = exports.SimpleBuilder = exports.getTableName = exports.getSchemaName = exports.Address = exports.Message = exports.Group = exports.Contact = exports.Event = exports.User = void 0;
|
|
6
|
+
exports.SimpleAction = exports.SimpleBuilder = exports.getFieldInfo = exports.getTableName = exports.getSchemaName = exports.getBuilderSchemaTZFromFields = exports.getBuilderSchemaFromFields = exports.getBuilderSchema = exports.EntBuilderSchema = exports.Address = exports.Message = exports.Group = exports.Contact = exports.Event = exports.User = exports.BaseEnt = void 0;
|
|
7
7
|
const privacy_1 = require("../core/privacy");
|
|
8
8
|
const orchestrator_1 = require("../action/orchestrator");
|
|
9
9
|
const action_1 = require("../action");
|
|
@@ -14,77 +14,112 @@ const snake_case_1 = require("snake-case");
|
|
|
14
14
|
const loaders_1 = require("../core/loaders");
|
|
15
15
|
const convert_1 = require("../core/convert");
|
|
16
16
|
const camel_case_1 = require("camel-case");
|
|
17
|
-
|
|
17
|
+
const base_schema_1 = require("../schema/base_schema");
|
|
18
|
+
const schema_2 = require("../schema/schema");
|
|
19
|
+
class BaseEnt {
|
|
18
20
|
constructor(viewer, data) {
|
|
19
21
|
this.viewer = viewer;
|
|
20
22
|
this.data = data;
|
|
21
|
-
this.accountID = "";
|
|
22
|
-
this.nodeType = "User";
|
|
23
|
-
this.privacyPolicy = privacy_1.AlwaysAllowPrivacyPolicy;
|
|
24
23
|
this.data.created_at = (0, convert_1.convertDate)(data.created_at);
|
|
25
24
|
this.data.updated_at = (0, convert_1.convertDate)(data.updated_at);
|
|
26
|
-
this.id = data.
|
|
27
|
-
|
|
25
|
+
this.id = data[this.getKey()];
|
|
26
|
+
}
|
|
27
|
+
getKey() {
|
|
28
|
+
return "id";
|
|
29
|
+
}
|
|
30
|
+
getPrivacyPolicy() {
|
|
31
|
+
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
32
|
+
}
|
|
33
|
+
__setRawDBData(data) {
|
|
34
|
+
// doesn't apply here so ignore...
|
|
28
35
|
}
|
|
29
36
|
}
|
|
30
|
-
exports.
|
|
31
|
-
class
|
|
37
|
+
exports.BaseEnt = BaseEnt;
|
|
38
|
+
class User extends BaseEnt {
|
|
32
39
|
constructor(viewer, data) {
|
|
40
|
+
super(viewer, data);
|
|
33
41
|
this.viewer = viewer;
|
|
34
42
|
this.data = data;
|
|
35
43
|
this.accountID = "";
|
|
44
|
+
this.nodeType = "User";
|
|
45
|
+
this.firstName = data.first_name;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.User = User;
|
|
49
|
+
class Event extends BaseEnt {
|
|
50
|
+
constructor() {
|
|
51
|
+
super(...arguments);
|
|
52
|
+
this.accountID = "";
|
|
36
53
|
this.nodeType = "Event";
|
|
37
|
-
this.privacyPolicy = privacy_1.AlwaysAllowPrivacyPolicy;
|
|
38
|
-
this.id = data.id;
|
|
39
54
|
}
|
|
40
55
|
}
|
|
41
56
|
exports.Event = Event;
|
|
42
|
-
class Contact {
|
|
43
|
-
constructor(
|
|
44
|
-
|
|
45
|
-
this.data = data;
|
|
57
|
+
class Contact extends BaseEnt {
|
|
58
|
+
constructor() {
|
|
59
|
+
super(...arguments);
|
|
46
60
|
this.accountID = "";
|
|
47
61
|
this.nodeType = "Contact";
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.id = data.id;
|
|
62
|
+
}
|
|
63
|
+
getPrivacyPolicy() {
|
|
64
|
+
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
52
65
|
}
|
|
53
66
|
}
|
|
54
67
|
exports.Contact = Contact;
|
|
55
|
-
class Group {
|
|
56
|
-
constructor(
|
|
57
|
-
|
|
58
|
-
this.data = data;
|
|
68
|
+
class Group extends BaseEnt {
|
|
69
|
+
constructor() {
|
|
70
|
+
super(...arguments);
|
|
59
71
|
this.accountID = "";
|
|
60
72
|
this.nodeType = "Group";
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
}
|
|
74
|
+
getPrivacyPolicy() {
|
|
75
|
+
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
63
76
|
}
|
|
64
77
|
}
|
|
65
78
|
exports.Group = Group;
|
|
66
|
-
class Message {
|
|
67
|
-
constructor(
|
|
68
|
-
|
|
69
|
-
this.data = data;
|
|
79
|
+
class Message extends BaseEnt {
|
|
80
|
+
constructor() {
|
|
81
|
+
super(...arguments);
|
|
70
82
|
this.accountID = "";
|
|
71
83
|
this.nodeType = "Message";
|
|
72
|
-
this.privacyPolicy = privacy_1.AlwaysAllowPrivacyPolicy;
|
|
73
|
-
this.id = data.id;
|
|
74
84
|
}
|
|
75
85
|
}
|
|
76
86
|
exports.Message = Message;
|
|
77
|
-
class Address {
|
|
78
|
-
constructor(
|
|
79
|
-
|
|
80
|
-
this.data = data;
|
|
87
|
+
class Address extends BaseEnt {
|
|
88
|
+
constructor() {
|
|
89
|
+
super(...arguments);
|
|
81
90
|
this.accountID = "";
|
|
82
91
|
this.nodeType = "Address";
|
|
83
|
-
this.privacyPolicy = privacy_1.AlwaysAllowPrivacyPolicy;
|
|
84
|
-
this.id = data.id;
|
|
85
92
|
}
|
|
86
93
|
}
|
|
87
94
|
exports.Address = Address;
|
|
95
|
+
class EntBuilderSchema extends base_schema_1.EntSchema {
|
|
96
|
+
constructor(ent, cfg) {
|
|
97
|
+
super(cfg);
|
|
98
|
+
this.ent = ent;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.EntBuilderSchema = EntBuilderSchema;
|
|
102
|
+
function getBuilderSchema(cfg, ent) {
|
|
103
|
+
return {
|
|
104
|
+
...new base_schema_1.EntSchema(cfg),
|
|
105
|
+
ent,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
exports.getBuilderSchema = getBuilderSchema;
|
|
109
|
+
function getBuilderSchemaFromFields(fields, ent, opts) {
|
|
110
|
+
return {
|
|
111
|
+
...new base_schema_1.EntSchema({ ...opts, fields }),
|
|
112
|
+
ent,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
exports.getBuilderSchemaFromFields = getBuilderSchemaFromFields;
|
|
116
|
+
function getBuilderSchemaTZFromFields(fields, ent) {
|
|
117
|
+
return {
|
|
118
|
+
...new base_schema_1.EntSchemaWithTZ({ fields }),
|
|
119
|
+
ent,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
exports.getBuilderSchemaTZFromFields = getBuilderSchemaTZFromFields;
|
|
88
123
|
function getSchemaName(value) {
|
|
89
124
|
return value.ent.name;
|
|
90
125
|
}
|
|
@@ -96,13 +131,27 @@ exports.getTableName = getTableName;
|
|
|
96
131
|
function randomNum() {
|
|
97
132
|
return Math.random().toString(10).substring(2);
|
|
98
133
|
}
|
|
134
|
+
function getFieldInfo(value) {
|
|
135
|
+
const fields = (0, schema_1.getFields)(value);
|
|
136
|
+
let ret = {};
|
|
137
|
+
for (const [k, f] of fields) {
|
|
138
|
+
ret[k] = {
|
|
139
|
+
dbCol: (0, schema_2.getStorageKey)(f, k),
|
|
140
|
+
// in tests (anything using SimpleBuilder), make it be the same as the fieldName
|
|
141
|
+
inputKey: k,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return ret;
|
|
145
|
+
}
|
|
146
|
+
exports.getFieldInfo = getFieldInfo;
|
|
99
147
|
// reuses orchestrator and standard things
|
|
100
148
|
class SimpleBuilder {
|
|
101
|
-
constructor(viewer, schema, fields, operation = action_1.WriteOperation.Insert, existingEnt
|
|
149
|
+
constructor(viewer, schema, fields, operation = action_1.WriteOperation.Insert, existingEnt, action, expressions) {
|
|
102
150
|
this.viewer = viewer;
|
|
103
151
|
this.schema = schema;
|
|
104
152
|
this.operation = operation;
|
|
105
153
|
this.existingEnt = existingEnt;
|
|
154
|
+
this.m = new Map();
|
|
106
155
|
// create dynamic placeholder
|
|
107
156
|
// TODO: do we need to use this as the node when there's an existingEnt
|
|
108
157
|
// same for generated builders.
|
|
@@ -128,11 +177,13 @@ class SimpleBuilder {
|
|
|
128
177
|
this.ent = schema.ent;
|
|
129
178
|
const tableName = getTableName(schema);
|
|
130
179
|
this.nodeType = (0, camel_case_1.camelCase)(schema.ent.name);
|
|
180
|
+
const fieldInfo = getFieldInfo(schema);
|
|
131
181
|
this.orchestrator = new orchestrator_1.Orchestrator({
|
|
132
182
|
viewer: this.viewer,
|
|
133
183
|
operation: operation,
|
|
134
184
|
tableName: tableName,
|
|
135
185
|
key,
|
|
186
|
+
fieldInfo,
|
|
136
187
|
loaderOptions: {
|
|
137
188
|
loaderFactory: new loaders_1.ObjectLoaderFactory({
|
|
138
189
|
tableName: tableName,
|
|
@@ -142,15 +193,54 @@ class SimpleBuilder {
|
|
|
142
193
|
ent: schema.ent,
|
|
143
194
|
tableName: tableName,
|
|
144
195
|
fields: [],
|
|
196
|
+
fieldPrivacy: (0, schema_1.getFieldsWithPrivacy)(schema, fieldInfo),
|
|
145
197
|
},
|
|
146
198
|
builder: this,
|
|
147
199
|
action: action,
|
|
200
|
+
expressions,
|
|
148
201
|
schema: this.schema,
|
|
149
202
|
editedFields: () => {
|
|
150
|
-
return
|
|
203
|
+
// to simulate what we do in generated builders where we return a new Map
|
|
204
|
+
const m = new Map();
|
|
205
|
+
for (const [k, v] of this.fields) {
|
|
206
|
+
m.set(k, v);
|
|
207
|
+
}
|
|
208
|
+
return m;
|
|
151
209
|
},
|
|
210
|
+
updateInput: this.updateInput.bind(this),
|
|
152
211
|
});
|
|
153
212
|
}
|
|
213
|
+
getInput() {
|
|
214
|
+
let ret = {};
|
|
215
|
+
for (const [k, v] of this.fields) {
|
|
216
|
+
ret[k] = v;
|
|
217
|
+
}
|
|
218
|
+
return ret;
|
|
219
|
+
}
|
|
220
|
+
updateInput(input) {
|
|
221
|
+
const knownFields = (0, schema_1.getFields)(this.schema);
|
|
222
|
+
for (const k in input) {
|
|
223
|
+
if (knownFields.has(k)) {
|
|
224
|
+
this.fields.set(k, input[k]);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// related to #510. we do camelCase to pass fields in here but fields may be snakeCase and we want that to pass in tests
|
|
228
|
+
// we do camelCase in
|
|
229
|
+
const sc = (0, snake_case_1.snakeCase)(k);
|
|
230
|
+
if (knownFields.has(sc)) {
|
|
231
|
+
this.fields.set(sc, input[k]);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// store data in Builder that can be retrieved by another validator, trigger, observer later in the action
|
|
237
|
+
storeData(k, v) {
|
|
238
|
+
this.m.set(k, v);
|
|
239
|
+
}
|
|
240
|
+
// retrieve data stored in this Builder with key
|
|
241
|
+
getStoredData(k) {
|
|
242
|
+
return this.m.get(k);
|
|
243
|
+
}
|
|
154
244
|
build() {
|
|
155
245
|
return this.orchestrator.build();
|
|
156
246
|
}
|
|
@@ -175,13 +265,19 @@ class SimpleBuilder {
|
|
|
175
265
|
}
|
|
176
266
|
exports.SimpleBuilder = SimpleBuilder;
|
|
177
267
|
class SimpleAction {
|
|
178
|
-
constructor(viewer, schema, fields, operation = action_1.WriteOperation.Insert, existingEnt
|
|
268
|
+
constructor(viewer, schema, fields, operation = action_1.WriteOperation.Insert, existingEnt, expressions) {
|
|
179
269
|
this.viewer = viewer;
|
|
180
270
|
this.fields = fields;
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
271
|
+
this.builder = new SimpleBuilder(this.viewer, schema, fields, operation, existingEnt, this, expressions);
|
|
272
|
+
}
|
|
273
|
+
getTriggers() {
|
|
274
|
+
return [];
|
|
275
|
+
}
|
|
276
|
+
getValidators() {
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
getObservers() {
|
|
280
|
+
return [];
|
|
185
281
|
}
|
|
186
282
|
getPrivacyPolicy() {
|
|
187
283
|
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
@@ -202,6 +298,9 @@ class SimpleAction {
|
|
|
202
298
|
validX() {
|
|
203
299
|
return this.builder.orchestrator.validX();
|
|
204
300
|
}
|
|
301
|
+
validWithErrors() {
|
|
302
|
+
return this.builder.orchestrator.validWithErrors();
|
|
303
|
+
}
|
|
205
304
|
async save() {
|
|
206
305
|
await (0, action_1.saveBuilder)(this.builder);
|
|
207
306
|
if (this.builder.operation !== action_1.WriteOperation.Delete) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Context, Viewer } from "../../core/base";
|
|
2
2
|
import { ContextCache } from "../../core/context";
|
|
3
|
-
import { LoggedOutViewer } from "../../core/viewer";
|
|
4
3
|
export declare class TestContext implements Context {
|
|
4
|
+
constructor(viewer?: Viewer);
|
|
5
5
|
cache: ContextCache;
|
|
6
|
-
viewer:
|
|
6
|
+
viewer: Viewer;
|
|
7
7
|
getViewer(): Viewer;
|
|
8
8
|
}
|
|
@@ -4,9 +4,15 @@ exports.TestContext = void 0;
|
|
|
4
4
|
const context_1 = require("../../core/context");
|
|
5
5
|
const viewer_1 = require("../../core/viewer");
|
|
6
6
|
class TestContext {
|
|
7
|
-
constructor() {
|
|
7
|
+
constructor(viewer) {
|
|
8
8
|
this.cache = new context_1.ContextCache();
|
|
9
9
|
this.viewer = new viewer_1.LoggedOutViewer(this);
|
|
10
|
+
if (viewer) {
|
|
11
|
+
this.viewer = viewer;
|
|
12
|
+
if (viewer.setContext !== undefined) {
|
|
13
|
+
viewer.setContext(this);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
10
16
|
}
|
|
11
17
|
getViewer() {
|
|
12
18
|
return this.viewer;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Client } from "pg";
|
|
2
|
+
import { Data } from "../../core/base";
|
|
3
|
+
import { Schema } from "../../schema";
|
|
4
|
+
interface Options {
|
|
5
|
+
overrides?: Data;
|
|
6
|
+
client: Client;
|
|
7
|
+
tableName: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function writeFixture(schema: Schema, opts: Options): Promise<void>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeFixture = void 0;
|
|
4
|
+
const schema_1 = require("../../schema");
|
|
5
|
+
const value_1 = require("./value");
|
|
6
|
+
const ent_1 = require("../../core/ent");
|
|
7
|
+
async function writeFixture(schema, opts) {
|
|
8
|
+
const fields = (0, schema_1.getFields)(schema);
|
|
9
|
+
const d = {};
|
|
10
|
+
for (const [fieldName, field] of fields) {
|
|
11
|
+
const col = (0, schema_1.getStorageKey)(field, fieldName);
|
|
12
|
+
const val = (0, value_1.getDefaultValue)(field, col);
|
|
13
|
+
d[col] = val;
|
|
14
|
+
}
|
|
15
|
+
if (opts.overrides) {
|
|
16
|
+
for (const k in opts.overrides) {
|
|
17
|
+
d[k] = opts.overrides[k];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const q = (0, ent_1.buildInsertQuery)({
|
|
21
|
+
tableName: opts.tableName,
|
|
22
|
+
fields: d,
|
|
23
|
+
});
|
|
24
|
+
await opts.client.query(q[0], q[1]);
|
|
25
|
+
}
|
|
26
|
+
exports.writeFixture = writeFixture;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Client as PGClient } from "pg";
|
|
2
2
|
import { Dialect } from "../../core/db";
|
|
3
3
|
import { Database as SqliteDatabase } from "better-sqlite3";
|
|
4
|
+
import { Field } from "../../schema";
|
|
4
5
|
import { BuilderSchema } from "../builder";
|
|
5
6
|
import { Ent } from "../../core/base";
|
|
6
7
|
interface SchemaItem {
|
|
@@ -12,6 +13,7 @@ interface Column extends SchemaItem {
|
|
|
12
13
|
primaryKey?: boolean;
|
|
13
14
|
unique?: boolean;
|
|
14
15
|
default?: string;
|
|
16
|
+
index?: boolean | indexOptions;
|
|
15
17
|
foreignKey?: {
|
|
16
18
|
table: string;
|
|
17
19
|
col: string;
|
|
@@ -20,22 +22,32 @@ interface Column extends SchemaItem {
|
|
|
20
22
|
interface Constraint extends SchemaItem {
|
|
21
23
|
generate(): string;
|
|
22
24
|
}
|
|
25
|
+
interface Index extends SchemaItem {
|
|
26
|
+
generate(): string;
|
|
27
|
+
postCreate?(): boolean;
|
|
28
|
+
}
|
|
23
29
|
export interface CoreConcept {
|
|
24
30
|
name: string;
|
|
25
31
|
create(): string;
|
|
32
|
+
postCreate?(): string[];
|
|
26
33
|
drop(): string;
|
|
27
34
|
}
|
|
28
35
|
export interface Table extends CoreConcept {
|
|
29
36
|
columns: Column[];
|
|
30
37
|
constraints?: Constraint[];
|
|
31
38
|
}
|
|
32
|
-
|
|
39
|
+
type options = Pick<Column, "nullable" | "primaryKey" | "default" | "foreignKey" | "unique" | "index">;
|
|
33
40
|
export declare function primaryKey(name: string, cols: string[]): Constraint;
|
|
34
41
|
export declare function foreignKey(name: string, cols: string[], fkey: {
|
|
35
42
|
table: string;
|
|
36
43
|
cols: string[];
|
|
37
44
|
}): Constraint;
|
|
38
|
-
export declare function
|
|
45
|
+
export declare function check(name: string, condition: string): Constraint;
|
|
46
|
+
interface indexOptions {
|
|
47
|
+
type?: string;
|
|
48
|
+
unique?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function index(tableName: string, cols: string[], opts?: indexOptions): Index;
|
|
39
51
|
export declare function uuid(name: string, opts?: options): Column;
|
|
40
52
|
export declare function text(name: string, opts?: options): Column;
|
|
41
53
|
export declare function enumCol(name: string, type: string): Column;
|
|
@@ -67,23 +79,28 @@ export declare class TempDB {
|
|
|
67
79
|
private tables;
|
|
68
80
|
private dialect;
|
|
69
81
|
private sqlite;
|
|
70
|
-
|
|
71
|
-
constructor(
|
|
82
|
+
private setTables;
|
|
83
|
+
constructor(dialect: Dialect, tables?: CoreConcept[] | (() => CoreConcept[]));
|
|
72
84
|
getDialect(): Dialect;
|
|
73
|
-
|
|
74
|
-
beforeAll(): Promise<void>;
|
|
85
|
+
__getTables(): Map<string, CoreConcept>;
|
|
86
|
+
beforeAll(setupConnString?: boolean): Promise<void>;
|
|
87
|
+
createImpl(table: CoreConcept): Promise<void>;
|
|
75
88
|
getSqliteClient(): SqliteDatabase;
|
|
76
89
|
getPostgresClient(): PGClient;
|
|
77
90
|
afterAll(): Promise<void>;
|
|
91
|
+
getDB(): string;
|
|
78
92
|
dropAll(): Promise<void>;
|
|
79
93
|
drop(...tables: string[]): Promise<void>;
|
|
80
94
|
create(...tables: CoreConcept[]): Promise<void>;
|
|
81
95
|
}
|
|
82
96
|
export declare function assoc_edge_config_table(): Table;
|
|
83
|
-
export declare function assoc_edge_table(name: string): Table;
|
|
84
|
-
interface
|
|
97
|
+
export declare function assoc_edge_table(name: string, global?: boolean): Table;
|
|
98
|
+
interface setupOptions {
|
|
85
99
|
disableDeleteAfterEachTest?: boolean;
|
|
86
100
|
}
|
|
87
|
-
export declare function setupSqlite(connString: string, tables: () => Table[], opts?:
|
|
101
|
+
export declare function setupSqlite(connString: string, tables: () => Table[], opts?: setupOptions): TempDB;
|
|
102
|
+
export declare function setupPostgres(tables: () => Table[], opts?: setupOptions): void;
|
|
103
|
+
export declare function doSQLiteTestFromSchemas(schemas: BuilderSchema<Ent>[], doTest: () => Promise<void>, db?: string): Promise<TempDB>;
|
|
88
104
|
export declare function getSchemaTable(schema: BuilderSchema<Ent>, dialect: Dialect): Table;
|
|
105
|
+
export declare function getColumnFromField(fieldName: string, f: Field, dialect: Dialect): Column;
|
|
89
106
|
export {};
|