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,394 +0,0 @@
1
- import 'reflect-metadata';
2
- import { Remult, allEntities, classHelpers, ClassHelper, setControllerSettings, doTransaction, isBackend } from './context';
3
- import { buildRestDataProvider } from "./buildRestDataProvider";
4
- import { SqlDatabase } from './data-providers/sql-database';
5
- import { getEntityRef, decorateColumnSettings, getEntitySettings, getControllerRef } from './remult3';
6
- import { remult } from './remult-proxy';
7
- export class Action {
8
- actionUrl;
9
- queue;
10
- allowed;
11
- constructor(actionUrl, queue, allowed) {
12
- this.actionUrl = actionUrl;
13
- this.queue = queue;
14
- this.allowed = allowed;
15
- }
16
- static apiUrlForJobStatus = 'jobStatusInQueue';
17
- async run(pIn, baseUrl, http) {
18
- if (baseUrl === undefined)
19
- baseUrl = remult.apiClient.url;
20
- if (!http)
21
- http = buildRestDataProvider(remult.apiClient.httpClient);
22
- let r = await http.post(baseUrl + '/' + this.actionUrl, pIn);
23
- let p = r;
24
- if (p && p.queuedJobId) {
25
- let progress = actionInfo.startBusyWithProgress();
26
- try {
27
- let runningJob;
28
- await actionInfo.runActionWithoutBlockingUI(async () => {
29
- while (!runningJob || !runningJob.done) {
30
- if (runningJob)
31
- await new Promise(res => setTimeout(() => {
32
- res(undefined);
33
- }, 200));
34
- runningJob = await http.post(baseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId });
35
- if (runningJob.progress) {
36
- progress.progress(runningJob.progress);
37
- }
38
- }
39
- });
40
- if (runningJob.error)
41
- throw runningJob.error;
42
- progress.progress(1);
43
- return runningJob.result;
44
- }
45
- finally {
46
- progress.close();
47
- }
48
- }
49
- else
50
- return r;
51
- }
52
- doWork;
53
- __register(reg) {
54
- reg(this.actionUrl, this.queue, this.allowed, async (d, req, res) => {
55
- try {
56
- var r = await this.execute(d, req, res);
57
- res.success(r);
58
- }
59
- catch (err) {
60
- if (err.isForbiddenError) // got a problem in next with instance of ForbiddenError - so replaced it with this bool
61
- res.forbidden();
62
- else
63
- res.error(err);
64
- }
65
- });
66
- }
67
- }
68
- export class ForbiddenError extends Error {
69
- constructor() {
70
- super("Forbidden");
71
- }
72
- isForbiddenError = true;
73
- }
74
- export class myServerAction extends Action {
75
- types;
76
- options;
77
- originalMethod;
78
- constructor(name, types, options, originalMethod) {
79
- super(name, options.queue, options.allowed);
80
- this.types = types;
81
- this.options = options;
82
- this.originalMethod = originalMethod;
83
- }
84
- async execute(info, remult, res) {
85
- let result = { data: {} };
86
- let ds = remult.dataProvider;
87
- await doTransaction(remult, async () => {
88
- if (!remult.isAllowedForInstance(undefined, this.options.allowed))
89
- throw new ForbiddenError();
90
- info.args = await prepareReceivedArgs(this.types, info.args, remult, ds, res);
91
- try {
92
- result.data = await this.originalMethod(info.args);
93
- }
94
- catch (err) {
95
- throw err;
96
- }
97
- });
98
- return result;
99
- }
100
- }
101
- export const actionInfo = {
102
- allActions: [],
103
- runningOnServer: false,
104
- runActionWithoutBlockingUI: (what) => { return what(); },
105
- startBusyWithProgress: () => ({
106
- progress: (percent) => { },
107
- close: () => { }
108
- })
109
- };
110
- export const serverActionField = Symbol('serverActionField');
111
- const classOptions = new Map();
112
- export function Controller(key) {
113
- return function (target, context) {
114
- let r = target;
115
- classOptions.set(r, { key });
116
- setControllerSettings(target, { key });
117
- return target;
118
- };
119
- }
120
- /** Indicates that the decorated methods runs on the backend. See: [Backend Methods](https://remult.dev/docs/backendMethods.html) */
121
- export function BackendMethod(options) {
122
- return (target,
123
- //@ts-ignore
124
- context, descriptor) => {
125
- const key = typeof (context) === "string" ? context : context.name.toString();
126
- const originalMethod = descriptor ? descriptor.value : target;
127
- let result = originalMethod;
128
- if (target.prototype !== undefined) {
129
- var types = Reflect.getMetadata("design:paramtypes", target, key);
130
- if (options.paramTypes)
131
- types = options.paramTypes;
132
- // if types are undefined - you've forgot to set: "emitDecoratorMetadata":true
133
- let serverAction = new myServerAction((options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, types, options, args => originalMethod.apply(undefined, args));
134
- serverAction.doWork = async (args, self, url, http) => {
135
- args = prepareArgsToSend(types, args);
136
- if (options.blockUser === false) {
137
- return await actionInfo.runActionWithoutBlockingUI(async () => (await serverAction.run({ args }, url, http)).data);
138
- }
139
- else
140
- return (await serverAction.run({ args }, url, http)).data;
141
- };
142
- result = async function (...args) {
143
- if (!isBackend()) {
144
- return await serverAction.doWork(args, undefined);
145
- }
146
- else
147
- return (await originalMethod.apply(this, args));
148
- };
149
- registerAction(target, result);
150
- result[serverActionField] = serverAction;
151
- if (descriptor) {
152
- descriptor.value = result;
153
- return descriptor;
154
- }
155
- else
156
- return result;
157
- }
158
- var types = Reflect.getMetadata("design:paramtypes", target, key);
159
- if (options.paramTypes)
160
- types = options.paramTypes;
161
- let x = classHelpers.get(target.constructor);
162
- if (!x) {
163
- x = new ClassHelper();
164
- classHelpers.set(target.constructor, x);
165
- }
166
- let serverAction = {
167
- __register(reg) {
168
- let c = new Remult();
169
- for (const constructor of x.classes.keys()) {
170
- let controllerOptions = x.classes.get(constructor);
171
- if (!controllerOptions.key) {
172
- controllerOptions.key = c.repo(constructor).metadata.key;
173
- }
174
- reg(controllerOptions.key + '/' + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed, async (d, req, res) => {
175
- d.args = d.args.map(x => isCustomUndefined(x) ? undefined : x);
176
- let allowed = options.allowed;
177
- try {
178
- let remult = req;
179
- let r;
180
- await doTransaction(remult, async () => {
181
- d.args = await prepareReceivedArgs(types, d.args, remult, remult.dataProvider, res);
182
- if (allEntities.includes(constructor)) {
183
- let repo = remult.repo(constructor);
184
- let y;
185
- if (d.rowInfo.isNewRow) {
186
- y = repo.create();
187
- let rowHelper = repo.getEntityRef(y);
188
- await rowHelper._updateEntityBasedOnApi(d.rowInfo.data);
189
- }
190
- else {
191
- let rows = await repo.find({
192
- where: {
193
- ...repo.metadata.idMetadata.getIdFilter(d.rowInfo.id),
194
- $and: [repo.metadata.options.apiPrefilter]
195
- }
196
- });
197
- if (rows.length != 1)
198
- throw new Error("not found or too many matches");
199
- y = rows[0];
200
- await repo.getEntityRef(y)._updateEntityBasedOnApi(d.rowInfo.data);
201
- }
202
- if (!remult.isAllowedForInstance(y, allowed))
203
- throw new ForbiddenError();
204
- let defs = getEntityRef(y);
205
- await defs.__validateEntity();
206
- try {
207
- r = {
208
- result: await originalMethod.apply(y, d.args),
209
- rowInfo: {
210
- data: await defs.toApiJson(),
211
- isNewRow: defs.isNew(),
212
- wasChanged: defs.wasChanged(),
213
- id: defs.getOriginalId()
214
- }
215
- };
216
- }
217
- catch (err) {
218
- throw defs.catchSaveErrors(err);
219
- }
220
- }
221
- else {
222
- let y = new constructor(remult, remult.dataProvider);
223
- let controllerRef = getControllerRef(y, remult);
224
- await controllerRef._updateEntityBasedOnApi(d.fields);
225
- if (!remult.isAllowedForInstance(y, allowed))
226
- throw new ForbiddenError();
227
- await controllerRef.__validateEntity();
228
- try {
229
- r = {
230
- result: await originalMethod.apply(y, d.args),
231
- fields: await controllerRef.toApiJson()
232
- };
233
- }
234
- catch (err) {
235
- throw controllerRef.catchSaveErrors(err);
236
- }
237
- }
238
- });
239
- res.success(r);
240
- }
241
- catch (err) {
242
- if (err.isForbiddenError) // got a problem in next with instance of ForbiddenError - so replaced it with this bool
243
- res.forbidden();
244
- else
245
- res.error(err);
246
- }
247
- });
248
- }
249
- },
250
- doWork: async function (args, self, baseUrl, http) {
251
- args = prepareArgsToSend(types, args);
252
- if (allEntities.includes(target.constructor)) {
253
- let defs = getEntityRef(self);
254
- await defs.__validateEntity();
255
- let classOptions = x.classes.get(self.constructor);
256
- if (!classOptions.key) {
257
- classOptions.key = defs.repository.metadata.key + "_methods";
258
- }
259
- try {
260
- let r = await (new class extends Action {
261
- execute;
262
- }(classOptions.key + "/" + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed).run({
263
- args,
264
- rowInfo: {
265
- data: await defs.toApiJson(),
266
- isNewRow: defs.isNew(),
267
- wasChanged: defs.wasChanged(),
268
- id: defs.getOriginalId()
269
- }
270
- }, baseUrl, http));
271
- await defs._updateEntityBasedOnApi(r.rowInfo.data);
272
- return r.result;
273
- }
274
- catch (err) {
275
- throw defs.catchSaveErrors(err);
276
- }
277
- }
278
- else {
279
- let defs = getControllerRef(self, undefined);
280
- try {
281
- await defs.__validateEntity();
282
- let r = await (new class extends Action {
283
- execute;
284
- }(x.classes.get(self.constructor).key + "/" + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed).run({
285
- args,
286
- fields: await defs.toApiJson()
287
- }, baseUrl, http));
288
- await defs._updateEntityBasedOnApi(r.fields);
289
- return r.result;
290
- }
291
- catch (e) {
292
- throw defs.catchSaveErrors(e);
293
- }
294
- }
295
- }
296
- };
297
- result = async function (...args) {
298
- if (!isBackend()) {
299
- let self = this;
300
- return serverAction.doWork(args, self);
301
- }
302
- else
303
- return (await originalMethod.apply(this, args));
304
- };
305
- registerAction(target.constructor, result);
306
- result[serverActionField] = serverAction;
307
- if (descriptor) {
308
- descriptor.value = result;
309
- return descriptor;
310
- }
311
- else
312
- return result;
313
- };
314
- }
315
- const customUndefined = {
316
- _isUndefined: true
317
- };
318
- function registerAction(target, resultMethod) {
319
- (target[classBackendMethodsArray] || (target[classBackendMethodsArray] = [])).push(resultMethod);
320
- actionInfo.allActions.push(resultMethod);
321
- }
322
- function isCustomUndefined(x) {
323
- return x && x._isUndefined;
324
- }
325
- export class ProgressListener {
326
- res;
327
- constructor(res) {
328
- this.res = res;
329
- }
330
- progress(progress) {
331
- this.res.progress(progress);
332
- }
333
- }
334
- export function prepareArgsToSend(types, args) {
335
- if (types) {
336
- for (let index = 0; index < types.length; index++) {
337
- const paramType = types[index];
338
- for (const type of [Remult, SqlDatabase]) {
339
- if (args[index] instanceof type)
340
- args[index] = undefined;
341
- else if (paramType == type) {
342
- args[index] = undefined;
343
- }
344
- }
345
- if (args[index] != undefined) {
346
- let x = { valueType: paramType };
347
- x = decorateColumnSettings(x, new Remult());
348
- if (x.valueConverter)
349
- args[index] = x.valueConverter.toJson(args[index]);
350
- let eo = getEntitySettings(paramType, false);
351
- if (eo != null) {
352
- let rh = getEntityRef(args[index]);
353
- args[index] = rh.getId();
354
- }
355
- }
356
- }
357
- }
358
- return args.map(x => x !== undefined ? x : customUndefined);
359
- }
360
- export async function prepareReceivedArgs(types, args, remult, ds, res) {
361
- for (let index = 0; index < args.length; index++) {
362
- const element = args[index];
363
- if (isCustomUndefined(element))
364
- args[index] = undefined;
365
- }
366
- if (types)
367
- for (let i = 0; i < types.length; i++) {
368
- if (args.length < i) {
369
- args.push(undefined);
370
- }
371
- if (types[i] == Remult || types[i] == Remult) {
372
- args[i] = remult;
373
- }
374
- else if (types[i] == SqlDatabase && ds) {
375
- args[i] = ds;
376
- }
377
- else if (types[i] == ProgressListener) {
378
- args[i] = new ProgressListener(res);
379
- }
380
- else {
381
- let x = { valueType: types[i] };
382
- x = decorateColumnSettings(x, remult);
383
- if (x.valueConverter)
384
- args[i] = x.valueConverter.fromJson(args[i]);
385
- let eo = getEntitySettings(types[i], false);
386
- if (eo != null) {
387
- if (!(args[i] === null || args[i] === undefined))
388
- args[i] = await remult.repo(types[i]).findId(args[i]);
389
- }
390
- }
391
- }
392
- return args;
393
- }
394
- export const classBackendMethodsArray = Symbol('classBackendMethodsArray');
@@ -1,32 +0,0 @@
1
- import { ClassType } from "../../classType";
2
- import { Remult } from "../context";
3
- import { DataProvider } from "../data-interfaces";
4
- import { Repository } from "../remult3";
5
- import { CategoriesForTesting } from "../tests/remult-3-entities";
6
- import { Status } from "../tests/testModel/models";
7
- export declare function itWithFocus(key: string, what: () => Promise<void>, focus?: boolean): void;
8
- export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean, options?: {
9
- exclude?: string[];
10
- }): void;
11
- export declare function addDatabaseToTest(tester: dbTestMethodSignature, key?: string): dbTestMethodSignature;
12
- export declare function testInMemory(key: string, what: dbTestWhatSignature, focus?: boolean): void;
13
- export declare const TestDbs: {
14
- restDataProvider: string;
15
- mongo: string;
16
- inMemory: string;
17
- };
18
- export declare type dbTestWhatSignature = ((db: {
19
- db: DataProvider;
20
- remult: Remult;
21
- createEntity<entityType>(entity: ClassType<entityType>): Promise<Repository<entityType>>;
22
- }) => Promise<void>);
23
- export declare type dbTestMethodSignature = ((key: string, what: dbTestWhatSignature, focus: boolean) => void) & {
24
- key?: string;
25
- };
26
- export declare function testAllDbs<T extends CategoriesForTesting>(key: string, doTest: (helper: {
27
- remult: Remult;
28
- createData: (doInsert?: (insert: (id: number, name: string, description?: string, status?: Status) => Promise<void>) => Promise<void>, entity?: {
29
- new (): CategoriesForTesting;
30
- }) => Promise<Repository<T>>;
31
- insertFourRows: () => Promise<Repository<T>>;
32
- }) => Promise<any>, focus?: boolean): Promise<void>;
@@ -1,78 +0,0 @@
1
- import { Remult } from "../context";
2
- import { InMemoryDataProvider } from "../data-providers/in-memory-database";
3
- import { Categories } from "../tests/remult-3-entities";
4
- export function itWithFocus(key, what, focus = false) {
5
- if (focus) {
6
- fit(key, what);
7
- }
8
- else
9
- it(key, what);
10
- }
11
- export function testAll(key, what, focus = false, options) {
12
- function runTest(m) {
13
- return !options?.exclude?.includes(m.key);
14
- }
15
- for (const test of databasesTesters) {
16
- if (runTest(test))
17
- test(key, what, focus);
18
- }
19
- loadedTests.push(x => {
20
- if (runTest(x))
21
- x(key, what, focus);
22
- });
23
- }
24
- const databasesTesters = [];
25
- const loadedTests = [];
26
- export function addDatabaseToTest(tester, key) {
27
- tester.key = key;
28
- for (const test of loadedTests) {
29
- test(tester);
30
- }
31
- databasesTesters.push(tester);
32
- return tester;
33
- }
34
- export function testInMemory(key, what, focus = false) {
35
- itWithFocus(key + " - in memory", async () => {
36
- let db = new InMemoryDataProvider();
37
- let remult = new Remult(db);
38
- await what({ db, remult, createEntity: async (x) => remult.repo(x) });
39
- }, focus);
40
- }
41
- export const TestDbs = {
42
- restDataProvider: "restDataProvider",
43
- mongo: "mongo",
44
- inMemory: 'in memory'
45
- };
46
- addDatabaseToTest(testInMemory, TestDbs.inMemory);
47
- export async function testAllDbs(key, doTest, focus = false) {
48
- testAll(key, async ({ remult, createEntity }) => {
49
- let createData = async (doInsert, entity) => {
50
- if (!entity)
51
- entity = Categories;
52
- let rep = await createEntity(entity);
53
- if (doInsert)
54
- await doInsert(async (id, name, description, status) => {
55
- let c = rep.create();
56
- c.id = id;
57
- c.categoryName = name;
58
- c.description = description;
59
- if (status)
60
- c.status = status;
61
- await rep.save(c);
62
- });
63
- return rep;
64
- };
65
- await doTest({
66
- remult,
67
- createData,
68
- insertFourRows: async () => {
69
- return createData(async (i) => {
70
- await i(1, 'noam', 'x');
71
- await i(4, 'yael', 'x');
72
- await i(2, 'yoni', 'y');
73
- await i(3, 'maayan', 'y');
74
- });
75
- }
76
- });
77
- }, focus);
78
- }
@@ -1,25 +0,0 @@
1
- import { EntityBase, IdEntity } from "../remult3";
2
- export declare class stam extends EntityBase {
3
- id: number;
4
- title: string;
5
- }
6
- export declare class tasksWithEnum extends IdEntity {
7
- title: string;
8
- completed: boolean;
9
- priority: Priority;
10
- }
11
- export declare enum Priority {
12
- Low = 0,
13
- High = 1,
14
- Critical = 2
15
- }
16
- export declare class tasksWithStringEnum extends IdEntity {
17
- title: string;
18
- completed: boolean;
19
- priority: PriorityWithString;
20
- }
21
- export declare enum PriorityWithString {
22
- Low = "Low",
23
- High = "High",
24
- Critical = "Critical"
25
- }