remult 0.22.2 → 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 (255) 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/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  5. package/esm/src/id-entity.d.ts +4 -0
  6. package/esm/src/id-entity.js +8 -0
  7. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  8. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  9. package/package.json +1 -1
  10. package/postgres/postgresColumnSyntax.d.ts +2 -0
  11. package/postgres/postgresColumnSyntax.js +34 -0
  12. package/remult-knex/index.js +2 -2
  13. package/remult-middleware.d.ts +2 -0
  14. package/remult-middleware.js +70 -0
  15. package/server/register-actions-on-server.d.ts +3 -0
  16. package/server/register-actions-on-server.js +50 -0
  17. package/server/register-entities-on-server.d.ts +3 -0
  18. package/server/register-entities-on-server.js +19 -0
  19. package/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  20. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  21. package/src/backend-tests/my-test.backend-spec.js +217 -0
  22. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  23. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  24. package/src/id-entity.d.ts +4 -0
  25. package/src/id-entity.js +17 -0
  26. package/src/remult3/RepositoryImplementation.js +15 -13
  27. package/src/shared-tests/db-tests.db-tests.js +64 -0
  28. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  29. package/valueConverters.js +168 -0
  30. package/esm/angular/interfaces/index.d.ts +0 -1
  31. package/esm/angular/interfaces/index.js +0 -1
  32. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  33. package/esm/angular/interfaces/src/column-collection.js +0 -341
  34. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  35. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  36. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  37. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  38. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  39. package/esm/angular/interfaces/src/dataList.js +0 -42
  40. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  41. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  42. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  43. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  44. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  45. package/esm/angular/interfaces/src/public_api.js +0 -4
  46. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  47. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  48. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  49. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  50. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  51. package/esm/core/SseSubscriptionServer.js +0 -107
  52. package/esm/core/assign.d.ts +0 -1
  53. package/esm/core/assign.js +0 -5
  54. package/esm/core/classType.d.ts +0 -3
  55. package/esm/core/classType.js +0 -1
  56. package/esm/core/index.d.ts +0 -27
  57. package/esm/core/index.js +0 -25
  58. package/esm/core/inputTypes.d.ts +0 -9
  59. package/esm/core/inputTypes.js +0 -9
  60. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  61. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  62. package/esm/core/postgres/index.d.ts +0 -2
  63. package/esm/core/postgres/index.js +0 -2
  64. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  65. package/esm/core/postgres/postgres-data-provider.js +0 -120
  66. package/esm/core/postgres/schema-builder.d.ts +0 -17
  67. package/esm/core/postgres/schema-builder.js +0 -153
  68. package/esm/core/remult-fresh.d.ts +0 -17
  69. package/esm/core/remult-fresh.js +0 -29
  70. package/esm/core/remult-knex/index.d.ts +0 -30
  71. package/esm/core/remult-knex/index.js +0 -446
  72. package/esm/core/remult-mongo.d.ts +0 -24
  73. package/esm/core/remult-mongo.js +0 -254
  74. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  75. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  76. package/esm/core/server/core.d.ts +0 -4
  77. package/esm/core/server/core.js +0 -4
  78. package/esm/core/server/expressBridge.d.ts +0 -182
  79. package/esm/core/server/expressBridge.js +0 -938
  80. package/esm/core/server/index.d.ts +0 -6
  81. package/esm/core/server/index.js +0 -9
  82. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  83. package/esm/core/server/initAsyncHooks.js +0 -9
  84. package/esm/core/server/initDataProvider.d.ts +0 -2
  85. package/esm/core/server/initDataProvider.js +0 -14
  86. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  87. package/esm/core/src/__EntityValueProvider.js +0 -1
  88. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  89. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  90. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  91. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  92. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  93. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  94. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  95. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  96. package/esm/core/src/buildRestDataProvider.js +0 -113
  97. package/esm/core/src/column-interfaces.d.ts +0 -154
  98. package/esm/core/src/column-interfaces.js +0 -7
  99. package/esm/core/src/column.d.ts +0 -58
  100. package/esm/core/src/column.js +0 -174
  101. package/esm/core/src/context.d.ts +0 -134
  102. package/esm/core/src/context.js +0 -286
  103. package/esm/core/src/data-api.d.ts +0 -39
  104. package/esm/core/src/data-api.js +0 -279
  105. package/esm/core/src/data-interfaces.d.ts +0 -41
  106. package/esm/core/src/data-interfaces.js +0 -12
  107. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  108. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  109. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  110. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  111. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  112. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  113. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  114. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  115. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  116. package/esm/core/src/data-providers/sql-database.js +0 -384
  117. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  118. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  119. package/esm/core/src/entity.d.ts +0 -91
  120. package/esm/core/src/entity.js +0 -1
  121. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  122. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  123. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  124. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  125. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  126. package/esm/core/src/filter/filter-interfaces.js +0 -477
  127. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  128. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  129. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  130. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  131. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  132. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  133. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  134. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  135. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  136. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  137. package/esm/core/src/remult-proxy.d.ts +0 -35
  138. package/esm/core/src/remult-proxy.js +0 -113
  139. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  140. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  141. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  142. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  143. package/esm/core/src/remult3/index.d.ts +0 -2
  144. package/esm/core/src/remult3/index.js +0 -2
  145. package/esm/core/src/remult3/remult3.d.ts +0 -395
  146. package/esm/core/src/remult3/remult3.js +0 -2
  147. package/esm/core/src/server-action.d.ts +0 -81
  148. package/esm/core/src/server-action.js +0 -394
  149. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  150. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  151. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  152. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  153. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  154. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  155. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  156. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  157. package/esm/core/src/shared-tests/index.d.ts +0 -4
  158. package/esm/core/src/shared-tests/index.js +0 -4
  159. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  160. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  161. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  162. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  163. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  164. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  165. package/esm/core/src/sort.d.ts +0 -16
  166. package/esm/core/src/sort.js +0 -103
  167. package/esm/core/src/sql-command.d.ts +0 -19
  168. package/esm/core/src/sql-command.js +0 -1
  169. package/esm/core/src/test.d.ts +0 -3
  170. package/esm/core/src/test.js +0 -12
  171. package/esm/core/src/tests/Done.d.ts +0 -5
  172. package/esm/core/src/tests/Done.js +0 -9
  173. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  174. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  175. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  176. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  177. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  178. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  179. package/esm/core/src/tests/c.d.ts +0 -8
  180. package/esm/core/src/tests/c.js +0 -13
  181. package/esm/core/src/tests/createData.d.ts +0 -7
  182. package/esm/core/src/tests/createData.js +0 -22
  183. package/esm/core/src/tests/d.d.ts +0 -6
  184. package/esm/core/src/tests/d.js +0 -11
  185. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  186. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  187. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  188. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  189. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  190. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  191. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  192. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  193. package/esm/core/src/tests/h.d.ts +0 -6
  194. package/esm/core/src/tests/h.js +0 -24
  195. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  196. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  197. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  198. package/esm/core/src/tests/remult-3-entities.js +0 -39
  199. package/esm/core/src/tests/tasks.d.ts +0 -6
  200. package/esm/core/src/tests/tasks.js +0 -10
  201. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  202. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  203. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  204. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  205. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  206. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  207. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  208. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  209. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  211. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  212. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  213. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  214. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  215. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-json.spec.js +0 -115
  217. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  218. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  219. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  220. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  221. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  223. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  225. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  227. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  228. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  229. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  230. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  231. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  233. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  234. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  235. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  236. package/esm/core/src/tests/test-sql.spec.js +0 -170
  237. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  239. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  241. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  243. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  244. package/esm/core/src/tests/testHelper.spec.js +0 -226
  245. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  246. package/esm/core/src/tests/testModel/models.js +0 -25
  247. package/esm/core/src/validators.d.ts +0 -14
  248. package/esm/core/src/validators.js +0 -33
  249. package/esm/core/src/valueConverters.js +0 -197
  250. package/esm/core/urlBuilder.d.ts +0 -6
  251. package/esm/core/urlBuilder.js +0 -20
  252. package/esm/test-servers/shared/Task.d.ts +0 -9
  253. package/esm/test-servers/shared/Task.js +0 -32
  254. package/esm/test.d.ts +0 -5
  255. package/esm/test.js +0 -6
