@snowtop/ent 0.1.0-alpha9 → 0.1.0-alpha91

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 (135) hide show
  1. package/action/action.d.ts +36 -31
  2. package/action/action.js +2 -6
  3. package/action/executor.d.ts +3 -3
  4. package/action/executor.js +2 -2
  5. package/action/experimental_action.d.ts +29 -22
  6. package/action/experimental_action.js +29 -6
  7. package/action/orchestrator.d.ts +38 -16
  8. package/action/orchestrator.js +223 -61
  9. package/action/privacy.d.ts +2 -2
  10. package/core/base.d.ts +45 -24
  11. package/core/base.js +7 -1
  12. package/core/clause.d.ts +83 -7
  13. package/core/clause.js +334 -63
  14. package/core/config.d.ts +8 -0
  15. package/core/config.js +5 -1
  16. package/core/context.d.ts +5 -3
  17. package/core/context.js +20 -2
  18. package/core/convert.d.ts +1 -1
  19. package/core/db.d.ts +2 -2
  20. package/core/db.js +6 -2
  21. package/core/ent.d.ts +79 -24
  22. package/core/ent.js +527 -176
  23. package/core/loaders/assoc_count_loader.d.ts +3 -2
  24. package/core/loaders/assoc_count_loader.js +14 -2
  25. package/core/loaders/assoc_edge_loader.d.ts +2 -2
  26. package/core/loaders/assoc_edge_loader.js +5 -1
  27. package/core/loaders/index.d.ts +1 -1
  28. package/core/loaders/index.js +1 -3
  29. package/core/loaders/index_loader.d.ts +2 -2
  30. package/core/loaders/loader.js +5 -5
  31. package/core/loaders/object_loader.d.ts +6 -5
  32. package/core/loaders/object_loader.js +67 -59
  33. package/core/loaders/query_loader.d.ts +6 -12
  34. package/core/loaders/query_loader.js +52 -11
  35. package/core/loaders/raw_count_loader.d.ts +2 -2
  36. package/core/loaders/raw_count_loader.js +5 -1
  37. package/core/logger.d.ts +1 -1
  38. package/core/logger.js +1 -0
  39. package/core/privacy.d.ts +26 -25
  40. package/core/privacy.js +21 -25
  41. package/core/query/assoc_query.d.ts +7 -6
  42. package/core/query/assoc_query.js +9 -1
  43. package/core/query/custom_clause_query.d.ts +26 -0
  44. package/core/query/custom_clause_query.js +78 -0
  45. package/core/query/custom_query.d.ts +20 -5
  46. package/core/query/custom_query.js +87 -12
  47. package/core/query/index.d.ts +1 -0
  48. package/core/query/index.js +3 -1
  49. package/core/query/query.d.ts +8 -4
  50. package/core/query/query.js +101 -53
  51. package/core/query/shared_assoc_test.d.ts +2 -1
  52. package/core/query/shared_assoc_test.js +34 -43
  53. package/core/query/shared_test.d.ts +8 -1
  54. package/core/query/shared_test.js +470 -236
  55. package/core/viewer.d.ts +3 -3
  56. package/core/viewer.js +1 -1
  57. package/graphql/graphql.js +16 -6
  58. package/graphql/query/edge_connection.d.ts +9 -9
  59. package/graphql/query/page_info.d.ts +1 -1
  60. package/graphql/query/shared_edge_connection.js +1 -15
  61. package/imports/index.js +5 -1
  62. package/index.d.ts +11 -5
  63. package/index.js +20 -7
  64. package/package.json +1 -1
  65. package/parse_schema/parse.d.ts +12 -3
  66. package/parse_schema/parse.js +70 -11
  67. package/schema/base_schema.js +3 -0
  68. package/schema/field.d.ts +44 -8
  69. package/schema/field.js +136 -10
  70. package/schema/index.d.ts +2 -2
  71. package/schema/index.js +5 -1
  72. package/schema/json_field.d.ts +13 -1
  73. package/schema/json_field.js +28 -1
  74. package/schema/schema.d.ts +66 -11
  75. package/schema/schema.js +18 -4
  76. package/schema/struct_field.d.ts +11 -1
  77. package/schema/struct_field.js +44 -5
  78. package/scripts/custom_compiler.js +10 -6
  79. package/scripts/custom_graphql.js +13 -4
  80. package/scripts/{transform_schema.d.ts → migrate_v0.1.d.ts} +0 -0
  81. package/scripts/migrate_v0.1.js +36 -0
  82. package/scripts/read_schema.js +20 -5
  83. package/testutils/builder.d.ts +31 -21
  84. package/testutils/builder.js +83 -29
  85. package/testutils/db/fixture.d.ts +10 -0
  86. package/testutils/db/fixture.js +26 -0
  87. package/testutils/db/{test_db.d.ts → temp_db.d.ts} +20 -7
  88. package/testutils/db/{test_db.js → temp_db.js} +102 -36
  89. package/testutils/db/value.d.ts +6 -0
  90. package/testutils/db/value.js +251 -0
  91. package/testutils/db_mock.js +3 -1
  92. package/testutils/db_time_zone.d.ts +4 -0
  93. package/testutils/db_time_zone.js +41 -0
  94. package/testutils/ent-graphql-tests/index.js +8 -1
  95. package/testutils/fake_data/const.d.ts +2 -1
  96. package/testutils/fake_data/const.js +3 -0
  97. package/testutils/fake_data/fake_contact.d.ts +7 -4
  98. package/testutils/fake_data/fake_contact.js +14 -6
  99. package/testutils/fake_data/fake_event.d.ts +5 -3
  100. package/testutils/fake_data/fake_event.js +8 -5
  101. package/testutils/fake_data/fake_tag.d.ts +35 -0
  102. package/testutils/fake_data/fake_tag.js +88 -0
  103. package/testutils/fake_data/fake_user.d.ts +6 -4
  104. package/testutils/fake_data/fake_user.js +16 -13
  105. package/testutils/fake_data/index.js +5 -1
  106. package/testutils/fake_data/internal.d.ts +2 -0
  107. package/testutils/fake_data/internal.js +7 -1
  108. package/testutils/fake_data/tag_query.d.ts +13 -0
  109. package/testutils/fake_data/tag_query.js +43 -0
  110. package/testutils/fake_data/test_helpers.d.ts +11 -4
  111. package/testutils/fake_data/test_helpers.js +28 -12
  112. package/testutils/fake_data/user_query.d.ts +13 -6
  113. package/testutils/fake_data/user_query.js +54 -22
  114. package/testutils/fake_log.d.ts +3 -3
  115. package/testutils/parse_sql.d.ts +6 -0
  116. package/testutils/parse_sql.js +16 -2
  117. package/testutils/test_edge_global_schema.d.ts +15 -0
  118. package/testutils/test_edge_global_schema.js +62 -0
  119. package/testutils/write.d.ts +2 -2
  120. package/testutils/write.js +33 -7
  121. package/tsc/ast.d.ts +44 -0
  122. package/tsc/ast.js +271 -0
  123. package/tsc/compilerOptions.d.ts +6 -0
  124. package/tsc/compilerOptions.js +45 -2
  125. package/tsc/move_generated.d.ts +1 -0
  126. package/tsc/move_generated.js +164 -0
  127. package/tsc/transform.d.ts +21 -0
  128. package/tsc/transform.js +171 -0
  129. package/tsc/transform_action.d.ts +22 -0
  130. package/tsc/transform_action.js +183 -0
  131. package/tsc/transform_ent.d.ts +17 -0
  132. package/tsc/transform_ent.js +59 -0
  133. package/tsc/transform_schema.d.ts +27 -0
  134. package/tsc/transform_schema.js +383 -0
  135. package/scripts/transform_schema.js +0 -445
