@snowtop/ent 0.0.2 → 0.0.3-5.alpha.2
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 +6 -6
- package/action/action.js +2 -2
- package/action/executor.d.ts +7 -12
- package/action/executor.js +39 -33
- package/action/experimental_action.d.ts +4 -2
- package/action/experimental_action.js +27 -2
- package/action/index.d.ts +1 -1
- package/action/orchestrator.d.ts +14 -6
- package/action/orchestrator.js +188 -99
- package/action/privacy.js +4 -4
- package/auth/auth.js +2 -2
- package/core/base.d.ts +6 -0
- package/core/base.js +12 -9
- package/core/clause.d.ts +1 -0
- package/core/clause.js +6 -2
- package/core/config.d.ts +20 -0
- package/core/config.js +2 -2
- package/core/context.js +3 -3
- package/core/convert.d.ts +4 -0
- package/core/convert.js +25 -2
- package/core/db.d.ts +18 -1
- package/core/db.js +4 -7
- package/core/ent.d.ts +17 -10
- package/core/ent.js +38 -15
- package/core/loaders/assoc_count_loader.js +5 -5
- package/core/loaders/assoc_edge_loader.js +10 -10
- package/core/loaders/loader.js +3 -3
- package/core/loaders/object_loader.js +6 -6
- package/core/loaders/query_loader.js +7 -7
- package/core/loaders/raw_count_loader.js +4 -4
- package/core/logger.js +2 -2
- package/core/privacy.d.ts +21 -1
- package/core/privacy.js +91 -47
- package/core/query/assoc_query.d.ts +12 -12
- package/core/query/assoc_query.js +86 -51
- package/core/query/custom_query.d.ts +10 -7
- package/core/query/custom_query.js +29 -3
- package/core/query/query.d.ts +24 -8
- package/core/query/query.js +41 -4
- package/core/query/shared_assoc_test.js +257 -13
- package/core/query/shared_test.d.ts +1 -1
- package/core/query/shared_test.js +11 -11
- package/core/viewer.js +1 -0
- package/graphql/builtins/connection.js +4 -3
- package/graphql/builtins/edge.js +3 -2
- package/graphql/builtins/node.js +2 -1
- package/graphql/graphql.d.ts +2 -0
- package/graphql/graphql.js +83 -61
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +2 -1
- package/graphql/node_resolver.d.ts +1 -0
- package/graphql/node_resolver.js +14 -1
- package/graphql/query/connection_type.d.ts +5 -4
- package/graphql/query/connection_type.js +6 -6
- package/graphql/query/edge_connection.d.ts +7 -7
- package/graphql/query/page_info.js +5 -4
- package/graphql/query/shared_assoc_test.js +9 -9
- package/graphql/query/shared_edge_connection.d.ts +1 -1
- package/graphql/query/shared_edge_connection.js +4 -4
- package/graphql/scalars/time.js +1 -1
- package/imports/dataz/example1/_auth.js +8 -8
- package/imports/dataz/example1/_viewer.js +4 -4
- package/imports/index.d.ts +1 -1
- package/imports/index.js +3 -5
- package/index.d.ts +2 -1
- package/index.js +6 -2
- package/package.json +17 -10
- package/parse_schema/parse.d.ts +48 -0
- package/parse_schema/parse.js +160 -0
- package/schema/base_schema.d.ts +2 -0
- package/schema/base_schema.js +17 -7
- package/schema/field.d.ts +52 -15
- package/schema/field.js +234 -47
- package/schema/index.d.ts +1 -0
- package/schema/index.js +1 -0
- package/schema/json_field.d.ts +17 -0
- package/schema/json_field.js +48 -0
- package/schema/schema.d.ts +39 -4
- package/schema/schema.js +2 -0
- package/scripts/custom_compiler.js +8 -10
- package/scripts/custom_graphql.js +45 -10
- package/scripts/read_schema.js +6 -108
- package/testutils/builder.d.ts +6 -3
- package/testutils/builder.js +31 -15
- package/testutils/db/test_db.d.ts +16 -8
- package/testutils/db/test_db.js +65 -9
- package/testutils/db_mock.js +5 -5
- package/testutils/ent-graphql-tests/index.d.ts +1 -0
- package/testutils/ent-graphql-tests/index.js +13 -13
- package/testutils/fake_comms.d.ts +1 -0
- package/testutils/fake_comms.js +4 -0
- package/testutils/fake_data/const.d.ts +5 -1
- package/testutils/fake_data/const.js +19 -1
- package/testutils/fake_data/events_query.d.ts +16 -11
- package/testutils/fake_data/events_query.js +15 -0
- package/testutils/fake_data/fake_contact.js +9 -9
- package/testutils/fake_data/fake_event.js +14 -14
- package/testutils/fake_data/fake_user.js +12 -10
- package/testutils/fake_data/test_helpers.d.ts +5 -1
- package/testutils/fake_data/test_helpers.js +49 -16
- package/testutils/fake_data/user_query.d.ts +25 -9
- package/testutils/fake_data/user_query.js +52 -5
- package/testutils/parse_sql.js +19 -3
- package/testutils/write.js +6 -6
|
@@ -31,6 +31,8 @@ class FakeUser {
|
|
|
31
31
|
privacy_1.AllowIfViewerRule,
|
|
32
32
|
//can view user if friends
|
|
33
33
|
new privacy_1.AllowIfViewerInboundEdgeExistsRule(internal_1.EdgeType.UserToFriends),
|
|
34
|
+
//can view user if following
|
|
35
|
+
new privacy_1.AllowIfViewerInboundEdgeExistsRule(internal_1.EdgeType.UserToFollowing),
|
|
34
36
|
new privacy_1.AllowIfConditionAppliesRule((viewer, ent) => {
|
|
35
37
|
if (!(viewer instanceof ViewerWithAccessToken)) {
|
|
36
38
|
return false;
|
|
@@ -48,8 +50,8 @@ class FakeUser {
|
|
|
48
50
|
};
|
|
49
51
|
this.data = data;
|
|
50
52
|
this.id = data.id;
|
|
51
|
-
this.createdAt = convert_1.convertDate(data.created_at);
|
|
52
|
-
this.updatedAt = convert_1.convertDate(data.updated_at);
|
|
53
|
+
this.createdAt = (0, convert_1.convertDate)(data.created_at);
|
|
54
|
+
this.updatedAt = (0, convert_1.convertDate)(data.updated_at);
|
|
53
55
|
this.firstName = data.first_name;
|
|
54
56
|
this.lastName = data.last_name;
|
|
55
57
|
this.emailAddress = data.email_address;
|
|
@@ -69,7 +71,7 @@ class FakeUser {
|
|
|
69
71
|
];
|
|
70
72
|
}
|
|
71
73
|
static getTestTable() {
|
|
72
|
-
return test_db_1.table("fake_users", test_db_1.uuid("id", { primaryKey: true }), test_db_1.timestamptz("created_at"), test_db_1.timestamptz("updated_at"), test_db_1.text("first_name"), test_db_1.text("last_name"), test_db_1.text("email_address"), test_db_1.text("phone_number"), test_db_1.text("password"));
|
|
74
|
+
return (0, test_db_1.table)("fake_users", (0, test_db_1.uuid)("id", { primaryKey: true }), (0, test_db_1.timestamptz)("created_at"), (0, test_db_1.timestamptz)("updated_at"), (0, test_db_1.text)("first_name"), (0, test_db_1.text)("last_name"), (0, test_db_1.text)("email_address"), (0, test_db_1.text)("phone_number"), (0, test_db_1.text)("password"));
|
|
73
75
|
}
|
|
74
76
|
static loaderOptions() {
|
|
75
77
|
return {
|
|
@@ -80,10 +82,10 @@ class FakeUser {
|
|
|
80
82
|
};
|
|
81
83
|
}
|
|
82
84
|
static async load(v, id) {
|
|
83
|
-
return ent_1.loadEnt(v, id, FakeUser.loaderOptions());
|
|
85
|
+
return (0, ent_1.loadEnt)(v, id, FakeUser.loaderOptions());
|
|
84
86
|
}
|
|
85
87
|
static async loadX(v, id) {
|
|
86
|
-
return ent_1.loadEntX(v, id, FakeUser.loaderOptions());
|
|
88
|
+
return (0, ent_1.loadEntX)(v, id, FakeUser.loaderOptions());
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
exports.FakeUser = FakeUser;
|
|
@@ -92,19 +94,19 @@ class FakeUserSchema extends schema_1.BaseEntSchema {
|
|
|
92
94
|
super(...arguments);
|
|
93
95
|
this.ent = FakeUser;
|
|
94
96
|
this.fields = [
|
|
95
|
-
schema_1.StringType({
|
|
97
|
+
(0, schema_1.StringType)({
|
|
96
98
|
name: "firstName",
|
|
97
99
|
}),
|
|
98
|
-
schema_1.StringType({
|
|
100
|
+
(0, schema_1.StringType)({
|
|
99
101
|
name: "lastName",
|
|
100
102
|
}),
|
|
101
|
-
schema_1.StringType({
|
|
103
|
+
(0, schema_1.StringType)({
|
|
102
104
|
name: "emailAddress",
|
|
103
105
|
}),
|
|
104
|
-
schema_1.StringType({
|
|
106
|
+
(0, schema_1.StringType)({
|
|
105
107
|
name: "phoneNumber",
|
|
106
108
|
}),
|
|
107
|
-
schema_1.StringType({
|
|
109
|
+
(0, schema_1.StringType)({
|
|
108
110
|
name: "password",
|
|
109
111
|
nullable: true,
|
|
110
112
|
}),
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { Data } from "../../core/base";
|
|
1
|
+
import { Data, Ent } from "../../core/base";
|
|
2
2
|
import { AssocEdge } from "../../core/ent";
|
|
3
3
|
import { TempDB } from "../db/test_db";
|
|
4
4
|
import { FakeUser, UserCreateInput, ContactCreateInput, FakeContact } from ".";
|
|
5
5
|
import { EventCreateInput, FakeEvent } from "./fake_event";
|
|
6
|
+
import { BuilderSchema } from "../builder";
|
|
6
7
|
export declare function getContactInput(user: FakeUser, input?: Partial<ContactCreateInput>): ContactCreateInput;
|
|
7
8
|
export declare function getUserInput(input?: Partial<UserCreateInput>): UserCreateInput;
|
|
8
9
|
export declare function getEventInput(user: FakeUser, input?: Partial<EventCreateInput>): EventCreateInput;
|
|
9
10
|
export declare function createTestUser(input?: Partial<UserCreateInput>): Promise<FakeUser>;
|
|
10
11
|
export declare const inputs: Partial<ContactCreateInput>[];
|
|
11
12
|
export declare function createAllContacts(input?: Partial<UserCreateInput>, slice?: number): Promise<[FakeUser, FakeContact[]]>;
|
|
13
|
+
export declare function createUserPlusFriendRequests(input?: Partial<UserCreateInput>, slice?: number): Promise<[FakeUser, FakeUser[]]>;
|
|
14
|
+
export declare function addEdge<T extends Ent>(source: T, schema: BuilderSchema<T>, edgeType: string, inbound: boolean, // inbound or outbound
|
|
15
|
+
...dest: Ent[]): Promise<void>;
|
|
12
16
|
export declare function verifyUserToContactEdges(user: FakeUser, edges: AssocEdge[], contacts: FakeContact[]): void;
|
|
13
17
|
export declare function verifyUserToContactRawData(user: FakeUser, edges: Data[], contacts: FakeContact[]): void;
|
|
14
18
|
export declare function verifyUserToContacts(user: FakeUser, ents: FakeContact[], contacts: FakeContact[]): void;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createAllEvents = exports.tempDBTables = exports.setupTempDB = exports.createTestEvent = exports.edgeTableNames = exports.createEdges = exports.verifyUserToContacts = exports.verifyUserToContactRawData = exports.verifyUserToContactEdges = exports.createAllContacts = exports.inputs = exports.createTestUser = exports.getEventInput = exports.getUserInput = exports.getContactInput = void 0;
|
|
4
|
-
const assert_1 = require("assert");
|
|
3
|
+
exports.createAllEvents = exports.tempDBTables = exports.setupTempDB = exports.createTestEvent = exports.edgeTableNames = exports.createEdges = exports.verifyUserToContacts = exports.verifyUserToContactRawData = exports.verifyUserToContactEdges = exports.addEdge = exports.createUserPlusFriendRequests = exports.createAllContacts = exports.inputs = exports.createTestUser = exports.getEventInput = exports.getUserInput = exports.getContactInput = void 0;
|
|
5
4
|
const jest_date_mock_1 = require("jest-date-mock");
|
|
6
5
|
const viewer_1 = require("../../core/viewer");
|
|
7
6
|
const ent_1 = require("../../core/ent");
|
|
@@ -12,6 +11,8 @@ const _1 = require(".");
|
|
|
12
11
|
const fake_event_1 = require("./fake_event");
|
|
13
12
|
const const_1 = require("./const");
|
|
14
13
|
const mock_date_1 = require("./../mock_date");
|
|
14
|
+
const builder_1 = require("../builder");
|
|
15
|
+
const action_1 = require("../../action");
|
|
15
16
|
function getContactInput(user, input) {
|
|
16
17
|
return {
|
|
17
18
|
firstName: "Jon",
|
|
@@ -45,7 +46,7 @@ function getEventInput(user, input) {
|
|
|
45
46
|
}
|
|
46
47
|
exports.getEventInput = getEventInput;
|
|
47
48
|
async function createTestUser(input) {
|
|
48
|
-
const user = await _1.createUser(new viewer_1.LoggedOutViewer(), {
|
|
49
|
+
const user = await (0, _1.createUser)(new viewer_1.LoggedOutViewer(), {
|
|
49
50
|
firstName: "Jon",
|
|
50
51
|
lastName: "Snow",
|
|
51
52
|
password: "12345678",
|
|
@@ -54,7 +55,7 @@ async function createTestUser(input) {
|
|
|
54
55
|
...input,
|
|
55
56
|
});
|
|
56
57
|
if (!user) {
|
|
57
|
-
|
|
58
|
+
throw new Error("error creating user");
|
|
58
59
|
}
|
|
59
60
|
return user;
|
|
60
61
|
}
|
|
@@ -86,8 +87,8 @@ async function createAllContacts(input, slice) {
|
|
|
86
87
|
let userInputs = exports.inputs.slice(0, slice || exports.inputs.length);
|
|
87
88
|
const contacts = await Promise.all(userInputs.map(async (input) => {
|
|
88
89
|
// just to make times deterministic so that tests can consistently work
|
|
89
|
-
jest_date_mock_1.advanceBy(100);
|
|
90
|
-
const builder = _1.getContactBuilder(user.viewer, getContactInput(user, input));
|
|
90
|
+
(0, jest_date_mock_1.advanceBy)(100);
|
|
91
|
+
const builder = (0, _1.getContactBuilder)(user.viewer, getContactInput(user, input));
|
|
91
92
|
// add edge from user to contact
|
|
92
93
|
builder.orchestrator.addInboundEdge(user.id, _1.EdgeType.UserToContacts, const_1.NodeType.FakeUser, {
|
|
93
94
|
time: new Date(), // set time to advanceBy time
|
|
@@ -99,6 +100,38 @@ async function createAllContacts(input, slice) {
|
|
|
99
100
|
return [user, contacts];
|
|
100
101
|
}
|
|
101
102
|
exports.createAllContacts = createAllContacts;
|
|
103
|
+
async function createUserPlusFriendRequests(input, slice) {
|
|
104
|
+
const user = await createTestUser(input);
|
|
105
|
+
let userInputs = exports.inputs.slice(0, slice || exports.inputs.length);
|
|
106
|
+
const friendRequests = await Promise.all(userInputs.map(async (input) => {
|
|
107
|
+
return createTestUser(input);
|
|
108
|
+
}));
|
|
109
|
+
expect(friendRequests.length).toBe(userInputs.length);
|
|
110
|
+
await addEdge(user, new _1.FakeUserSchema(), _1.EdgeType.UserToFriendRequests, true, ...friendRequests);
|
|
111
|
+
return [user, friendRequests];
|
|
112
|
+
}
|
|
113
|
+
exports.createUserPlusFriendRequests = createUserPlusFriendRequests;
|
|
114
|
+
async function addEdge(source, schema, edgeType, inbound, // inbound or outbound
|
|
115
|
+
...dest) {
|
|
116
|
+
const action = new builder_1.SimpleAction(source.viewer, schema, new Map(), action_1.WriteOperation.Edit, source);
|
|
117
|
+
dest.forEach(async (friendRequest) => {
|
|
118
|
+
// just to make times deterministic so that tests can consistently work
|
|
119
|
+
(0, jest_date_mock_1.advanceBy)(100);
|
|
120
|
+
// add edge
|
|
121
|
+
if (inbound) {
|
|
122
|
+
action.builder.orchestrator.addInboundEdge(friendRequest.id, edgeType, dest[0].nodeType, {
|
|
123
|
+
time: new Date(), // set time to advanceBy time
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
action.builder.orchestrator.addOutboundEdge(friendRequest.id, edgeType, dest[0].nodeType, {
|
|
128
|
+
time: new Date(), // set time to advanceBy time
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
await action.saveX();
|
|
133
|
+
}
|
|
134
|
+
exports.addEdge = addEdge;
|
|
102
135
|
function verifyUserToContactEdges(user, edges, contacts) {
|
|
103
136
|
expect(edges.length).toBe(contacts.length);
|
|
104
137
|
for (let i = 0; i < contacts.length; i++) {
|
|
@@ -138,10 +171,10 @@ async function createEdges() {
|
|
|
138
171
|
const edges = Object.values(_1.EdgeType);
|
|
139
172
|
for (let i = 0; i < edges.length; i++) {
|
|
140
173
|
const edge = edges[i];
|
|
141
|
-
await write_1.createRowForTest({
|
|
174
|
+
await (0, write_1.createRowForTest)({
|
|
142
175
|
tableName: "assoc_edge_config",
|
|
143
176
|
fields: {
|
|
144
|
-
edge_table: snake_case_1.snakeCase(`${edge}_table`),
|
|
177
|
+
edge_table: (0, snake_case_1.snakeCase)(`${edge}_table`),
|
|
145
178
|
symmetric_edge: _1.SymmetricEdges.has(edge),
|
|
146
179
|
inverse_edge_type: _1.InverseEdges.get(edge) || null,
|
|
147
180
|
edge_type: edge,
|
|
@@ -150,19 +183,19 @@ async function createEdges() {
|
|
|
150
183
|
updated_at: new Date(),
|
|
151
184
|
},
|
|
152
185
|
});
|
|
153
|
-
const edgeData = await ent_1.loadEdgeData(edge);
|
|
186
|
+
const edgeData = await (0, ent_1.loadEdgeData)(edge);
|
|
154
187
|
expect(edgeData).toBeDefined();
|
|
155
188
|
}
|
|
156
189
|
}
|
|
157
190
|
exports.createEdges = createEdges;
|
|
158
191
|
function edgeTableNames() {
|
|
159
192
|
const edges = Object.values(_1.EdgeType);
|
|
160
|
-
return edges.map((edge) => snake_case_1.snakeCase(`${edge}_table`));
|
|
193
|
+
return edges.map((edge) => (0, snake_case_1.snakeCase)(`${edge}_table`));
|
|
161
194
|
}
|
|
162
195
|
exports.edgeTableNames = edgeTableNames;
|
|
163
196
|
async function createTestEvent(user, input) {
|
|
164
197
|
const vc = new viewer_1.IDViewer(user.id);
|
|
165
|
-
const builder = fake_event_1.getEventBuilder(vc, {
|
|
198
|
+
const builder = (0, fake_event_1.getEventBuilder)(vc, {
|
|
166
199
|
startTime: new Date(),
|
|
167
200
|
location: "fun house",
|
|
168
201
|
description: "fun fun fun",
|
|
@@ -188,9 +221,9 @@ function tempDBTables() {
|
|
|
188
221
|
_1.FakeUser.getTestTable(),
|
|
189
222
|
_1.FakeContact.getTestTable(),
|
|
190
223
|
fake_event_1.FakeEvent.getTestTable(),
|
|
191
|
-
test_db_1.assoc_edge_config_table(),
|
|
224
|
+
(0, test_db_1.assoc_edge_config_table)(),
|
|
192
225
|
];
|
|
193
|
-
edgeTableNames().forEach((tableName) => tables.push(test_db_1.assoc_edge_table(tableName)));
|
|
226
|
+
edgeTableNames().forEach((tableName) => tables.push((0, test_db_1.assoc_edge_table)(tableName)));
|
|
194
227
|
return tables;
|
|
195
228
|
}
|
|
196
229
|
exports.tempDBTables = tempDBTables;
|
|
@@ -199,14 +232,14 @@ async function createAllEvents(opts) {
|
|
|
199
232
|
let arr = new Array(opts.howMany);
|
|
200
233
|
arr.fill(1);
|
|
201
234
|
// start at date in case something else has used a date already
|
|
202
|
-
jest_date_mock_1.advanceTo(mock_date_1.MockDate.getDate());
|
|
235
|
+
(0, jest_date_mock_1.advanceTo)(mock_date_1.MockDate.getDate());
|
|
203
236
|
const events = await Promise.all(arr.map(async (v, idx) => {
|
|
204
237
|
// just to make times deterministic so that tests can consistently work
|
|
205
238
|
if (opts.interval > 0) {
|
|
206
|
-
jest_date_mock_1.advanceBy(opts.interval);
|
|
239
|
+
(0, jest_date_mock_1.advanceBy)(opts.interval);
|
|
207
240
|
}
|
|
208
241
|
const input = opts.eventInputs?.[idx];
|
|
209
|
-
const builder = fake_event_1.getEventBuilder(user.viewer, getEventInput(user, input));
|
|
242
|
+
const builder = (0, fake_event_1.getEventBuilder)(user.viewer, getEventInput(user, input));
|
|
210
243
|
await builder.saveX();
|
|
211
244
|
return await builder.editedEntX();
|
|
212
245
|
}));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ID, Viewer } from "../../core/base";
|
|
1
|
+
import { Ent, ID, Viewer } from "../../core/base";
|
|
2
2
|
import { CustomEdgeQueryBase } from "../../core/query/custom_query";
|
|
3
3
|
import { AssocEdge } from "../../core/ent";
|
|
4
4
|
import * as clause from "../../core/clause";
|
|
@@ -10,16 +10,19 @@ import { QueryLoaderFactory } from "../../core/loaders/query_loader";
|
|
|
10
10
|
export declare class UserToContactsQuery extends AssocEdgeQueryBase<FakeUser, FakeContact, AssocEdge> {
|
|
11
11
|
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
12
12
|
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToContactsQuery;
|
|
13
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
13
14
|
}
|
|
14
15
|
export declare const userToContactsCountLoaderFactory: RawCountLoaderFactory;
|
|
15
16
|
export declare const userToContactsDataLoaderFactory: IndexLoaderFactory;
|
|
16
|
-
export declare class UserToContactsFkeyQuery extends CustomEdgeQueryBase<FakeContact> {
|
|
17
|
+
export declare class UserToContactsFkeyQuery extends CustomEdgeQueryBase<FakeUser, FakeContact> {
|
|
17
18
|
constructor(viewer: Viewer, src: ID | FakeUser);
|
|
18
19
|
static query(viewer: Viewer, src: FakeUser | ID): UserToContactsFkeyQuery;
|
|
20
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
19
21
|
}
|
|
20
22
|
export declare class UserToFriendsQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, AssocEdge> {
|
|
21
23
|
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
22
24
|
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToFriendsQuery;
|
|
25
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
23
26
|
queryContacts(): UserToContactsQuery;
|
|
24
27
|
queryFriends(): UserToFriendsQuery;
|
|
25
28
|
queryHostedEvents(): UserToHostedEventsQuery;
|
|
@@ -32,6 +35,7 @@ export declare class CustomEdge extends AssocEdge {
|
|
|
32
35
|
export declare class UserToCustomEdgeQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, CustomEdge> {
|
|
33
36
|
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
34
37
|
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToCustomEdgeQuery;
|
|
38
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
35
39
|
queryContacts(): UserToContactsQuery;
|
|
36
40
|
queryFriends(): UserToFriendsQuery;
|
|
37
41
|
queryHostedEvents(): UserToHostedEventsQuery;
|
|
@@ -40,6 +44,7 @@ export declare class UserToCustomEdgeQuery extends AssocEdgeQueryBase<FakeUser,
|
|
|
40
44
|
export declare class UserToFriendRequestsQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, AssocEdge> {
|
|
41
45
|
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
42
46
|
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToFriendRequestsQuery;
|
|
47
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
43
48
|
queryContacts(): UserToContactsQuery;
|
|
44
49
|
queryFriends(): UserToFriendsQuery;
|
|
45
50
|
queryHostedEvents(): UserToHostedEventsQuery;
|
|
@@ -47,8 +52,10 @@ export declare class UserToFriendRequestsQuery extends AssocEdgeQueryBase<FakeUs
|
|
|
47
52
|
queryCustomEdge(): UserToCustomEdgeQuery;
|
|
48
53
|
}
|
|
49
54
|
export declare class UserToIncomingFriendRequestsQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, AssocEdge> {
|
|
50
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
51
|
-
|
|
55
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>);
|
|
56
|
+
getPrivacyPolicy(): import("../../core/base").PrivacyPolicy;
|
|
57
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
58
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>): UserToIncomingFriendRequestsQuery;
|
|
52
59
|
queryContacts(): UserToContactsQuery;
|
|
53
60
|
queryFriends(): UserToFriendsQuery;
|
|
54
61
|
queryHostedEvents(): UserToHostedEventsQuery;
|
|
@@ -56,8 +63,9 @@ export declare class UserToIncomingFriendRequestsQuery extends AssocEdgeQueryBas
|
|
|
56
63
|
queryCustomEdge(): UserToCustomEdgeQuery;
|
|
57
64
|
}
|
|
58
65
|
export declare class UserToEventsAttendingQuery extends AssocEdgeQueryBase<FakeUser, FakeEvent, AssocEdge> {
|
|
59
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
60
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToEventsAttendingQuery;
|
|
66
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeEvent>);
|
|
67
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeEvent>): UserToEventsAttendingQuery;
|
|
68
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
61
69
|
queryHosts(): EventToHostsQuery;
|
|
62
70
|
queryAttendees(): EventToAttendeesQuery;
|
|
63
71
|
queryInvited(): EventToInvitedQuery;
|
|
@@ -65,8 +73,9 @@ export declare class UserToEventsAttendingQuery extends AssocEdgeQueryBase<FakeU
|
|
|
65
73
|
queryMaybe(): EventToMaybeQuery;
|
|
66
74
|
}
|
|
67
75
|
export declare class UserToHostedEventsQuery extends AssocEdgeQueryBase<FakeUser, FakeEvent, AssocEdge> {
|
|
68
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
|
|
69
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToHostedEventsQuery;
|
|
76
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeEvent>);
|
|
77
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeEvent>): UserToHostedEventsQuery;
|
|
78
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
70
79
|
queryHosts(): EventToHostsQuery;
|
|
71
80
|
queryAttendees(): EventToAttendeesQuery;
|
|
72
81
|
queryInvited(): EventToInvitedQuery;
|
|
@@ -77,7 +86,14 @@ export declare const getNextWeekClause: () => clause.Clause;
|
|
|
77
86
|
export declare function getCompleteClause(id: ID): clause.Clause;
|
|
78
87
|
export declare const userToEventsInNextWeekCountLoaderFactory: RawCountLoaderFactory;
|
|
79
88
|
export declare const userToEventsInNextWeekDataLoaderFactory: QueryLoaderFactory<unknown>;
|
|
80
|
-
export declare class UserToEventsInNextWeekQuery extends CustomEdgeQueryBase<FakeEvent> {
|
|
89
|
+
export declare class UserToEventsInNextWeekQuery extends CustomEdgeQueryBase<FakeUser, FakeEvent> {
|
|
81
90
|
constructor(viewer: Viewer, src: ID | FakeUser);
|
|
82
91
|
static query(viewer: Viewer, src: FakeUser | ID): UserToEventsInNextWeekQuery;
|
|
92
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
93
|
+
getPrivacyPolicy(): import("../../core/base").PrivacyPolicy;
|
|
94
|
+
}
|
|
95
|
+
export declare class UserToFollowingQuery extends AssocEdgeQueryBase<FakeUser, Ent, AssocEdge> {
|
|
96
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>);
|
|
97
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>): UserToFollowingQuery;
|
|
98
|
+
sourceEnt(id: ID): Promise<FakeUser | null>;
|
|
83
99
|
}
|
|
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.UserToEventsInNextWeekQuery = exports.userToEventsInNextWeekDataLoaderFactory = exports.userToEventsInNextWeekCountLoaderFactory = exports.getCompleteClause = exports.getNextWeekClause = exports.UserToHostedEventsQuery = exports.UserToEventsAttendingQuery = exports.UserToIncomingFriendRequestsQuery = exports.UserToFriendRequestsQuery = exports.UserToCustomEdgeQuery = exports.CustomEdge = exports.UserToFriendsQuery = exports.UserToContactsFkeyQuery = exports.userToContactsDataLoaderFactory = exports.userToContactsCountLoaderFactory = exports.UserToContactsQuery = void 0;
|
|
22
|
+
exports.UserToFollowingQuery = exports.UserToEventsInNextWeekQuery = exports.userToEventsInNextWeekDataLoaderFactory = exports.userToEventsInNextWeekCountLoaderFactory = exports.getCompleteClause = exports.getNextWeekClause = exports.UserToHostedEventsQuery = exports.UserToEventsAttendingQuery = exports.UserToIncomingFriendRequestsQuery = exports.UserToFriendRequestsQuery = exports.UserToCustomEdgeQuery = exports.CustomEdge = exports.UserToFriendsQuery = exports.UserToContactsFkeyQuery = exports.userToContactsDataLoaderFactory = exports.userToContactsCountLoaderFactory = exports.UserToContactsQuery = void 0;
|
|
23
23
|
const custom_query_1 = require("../../core/query/custom_query");
|
|
24
24
|
const ent_1 = require("../../core/ent");
|
|
25
25
|
const clause = __importStar(require("../../core/clause"));
|
|
@@ -34,6 +34,8 @@ const jest_date_mock_1 = require("jest-date-mock");
|
|
|
34
34
|
const luxon_1 = require("luxon");
|
|
35
35
|
const query_loader_1 = require("../../core/loaders/query_loader");
|
|
36
36
|
const mock_date_1 = require("./../mock_date");
|
|
37
|
+
const _1 = require(".");
|
|
38
|
+
const privacy_1 = require("../../core/privacy");
|
|
37
39
|
class UserToContactsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
38
40
|
constructor(viewer, src) {
|
|
39
41
|
super(viewer, src, new assoc_count_loader_1.AssocEdgeCountLoaderFactory(internal_1.EdgeType.UserToContacts), new assoc_edge_loader_1.AssocEdgeLoaderFactory(internal_1.EdgeType.UserToContacts, ent_1.AssocEdge), internal_1.FakeContact.loaderOptions());
|
|
@@ -41,6 +43,9 @@ class UserToContactsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
41
43
|
static query(viewer, src) {
|
|
42
44
|
return new UserToContactsQuery(viewer, src);
|
|
43
45
|
}
|
|
46
|
+
sourceEnt(id) {
|
|
47
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
48
|
+
}
|
|
44
49
|
}
|
|
45
50
|
exports.UserToContactsQuery = UserToContactsQuery;
|
|
46
51
|
exports.userToContactsCountLoaderFactory = new raw_count_loader_1.RawCountLoaderFactory({
|
|
@@ -63,6 +68,9 @@ class UserToContactsFkeyQuery extends custom_query_1.CustomEdgeQueryBase {
|
|
|
63
68
|
static query(viewer, src) {
|
|
64
69
|
return new UserToContactsFkeyQuery(viewer, src);
|
|
65
70
|
}
|
|
71
|
+
sourceEnt(id) {
|
|
72
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
73
|
+
}
|
|
66
74
|
}
|
|
67
75
|
exports.UserToContactsFkeyQuery = UserToContactsFkeyQuery;
|
|
68
76
|
class UserToFriendsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
@@ -72,6 +80,9 @@ class UserToFriendsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
72
80
|
static query(viewer, src) {
|
|
73
81
|
return new UserToFriendsQuery(viewer, src);
|
|
74
82
|
}
|
|
83
|
+
sourceEnt(id) {
|
|
84
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
85
|
+
}
|
|
75
86
|
queryContacts() {
|
|
76
87
|
return UserToContactsQuery.query(this.viewer, this);
|
|
77
88
|
}
|
|
@@ -103,6 +114,9 @@ class UserToCustomEdgeQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
103
114
|
static query(viewer, src) {
|
|
104
115
|
return new UserToCustomEdgeQuery(viewer, src);
|
|
105
116
|
}
|
|
117
|
+
sourceEnt(id) {
|
|
118
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
119
|
+
}
|
|
106
120
|
queryContacts() {
|
|
107
121
|
return UserToContactsQuery.query(this.viewer, this);
|
|
108
122
|
}
|
|
@@ -124,6 +138,9 @@ class UserToFriendRequestsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
124
138
|
static query(viewer, src) {
|
|
125
139
|
return new UserToFriendRequestsQuery(viewer, src);
|
|
126
140
|
}
|
|
141
|
+
sourceEnt(id) {
|
|
142
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
143
|
+
}
|
|
127
144
|
queryContacts() {
|
|
128
145
|
return UserToContactsQuery.query(this.viewer, this);
|
|
129
146
|
}
|
|
@@ -145,6 +162,12 @@ class UserToIncomingFriendRequestsQuery extends assoc_query_1.AssocEdgeQueryBase
|
|
|
145
162
|
constructor(viewer, src) {
|
|
146
163
|
super(viewer, src, new assoc_count_loader_1.AssocEdgeCountLoaderFactory(internal_1.EdgeType.UserToIncomingFriendRequests), new assoc_edge_loader_1.AssocEdgeLoaderFactory(internal_1.EdgeType.UserToIncomingFriendRequests, ent_1.AssocEdge), internal_1.FakeUser.loaderOptions());
|
|
147
164
|
}
|
|
165
|
+
getPrivacyPolicy() {
|
|
166
|
+
return privacy_1.AllowIfViewerPrivacyPolicy;
|
|
167
|
+
}
|
|
168
|
+
sourceEnt(id) {
|
|
169
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
170
|
+
}
|
|
148
171
|
static query(viewer, src) {
|
|
149
172
|
return new UserToIncomingFriendRequestsQuery(viewer, src);
|
|
150
173
|
}
|
|
@@ -172,6 +195,9 @@ class UserToEventsAttendingQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
172
195
|
static query(viewer, src) {
|
|
173
196
|
return new UserToEventsAttendingQuery(viewer, src);
|
|
174
197
|
}
|
|
198
|
+
sourceEnt(id) {
|
|
199
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
200
|
+
}
|
|
175
201
|
queryHosts() {
|
|
176
202
|
return internal_1.EventToHostsQuery.query(this.viewer, this);
|
|
177
203
|
}
|
|
@@ -196,6 +222,9 @@ class UserToHostedEventsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
196
222
|
static query(viewer, src) {
|
|
197
223
|
return new UserToHostedEventsQuery(viewer, src);
|
|
198
224
|
}
|
|
225
|
+
sourceEnt(id) {
|
|
226
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
227
|
+
}
|
|
199
228
|
queryHosts() {
|
|
200
229
|
return internal_1.EventToHostsQuery.query(this.viewer, this);
|
|
201
230
|
}
|
|
@@ -215,7 +244,7 @@ class UserToHostedEventsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
215
244
|
exports.UserToHostedEventsQuery = UserToHostedEventsQuery;
|
|
216
245
|
const getNextWeekClause = () => {
|
|
217
246
|
// get events starting within the next week
|
|
218
|
-
jest_date_mock_1.clear();
|
|
247
|
+
(0, jest_date_mock_1.clear)();
|
|
219
248
|
const start = mock_date_1.MockDate.getDate();
|
|
220
249
|
// 7 days
|
|
221
250
|
const end = luxon_1.Interval.after(start, 86400 * 1000 * 7)
|
|
@@ -225,18 +254,18 @@ const getNextWeekClause = () => {
|
|
|
225
254
|
};
|
|
226
255
|
exports.getNextWeekClause = getNextWeekClause;
|
|
227
256
|
function getCompleteClause(id) {
|
|
228
|
-
return clause.And(clause.Eq("user_id", id), exports.getNextWeekClause());
|
|
257
|
+
return clause.And(clause.Eq("user_id", id), (0, exports.getNextWeekClause)());
|
|
229
258
|
}
|
|
230
259
|
exports.getCompleteClause = getCompleteClause;
|
|
231
260
|
exports.userToEventsInNextWeekCountLoaderFactory = new raw_count_loader_1.RawCountLoaderFactory({
|
|
232
261
|
...internal_1.FakeEvent.loaderOptions(),
|
|
233
262
|
groupCol: "user_id",
|
|
234
|
-
clause: exports.getNextWeekClause(),
|
|
263
|
+
clause: (0, exports.getNextWeekClause)(),
|
|
235
264
|
});
|
|
236
265
|
exports.userToEventsInNextWeekDataLoaderFactory = new query_loader_1.QueryLoaderFactory({
|
|
237
266
|
...internal_1.FakeEvent.loaderOptions(),
|
|
238
267
|
groupCol: "user_id",
|
|
239
|
-
clause: exports.getNextWeekClause(),
|
|
268
|
+
clause: (0, exports.getNextWeekClause)(),
|
|
240
269
|
toPrime: [fake_contact_1.contactLoader],
|
|
241
270
|
sortColumn: "start_time",
|
|
242
271
|
});
|
|
@@ -255,5 +284,23 @@ class UserToEventsInNextWeekQuery extends custom_query_1.CustomEdgeQueryBase {
|
|
|
255
284
|
static query(viewer, src) {
|
|
256
285
|
return new UserToEventsInNextWeekQuery(viewer, src);
|
|
257
286
|
}
|
|
287
|
+
sourceEnt(id) {
|
|
288
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
289
|
+
}
|
|
290
|
+
getPrivacyPolicy() {
|
|
291
|
+
return privacy_1.AllowIfViewerPrivacyPolicy;
|
|
292
|
+
}
|
|
258
293
|
}
|
|
259
294
|
exports.UserToEventsInNextWeekQuery = UserToEventsInNextWeekQuery;
|
|
295
|
+
class UserToFollowingQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
296
|
+
constructor(viewer, src) {
|
|
297
|
+
super(viewer, src, new assoc_count_loader_1.AssocEdgeCountLoaderFactory(internal_1.EdgeType.UserToFollowing), new assoc_edge_loader_1.AssocEdgeLoaderFactory(internal_1.EdgeType.UserToFollowing, ent_1.AssocEdge), _1.getLoaderOptions);
|
|
298
|
+
}
|
|
299
|
+
static query(viewer, src) {
|
|
300
|
+
return new UserToFollowingQuery(viewer, src);
|
|
301
|
+
}
|
|
302
|
+
sourceEnt(id) {
|
|
303
|
+
return internal_1.FakeUser.load(this.viewer, id);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
exports.UserToFollowingQuery = UserToFollowingQuery;
|
package/testutils/parse_sql.js
CHANGED
|
@@ -74,7 +74,7 @@ function getColumns(cols) {
|
|
|
74
74
|
count = true;
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
|
-
|
|
77
|
+
throw new Error("unsupported expr type");
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -121,6 +121,22 @@ function getDataToReturn(data, colNames, returningAll) {
|
|
|
121
121
|
return ret;
|
|
122
122
|
}
|
|
123
123
|
exports.getDataToReturn = getDataToReturn;
|
|
124
|
+
function processBeforeStoring(val) {
|
|
125
|
+
if (typeof val !== "string") {
|
|
126
|
+
return val;
|
|
127
|
+
}
|
|
128
|
+
// convert postgres lists into lists before storing
|
|
129
|
+
if (val[0] === "{" && val[val.length - 1] === "}") {
|
|
130
|
+
try {
|
|
131
|
+
// valid json, don't convert
|
|
132
|
+
JSON.parse(val);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
return val.substring(1, val.length - 1).split(",");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return val;
|
|
139
|
+
}
|
|
124
140
|
function parseInsertStatement(ast, values, // values passed to query
|
|
125
141
|
returningAll) {
|
|
126
142
|
const tableName = getTableName(ast.table);
|
|
@@ -138,7 +154,7 @@ returningAll) {
|
|
|
138
154
|
// INSERT INTO tableName (cols) VALUES (pos args)
|
|
139
155
|
for (let i = 0; i < columns.length; i++) {
|
|
140
156
|
let col = columns[i];
|
|
141
|
-
data[col] = values[i];
|
|
157
|
+
data[col] = processBeforeStoring(values[i]);
|
|
142
158
|
}
|
|
143
159
|
let returningData = null;
|
|
144
160
|
if (returningAll) {
|
|
@@ -411,7 +427,7 @@ function parseUpdateStatement(ast, values, map, returningAll) {
|
|
|
411
427
|
for (const set of ast.set) {
|
|
412
428
|
let col = set.column;
|
|
413
429
|
let value = getValueFromRegex(set.value, values);
|
|
414
|
-
overwrite[col] = value;
|
|
430
|
+
overwrite[col] = processBeforeStoring(value);
|
|
415
431
|
}
|
|
416
432
|
let columns = new Set();
|
|
417
433
|
if (ast.returning) {
|
package/testutils/write.js
CHANGED
|
@@ -13,9 +13,9 @@ async function createRowForTest(options, suffix) {
|
|
|
13
13
|
const client = await db_1.default.getInstance().getNewClient();
|
|
14
14
|
try {
|
|
15
15
|
if (isSyncClient(client)) {
|
|
16
|
-
return ent_1.createRowSync(client, options, suffix || "");
|
|
16
|
+
return (0, ent_1.createRowSync)(client, options, suffix || "");
|
|
17
17
|
}
|
|
18
|
-
return await ent_1.createRow(client, options, suffix || "");
|
|
18
|
+
return await (0, ent_1.createRow)(client, options, suffix || "");
|
|
19
19
|
}
|
|
20
20
|
finally {
|
|
21
21
|
client.release();
|
|
@@ -26,9 +26,9 @@ async function editRowForTest(options, id, suffix) {
|
|
|
26
26
|
const client = await db_1.default.getInstance().getNewClient();
|
|
27
27
|
try {
|
|
28
28
|
if (isSyncClient(client)) {
|
|
29
|
-
return ent_1.editRowSync(client, options, id, suffix || "");
|
|
29
|
+
return (0, ent_1.editRowSync)(client, options, id, suffix || "");
|
|
30
30
|
}
|
|
31
|
-
return await ent_1.editRow(client, options, id, suffix);
|
|
31
|
+
return await (0, ent_1.editRow)(client, options, id, suffix);
|
|
32
32
|
}
|
|
33
33
|
finally {
|
|
34
34
|
client.release();
|
|
@@ -39,9 +39,9 @@ async function deleteRowsForTest(options, cls) {
|
|
|
39
39
|
const client = await db_1.default.getInstance().getNewClient();
|
|
40
40
|
try {
|
|
41
41
|
if (isSyncClient(client)) {
|
|
42
|
-
return ent_1.deleteRowsSync(client, options, cls);
|
|
42
|
+
return (0, ent_1.deleteRowsSync)(client, options, cls);
|
|
43
43
|
}
|
|
44
|
-
return await ent_1.deleteRows(client, options, cls);
|
|
44
|
+
return await (0, ent_1.deleteRows)(client, options, cls);
|
|
45
45
|
}
|
|
46
46
|
finally {
|
|
47
47
|
client.release();
|