@snowtop/ent 0.1.0-alpha160-test5 → 0.1.0-alpha160-test6

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/package.json +64 -0
  2. package/{scripts → dist/scripts}/custom_compiler.js +0 -0
  3. package/{scripts → dist/scripts}/custom_graphql.js +0 -0
  4. package/package.json +47 -5
  5. package/src/action/action.ts +330 -0
  6. package/src/action/executor.ts +453 -0
  7. package/src/action/experimental_action.ts +277 -0
  8. package/src/action/index.ts +31 -0
  9. package/src/action/operations.ts +967 -0
  10. package/src/action/orchestrator.ts +1527 -0
  11. package/src/action/privacy.ts +37 -0
  12. package/src/action/relative_value.ts +242 -0
  13. package/src/action/transaction.ts +38 -0
  14. package/src/auth/auth.ts +77 -0
  15. package/src/auth/index.ts +8 -0
  16. package/src/core/base.ts +367 -0
  17. package/src/core/clause.ts +1065 -0
  18. package/src/core/config.ts +219 -0
  19. package/src/core/const.ts +5 -0
  20. package/src/core/context.ts +135 -0
  21. package/src/core/convert.ts +106 -0
  22. package/src/core/date.ts +23 -0
  23. package/src/core/db.ts +498 -0
  24. package/src/core/ent.ts +1740 -0
  25. package/src/core/global_schema.ts +49 -0
  26. package/src/core/loaders/assoc_count_loader.ts +99 -0
  27. package/src/core/loaders/assoc_edge_loader.ts +250 -0
  28. package/src/core/loaders/index.ts +12 -0
  29. package/src/core/loaders/loader.ts +66 -0
  30. package/src/core/loaders/object_loader.ts +489 -0
  31. package/src/core/loaders/query_loader.ts +314 -0
  32. package/src/core/loaders/raw_count_loader.ts +175 -0
  33. package/src/core/logger.ts +49 -0
  34. package/src/core/privacy.ts +660 -0
  35. package/src/core/query/assoc_query.ts +240 -0
  36. package/src/core/query/custom_clause_query.ts +174 -0
  37. package/src/core/query/custom_query.ts +302 -0
  38. package/src/core/query/index.ts +9 -0
  39. package/src/core/query/query.ts +674 -0
  40. package/src/core/query_impl.ts +32 -0
  41. package/src/core/viewer.ts +52 -0
  42. package/src/ent.code-workspace +73 -0
  43. package/src/graphql/builtins/connection.ts +25 -0
  44. package/src/graphql/builtins/edge.ts +16 -0
  45. package/src/graphql/builtins/node.ts +12 -0
  46. package/src/graphql/graphql.ts +891 -0
  47. package/src/graphql/graphql_field_helpers.ts +221 -0
  48. package/src/graphql/index.ts +42 -0
  49. package/src/graphql/mutations/union.ts +39 -0
  50. package/src/graphql/node_resolver.ts +122 -0
  51. package/src/graphql/query/connection_type.ts +113 -0
  52. package/src/graphql/query/edge_connection.ts +171 -0
  53. package/src/graphql/query/page_info.ts +34 -0
  54. package/src/graphql/query/shared_edge_connection.ts +287 -0
  55. package/src/graphql/scalars/orderby_direction.ts +13 -0
  56. package/src/graphql/scalars/time.ts +38 -0
  57. package/src/imports/dataz/example1/_auth.ts +51 -0
  58. package/src/imports/dataz/example1/_viewer.ts +35 -0
  59. package/src/imports/index.ts +213 -0
  60. package/src/index.ts +145 -0
  61. package/src/parse_schema/parse.ts +585 -0
  62. package/src/schema/base_schema.ts +224 -0
  63. package/src/schema/field.ts +1087 -0
  64. package/src/schema/index.ts +53 -0
  65. package/src/schema/json_field.ts +94 -0
  66. package/src/schema/schema.ts +1028 -0
  67. package/src/schema/struct_field.ts +234 -0
  68. package/src/schema/union_field.ts +105 -0
  69. package/src/scripts/custom_compiler.ts +331 -0
  70. package/src/scripts/custom_graphql.ts +550 -0
  71. package/src/scripts/migrate_v0.1.ts +41 -0
  72. package/src/scripts/move_types.ts +131 -0
  73. package/src/scripts/read_schema.ts +67 -0
  74. package/src/setupPackage.js +42 -0
  75. package/src/testutils/action/complex_schemas.ts +517 -0
  76. package/src/testutils/builder.ts +422 -0
  77. package/src/testutils/context/test_context.ts +25 -0
  78. package/src/testutils/db/fixture.ts +32 -0
  79. package/src/testutils/db/temp_db.ts +941 -0
  80. package/src/testutils/db/value.ts +294 -0
  81. package/src/testutils/db_mock.ts +351 -0
  82. package/src/testutils/db_time_zone.ts +40 -0
  83. package/src/testutils/ent-graphql-tests/index.ts +653 -0
  84. package/src/testutils/fake_comms.ts +50 -0
  85. package/src/testutils/fake_data/const.ts +64 -0
  86. package/src/testutils/fake_data/events_query.ts +145 -0
  87. package/src/testutils/fake_data/fake_contact.ts +150 -0
  88. package/src/testutils/fake_data/fake_event.ts +150 -0
  89. package/src/testutils/fake_data/fake_tag.ts +139 -0
  90. package/src/testutils/fake_data/fake_user.ts +232 -0
  91. package/src/testutils/fake_data/index.ts +1 -0
  92. package/src/testutils/fake_data/internal.ts +8 -0
  93. package/src/testutils/fake_data/tag_query.ts +56 -0
  94. package/src/testutils/fake_data/test_helpers.ts +388 -0
  95. package/src/testutils/fake_data/user_query.ts +524 -0
  96. package/src/testutils/fake_log.ts +52 -0
  97. package/src/testutils/mock_date.ts +10 -0
  98. package/src/testutils/mock_log.ts +39 -0
  99. package/src/testutils/parse_sql.ts +685 -0
  100. package/src/testutils/test_edge_global_schema.ts +49 -0
  101. package/src/testutils/write.ts +70 -0
  102. package/src/tsc/ast.ts +351 -0
  103. package/src/tsc/compilerOptions.ts +85 -0
  104. package/src/tsc/move_generated.ts +191 -0
  105. package/src/tsc/transform.ts +226 -0
  106. package/src/tsc/transform_action.ts +224 -0
  107. package/src/tsc/transform_ent.ts +66 -0
  108. package/src/tsc/transform_schema.ts +546 -0
  109. package/tsconfig.json +20 -0
  110. package/core/query/shared_assoc_test.d.ts +0 -2
  111. package/core/query/shared_assoc_test.js +0 -804
  112. package/core/query/shared_test.d.ts +0 -21
  113. package/core/query/shared_test.js +0 -736
  114. package/graphql/query/shared_assoc_test.d.ts +0 -1
  115. package/graphql/query/shared_assoc_test.js +0 -203
  116. /package/{action → dist/action}/action.d.ts +0 -0
  117. /package/{action → dist/action}/action.js +0 -0
  118. /package/{action → dist/action}/executor.d.ts +0 -0
  119. /package/{action → dist/action}/executor.js +0 -0
  120. /package/{action → dist/action}/experimental_action.d.ts +0 -0
  121. /package/{action → dist/action}/experimental_action.js +0 -0
  122. /package/{action → dist/action}/index.d.ts +0 -0
  123. /package/{action → dist/action}/index.js +0 -0
  124. /package/{action → dist/action}/operations.d.ts +0 -0
  125. /package/{action → dist/action}/operations.js +0 -0
  126. /package/{action → dist/action}/orchestrator.d.ts +0 -0
  127. /package/{action → dist/action}/orchestrator.js +0 -0
  128. /package/{action → dist/action}/privacy.d.ts +0 -0
  129. /package/{action → dist/action}/privacy.js +0 -0
  130. /package/{action → dist/action}/relative_value.d.ts +0 -0
  131. /package/{action → dist/action}/relative_value.js +0 -0
  132. /package/{action → dist/action}/transaction.d.ts +0 -0
  133. /package/{action → dist/action}/transaction.js +0 -0
  134. /package/{auth → dist/auth}/auth.d.ts +0 -0
  135. /package/{auth → dist/auth}/auth.js +0 -0
  136. /package/{auth → dist/auth}/index.d.ts +0 -0
  137. /package/{auth → dist/auth}/index.js +0 -0
  138. /package/{core → dist/core}/base.d.ts +0 -0
  139. /package/{core → dist/core}/base.js +0 -0
  140. /package/{core → dist/core}/clause.d.ts +0 -0
  141. /package/{core → dist/core}/clause.js +0 -0
  142. /package/{core → dist/core}/config.d.ts +0 -0
  143. /package/{core → dist/core}/config.js +0 -0
  144. /package/{core → dist/core}/const.d.ts +0 -0
  145. /package/{core → dist/core}/const.js +0 -0
  146. /package/{core → dist/core}/context.d.ts +0 -0
  147. /package/{core → dist/core}/context.js +0 -0
  148. /package/{core → dist/core}/convert.d.ts +0 -0
  149. /package/{core → dist/core}/convert.js +0 -0
  150. /package/{core → dist/core}/date.d.ts +0 -0
  151. /package/{core → dist/core}/date.js +0 -0
  152. /package/{core → dist/core}/db.d.ts +0 -0
  153. /package/{core → dist/core}/db.js +0 -0
  154. /package/{core → dist/core}/ent.d.ts +0 -0
  155. /package/{core → dist/core}/ent.js +0 -0
  156. /package/{core → dist/core}/global_schema.d.ts +0 -0
  157. /package/{core → dist/core}/global_schema.js +0 -0
  158. /package/{core → dist/core}/loaders/assoc_count_loader.d.ts +0 -0
  159. /package/{core → dist/core}/loaders/assoc_count_loader.js +0 -0
  160. /package/{core → dist/core}/loaders/assoc_edge_loader.d.ts +0 -0
  161. /package/{core → dist/core}/loaders/assoc_edge_loader.js +0 -0
  162. /package/{core → dist/core}/loaders/index.d.ts +0 -0
  163. /package/{core → dist/core}/loaders/index.js +0 -0
  164. /package/{core → dist/core}/loaders/loader.d.ts +0 -0
  165. /package/{core → dist/core}/loaders/loader.js +0 -0
  166. /package/{core → dist/core}/loaders/object_loader.d.ts +0 -0
  167. /package/{core → dist/core}/loaders/object_loader.js +0 -0
  168. /package/{core → dist/core}/loaders/query_loader.d.ts +0 -0
  169. /package/{core → dist/core}/loaders/query_loader.js +0 -0
  170. /package/{core → dist/core}/loaders/raw_count_loader.d.ts +0 -0
  171. /package/{core → dist/core}/loaders/raw_count_loader.js +0 -0
  172. /package/{core → dist/core}/logger.d.ts +0 -0
  173. /package/{core → dist/core}/logger.js +0 -0
  174. /package/{core → dist/core}/privacy.d.ts +0 -0
  175. /package/{core → dist/core}/privacy.js +0 -0
  176. /package/{core → dist/core}/query/assoc_query.d.ts +0 -0
  177. /package/{core → dist/core}/query/assoc_query.js +0 -0
  178. /package/{core → dist/core}/query/custom_clause_query.d.ts +0 -0
  179. /package/{core → dist/core}/query/custom_clause_query.js +0 -0
  180. /package/{core → dist/core}/query/custom_query.d.ts +0 -0
  181. /package/{core → dist/core}/query/custom_query.js +0 -0
  182. /package/{core → dist/core}/query/index.d.ts +0 -0
  183. /package/{core → dist/core}/query/index.js +0 -0
  184. /package/{core → dist/core}/query/query.d.ts +0 -0
  185. /package/{core → dist/core}/query/query.js +0 -0
  186. /package/{core → dist/core}/query_impl.d.ts +0 -0
  187. /package/{core → dist/core}/query_impl.js +0 -0
  188. /package/{core → dist/core}/viewer.d.ts +0 -0
  189. /package/{core → dist/core}/viewer.js +0 -0
  190. /package/{graphql → dist/graphql}/builtins/connection.d.ts +0 -0
  191. /package/{graphql → dist/graphql}/builtins/connection.js +0 -0
  192. /package/{graphql → dist/graphql}/builtins/edge.d.ts +0 -0
  193. /package/{graphql → dist/graphql}/builtins/edge.js +0 -0
  194. /package/{graphql → dist/graphql}/builtins/node.d.ts +0 -0
  195. /package/{graphql → dist/graphql}/builtins/node.js +0 -0
  196. /package/{graphql → dist/graphql}/graphql.d.ts +0 -0
  197. /package/{graphql → dist/graphql}/graphql.js +0 -0
  198. /package/{graphql → dist/graphql}/graphql_field_helpers.d.ts +0 -0
  199. /package/{graphql → dist/graphql}/graphql_field_helpers.js +0 -0
  200. /package/{graphql → dist/graphql}/index.d.ts +0 -0
  201. /package/{graphql → dist/graphql}/index.js +0 -0
  202. /package/{graphql → dist/graphql}/mutations/union.d.ts +0 -0
  203. /package/{graphql → dist/graphql}/mutations/union.js +0 -0
  204. /package/{graphql → dist/graphql}/node_resolver.d.ts +0 -0
  205. /package/{graphql → dist/graphql}/node_resolver.js +0 -0
  206. /package/{graphql → dist/graphql}/query/connection_type.d.ts +0 -0
  207. /package/{graphql → dist/graphql}/query/connection_type.js +0 -0
  208. /package/{graphql → dist/graphql}/query/edge_connection.d.ts +0 -0
  209. /package/{graphql → dist/graphql}/query/edge_connection.js +0 -0
  210. /package/{graphql → dist/graphql}/query/page_info.d.ts +0 -0
  211. /package/{graphql → dist/graphql}/query/page_info.js +0 -0
  212. /package/{graphql → dist/graphql}/query/shared_edge_connection.d.ts +0 -0
  213. /package/{graphql → dist/graphql}/query/shared_edge_connection.js +0 -0
  214. /package/{graphql → dist/graphql}/scalars/orderby_direction.d.ts +0 -0
  215. /package/{graphql → dist/graphql}/scalars/orderby_direction.js +0 -0
  216. /package/{graphql → dist/graphql}/scalars/time.d.ts +0 -0
  217. /package/{graphql → dist/graphql}/scalars/time.js +0 -0
  218. /package/{imports → dist/imports}/dataz/example1/_auth.d.ts +0 -0
  219. /package/{imports → dist/imports}/dataz/example1/_auth.js +0 -0
  220. /package/{imports → dist/imports}/dataz/example1/_viewer.d.ts +0 -0
  221. /package/{imports → dist/imports}/dataz/example1/_viewer.js +0 -0
  222. /package/{imports → dist/imports}/index.d.ts +0 -0
  223. /package/{imports → dist/imports}/index.js +0 -0
  224. /package/{index.d.ts → dist/index.d.ts} +0 -0
  225. /package/{index.js → dist/index.js} +0 -0
  226. /package/{parse_schema → dist/parse_schema}/parse.d.ts +0 -0
  227. /package/{parse_schema → dist/parse_schema}/parse.js +0 -0
  228. /package/{schema → dist/schema}/base_schema.d.ts +0 -0
  229. /package/{schema → dist/schema}/base_schema.js +0 -0
  230. /package/{schema → dist/schema}/field.d.ts +0 -0
  231. /package/{schema → dist/schema}/field.js +0 -0
  232. /package/{schema → dist/schema}/index.d.ts +0 -0
  233. /package/{schema → dist/schema}/index.js +0 -0
  234. /package/{schema → dist/schema}/json_field.d.ts +0 -0
  235. /package/{schema → dist/schema}/json_field.js +0 -0
  236. /package/{schema → dist/schema}/schema.d.ts +0 -0
  237. /package/{schema → dist/schema}/schema.js +0 -0
  238. /package/{schema → dist/schema}/struct_field.d.ts +0 -0
  239. /package/{schema → dist/schema}/struct_field.js +0 -0
  240. /package/{schema → dist/schema}/union_field.d.ts +0 -0
  241. /package/{schema → dist/schema}/union_field.js +0 -0
  242. /package/{scripts → dist/scripts}/custom_compiler.d.ts +0 -0
  243. /package/{scripts → dist/scripts}/custom_graphql.d.ts +0 -0
  244. /package/{scripts → dist/scripts}/migrate_v0.1.d.ts +0 -0
  245. /package/{scripts → dist/scripts}/migrate_v0.1.js +0 -0
  246. /package/{scripts → dist/scripts}/move_types.d.ts +0 -0
  247. /package/{scripts → dist/scripts}/move_types.js +0 -0
  248. /package/{scripts → dist/scripts}/read_schema.d.ts +0 -0
  249. /package/{scripts → dist/scripts}/read_schema.js +0 -0
  250. /package/{testutils → dist/testutils}/action/complex_schemas.d.ts +0 -0
  251. /package/{testutils → dist/testutils}/action/complex_schemas.js +0 -0
  252. /package/{testutils → dist/testutils}/builder.d.ts +0 -0
  253. /package/{testutils → dist/testutils}/builder.js +0 -0
  254. /package/{testutils → dist/testutils}/context/test_context.d.ts +0 -0
  255. /package/{testutils → dist/testutils}/context/test_context.js +0 -0
  256. /package/{testutils → dist/testutils}/db/fixture.d.ts +0 -0
  257. /package/{testutils → dist/testutils}/db/fixture.js +0 -0
  258. /package/{testutils → dist/testutils}/db/temp_db.d.ts +0 -0
  259. /package/{testutils → dist/testutils}/db/temp_db.js +0 -0
  260. /package/{testutils → dist/testutils}/db/value.d.ts +0 -0
  261. /package/{testutils → dist/testutils}/db/value.js +0 -0
  262. /package/{testutils → dist/testutils}/db_mock.d.ts +0 -0
  263. /package/{testutils → dist/testutils}/db_mock.js +0 -0
  264. /package/{testutils → dist/testutils}/db_time_zone.d.ts +0 -0
  265. /package/{testutils → dist/testutils}/db_time_zone.js +0 -0
  266. /package/{testutils → dist/testutils}/ent-graphql-tests/index.d.ts +0 -0
  267. /package/{testutils → dist/testutils}/ent-graphql-tests/index.js +0 -0
  268. /package/{testutils → dist/testutils}/fake_comms.d.ts +0 -0
  269. /package/{testutils → dist/testutils}/fake_comms.js +0 -0
  270. /package/{testutils → dist/testutils}/fake_data/const.d.ts +0 -0
  271. /package/{testutils → dist/testutils}/fake_data/const.js +0 -0
  272. /package/{testutils → dist/testutils}/fake_data/events_query.d.ts +0 -0
  273. /package/{testutils → dist/testutils}/fake_data/events_query.js +0 -0
  274. /package/{testutils → dist/testutils}/fake_data/fake_contact.d.ts +0 -0
  275. /package/{testutils → dist/testutils}/fake_data/fake_contact.js +0 -0
  276. /package/{testutils → dist/testutils}/fake_data/fake_event.d.ts +0 -0
  277. /package/{testutils → dist/testutils}/fake_data/fake_event.js +0 -0
  278. /package/{testutils → dist/testutils}/fake_data/fake_tag.d.ts +0 -0
  279. /package/{testutils → dist/testutils}/fake_data/fake_tag.js +0 -0
  280. /package/{testutils → dist/testutils}/fake_data/fake_user.d.ts +0 -0
  281. /package/{testutils → dist/testutils}/fake_data/fake_user.js +0 -0
  282. /package/{testutils → dist/testutils}/fake_data/index.d.ts +0 -0
  283. /package/{testutils → dist/testutils}/fake_data/index.js +0 -0
  284. /package/{testutils → dist/testutils}/fake_data/internal.d.ts +0 -0
  285. /package/{testutils → dist/testutils}/fake_data/internal.js +0 -0
  286. /package/{testutils → dist/testutils}/fake_data/tag_query.d.ts +0 -0
  287. /package/{testutils → dist/testutils}/fake_data/tag_query.js +0 -0
  288. /package/{testutils → dist/testutils}/fake_data/test_helpers.d.ts +0 -0
  289. /package/{testutils → dist/testutils}/fake_data/test_helpers.js +0 -0
  290. /package/{testutils → dist/testutils}/fake_data/user_query.d.ts +0 -0
  291. /package/{testutils → dist/testutils}/fake_data/user_query.js +0 -0
  292. /package/{testutils → dist/testutils}/fake_log.d.ts +0 -0
  293. /package/{testutils → dist/testutils}/fake_log.js +0 -0
  294. /package/{testutils → dist/testutils}/mock_date.d.ts +0 -0
  295. /package/{testutils → dist/testutils}/mock_date.js +0 -0
  296. /package/{testutils → dist/testutils}/mock_log.d.ts +0 -0
  297. /package/{testutils → dist/testutils}/mock_log.js +0 -0
  298. /package/{testutils → dist/testutils}/parse_sql.d.ts +0 -0
  299. /package/{testutils → dist/testutils}/parse_sql.js +0 -0
  300. /package/{testutils → dist/testutils}/test_edge_global_schema.d.ts +0 -0
  301. /package/{testutils → dist/testutils}/test_edge_global_schema.js +0 -0
  302. /package/{testutils → dist/testutils}/write.d.ts +0 -0
  303. /package/{testutils → dist/testutils}/write.js +0 -0
  304. /package/{tsc → dist/tsc}/ast.d.ts +0 -0
  305. /package/{tsc → dist/tsc}/ast.js +0 -0
  306. /package/{tsc → dist/tsc}/compilerOptions.d.ts +0 -0
  307. /package/{tsc → dist/tsc}/compilerOptions.js +0 -0
  308. /package/{tsc → dist/tsc}/move_generated.d.ts +0 -0
  309. /package/{tsc → dist/tsc}/move_generated.js +0 -0
  310. /package/{tsc → dist/tsc}/transform.d.ts +0 -0
  311. /package/{tsc → dist/tsc}/transform.js +0 -0
  312. /package/{tsc → dist/tsc}/transform_action.d.ts +0 -0
  313. /package/{tsc → dist/tsc}/transform_action.js +0 -0
  314. /package/{tsc → dist/tsc}/transform_ent.d.ts +0 -0
  315. /package/{tsc → dist/tsc}/transform_ent.js +0 -0
  316. /package/{tsc → dist/tsc}/transform_schema.d.ts +0 -0
  317. /package/{tsc → dist/tsc}/transform_schema.js +0 -0
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@snowtop/ent",
3
+ "version": "0.1.0-alpha160-test6",
4
+ "description": "snowtop ent framework",
5
+ "main": "index.js",
6
+ "types": "dist/index.d.ts",
7
+ "directories": {
8
+ "example": "examples"
9
+ },
10
+ "dependencies": {
11
+ "@types/node": "^20.2.5",
12
+ "camel-case": "^4.1.2",
13
+ "cosmiconfig": "^8.1.3",
14
+ "dataloader": "^2.2.2",
15
+ "glob": "^10.2.6",
16
+ "graph-data-structure": "^3.3.0",
17
+ "js-yaml": "^4.1.0",
18
+ "json5": "^2.2.3",
19
+ "luxon": "^3.3.0",
20
+ "memoizee": "^0.4.15",
21
+ "minimist": "^1.2.8",
22
+ "pascal-case": "^3.1.2",
23
+ "pg": "^8.11.0",
24
+ "prettier": "^2.8.8",
25
+ "snake-case": "^3.0.4",
26
+ "ts-node": "^10.9.1",
27
+ "tsconfig-paths": "^4.2.0",
28
+ "tslib": "^2.5.2",
29
+ "typescript": "^5.0.4",
30
+ "uuid": "^9.0.0"
31
+ },
32
+ "peerDependencies": {
33
+ "@swc-node/register": "^1.6.5",
34
+ "better-sqlite3": "^8.4.0",
35
+ "graphql": "^16.5.0"
36
+ },
37
+ "peerDependenciesMeta": {
38
+ "better-sqlite3": {
39
+ "optional": true
40
+ },
41
+ "@swc-node/register": {
42
+ "optional": true
43
+ }
44
+ },
45
+ "engines": {
46
+ "node": ">=16.0"
47
+ },
48
+ "devDependencies": {},
49
+ "scripts": {},
50
+ "bin": {
51
+ "ent-custom-graphql": "scripts/custom_graphql.js",
52
+ "ent-custom-compiler": "scripts/custom_compiler.js"
53
+ },
54
+ "author": "lolopinto",
55
+ "license": "MIT",
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "git+ssh://git@github.com/lolopinto/ent.git"
59
+ },
60
+ "bugs": {
61
+ "url": "https://github.com/lolopinto/ent/issues"
62
+ },
63
+ "homepage": "https://github.com/lolopinto/ent#readme"
64
+ }
File without changes
File without changes
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@snowtop/ent",
3
- "version": "0.1.0-alpha160-test5",
3
+ "version": "0.1.0-alpha160-test6",
4
4
  "description": "snowtop ent framework",
