remult 0.22.2 → 0.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/esm/graphql.js +27 -27
  2. package/esm/postgres/schema-builder.js +4 -4
  3. package/esm/remult-knex/index.js +2 -2
  4. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  5. package/esm/src/id-entity.d.ts +4 -0
  6. package/esm/src/id-entity.js +8 -0
  7. package/esm/src/remult3/RepositoryImplementation.js +7 -5
  8. package/esm/src/shared-tests/db-tests.db-tests.js +35 -0
  9. package/package.json +1 -1
  10. package/postgres/postgresColumnSyntax.d.ts +2 -0
  11. package/postgres/postgresColumnSyntax.js +34 -0
  12. package/remult-knex/index.js +2 -2
  13. package/remult-middleware.d.ts +2 -0
  14. package/remult-middleware.js +70 -0
  15. package/server/register-actions-on-server.d.ts +3 -0
  16. package/server/register-actions-on-server.js +50 -0
  17. package/server/register-entities-on-server.d.ts +3 -0
  18. package/server/register-entities-on-server.js +19 -0
  19. package/src/backend-tests/backend-database-test-setup.backend-spec.js +10 -0
  20. package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +1 -1
  21. package/src/backend-tests/my-test.backend-spec.js +217 -0
  22. package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
  23. package/src/backend-tests/test-http-server.backend-spec.js +342 -0
  24. package/src/id-entity.d.ts +4 -0
  25. package/src/id-entity.js +17 -0
  26. package/src/remult3/RepositoryImplementation.js +15 -13
  27. package/src/shared-tests/db-tests.db-tests.js +64 -0
  28. package/{esm/core/src/valueConverters.d.ts → valueConverters.d.ts} +12 -13
  29. package/valueConverters.js +168 -0
  30. package/esm/angular/interfaces/index.d.ts +0 -1
  31. package/esm/angular/interfaces/index.js +0 -1
  32. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  33. package/esm/angular/interfaces/src/column-collection.js +0 -341
  34. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  35. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  36. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  37. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  38. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  39. package/esm/angular/interfaces/src/dataList.js +0 -42
  40. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  41. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  42. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  43. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  44. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  45. package/esm/angular/interfaces/src/public_api.js +0 -4
  46. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  47. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  48. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  49. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  50. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  51. package/esm/core/SseSubscriptionServer.js +0 -107
  52. package/esm/core/assign.d.ts +0 -1
  53. package/esm/core/assign.js +0 -5
  54. package/esm/core/classType.d.ts +0 -3
  55. package/esm/core/classType.js +0 -1
  56. package/esm/core/index.d.ts +0 -27
  57. package/esm/core/index.js +0 -25
  58. package/esm/core/inputTypes.d.ts +0 -9
  59. package/esm/core/inputTypes.js +0 -9
  60. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  61. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  62. package/esm/core/postgres/index.d.ts +0 -2
  63. package/esm/core/postgres/index.js +0 -2
  64. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  65. package/esm/core/postgres/postgres-data-provider.js +0 -120
  66. package/esm/core/postgres/schema-builder.d.ts +0 -17
  67. package/esm/core/postgres/schema-builder.js +0 -153
  68. package/esm/core/remult-fresh.d.ts +0 -17
  69. package/esm/core/remult-fresh.js +0 -29
  70. package/esm/core/remult-knex/index.d.ts +0 -30
  71. package/esm/core/remult-knex/index.js +0 -446
  72. package/esm/core/remult-mongo.d.ts +0 -24
  73. package/esm/core/remult-mongo.js +0 -254
  74. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  75. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  76. package/esm/core/server/core.d.ts +0 -4
  77. package/esm/core/server/core.js +0 -4
  78. package/esm/core/server/expressBridge.d.ts +0 -182
  79. package/esm/core/server/expressBridge.js +0 -938
  80. package/esm/core/server/index.d.ts +0 -6
  81. package/esm/core/server/index.js +0 -9
  82. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  83. package/esm/core/server/initAsyncHooks.js +0 -9
  84. package/esm/core/server/initDataProvider.d.ts +0 -2
  85. package/esm/core/server/initDataProvider.js +0 -14
  86. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  87. package/esm/core/src/__EntityValueProvider.js +0 -1
  88. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  89. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  90. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  91. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  92. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  93. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  94. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  95. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  96. package/esm/core/src/buildRestDataProvider.js +0 -113
  97. package/esm/core/src/column-interfaces.d.ts +0 -154
  98. package/esm/core/src/column-interfaces.js +0 -7
  99. package/esm/core/src/column.d.ts +0 -58
  100. package/esm/core/src/column.js +0 -174
  101. package/esm/core/src/context.d.ts +0 -134
  102. package/esm/core/src/context.js +0 -286
  103. package/esm/core/src/data-api.d.ts +0 -39
  104. package/esm/core/src/data-api.js +0 -279
  105. package/esm/core/src/data-interfaces.d.ts +0 -41
  106. package/esm/core/src/data-interfaces.js +0 -12
  107. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  108. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  109. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  110. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  111. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  112. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  113. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  114. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  115. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  116. package/esm/core/src/data-providers/sql-database.js +0 -384
  117. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  118. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  119. package/esm/core/src/entity.d.ts +0 -91
  120. package/esm/core/src/entity.js +0 -1
  121. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  122. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  123. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  124. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  125. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  126. package/esm/core/src/filter/filter-interfaces.js +0 -477
  127. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  128. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  129. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  130. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  131. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  132. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  133. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  134. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  135. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  136. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  137. package/esm/core/src/remult-proxy.d.ts +0 -35
  138. package/esm/core/src/remult-proxy.js +0 -113
  139. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  140. package/esm/core/src/remult3/DecoratorReplacer.js +0 -20
  141. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  142. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  143. package/esm/core/src/remult3/index.d.ts +0 -2
  144. package/esm/core/src/remult3/index.js +0 -2
  145. package/esm/core/src/remult3/remult3.d.ts +0 -395
  146. package/esm/core/src/remult3/remult3.js +0 -2
  147. package/esm/core/src/server-action.d.ts +0 -81
  148. package/esm/core/src/server-action.js +0 -394
  149. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  150. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  151. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  152. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  153. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  154. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  155. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  156. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  157. package/esm/core/src/shared-tests/index.d.ts +0 -4
  158. package/esm/core/src/shared-tests/index.js +0 -4
  159. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  160. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  161. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  162. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  163. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  164. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  165. package/esm/core/src/sort.d.ts +0 -16
  166. package/esm/core/src/sort.js +0 -103
  167. package/esm/core/src/sql-command.d.ts +0 -19
  168. package/esm/core/src/sql-command.js +0 -1
  169. package/esm/core/src/test.d.ts +0 -3
  170. package/esm/core/src/test.js +0 -12
  171. package/esm/core/src/tests/Done.d.ts +0 -5
  172. package/esm/core/src/tests/Done.js +0 -9
  173. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  174. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  175. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  176. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  177. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  178. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  179. package/esm/core/src/tests/c.d.ts +0 -8
  180. package/esm/core/src/tests/c.js +0 -13
  181. package/esm/core/src/tests/createData.d.ts +0 -7
  182. package/esm/core/src/tests/createData.js +0 -22
  183. package/esm/core/src/tests/d.d.ts +0 -6
  184. package/esm/core/src/tests/d.js +0 -11
  185. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  186. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  187. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  188. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  189. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  190. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  191. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  192. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  193. package/esm/core/src/tests/h.d.ts +0 -6
  194. package/esm/core/src/tests/h.js +0 -24
  195. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  196. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  197. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  198. package/esm/core/src/tests/remult-3-entities.js +0 -39
  199. package/esm/core/src/tests/tasks.d.ts +0 -6
  200. package/esm/core/src/tests/tasks.js +0 -10
  201. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  202. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  203. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  204. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  205. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  206. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  207. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  208. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  209. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  210. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  211. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  212. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  213. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  214. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  215. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  216. package/esm/core/src/tests/test-json.spec.js +0 -115
  217. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  218. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  219. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  220. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  221. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  222. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  223. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  224. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  225. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  226. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  227. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  228. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  229. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  230. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  231. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  232. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  233. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  234. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  235. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  236. package/esm/core/src/tests/test-sql.spec.js +0 -170
  237. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  238. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  239. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  240. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  241. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  242. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  243. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  244. package/esm/core/src/tests/testHelper.spec.js +0 -226
  245. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  246. package/esm/core/src/tests/testModel/models.js +0 -25
  247. package/esm/core/src/validators.d.ts +0 -14
  248. package/esm/core/src/validators.js +0 -33
  249. package/esm/core/src/valueConverters.js +0 -197
  250. package/esm/core/urlBuilder.d.ts +0 -6
  251. package/esm/core/urlBuilder.js +0 -20
  252. package/esm/test-servers/shared/Task.d.ts +0 -9
  253. package/esm/test-servers/shared/Task.js +0 -32
  254. package/esm/test.d.ts +0 -5
  255. package/esm/test.js +0 -6
