@snowtop/ent 0.1.0-alpha160-test7 → 0.1.0-alpha161-test1

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 (317) hide show
  1. package/{dist/core → core}/query/assoc_query.d.ts +3 -0
  2. package/{dist/core → core}/query/assoc_query.js +71 -0
  3. package/{dist/core → core}/query/query.d.ts +3 -0
  4. package/{dist/core → core}/query/query.js +20 -6
  5. package/core/query/shared_assoc_test.d.ts +2 -0
  6. package/core/query/shared_assoc_test.js +1089 -0
  7. package/core/query/shared_test.d.ts +21 -0
  8. package/core/query/shared_test.js +736 -0
  9. package/graphql/query/shared_assoc_test.d.ts +1 -0
  10. package/graphql/query/shared_assoc_test.js +203 -0
  11. package/package.json +8 -53
  12. package/{dist/testutils → testutils}/fake_data/test_helpers.js +2 -1
  13. package/dist/package.json +0 -64
  14. package/src/action/action.ts +0 -330
  15. package/src/action/executor.ts +0 -453
  16. package/src/action/experimental_action.ts +0 -277
  17. package/src/action/index.ts +0 -31
  18. package/src/action/operations.ts +0 -967
  19. package/src/action/orchestrator.ts +0 -1527
  20. package/src/action/privacy.ts +0 -37
  21. package/src/action/relative_value.ts +0 -242
  22. package/src/action/transaction.ts +0 -38
  23. package/src/auth/auth.ts +0 -77
  24. package/src/auth/index.ts +0 -8
  25. package/src/core/base.ts +0 -367
  26. package/src/core/clause.ts +0 -1065
  27. package/src/core/config.ts +0 -219
  28. package/src/core/const.ts +0 -5
  29. package/src/core/context.ts +0 -135
  30. package/src/core/convert.ts +0 -106
  31. package/src/core/date.ts +0 -23
  32. package/src/core/db.ts +0 -498
  33. package/src/core/ent.ts +0 -1740
  34. package/src/core/global_schema.ts +0 -49
  35. package/src/core/loaders/assoc_count_loader.ts +0 -99
  36. package/src/core/loaders/assoc_edge_loader.ts +0 -250
  37. package/src/core/loaders/index.ts +0 -12
  38. package/src/core/loaders/loader.ts +0 -66
  39. package/src/core/loaders/object_loader.ts +0 -489
  40. package/src/core/loaders/query_loader.ts +0 -314
  41. package/src/core/loaders/raw_count_loader.ts +0 -175
  42. package/src/core/logger.ts +0 -49
  43. package/src/core/privacy.ts +0 -660
  44. package/src/core/query/assoc_query.ts +0 -240
  45. package/src/core/query/custom_clause_query.ts +0 -174
  46. package/src/core/query/custom_query.ts +0 -302
  47. package/src/core/query/index.ts +0 -9
  48. package/src/core/query/query.ts +0 -674
  49. package/src/core/query_impl.ts +0 -32
  50. package/src/core/viewer.ts +0 -52
  51. package/src/ent.code-workspace +0 -73
  52. package/src/graphql/builtins/connection.ts +0 -25
  53. package/src/graphql/builtins/edge.ts +0 -16
  54. package/src/graphql/builtins/node.ts +0 -12
  55. package/src/graphql/graphql.ts +0 -891
  56. package/src/graphql/graphql_field_helpers.ts +0 -221
  57. package/src/graphql/index.ts +0 -42
  58. package/src/graphql/mutations/union.ts +0 -39
  59. package/src/graphql/node_resolver.ts +0 -122
  60. package/src/graphql/query/connection_type.ts +0 -113
  61. package/src/graphql/query/edge_connection.ts +0 -171
  62. package/src/graphql/query/page_info.ts +0 -34
  63. package/src/graphql/query/shared_edge_connection.ts +0 -287
  64. package/src/graphql/scalars/orderby_direction.ts +0 -13
  65. package/src/graphql/scalars/time.ts +0 -38
  66. package/src/imports/dataz/example1/_auth.ts +0 -51
  67. package/src/imports/dataz/example1/_viewer.ts +0 -35
  68. package/src/imports/index.ts +0 -213
  69. package/src/index.ts +0 -145
  70. package/src/parse_schema/parse.ts +0 -585
  71. package/src/schema/base_schema.ts +0 -224
  72. package/src/schema/field.ts +0 -1087
  73. package/src/schema/index.ts +0 -53
  74. package/src/schema/json_field.ts +0 -94
  75. package/src/schema/schema.ts +0 -1028
  76. package/src/schema/struct_field.ts +0 -234
  77. package/src/schema/union_field.ts +0 -105
  78. package/src/scripts/custom_compiler.ts +0 -331
  79. package/src/scripts/custom_graphql.ts +0 -550
  80. package/src/scripts/migrate_v0.1.ts +0 -41
  81. package/src/scripts/move_types.ts +0 -131
  82. package/src/scripts/read_schema.ts +0 -67
  83. package/src/setupPackage.js +0 -42
  84. package/src/testutils/action/complex_schemas.ts +0 -517
  85. package/src/testutils/builder.ts +0 -422
  86. package/src/testutils/context/test_context.ts +0 -25
  87. package/src/testutils/db/fixture.ts +0 -32
  88. package/src/testutils/db/temp_db.ts +0 -941
  89. package/src/testutils/db/value.ts +0 -294
  90. package/src/testutils/db_mock.ts +0 -351
  91. package/src/testutils/db_time_zone.ts +0 -40
  92. package/src/testutils/ent-graphql-tests/index.ts +0 -653
  93. package/src/testutils/fake_comms.ts +0 -50
  94. package/src/testutils/fake_data/const.ts +0 -64
  95. package/src/testutils/fake_data/events_query.ts +0 -145
  96. package/src/testutils/fake_data/fake_contact.ts +0 -150
  97. package/src/testutils/fake_data/fake_event.ts +0 -150
  98. package/src/testutils/fake_data/fake_tag.ts +0 -139
  99. package/src/testutils/fake_data/fake_user.ts +0 -232
  100. package/src/testutils/fake_data/index.ts +0 -1
  101. package/src/testutils/fake_data/internal.ts +0 -8
  102. package/src/testutils/fake_data/tag_query.ts +0 -56
  103. package/src/testutils/fake_data/test_helpers.ts +0 -388
  104. package/src/testutils/fake_data/user_query.ts +0 -524
  105. package/src/testutils/fake_log.ts +0 -52
  106. package/src/testutils/mock_date.ts +0 -10
  107. package/src/testutils/mock_log.ts +0 -39
  108. package/src/testutils/parse_sql.ts +0 -685
  109. package/src/testutils/test_edge_global_schema.ts +0 -49
  110. package/src/testutils/write.ts +0 -70
  111. package/src/tsc/ast.ts +0 -351
  112. package/src/tsc/compilerOptions.ts +0 -85
  113. package/src/tsc/move_generated.ts +0 -191
  114. package/src/tsc/transform.ts +0 -226
  115. package/src/tsc/transform_action.ts +0 -224
  116. package/src/tsc/transform_ent.ts +0 -66
  117. package/src/tsc/transform_schema.ts +0 -546
  118. package/tsconfig.json +0 -20
  119. /package/{dist/action → action}/action.d.ts +0 -0
  120. /package/{dist/action → action}/action.js +0 -0
  121. /package/{dist/action → action}/executor.d.ts +0 -0
  122. /package/{dist/action → action}/executor.js +0 -0
  123. /package/{dist/action → action}/experimental_action.d.ts +0 -0
  124. /package/{dist/action → action}/experimental_action.js +0 -0
  125. /package/{dist/action → action}/index.d.ts +0 -0
  126. /package/{dist/action → action}/index.js +0 -0
  127. /package/{dist/action → action}/operations.d.ts +0 -0
  128. /package/{dist/action → action}/operations.js +0 -0
  129. /package/{dist/action → action}/orchestrator.d.ts +0 -0
  130. /package/{dist/action → action}/orchestrator.js +0 -0
  131. /package/{dist/action → action}/privacy.d.ts +0 -0
  132. /package/{dist/action → action}/privacy.js +0 -0
  133. /package/{dist/action → action}/relative_value.d.ts +0 -0
  134. /package/{dist/action → action}/relative_value.js +0 -0
  135. /package/{dist/action → action}/transaction.d.ts +0 -0
  136. /package/{dist/action → action}/transaction.js +0 -0
  137. /package/{dist/auth → auth}/auth.d.ts +0 -0
  138. /package/{dist/auth → auth}/auth.js +0 -0
  139. /package/{dist/auth → auth}/index.d.ts +0 -0
  140. /package/{dist/auth → auth}/index.js +0 -0
  141. /package/{dist/core → core}/base.d.ts +0 -0
  142. /package/{dist/core → core}/base.js +0 -0
  143. /package/{dist/core → core}/clause.d.ts +0 -0
  144. /package/{dist/core → core}/clause.js +0 -0
  145. /package/{dist/core → core}/config.d.ts +0 -0
  146. /package/{dist/core → core}/config.js +0 -0
  147. /package/{dist/core → core}/const.d.ts +0 -0
  148. /package/{dist/core → core}/const.js +0 -0
  149. /package/{dist/core → core}/context.d.ts +0 -0
  150. /package/{dist/core → core}/context.js +0 -0
  151. /package/{dist/core → core}/convert.d.ts +0 -0
  152. /package/{dist/core → core}/convert.js +0 -0
  153. /package/{dist/core → core}/date.d.ts +0 -0
  154. /package/{dist/core → core}/date.js +0 -0
  155. /package/{dist/core → core}/db.d.ts +0 -0
  156. /package/{dist/core → core}/db.js +0 -0
  157. /package/{dist/core → core}/ent.d.ts +0 -0
  158. /package/{dist/core → core}/ent.js +0 -0
  159. /package/{dist/core → core}/global_schema.d.ts +0 -0
  160. /package/{dist/core → core}/global_schema.js +0 -0
  161. /package/{dist/core → core}/loaders/assoc_count_loader.d.ts +0 -0
  162. /package/{dist/core → core}/loaders/assoc_count_loader.js +0 -0
  163. /package/{dist/core → core}/loaders/assoc_edge_loader.d.ts +0 -0
  164. /package/{dist/core → core}/loaders/assoc_edge_loader.js +0 -0
  165. /package/{dist/core → core}/loaders/index.d.ts +0 -0
  166. /package/{dist/core → core}/loaders/index.js +0 -0
  167. /package/{dist/core → core}/loaders/loader.d.ts +0 -0
  168. /package/{dist/core → core}/loaders/loader.js +0 -0
  169. /package/{dist/core → core}/loaders/object_loader.d.ts +0 -0
  170. /package/{dist/core → core}/loaders/object_loader.js +0 -0
  171. /package/{dist/core → core}/loaders/query_loader.d.ts +0 -0
  172. /package/{dist/core → core}/loaders/query_loader.js +0 -0
  173. /package/{dist/core → core}/loaders/raw_count_loader.d.ts +0 -0
  174. /package/{dist/core → core}/loaders/raw_count_loader.js +0 -0
  175. /package/{dist/core → core}/logger.d.ts +0 -0
  176. /package/{dist/core → core}/logger.js +0 -0
  177. /package/{dist/core → core}/privacy.d.ts +0 -0
  178. /package/{dist/core → core}/privacy.js +0 -0
  179. /package/{dist/core → core}/query/custom_clause_query.d.ts +0 -0
  180. /package/{dist/core → core}/query/custom_clause_query.js +0 -0
  181. /package/{dist/core → core}/query/custom_query.d.ts +0 -0
  182. /package/{dist/core → core}/query/custom_query.js +0 -0
  183. /package/{dist/core → core}/query/index.d.ts +0 -0
  184. /package/{dist/core → core}/query/index.js +0 -0
  185. /package/{dist/core → core}/query_impl.d.ts +0 -0
  186. /package/{dist/core → core}/query_impl.js +0 -0
  187. /package/{dist/core → core}/viewer.d.ts +0 -0
  188. /package/{dist/core → core}/viewer.js +0 -0
  189. /package/{dist/graphql → graphql}/builtins/connection.d.ts +0 -0
  190. /package/{dist/graphql → graphql}/builtins/connection.js +0 -0
  191. /package/{dist/graphql → graphql}/builtins/edge.d.ts +0 -0
  192. /package/{dist/graphql → graphql}/builtins/edge.js +0 -0
  193. /package/{dist/graphql → graphql}/builtins/node.d.ts +0 -0
  194. /package/{dist/graphql → graphql}/builtins/node.js +0 -0
  195. /package/{dist/graphql → graphql}/graphql.d.ts +0 -0
  196. /package/{dist/graphql → graphql}/graphql.js +0 -0
  197. /package/{dist/graphql → graphql}/graphql_field_helpers.d.ts +0 -0
  198. /package/{dist/graphql → graphql}/graphql_field_helpers.js +0 -0
  199. /package/{dist/graphql → graphql}/index.d.ts +0 -0
  200. /package/{dist/graphql → graphql}/index.js +0 -0
  201. /package/{dist/graphql → graphql}/mutations/union.d.ts +0 -0
  202. /package/{dist/graphql → graphql}/mutations/union.js +0 -0
  203. /package/{dist/graphql → graphql}/node_resolver.d.ts +0 -0
  204. /package/{dist/graphql → graphql}/node_resolver.js +0 -0
  205. /package/{dist/graphql → graphql}/query/connection_type.d.ts +0 -0
  206. /package/{dist/graphql → graphql}/query/connection_type.js +0 -0
  207. /package/{dist/graphql → graphql}/query/edge_connection.d.ts +0 -0
  208. /package/{dist/graphql → graphql}/query/edge_connection.js +0 -0
  209. /package/{dist/graphql → graphql}/query/page_info.d.ts +0 -0
  210. /package/{dist/graphql → graphql}/query/page_info.js +0 -0
  211. /package/{dist/graphql → graphql}/query/shared_edge_connection.d.ts +0 -0
  212. /package/{dist/graphql → graphql}/query/shared_edge_connection.js +0 -0
  213. /package/{dist/graphql → graphql}/scalars/orderby_direction.d.ts +0 -0
  214. /package/{dist/graphql → graphql}/scalars/orderby_direction.js +0 -0
  215. /package/{dist/graphql → graphql}/scalars/time.d.ts +0 -0
  216. /package/{dist/graphql → graphql}/scalars/time.js +0 -0
  217. /package/{dist/imports → imports}/dataz/example1/_auth.d.ts +0 -0
  218. /package/{dist/imports → imports}/dataz/example1/_auth.js +0 -0
  219. /package/{dist/imports → imports}/dataz/example1/_viewer.d.ts +0 -0
  220. /package/{dist/imports → imports}/dataz/example1/_viewer.js +0 -0
  221. /package/{dist/imports → imports}/index.d.ts +0 -0
  222. /package/{dist/imports → imports}/index.js +0 -0
  223. /package/{dist/index.d.ts → index.d.ts} +0 -0
  224. /package/{dist/index.js → index.js} +0 -0
  225. /package/{dist/parse_schema → parse_schema}/parse.d.ts +0 -0
  226. /package/{dist/parse_schema → parse_schema}/parse.js +0 -0
  227. /package/{dist/schema → schema}/base_schema.d.ts +0 -0
  228. /package/{dist/schema → schema}/base_schema.js +0 -0
  229. /package/{dist/schema → schema}/field.d.ts +0 -0
  230. /package/{dist/schema → schema}/field.js +0 -0
  231. /package/{dist/schema → schema}/index.d.ts +0 -0
  232. /package/{dist/schema → schema}/index.js +0 -0
  233. /package/{dist/schema → schema}/json_field.d.ts +0 -0
  234. /package/{dist/schema → schema}/json_field.js +0 -0
  235. /package/{dist/schema → schema}/schema.d.ts +0 -0
  236. /package/{dist/schema → schema}/schema.js +0 -0
  237. /package/{dist/schema → schema}/struct_field.d.ts +0 -0
  238. /package/{dist/schema → schema}/struct_field.js +0 -0
  239. /package/{dist/schema → schema}/union_field.d.ts +0 -0
  240. /package/{dist/schema → schema}/union_field.js +0 -0
  241. /package/{dist/scripts → scripts}/custom_compiler.d.ts +0 -0
  242. /package/{dist/scripts → scripts}/custom_compiler.js +0 -0
  243. /package/{dist/scripts → scripts}/custom_graphql.d.ts +0 -0
  244. /package/{dist/scripts → scripts}/custom_graphql.js +0 -0
  245. /package/{dist/scripts → scripts}/migrate_v0.1.d.ts +0 -0
  246. /package/{dist/scripts → scripts}/migrate_v0.1.js +0 -0
  247. /package/{dist/scripts → scripts}/move_types.d.ts +0 -0
  248. /package/{dist/scripts → scripts}/move_types.js +0 -0
  249. /package/{dist/scripts → scripts}/read_schema.d.ts +0 -0
  250. /package/{dist/scripts → scripts}/read_schema.js +0 -0
  251. /package/{dist/testutils → testutils}/action/complex_schemas.d.ts +0 -0
  252. /package/{dist/testutils → testutils}/action/complex_schemas.js +0 -0
  253. /package/{dist/testutils → testutils}/builder.d.ts +0 -0
  254. /package/{dist/testutils → testutils}/builder.js +0 -0
  255. /package/{dist/testutils → testutils}/context/test_context.d.ts +0 -0
  256. /package/{dist/testutils → testutils}/context/test_context.js +0 -0
  257. /package/{dist/testutils → testutils}/db/fixture.d.ts +0 -0
  258. /package/{dist/testutils → testutils}/db/fixture.js +0 -0
  259. /package/{dist/testutils → testutils}/db/temp_db.d.ts +0 -0
  260. /package/{dist/testutils → testutils}/db/temp_db.js +0 -0
  261. /package/{dist/testutils → testutils}/db/value.d.ts +0 -0
  262. /package/{dist/testutils → testutils}/db/value.js +0 -0
  263. /package/{dist/testutils → testutils}/db_mock.d.ts +0 -0
  264. /package/{dist/testutils → testutils}/db_mock.js +0 -0
  265. /package/{dist/testutils → testutils}/db_time_zone.d.ts +0 -0
  266. /package/{dist/testutils → testutils}/db_time_zone.js +0 -0
  267. /package/{dist/testutils → testutils}/ent-graphql-tests/index.d.ts +0 -0
  268. /package/{dist/testutils → testutils}/ent-graphql-tests/index.js +0 -0
  269. /package/{dist/testutils → testutils}/fake_comms.d.ts +0 -0
  270. /package/{dist/testutils → testutils}/fake_comms.js +0 -0
  271. /package/{dist/testutils → testutils}/fake_data/const.d.ts +0 -0
  272. /package/{dist/testutils → testutils}/fake_data/const.js +0 -0
  273. /package/{dist/testutils → testutils}/fake_data/events_query.d.ts +0 -0
  274. /package/{dist/testutils → testutils}/fake_data/events_query.js +0 -0
  275. /package/{dist/testutils → testutils}/fake_data/fake_contact.d.ts +0 -0
  276. /package/{dist/testutils → testutils}/fake_data/fake_contact.js +0 -0
  277. /package/{dist/testutils → testutils}/fake_data/fake_event.d.ts +0 -0
  278. /package/{dist/testutils → testutils}/fake_data/fake_event.js +0 -0
  279. /package/{dist/testutils → testutils}/fake_data/fake_tag.d.ts +0 -0
  280. /package/{dist/testutils → testutils}/fake_data/fake_tag.js +0 -0
  281. /package/{dist/testutils → testutils}/fake_data/fake_user.d.ts +0 -0
  282. /package/{dist/testutils → testutils}/fake_data/fake_user.js +0 -0
  283. /package/{dist/testutils → testutils}/fake_data/index.d.ts +0 -0
  284. /package/{dist/testutils → testutils}/fake_data/index.js +0 -0
  285. /package/{dist/testutils → testutils}/fake_data/internal.d.ts +0 -0
  286. /package/{dist/testutils → testutils}/fake_data/internal.js +0 -0
  287. /package/{dist/testutils → testutils}/fake_data/tag_query.d.ts +0 -0
  288. /package/{dist/testutils → testutils}/fake_data/tag_query.js +0 -0
  289. /package/{dist/testutils → testutils}/fake_data/test_helpers.d.ts +0 -0
  290. /package/{dist/testutils → testutils}/fake_data/user_query.d.ts +0 -0
  291. /package/{dist/testutils → testutils}/fake_data/user_query.js +0 -0
  292. /package/{dist/testutils → testutils}/fake_log.d.ts +0 -0
  293. /package/{dist/testutils → testutils}/fake_log.js +0 -0
  294. /package/{dist/testutils → testutils}/mock_date.d.ts +0 -0
  295. /package/{dist/testutils → testutils}/mock_date.js +0 -0
  296. /package/{dist/testutils → testutils}/mock_log.d.ts +0 -0
  297. /package/{dist/testutils → testutils}/mock_log.js +0 -0
  298. /package/{dist/testutils → testutils}/parse_sql.d.ts +0 -0
  299. /package/{dist/testutils → testutils}/parse_sql.js +0 -0
  300. /package/{dist/testutils → testutils}/test_edge_global_schema.d.ts +0 -0
  301. /package/{dist/testutils → testutils}/test_edge_global_schema.js +0 -0
  302. /package/{dist/testutils → testutils}/write.d.ts +0 -0
  303. /package/{dist/testutils → testutils}/write.js +0 -0
  304. /package/{dist/tsc → tsc}/ast.d.ts +0 -0
  305. /package/{dist/tsc → tsc}/ast.js +0 -0
  306. /package/{dist/tsc → tsc}/compilerOptions.d.ts +0 -0
  307. /package/{dist/tsc → tsc}/compilerOptions.js +0 -0
  308. /package/{dist/tsc → tsc}/move_generated.d.ts +0 -0
  309. /package/{dist/tsc → tsc}/move_generated.js +0 -0
  310. /package/{dist/tsc → tsc}/transform.d.ts +0 -0
  311. /package/{dist/tsc → tsc}/transform.js +0 -0
  312. /package/{dist/tsc → tsc}/transform_action.d.ts +0 -0
  313. /package/{dist/tsc → tsc}/transform_action.js +0 -0
  314. /package/{dist/tsc → tsc}/transform_ent.d.ts +0 -0
  315. /package/{dist/tsc → tsc}/transform_ent.js +0 -0
  316. /package/{dist/tsc → tsc}/transform_schema.d.ts +0 -0
  317. /package/{dist/tsc → tsc}/transform_schema.js +0 -0