@@ -6,19 +6,23 @@ const viewer_1 = require("../../core/viewer");
6
6
  const ent_1 = require("../../core/ent");
7
7
  const snake_case_1 = require("snake-case");
8
8
  const write_1 = require("../write");
9
- const test_db_1 = require("../db/test_db");
9
+ const temp_db_1 = require("../db/temp_db");
10
10
  const _1 = require(".");
11
11
  const fake_event_1 = require("./fake_event");
12
12
  const const_1 = require("./const");
13
13
  const mock_date_1 = require("./../mock_date");
14
14
  const builder_1 = require("../builder");
15
15
  const action_1 = require("../../action");
16
+ const fake_tag_1 = require("./fake_tag");
17
+ const db_1 = require("../../core/db");
16
18
  function getContactInput(user, input) {
17
19
  return {
18
20
  firstName: "Jon",
19
21
  lastName: "Snow",
20
22
  emailAddress: "foo@bar.com",
21
23
  userID: user.id,
24
+ createdAt: new Date(),
25
+ updatedAt: new Date(),
22
26
  ...input,
23
27
  };
24
28
  }
@@ -30,6 +34,8 @@ function getUserInput(input) {
30
34
  emailAddress: "foo@bar.com",
31
35
  phoneNumber: "415-212-1212",
32
36
  password: "pa$$w0rd",
37
+ createdAt: new Date(),
38
+ updatedAt: new Date(),
33
39
  ...input,
34
40
  };
