remult 0.22.3 → 0.22.4

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 (253) hide show
  1. package/esm/angular/interfaces/index.d.ts +1 -0
  2. package/esm/angular/interfaces/index.js +1 -0
  3. package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
  4. package/esm/angular/interfaces/src/column-collection.js +341 -0
  5. package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
  6. package/esm/angular/interfaces/src/data-area-settings.js +35 -0
  7. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
  8. package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
  9. package/esm/angular/interfaces/src/dataList.d.ts +13 -0
  10. package/esm/angular/interfaces/src/dataList.js +42 -0
  11. package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
  12. package/esm/angular/interfaces/src/filter-helper.js +59 -0
  13. package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
  14. package/esm/angular/interfaces/src/grid-settings.js +387 -0
  15. package/esm/angular/interfaces/src/public_api.d.ts +4 -0
  16. package/esm/angular/interfaces/src/public_api.js +4 -0
  17. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
  18. package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
  19. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
  20. package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
  21. package/esm/core/SseSubscriptionServer.d.ts +33 -0
  22. package/esm/core/SseSubscriptionServer.js +107 -0
  23. package/esm/core/assign.d.ts +1 -0
  24. package/esm/core/assign.js +5 -0
  25. package/esm/core/classType.d.ts +3 -0
  26. package/esm/core/classType.js +1 -0
  27. package/esm/core/index.d.ts +27 -0
  28. package/esm/core/index.js +25 -0
  29. package/esm/core/inputTypes.d.ts +9 -0
  30. package/esm/core/inputTypes.js +9 -0
  31. package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
  32. package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
  33. package/esm/core/postgres/index.d.ts +2 -0
  34. package/esm/core/postgres/index.js +2 -0
  35. package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
  36. package/esm/core/postgres/postgres-data-provider.js +120 -0
  37. package/esm/core/postgres/schema-builder.d.ts +17 -0
  38. package/esm/core/postgres/schema-builder.js +153 -0
  39. package/esm/core/remult-fresh.d.ts +17 -0
  40. package/esm/core/remult-fresh.js +29 -0
  41. package/esm/core/remult-knex/index.d.ts +30 -0
  42. package/esm/core/remult-knex/index.js +446 -0
  43. package/esm/core/remult-mongo.d.ts +24 -0
  44. package/esm/core/remult-mongo.js +254 -0
  45. package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
  46. package/esm/core/server/JsonEntityFileStorage.js +25 -0
  47. package/esm/core/server/core.d.ts +4 -0
  48. package/esm/core/server/core.js +4 -0
  49. package/esm/core/server/expressBridge.d.ts +182 -0
  50. package/esm/core/server/expressBridge.js +938 -0
  51. package/esm/core/server/index.d.ts +6 -0
  52. package/esm/core/server/index.js +9 -0
  53. package/esm/core/server/initAsyncHooks.d.ts +1 -0
  54. package/esm/core/server/initAsyncHooks.js +9 -0
  55. package/esm/core/server/initDataProvider.d.ts +2 -0
  56. package/esm/core/server/initDataProvider.js +14 -0
  57. package/esm/core/src/__EntityValueProvider.d.ts +11 -0
  58. package/esm/core/src/__EntityValueProvider.js +1 -0
  59. package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
  60. package/esm/core/src/__RowsOfDataForTesting.js +1 -0
  61. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
  62. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
  63. package/{src → esm/core/src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  64. package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
  65. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
  66. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
  67. package/esm/core/src/buildRestDataProvider.d.ts +31 -0
  68. package/esm/core/src/buildRestDataProvider.js +113 -0
  69. package/esm/core/src/column-interfaces.d.ts +154 -0
  70. package/esm/core/src/column-interfaces.js +7 -0
  71. package/esm/core/src/column.d.ts +58 -0
  72. package/esm/core/src/column.js +174 -0
  73. package/esm/core/src/context.d.ts +134 -0
  74. package/esm/core/src/context.js +286 -0
  75. package/esm/core/src/data-api.d.ts +39 -0
  76. package/esm/core/src/data-api.js +279 -0
  77. package/esm/core/src/data-interfaces.d.ts +41 -0
  78. package/esm/core/src/data-interfaces.js +12 -0
  79. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
  80. package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
  81. package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
  82. package/esm/core/src/data-providers/in-memory-database.js +14 -0
  83. package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
  84. package/esm/core/src/data-providers/json-data-provider.js +55 -0
  85. package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
  86. package/esm/core/src/data-providers/rest-data-provider.js +256 -0
  87. package/esm/core/src/data-providers/sql-database.d.ts +33 -0
  88. package/esm/core/src/data-providers/sql-database.js +384 -0
  89. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
  90. package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
  91. package/esm/core/src/entity.d.ts +91 -0
  92. package/esm/core/src/entity.js +1 -0
  93. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
  94. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
  95. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
  96. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
  97. package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
  98. package/esm/core/src/filter/filter-interfaces.js +477 -0
  99. package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
  100. package/esm/core/src/live-query/LiveQueryClient.js +188 -0
  101. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
  102. package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
  103. package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
  104. package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
  105. package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
  106. package/esm/core/src/live-query/SubscriptionServer.js +111 -0
  107. package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
  108. package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
  109. package/esm/core/src/remult-proxy.d.ts +35 -0
  110. package/esm/core/src/remult-proxy.js +113 -0
  111. package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
  112. package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
  113. package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
  114. package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
  115. package/esm/core/src/remult3/index.d.ts +2 -0
  116. package/esm/core/src/remult3/index.js +2 -0
  117. package/esm/core/src/remult3/remult3.d.ts +395 -0
  118. package/esm/core/src/remult3/remult3.js +2 -0
  119. package/esm/core/src/server-action.d.ts +81 -0
  120. package/esm/core/src/server-action.js +394 -0
  121. package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
  122. package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
  123. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
  124. package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
  125. package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
  126. package/esm/core/src/shared-tests/deleteAll.js +4 -0
  127. package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
  128. package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
  129. package/esm/core/src/shared-tests/index.d.ts +4 -0
  130. package/esm/core/src/shared-tests/index.js +4 -0
  131. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
  132. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
  133. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
  134. package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
  135. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
  136. package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
  137. package/esm/core/src/sort.d.ts +16 -0
  138. package/esm/core/src/sort.js +103 -0
  139. package/esm/core/src/sql-command.d.ts +19 -0
  140. package/esm/core/src/sql-command.js +1 -0
  141. package/esm/core/src/test.d.ts +3 -0
  142. package/esm/core/src/test.js +12 -0
  143. package/esm/core/src/tests/Done.d.ts +5 -0
  144. package/esm/core/src/tests/Done.js +9 -0
  145. package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
  146. package/esm/core/src/tests/RowProvider.spec.js +631 -0
  147. package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
  148. package/esm/core/src/tests/TestDataApiResponse.js +22 -0
  149. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
  150. package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
  151. package/esm/core/src/tests/c.d.ts +8 -0
  152. package/esm/core/src/tests/c.js +13 -0
  153. package/esm/core/src/tests/createData.d.ts +7 -0
  154. package/esm/core/src/tests/createData.js +22 -0
  155. package/esm/core/src/tests/d.d.ts +6 -0
  156. package/esm/core/src/tests/d.js +11 -0
  157. package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
  158. package/esm/core/src/tests/dWithPrefilter.js +18 -0
  159. package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
  160. package/esm/core/src/tests/entityForCustomFilter.js +33 -0
  161. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
  162. package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
  163. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
  164. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
  165. package/esm/core/src/tests/h.d.ts +6 -0
  166. package/esm/core/src/tests/h.js +24 -0
  167. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
  168. package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
  169. package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
  170. package/esm/core/src/tests/remult-3-entities.js +39 -0
  171. package/esm/core/src/tests/tasks.d.ts +6 -0
  172. package/esm/core/src/tests/tasks.js +10 -0
  173. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  174. package/esm/core/src/tests/test-context-as-storage.spec.js +1 -0
  175. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
  176. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
  177. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
  178. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
  179. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
  180. package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
  181. package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
  182. package/esm/core/src/tests/test-default-value.spec.js +33 -0
  183. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
  184. package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
  185. package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
  186. package/esm/core/src/tests/test-exceptions.spec.js +375 -0
  187. package/esm/core/src/tests/test-json.spec.d.ts +1 -0
  188. package/esm/core/src/tests/test-json.spec.js +115 -0
  189. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
  190. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
  191. package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
  192. package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
  193. package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
  194. package/esm/core/src/tests/test-object-column.spec.js +189 -0
  195. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
  196. package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
  197. package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
  198. package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
  199. package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
  200. package/esm/core/src/tests/test-server-controller.spec.js +489 -0
  201. package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
  202. package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
  203. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
  204. package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
  205. package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
  206. package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
  207. package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
  208. package/esm/core/src/tests/test-sql.spec.js +170 -0
  209. package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
  210. package/esm/core/src/tests/test-subscribe.spec.js +135 -0
  211. package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
  212. package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
  213. package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
  214. package/esm/core/src/tests/test-where-api.spec.js +434 -0
  215. package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
  216. package/esm/core/src/tests/testHelper.spec.js +226 -0
  217. package/esm/core/src/tests/testModel/models.d.ts +16 -0
  218. package/esm/core/src/tests/testModel/models.js +25 -0
  219. package/esm/core/src/validators.d.ts +14 -0
  220. package/esm/core/src/validators.js +33 -0
  221. package/{valueConverters.d.ts → esm/core/src/valueConverters.d.ts} +13 -12
  222. package/esm/core/src/valueConverters.js +197 -0
  223. package/esm/core/urlBuilder.d.ts +6 -0
  224. package/esm/core/urlBuilder.js +20 -0
  225. package/esm/graphql.js +27 -27
  226. package/esm/postgres/schema-builder.js +4 -4
  227. package/esm/src/remult3/RepositoryImplementation.d.ts +1 -1
  228. package/esm/src/remult3/RepositoryImplementation.js +27 -4
  229. package/esm/src/shared-tests/db-tests.db-tests.js +57 -0
  230. package/esm/test-servers/shared/Task.d.ts +9 -0
  231. package/esm/test-servers/shared/Task.js +32 -0
  232. package/esm/test.d.ts +5 -0
  233. package/esm/test.js +6 -0
  234. package/package.json +1 -1
  235. package/src/remult3/RepositoryImplementation.d.ts +1 -1
  236. package/src/remult3/RepositoryImplementation.js +88 -63
  237. package/src/shared-tests/db-tests.db-tests.js +97 -0
  238. package/esm/src/id-entity.d.ts +0 -4
  239. package/esm/src/id-entity.js +0 -8
  240. package/postgres/postgresColumnSyntax.d.ts +0 -2
  241. package/postgres/postgresColumnSyntax.js +0 -34
  242. package/remult-middleware.d.ts +0 -2
  243. package/remult-middleware.js +0 -70
  244. package/server/register-actions-on-server.d.ts +0 -3
  245. package/server/register-actions-on-server.js +0 -50
  246. package/server/register-entities-on-server.d.ts +0 -3
  247. package/server/register-entities-on-server.js +0 -19
  248. package/src/backend-tests/my-test.backend-spec.js +0 -217
  249. package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
  250. package/src/backend-tests/test-http-server.backend-spec.js +0 -342
  251. package/src/id-entity.d.ts +0 -4
  252. package/src/id-entity.js +0 -17
  253. package/valueConverters.js +0 -168
@@ -0,0 +1,2 @@
1
+ import { Repository } from "../remult3";
2
+ export declare function deleteAll<entityType>(r: Repository<entityType>): Promise<Repository<entityType>>;
@@ -0,0 +1,4 @@
1
+ export async function deleteAll(r) {
2
+ await Promise.all((await r.find()).map(x => r.delete(x)));
3
+ return r;
4
+ }
@@ -0,0 +1,14 @@
1
+ import { ClassType } from '../../classType';
2
+ import { Remult } from '../context';
3
+ import { EntityBase, Repository } from '../remult3';
4
+ export declare var testConfiguration: {
5
+ restDbRunningOnServer: boolean;
6
+ };
7
+ export declare class entityWithValidations extends EntityBase {
8
+ private remult;
9
+ myId: number;
10
+ name: string;
11
+ static savingRowCount: number;
12
+ constructor(remult: Remult);
13
+ static create4RowsInDp(createEntity: (entity: ClassType<any>) => Promise<Repository<entityWithValidations>>): Promise<Repository<entityWithValidations>>;
14
+ }
@@ -0,0 +1,43 @@
1
+ import { Entity, EntityBase, Fields } from '../remult3';
2
+ export var testConfiguration = { restDbRunningOnServer: false };
3
+ @Entity('', {
4
+ allowApiCrud: true,
5
+ saving: async (t) => {
6
+ if (!t.name || t.name.length < 3)
7
+ t._.fields.name.error = 'invalid';
8
+ if (!testConfiguration.restDbRunningOnServer)
9
+ entityWithValidations.savingRowCount++;
10
+ }
11
+ })
12
+ export class entityWithValidations extends EntityBase {
13
+ remult;
14
+ @Fields.integer()
15
+ myId;
16
+ @Fields.string()
17
+ name;
18
+ static savingRowCount = 0;
19
+ constructor(remult) {
20
+ super();
21
+ this.remult = remult;
22
+ }
23
+ static async create4RowsInDp(createEntity) {
24
+ let s = await createEntity(entityWithValidations);
25
+ let c = s.create();
26
+ c.myId = 1;
27
+ c.name = 'noam';
28
+ await c._.save();
29
+ c = s.create();
30
+ c.myId = 2;
31
+ c.name = 'yael';
32
+ await c._.save();
33
+ c = s.create();
34
+ c.myId = 3;
35
+ c.name = 'yoni';
36
+ await c._.save();
37
+ c = s.create();
38
+ c.myId = 4;
39
+ c.name = 'maayan';
40
+ await c._.save();
41
+ return s;
42
+ }
43
+ }
@@ -0,0 +1,4 @@
1
+ import './db-tests.db-tests';
2
+ import './test-custom-id-column.spec';
3
+ import './test-special-value.spec';
4
+ import './test-update-with-null.spec';
@@ -0,0 +1,4 @@
1
+ import './db-tests.db-tests';
2
+ import './test-custom-id-column.spec';
3
+ import './test-special-value.spec';
4
+ import './test-update-with-null.spec';
@@ -0,0 +1,67 @@
1
+ import { Entity, EntityBase, Fields } from '../remult3';
2
+ import { describeClass } from '../remult3/DecoratorReplacer';
3
+ import { testAll } from './db-tests-setup';
4
+ describe("custom id column", () => {
5
+ testAll("basic test", async ({ createEntity }) => {
6
+ let type = class extends EntityBase {
7
+ a;
8
+ b;
9
+ };
10
+ describeClass(type, Entity('custom', { allowApiCrud: true }), {
11
+ a: Fields.number(),
12
+ b: Fields.number()
13
+ });
14
+ let c = await createEntity(type);
15
+ let r = c.create();
16
+ r.a = 1;
17
+ r.b = 1;
18
+ await r._.save();
19
+ r = c.create();
20
+ r.a = 2;
21
+ r.b = 2;
22
+ await r._.save();
23
+ expect(c.metadata.idMetadata.field.key).toBe(c.metadata.fields.a.key);
24
+ });
25
+ testAll("basic test id column not first column", async ({ createEntity }) => {
26
+ let type = class extends EntityBase {
27
+ a;
28
+ id;
29
+ };
30
+ Entity('custom2', { allowApiCrud: true })(type);
31
+ Fields.number()(type.prototype, 'a');
32
+ Fields.number()(type.prototype, 'id');
33
+ let c = await createEntity(type);
34
+ let r = c.create();
35
+ r.a = 1;
36
+ r.id = 5;
37
+ await r._.save();
38
+ r = c.create();
39
+ r.a = 2;
40
+ r.id = 6;
41
+ await r._.save();
42
+ expect(r._.repository.metadata.idMetadata.field.key).toBe(r._.fields.id.metadata.key);
43
+ expect((await c.findId(6)).a).toBe(2);
44
+ });
45
+ });
46
+ //typing game
47
+ // var z = <Z>(y: Z) => {
48
+ // }
49
+ // z<number>(1);
50
+ // function myBackendMethod<T>(types: T, values: values<T>) {
51
+ // }
52
+ // type values<T> = {
53
+ // [Property in keyof T]: T[Property] extends new (...args: any[]) => infer R ? R : any;
54
+ // };
55
+ // const a1 = AccountManager;
56
+ // const a = {
57
+ // a: String.prototype,
58
+ // b: AccountManager.prototype
59
+ // };
60
+ // var zzz: AccountManager = undefined!;
61
+ // myBackendMethod({
62
+ // a: String,
63
+ // b: AccountManager
64
+ // }, {
65
+ // b: new AccountManager(),
66
+ // a: "asdf"
67
+ // })
@@ -0,0 +1,10 @@
1
+ export declare class GroupsValue {
2
+ private readonly value;
3
+ hasAny(): boolean;
4
+ constructor(value: string);
5
+ evilGet(): string;
6
+ listGroups(): string[];
7
+ removeGroup(group: string): GroupsValue;
8
+ addGroup(group: string): GroupsValue;
9
+ selected(group: string): boolean;
10
+ }
@@ -0,0 +1,73 @@
1
+ import { Entity, EntityBase, Field, FieldType, Fields } from "../remult3";
2
+ import { testAll } from "./db-tests-setup";
3
+ @FieldType({
4
+ valueConverter: {
5
+ toJson: x => x ? x.value : '',
6
+ fromJson: x => new GroupsValue(x),
7
+ displayValue: x => x.value
8
+ }
9
+ })
10
+ export class GroupsValue {
11
+ value;
12
+ hasAny() {
13
+ return this.value != '';
14
+ }
15
+ constructor(value) {
16
+ this.value = value;
17
+ }
18
+ evilGet() {
19
+ return this.value;
20
+ }
21
+ listGroups() {
22
+ if (!this.value)
23
+ return [];
24
+ return this.value.split(',');
25
+ }
26
+ removeGroup(group) {
27
+ let groups = this.value.split(",").map(x => x.trim());
28
+ let index = groups.indexOf(group);
29
+ let result = '';
30
+ if (index >= 0) {
31
+ groups.splice(index, 1);
32
+ result = groups.join(", ");
33
+ }
34
+ return new GroupsValue(result);
35
+ }
36
+ addGroup(group) {
37
+ let r = this.value;
38
+ if (r)
39
+ r += ', ';
40
+ else
41
+ r = '';
42
+ r += group;
43
+ return new GroupsValue(r);
44
+ }
45
+ selected(group) {
46
+ if (!this.value)
47
+ return false;
48
+ return this.value.indexOf(group) >= 0;
49
+ }
50
+ }
51
+ @Entity("testGroups", { allowApiCrud: true })
52
+ class testGroups extends EntityBase {
53
+ @Fields.integer()
54
+ id = 0;
55
+ @Field(() => GroupsValue)
56
+ g;
57
+ }
58
+ testAll("test save and load", async ({ createEntity }) => {
59
+ let re = await createEntity(testGroups);
60
+ await re.create({ id: 1 }).save();
61
+ let x = await re.findFirst();
62
+ expect(x.g.evilGet()).toBe('');
63
+ x.g = x.g.addGroup("xx");
64
+ expect(x.$.g.valueChanged()).toBe(true);
65
+ await x.save();
66
+ expect(x.g.evilGet()).toBe('xx');
67
+ });
68
+ testAll("test2 save and load", async ({ createEntity }) => {
69
+ let re = await createEntity(testGroups);
70
+ await re.create({ id: 1, g: new GroupsValue(undefined) }).save();
71
+ let x = await re.findFirst();
72
+ expect(x.g.evilGet()).toBe('');
73
+ });
@@ -0,0 +1,31 @@
1
+ import { Entity, EntityBase, Field, Fields } from "../remult3";
2
+ import { testAll } from "./db-tests-setup";
3
+ @Entity('testNull', { allowApiCrud: true })
4
+ class testNull extends EntityBase {
5
+ @Fields.integer()
6
+ id = 0;
7
+ @Field(undefined, { allowNull: true })
8
+ myCol;
9
+ @Fields.integer({ allowNull: true })
10
+ numberWithNull = null;
11
+ }
12
+ testAll("test that update null works", async ({ createEntity }) => {
13
+ let r = await createEntity(testNull);
14
+ let i = r.create({ id: 1, myCol: { value: 'abc' } });
15
+ await i.save();
16
+ expect(i.myCol?.value).toBe("abc");
17
+ i.myCol = null;
18
+ expect(i.myCol).toBe(null);
19
+ await i.save();
20
+ expect(i.myCol).toBe(null);
21
+ }, false);
22
+ testAll("test number with null", async ({ createEntity }) => {
23
+ let r = await createEntity(testNull);
24
+ const i = await r.insert({ id: 1, myCol: { value: 'abc' }, numberWithNull: null });
25
+ expect(i.numberWithNull).toBe(null);
26
+ expect(await r.count({ numberWithNull: null })).toBe(1);
27
+ i.numberWithNull = 0;
28
+ await i.save();
29
+ expect(i.numberWithNull).toBe(0);
30
+ expect(await r.count({ numberWithNull: null })).toBe(0);
31
+ }, false);
@@ -0,0 +1,16 @@
1
+ import { FieldMetadata } from "./column-interfaces";
2
+ import { EntityMetadata, EntityOrderBy } from "./remult3";
3
+ export declare class Sort {
4
+ toEntityOrderBy(): EntityOrderBy<any>;
5
+ constructor(...segments: SortSegment[]);
6
+ Segments: SortSegment[];
7
+ reverse(): Sort;
8
+ compare(a: any, b: any): number;
9
+ static translateOrderByToSort<T>(entityDefs: EntityMetadata<T>, orderBy: EntityOrderBy<T>): Sort;
10
+ static createUniqueSort<T>(entityMetadata: EntityMetadata<T>, orderBy: Sort): Sort;
11
+ static createUniqueEntityOrderBy<T>(entityMetadata: EntityMetadata<T>, orderBy: EntityOrderBy<T>): EntityOrderBy<T>;
12
+ }
13
+ export interface SortSegment {
14
+ field: FieldMetadata;
15
+ isDescending?: boolean;
16
+ }
@@ -0,0 +1,103 @@
1
+ import { CompoundIdField } from "./column";
2
+ export class Sort {
3
+ toEntityOrderBy() {
4
+ let result = {};
5
+ for (const seg of this.Segments) {
6
+ if (seg.isDescending) {
7
+ result[seg.field.key] = "desc";
8
+ }
9
+ else
10
+ result[seg.field.key] = "asc";
11
+ }
12
+ return result;
13
+ }
14
+ constructor(...segments) {
15
+ this.Segments = segments;
16
+ }
17
+ Segments;
18
+ reverse() {
19
+ let r = new Sort();
20
+ for (const s of this.Segments) {
21
+ r.Segments.push({ field: s.field, isDescending: !s.isDescending });
22
+ }
23
+ return r;
24
+ }
25
+ compare(a, b) {
26
+ let r = 0;
27
+ for (let i = 0; i < this.Segments.length; i++) {
28
+ let seg = this.Segments[i];
29
+ let left = a[seg.field.key];
30
+ let right = b[seg.field.key];
31
+ if (left > right)
32
+ r = 1;
33
+ else if (left < right)
34
+ r = -1;
35
+ if (r != 0) {
36
+ if (seg.isDescending)
37
+ r *= -1;
38
+ return r;
39
+ }
40
+ }
41
+ return r;
42
+ }
43
+ static translateOrderByToSort(entityDefs, orderBy) {
44
+ if (!orderBy)
45
+ return undefined;
46
+ let sort;
47
+ if (orderBy) {
48
+ sort = new Sort();
49
+ for (const key in orderBy) {
50
+ if (Object.prototype.hasOwnProperty.call(orderBy, key)) {
51
+ const element = orderBy[key];
52
+ let field = entityDefs.fields.find(key);
53
+ if (field) {
54
+ switch (element) {
55
+ case "desc":
56
+ sort.Segments.push({ field, isDescending: true });
57
+ break;
58
+ case "asc":
59
+ sort.Segments.push({ field });
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ return sort;
66
+ }
67
+ static createUniqueSort(entityMetadata, orderBy) {
68
+ if (!orderBy || Object.keys(orderBy).length === 0)
69
+ orderBy = Sort.translateOrderByToSort(entityMetadata, entityMetadata.options.defaultOrderBy);
70
+ if (!orderBy)
71
+ orderBy = new Sort({ field: entityMetadata.idMetadata.field });
72
+ if (entityMetadata.idMetadata.field instanceof CompoundIdField) {
73
+ for (const field of entityMetadata.idMetadata.field.fields) {
74
+ if (!orderBy.Segments.find(x => x.field == field)) {
75
+ orderBy.Segments.push({ field: field });
76
+ }
77
+ }
78
+ }
79
+ else if (!orderBy.Segments.find(x => x.field == entityMetadata.idMetadata.field)) {
80
+ orderBy.Segments.push({ field: entityMetadata.idMetadata.field });
81
+ }
82
+ return orderBy;
83
+ }
84
+ static createUniqueEntityOrderBy(entityMetadata, orderBy) {
85
+ if (!orderBy || Object.keys(orderBy).length === 0)
86
+ orderBy = entityMetadata.options.defaultOrderBy;
87
+ if (!orderBy)
88
+ orderBy = { [entityMetadata.idMetadata.field.key]: "asc" };
89
+ else
90
+ orderBy = { ...orderBy };
91
+ if (entityMetadata.idMetadata.field instanceof CompoundIdField) {
92
+ for (const field of entityMetadata.idMetadata.field.fields) {
93
+ if (!orderBy[field.key]) {
94
+ orderBy[field.key] = "asc";
95
+ }
96
+ }
97
+ }
98
+ else if (!orderBy[entityMetadata.idMetadata.field.key]) {
99
+ orderBy[entityMetadata.idMetadata.field.key] = "asc";
100
+ }
101
+ return orderBy;
102
+ }
103
+ }
@@ -0,0 +1,19 @@
1
+ import { EntityMetadata } from './remult3';
2
+ export interface SqlImplementation {
3
+ getLimitSqlSyntax(limit: number, offset: number): any;
4
+ createCommand(): SqlCommand;
5
+ transaction(action: (sql: SqlImplementation) => Promise<void>): Promise<void>;
6
+ entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
7
+ ensureSchema?(entities: EntityMetadata[]): Promise<void>;
8
+ supportsJsonColumnType?: boolean;
9
+ }
10
+ export interface SqlCommand extends SqlCommandWithParameters {
11
+ execute(sql: string): Promise<SqlResult>;
12
+ }
13
+ export interface SqlCommandWithParameters {
14
+ addParameterAndReturnSqlToken(val: any): string;
15
+ }
16
+ export interface SqlResult {
17
+ rows: any[];
18
+ getColumnKeyInResultForIndexInSelect(index: number): string;
19
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import 'core-js/es7/reflect';
2
+ import 'zone.js/dist/zone';
3
+ import 'zone.js/dist/zone-testing';
@@ -0,0 +1,12 @@
1
+ // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2
+ import 'core-js/es7/reflect';
3
+ import 'zone.js/dist/zone';
4
+ import 'zone.js/dist/zone-testing';
5
+ import { getTestBed } from '@angular/core/testing';
6
+ import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
7
+ // First, initialize the Angular testing environment.
8
+ getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
9
+ // Then we find all the tests.
10
+ const context = require.context('./', true, /\.spec\.ts$/);
11
+ // And load the modules.
12
+ context.keys().map(context);
@@ -0,0 +1,5 @@
1
+ export declare class Done {
2
+ happened: boolean;
3
+ ok(): void;
4
+ test(message?: string): void;
5
+ }
@@ -0,0 +1,9 @@
1
+ export class Done {
2
+ happened = false;
3
+ ok() {
4
+ this.happened = true;
5
+ }
6
+ test(message = 'expected to be done') {
7
+ expect(this.happened).toBe(true, message);
8
+ }
9
+ }
@@ -0,0 +1,16 @@
1
+ import { ArrayEntityDataProvider } from "../data-providers/array-entity-data-provider";
2
+ import { Remult } from '../context';
3
+ import { CategoriesForTesting } from './remult-3-entities';
4
+ import { EntityMetadata, Repository } from '../remult3';
5
+ export declare class Language {
6
+ id: number;
7
+ caption: string;
8
+ static Hebrew: Language;
9
+ static Russian: Language;
10
+ constructor(id: number, caption: string);
11
+ }
12
+ export declare function insertFourRows(): Promise<[Repository<CategoriesForTesting>, Remult]>;
13
+ export declare class myDp extends ArrayEntityDataProvider {
14
+ constructor(entity: EntityMetadata);
15
+ update(id: any, data: any): Promise<any>;
16
+ }