package/esm/graphql.js CHANGED
@@ -208,16 +208,16 @@ export function remultGraphql(options) {
208
208
  {
209
209
  key: 'limit',
210
210
  value: 'Int',
211
- comment: `
212
- For **page by page** pagination.
213
- Limit the number of result.
211
+ comment: `
212
+ For **page by page** pagination.
213
+ Limit the number of result.
214
214
  _Side note: \`Math.ceil(totalCount / limit)\` to determine how many pages there are._`,
215
215
  },
216
216
  {
217
217
  key: 'page',
218
218
  value: 'Int',
219
- comment: `
220
- For **page by page** pagination.
219
+ comment: `
220
+ For **page by page** pagination.
221
221
  Select a dedicated page.`,
222
222
  },
223
223
  {
@@ -235,26 +235,26 @@ Select a dedicated page.`,
235
235
  queryArgsConnection.push({
236
236
  key: 'first',
237
237
  value: 'Int',
238
- comment: `
239
- For **forward cursor** pagination
238
+ comment: `
239
+ For **forward cursor** pagination
240
240
  Takes the \`first\`: \`n\` elements from the list.`,
241
241
  }, {
242
242
  key: 'after',
243
243
  value: 'String',
244
- comment: `
245
- For **forward cursor** pagination
244
+ comment: `
245
+ For **forward cursor** pagination
246
246
  \`after\` this \`cursor\`.`,
247
247
  }, {
248
248
  key: 'last',
249
249
  value: 'Int',
250
- comment: `
251
- For **backward cursor** pagination
250
+ comment: `
251
+ For **backward cursor** pagination
252
252
  Takes the \`last\`: \`n\` elements from the list.`,
253
253
  }, {
254
254
  key: 'before',
255
255
  value: 'String',
256
- comment: `
257
- For **backward cursor** pagination
256
+ comment: `
257
+ For **backward cursor** pagination
258
258
  \`before\` this \`cursor\`.`,
259
259
  });
260
260
  }
@@ -668,7 +668,7 @@ Select a dedicated page.`,
668
668
  : ``;
669
669
  return `${type}${orderByStr}${whereTypeStr}${whereTypeSubFieldsStr}`;
670
670
  })
671
- .join(`\n\n`)}
671
+ .join(`\n\n`)}
672
672
  `,
673
673
  };