5
- "main": "index.js",
5
+ "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "directories": {
8
8
  "example": "examples"
@@ -45,8 +45,50 @@
45
45
  "engines": {
46
46
  "node": ">=16.0"
47
47
  },
48
- "devDependencies": {},
49
- "scripts": {},
48
+ "devDependencies": {
49
+ "@swc/core": "^1.3.57",
50
+ "@swc/jest": "^0.2.26",
51
+ "@types/bcryptjs": "^2.4.2",
52
+ "@types/better-sqlite3": "^7.6.4",
53
+ "@types/express": "^4.17.15",
54
+ "@types/glob": "^8.0.0",
55
+ "@types/graphql-upload": "^8.0.12",
56
+ "@types/jest": "^29.2.4",
57
+ "@types/js-yaml": "^4.0.5",
58
+ "@types/luxon": "^3.1.0",
59
+ "@types/memoizee": "^0.4.8",
60
+ "@types/minimist": "^1.2.2",
61
+ "@types/passport": "^1.0.11",
62
+ "@types/passport-jwt": "^3.0.8",
63
+ "@types/pg": "^8.6.6",
64
+ "@types/pluralize": "0.0.29",
65
+ "@types/supertest": "^2.0.12",
66
+ "@types/uuid": "^9.0.0",
67
+ "better-sqlite3": "^8.4.0",
68
+ "email-addresses": "^5.0.0",
69
+ "express": "^4.18.2",
70
+ "graphql": "^16.6.0",
71
+ "graphql-helix": "^1.13.0",
72
+ "graphql-type-json": "^0.3.2",
73
+ "graphql-upload": "^13.0.0",
74
+ "jest": "^29.3.1",
75
+ "jest-date-mock": "^1.0.8",
76
+ "jest-each": "^29.5.0",
77
+ "jest-expect-message": "^1.1.3",
78
+ "jest-mock": "^29.3.1",
79
+ "node-sql-parser": "^3.9.4",
80
+ "object-path": "^0.11.8",
81
+ "pg-copy-streams": "^6.0.5",
82
+ "pluralize": "^8.0.0",
83
+ "supertest": "^6.3.3",
84
+ "ts-jest": "^29.1.0"
85
+ },
86
+ "scripts": {
87
+ "compile": "tsc",
88
+ "test": "jest",
89
+ "clean": "rm -rf dist",
90
+ "prepublish": "npm run clean && npm run compile && node src/setupPackage.js"
91
+ },
50
92
  "bin": {
51
93
  "ent-custom-graphql": "scripts/custom_graphql.js",
52
94
  "ent-custom-compiler": "scripts/custom_compiler.js"
@@ -61,4 +103,4 @@
61
103
  "url": "https://github.com/lolopinto/ent/issues"
62
104
  },