@@ -1 +0,0 @@
1
- export {};
@@ -1,66 +0,0 @@
1
- import { Remult } from "../context";
2
- import { InMemoryDataProvider } from "../data-providers/in-memory-database";
3
- import { Entity, Fields } from "../remult3";
4
- import { Validators } from "../validators";
5
- @Entity("nonActiveRecord", {})
6
- class taskNonActiveRecord {
7
- @Fields.uuid()
8
- id;
9
- @Fields.string({
10
- validate: Validators.required
11
- })
12
- title = '';
13
- @Fields.boolean()
14
- completed = false;
15
- }
16
- describe("test non active record", () => {
17
- let remult = new Remult(new InMemoryDataProvider());
18
- let repo = remult.repo(taskNonActiveRecord);
19
- beforeEach(() => {
20
- remult = new Remult(new InMemoryDataProvider());
21
- repo = remult.repo(taskNonActiveRecord);
22
- });
23
- it("test save of new row validation", async () => {
24
- let item = { ...new taskNonActiveRecord() };
25
- let ok = true;
26
- try {
27
- await repo.save(item);
28
- ok = false;
29
- }
30
- catch (err) {
31
- expect(err?.modelState?.title).toContain("empty");
32
- expect(item.id).toBeUndefined();
33
- }
34
- expect(ok).toBe(true);
35
- });
36
- it("test save of existing row validation", async () => {
37
- let item = { ...await repo.insert({ title: 'test' }), title: '' };
38
- let ok = true;
39
- try {
40
- await repo.save(item);
41
- ok = false;
42
- }
43
- catch (err) {
44
- expect(err?.modelState?.title).toContain("empty");
45
- }
46
- expect(ok).toBe(true);
47
- });
48
- it("test save doesn't return non row elements", async () => {
49
- let item = { ...await repo.insert({ title: 'test' }), title: 'test1', changed: true };
50
- item = await repo.save(item);
51
- expect(item.changed).toBe(undefined);
52
- });
53
- it("delete works with non active record", async () => {
54
- let item = await repo.save({ title: 'a' });
55
- await repo.insert({ title: 'b' });
56
- expect(repo.getEntityRef(item).isNew()).toBe(false);
57
- await repo.delete({ ...item });
58
- expect(await repo.count()).toBe(1);
59
- });
60
- it("test save doesn't return the messed up object", async () => {
61
- var x = { ...new taskNonActiveRecord(), title: 'a', changed: true };
62
- x = await repo.insert(x);
63
- expect(x.changed).toBe(undefined);
64
- expect(x.id.length > 1).toBe(true);
65
- });
66
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,189 +0,0 @@
1
- import { WebSqlDataProvider } from '../data-providers/web-sql-data-provider';
2
- import { Remult } from '../context';
3
- import { SqlDatabase } from '../data-providers/sql-database';
4
- import { InMemoryDataProvider } from '../data-providers/in-memory-database';
5
- import { Field, Entity, EntityBase, FieldType, Fields, IdEntity } from '../remult3';
6
- import { entityFilterToJson, Filter } from '../filter/filter-interfaces';
7
- import { assign } from '../../assign';
8
- describe("test object column", () => {
9
- var wsql = new WebSqlDataProvider("test");
10
- let db = new SqlDatabase(wsql);
11
- let remult = new Remult();
12
- remult.dataProvider = (db);
13
- async function deleteAll() {
14
- let e = remult.repo(ObjectColumnTest).metadata;
15
- await wsql.dropTable(e);
16
- await wsql.createTable(e);
17
- }
18
- it("test that changes to inner items are monitored", async () => {
19
- await deleteAll();
20
- var x = remult.repo(ObjectColumnTest).create({ id: 1, col: { firstName: 'yael', lastName: 'katri' } });
21
- await x.save();
22
- x.col.lastName = 'honig';
23
- expect(x.$.col.valueChanged()).toBe(true);
24
- expect(x._.wasChanged()).toBe(true);
25
- await x.save();
26
- expect(x.$.col.valueChanged()).toBe(false);
27
- expect(x._.wasChanged()).toBe(false);
28
- expect(x.col.lastName).toBe("honig");
29
- x = await remult.repo(ObjectColumnTest).findFirst();
30
- expect(x.col.lastName).toBe("honig");
31
- });
32
- it("test basics with wsql", async () => {
33
- await deleteAll();
34
- var x = remult.repo(ObjectColumnTest).create();
35
- x.id = 1;
36
- x.col = {
37
- firstName: 'noam',
38
- lastName: 'honig'
39
- };
40
- await x.save();
41
- x = await remult.repo(ObjectColumnTest).findFirst();
42
- expect(x.col.firstName).toBe('noam');
43
- x = await remult.repo(ObjectColumnTest).findFirst({ col: { $contains: "yael" } });
44
- expect(x).toBeUndefined();
45
- x = await remult.repo(ObjectColumnTest).findFirst({ col: { $contains: "noam" } });
46
- expect(x.id).toBe(1);
47
- expect(x.phone1).toBeNull();
48
- expect(x.phone2).toBeNull();
49
- expect(x.phone3).toBeNull();
50
- let sqlr = (await db.execute('select phone1,phone2,phone3 from ' + (await x._.repository.metadata.getDbName()))).rows[0];
51
- expect(sqlr.phone1).toBe('');
52
- expect(sqlr.phone2).toBeNull();
53
- expect(sqlr.phone3).toBe('');
54
- assign(x, {
55
- phone1: new Phone("123"),
56
- phone2: new Phone("456"),
57
- phone3: new Phone("789")
58
- });
59
- await x.save();
60
- sqlr = (await db.execute('select phone1,phone2,phone3 from ' + (await x._.repository.metadata.getDbName()))).rows[0];
61
- expect(sqlr.phone1).toBe('123');
62
- expect(sqlr.phone2).toBe('456');
63
- expect(sqlr.phone3).toBe('789');
64
- await assign(x, {
65
- phone1: null,
66
- phone2: null,
67
- phone3: null
68
- }).save();
69
- sqlr = (await db.execute('select phone1,phone2,phone3 from ' + (await x._.repository.metadata.getDbName()))).rows[0];
70
- expect(sqlr.phone1).toBe('');
71
- expect(sqlr.phone2).toBeNull();
72
- expect(sqlr.phone3).toBe('');
73
- });
74
- it("test contains on custom type", async () => {
75
- await deleteAll();
76
- await remult.repo(ObjectColumnTest).create({
77
- id: 1,
78
- col: { firstName: 'noam', lastName: 'honig' },
79
- phone1: new Phone("1234")
80
- }).save();
81
- await remult.repo(ObjectColumnTest).create({
82
- id: 2,
83
- col: { firstName: 'noam', lastName: 'honig' },
84
- phone1: new Phone("5678")
85
- }).save();
86
- let r = remult.repo(ObjectColumnTest).metadata;
87
- expect(await remult.repo(ObjectColumnTest).count({ phone1: { $contains: "23" } })).toBe(1);
88
- expect(await remult.repo(ObjectColumnTest).count(Filter.entityFilterFromJson(r, entityFilterToJson(r, { phone1: { $contains: "23" } })))).toBe(1);
89
- });
90
- it("test basics with json", async () => {
91
- var mem = new InMemoryDataProvider();
92
- var c = new Remult();
93
- c.dataProvider = (mem);
94
- var x = c.repo(ObjectColumnTest).create();
95
- x.id = 1;
96
- x.col = {
97
- firstName: 'noam',
98
- lastName: 'honig'
99
- };
100
- await x.save();
101
- x = await c.repo(ObjectColumnTest).findFirst();
102
- expect(x.col.firstName).toBe('noam');
103
- expect(mem.rows[x._.repository.metadata.key][0].col).toEqual({
104
- firstName: 'noam',
105
- lastName: 'honig'
106
- });
107
- });
108
- it("test string[]", async () => {
109
- await deleteAll();
110
- let x = await remult.repo(ObjectColumnTest).create({
111
- id: 1,
112
- col: { firstName: 'noam', lastName: 'honig' }
113
- }).save();
114
- expect(x.tags).toBe(undefined);
115
- expect(x.tags2).toBe(null);
116
- x.tags = ["a", "b"];
117
- await x.save();
118
- expect(x.tags).toEqual(["a", "b"]);
119
- let sqlr = (await db.execute('select tags,tags2 from ' + (await x._.repository.metadata.getDbName()))).rows[0];
120
- expect(sqlr.tags).toBe(JSON.stringify(["a", "b"]));
121
- expect(sqlr.tags2).toBeNull();
122
- });
123
- //
124
- });
125
- class Phone {
126
- phone;
127
- constructor(phone) {
128
- this.phone = phone;
129
- }
130
- }
131
- @FieldType({
132
- valueConverter: {
133
- fromJson: x => x ? new Phone4(x) : null,
134
- toJson: x => x ? x.phone : ''
135
- }
136
- })
137
- class Phone4 {
138
- phone;
139
- constructor(phone) {
140
- this.phone = phone;
141
- }
142
- }
143
- @Entity('objectColumnTest')
144
- class ObjectColumnTest extends EntityBase {
145
- @Fields.integer()
146
- id;
147
- @Fields.object()
148
- col;
149
- @Field(() => Phone, {
150
- valueConverter: {
151
- fromJson: x => x ? new Phone(x) : null,
152
- toJson: x => x ? x.phone : ''
153
- }
154
- })
155
- phone1;
156
- @Field(() => Phone, {
157
- valueConverter: {
158
- fromJson: x => x ? new Phone(x) : null,
159
- toJson: x => x ? x.phone : null
160
- },
161
- allowNull: true
162
- })
163
- phone2;
164
- @Field(() => Phone, {
165
- valueConverter: {
166
- fromJson: x => x ? new Phone(x) : null,
167
- toJson: x => x ? x.phone : ''
168
- }
169
- })
170
- phone3;
171
- @Field(() => Phone4)
172
- phone4;
173
- @Fields.object()
174
- tags;
175
- @Fields.object({ allowNull: true })
176
- tags2;
177
- }
178
- it("Test original values address defaults", async () => {
179
- let r = new Remult();
180
- let c = r.repo(somethingWithDefaults).create();
181
- expect(c.name).toBe("noam");
182
- expect(c.$.name.value).toBe("noam");
183
- expect(c.$.name.originalValue).toBe('noam');
184
- });
185
- @Entity('somethingWithDefaults', {})
186
- class somethingWithDefaults extends IdEntity {
187
- @Fields.string()
188
- name = 'noam';
189
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,328 +0,0 @@
1
- import { createData } from "./createData";
2
- import { Remult, queryConfig } from '../context';
3
- import { Entity, EntityBase, Fields } from '../remult3';
4
- import { Categories } from './remult-3-entities';
5
- import { Sort } from '../sort';
6
- import { CompoundIdField } from '../column';
7
- import { entityFilterToJson } from '../filter/filter-interfaces';
8
- import { testRestDb } from "./testHelper.spec";
9
- describe("test paged foreach ", () => {
10
- queryConfig.defaultPageSize = 2;
11
- it("basic foreach with where", async () => {
12
- let [c] = await createData(async (insert) => {
13
- await insert(1, 'noam');
14
- await insert(2, 'yael');
15
- await insert(3, 'yoni');
16
- await insert(4, 'shay');
17
- await insert(5, 'ido');
18
- });
19
- let i = 0;
20
- for await (const x of c.query({ where: { categoryName: { $gte: "n" } } })) {
21
- expect(x.id).toBe([1, 2, 3, 4][i++]);
22
- }
23
- expect(i).toBe(4);
24
- });
25
- it("basic foreach with where 2", async () => {
26
- let [c] = await createData(async (insert) => {
27
- await insert(1, 'noam');
28
- await insert(2, 'yael');
29
- await insert(3, 'yoni');
30
- await insert(4, 'shay');
31
- await insert(5, 'ido');
32
- });
33
- let i = 0;
34
- for await (const x of c.query({
35
- where: { categoryName: { ">=": "n" } }
36
- })) {
37
- expect(x.id).toBe([1, 2, 3, 4][i++]);
38
- }
39
- expect(i).toBe(4);
40
- });
41
- it("basic foreach with order by", async () => {
42
- let [c] = await createData(async (insert) => {
43
- await insert(1, 'noam');
44
- await insert(2, 'yael');
45
- await insert(3, 'yoni');
46
- await insert(4, 'shay');
47
- await insert(5, 'ido');
48
- });
49
- let i = 0;
50
- for await (const x of c.query({
51
- orderBy: { categoryName: "asc" }
52
- })) {
53
- expect(x.id).toBe([5, 1, 4, 2, 3][i++]);
54
- }
55
- expect(i).toBe(5);
56
- expect((await c.findFirst({}, {
57
- orderBy: { categoryName: "asc" }
58
- })).id).toBe(5);
59
- });
60
- it("basic foreach with order by desc", async () => {
61
- let [c] = await createData(async (insert) => {
62
- await insert(1, 'noam');
63
- await insert(2, 'yael');
64
- await insert(3, 'yoni');
65
- await insert(4, 'shay');
66
- await insert(5, 'ido');
67
- });
68
- let i = 0;
69
- for await (const x of c.query({
70
- orderBy: { categoryName: "desc" }
71
- })) {
72
- expect(x.id).toBe([3, 2, 4, 1, 5][i++]);
73
- }
74
- expect(i).toBe(5);
75
- });
76
- it("iterate", async () => {
77
- let [c] = await createData(async (insert) => {
78
- await insert(1, 'noam');
79
- await insert(2, 'yael');
80
- await insert(3, 'yoni');
81
- await insert(4, 'shay');
82
- await insert(5, 'ido');
83
- });
84
- var i = 0;
85
- for await (const x of c.query()) {
86
- expect(x.id).toBe(++i);
87
- }
88
- expect(i).toBe(5);
89
- });
90
- it("paginate", async () => {
91
- let [c] = await createData(async (insert) => {
92
- await insert(1, 'noam');
93
- await insert(2, 'yael');
94
- await insert(3, 'yoni');
95
- await insert(4, 'shay');
96
- await insert(5, 'ido');
97
- });
98
- let p = await c.query().paginator();
99
- expect(p.items.length).toBe(2);
100
- expect(await p.count()).toBe(5);
101
- expect(p.items.map(x => x.id)).toEqual([1, 2]);
102
- expect(p.hasNextPage).toBe(true);
103
- p = await p.nextPage();
104
- expect(p.items.map(x => x.id)).toEqual([3, 4]);
105
- expect(p.hasNextPage).toBe(true);
106
- p = await p.nextPage();
107
- expect(p.items.map(x => x.id)).toEqual([5]);
108
- expect(p.hasNextPage).toBe(false);
109
- });
110
- it("paginate3", async () => {
111
- let [c] = await createData(async (insert) => {
112
- await insert(1, 'aoam');
113
- await insert(2, 'bael');
114
- await insert(3, 'coni');
115
- await insert(4, 'dhay');
116
- await insert(5, 'edo');
117
- });
118
- let p = await c.query({ where: { $or: [{ categoryName: { $contains: "" } }, { categoryName: { $contains: "" } }] }, orderBy: { categoryName: "asc" } }).paginator();
119
- expect(p.items.length).toBe(2);
120
- expect(await p.count()).toBe(5);
121
- expect(p.items.map(x => x.id)).toEqual([1, 2]);
122
- expect(p.hasNextPage).toBe(true);
123
- p = await p.nextPage();
124
- expect(p.items.map(x => x.id)).toEqual([3, 4]);
125
- expect(p.hasNextPage).toBe(true);
126
- p = await p.nextPage();
127
- expect(p.items.map(x => x.id)).toEqual([5]);
128
- expect(p.hasNextPage).toBe(false);
129
- });
130
- it("paginate2", async () => {
131
- testRestDb(async ({ remult }) => {
132
- let c = remult.repo(Categories);
133
- await c.insert([
134
- { id: 1, categoryName: 'aoam' },
135
- { id: 2, categoryName: 'bael' }
136
- ]);
137
- await c.insert({ id: 3, categoryName: 'coni' });
138
- await c.insert({ id: 4, categoryName: 'dhay' });
139
- await c.insert({ id: 5, categoryName: 'edo' });
140
- let p = await c.query({ where: { $or: [{ categoryName: { $contains: "" } }, { categoryName: { $contains: "" } }] }, orderBy: { categoryName: "asc" } }).paginator();
141
- expect(p.items.length).toBe(2);
142
- expect(await p.count()).toBe(5);
143
- expect(p.items.map(x => x.id)).toEqual([1, 2]);
144
- expect(p.hasNextPage).toBe(true);
145
- p = await p.nextPage();
146
- expect(p.items.map(x => x.id)).toEqual([3, 4]);
147
- expect(p.hasNextPage).toBe(true);
148
- p = await p.nextPage();
149
- expect(p.items.map(x => x.id)).toEqual([5]);
150
- expect(p.hasNextPage).toBe(false);
151
- });
152
- });
153
- it("paginate", async () => {
154
- let [c] = await createData(async (insert) => {
155
- await insert(1, 'noam');
156
- await insert(2, 'yael');
157
- await insert(3, 'yoni');
158
- await insert(4, 'shay');
159
- await insert(5, 'ido');
160
- });
161
- let p = await c.query({
162
- pageSize: 3
163
- });
164
- expect((await p.getPage()).map(x => x.id)).toEqual([1, 2, 3]);
165
- expect((await p.getPage(2)).map(x => x.id)).toEqual([4, 5]);
166
- });
167
- it("paginate on boundries", async () => {
168
- let [c] = await createData(async (insert) => {
169
- await insert(1, 'noam');
170
- await insert(2, 'yael');
171
- await insert(3, 'yoni');
172
- await insert(4, 'shay');
173
- });
174
- let p = await c.query().paginator();
175
- expect(p.items.length).toBe(2);
176
- expect(await p.count()).toBe(4);
177
- expect(p.items.map(x => x.id)).toEqual([1, 2]);
178
- expect(p.hasNextPage).toBe(true);
179
- p = await p.nextPage();
180
- expect(p.items.map(x => x.id)).toEqual([3, 4]);
181
- expect(p.hasNextPage).toBe(true);
182
- p = await p.nextPage();
183
- expect(p.items.map(x => x.id)).toEqual([]);
184
- expect(p.hasNextPage).toBe(false);
185
- });
186
- it("test toArray", async () => {
187
- let [c] = await createData(async (insert) => {
188
- await insert(1, 'noam');
189
- await insert(2, 'yael');
190
- await insert(3, 'yoni');
191
- await insert(4, 'shay');
192
- await insert(5, 'ido');
193
- });
194
- var i = 0;
195
- for (const x of await c.query({ pageSize: 10 }).getPage()) {
196
- expect(x.id).toBe(++i);
197
- }
198
- expect(i).toBe(5);
199
- });
200
- it("test make sort unique", async () => {
201
- let remult = new Remult();
202
- let e = remult.repo(Categories);
203
- function test(orderBy, ...sort) {
204
- let z = { ...orderBy };
205
- let s = Sort.createUniqueEntityOrderBy(e.metadata, orderBy);
206
- let expected = {};
207
- for (const c of sort) {
208
- expected[c.key] = "asc";
209
- }
210
- expect(s).toEqual(expected);
211
- expect(orderBy).toEqual(z);
212
- }
213
- test({ id: "asc" }, e.metadata.fields.id);
214
- test({ categoryName: "asc" }, e.metadata.fields.categoryName, e.metadata.fields.id);
215
- });
216
- it("unique sort and compound id", async () => {
217
- let remult = new Remult();
218
- let eDefs = remult.repo(theTable).metadata;
219
- let e = eDefs.fields;
220
- function test(orderBy, ...sort) {
221
- let s = Sort.createUniqueEntityOrderBy(eDefs, orderBy);
222
- let expected = {};
223
- for (const c of sort) {
224
- expected[c.key] = "asc";
225
- }
226
- expect(s).toEqual(expected);
227
- }
228
- test({ b: "asc", c: "asc" }, e.b, e.c, e.a);
229
- test({ a: "asc", b: "asc" }, e.a, e.b);
230
- test({ a: "asc" }, e.a, e.b);
231
- test({ b: "asc" }, e.b, e.a);
232
- test({ c: "asc" }, e.c, e.a, e.b);
233
- });
234
- it("create rows after filter compound id", async () => {
235
- let remult = new Remult();
236
- let eDefs = remult.repo(theTable);
237
- let e = eDefs.create();
238
- e.a = 'a';
239
- e.b = 'b';
240
- e.c = 'c';
241
- async function test(orderBy, expectedWhere) {
242
- expect(JSON.stringify(await entityFilterToJson(eDefs.metadata, await eDefs.createAfterFilter(orderBy, e)))).toEqual(JSON.stringify(await entityFilterToJson(eDefs.metadata, expectedWhere)));
243
- }
244
- test({ a: "asc" }, { a: { $gt: 'a' } });
245
- test({ a: "desc" }, { a: { $lt: 'a' } });
246
- test({ a: "asc", b: "asc" }, {
247
- $or: [
248
- { a: { $gt: 'a' } },
249
- { a: 'a', b: { $gt: 'b' } }
250
- ]
251
- });
252
- });
253
- it("create rows after filter, values are frozen when filter is created", async () => {
254
- let remult = new Remult();
255
- let eDefs = remult.repo(theTable);
256
- let e = eDefs.create();
257
- e.a = 'a';
258
- e.b = 'b';
259
- e.c = 'c';
260
- let f = await eDefs.createAfterFilter({ a: "asc", b: "asc" }, e);
261
- e.a = '1';
262
- e.b = '2';
263
- expect(JSON.stringify(await entityFilterToJson(eDefs.metadata, f))).toEqual(JSON.stringify(await entityFilterToJson(eDefs.metadata, {
264
- $or: [
265
- { a: { $gt: 'a' } },
266
- { a: 'a', b: { $gt: 'b' } }
267
- ]
268
- })));
269
- });
270
- it("serialize filter with or", async () => {
271
- let remult = new Remult();
272
- let eDefs = remult.repo(theTable);
273
- let e = eDefs.create();
274
- async function test(expectedWhere, expected) {
275
- expect(JSON.stringify(await entityFilterToJson(eDefs.metadata, expectedWhere))).toEqual(JSON.stringify(expected));
276
- }
277
- await test({
278
- $or: [
279
- {
280
- a: 'a',
281
- b: { $gt: 'b' }
282
- },
283
- {
284
- a: { $gt: 'a' }
285
- }
286
- ]
287
- }, {
288
- OR: [
289
- {
290
- a: 'a',
291
- "b.gt": 'b'
292
- },
293
- {
294
- "a.gt": 'a'
295
- }
296
- ]
297
- });
298
- await test({
299
- a: 'a',
300
- b: { $gt: 'b' }
301
- }, {
302
- a: 'a',
303
- "b.gt": 'b'
304
- });
305
- await test({
306
- $or: [
307
- { a: 'a' },
308
- { b: { $gt: 'b' } }
309
- ]
310
- }, {
311
- OR: [
312
- { a: 'a' },
313
- { "b.gt": 'b' }
314
- ]
315
- });
316
- });
317
- });
318
- @Entity('', {
319
- id: t => new CompoundIdField(t.a, t.b)
320
- })
321
- class theTable extends EntityBase {
322
- @Fields.string()
323
- a;
324
- @Fields.string()
325
- b;
326
- @Fields.string()
327
- c;
328
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,23 +0,0 @@
1
- import { DataControl } from '../../../angular/interfaces';
2
- import { DataControl2Component } from '../../../angular/src/angular/data-control/data-control2.component';
3
- import { RemultAngularPluginsService } from '../../../angular/src/angular/RemultAngularPluginsService';
4
- import { Fields, getFields } from '../remult3';
5
- class classWithColumn {
6
- static click;
7
- @DataControl({
8
- click: (r) => classWithColumn.click = r
9
- })
10
- @Fields.string()
11
- a = '';
12
- _ = getFields(this);
13
- }
14
- describe("remult angular", () => {
15
- it("stand alone data control", async () => {
16
- let dc = new DataControl2Component(new RemultAngularPluginsService(), undefined);
17
- let c = new classWithColumn();
18
- c.a = '1';
19
- dc.field = c._.a;
20
- dc.click();
21
- expect(classWithColumn.click.a).toBe('1');
22
- });
23
- });
@@ -1,7 +0,0 @@
1
- export declare class myType {
2
- what: (n: number) => string;
3
- static x: myType;
4
- static y: myType;
5
- id: any;
6
- constructor(what: (n: number) => string);
7
- }