674
674
  }
@@ -690,12 +690,12 @@ function blockFormat(obj) {
690
690
  if (obj.data.length === 0) {
691
691
  return ``;
692
692
  }
693
- const str = `${obj.prefix} {
694
- ${obj.data.join('\n ')}
693
+ const str = `${obj.prefix} {
694
+ ${obj.data.join('\n ')}
695
695
  }`;
696
- let commentsStr = `"""
697
- ${obj.comment}
698
- """
696
+ let commentsStr = `"""
697
+ ${obj.comment}
698
+ """
699
699
  `;
700
700
  if (_removeComments) {
701
701
  commentsStr = ``;
@@ -706,16 +706,16 @@ function argsFormat(args) {
706
706
  if (args) {
707
707
  return `(${args
708
708
  .map((arg) => {
709
- let strComment = `
710
- """
711
- ${arg.comment}
712
- """
709
+ let strComment = `
710
+ """
711
+ ${arg.comment}
712
+ """
713
713
  `;
714
714
  if (_removeComments || !arg.comment) {
715
715
  strComment = ``;
716
716
  }
717
717
  if (strComment) {
718
- return `${strComment} ${arg.key}: ${arg.value}
718
+ return `${strComment} ${arg.key}: ${arg.value}
719
719
  `;
720
720
  }
721
721
  return `${arg.key}: ${arg.value}`;
@@ -726,9 +726,9 @@ function argsFormat(args) {
726
726
  }
727
727
  function fieldFormat(field) {
728
728
  // First, the comment
729
- let strComment = `"""
730
- ${field.comment}
731
- """
729
+ let strComment = `"""
730
+ ${field.comment}
731
+ """
732
732
  `;
733
733
  if (_removeComments || !field.comment) {
734
734
  strComment = ``;
@@ -116,8 +116,8 @@ export class PostgresSchemaBuilder {
116
116
  try {
117
117
  let cmd = this.pool.createCommand();
118
118
  const colName = e.$dbNameOf(c(entity));
119
- if ((await cmd.execute(`select 1
120
- FROM information_schema.columns
119
+ if ((await cmd.execute(`select 1
120
+ FROM information_schema.columns
121
121
  WHERE table_name=${cmd.addParameterAndReturnSqlToken(e.$entityName.toLocaleLowerCase())} and column_name=${cmd.addParameterAndReturnSqlToken(colName.toLocaleLowerCase())}` + this.additionalWhere)).rows.length == 0) {
122
122
  let sql = `alter table ${e.$entityName} add column ${postgresColumnSyntax(c(entity), colName)}`;
123
123
  if (PostgresSchemaBuilder.logToConsole)
@@ -133,8 +133,8 @@ export class PostgresSchemaBuilder {
133
133
  try {
134
134
  let cmd = this.pool.createCommand();
135
135
  let e = await dbNamesOf(entity);
136
- let cols = (await cmd.execute(`select column_name
137
- FROM information_schema.columns
136
+ let cols = (await cmd.execute(`select column_name
137
+ FROM information_schema.columns
138
138
  WHERE table_name=${cmd.addParameterAndReturnSqlToken(e.$entityName.toLocaleLowerCase())} ` + this.additionalWhere)).rows.map((x) => x.column_name.toLocaleLowerCase());
139
139
  for (const col of entity.fields) {
140
140
  if (!isDbReadonly(col, e)) {
@@ -192,7 +192,7 @@ class KnexEntityDataProvider {
192
192
  let insert = this.knex(e.$entityName).insert(insertObject);
193
193
  if (isAutoIncrement(this.entity.idMetadata.field)) {
194
194
  let newId;
195
- if (this.knex.client.config.client === 'mysql2') {
195
+ if (this.knex.client.config.client === 'mysql2' || this.knex.client.config.client === 'mysql') {
196
196
  let result = await insert;
197
197
  newId = result[0];
198
198
  }
@@ -380,7 +380,7 @@ export class KnexSchemaBuilder {
380
380
  KnexSchemaBuilder.logToConsole = true;
381
381
  function supportsJson(knex) {
382
382
  const client = knex.client.config.client;
383
- if (client?.includes('sqlite3') || client?.includes('mssql'))
383
+ if (client?.includes('sqlite3') || client?.includes('mssql') || client?.includes('mysql'))
384
384
  return false;
385
385
  return true;
386
386
  }
@@ -64,6 +64,16 @@ export const mySqlTest = addDatabaseToTest(testKnexSqlImpl(Knex.default({
64
64
  database: 'test',
65
65
  },
66
66
  }), 'mysql2'));
67
+ addDatabaseToTest(testKnexSqlImpl(Knex.default({
68
+ client: 'mysql',
69
+ connection: {
70
+ user: 'root',
71
+ password: 'MASTERKEY',
72
+ host: '127.0.0.1',
73
+ database: 'test',
74
+ port: 3307
75
+ },
76
+ }), 'mysql'));
67
77
  let pg = createPostgresConnection();
68
78
  export function testPostgresImplementation(key, what, focus = false) {
69
79
  itWithFocus(key + ' - postgres', async () => {
@@ -0,0 +1,4 @@
1
+ import { EntityBase } from './remult3';
2
+ export declare class IdEntity extends EntityBase {
3
+ id: string;
4
+ }
@@ -0,0 +1,8 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { EntityBase, Fields } from './remult3';
3
+ export class IdEntity extends EntityBase {
4
+ }
5
+ __decorate([
6
+ Fields.uuid(),
7
+ __metadata("design:type", String)
8
+ ], IdEntity.prototype, "id", void 0);
@@ -1834,11 +1834,13 @@ export function decorateColumnSettings(settings, remult) {
1834
1834
  isIdNumeric =
1835
1835
  remult.repo(settings.valueType).metadata.idMetadata.field
1836
1836
  .valueType === Number;
1837
- for (const key of [
1838
- 'fieldTypeInDb',
1839
- ]) {
1840
- //@ts-ignore
1841
- target[key] = ValueConverters.Integer[key];
1837
+ if (isIdNumeric) {
1838
+ for (const key of [
1839
+ 'fieldTypeInDb',
1840
+ ]) {
1841
+ //@ts-ignore
1842
+ target[key] = ValueConverters.Integer[key];
1843
+ }
1842
1844
  }
1843
1845
  }
1844
1846
  }
@@ -1082,3 +1082,38 @@ testAll('test relation to number id', async ({ createEntity }) => {
1082
1082
  expect(await taskRepo.count({ category: cat[1] })).toBe(1);
1083
1083
  expect(await taskRepo.count({ category: { $id: cat[0].id } })).toBe(2);
1084
1084
  }, false, { exclude: [TestDbs.mongo, TestDbs.mongoNoTrans] });
1085
+ testAll('test relation to string id', async ({ createEntity }) => {
1086
+ const category = class {
1087
+ constructor() {
1088
+ this.id = '';
1089
+ this.name = '';
1090
+ }
1091
+ };
1092
+ describeClass(category, Entity('rel_ID_string_categories', { allowApiCrud: true }), {
1093
+ id: Fields.cuid(),
1094
+ name: Fields.string(),
1095
+ });
1096
+ const task = class {
1097
+ constructor() {
1098
+ this.id = 0;
1099
+ this.title = '';
1100
+ }
1101
+ };
1102
+ describeClass(task, Entity('rel_ID_string_task', { allowApiCrud: true }), {
1103
+ id: Fields.autoIncrement(),
1104
+ title: Fields.string(),
1105
+ category: Field(() => category),
1106
+ });
1107
+ const catRepo = await createEntity(category);
1108
+ const taskRepo = await createEntity(task);
1109
+ const cat = await catRepo.insert([{ name: 'cat0' }, { name: 'cat1' }]);
1110
+ await taskRepo.insert([
1111
+ { title: 't1', category: cat[0] },
1112
+ { title: 't2', category: cat[0] },
1113
+ { title: 't3', category: cat[1] },
1114
+ ]);
1115
+ expect(taskRepo.fields.category.valueConverter.fieldTypeInDb).toBeUndefined();
1116
+ expect(await taskRepo.count({ category: cat[0] })).toBe(2);
1117
+ expect(await taskRepo.count({ category: cat[1] })).toBe(1);
1118
+ expect(await taskRepo.count({ category: { $id: cat[0].id } })).toBe(2);
1119
+ }, false, { exclude: [TestDbs.mongo, TestDbs.mongoNoTrans] });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.22.2",
3
+ "version": "0.22.3",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "types": "index.d.ts",
6
6
  "module": "esm/index.js",
@@ -0,0 +1,2 @@
1
+ import { FieldMetadata } from '../src/column-interfaces';
2
+ export declare function postgresColumnSyntax(x: FieldMetadata, dbName: string): string;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postgresColumnSyntax = void 0;
4
+ var valueConverters_1 = require("../valueConverters");
5
+ function postgresColumnSyntax(x, dbName) {
6
+ var result = dbName;
7
+ if (x.valueType == Number) {
8
+ if (!x.valueConverter.fieldTypeInDb)
9
+ result += " numeric" + (x.allowNull ? "" : " default 0 not null");
10
+ else
11
+ result += " " + x.valueConverter.fieldTypeInDb + (x.allowNull ? "" : " default 0 not null");
12
+ }
13
+ else if (x.valueType == Date) {
14
+ if (!x.valueConverter.fieldTypeInDb)
15
+ if (x.valueConverter == valueConverters_1.ValueConverters.DateOnly)
16
+ result += " date";
17
+ else
18
+ result += " timestamp";
19
+ else
20
+ result += " " + x.valueConverter.fieldTypeInDb;
21
+ }
22
+ else if (x.valueType == Boolean)
23
+ result += " boolean" + (x.allowNull ? "" : " default false not null");
24
+ else if (x.valueConverter.fieldTypeInDb) {
25
+ result += " " + x.valueConverter.fieldTypeInDb;
26
+ if (!x.allowNull && x.valueConverter.fieldTypeInDb == 'integer') {
27
+ result += " default 0 not null";
28
+ }
29
+ }
30
+ else
31
+ result += " varchar" + (x.allowNull ? "" : " default '' not null");
32
+ return result;
33
+ }
34
+ exports.postgresColumnSyntax = postgresColumnSyntax;
@@ -375,7 +375,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
375
375
  case 10:
376
376
  insert = this.knex(e.$entityName).insert(insertObject);
377
377
  if (!remult3_1.isAutoIncrement(this.entity.idMetadata.field)) return [3 /*break*/, 15];
378
- if (!(this.knex.client.config.client === 'mysql2')) return [3 /*break*/, 12];
378
+ if (!(this.knex.client.config.client === 'mysql2' || this.knex.client.config.client === 'mysql')) return [3 /*break*/, 12];
379
379
  return [4 /*yield*/, insert];
380
380
  case 11:
381
381
  result = _d.sent();
@@ -825,7 +825,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
825
825
  exports.KnexSchemaBuilder = KnexSchemaBuilder;
826
826
  function supportsJson(knex) {
827
827
  var client = knex.client.config.client;
828
- if ((client === null || client === void 0 ? void 0 : client.includes('sqlite3')) || (client === null || client === void 0 ? void 0 : client.includes('mssql')))
828
+ if ((client === null || client === void 0 ? void 0 : client.includes('sqlite3')) || (client === null || client === void 0 ? void 0 : client.includes('mssql')) || (client === null || client === void 0 ? void 0 : client.includes('mysql')))
829
829
  return false;
830
830
  return true;
831
831
  }
@@ -0,0 +1,2 @@
1
+ import { RemultMiddlewareOptions } from './server/expressBridge';
2
+ export declare function remultMiddleware(options?: RemultMiddlewareOptions): import("./server/expressBridge").RemultExpressBridge;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remultMiddleware = void 0;
4
+ var expressBridge_1 = require("./server/expressBridge");
5
+ function remultMiddleware(options) {
6
+ var m = new middleware();
7
+ var app = Object.assign(function (req, res, next) { return m.handleRequest(req, res, next); }, {
8
+ route: function (path) { return m.route(path); }
9
+ });
10
+ return expressBridge_1.remultMiddlewareBase(app, options);
11
+ }
12
+ exports.remultMiddleware = remultMiddleware;
13
+ var middleware = /** @class */ (function () {
14
+ function middleware() {
15
+ this.map = new Map();
16
+ }
17
+ middleware.prototype.route = function (path) {
18
+ //consider using:
19
+ //* https://raw.githubusercontent.com/cmorten/opine/main/src/utils/pathToRegex.ts
20
+ //* https://github.com/pillarjs/path-to-regexp
21
+ var r = path.toLowerCase();
22
+ var m = new Map();
23
+ this.map.set(r, m);
24
+ var route = {
25
+ get: function (h) {
26
+ m.set("get", h);
27
+ return route;
28
+ },
29
+ put: function (h) {
30
+ m.set("put", h);
31
+ return route;
32
+ },
33
+ post: function (h) {
34
+ m.set("post", h);
35
+ return route;
36
+ },
37
+ delete: function (h) {
38
+ m.set("delete", h);
39
+ return route;
40
+ }
41
+ };
42
+ return route;
43
+ };
44
+ middleware.prototype.handleRequest = function (req, res, next) {
45
+ var lowerPath = req.path.toLowerCase();
46
+ var m = this.map.get(lowerPath);
47
+ if (m) {
48
+ var h = m.get(req.method.toLowerCase());
49
+ if (h) {
50
+ h(req, res, next);
51
+ return;
52
+ }
53
+ }
54
+ var idPosition = req.path.lastIndexOf('/');
55
+ if (idPosition >= 0) {
56
+ lowerPath = req.path.substring(0, idPosition) + '/:id';
57
+ m = this.map.get(lowerPath);
58
+ if (m) {
59
+ var h = m.get(req.method.toLowerCase());
60
+ if (h) {
61
+ req.params.id = req.path.substring(idPosition + 1);
62
+ h(req, res, next);
63
+ return;
64
+ }
65
+ }
66
+ }
67
+ next();
68
+ };
69
+ return middleware;
70
+ }());
@@ -0,0 +1,3 @@
1
+ import { SiteArea } from "./expressBridge";
2
+ import { ClassType } from "../classType";
3
+ export declare function registerActionsOnServer(area: SiteArea, controllers?: ClassType<any>[]): void;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerActionsOnServer = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var server_action_1 = require("../src/server-action");
6
+ function registerActionsOnServer(area, controllers) {
7
+ var e_1, _a, e_2, _b;
8
+ var addAction = function (a) {
9
+ var x = a[server_action_1.serverActionField];
10
+ if (!x) {
11
+ throw 'failed to set server action, did you forget the BackendMethod Decorator?';
12
+ }
13
+ area.addAction(x);
14
+ };
15
+ server_action_1.actionInfo.runningOnServer = true;
16
+ if (controllers && controllers.length > 0) {
17
+ try {
18
+ for (var controllers_1 = tslib_1.__values(controllers), controllers_1_1 = controllers_1.next(); !controllers_1_1.done; controllers_1_1 = controllers_1.next()) {
19
+ var c = controllers_1_1.value;
20
+ var z = c[server_action_1.classBackendMethodsArray];
21
+ if (z)
22
+ try {
23
+ for (var z_1 = (e_2 = void 0, tslib_1.__values(z)), z_1_1 = z_1.next(); !z_1_1.done; z_1_1 = z_1.next()) {
24
+ var a = z_1_1.value;
25
+ addAction(a);
26
+ }
27
+ }
28
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
29
+ finally {
30
+ try {
31
+ if (z_1_1 && !z_1_1.done && (_b = z_1.return)) _b.call(z_1);
32
+ }
33
+ finally { if (e_2) throw e_2.error; }
34
+ }
35
+ }
36
+ }
37
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
38
+ finally {
39
+ try {
40
+ if (controllers_1_1 && !controllers_1_1.done && (_a = controllers_1.return)) _a.call(controllers_1);
41
+ }
42
+ finally { if (e_1) throw e_1.error; }
43
+ }
44
+ }
45
+ else
46
+ server_action_1.actionInfo.allActions.forEach(function (a) {
47
+ addAction(a);
48
+ });
49
+ }
50
+ exports.registerActionsOnServer = registerActionsOnServer;
@@ -0,0 +1,3 @@
1
+ import { SiteArea } from "./expressBridge";
2
+ import { ClassType } from "../classType";
3
+ export declare function registerEntitiesOnServer(area: SiteArea, entities?: ClassType<any>[]): void;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerEntitiesOnServer = void 0;
4
+ var remult3_1 = require("../src/remult3");
5
+ var context_1 = require("../src/context");
6
+ var data_api_1 = require("../src/data-api");
7
+ function registerEntitiesOnServer(area, entities) {
8
+ if (!entities)
9
+ entities = context_1.allEntities;
10
+ //add Api Entries
11
+ entities.forEach(function (e) {
12
+ var key = remult3_1.getEntityKey(e);
13
+ if (key != undefined)
14
+ area.add(key, function (c) {
15
+ return new data_api_1.DataApi(c.repo(e), c);
16
+ });
17
+ });
18
+ }
19
+ exports.registerEntitiesOnServer = registerEntitiesOnServer;
@@ -92,6 +92,16 @@ exports.mySqlTest = db_tests_setup_1.addDatabaseToTest(testKnexSqlImpl(Knex.defa
92
92
  database: 'test',
93
93
  },
94
94
  }), 'mysql2'));
95
+ db_tests_setup_1.addDatabaseToTest(testKnexSqlImpl(Knex.default({
96
+ client: 'mysql',
97
+ connection: {
98
+ user: 'root',
99
+ password: 'MASTERKEY',
100
+ host: '127.0.0.1',
101
+ database: 'test',
102
+ port: 3307
103
+ },
104
+ }), 'mysql'));
95
105
  var pg = postgres_1.createPostgresConnection();
96
106
  function testPostgresImplementation(key, what, focus) {
97
107
  var _this = this;
@@ -1 +1 @@
1
- export {};
1
+ export {};