remult 0.22.1 → 0.22.3

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 (257) hide show
  1. package/esm/graphql.js +27 -27
  2. package/esm/postgres/schema-builder.js +4 -4
  3. package/esm/remult-knex/index.js +2 -2
  4. package/esm/remult-mongo.js +6 -6
  5. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +30 -0
  6. package/esm/src/id-entity.d.ts +4 -0
  7. package/esm/src/id-entity.js +8 -0
  8. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  9. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  10. package/package.json +1 -1
  11. package/postgres/postgresColumnSyntax.d.ts +2 -0
  12. package/postgres/postgresColumnSyntax.js +34 -0
  13. package/remult-knex/index.js +2 -2
  14. package/remult-middleware.d.ts +2 -0
  15. package/remult-middleware.js +70 -0
  16. package/remult-mongo.js +6 -6
  17. package/server/register-actions-on-server.d.ts +3 -0
  18. package/server/register-actions-on-server.js +50 -0
  19. package/server/register-entities-on-server.d.ts +3 -0
  20. package/server/register-entities-on-server.js +19 -0
  21. package/src/backend-tests/backend-database-test-setup.backend-spec.js +60 -0
  22. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  23. package/src/backend-tests/my-test.backend-spec.js +217 -0
  24. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  25. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  26. package/src/id-entity.d.ts +4 -0
  27. package/src/id-entity.js +17 -0
  28. package/src/remult3/RepositoryImplementation.js +15 -13
  29. package/src/shared-tests/db-tests.db-tests.js +64 -0
  30. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  31. package/valueConverters.js +168 -0
  32. package/esm/angular/interfaces/index.d.ts +0 -1
  33. package/esm/angular/interfaces/index.js +0 -1
  34. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  35. package/esm/angular/interfaces/src/column-collection.js +0 -341
  36. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  37. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  38. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  39. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  40. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  41. package/esm/angular/interfaces/src/dataList.js +0 -42
  42. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  43. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  44. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  45. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  46. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  47. package/esm/angular/interfaces/src/public_api.js +0 -4
  48. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  49. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  50. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  51. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  52. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  53. package/esm/core/SseSubscriptionServer.js +0 -107
  54. package/esm/core/assign.d.ts +0 -1
  55. package/esm/core/assign.js +0 -5
  56. package/esm/core/classType.d.ts +0 -3
  57. package/esm/core/classType.js +0 -1
  58. package/esm/core/index.d.ts +0 -27
  59. package/esm/core/index.js +0 -25
  60. package/esm/core/inputTypes.d.ts +0 -9
  61. package/esm/core/inputTypes.js +0 -9
  62. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  63. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  64. package/esm/core/postgres/index.d.ts +0 -2
  65. package/esm/core/postgres/index.js +0 -2
  66. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  67. package/esm/core/postgres/postgres-data-provider.js +0 -120
  68. package/esm/core/postgres/schema-builder.d.ts +0 -17
  69. package/esm/core/postgres/schema-builder.js +0 -153
  70. package/esm/core/remult-fresh.d.ts +0 -17
  71. package/esm/core/remult-fresh.js +0 -29
  72. package/esm/core/remult-knex/index.d.ts +0 -30
  73. package/esm/core/remult-knex/index.js +0 -446
  74. package/esm/core/remult-mongo.d.ts +0 -24
  75. package/esm/core/remult-mongo.js +0 -254
  76. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  77. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  78. package/esm/core/server/core.d.ts +0 -4
  79. package/esm/core/server/core.js +0 -4
  80. package/esm/core/server/expressBridge.d.ts +0 -182
  81. package/esm/core/server/expressBridge.js +0 -938
  82. package/esm/core/server/index.d.ts +0 -6
  83. package/esm/core/server/index.js +0 -9
  84. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  85. package/esm/core/server/initAsyncHooks.js +0 -9
  86. package/esm/core/server/initDataProvider.d.ts +0 -2
  87. package/esm/core/server/initDataProvider.js +0 -14
  88. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  89. package/esm/core/src/__EntityValueProvider.js +0 -1
  90. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  91. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  92. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  93. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  94. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  95. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  96. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  97. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  98. package/esm/core/src/buildRestDataProvider.js +0 -113
  99. package/esm/core/src/column-interfaces.d.ts +0 -154
  100. package/esm/core/src/column-interfaces.js +0 -7
  101. package/esm/core/src/column.d.ts +0 -58
  102. package/esm/core/src/column.js +0 -174
  103. package/esm/core/src/context.d.ts +0 -134
  104. package/esm/core/src/context.js +0 -286
  105. package/esm/core/src/data-api.d.ts +0 -39
  106. package/esm/core/src/data-api.js +0 -279
  107. package/esm/core/src/data-interfaces.d.ts +0 -41
  108. package/esm/core/src/data-interfaces.js +0 -12
  109. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  110. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  111. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  112. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  113. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  114. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  115. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  116. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  117. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  118. package/esm/core/src/data-providers/sql-database.js +0 -384
  119. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  120. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  121. package/esm/core/src/entity.d.ts +0 -91
  122. package/esm/core/src/entity.js +0 -1
  123. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  124. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  125. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  126. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  127. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  128. package/esm/core/src/filter/filter-interfaces.js +0 -477
  129. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  130. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  131. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  132. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  133. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  134. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  135. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  136. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  137. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  138. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  139. package/esm/core/src/remult-proxy.d.ts +0 -35
  140. package/esm/core/src/remult-proxy.js +0 -113
  141. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  142. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  143. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  144. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  145. package/esm/core/src/remult3/index.d.ts +0 -2
  146. package/esm/core/src/remult3/index.js +0 -2
  147. package/esm/core/src/remult3/remult3.d.ts +0 -395
  148. package/esm/core/src/remult3/remult3.js +0 -2
  149. package/esm/core/src/server-action.d.ts +0 -81
  150. package/esm/core/src/server-action.js +0 -394
  151. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  152. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  153. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  154. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  155. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  156. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  157. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  158. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  159. package/esm/core/src/shared-tests/index.d.ts +0 -4
  160. package/esm/core/src/shared-tests/index.js +0 -4
  161. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  162. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  163. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  164. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  165. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  166. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  167. package/esm/core/src/sort.d.ts +0 -16
  168. package/esm/core/src/sort.js +0 -103
  169. package/esm/core/src/sql-command.d.ts +0 -19
  170. package/esm/core/src/sql-command.js +0 -1
  171. package/esm/core/src/test.d.ts +0 -3
  172. package/esm/core/src/test.js +0 -12
  173. package/esm/core/src/tests/Done.d.ts +0 -5
  174. package/esm/core/src/tests/Done.js +0 -9
  175. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  176. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  177. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  178. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  179. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  180. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  181. package/esm/core/src/tests/c.d.ts +0 -8
  182. package/esm/core/src/tests/c.js +0 -13
  183. package/esm/core/src/tests/createData.d.ts +0 -7
  184. package/esm/core/src/tests/createData.js +0 -22
  185. package/esm/core/src/tests/d.d.ts +0 -6
  186. package/esm/core/src/tests/d.js +0 -11
  187. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  188. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  189. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  190. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  191. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  192. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  193. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  194. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  195. package/esm/core/src/tests/h.d.ts +0 -6
  196. package/esm/core/src/tests/h.js +0 -24
  197. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  198. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  199. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  200. package/esm/core/src/tests/remult-3-entities.js +0 -39
  201. package/esm/core/src/tests/tasks.d.ts +0 -6
  202. package/esm/core/src/tests/tasks.js +0 -10
  203. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  204. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  205. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  206. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  207. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  208. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  209. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  211. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  212. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  213. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  214. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  215. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  217. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  218. package/esm/core/src/tests/test-json.spec.js +0 -115
  219. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  220. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  221. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  223. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  225. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  227. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  228. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  229. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  230. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  231. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  233. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  234. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  235. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  236. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  237. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-sql.spec.js +0 -170
  239. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  241. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  243. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  244. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  245. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  246. package/esm/core/src/tests/testHelper.spec.js +0 -226
  247. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  248. package/esm/core/src/tests/testModel/models.js +0 -25
  249. package/esm/core/src/validators.d.ts +0 -14
  250. package/esm/core/src/validators.js +0 -33
  251. package/esm/core/src/valueConverters.js +0 -197
  252. package/esm/core/urlBuilder.d.ts +0 -6
  253. package/esm/core/urlBuilder.js +0 -20
  254. package/esm/test-servers/shared/Task.d.ts +0 -9
  255. package/esm/test-servers/shared/Task.js +0 -32
  256. package/esm/test.d.ts +0 -5
  257. package/esm/test.js +0 -6
