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,24 +0,0 @@
1
- import type { MongoClient, Db, ClientSession } from 'mongodb';
2
- import { DataProvider, EntityDataProvider, EntityFilter, EntityMetadata, Remult } from '.';
3
- import { RepositoryOverloads } from './src/remult3';
4
- export declare class MongoDataProvider implements DataProvider {
5
- private db;
6
- private client;
7
- constructor(db: Db, client: MongoClient, options?: {
8
- session?: ClientSession;
9
- disableTransactions?: boolean;
10
- });
11
- session?: ClientSession;
12
- disableTransactions: boolean;
13
- static getDb(remult?: Remult): {
14
- db: Db;
15
- session: ClientSession | undefined;
16
- };
17
- getEntityDataProvider(entity: EntityMetadata<any>): EntityDataProvider;
18
- transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
19
- static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<{
20
- $and: any[];
21
- } | {
22
- $and?: undefined;
23
- }>;
24
- }
@@ -1,254 +0,0 @@
1
- import { CompoundIdField, Filter } from '.';
2
- import { dbNamesOf } from './src/filter/filter-consumer-bridge-to-sql-request';
3
- import { getRepository } from './src/remult3';
4
- import { remult as remultContext } from './src/remult-proxy';
5
- export class MongoDataProvider {
6
- db;
7
- client;
8
- constructor(db, client, options) {
9
- this.db = db;
10
- this.client = client;
11
- this.session = options?.session;
12
- this.disableTransactions = options?.disableTransactions;
13
- }
14
- session;
15
- disableTransactions = false;
16
- static getDb(remult) {
17
- const r = (remult || remultContext).dataProvider;
18
- if (!r.db)
19
- throw "the data provider is not a MongoDataProvider";
20
- return { db: r.db, session: r.session };
21
- }
22
- getEntityDataProvider(entity) {
23
- return new MongoEntityDataProvider(this.db, entity, this.session);
24
- }
25
- async transaction(action) {
26
- let session = await this.client.startSession();
27
- session.startTransaction();
28
- const db = this.client.db(this.db.databaseName);
29
- try {
30
- await action(new MongoDataProvider(db, undefined, { session }));
31
- await session.commitTransaction();
32
- }
33
- catch (err) {
34
- await session.abortTransaction();
35
- throw err;
36
- }
37
- finally {
38
- await session.endSession();
39
- }
40
- }
41
- static async filterToRaw(entity, condition) {
42
- const repo = getRepository(entity);
43
- var b = new FilterConsumerBridgeToMongo(await dbNamesOf(repo.metadata));
44
- b._addWhere = false;
45
- await (await (repo.translateWhereToFilter(condition))).__applyToConsumer(b);
46
- let r = await b.resolveWhere();
47
- return r;
48
- }
49
- }
50
- const NULL = { $null: "$null" };
51
- function isNull(x) {
52
- return x?.$null === NULL.$null;
53
- }
54
- class MongoEntityDataProvider {
55
- db;
56
- entity;
57
- session;
58
- constructor(db, entity, session) {
59
- this.db = db;
60
- this.entity = entity;
61
- this.session = session;
62
- }
63
- translateFromJson(row, nameProvider) {
64
- let result = {};
65
- for (const col of this.entity.fields) {
66
- let val = row[nameProvider.$dbNameOf(col)];
67
- if (isNull(val))
68
- val = null;
69
- result[col.key] = col.valueConverter.fromDb(val);
70
- }
71
- return result;
72
- }
73
- translateToJson(row, nameProvider) {
74
- let result = {};
75
- for (const col of this.entity.fields) {
76
- let val = col.valueConverter.toDb(row[col.key]);
77
- if (val === null)
78
- val = NULL;
79
- result[nameProvider.$dbNameOf(col)] = val;
80
- }
81
- return result;
82
- }
83
- async count(where) {
84
- const { collection, e } = await this.collection();
85
- let x = new FilterConsumerBridgeToMongo(e);
86
- where.__applyToConsumer(x);
87
- let w = await x.resolveWhere();
88
- return await collection.countDocuments(w, { session: this.session });
89
- }
90
- async find(options) {
91
- let { collection, e } = await this.collection();
92
- let x = new FilterConsumerBridgeToMongo(e);
93
- if (options?.where)
94
- options.where.__applyToConsumer(x);
95
- let where = await x.resolveWhere();
96
- let op = {
97
- session: this.session
98
- };
99
- if (options.limit) {
100
- op.limit = options.limit;
101
- if (options.page) {
102
- op.skip = (options.page - 1) * options.limit;
103
- }
104
- }
105
- if (options.orderBy) {
106
- op.sort = {};
107
- for (const s of options.orderBy.Segments) {
108
- op.sort[e.$dbNameOf(s.field)] = s.isDescending ? -1 : 1;
109
- }
110
- }
111
- return await Promise.all(await collection.find(where, op).map(x => this.translateFromJson(x, e)).toArray());
112
- }
113
- async update(id, data) {
114
- let { collection, e } = await this.collection();
115
- let f = new FilterConsumerBridgeToMongo(e);
116
- Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
117
- let resultFilter = this.entity.idMetadata.getIdFilter(id);
118
- if (data.id != undefined)
119
- resultFilter = this.entity.idMetadata.getIdFilter(data.id);
120
- for (const x of this.entity.fields) {
121
- if (x instanceof CompoundIdField) {
122
- resultFilter = x.resultIdFilter(id, data);
123
- }
124
- }
125
- let newR = {};
126
- let keys = Object.keys(data);
127
- for (const f of this.entity.fields) {
128
- if (!f.dbReadOnly && !f.isServerExpression) {
129
- if (keys.includes(f.key)) {
130
- newR[f.key] = f.valueConverter.toJson(data[f.key]);
131
- }
132
- }
133
- }
134
- let r = await collection.updateOne(await f.resolveWhere(), {
135
- $set: newR
136
- }, { session: this.session });
137
- return this.find({ where: Filter.fromEntityFilter(this.entity, resultFilter) }).then(y => y[0]);
138
- }
139
- async delete(id) {
140
- const { e, collection } = await this.collection();
141
- let f = new FilterConsumerBridgeToMongo(e);
142
- Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
143
- collection.deleteOne(await f.resolveWhere(), { session: this.session });
144
- }
145
- async insert(data) {
146
- let { collection, e } = await this.collection();
147
- let r = await collection.insertOne(await this.translateToJson(data, e), { session: this.session });
148
- return await this.translateFromJson(await collection.findOne({ _id: r.insertedId }, { session: this.session }), e);
149
- }
150
- async collection() {
151
- const e = await dbNamesOf(this.entity);
152
- const collection = this.db.collection(e.$entityName);
153
- return { e, collection };
154
- }
155
- }
156
- class FilterConsumerBridgeToMongo {
157
- nameProvider;
158
- _addWhere = true;
159
- promises = [];
160
- result = [];
161
- async resolveWhere() {
162
- while (this.promises.length > 0) {
163
- let p = this.promises;
164
- this.promises = [];
165
- for (const pr of p) {
166
- await pr;
167
- }
168
- }
169
- if (this.result.length > 0)
170
- return { $and: this.result.map(x => x()) };
171
- else
172
- return {};
173
- }
174
- constructor(nameProvider) {
175
- this.nameProvider = nameProvider;
176
- }
177
- custom(key, customItem) {
178
- throw new Error("Custom filter should be translated before it gets here");
179
- }
180
- or(orElements) {
181
- this.promises.push((async () => {
182
- let result = [];
183
- for (const element of orElements) {
184
- let f = new FilterConsumerBridgeToMongo(this.nameProvider);
185
- f._addWhere = false;
186
- element.__applyToConsumer(f);
187
- let where = await f.resolveWhere();
188
- if (where?.$and?.length > 0) {
189
- result.push(where);
190
- }
191
- else
192
- return; //since empty or is all rows;
193
- }
194
- this.result.push(() => ({
195
- $or: result
196
- }));
197
- })());
198
- }
199
- isNull(col) {
200
- this.add(col, NULL, "$eq");
201
- }
202
- isNotNull(col) {
203
- this.add(col, NULL, "$ne");
204
- }
205
- isIn(col, val) {
206
- this.result.push(() => ({
207
- [this.nameProvider.$dbNameOf(col)]: {
208
- $in: val.map(x => col.valueConverter.toDb(x))
209
- }
210
- }));
211
- }
212
- isEqualTo(col, val) {
213
- this.add(col, val, "$eq");
214
- }
215
- isDifferentFrom(col, val) {
216
- this.add(col, val, "$ne");
217
- }
218
- isGreaterOrEqualTo(col, val) {
219
- this.add(col, val, "$gte");
220
- }
221
- isGreaterThan(col, val) {
222
- this.add(col, val, "$gt");
223
- }
224
- isLessOrEqualTo(col, val) {
225
- this.add(col, val, "$lte");
226
- }
227
- isLessThan(col, val) {
228
- this.add(col, val, "$lt");
229
- }
230
- containsCaseInsensitive(col, val) {
231
- throw "containsCaseInsensitive not yet implemented";
232
- // this.promises.push(col.getDbName().then(colName => {
233
- // this.result.push(b => b.whereRaw(
234
- // 'lower (' + colName + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"));
235
- // }));
236
- }
237
- add(col, val, operator) {
238
- this.result.push(() => ({
239
- [this.nameProvider.$dbNameOf(col)]: { [operator]: isNull(val) ? val : col.valueConverter.toDb(val) }
240
- }));
241
- }
242
- databaseCustom(databaseCustom) {
243
- throw "error";
244
- // this.promises.push((async () => {
245
- // if (databaseCustom?.buildSql) {
246
- // let item = new CustomSqlFilterBuilder(this.knex);
247
- // await databaseCustom.buildSql(item);
248
- // if (item.sql) {
249
- // this.addToWhere("(" + item.sql + ")");
250
- // }
251
- // }
252
- // })());
253
- }
254
- }
@@ -1,10 +0,0 @@
1
- import { JsonDataProvider, JsonEntityStorage } from '../index';
2
- export declare class JsonEntityFileStorage implements JsonEntityStorage {
3
- private folderPath;
4
- getItem(entityDbName: string): string;
5
- setItem(entityDbName: string, json: string): void;
6
- constructor(folderPath: string);
7
- }
8
- export declare class JsonFileDataProvider extends JsonDataProvider {
9
- constructor(folderPath: string);
10
- }
@@ -1,25 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
- import { JsonDataProvider } from '../index';
4
- export class JsonEntityFileStorage {
5
- folderPath;
6
- getItem(entityDbName) {
7
- let fn = path.join(this.folderPath, entityDbName) + '.json';
8
- if (fs.existsSync(fn)) {
9
- return fs.readFileSync(fn).toString();
10
- }
11
- return undefined;
12
- }
13
- setItem(entityDbName, json) {
14
- if (!fs.existsSync(this.folderPath)) {
15
- fs.mkdirSync(this.folderPath);
16
- }
17
- return fs.writeFileSync(path.join(this.folderPath, entityDbName) + '.json', json);
18
- }
19
- constructor(folderPath) {
20
- this.folderPath = folderPath;
21
- }
22
- }
23
- export class JsonFileDataProvider extends JsonDataProvider {
24
- constructor(folderPath) { super(new JsonEntityFileStorage(folderPath)); }
25
- }
@@ -1,4 +0,0 @@
1
- export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
2
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
3
- export { SseSubscriptionServer } from '../SseSubscriptionServer';
4
- export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
@@ -1,4 +0,0 @@
1
- export { createRemultServerCore } from './expressBridge';
2
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
3
- export { SseSubscriptionServer } from '../SseSubscriptionServer';
4
- export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
@@ -1,182 +0,0 @@
1
- import { ActionInterface, queuedJobInfoResponse } from '../src/server-action';
2
- import type { DataProvider } from '../src/data-interfaces';
3
- import { DataApi, DataApiRequest, DataApiResponse } from '../src/data-api';
4
- import { AllowedForInstance, Remult, UserInfo } from '../src/context';
5
- import type { ClassType } from '../classType';
6
- import { EntityMetadata, IdEntity, Repository } from '../src/remult3';
7
- import { LiveQueryStorage, PerformWithContext, SubscriptionServer } from '../src/live-query/SubscriptionServer';
8
- export interface RemultServerOptions<RequestType> {
9
- /**Entities to use for the api */
10
- entities?: ClassType<any>[];
11
- /**Controller to use for the api */
12
- controllers?: ClassType<any>[];
13
- /** Will be called to get the current user based on the current request */
14
- getUser?: (request: RequestType) => Promise<UserInfo | undefined>;
15
- /** Will be called for each request and can be used for configuration */
16
- initRequest?: (request: RequestType, options: InitRequestOptions) => Promise<void>;
17
- /** Will be called once the server is loaded and the data provider is ready */
18
- initApi?: (remult: Remult) => void | Promise<void>;
19
- /** Data Provider to use for the api.
20
- *
21
- * @see [Connecting to a Database](https://remult.dev/docs/databases.html).
22
- */
23
- dataProvider?: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>);
24
- /** Will create tables and columns in supporting databases. default: true
25
- *
26
- * @description
27
- * when set to true, it'll create entities that do not exist, and add columns that are missing.
28
- */
29
- ensureSchema?: boolean;
30
- /** The path to use for the api, default:/api
31
- *
32
- * @description
33
- * If you want to use a different api path adjust this field
34
- */
35
- rootPath?: string;
36
- /** The default limit to use for find requests that did not specify a limit */
37
- defaultGetLimit?: number;
38
- /** When set to true (default) it'll console log each api endpoint that is created */
39
- logApiEndPoints?: boolean;
40
- /** A subscription server to use for live query and message channels */
41
- subscriptionServer?: SubscriptionServer;
42
- /** A storage to use to store live queries, relevant mostly for serverless scenarios or larger scales */
43
- liveQueryStorage?: LiveQueryStorage;
44
- /** Used to store the context relevant info for re running a live query */
45
- contextSerializer?: {
46
- serialize(remult: Remult): Promise<any>;
47
- deserialize(json: any, options: InitRequestOptions): Promise<void>;
48
- };
49
- /** Storage to use for backend methods that use queue */
50
- queueStorage?: QueueStorage;
51
- }
52
- export interface InitRequestOptions {
53
- liveQueryStorage: LiveQueryStorage;
54
- readonly remult: Remult;
55
- }
56
- export declare function createRemultServerCore<RequestType>(options: RemultServerOptions<RequestType>, serverCoreOptions: ServerCoreOptions<RequestType>): RemultServer<RequestType>;
57
- export type GenericRequestHandler = (req: GenericRequestInfo, res: GenericResponse, next: VoidFunction) => void;
58
- export interface ServerHandleResponse {
59
- data?: any;
60
- statusCode: number;
61
- }
62
- export interface RemultServer<RequestType> extends RemultServerCore<RequestType> {
63
- withRemult(req: RequestType, res: GenericResponse, next: VoidFunction): any;
64
- registerRouter(r: GenericRouter): void;
65
- handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse | undefined>;
66
- withRemultPromise<T>(request: RequestType, what: () => Promise<T>): Promise<T>;
67
- }
68
- export interface RemultServerCore<RequestType> {
69
- getRemult(req: RequestType): Promise<Remult>;
70
- openApiDoc(options: {
71
- title: string;
72
- version?: string;
73
- }): any;
74
- }
75
- export type GenericRouter = {
76
- route(path: string): SpecificRoute;
77
- };
78
- export type SpecificRoute = {
79
- get(handler: GenericRequestHandler): SpecificRoute;
80
- put(handler: GenericRequestHandler): SpecificRoute;
81
- post(handler: GenericRequestHandler): SpecificRoute;
82
- delete(handler: GenericRequestHandler): SpecificRoute;
83
- };
84
- export interface GenericRequestInfo {
85
- url?: string;
86
- method?: any;
87
- query?: any;
88
- params?: any;
89
- }
90
- export interface GenericResponse {
91
- json(data: any): any;
92
- status(statusCode: number): GenericResponse;
93
- end(): any;
94
- }
95
- export declare class RemultServerImplementation<RequestType> implements RemultServer<RequestType> {
96
- queue: inProcessQueueHandler;
97
- options: RemultServerOptions<any>;
98
- dataProvider: DataProvider | Promise<DataProvider>;
99
- private coreOptions;
100
- private entitiesMetaData;
101
- liveQueryStorage: LiveQueryStorage;
102
- constructor(queue: inProcessQueueHandler, options: RemultServerOptions<any>, dataProvider: DataProvider | Promise<DataProvider>, coreOptions: ServerCoreOptions<RequestType>, entitiesMetaData: EntityMetadata[]);
103
- withRemultPromise<T>(request: RequestType, what: () => Promise<T>): Promise<T>;
104
- getEntities(): EntityMetadata<any>[];
105
- runWithSerializedJsonContextData: PerformWithContext;
106
- subscriptionServer: SubscriptionServer;
107
- withRemult: (req: RequestType, res: GenericResponse, next: VoidFunction) => void;
108
- routeImpl: RouteImplementation<RequestType>;
109
- getRouteImpl(): RouteImplementation<RequestType>;
110
- handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse>;
111
- registeredRouter: boolean;
112
- registerRouter(r: GenericRouter): void;
113
- serializeContext(remult: Remult): Promise<{
114
- user: UserInfo | undefined;
115
- context: undefined;
116
- }>;
117
- add(key: string, dataApiFactory: ((req: Remult) => DataApi), r: GenericRouter): void;
118
- private runWithRemult;
119
- process(what: (remult: Remult, myReq: DataApiRequest, myRes: DataApiResponse, genReq: GenericRequestInfo, origRes: GenericResponse, origReq: RequestType) => Promise<void>): (req: RequestType, origRes: GenericResponse) => Promise<void>;
120
- getRemult(req: RequestType): Promise<Remult>;
121
- hasQueue: boolean;
122
- addAction(action: ActionInterface, r: GenericRouter): void;
123
- openApiDoc(options: {
124
- title: string;
125
- version?: string;
126
- }): any;
127
- backendMethodsOpenApi: {
128
- path: string;
129
- allowed: AllowedForInstance<any>;
130
- tag: string;
131
- }[];
132
- }
133
- declare class inProcessQueueHandler {
134
- private storage;
135
- constructor(storage: QueueStorage);
136
- submitJob(url: string, req: Remult, body: any): Promise<string>;
137
- mapQueuedAction(url: string, what: (data: any, r: Remult, res: DataApiResponse) => void): void;
138
- actions: Map<string, (data: any, r: Remult, res: DataApiResponse) => void>;
139
- getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
140
- }
141
- export interface queuedJobInfo {
142
- info: queuedJobInfoResponse;
143
- userId: string;
144
- setErrorResult(error: any): void;
145
- setResult(result: any): void;
146
- setProgress(progress: number): void;
147
- }
148
- export interface QueueStorage {
149
- createJob(url: string, userId: string): Promise<string>;
150
- getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
151
- }
152
- export declare class EntityQueueStorage implements QueueStorage {
153
- private repo;
154
- constructor(repo: Repository<JobsInQueueEntity>);
155
- sync: Promise<any>;
156
- doSync<T>(what: () => Promise<T>): Promise<any>;
157
- getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
158
- createJob(url: string, userId: string): Promise<string>;
159
- }
160
- declare class RouteImplementation<RequestType> {
161
- private coreOptions;
162
- constructor(coreOptions: ServerCoreOptions<RequestType>);
163
- map: Map<string, Map<string, GenericRequestHandler>>;
164
- route(path: string): SpecificRoute;
165
- handle(req: RequestType, gRes?: GenericResponse): Promise<ServerHandleResponse | undefined>;
166
- middleware(origReq: RequestType, res: GenericResponse, next: VoidFunction): void;
167
- }
168
- export declare class JobsInQueueEntity extends IdEntity {
169
- userId: string;
170
- url: string;
171
- submitTime: Date;
172
- doneTime: Date;
173
- result: string;
174
- done: boolean;
175
- error: boolean;
176
- progress: number;
177
- }
178
- export interface ServerCoreOptions<RequestType> {
179
- buildGenericRequestInfo(req: RequestType): GenericRequestInfo;
180
- getRequestBody(req: RequestType): Promise<any>;
181
- }
182
- export {};