63
105
  "homepage": "https://github.com/lolopinto/ent#readme"
64
- }
106
+ }
@@ -0,0 +1,330 @@
1
+ import {
2
+ Ent,
3
+ EntConstructor,
4
+ Viewer,
5
+ ID,
6
+ Data,
7
+ PrivacyPolicy,
8
+ Context,
9
+ WriteOperation,
10
+ } from "../core/base";
11
+ import { loadEdgeForID2, AssocEdge } from "../core/ent";
12
+ import { DataOperation, AssocEdgeInputOptions } from "./operations";
13
+ import { Queryer } from "../core/db";
14
+ import { log } from "../core/logger";
15
+ import { TransformedUpdateOperation, UpdateOperation } from "../schema";
16
+ import { FieldInfoMap } from "../schema/schema";
17
+
18
+ export { WriteOperation };
19
+
20
+ type MaybeNull<T extends Ent> = T | null;
21
+ type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
22
+
23
+ interface BuilderOrchestrator {
24
+ __getOptions(): {
25
+ fieldInfo: FieldInfoMap;
26
+ };
27
+ }
28
+
29
+ export interface Builder<
30
+ TEnt extends Ent<TViewer>,
31
+ TViewer extends Viewer = Viewer,
32
+ TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>,
33
+ > {
34
+ existingEnt: TExistingEnt;
35
+ ent: EntConstructor<TEnt, TViewer>;
36
+ placeholderID: ID;
37
+ readonly viewer: TViewer;
38
+ build(): Promise<Changeset>;
39
+ buildWithOptions_BETA?(options: ChangesetOptions): Promise<Changeset>;
40
+ operation: WriteOperation;
41
+ editedEnt?(): Promise<TEnt | null>;
42
+ nodeType: string;
43
+ // TODO TInput in Builder
44
+ getInput(): Data;
45
+ // TODO full orchestrator...
46
+ orchestrator: BuilderOrchestrator;
47
+ }
48
+
49
+ // PS: this is a private API subject to change
50
+ export interface Executor
51
+ extends Iterable<DataOperation>,
52
+ Iterator<DataOperation> {
53
+ placeholderID: ID;
54
+ // this returns a non-privacy checked "ent"
55
+ resolveValue(val: any): Ent | null;
56
+ builderOpChanged(builder: Builder<any>): boolean;
57
+ builder?: Builder<Ent>;
58
+
59
+ execute(): Promise<void>;
60
+
61
+ // TODO add this so we can differentiate btw when ops are being executed?
62
+ // vs gathered for other use
63
+ // or change how execute() works?
64
+ // right now have to reset at the end of next() if we call for (const op of executor) {}
65
+ // also want to throw if DataOperation.returnedRow or DataOperation.createdEnt
66
+ // called too early
67
+ // getSortedOps(): DataOperation[];
68
+
69
+ // these 3 are to help chained/contained executors
70
+ preFetch?(queryer: Queryer, context?: Context): Promise<void>;
71
+ postFetch?(queryer: Queryer, context?: Context): Promise<void>;
72
+ executeObservers?(): Promise<void>;
73
+ }
74
+
75
+ export interface Changeset {
76
+ executor(): Executor;
77
+ viewer: Viewer;
78
+ placeholderID: ID;
79
+ // ent: EntConstructor<T>;
80
+ changesets?: Changeset[];
81
+ dependencies?: Map<ID, Builder<Ent>>;
82
+ }
83
+
84
+ export type TriggerReturn =
85
+ | void
86
+ | Promise<Changeset | void | (Changeset | void)[]>
87
+ | Promise<Changeset>[];
88
+
89
+ export interface Trigger<
90
+ TEnt extends Ent<TViewer>,
91
+ TBuilder extends Builder<TEnt, TViewer, TExistingEnt>,
92
+ TViewer extends Viewer = Viewer,
93
+ TInput extends Data = Data,
94
+ TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>,
95
+ > {
96
+ // TODO: way in the future. detect any writes happening in changesets and optionally throw if configured to do so
97
+ // can throw if it wants. not expected to throw tho.
98
+ // input passed in here !== builder.getInput()
99
+ // builder.getInput() can have other default fields
100
+ changeset(builder: TBuilder, input: TInput): TriggerReturn;
101
+ }
102
+
103
+ export interface Observer<
104
+ TEnt extends Ent<TViewer>,
105
+ TBuilder extends Builder<TEnt, TViewer, TExistingEnt>,
106
+ TViewer extends Viewer = Viewer,
107
+ TInput extends Data = Data,
108
+ TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>,
109
+ > {
110
+ // input passed in here !== builder.getInput()
111
+ // builder.getInput() can have other default fields
112
+ observe(builder: TBuilder, input: TInput): void | Promise<void>;
113
+ }
114
+
115
+ export interface Validator<
116
+ TEnt extends Ent<TViewer>,
117
+ TBuilder extends Builder<TEnt, TViewer, TExistingEnt>,
118
+ TViewer extends Viewer = Viewer,
119
+ TInput extends Data = Data,
120
+ TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>,
121
+ > {
122
+ // can throw if it wants
123
+ // input passed in here !== builder.getInput()
124
+ // builder.getInput() can have other default fields
125
+ validate(
126
+ builder: TBuilder,
127
+ input: TInput,
128
+ ): Promise<void | undefined | Error> | void | Error | undefined;
129
+ }
130
+
131
+ export interface ChangesetOptions {
132
+ // conditional on builder operation remaining the same
133
+ // TODO I don't really like this
134
+ // https://github.com/lolopinto/ent/issues/1437
135
+ conditionalBuilder: Builder<any, any>;
136
+ }
137
+
138
+ export interface Action<
139
+ TEnt extends Ent<TViewer>,
140
+ TBuilder extends Builder<TEnt, TViewer, TExistingEnt>,
141
+ TViewer extends Viewer = Viewer,
142
+ TInput extends Data = Data,
143
+ TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>,
144
+ > {
145
+ readonly viewer: Viewer;
146
+ changeset(): Promise<Changeset>;
147
+ changesetWithOptions_BETA?(options: ChangesetOptions): Promise<Changeset>;
148
+ builder: TBuilder;
149
+ getPrivacyPolicy(): PrivacyPolicy<TEnt>;
150
+
151
+ // we allow grouping triggers to indicate dependency trees
152
+ // so that you can say one or more triggers is higher priority
153
+ // than the others and should be run first
154
+ // any encountered list is a different priority from prior and subsequent triggers
155
+ getTriggers?(): (
156
+ | Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt>
157
+ | Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[]
158
+ )[];
159
+ getObservers?(): Observer<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
160
+ getValidators?(): Validator<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
161
+ getInput(): TInput; // this input is passed to Triggers, Observers, Validators
162
+ transformWrite?: (
163
+ stmt: UpdateOperation<TEnt, TViewer>,
164
+ ) =>
165
+ | Promise<TransformedUpdateOperation<TEnt, TViewer>>
166
+ | TransformedUpdateOperation<TEnt, TViewer>
167
+ | null;
168
+
169
+ valid(): Promise<boolean>;
170
+ // throws if invalid
171
+ validX(): Promise<void>;
172
+
173
+ // this is used to load the ent after the action
174
+ // you can imagine this being overwritten for a create user or create account
175
+ // action to load the just-created user after the fact
176
+ viewerForEntLoad?(
177
+ data: Data,
178
+ context?: Context<TViewer>,
179
+ ): TViewer | Promise<TViewer>;
180
+
181
+ // if we have overloads we need to provide all which sucks
182
+ // so maybe don't make the ones below required
183
+ // save(): Promise<T | null>;
184
+ // save(): Promise<void>;
185
+ // saveX(): Promise<T>;
186
+ // saveX(): Promise<T>;
187
+ }
188
+
189
+ export async function saveBuilder<
190
+ TEnt extends Ent<TViewer>,
191
+ TViewer extends Viewer,
192
+ >(builder: Builder<TEnt, TViewer>): Promise<void> {
193
+ await saveBuilderImpl(builder, false);
194
+ }
195
+
196
+ export async function saveBuilderX<
197
+ TEnt extends Ent<TViewer>,
198
+ TViewer extends Viewer,
199
+ >(builder: Builder<TEnt, TViewer>): Promise<void> {
200
+ await saveBuilderImpl(builder, true);
201
+ }
202
+
203
+ async function saveBuilderImpl<
204
+ TEnt extends Ent<TViewer>,
205
+ TViewer extends Viewer,
206
+ >(builder: Builder<TEnt, TViewer>, throwErr: boolean): Promise<void> {
207
+ let changeset: Changeset;
208
+ try {
209
+ changeset = await builder.build();
210
+ } catch (e) {
211
+ log("error", e);
212
+ if (throwErr) {
213
+ throw e;
214
+ } else {
215
+ // expected...
216
+ return;
217
+ }
218
+ }
219
+ const executor = changeset.executor();
220
+ if (throwErr) {
221
+ return executor.execute();
222
+ } else {
223
+ try {
224
+ return executor.execute();
225
+ } catch (e) {
226
+ // it's already caught and logged upstream
227
+ }
228
+ }
229
+ }
230
+
231
+ // Orchestrator in orchestrator.ts in generated Builders
232
+ // we indicate the API we expect here. Not typing it to Orchestrator class in Orchestrator.ts
233
+ // for flexibility
234
+ interface Orchestrator {
235
+ addOutboundEdge<T2 extends Ent>(
236
+ id2: ID | Builder<T2>,
237
+ edgeType: string,
238
+ nodeType: string,
239
+ options?: AssocEdgeInputOptions,
240
+ ): void;
241
+ removeOutboundEdge(id2: ID, edgeType: string): void;
242
+ viewer: Viewer;
243
+ }
244
+
245
+ async function modifyEdgeSet<T extends string>(
246
+ orchestrator: Orchestrator,
247
+ id1: ID,
248
+ id2: ID,
249
+ inputEnumValue: string,
250
+ enumValue: string,
251
+ edgeType: T,
252
+ nodeType: string,
253
+ ) {
254
+ let edge = await loadEdgeForID2({
255
+ id1: id1,
256
+ id2: id2,
257
+ edgeType: edgeType,
258
+ ctr: AssocEdge,
259
+ context: orchestrator.viewer.context,
260
+ });
261
+ // always add the edge because the data field may be getting overwritten later on
262
+ // and we need to give that operation a chance to succeed
263
+ // TODO: can save a write here by checking in EdgeOperation and not doing this write if nothing
264
+ // has changed.
265
+ if (inputEnumValue === enumValue) {
266
+ orchestrator.addOutboundEdge(id2, edgeType, nodeType);
267
+ }
268
+ if (edge) {
269
+ if (enumValue !== inputEnumValue) {
270
+ orchestrator.removeOutboundEdge(id2, edgeType);
271
+ }
272
+ }
273
+ }
274
+
275
+ // This sets one edge in a group
276
+ // used for assoc groups where setting the value of one edge in the group
277
+ // unsets the other
278
+ // e.g. 3 states for event rsvp: attending, maybe, declined. user can't be rsvped as more than one at a time so this helps you
279
+ // so that setting an rsvp status for one clears the others (if set)
280
+ // or for friendship status: incoming_friend_request, outgoing_friend_request, are_friends
281
+ // accepting a friend request should clear an incoming or outgoing friend request
282
+ // @args
283
+ // orchestrator: see interface
284
+ // inputEnumValue: the value of the enum. should be one of the keys of m
285
+ // id1: source ID in Orchestrator. We take this as extra param because we need it to check if edge exists
286
+ // id2: target id
287
+ // nodeType: nodeType of ent in question
288
+ // m: Map<enumType, to EdgeType to check>
289
+ export async function setEdgeTypeInGroup<T extends string>(
290
+ orchestrator: Orchestrator,
291
+ inputEnumValue: string,
292
+ id1: ID,
293
+ id2: ID,
294
+ nodeType: string,
295
+ m: Map<T, string>,
296
+ ) {
297
+ let promises: Promise<void>[] = [];
298
+ for (const [k, v] of m) {
299
+ promises.push(
300
+ modifyEdgeSet(orchestrator, id1, id2, inputEnumValue, k, v, nodeType),
301
+ );
302
+ }
303
+ await Promise.all(promises);
304
+ }
305
+
306
+ export async function clearEdgeTypeInGroup<T extends string>(
307
+ orchestrator: Orchestrator,
308
+ id1: ID,
309
+ id2: ID,
310
+ m: Map<T, string>,
311
+ ) {
312
+ let promises: Promise<void>[] = [];
313
+ for (const [_, edgeType] of m) {
314
+ promises.push(
315
+ (async () => {
316
+ let edge = await loadEdgeForID2({
317
+ id1,
318
+ id2,
319
+ edgeType,
320
+ ctr: AssocEdge,
321
+ context: orchestrator.viewer.context,
322
+ });
323
+ if (edge) {
324
+ orchestrator.removeOutboundEdge(id2, edgeType);
325
+ }
326
+ })(),
327
+ );
328
+ }
329
+ await Promise.all(promises);
330
+ }