@@ -1,135 +0,0 @@
1
- import { InMemoryDataProvider } from "../..";
2
- import { Remult } from "../context";
3
- import { Entity, EntityBase, Field, Fields } from "../remult3";
4
- import { Validators } from "../validators";
5
- describe("test subscribe", () => {
6
- it("basics", async () => {
7
- let repo = new Remult(new InMemoryDataProvider()).repo(myEntity);
8
- for (const del of await repo.find()) {
9
- await del.delete();
10
- }
11
- let state = {
12
- title: '',
13
- wasChanged: false,
14
- isNew: false,
15
- error: '',
16
- titleError: ''
17
- };
18
- let i = repo.create();
19
- let r = i._.subscribe(() => {
20
- state.title = i.title;
21
- state.wasChanged = i._.wasChanged();
22
- state.isNew = i._.isNew();
23
- state.error = i._.error;
24
- state.titleError = i.$.title.error;
25
- });
26
- i.title = 'a';
27
- expect(state.title).toBe('a');
28
- i.title = 'ab';
29
- expect(state.title).toBe("ab");
30
- expect(state.wasChanged).toBe(true);
31
- expect(state.isNew).toBe(true);
32
- let x = i.save();
33
- expect(i._.isLoading).toBe(true);
34
- await x;
35
- expect(i._.isLoading).toBe(false);
36
- expect(state.title).toBe('ab');
37
- expect(state.wasChanged).toBe(false);
38
- expect(state.isNew).toBe(false);
39
- i.$.title.error = 'error';
40
- expect(state.titleError).toBe('error');
41
- i._.error = "error";
42
- expect(state.error).toBe('error');
43
- });
44
- it("observed", async () => {
45
- let repo = new Remult(new InMemoryDataProvider()).repo(myEntity);
46
- for (const del of await repo.find()) {
47
- await del.delete();
48
- }
49
- let i = repo.create();
50
- let observed = false;
51
- i._.subscribe({
52
- reportChanged: () => { },
53
- reportObserved: () => observed = true
54
- });
55
- function testObserved(what) {
56
- observed = false;
57
- what();
58
- expect(observed).toBe(true);
59
- }
60
- testObserved(() => { i.title.toString(); });
61
- testObserved(() => { i.$.title.valueChanged(); });
62
- testObserved(() => { i.isNew(); });
63
- testObserved(() => { i._.wasChanged(); });
64
- });
65
- it("refInitWorks", async () => {
66
- let repo = new Remult(new InMemoryDataProvider()).repo(myEntity);
67
- for (const del of await repo.find()) {
68
- await del.delete();
69
- }
70
- entityRefInitCount = 0;
71
- let remultInitCount = 0;
72
- Remult.entityRefInit = () => remultInitCount++;
73
- let i = repo.create({ title: "a" });
74
- expect(entityRefInitCount).toBe(1);
75
- expect(remultInitCount).toBe(1);
76
- await i.save();
77
- expect(entityRefInitCount).toBe(1);
78
- expect(remultInitCount).toBe(1);
79
- Remult.entityRefInit = undefined;
80
- });
81
- it("test subscribe with many to one", async () => {
82
- const remult = new Remult(new InMemoryDataProvider());
83
- const repo = remult.repo(entityWithManyToOne);
84
- for (const del of await repo.find()) {
85
- await del.delete();
86
- }
87
- let refRowA = await remult.repo(myEntity).create({ title: 'a' }).save();
88
- let refRowB = await remult.repo(myEntity).create({ title: 'b' }).save();
89
- let reflect = { title: '' };
90
- let r = repo.create();
91
- let sub = r._.subscribe(() => reflect.title = r.entity?.title);
92
- r.entity = refRowA;
93
- expect(reflect.title).toBe('a');
94
- sub();
95
- r.entity = refRowB;
96
- expect(reflect.title).toBe('a');
97
- });
98
- it("test subscribe to field with many to one", async () => {
99
- const remult = new Remult(new InMemoryDataProvider());
100
- const repo = remult.repo(entityWithManyToOne);
101
- for (const del of await repo.find()) {
102
- await del.delete();
103
- }
104
- let refRowA = await remult.repo(myEntity).create({ title: 'a' }).save();
105
- let refRowB = await remult.repo(myEntity).create({ title: 'b' }).save();
106
- let reflect = { title: '' };
107
- let r = repo.create();
108
- let sub = r.$.entity.subscribe(() => reflect.title = r.entity?.title);
109
- r.entity = refRowA;
110
- expect(reflect.title).toBe('a');
111
- sub();
112
- r.entity = refRowB;
113
- expect(reflect.title).toBe('a');
114
- });
115
- });
116
- let entityRefInitCount = 0;
117
- @Entity("theEntity", {
118
- allowApiCrud: true,
119
- entityRefInit: () => entityRefInitCount++
120
- })
121
- class myEntity extends EntityBase {
122
- @Fields.string({
123
- validate: Validators.required
124
- })
125
- title = '';
126
- }
127
- @Entity("entityWithManyToOne", {
128
- allowApiCrud: true
129
- })
130
- class entityWithManyToOne extends EntityBase {
131
- @Fields.number()
132
- id = 0;
133
- @Field(() => myEntity)
134
- entity;
135
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,49 +0,0 @@
1
- import { Remult } from "../context";
2
- import { InMemoryDataProvider } from "../data-providers/in-memory-database";
3
- import { Entity, Fields } from "../remult3";
4
- import { describeClass } from "../remult3/DecoratorReplacer";
5
- describe("type recovery", () => {
6
- const entity = class {
7
- id = 0;
8
- date = new Date();
9
- };
10
- describeClass(entity, Entity("x"), {
11
- id: Fields.number(),
12
- date: Fields.dateOnly({
13
- validate: (_, ref) => ref.value.getFullYear() < 1980
14
- })
15
- });
16
- let mem = new InMemoryDataProvider();
17
- const repo = new Remult(mem).repo(entity);
18
- beforeEach(async () => {
19
- for (const item of await repo.find()) {
20
- await repo.delete(item);
21
- }
22
- });
23
- it("test insert works with Date", async () => {
24
- let r = await repo.insert({ id: 0, date: '1976-06-16' });
25
- expect(r.date.getFullYear()).toBe(1976);
26
- });
27
- it("test validate with Date", async () => {
28
- let r = await repo.validate({ id: 0, date: '1976-06-16' });
29
- expect(r).toBeUndefined();
30
- });
31
- it("test create", async () => {
32
- let r = repo.create({ id: 0, date: '1976-06-16' });
33
- expect(r.date.getFullYear()).toBe(1976);
34
- });
35
- it("test save works with Date", async () => {
36
- let r = await repo.save({ date: '1976-06-16' });
37
- expect(r.date.getFullYear()).toBe(1976);
38
- });
39
- it("test update using save", async () => {
40
- await repo.insert({ id: 1, date: '1975-06-16' });
41
- let r = await repo.save({ id: 1, date: '1976-06-16' });
42
- expect(r.date.getFullYear()).toBe(1976);
43
- });
44
- it("test update ", async () => {
45
- await repo.insert({ id: 1, date: '1975-06-16' });
46
- let r = await repo.update(1, { date: '1976-06-16' });
47
- expect(r.date.getFullYear()).toBe(1976);
48
- });
49
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,434 +0,0 @@
1
- import { testRestDb } from './testHelper.spec';
2
- import { TestDataApiResponse } from "./TestDataApiResponse";
3
- import { Done } from "./Done";
4
- import { WebSqlDataProvider } from '../data-providers/web-sql-data-provider';
5
- import { Remult } from '../context';
6
- import { SqlDatabase } from '../data-providers/sql-database';
7
- import { Categories } from './remult-3-entities';
8
- import { insertFourRows } from './RowProvider.spec';
9
- import { Entity, EntityBase, Fields } from '../remult3';
10
- import { InMemoryDataProvider } from '../data-providers/in-memory-database';
11
- import { customUrlToken, Filter } from '../filter/filter-interfaces';
12
- import { RestDataProvider } from '../data-providers/rest-data-provider';
13
- import { DataApi } from '../data-api';
14
- import { ArrayEntityDataProvider } from '../data-providers/array-entity-data-provider';
15
- import { dbNamesOf } from '../filter/filter-consumer-bridge-to-sql-request';
16
- import { entityForrawFilter } from './entityForCustomFilter';
17
- import { describeClass } from '../remult3/DecoratorReplacer';
18
- describe("test where stuff", () => {
19
- let repo;
20
- beforeAll(async (done) => {
21
- [repo] = await insertFourRows();
22
- done();
23
- });
24
- it("test in statement", async () => {
25
- expect(await repo.count({ id: [undefined] })).toBe(0);
26
- expect(await repo.count({ id: [1, undefined, 3] })).toBe(2);
27
- });
28
- it("test and", async () => {
29
- expect(await repo.count({ categoryName: 'yoni' })).toBe(1);
30
- expect(await repo.count({ categoryName: { $gte: 'yoni' } })).toBe(1);
31
- expect(await repo.count({ id: 1 })).toBe(1);
32
- expect(await repo.count({ id: 1, categoryName: 'yoni' })).toBe(0);
33
- expect(await repo.count({ id: 1, $and: [{ categoryName: 'yoni' }] })).toBe(0);
34
- expect(await repo.count({ $and: [{ id: 1 }, { categoryName: 'yoni' }] })).toBe(0);
35
- });
36
- it("test two values", async () => {
37
- expect(await repo.count({ $and: [{ id: 1 }, { id: 2 }] })).toBe(0);
38
- });
39
- it("test two values", async () => {
40
- const json = await Filter.fromEntityFilter(repo.metadata, { $and: [{ id: 1 }, { id: 2 }] }).toJson();
41
- expect(await repo.count(Filter.entityFilterFromJson(repo.metadata, json))).toBe(0);
42
- });
43
- it("test in and", async () => {
44
- const json = await Filter.fromEntityFilter(repo.metadata, { $and: [{ id: [1, 2] }, { id: [2] }] }).toJson();
45
- expect(await repo.count(Filter.entityFilterFromJson(repo.metadata, json))).toBe(1);
46
- });
47
- it("test basics", async () => {
48
- let fo = {
49
- where: { id: { ">=": 2 } }
50
- };
51
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
52
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
53
- expect(await repo.count({ $and: [fo.where], id: { $lte: 3 } })).toBe(2);
54
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
55
- });
56
- it("test basics_2", async () => {
57
- let fo = {
58
- where: { id: { $gte: 2 } }
59
- };
60
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where, undefined] })).toBe(2);
61
- });
62
- it("test basics_2_2", async () => {
63
- let fo = {
64
- where: { id: { ">=": 2 } }
65
- };
66
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
67
- });
68
- it("test basics_2_3", async () => {
69
- let fo = {
70
- where: { id: { ">=": 2 } }
71
- };
72
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
73
- });
74
- it("test basics_2_1", async () => {
75
- let fo = {
76
- where: { id: { $gte: 2 } }
77
- };
78
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where, undefined] })).toBe(2);
79
- });
80
- it("test basics_3", async () => {
81
- let fo = {
82
- where: { id: { ">=": 2 } }
83
- };
84
- expect(await repo.count({ id: { $lte: 3 }, $and: [fo.where] })).toBe(2);
85
- });
86
- });
87
- describe("custom filter", () => {
88
- it("test that it works", async () => {
89
- let c = new Remult().repo(entityForrawFilter, new InMemoryDataProvider());
90
- for (let id = 0; id < 5; id++) {
91
- await c.create({ id }).save();
92
- }
93
- expect(await (c.count(entityForrawFilter.filter({ oneAndThree: true }))))
94
- .toBe(2);
95
- });
96
- it("works with serialize filter", async () => {
97
- let z = entityForrawFilter.oneAndThree();
98
- let c = new Remult().repo(entityForrawFilter, new InMemoryDataProvider());
99
- let json = (await Filter.fromEntityFilter(c.metadata, entityForrawFilter.oneAndThree())).toJson();
100
- expect(json).toEqual({
101
- $custom$oneAndThree: {}
102
- });
103
- let json3 = Filter.entityFilterToJson(c.metadata, Filter.entityFilterFromJson(c.metadata, json));
104
- expect(json3).toEqual(json);
105
- });
106
- it("test that it works", () => testRestDb(async ({ remult }) => {
107
- let c = remult.repo(entityForrawFilter);
108
- for (let id = 0; id < 5; id++) {
109
- await c.create({ id }).save();
110
- }
111
- expect(await (c.count(entityForrawFilter.oneAndThree()))).toBe(2);
112
- expect((await (c.findFirst(entityForrawFilter.testNumericValue(2)))).id).toBe(2);
113
- expect((await (c.findFirst(entityForrawFilter.testObjectValue({ val: 2 })))).id).toBe(2);
114
- }));
115
- ;
116
- it("test that it works with sql", async () => {
117
- let w = new WebSqlDataProvider("testWithFilter");
118
- let c = new Remult().repo(entityForrawFilter, new SqlDatabase(w));
119
- await w.dropTable(c.metadata);
120
- for (let id = 0; id < 5; id++) {
121
- await c.create({ id }).save();
122
- }
123
- const e = await dbNamesOf(c.metadata);
124
- expect(await (c.count(SqlDatabase.rawFilter(async (x) => x.sql = e.id + ' in (' + x.addParameterAndReturnSqlToken(1) + "," + x.addParameterAndReturnSqlToken(3, c.metadata.fields.id) + ")"))))
125
- .toBe(2);
126
- expect(await (c.count(entityForrawFilter.filter({ dbOneOrThree: true })))).toBe(2);
127
- });
128
- it("test that it works with arrayFilter", async () => {
129
- let c = new Remult().repo(entityForrawFilter, new InMemoryDataProvider());
130
- for (let id = 0; id < 5; id++) {
131
- await c.create({ id }).save();
132
- }
133
- expect(await (c.count(ArrayEntityDataProvider.rawFilter(x => x.id == 1 || x.id == 3))))
134
- .toBe(2);
135
- expect(await (c.count(entityForrawFilter.filter({ dbOneOrThree: true })))).toBe(2);
136
- });
137
- it("test or and promise in translate", async () => {
138
- let c = new Remult().repo(entityForrawFilter, new InMemoryDataProvider());
139
- for (let id = 0; id < 5; id++) {
140
- await c.create({ id }).save();
141
- }
142
- "".toString();
143
- expect(await (c.count({
144
- $or: [entityForrawFilter.filter({ dbOneOrThree: true }), { id: 4 }]
145
- }))).toBe(3);
146
- });
147
- it("test sent in api", async () => {
148
- let ok = new Done();
149
- let z = new RestDataProvider(() => ({
150
- httpClient: {
151
- delete: () => undefined,
152
- get: async (url) => {
153
- ok.ok();
154
- expect(url).toBe('/entityForrawFilter?%24custom%24filter=%7B%22oneAndThree%22%3Atrue%7D&__action=count');
155
- return { count: 0 };
156
- },
157
- post: () => undefined,
158
- put: () => undefined,
159
- }, url: ''
160
- }));
161
- let c = new Remult();
162
- c.dataProvider = (z);
163
- await c.repo(entityForrawFilter).count(entityForrawFilter.filter({ oneAndThree: true }));
164
- ok.test();
165
- });
166
- it("test order by on rest request", async () => {
167
- let ok = new Done();
168
- let c = new Remult(new RestDataProvider(() => ({
169
- httpClient: {
170
- delete: () => undefined,
171
- get: async (url) => {
172
- ok.ok();
173
- expect(url).toBe('/Categories?_sort=categoryName%2Cid');
174
- return [];
175
- },
176
- post: () => undefined,
177
- put: () => undefined,
178
- }, url: ''
179
- })));
180
- await c.repo(Categories).find({
181
- orderBy: {
182
- categoryName: "asc",
183
- id: "asc"
184
- }
185
- });
186
- ok.test();
187
- });
188
- it("test order by on rest request", async () => {
189
- let ok = new Done();
190
- let c = new Remult(new RestDataProvider(() => ({
191
- httpClient: {
192
- delete: () => undefined,
193
- get: async (url) => {
194
- ok.ok();
195
- expect(url).toBe('/Categories?_sort=categoryName%2Cid&_order=asc%2Cdesc');
196
- return [];
197
- },
198
- post: () => undefined,
199
- put: () => undefined,
200
- }, url: ''
201
- })));
202
- await c.repo(Categories).find({
203
- orderBy: {
204
- categoryName: "asc",
205
- id: "desc"
206
- }
207
- });
208
- ok.test();
209
- });
210
- it("test find id on api", async () => {
211
- let myEntity = class {
212
- id = 0;
213
- title = '';
214
- };
215
- describeClass(myEntity, Entity("test", {
216
- defaultOrderBy: {
217
- title: "asc"
218
- }
219
- }), {
220
- id: Fields.integer(),
221
- title: Fields.string()
222
- });
223
- let ok = new Done();
224
- let z = new RestDataProvider(() => ({
225
- httpClient: {
226
- delete: () => undefined,
227
- get: async (url) => {
228
- ok.ok();
229
- expect(url).toBe('/test?id=8');
230
- return [];
231
- },
232
- post: () => undefined,
233
- put: () => undefined,
234
- }, url: ''
235
- }));
236
- let c = new Remult();
237
- c.dataProvider = (z);
238
- await c.repo(myEntity).findId(8);
239
- ok.test();
240
- });
241
- it("test that api reads custom correctly", async () => {
242
- let remult = new Remult();
243
- remult.dataProvider = (new InMemoryDataProvider());
244
- let c = remult.repo(entityForrawFilter);
245
- for (let id = 0; id < 5; id++) {
246
- await c.create({ id }).save();
247
- }
248
- var api = new DataApi(c, remult);
249
- let t = new TestDataApiResponse();
250
- let d = new Done();
251
- t.success = data => {
252
- expect(data.count).toBe(2);
253
- d.ok();
254
- };
255
- await api.count(t, {
256
- get: x => {
257
- if (x == customUrlToken + "filter")
258
- return "{\"oneAndThree\":true}";
259
- return undefined;
260
- }
261
- });
262
- d.test();
263
- });
264
- it("test that api reads custom correctly 2", async () => {
265
- let remult = new Remult();
266
- remult.dataProvider = (new InMemoryDataProvider());
267
- let c = remult.repo(entityForrawFilter);
268
- for (let id = 0; id < 5; id++) {
269
- await c.create({ id }).save();
270
- }
271
- var api = new DataApi(c, remult);
272
- let t = new TestDataApiResponse();
273
- let d = new Done();
274
- t.success = data => {
275
- expect(data.count).toBe(2);
276
- d.ok();
277
- };
278
- await api.count(t, {
279
- get: x => {
280
- if (x == customUrlToken)
281
- return;
282
- return undefined;
283
- }
284
- }, {
285
- "$custom$filter": {
286
- "oneAndThree": true
287
- }
288
- });
289
- d.test();
290
- });
291
- it("test that api reads custom correctly 3", async () => {
292
- let remult = new Remult();
293
- remult.dataProvider = (new InMemoryDataProvider());
294
- let c = remult.repo(entityForrawFilter);
295
- for (let id = 0; id < 5; id++) {
296
- await c.create({ id }).save();
297
- }
298
- var api = new DataApi(c, remult);
299
- let t = new TestDataApiResponse();
300
- let d = new Done();
301
- t.success = data => {
302
- expect(data.count).toBe(2);
303
- d.ok();
304
- };
305
- await api.count(t, {
306
- get: x => {
307
- if (x == customUrlToken)
308
- return;
309
- return undefined;
310
- }
311
- }, {
312
- "$custom$filter": {
313
- "oneAndThree": true
314
- }
315
- });
316
- d.test();
317
- });
318
- it("test that api reads custom correctly and translates to db", async () => {
319
- let remult = new Remult();
320
- remult.dataProvider = (new InMemoryDataProvider());
321
- let c = remult.repo(entityForrawFilter);
322
- for (let id = 0; id < 5; id++) {
323
- await c.create({ id }).save();
324
- }
325
- var api = new DataApi(c, remult);
326
- let t = new TestDataApiResponse();
327
- let d = new Done();
328
- t.success = data => {
329
- expect(data.count).toBe(2);
330
- d.ok();
331
- };
332
- await api.count(t, {
333
- get: x => {
334
- if (x == customUrlToken + "filter")
335
- return "{\"dbOneOrThree\":true}";
336
- return undefined;
337
- }
338
- });
339
- d.test();
340
- });
341
- });
342
- function x(what) {
343
- }
344
- //reproduce typescript bug with recursive types
345
- x({});
346
- @Entity('tasks')
347
- class task extends EntityBase {
348
- @Fields.string()
349
- title = '';
350
- @Fields.boolean()
351
- completed = false;
352
- }
353
- @Entity('taskWithNull')
354
- class taskWithNull extends EntityBase {
355
- @Fields.string()
356
- title = '';
357
- @Fields.boolean({ allowNull: true })
358
- completed;
359
- }
360
- describe("missing fields are added in array column", async () => {
361
- it("not allow null", async () => {
362
- let db = new InMemoryDataProvider();
363
- db.rows['tasks'] = [{
364
- title: 't1'
365
- },
366
- {
367
- title: 't2',
368
- completed: true
369
- },
370
- {
371
- title: 't3'
372
- }];
373
- let r = new Remult();
374
- r.dataProvider = (db);
375
- let rep = r.repo(task);
376
- expect((await rep.find({ orderBy: { completed: "asc", title: 'asc' } })).map(x => x.title)).toEqual(["t1", "t3", "t2"]);
377
- expect(await rep.count({ completed: false })).toBe(2);
378
- let t = (await rep.findFirst({ title: 't1' }));
379
- expect(t.completed).toBe(false);
380
- t.completed = undefined;
381
- await t.save();
382
- expect(t.completed).toBe(false);
383
- t.completed = null;
384
- await t.save();
385
- expect(t.completed).toBe(false);
386
- t = rep.create({ title: '4' });
387
- await t.save();
388
- expect(t.completed).toBe(false);
389
- });
390
- it("allow null", async () => {
391
- let db = new InMemoryDataProvider();
392
- db.rows['taskWithNull'] = [{
393
- title: 't1'
394
- },
395
- {
396
- title: 't2',
397
- completed: true
398
- },
399
- {
400
- title: 't3'
401
- }];
402
- let r = new Remult();
403
- r.dataProvider = (db);
404
- let rep = r.repo(taskWithNull);
405
- expect((await rep.find({ orderBy: { completed: "asc", title: "asc" } })).map(x => x.title)).toEqual(["t1", "t3", "t2"]);
406
- expect(await rep.count({ completed: false })).toBe(0);
407
- let t = (await rep.findFirst({ title: 't1' }));
408
- expect(t.completed).toBe(null);
409
- t.completed = undefined;
410
- await t.save();
411
- expect(t.completed).toBe(null);
412
- t.completed = null;
413
- await t.save();
414
- expect(t.completed).toBe(null);
415
- t = rep.create({ title: '4' });
416
- await t.save();
417
- expect(t.completed).toBe(null);
418
- });
419
- it("test api with and", () => {
420
- let x = {
421
- title: "abc",
422
- $and: []
423
- };
424
- x.$and.push({});
425
- let y = { $and: [x, x] };
426
- });
427
- it("test api with and", () => {
428
- let x = {
429
- $and: []
430
- };
431
- x.$and.push({});
432
- let z = x;
433
- });
434
- });
@@ -1,36 +0,0 @@
1
- import './frontend-database-tests-setup.spec';
2
- import { Remult } from "../context";
3
- import { DataApi } from "../data-api";
4
- import { DataProvider, EntityDataProvider } from "../data-interfaces";
5
- import { InMemoryDataProvider } from "../data-providers/in-memory-database";
6
- import { EntityMetadata } from "../remult3";
7
- export declare function itForEach<T>(name: string, arrayOfT: T[], runAsync: (item: T) => Promise<any>): void;
8
- export declare function fitForEach<T>(name: string, arrayOfT: T[], runAsync: (item: T) => Promise<any>): void;
9
- export declare function testAsIfOnBackend(what: () => Promise<any>): Promise<void>;
10
- export declare const ActionTestConfig: {
11
- db: InMemoryDataProvider;
12
- };
13
- export declare function testSql(runAsync: (db: {
14
- db: DataProvider;
15
- remult: Remult;
16
- }) => Promise<void>): Promise<void>;
17
- export declare function testInMemoryDb(runAsync: (db: {
18
- db: DataProvider;
19
- remult: Remult;
20
- }) => Promise<void>): Promise<void>;
21
- export declare function testRestDb(runAsync: (db: {
22
- db: DataProvider;
23
- remult: Remult;
24
- }) => Promise<void>): Promise<void>;
25
- export declare function testAllDataProviders(runAsync: (db: {
26
- db: DataProvider;
27
- remult: Remult;
28
- }) => Promise<void>): Promise<void>;
29
- export declare class MockRestDataProvider implements DataProvider {
30
- private remult;
31
- constructor(remult: Remult);
32
- getEntityDataProvider(metadata: EntityMetadata<any>): EntityDataProvider;
33
- transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
34
- isProxy: boolean;
35
- }
36
- export declare function createMockHttpDataProvider(dataApi: DataApi<any>): import("../data-interfaces").RestDataProviderHttpProvider;