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,6 +0,0 @@
1
- import { RemultServer, RemultServerOptions, ServerCoreOptions } from './expressBridge';
2
- export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, RemultServerCore, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions } from './expressBridge';
3
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
4
- export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
5
- export { SseSubscriptionServer } from '../SseSubscriptionServer';
6
- export declare function createRemultServer<RequestType>(options: RemultServerOptions<RequestType>, serverCoreOptions?: ServerCoreOptions<RequestType>): RemultServer<RequestType>;
@@ -1,9 +0,0 @@
1
- import { createRemultServerCore, } from './expressBridge';
2
- import { initAsyncHooks } from './initAsyncHooks';
3
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
4
- export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
5
- export { SseSubscriptionServer } from '../SseSubscriptionServer';
6
- export function createRemultServer(options, serverCoreOptions) {
7
- initAsyncHooks();
8
- return createRemultServerCore(options, serverCoreOptions || { buildGenericRequestInfo: req => req, getRequestBody: async (req) => req.body });
9
- }
@@ -1 +0,0 @@
1
- export declare function initAsyncHooks(): void;
@@ -1,9 +0,0 @@
1
- import { AsyncLocalStorage } from 'async_hooks';
2
- import { RemultAsyncLocalStorage } from '../src/context';
3
- let init = false;
4
- export function initAsyncHooks() {
5
- if (init)
6
- return;
7
- init = true;
8
- RemultAsyncLocalStorage.instance = new RemultAsyncLocalStorage(new AsyncLocalStorage());
9
- }
@@ -1,2 +0,0 @@
1
- import { DataProvider } from '../src/data-interfaces';
2
- export declare function initDataProvider(optionsDataProvider?: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>)): Promise<DataProvider>;
@@ -1,14 +0,0 @@
1
- export function initDataProvider(optionsDataProvider) {
2
- let dataProvider;
3
- if (typeof optionsDataProvider === "function") {
4
- dataProvider = optionsDataProvider();
5
- }
6
- else
7
- dataProvider = Promise.resolve(optionsDataProvider);
8
- dataProvider = dataProvider.then(async (dp) => {
9
- if (dp)
10
- return dp;
11
- return new (await import('./JsonEntityFileStorage')).JsonFileDataProvider('./db');
12
- });
13
- return dataProvider;
14
- }
@@ -1,11 +0,0 @@
1
- export interface packedRowInfo {
2
- data: any;
3
- isNewRow: boolean;
4
- id: string;
5
- wasChanged: boolean;
6
- }
7
- export interface entityEventListener<entityType> {
8
- deleted?: (entity: entityType) => void;
9
- saved?: (entity: entityType, isNew: boolean) => void;
10
- validating?: (entity: entityType) => Promise<any> | any;
11
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- export interface __RowsOfDataForTesting {
2
- rows: any;
3
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,6 +0,0 @@
1
- import { dbTestWhatSignature } from "../shared-tests/db-tests-setup";
2
- export declare const testKnexPGSqlImpl: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
3
- export declare const mySqlTest: import("../shared-tests/db-tests-setup").dbTestMethodSignature;
4
- export declare function testPostgresImplementation(key: string, what: dbTestWhatSignature, focus?: boolean): void;
5
- export declare function testMongo(key: string, what: dbTestWhatSignature, focus?: boolean): void;
6
- import '../shared-tests';
@@ -1,147 +0,0 @@
1
- import { Remult } from "../context";
2
- import { KnexDataProvider, KnexSchemaBuilder } from '../../remult-knex';
3
- import * as Knex from 'knex';
4
- import { MongoClient } from 'mongodb';
5
- import { config } from 'dotenv';
6
- import { createPostgresConnection, PostgresSchemaBuilder } from "../../postgres";
7
- import { addDatabaseToTest, itWithFocus, testAll, TestDbs } from "../shared-tests/db-tests-setup";
8
- import { describeClass } from "../remult3/DecoratorReplacer";
9
- import { Entity, Fields } from "../remult3";
10
- KnexSchemaBuilder.logToConsole = false;
11
- PostgresSchemaBuilder.logToConsole = false;
12
- config();
13
- function testKnexSqlImpl(knex, name) {
14
- return (key, what, focus = false) => {
15
- itWithFocus(key + " " + name + " - knex", async () => {
16
- let db = new KnexDataProvider(knex);
17
- let remult = new Remult(db);
18
- await what({
19
- db, remult,
20
- createEntity: async (entity) => {
21
- let repo = remult.repo(entity);
22
- await knex.schema.dropTableIfExists(await repo.metadata.getDbName());
23
- await db.ensureSchema([repo.metadata]);
24
- return repo;
25
- }
26
- });
27
- }, focus);
28
- };
29
- }
30
- export const testKnexPGSqlImpl = testKnexSqlImpl(Knex.default({
31
- client: 'pg',
32
- connection: process.env.DATABASE_URL,
33
- //debug:true
34
- }), "postgres");
35
- addDatabaseToTest(testKnexPGSqlImpl);
36
- if (process.env['TESTS_SQL_SERVER'])
37
- addDatabaseToTest(testKnexSqlImpl(Knex.default({
38
- client: 'mssql',
39
- connection: {
40
- server: '127.0.0.1',
41
- database: 'test2',
42
- user: 'sa',
43
- password: 'MASTERKEY',
44
- options: {
45
- enableArithAbort: true,
46
- encrypt: false,
47
- instanceName: 'sqlexpress'
48
- }
49
- } //,debug: true
50
- }), "sql server"));
51
- if (true)
52
- addDatabaseToTest(testKnexSqlImpl(Knex.default({
53
- client: 'better-sqlite3',
54
- connection: {
55
- filename: ":memory:"
56
- },
57
- //debug: true
58
- }), "sqlite3"));
59
- export const mySqlTest = addDatabaseToTest(testKnexSqlImpl(Knex.default({
60
- client: 'mysql2',
61
- connection: {
62
- user: 'root',
63
- password: 'MASTERKEY',
64
- host: '127.0.0.1',
65
- database: 'test'
66
- }
67
- //debug: true
68
- }), "mysql2"));
69
- let pg = createPostgresConnection();
70
- export function testPostgresImplementation(key, what, focus = false) {
71
- itWithFocus(key + " - postgres", async () => {
72
- let db = await pg;
73
- let remult = new Remult(db);
74
- await what({
75
- db, remult,
76
- createEntity: async (entity) => {
77
- let repo = remult.repo(entity);
78
- await db.execute("drop table if exists " + await repo.metadata.getDbName());
79
- await db.ensureSchema([repo.metadata]);
80
- return repo;
81
- }
82
- });
83
- }, focus);
84
- }
85
- addDatabaseToTest(testPostgresImplementation);
86
- import { Categories } from "../tests/remult-3-entities";
87
- import { MongoDataProvider } from "../../remult-mongo";
88
- testAll("transactions", async ({ db, createEntity }) => {
89
- let x = await createEntity(Categories);
90
- await db.transaction(async (db) => {
91
- let remult = new Remult(db);
92
- expect(await remult.repo(Categories).count()).toBe(0);
93
- });
94
- });
95
- const mongoConnectionString = process.env['MONGO_TEST_URL']; //"mongodb://localhost:27017/local"
96
- let client = new MongoClient(mongoConnectionString);
97
- let done;
98
- let mongoDbPromise = client.connect().then(c => {
99
- done = c;
100
- return c.db("test");
101
- });
102
- afterAll(async () => {
103
- if (done)
104
- done.close();
105
- });
106
- export function testMongo(key, what, focus = false) {
107
- itWithFocus(key + " - mongo", async () => {
108
- let mongoDb = await mongoDbPromise;
109
- let db = new MongoDataProvider(mongoDb, client);
110
- let remult = new Remult(db);
111
- await what({
112
- db, remult,
113
- createEntity: async (entity) => {
114
- let repo = remult.repo(entity);
115
- await mongoDb.collection(await repo.metadata.getDbName()).deleteMany({});
116
- return repo;
117
- }
118
- });
119
- }, focus);
120
- }
121
- addDatabaseToTest(testMongo, TestDbs.mongo);
122
- it("test mongo without transaction", async () => {
123
- const client = new MongoClient("mongodb://localhost:27017/local");
124
- await client.connect();
125
- const mongoDb = client.db('test');
126
- const db = new MongoDataProvider(mongoDb, client, { disableTransactions: true });
127
- var remult = new Remult(db);
128
- const entity = class {
129
- id = 0;
130
- title = '';
131
- };
132
- describeClass(entity, Entity("testNoTrans"), { id: Fields.number(), title: Fields.string() });
133
- const repo = remult.repo(entity);
134
- for (const item of await repo.find()) {
135
- await repo.delete(item);
136
- }
137
- await repo.insert({ id: 1, title: "a" });
138
- try {
139
- await db.transaction(async () => {
140
- await repo.insert({ id: 2, title: "b" });
141
- throw new Error();
142
- });
143
- }
144
- catch { }
145
- expect(await repo.count()).toBe(2);
146
- });
147
- import '../shared-tests';
@@ -1,197 +0,0 @@
1
- import { Remult } from "../context";
2
- import { Entity, Fields } from "../remult3";
3
- import { KnexDataProvider } from '../../remult-knex';
4
- import { config } from 'dotenv';
5
- import { testKnexPGSqlImpl, testMongo, testPostgresImplementation } from "./backend-database-test-setup.backend-spec";
6
- import { entityWithValidations } from "../shared-tests/entityWithValidations";
7
- import { PostgresDataProvider } from "../../postgres";
8
- import { MongoDataProvider } from "../../remult-mongo";
9
- import { SqlDatabase } from "../data-providers/sql-database";
10
- import { dbNamesOf } from "../filter/filter-consumer-bridge-to-sql-request";
11
- import { RemultAsyncLocalStorage } from "../../src/context";
12
- import { remult } from "../remult-proxy";
13
- import { describeClass } from "../remult3/DecoratorReplacer";
14
- import { AsyncLocalStorage } from "async_hooks";
15
- config();
16
- testPostgresImplementation("default order by", async ({ createEntity }) => {
17
- let s = await entityWithValidations.create4RowsInDp(createEntity);
18
- await s.update(1, { name: "updated name" });
19
- expect((await s.find()).map(x => x.myId)).toEqual([1, 2, 3, 4]);
20
- }, false);
21
- testKnexPGSqlImpl("default order by", async ({ createEntity }) => {
22
- let s = await entityWithValidations.create4RowsInDp(createEntity);
23
- await s.update(1, { name: "updated name" });
24
- expect((await s.find()).map(x => x.myId)).toEqual([1, 2, 3, 4]);
25
- }, false);
26
- testPostgresImplementation("sql filter", async ({ createEntity }) => {
27
- let s = await entityWithValidations.create4RowsInDp(createEntity);
28
- expect((await s.find({
29
- where: SqlDatabase.rawFilter(async (build) => {
30
- build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
31
- })
32
- })).length).toBe(2);
33
- }, false);
34
- testPostgresImplementation("sql filter2", async ({ createEntity }) => {
35
- let s = await entityWithValidations.create4RowsInDp(createEntity);
36
- expect((await s.find({
37
- where: {
38
- $or: [
39
- SqlDatabase.rawFilter(async (build) => {
40
- build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
41
- }),
42
- {
43
- myId: 2
44
- }
45
- ]
46
- }
47
- })).length).toBe(3);
48
- }, false);
49
- testKnexPGSqlImpl("knex filter", async ({ createEntity }) => {
50
- let s = await entityWithValidations.create4RowsInDp(createEntity);
51
- expect((await s.find({
52
- where: KnexDataProvider.rawFilter(async () => {
53
- return build => build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]);
54
- })
55
- })).length).toBe(2);
56
- }, false);
57
- testKnexPGSqlImpl("knex filter2", async ({ createEntity }) => {
58
- let s = await entityWithValidations.create4RowsInDp(createEntity);
59
- expect((await s.find({
60
- where: {
61
- $or: [KnexDataProvider.rawFilter(async () => {
62
- return build => build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]);
63
- }), {
64
- myId: 4
65
- }]
66
- }
67
- })).length).toBe(3);
68
- }, false);
69
- testPostgresImplementation("ensure schema with dbNames that have quotes", async ({ remult }) => {
70
- const db = SqlDatabase.getDb(remult);
71
- const entityName = 'test_naming';
72
- await db.execute("Drop table if exists " + entityName);
73
- await db.execute(`create table ${entityName}(id int,"createdAt" Date)`);
74
- const ent = class {
75
- id = 0;
76
- createdAt = new Date();
77
- oneMoreColumn = 0;
78
- };
79
- describeClass(ent, Entity(entityName), {
80
- id: Fields.integer(),
81
- createdAt: Fields.createdAt({ dbName: '"createdAt"' }),
82
- oneMoreColumn: Fields.integer()
83
- });
84
- await db.ensureSchema([remult.repo(ent).metadata]);
85
- await remult.repo(ent).insert({ id: 1, oneMoreColumn: 8 });
86
- expect((await remult.repo(ent).findFirst()).createdAt.getFullYear()).toBe(new Date().getFullYear());
87
- }, false);
88
- testPostgresImplementation("work with native sql", async ({ remult, createEntity }) => {
89
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
90
- const sql = SqlDatabase.getDb(remult);
91
- const r = await sql.execute("select count(*) as c from " + repo.metadata.options.dbName);
92
- expect(r.rows[0].c).toBe('4');
93
- }, false);
94
- testPostgresImplementation("work with native sql2", async ({ remult, createEntity }) => {
95
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
96
- const sql = PostgresDataProvider.getDb(remult);
97
- const r = await sql.query("select count(*) as c from " + repo.metadata.options.dbName);
98
- expect(r.rows[0].c).toBe('4');
99
- }, false);
100
- testPostgresImplementation("work with native sql3", async ({ remult, createEntity }) => {
101
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
102
- await SqlDatabase.getDb(remult)._getSourceSql().transaction(async (x) => {
103
- const sql = PostgresDataProvider.getDb(new Remult(new SqlDatabase(x)));
104
- const r = await sql.query("select count(*) as c from " + repo.metadata.options.dbName);
105
- expect(r.rows[0].c).toBe('4');
106
- });
107
- }, false);
108
- testKnexPGSqlImpl("work with native knex", async ({ remult, createEntity }) => {
109
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
110
- const knex = KnexDataProvider.getDb(remult);
111
- const r = await knex(repo.metadata.options.dbName).count();
112
- expect(r[0].count).toBe('4');
113
- }, false);
114
- testKnexPGSqlImpl("work with native knex2", async ({ remult, createEntity }) => {
115
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
116
- await (remult.dataProvider).transaction(async (db) => {
117
- const sql = KnexDataProvider.getDb(new Remult(db));
118
- const r = await sql(repo.metadata.options.dbName).count();
119
- expect(r[0].count).toBe('4');
120
- });
121
- }, false);
122
- testKnexPGSqlImpl("work with native knex3", async ({ remult, createEntity }) => {
123
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
124
- const knex = KnexDataProvider.getDb(remult);
125
- const t = await dbNamesOf(repo);
126
- const r = await knex((await t).$entityName).select(t.myId, t.name);
127
- expect(r.length).toBe(4);
128
- }, false);
129
- testMongo("work with native mongo", async ({ remult, createEntity }) => {
130
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
131
- const mongo = MongoDataProvider.getDb(remult);
132
- const r = await (await mongo.db.collection(repo.metadata.options.dbName)).countDocuments();
133
- expect(r).toBe(4);
134
- }, false);
135
- testKnexPGSqlImpl("knex with filter", async ({ remult, createEntity }) => {
136
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
137
- const knex = KnexDataProvider.getDb(remult);
138
- const e = await dbNamesOf(repo);
139
- const r = await knex(e.$entityName).count().where(await KnexDataProvider.filterToRaw(repo, { myId: [1, 3] }));
140
- expect(r[0].count).toBe('2');
141
- }, false);
142
- testMongo("work with native mongo and condition", async ({ remult, createEntity }) => {
143
- const repo = await entityWithValidations.create4RowsInDp(createEntity);
144
- const mongo = MongoDataProvider.getDb(remult);
145
- const r = await (await mongo.db.collection(repo.metadata.options.dbName)).countDocuments(await MongoDataProvider.filterToRaw(repo, { myId: [1, 2] }));
146
- expect(r).toBe(2);
147
- }, false);
148
- it("test async hooks and static remult", async () => {
149
- let gotException = true;
150
- try {
151
- RemultAsyncLocalStorage.instance.getRemult();
152
- gotException = false;
153
- }
154
- catch { }
155
- expect(gotException).toBe(true);
156
- RemultAsyncLocalStorage.instance = new RemultAsyncLocalStorage(new AsyncLocalStorage());
157
- try {
158
- expect(RemultAsyncLocalStorage.instance.getRemult()).toBe(undefined);
159
- RemultAsyncLocalStorage.enable();
160
- try {
161
- remult.isAllowed(false);
162
- gotException = false;
163
- }
164
- catch { }
165
- expect(gotException).toBe(true);
166
- const promises = [];
167
- RemultAsyncLocalStorage.instance.run(new Remult(), () => {
168
- remult.user = { id: 'noam' };
169
- promises.push(new Promise(res => {
170
- setTimeout(() => {
171
- expect(remult.user.id).toBe('noam');
172
- res({});
173
- }, 10);
174
- }));
175
- RemultAsyncLocalStorage.instance.run(new Remult(), () => {
176
- remult.user = { id: 'yoni' };
177
- promises.push(new Promise(res => {
178
- setTimeout(() => {
179
- expect(remult.user.id).toBe('yoni');
180
- res({});
181
- }, 10);
182
- }));
183
- });
184
- promises.push(new Promise(res => {
185
- setTimeout(() => {
186
- expect(remult.user.id).toBe('noam');
187
- res({});
188
- }, 10);
189
- }));
190
- });
191
- await Promise.all(promises);
192
- }
193
- finally {
194
- RemultAsyncLocalStorage.disable();
195
- RemultAsyncLocalStorage.instance = new RemultAsyncLocalStorage(undefined);
196
- }
197
- });
@@ -1,167 +0,0 @@
1
- import axios from 'axios';
2
- import { remult } from '../remult-proxy';
3
- import { Categories } from '../tests/remult-3-entities';
4
- import { Task } from '../../../test-servers/shared/Task';
5
- import { remultFresh } from '../../remult-fresh';
6
- import { InMemoryDataProvider } from '../data-providers/in-memory-database';
7
- import { RemultAsyncLocalStorage } from '../context';
8
- const servers = {
9
- koa: "koa",
10
- fastify: "fastify",
11
- express: "express",
12
- mw: "mw",
13
- fresh: "fresh",
14
- mwc: "mwc",
15
- svelteKit: 'svelteKit',
16
- nextApp: "nextApp"
17
- };
18
- remult.apiClient.url = 'http://localhost:3003/api';
19
- let path = remult.apiClient.url + '/tasks';
20
- const environments = [
21
- // ["optine", 3006],
22
- //["nest", 3001],
23
- // ["next", 3000],
24
- // [servers.nextApp, 3010],
25
- // [servers.koa, 3002],
26
- // [servers.fastify, 3003],
27
- // [servers.express, 3004],
28
- // [servers.mw, 3005],
29
- // [servers.mwc, 3007],
30
- // [servers.fresh, 8000],
31
- // [servers.svelteKit, 5173],
32
- ];
33
- function test(name, test, ...ignoreList) {
34
- for (const [env, port] of environments) {
35
- if (ignoreList?.includes(env))
36
- continue;
37
- const theTest = async () => {
38
- remult.apiClient.url = `http://localhost:${port}/api`;
39
- path = remult.apiClient.url + '/tasks';
40
- await test();
41
- };
42
- const testName = env + ` ${port}: ${name}`;
43
- fit(testName, theTest);
44
- }
45
- }
46
- test("works", async () => {
47
- const repo = await create3Tasks();
48
- const tasks = await repo.find({ where: { completed: true } });
49
- expect(tasks.length).toBe(1);
50
- await repo.save({ ...tasks[0], completed: false });
51
- expect(await repo.count({ completed: true })).toBe(0);
52
- });
53
- test("test multiple items", async () => {
54
- const repo = await create3Tasks();
55
- expect(await repo.count({
56
- title: { "!=": ["a", "c"] }
57
- })).toBe(1);
58
- });
59
- test("validation", async () => {
60
- const r = await create3Tasks();
61
- let err = undefined;
62
- try {
63
- await r.insert({ "title": "" });
64
- }
65
- catch (error) {
66
- err = error;
67
- }
68
- expect(err).toEqual({
69
- message: "Title: Should not be empty",
70
- httpStatusCode: 400,
71
- modelState: {
72
- title: "Should not be empty"
73
- }
74
- });
75
- });
76
- test("forbidden", async () => {
77
- let err = undefined;
78
- try {
79
- await Task.testForbidden();
80
- }
81
- catch (error) {
82
- err = error;
83
- }
84
- expect(err.httpStatusCode).toEqual(403);
85
- });
86
- test("test static remult", async () => {
87
- const r = await create3Tasks();
88
- expect(await Task.testStaticRemult()).toBe(3);
89
- }, servers.fresh, servers.mwc);
90
- test("test injected remult", async () => {
91
- const r = await create3Tasks();
92
- expect(await Task.testInjectedRemult()).toBe(3);
93
- });
94
- test("test http 404", async () => {
95
- const repo = create3Tasks();
96
- const task = await (await repo).findFirst();
97
- let result = await axios.get(path + "/" + task.id);
98
- expect(result.data.id).toBe(task.id);
99
- expect(result.status).toBe(200);
100
- let error = undefined;
101
- try {
102
- result = await axios.get(path + "/123");
103
- }
104
- catch (err) {
105
- error = err;
106
- }
107
- expect(error.response.status).toBe(404);
108
- });
109
- test("test http 201", async () => {
110
- let result = await axios.post(path, { title: "z", id: "" });
111
- expect(result.data.title).toBe("z");
112
- expect(result.status).toBe(201);
113
- result = await axios.delete(path + "/" + result.data.id);
114
- expect(result.status).toBe(204);
115
- });
116
- test("test regular api call", async () => {
117
- await create3Tasks();
118
- let result = await axios.get(remult.apiClient.url + "/test");
119
- expect(result.data.result).toBe(3);
120
- });
121
- class FreshResponseTest {
122
- body;
123
- init;
124
- constructor(body, init) {
125
- this.body = body;
126
- this.init = init;
127
- }
128
- static json(data, init) {
129
- return new this(data, init);
130
- }
131
- }
132
- it("test fresh", async () => {
133
- try {
134
- const api = remultFresh({
135
- entities: [Categories],
136
- dataProvider: new InMemoryDataProvider(),
137
- rootPath: '/api',
138
- logApiEndPoints: false
139
- }, FreshResponseTest);
140
- const r = await api.handle({
141
- url: '/api/Categories',
142
- json() {
143
- return undefined;
144
- },
145
- method: "get"
146
- }, {
147
- next() {
148
- return undefined;
149
- },
150
- });
151
- expect(r.body).toEqual([]);
152
- }
153
- finally {
154
- RemultAsyncLocalStorage.disable();
155
- }
156
- });
157
- async function create3Tasks() {
158
- remult.apiClient.httpClient = axios;
159
- const taskRepo = remult.repo(Task);
160
- for (const task of await taskRepo.find()) {
161
- await taskRepo.delete(task);
162
- }
163
- expect(await taskRepo.count()).toBe(0);
164
- await taskRepo.insert([{ title: "a" }, { title: "b", completed: true }, { title: "c" }]);
165
- expect(await taskRepo.count()).toBe(3);
166
- return taskRepo;
167
- }
@@ -1,31 +0,0 @@
1
- import { RestDataProviderHttpProvider } from "./data-interfaces";
2
- import { RestDataProviderHttpProviderUsingFetch } from './data-providers/rest-data-provider';
3
- export declare function buildRestDataProvider(provider: ExternalHttpProvider | typeof fetch): RestDataProviderHttpProviderUsingFetch | RestDataProviderHttpProvider;
4
- export declare function isExternalHttpProvider(item: any): boolean;
5
- export declare class HttpProviderBridgeToRestDataProviderHttpProvider implements RestDataProviderHttpProvider {
6
- private http;
7
- constructor(http: ExternalHttpProvider);
8
- post(url: string, data: any): Promise<any>;
9
- delete(url: string): Promise<void>;
10
- put(url: string, data: any): Promise<any>;
11
- get(url: string): Promise<any>;
12
- }
13
- export declare function retry<T>(what: () => Promise<T>): Promise<T>;
14
- export declare function toPromise<T>(p: Promise<T> | {
15
- toPromise(): Promise<T>;
16
- }): Promise<any>;
17
- export declare function processHttpException(ex: any): Promise<any>;
18
- export interface ExternalHttpProvider {
19
- post(url: string, data: any): Promise<any> | {
20
- toPromise(): Promise<any>;
21
- };
22
- delete(url: string): Promise<void> | {
23
- toPromise(): Promise<void>;
24
- };
25
- put(url: string, data: any): Promise<any> | {
26
- toPromise(): Promise<any>;
27
- };
28
- get(url: string): Promise<any> | {
29
- toPromise(): Promise<any>;
30
- };
31
- }