package/src/core/base.ts DELETED
@@ -1,367 +0,0 @@
1
- import * as clause from "./clause";
2
- import { ObjectLoaderFactory } from "./loaders";
3
- import { OrderBy } from "./query_impl";
4
-
5
- // Loader is the primitive data fetching abstraction in the framework
6
- // implementation details up to each instance
7
- // A DataLoader could be used internally or not.
8
- // For Loaders that use DataLoader, there's batching done to fetch multiple pieces
9
- // of information.
10
- // Using Loader and LoaderFactory allows us to use the same instance of Loader across a
11
- // request and potentially batch data as needed when possible
12
- export interface Loader<K, V> {
13
- context?: Context;
14
- load(key: K): Promise<V>;
15
- // TODO we need a loadMany() API similar to DataLoaer
16
- // what's the plural api to be?
17
- loadMany?(keys: K[]): Promise<(V | null)[]>;
18
- clearAll(): any;
19
- }
20
-
21
- export interface LoaderWithLoadMany<T, V> extends Loader<T, V> {
22
- loadMany(keys: T[]): Promise<V[]>;
23
- }
24
-
25
- // A LoaderFactory is used to create a Loader
26
- // We cache data on a per-request basis therefore for each new request, createLoader
27
- // is called to get a new instance of Loader which will then be used to load data as needed
28
- export interface LoaderFactory<K, V> {
29
- name: string; // used to have a per-request cache of each loader type
30
-
31
- // factory method.
32
- // when context is passed, there's potentially opportunities to batch data in the same
33
- // request
34
- // when no context is passed, no batching possible (except with explicit call to loadMany API)
35
- createLoader(context?: Context): Loader<K, V>;
36
- }
37
-
38
- interface LoaderFactoryWithLoaderMany<T, V> extends LoaderFactory<T, V> {
39
- createLoader(context?: Context): LoaderWithLoadMany<T, V>;
40
- }
41
-
42
- // better name for this?
43
- // this is used by EntQuery and then smart decision is made of what to do
44
- export interface ConfigurableLoaderFactory<T, V> extends LoaderFactory<T, V> {
45
- createConfigurableLoader(
46
- options: EdgeQueryableDataOptions,
47
- context?: Context,
48
- ): Loader<T, V>;
49
- }
50
-
51
- export type EdgeQueryableDataOptions = Partial<
52
- Pick<
53
- QueryableDataOptions,
54
- "limit" | "orderby" | "clause" | "disableTransformations"
55
- >
56
- >;
57
-
58
- export type EdgeQueryableDataOptionsConfigureLoader = Pick<
59
- EdgeQueryableDataOptions,
60
- "disableTransformations"
61
- >;
62
-
63
- // PrimableLoader allows us to prime data in the cache that's retrieved from
64
- // other sources
65
- export interface PrimableLoader<K, V> extends Loader<K, V> {
66
- prime(d: V): void;
67
- // prime this loader and any other loader it's aware of
68
- primeAll?(d: V): void;
69
- }
70
-
71
- interface cache {
72
- getLoader<K, V>(name: string, create: () => Loader<K, V>): Loader<K, V>;
73
- getLoaderWithLoadMany<K, V>(
74
- name: string,
75
- create: () => LoaderWithLoadMany<K, V>,
76
- ): LoaderWithLoadMany<K, V>;
77
- getCachedRows(options: queryOptions): Data[] | null;
78
- getCachedRow(options: queryOptions): Data | null;
79
- primeCache(options: queryOptions, rows: Data[]): void;
80
- primeCache(options: queryOptions, rows: Data): void;
81
- clearCache(): void;
82
- }
83
-
84
- interface queryOptions {
85
- fields: string[];
86
- tableName: string;
87
- clause: clause.Clause;
88
- orderby?: OrderBy;
89
- }
90
-
91
- export interface Context<TViewer extends Viewer = Viewer> {
92
- getViewer(): TViewer;
93
- // optional per (request)contet
94
- // absence means we are not doing any caching
95
- // presence means we have loader, ent cache etc
96
-
97
- // TODO expose this? use
98
- cache?: cache;
99
- }
100
-
101
- export interface Viewer<
102
- TEnt extends any = Ent<any> | null,
103
- TID extends any = ID | null,
104
- > {
105
- viewerID: TID;
106
- viewer: () => Promise<TEnt>;
107
- instanceKey: () => string;
108
- // isOmniscient?(): boolean; // optional function to indicate a viewer that can see anything e.g. admin
109
- // TODO determine if we want this here.
110
- // just helpful to have it here
111
- // not providing a default AllowIfOmniRule
112
-
113
- // where should dataloaders be put?
114
- // I want dataloaders to be created on demand as needed
115
- // so it seems having it in Context (per-request info makes sense)
116
- // so does that mean we should pass Context all the way down and not Viewer?
117
- context?: Context<any>;
118
- }
119
-
120
- export interface Ent<TViewer extends Viewer = Viewer> {
121
- id: ID;
122
- viewer: TViewer;
123
- getPrivacyPolicy(): PrivacyPolicy<this, TViewer>;
124
- nodeType: string;
125
- // used to set raw data that's then used by ent internals
126
- // shouldn't be used...
127
- __setRawDBData<T extends Data = Data>(data: T);
128
- }
129
-
130
- export declare type Data = {
131
- [key: string]: any;
132
- };
133
-
134
- export interface EntConstructor<
135
- TEnt extends Ent,
136
- TViewer extends Viewer = Viewer,
137
- > {
138
- new (viewer: TViewer, data: Data): TEnt;
139
- }
140
-
141
- export type ID = string | number;
142
-
143
- export interface DataOptions {
144
- // TODO pool or client later since we should get it from there
145
- // TODO this can be passed in for scenarios where we are not using default configuration
146
- // clientConfig?: ClientConfig;
147
- tableName: string;
148
-
149
- // TODO remove this from here since we're changing how this works....
150
- context?: Context;
151
- }
152
-
153
- export interface SelectBaseDataOptions extends DataOptions {
154
- // list of fields to read
155
- fields: string[];
156
- }
157
-
158
- export interface SelectDataOptions extends SelectBaseDataOptions {
159
- // primary key we're selecting from most often 'id'
160
- key: string;
161
- // if postgres and using an integer primary key, we need to pass this so that when we do an In query,
162
- // we can cast accurately
163
- // TODO https://github.com/lolopinto/ent/issues/1431
164
- keyType?: string; // 'uuid' | 'integer' etc...
165
- // if exists, we and with the primary key query
166
- clause?: clause.Clause | (() => clause.Clause | undefined);
167
- }
168
-
169
- export interface QueryableDataOptions
170
- extends SelectBaseDataOptions,
171
- QueryDataOptions {}
172
-
173
- export interface QueryDataOptions<T extends Data = Data, K = keyof T> {
174
- distinct?: boolean;
175
- clause: clause.Clause<T, K>;
176
- orderby?: OrderBy; // this technically doesn't make sense when querying just one row but whatevs
177
- groupby?: K;
178
- limit?: number;
179
- disableTransformations?: boolean;
180
- }
181
-
182
- // For loading data from database
183
- export interface LoadRowOptions extends QueryableDataOptions {}
184
-
185
- export interface LoadRowsOptions extends QueryableDataOptions {}
186
-
187
- interface OnConflictOptions {
188
- // TODO these should change to fields instead of columns
189
- onConflictCols: string[];
190
-
191
- // onConflictConstraint doesn't work with do nothing since ent always reloads the
192
- // row after insert and if there's no conflict columns provided, we have no way of querying
193
- // the db for the original/conflicting row
194
- onConflictConstraint?: string;
195
- // update values based on fields
196
- // if not provided, we do nothing
197
- updateCols?: string[];
198
- }
199
-
200
- export interface CreateRowOptions extends DataOptions {
201
- // fields to be edited
202
- fields: Data;
203
- fieldsToLog?: Data;
204
- onConflict?: OnConflictOptions;
205
- }
206
-
207
- export interface EditRowOptions extends Omit<CreateRowOptions, "onConflict"> {
208
- whereClause: clause.Clause;
209
- // if a column exists in here as opposed to in fields, we use the expression given
210
- // instead of the value
211
- expressions?: Map<string, clause.Clause>;
212
- }
213
-
214
- interface LoadableEntOptions<
215
- TEnt extends Ent,
216
- TViewer extends Viewer = Viewer,
217
- TData extends Data = Data,
218
- > {
219
- loaderFactory: ObjectLoaderFactory<TData>;
220
- ent: EntConstructor<TEnt, TViewer>;
221
- }
222
-
223
- export interface LoaderFactoryWithOptions<T extends Data = Data>
224
- extends LoaderFactoryWithLoaderMany<any, T | null> {
225
- options?: SelectDataOptions;
226
- }
227
-
228
- // information needed to load an ent from the databse
229
- export interface LoadEntOptions<
230
- TEnt extends Ent,
231
- TViewer extends Viewer = Viewer,
232
- TData extends Data = Data,
233
- > extends LoadableEntOptions<TEnt, TViewer, TData>,
234
- // extending DataOptions and fields is to make APIs like loadEntsFromClause work until we come up with a cleaner API
235
- SelectBaseDataOptions {
236
- // if passed in, it means there's field privacy on the ents *and* we want to apply it at ent load
237
- // if there's field privacy on the ent and not passed in, it'll be applied on demand when we try and load the ent
238
- fieldPrivacy?: Map<string, PrivacyPolicy>;
239
- }
240
-
241
- export interface SelectCustomDataOptions<T extends Data = Data>
242
- extends SelectBaseDataOptions {
243
- // main loader factory for the ent, passed in for priming the data so subsequent fetches of this id don't reload
244
- loaderFactory: ObjectLoaderFactory<T>;
245
-
246
- // should we prime the ent after loading. uses loaderFactory above
247
- // only pass prime if the fields is equivalent to the ids of the other loader factory
248
- // it doesn't check...
249
- prime?: boolean;
250
- }
251
-
252
- export interface LoadCustomEntOptions<
253
- TEnt extends Ent,
254
- TViewer extends Viewer = Viewer,
255
- TData extends Data = Data,
256
- >
257
- // extending DataOptions and fields is to make APIs like loadEntsFromClause work until we come up with a cleaner API
258
- extends SelectCustomDataOptions<TData> {
259
- ent: EntConstructor<TEnt, TViewer>;
260
- fieldPrivacy?: Map<string, PrivacyPolicy>;
261
- }
262
-
263
- export interface LoaderInfo<T = Data> {
264
- tableName: string;
265
- fields: string[];
266
- nodeType: string;
267
- loaderFactory: LoaderFactory<ID, T | null>;
268
- }
269
-
270
- // information needed to edit an ent
271
- export interface EditEntOptions<T extends Ent>
272
- extends LoadableEntOptions<T>,
273
- EditRowOptions {}
274
-
275
- // Privacy
276
- enum privacyResult {
277
- // using http status codes similar to golang for the lols
278
- Allow = 200,
279
- Deny = 401,
280
- Skip = 307,
281
- }
282
-
283
- export interface PrivacyResult {
284
- result: privacyResult;
285
- error?: PrivacyError;
286
- getError?(
287
- policy: PrivacyPolicy,
288
- rule: PrivacyPolicyRule,
289
- ent?: Ent,
290
- ): PrivacyError;
291
- }
292
-
293
- export interface PrivacyError extends Error {
294
- privacyPolicy: PrivacyPolicy<Ent>;
295
- ent?: Ent;
296
- }
297
-
298
- const allow: PrivacyResult = {
299
- result: privacyResult.Allow,
300
- };
301
-
302
- export function Allow(): PrivacyResult {
303
- return allow;
304
- }
305
-
306
- const skip: PrivacyResult = {
307
- result: privacyResult.Skip,
308
- };
309
-
310
- export function Skip(): PrivacyResult {
311
- return skip;
312
- }
313
-
314
- const deny: PrivacyResult = {
315
- result: privacyResult.Deny,
316
- };
317
-
318
- export function Deny(): PrivacyResult {
319
- return deny;
320
- }
321
-
322
- class DenyWithReasonError extends Error implements PrivacyError {
323
- privacyPolicy: PrivacyPolicy;
324
- privacyRule: PrivacyPolicyRule;
325
- ent?: Ent;
326
-
327
- constructor(
328
- privacyPolicy: PrivacyPolicy,
329
- rule: PrivacyPolicyRule,
330
- msg: string,
331
- ent?: Ent,
332
- ) {
333
- super(msg);
334
- this.privacyPolicy = privacyPolicy;
335
- this.privacyRule = rule;
336
- this.ent = ent;
337
- }
338
- }
339
-
340
- export function DenyWithReason(e: PrivacyError | string): PrivacyResult {
341
- if (typeof e === "string") {
342
- return {
343
- result: privacyResult.Deny,
344
- getError(policy: PrivacyPolicy, rule: PrivacyPolicyRule, ent?: Ent) {
345
- return new DenyWithReasonError(policy, rule, e, ent);
346
- },
347
- };
348
- }
349
- return {
350
- result: privacyResult.Deny,
351
- error: e,
352
- };
353
- }
354
-
355
- export interface PrivacyPolicyRule<TEnt extends Ent = Ent, TViewer = Viewer> {
356
- apply(v: TViewer, ent?: TEnt): Promise<PrivacyResult>;
357
- }
358
-
359
- export interface PrivacyPolicy<TEnt extends Ent = Ent, TViewer = Viewer> {
360
- rules: PrivacyPolicyRule<TEnt, TViewer>[];
361
- }
362
-
363
- export enum WriteOperation {
364
- Insert = "insert",
365
- Edit = "edit",
366
- Delete = "delete",
367
- }