@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.
Files changed (104) hide show
  1. package/action/action.d.ts +6 -6
  2. package/action/action.js +2 -2
  3. package/action/executor.d.ts +7 -12
  4. package/action/executor.js +39 -33
  5. package/action/experimental_action.d.ts +4 -2
  6. package/action/experimental_action.js +27 -2
  7. package/action/index.d.ts +1 -1
  8. package/action/orchestrator.d.ts +14 -6
  9. package/action/orchestrator.js +188 -99
  10. package/action/privacy.js +4 -4
  11. package/auth/auth.js +2 -2
  12. package/core/base.d.ts +6 -0
  13. package/core/base.js +12 -9
  14. package/core/clause.d.ts +1 -0
  15. package/core/clause.js +6 -2
  16. package/core/config.d.ts +20 -0
  17. package/core/config.js +2 -2
  18. package/core/context.js +3 -3
  19. package/core/convert.d.ts +4 -0
  20. package/core/convert.js +25 -2
  21. package/core/db.d.ts +18 -1
  22. package/core/db.js +4 -7
  23. package/core/ent.d.ts +17 -10
  24. package/core/ent.js +38 -15
  25. package/core/loaders/assoc_count_loader.js +5 -5
  26. package/core/loaders/assoc_edge_loader.js +10 -10
  27. package/core/loaders/loader.js +3 -3
  28. package/core/loaders/object_loader.js +6 -6
  29. package/core/loaders/query_loader.js +7 -7
  30. package/core/loaders/raw_count_loader.js +4 -4
  31. package/core/logger.js +2 -2
  32. package/core/privacy.d.ts +21 -1
  33. package/core/privacy.js +91 -47
  34. package/core/query/assoc_query.d.ts +12 -12
  35. package/core/query/assoc_query.js +86 -51
  36. package/core/query/custom_query.d.ts +10 -7
  37. package/core/query/custom_query.js +29 -3
  38. package/core/query/query.d.ts +24 -8
  39. package/core/query/query.js +41 -4
  40. package/core/query/shared_assoc_test.js +257 -13
  41. package/core/query/shared_test.d.ts +1 -1
  42. package/core/query/shared_test.js +11 -11
  43. package/core/viewer.js +1 -0
  44. package/graphql/builtins/connection.js +4 -3
  45. package/graphql/builtins/edge.js +3 -2
  46. package/graphql/builtins/node.js +2 -1
  47. package/graphql/graphql.d.ts +2 -0
  48. package/graphql/graphql.js +83 -61
  49. package/graphql/index.d.ts +1 -1
  50. package/graphql/index.js +2 -1
  51. package/graphql/node_resolver.d.ts +1 -0
  52. package/graphql/node_resolver.js +14 -1
  53. package/graphql/query/connection_type.d.ts +5 -4
  54. package/graphql/query/connection_type.js +6 -6
  55. package/graphql/query/edge_connection.d.ts +7 -7
  56. package/graphql/query/page_info.js +5 -4
  57. package/graphql/query/shared_assoc_test.js +9 -9
  58. package/graphql/query/shared_edge_connection.d.ts +1 -1
  59. package/graphql/query/shared_edge_connection.js +4 -4
  60. package/graphql/scalars/time.js +1 -1
  61. package/imports/dataz/example1/_auth.js +8 -8
  62. package/imports/dataz/example1/_viewer.js +4 -4
  63. package/imports/index.d.ts +1 -1
  64. package/imports/index.js +3 -5
  65. package/index.d.ts +2 -1
  66. package/index.js +6 -2
  67. package/package.json +17 -10
  68. package/parse_schema/parse.d.ts +48 -0
  69. package/parse_schema/parse.js +160 -0
  70. package/schema/base_schema.d.ts +2 -0
  71. package/schema/base_schema.js +17 -7
  72. package/schema/field.d.ts +52 -15
  73. package/schema/field.js +234 -47
  74. package/schema/index.d.ts +1 -0
  75. package/schema/index.js +1 -0
  76. package/schema/json_field.d.ts +17 -0
  77. package/schema/json_field.js +48 -0
  78. package/schema/schema.d.ts +39 -4
  79. package/schema/schema.js +2 -0
  80. package/scripts/custom_compiler.js +8 -10
  81. package/scripts/custom_graphql.js +45 -10
  82. package/scripts/read_schema.js +6 -108
  83. package/testutils/builder.d.ts +6 -3
  84. package/testutils/builder.js +31 -15
  85. package/testutils/db/test_db.d.ts +16 -8
  86. package/testutils/db/test_db.js +65 -9
  87. package/testutils/db_mock.js +5 -5
  88. package/testutils/ent-graphql-tests/index.d.ts +1 -0
  89. package/testutils/ent-graphql-tests/index.js +13 -13
  90. package/testutils/fake_comms.d.ts +1 -0
  91. package/testutils/fake_comms.js +4 -0
  92. package/testutils/fake_data/const.d.ts +5 -1
  93. package/testutils/fake_data/const.js +19 -1
  94. package/testutils/fake_data/events_query.d.ts +16 -11
  95. package/testutils/fake_data/events_query.js +15 -0
  96. package/testutils/fake_data/fake_contact.js +9 -9
  97. package/testutils/fake_data/fake_event.js +14 -14
  98. package/testutils/fake_data/fake_user.js +12 -10
  99. package/testutils/fake_data/test_helpers.d.ts +5 -1
  100. package/testutils/fake_data/test_helpers.js +49 -16
  101. package/testutils/fake_data/user_query.d.ts +25 -9
  102. package/testutils/fake_data/user_query.js +52 -5
  103. package/testutils/parse_sql.js +19 -3
  104. 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
- assert_1.fail("error creating user");
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
- static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToIncomingFriendRequestsQuery;
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;
@@ -74,7 +74,7 @@ function getColumns(cols) {
74
74
  count = true;
75
75
  }
76
76
  else {
77
- fail("unsupported expr type");
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) {
@@ -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();