35
41
  }
@@ -41,6 +47,8 @@ function getEventInput(user, input) {
41
47
  title: "title",
42
48
  description: "fun event",
43
49
  userID: user.id,
50
+ createdAt: new Date(),
51
+ updatedAt: new Date(),
44
52
  ...input,
45
53
  };
46
54
  }
@@ -82,22 +90,29 @@ exports.inputs = [
82
90
  lastName: "Stark",
83
91
  },
84
92
  ];
85
- async function createAllContacts(input, slice) {
86
- const user = await createTestUser(input);
93
+ async function createAllContacts(opts) {
94
+ let { input, slice, user } = opts || {};
95
+ if (!user) {
96
+ user = await createTestUser(input);
97
+ }
98
+ const userr = user;
99
+ if (opts?.start) {
100
+ (0, jest_date_mock_1.advanceTo)(opts.start);
101
+ }
87
102
  let userInputs = exports.inputs.slice(0, slice || exports.inputs.length);
88
103
  const contacts = await Promise.all(userInputs.map(async (input) => {
89
104
  // just to make times deterministic so that tests can consistently work
90
105
  (0, jest_date_mock_1.advanceBy)(100);
91
- const builder = (0, _1.getContactBuilder)(user.viewer, getContactInput(user, input));
106
+ const builder = (0, _1.getContactBuilder)(userr.viewer, getContactInput(userr, input));
92
107
  // add edge from user to contact
93
- builder.orchestrator.addInboundEdge(user.id, _1.EdgeType.UserToContacts, const_1.NodeType.FakeUser, {
108
+ builder.orchestrator.addInboundEdge(userr.id, _1.EdgeType.UserToContacts, const_1.NodeType.FakeUser, {
94
109
  time: new Date(), // set time to advanceBy time
95
110
  });
96
111
  await builder.saveX();
97
112
  return await builder.editedEntX();
98
113
  }));
99
114
  expect(contacts.length).toBe(userInputs.length);
100
- return [user, contacts];
115
+ return [userr, contacts];
101
116
  }
102
117
  exports.createAllContacts = createAllContacts;
103
118
  async function createUserPlusFriendRequests(input, slice) {
@@ -208,22 +223,23 @@ async function createTestEvent(user, input) {
208
223
  return await builder.editedEntX();
209
224
  }
210
225
  exports.createTestEvent = createTestEvent;
211
- async function setupTempDB() {
212
- const tdb = new test_db_1.TempDB(tempDBTables());
226
+ async function setupTempDB(global = false) {
227
+ const tdb = new temp_db_1.TempDB(db_1.Dialect.Postgres, tempDBTables(global));
213
228
  await tdb.beforeAll();
214
229
  // create once
215
230
  await createEdges();
216
231
  return tdb;
217
232
  }
218
233
  exports.setupTempDB = setupTempDB;
219
- function tempDBTables() {
234
+ function tempDBTables(global = false) {
220
235
  const tables = [
221
236
  _1.FakeUser.getTestTable(),
222
237
  _1.FakeContact.getTestTable(),
223
238
  fake_event_1.FakeEvent.getTestTable(),
224
- (0, test_db_1.assoc_edge_config_table)(),
239
+ fake_tag_1.FakeTag.getTestTable(),
240
+ (0, temp_db_1.assoc_edge_config_table)(),
225
241
  ];
226
- edgeTableNames().forEach((tableName) => tables.push((0, test_db_1.assoc_edge_table)(tableName)));
242
+ edgeTableNames().forEach((tableName) => tables.push((0, temp_db_1.assoc_edge_table)(tableName, global)));
227
243
  return tables;
228
244
  }
229
245
  exports.tempDBTables = tempDBTables;
@@ -232,7 +248,7 @@ async function createAllEvents(opts) {
232
248
  let arr = new Array(opts.howMany);
233
249
  arr.fill(1);
234
250
  // start at date in case something else has used a date already
235
- (0, jest_date_mock_1.advanceTo)(mock_date_1.MockDate.getDate());
251
+ (0, jest_date_mock_1.advanceTo)(opts.startTime || mock_date_1.MockDate.getDate());
236
252
  const events = await Promise.all(arr.map(async (v, idx) => {
237
253
  // just to make times deterministic so that tests can consistently work
238
254
  if (opts.interval > 0) {
@@ -5,7 +5,6 @@ import * as clause from "../../core/clause";
5
5
  import { AssocEdgeQueryBase, EdgeQuerySource } from "../../core/query/assoc_query";
6
6
  import { FakeUser, FakeEvent, FakeContact, EventToAttendeesQuery, EventToDeclinedQuery, EventToHostsQuery, EventToInvitedQuery, EventToMaybeQuery } from "./internal";
7
7
  import { RawCountLoaderFactory } from "../../core/loaders/raw_count_loader";
8
- import { IndexLoaderFactory } from "../../core/loaders/index_loader";
9
8
  import { QueryLoaderFactory } from "../../core/loaders/query_loader";
10
9
  export declare class UserToContactsQuery extends AssocEdgeQueryBase<FakeUser, FakeContact, AssocEdge> {
11
10
  constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
@@ -13,12 +12,22 @@ export declare class UserToContactsQuery extends AssocEdgeQueryBase<FakeUser, Fa
13
12
  sourceEnt(id: ID): Promise<FakeUser | null>;
14
13
  }
15
14
  export declare const userToContactsCountLoaderFactory: RawCountLoaderFactory;
16
- export declare const userToContactsDataLoaderFactory: IndexLoaderFactory;
15
+ export declare const userToContactsDataLoaderFactory: QueryLoaderFactory<unknown>;
16
+ export declare class UserToContactsFkeyQueryDeprecated extends CustomEdgeQueryBase<FakeUser, FakeContact> {
17
+ constructor(viewer: Viewer, src: ID | FakeUser);
18
+ static query(viewer: Viewer, src: FakeUser | ID): UserToContactsFkeyQueryDeprecated;
19
+ sourceEnt(id: ID): Promise<FakeUser | null>;
20
+ }
17
21
  export declare class UserToContactsFkeyQuery extends CustomEdgeQueryBase<FakeUser, FakeContact> {
18
22
  constructor(viewer: Viewer, src: ID | FakeUser);
19
23
  static query(viewer: Viewer, src: FakeUser | ID): UserToContactsFkeyQuery;
20
24
  sourceEnt(id: ID): Promise<FakeUser | null>;
21
25
  }
26
+ export declare class UserToContactsFkeyQueryAsc extends CustomEdgeQueryBase<FakeUser, FakeContact> {
27
+ constructor(viewer: Viewer, src: ID | FakeUser);
28
+ static query(viewer: Viewer, src: FakeUser | ID): UserToContactsFkeyQuery;
29
+ sourceEnt(id: ID): Promise<FakeUser | null>;
30
+ }
22
31
  export declare class UserToFriendsQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, AssocEdge> {
23
32
  constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser>);
24
33
  static query(viewer: Viewer, src: EdgeQuerySource<FakeUser>): UserToFriendsQuery;
@@ -53,7 +62,7 @@ export declare class UserToFriendRequestsQuery extends AssocEdgeQueryBase<FakeUs
53
62
  }
54
63
  export declare class UserToIncomingFriendRequestsQuery extends AssocEdgeQueryBase<FakeUser, FakeUser, AssocEdge> {
55
64
  constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>);
56
- getPrivacyPolicy(): import("../../core/base").PrivacyPolicy<Ent>;
65
+ getPrivacyPolicy(): import("../../core/base").PrivacyPolicy<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>>;
57
66
  sourceEnt(id: ID): Promise<FakeUser | null>;
58
67
  static query(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>): UserToIncomingFriendRequestsQuery;
59
68
  queryContacts(): UserToContactsQuery;
@@ -84,13 +93,11 @@ export declare class UserToHostedEventsQuery extends AssocEdgeQueryBase<FakeUser
84
93
  }
85
94
  export declare const getNextWeekClause: () => clause.Clause;
86
95
  export declare function getCompleteClause(id: ID): clause.Clause;
87
- export declare const userToEventsInNextWeekCountLoaderFactory: RawCountLoaderFactory;
88
- export declare const userToEventsInNextWeekDataLoaderFactory: QueryLoaderFactory<unknown>;
89
96
  export declare class UserToEventsInNextWeekQuery extends CustomEdgeQueryBase<FakeUser, FakeEvent> {
90
97
  constructor(viewer: Viewer, src: ID | FakeUser);
91
98
  static query(viewer: Viewer, src: FakeUser | ID): UserToEventsInNextWeekQuery;
92
99
  sourceEnt(id: ID): Promise<FakeUser | null>;
93
- getPrivacyPolicy(): import("../../core/base").PrivacyPolicy<Ent>;
100
+ getPrivacyPolicy(): import("../../core/base").PrivacyPolicy<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>>;
94
101
  }
95
102
  export declare class UserToFollowingQuery extends AssocEdgeQueryBase<FakeUser, Ent, AssocEdge> {
96
103
  constructor(viewer: Viewer, src: EdgeQuerySource<FakeUser, FakeUser>);
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -19,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
23
  return result;
20
24
  };
21
25
  Object.defineProperty(exports, "__esModule", { value: true });
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;
26
+ exports.UserToFollowingQuery = exports.UserToEventsInNextWeekQuery = exports.getCompleteClause = exports.getNextWeekClause = exports.UserToHostedEventsQuery = exports.UserToEventsAttendingQuery = exports.UserToIncomingFriendRequestsQuery = exports.UserToFriendRequestsQuery = exports.UserToCustomEdgeQuery = exports.CustomEdge = exports.UserToFriendsQuery = exports.UserToContactsFkeyQueryAsc = exports.UserToContactsFkeyQuery = exports.UserToContactsFkeyQueryDeprecated = exports.userToContactsDataLoaderFactory = exports.userToContactsCountLoaderFactory = exports.UserToContactsQuery = void 0;
23
27
  const custom_query_1 = require("../../core/query/custom_query");
24
28
  const ent_1 = require("../../core/ent");
25
29
  const clause = __importStar(require("../../core/clause"));
@@ -28,7 +32,6 @@ const internal_1 = require("./internal");
28
32
  const raw_count_loader_1 = require("../../core/loaders/raw_count_loader");
29
33
  const assoc_count_loader_1 = require("../../core/loaders/assoc_count_loader");
30
34
  const assoc_edge_loader_1 = require("../../core/loaders/assoc_edge_loader");
31
- const index_loader_1 = require("../../core/loaders/index_loader");
32
35
  const fake_contact_1 = require("./fake_contact");
33
36
  const jest_date_mock_1 = require("jest-date-mock");
34
37
  const luxon_1 = require("luxon");
@@ -52,10 +55,13 @@ exports.userToContactsCountLoaderFactory = new raw_count_loader_1.RawCountLoader
52
55
  ...internal_1.FakeContact.loaderOptions(),
53
56
  groupCol: "user_id",
54
57
  });
55
- exports.userToContactsDataLoaderFactory = new index_loader_1.IndexLoaderFactory(internal_1.FakeContact.loaderOptions(), "user_id", {
58
+ exports.userToContactsDataLoaderFactory = new query_loader_1.QueryLoaderFactory({
59
+ ...internal_1.FakeContact.loaderOptions(),
60
+ groupCol: "user_id",
56
61
  toPrime: [fake_contact_1.contactLoader],
57
62
  });
58
- class UserToContactsFkeyQuery extends custom_query_1.CustomEdgeQueryBase {
63
+ // note: this is still used in graphql tests...
64
+ class UserToContactsFkeyQueryDeprecated extends custom_query_1.CustomEdgeQueryBase {
59
65
  constructor(viewer, src) {
60
66
  super(viewer, {
61
67
  src,
@@ -63,6 +69,27 @@ class UserToContactsFkeyQuery extends custom_query_1.CustomEdgeQueryBase {
63
69
  countLoaderFactory: exports.userToContactsCountLoaderFactory,
64
70
  dataLoaderFactory: exports.userToContactsDataLoaderFactory,
65
71
  options: internal_1.FakeContact.loaderOptions(),
72
+ sortColumn: "created_at",
73
+ });
74
+ }
75
+ static query(viewer, src) {
76
+ return new UserToContactsFkeyQueryDeprecated(viewer, src);
77
+ }
78
+ sourceEnt(id) {
79
+ return internal_1.FakeUser.load(this.viewer, id);
80
+ }
81
+ }
82
+ exports.UserToContactsFkeyQueryDeprecated = UserToContactsFkeyQueryDeprecated;
83
+ // this replaces UserToContactsFkeyQueryDeprecated
84
+ class UserToContactsFkeyQuery extends custom_query_1.CustomEdgeQueryBase {
85
+ constructor(viewer, src) {
86
+ super(viewer, {
87
+ src,
88
+ loadEntOptions: internal_1.FakeContact.loaderOptions(),
89
+ groupCol: "user_id",
90
+ name: "user_to_contacts",
91
+ // instead of the id col...
92
+ sortColumn: "created_at",
66
93
  });
67
94
  }
68
95
  static query(viewer, src) {
@@ -73,6 +100,24 @@ class UserToContactsFkeyQuery extends custom_query_1.CustomEdgeQueryBase {
73
100
  }
74
101
  }
75
102
  exports.UserToContactsFkeyQuery = UserToContactsFkeyQuery;
103
+ class UserToContactsFkeyQueryAsc extends custom_query_1.CustomEdgeQueryBase {
104
+ constructor(viewer, src) {
105
+ super(viewer, {
106
+ src,
107
+ loadEntOptions: internal_1.FakeContact.loaderOptions(),
108
+ groupCol: "user_id",
109
+ name: "user_to_contacts",
110
+ sortColumn: "created_at ASC",
111
+ });
112
+ }
113
+ static query(viewer, src) {
114
+ return new UserToContactsFkeyQueryAsc(viewer, src);
115
+ }
116
+ sourceEnt(id) {
117
+ return internal_1.FakeUser.load(this.viewer, id);
118
+ }
119
+ }
120
+ exports.UserToContactsFkeyQueryAsc = UserToContactsFkeyQueryAsc;
76
121
  class UserToFriendsQuery extends assoc_query_1.AssocEdgeQueryBase {
77
122
  constructor(viewer, src) {
78
123
  super(viewer, src, new assoc_count_loader_1.AssocEdgeCountLoaderFactory(internal_1.EdgeType.UserToFriends), new assoc_edge_loader_1.AssocEdgeLoaderFactory(internal_1.EdgeType.UserToFriends, ent_1.AssocEdge), internal_1.FakeUser.loaderOptions());
@@ -257,27 +302,14 @@ function getCompleteClause(id) {
257
302
  return clause.And(clause.Eq("user_id", id), (0, exports.getNextWeekClause)());
258
303
  }
259
304
  exports.getCompleteClause = getCompleteClause;
260
- exports.userToEventsInNextWeekCountLoaderFactory = new raw_count_loader_1.RawCountLoaderFactory({
261
- ...internal_1.FakeEvent.loaderOptions(),
262
- groupCol: "user_id",
263
- clause: (0, exports.getNextWeekClause)(),
264
- });
265
- exports.userToEventsInNextWeekDataLoaderFactory = new query_loader_1.QueryLoaderFactory({
266
- ...internal_1.FakeEvent.loaderOptions(),
267
- groupCol: "user_id",
268
- clause: (0, exports.getNextWeekClause)(),
269
- toPrime: [fake_contact_1.contactLoader],
270
- sortColumn: "start_time",
271
- });
272
305
  class UserToEventsInNextWeekQuery extends custom_query_1.CustomEdgeQueryBase {
273
306
  constructor(viewer, src) {
274
307
  super(viewer, {
275
308
  src,
276
- // we want to reuse this and not create a new one every time...
277
- countLoaderFactory: exports.userToEventsInNextWeekCountLoaderFactory,
278
- dataLoaderFactory: exports.userToEventsInNextWeekDataLoaderFactory,
279
- options: internal_1.FakeEvent.loaderOptions(),
280
- // hmm TODO shouldn't need to write this twice...
309
+ groupCol: "user_id",
310
+ clause: (0, exports.getNextWeekClause)(),
311
+ loadEntOptions: internal_1.FakeEvent.loaderOptions(),
312
+ name: "events_in_next_week",
281
313
  sortColumn: "start_time",
282
314
  });
283
315
  }
@@ -1,4 +1,4 @@
1
- import { Ent } from "../core/base";
1
+ import { Ent, Viewer } from "../core/base";
2
2
  import { Builder } from "./../action";
3
3
  export declare class FakeLogger {
4
4
  private static logs;
@@ -8,6 +8,6 @@ export declare class FakeLogger {
8
8
  static contains(line: string): boolean;
9
9
  static clear(): void;
10
10
  }
11
- export declare class EntCreationObserver<T extends Ent> {
12
- observe(builder: Builder<T>): Promise<void>;
11
+ export declare class EntCreationObserver<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
12
+ observe(builder: Builder<TEnt, TViewer>): Promise<void>;
13
13
  }
@@ -9,6 +9,12 @@ export declare class EqOp {
9
9
  constructor(col: string, value: any);
10
10
  apply(data: Data): boolean;
11
11
  }
12
+ export declare class NotEqOp {
13
+ private col;
14
+ private value;
15
+ constructor(col: string, value: any);
16
+ apply(data: Data): boolean;
17
+ }
12
18
  export declare class GreaterOp {
13
19
  private col;
14
20
  private value;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.performQuery = exports.OrOp = exports.AndOp = exports.InOp = exports.LessEqOp = exports.GreaterEqOp = exports.LessOp = exports.GreaterOp = exports.EqOp = exports.getDataToReturn = void 0;
3
+ exports.performQuery = exports.OrOp = exports.AndOp = exports.InOp = exports.LessEqOp = exports.GreaterEqOp = exports.LessOp = exports.GreaterOp = exports.NotEqOp = exports.EqOp = exports.getDataToReturn = void 0;
4
4
  const node_sql_parser_1 = require("node-sql-parser");
5
5
  function getTableName(table) {
6
6
  if (Array.isArray(table)) {
@@ -184,6 +184,16 @@ class EqOp {
184
184
  }
185
185
  }
186
186
  exports.EqOp = EqOp;
187
+ class NotEqOp {
188
+ constructor(col, value) {
189
+ this.col = col;
190
+ this.value = value;
191
+ }
192
+ apply(data) {
193
+ return data[this.col] !== this.value;
194
+ }
195
+ }
196
+ exports.NotEqOp = NotEqOp;
187
197
  class GreaterOp {
188
198
  constructor(col, value) {
189
199
  this.col = col;
@@ -307,8 +317,12 @@ function getOp(where, values) {
307
317
  return new AndOp([getOp(where.left, values), getOp(where.right, values)]);
308
318
  case "OR":
309
319
  return new OrOp([getOp(where.left, values), getOp(where.right, values)]);
320
+ case "IS":
321
+ return new EqOp(getColumnFromRef(where.left), where.right?.value);
322
+ case "IS NOT":
323
+ return new NotEqOp(getColumnFromRef(where.left), where.right?.value);
310
324
  default:
311
- console.log(where);
325
+ console.debug(where);
312
326
  throw new Error(`unsupported op ${where.operator}`);
313
327
  }
314
328
  }
@@ -0,0 +1,15 @@
1
+ import { EdgeUpdateOperation, TransformedEdgeUpdateOperation } from "../schema";
2
+ import * as clause from "../core/clause";
3
+ import { AssocEdge } from "../core/ent";
4
+ import { Data } from "../core/base";
5
+ export declare class EdgeWithDeletedAt extends AssocEdge {
6
+ deletedAt: Date | null;
7
+ constructor(data: Data);
8
+ }
9
+ export declare const testEdgeGlobalSchema: {
10
+ extraEdgeFields: {
11
+ deletedAt: import("../schema").TimestampField;
12
+ };
13
+ transformEdgeRead(): clause.Clause;
14
+ transformEdgeWrite(stmt: EdgeUpdateOperation): TransformedEdgeUpdateOperation | null;
15
+ };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.testEdgeGlobalSchema = exports.EdgeWithDeletedAt = void 0;
27
+ const schema_1 = require("../schema");
28
+ const clause = __importStar(require("../core/clause"));
29
+ const ent_1 = require("../core/ent");
30
+ class EdgeWithDeletedAt extends ent_1.AssocEdge {
31
+ constructor(data) {
32
+ super(data);
33
+ this.deletedAt = data.deleted_at;
34
+ }
35
+ }
36
+ exports.EdgeWithDeletedAt = EdgeWithDeletedAt;
37
+ exports.testEdgeGlobalSchema = {
38
+ extraEdgeFields: {
39
+ // need this to be lowerCamelCase because we do this based on field name
40
+ // #510
41
+ deletedAt: (0, schema_1.TimestampType)({
42
+ nullable: true,
43
+ index: true,
44
+ defaultValueOnCreate: () => null,
45
+ }),
46
+ },
47
+ transformEdgeRead() {
48
+ return clause.Eq("deleted_at", null);
49
+ },
50
+ transformEdgeWrite(stmt) {
51
+ switch (stmt.op) {
52
+ case schema_1.SQLStatementOperation.Delete:
53
+ return {
54
+ op: schema_1.SQLStatementOperation.Update,
55
+ data: {
56
+ deleted_at: new Date(),
57
+ },
58
+ };
59
+ }
60
+ return null;
61
+ },
62
+ };
@@ -1,5 +1,5 @@
1
- import { EditRowOptions, Data, ID, DataOptions, CreateRowOptions } from "../core/base";
1
+ import { EditRowOptions, Data, DataOptions, CreateRowOptions } from "../core/base";
2
2
  import * as clause from "../core/clause";
3
3
  export declare function createRowForTest(options: CreateRowOptions, suffix?: string): Promise<Data | null>;
4
- export declare function editRowForTest(options: EditRowOptions, id: ID, suffix?: string): Promise<Data | null>;
4
+ export declare function editRowForTest(options: EditRowOptions, suffix?: string): Promise<Data | null>;
5
5
  export declare function deleteRowsForTest(options: DataOptions, cls: clause.Clause): Promise<void>;
@@ -1,16 +1,42 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
4
24
  };
5
25
  Object.defineProperty(exports, "__esModule", { value: true });
6
26
  exports.deleteRowsForTest = exports.editRowForTest = exports.createRowForTest = void 0;
7
27
  const ent_1 = require("../core/ent");
8
- const db_1 = __importDefault(require("../core/db"));
28
+ const db_1 = __importStar(require("../core/db"));
9
29
  function isSyncClient(client) {
10
30
  return client.execSync !== undefined;
11
31
  }
12
32
  async function createRowForTest(options, suffix) {
13
- const client = await db_1.default.getInstance().getNewClient();
33
+ let client;
34
+ if (db_1.Dialect.SQLite === db_1.default.getDialect()) {
35
+ client = db_1.default.getInstance().getSQLiteClient();
36
+ }
37
+ else {
38
+ client = await db_1.default.getInstance().getNewClient();
39
+ }
14
40
  try {
15
41
  if (isSyncClient(client)) {
16
42
  return (0, ent_1.createRowSync)(client, options, suffix || "");
@@ -22,13 +48,13 @@ async function createRowForTest(options, suffix) {
22
48
  }
23
49
  }
24
50
  exports.createRowForTest = createRowForTest;
25
- async function editRowForTest(options, id, suffix) {
51
+ async function editRowForTest(options, suffix) {
26
52
  const client = await db_1.default.getInstance().getNewClient();
27
53
  try {
28
54
  if (isSyncClient(client)) {
29
- return (0, ent_1.editRowSync)(client, options, id, suffix || "");
55
+ return (0, ent_1.editRowSync)(client, options, suffix || "");
30
56
  }
31
- return await (0, ent_1.editRow)(client, options, id, suffix);
57
+ return await (0, ent_1.editRow)(client, options, suffix);
32
58
  }
33
59
  finally {
34
60
  client.release();
package/tsc/ast.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ import ts from "typescript";
2
+ export declare function getPreText(fileContents: string, node: ts.Node, sourceFile: ts.SourceFile): string;
3
+ export interface ClassInfo {
4
+ extends?: string;
5
+ comment: string;
6
+ name: string;
7
+ export?: boolean;
8
+ default?: boolean;
9
+ implements?: string[];
10
+ wrapClassContents(inner: string): string;
11
+ }
12
+ export declare function getClassInfo(fileContents: string, sourceFile: ts.SourceFile, node: ts.ClassDeclaration): ClassInfo | undefined;
13
+ declare type transformImportFn = (imp: string) => string;
14
+ interface transformOpts {
15
+ removeImports?: string[];
16
+ newImports?: string[];
17
+ transform?: transformImportFn;
18
+ transformPath: string;
19
+ }
20
+ export declare function transformImport(fileContents: string, importNode: ts.ImportDeclaration, sourceFile: ts.SourceFile, opts: transformOpts): string | undefined;
21
+ export declare function updateImportPath(fileContents: string, importNode: ts.ImportDeclaration, sourceFile: ts.SourceFile, newPath: string): string | undefined;
22
+ export declare function isRelativeImport(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): boolean;
23
+ export declare function isRelativeGeneratedImport(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): boolean;
24
+ export declare function isSrcGeneratedImport(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): boolean;
25
+ interface importInfo {
26
+ imports: string[];
27
+ start: number;
28
+ end: number;
29
+ importText: string;
30
+ importPath: string;
31
+ default?: string;
32
+ }
33
+ export declare function getImportInfo(imp: ts.ImportDeclaration, sourceFile: ts.SourceFile): importInfo | undefined;
34
+ export declare function transformRelative(file: string, importPath: string, relative?: boolean): string;
35
+ export interface customInfo {
36
+ viewerInfo: {
37
+ path: string;
38
+ name: string;
39
+ };
40
+ relativeImports?: boolean;
41
+ globalSchemaPath?: string;
42
+ }
43
+ export declare function getCustomInfo(): customInfo;
44
+ export {};