@saltcorn/server 1.1.4-alpha.0 → 1.1.4-alpha.2

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 (402) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/auth/resetpw.js +8 -5
  3. package/docs/assets/search.js +1 -1
  4. package/docs/classes/_saltcorn_common_code.Relation.html +8 -8
  5. package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
  6. package/docs/classes/_saltcorn_data.models.Crash-1.html +18 -18
  7. package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
  8. package/docs/classes/_saltcorn_data.models.Field.html +71 -71
  9. package/docs/classes/_saltcorn_data.models.FieldRepeat-1.html +17 -17
  10. package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
  11. package/docs/classes/_saltcorn_data.models.Form-1.html +38 -38
  12. package/docs/classes/_saltcorn_data.models.Library.html +13 -13
  13. package/docs/classes/_saltcorn_data.models.Page.html +33 -23
  14. package/docs/classes/_saltcorn_data.models.PageGroup-1.html +28 -33
  15. package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
  16. package/docs/classes/_saltcorn_data.models.Role.html +9 -9
  17. package/docs/classes/_saltcorn_data.models.Table-1.html +101 -91
  18. package/docs/classes/_saltcorn_data.models.TableConstraint-1.html +14 -14
  19. package/docs/classes/_saltcorn_data.models.Trigger.html +45 -35
  20. package/docs/classes/_saltcorn_data.models.User-1.html +48 -48
  21. package/docs/classes/_saltcorn_data.models.View-1.html +61 -51
  22. package/docs/classes/_saltcorn_data.models.Workflow-1.html +17 -17
  23. package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
  24. package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
  25. package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
  26. package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +36 -36
  27. package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
  28. package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
  29. package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
  30. package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
  31. package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
  32. package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
  33. package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
  34. package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
  35. package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
  36. package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
  37. package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
  38. package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
  39. package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
  40. package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
  41. package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
  42. package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
  43. package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
  44. package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
  45. package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
  46. package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
  47. package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
  48. package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
  49. package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
  50. package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
  51. package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
  52. package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
  53. package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
  54. package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
  55. package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
  56. package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
  57. package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
  58. package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
  59. package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
  60. package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
  61. package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
  62. package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
  63. package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
  64. package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
  65. package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
  66. package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
  67. package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
  68. package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
  69. package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +1 -1
  70. package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +1 -1
  71. package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
  72. package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
  73. package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
  74. package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
  75. package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
  76. package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
  77. package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
  78. package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
  79. package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
  80. package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
  81. package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
  82. package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
  83. package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
  84. package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
  85. package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
  86. package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
  87. package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
  88. package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
  89. package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
  90. package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
  91. package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
  92. package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
  93. package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
  94. package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
  95. package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
  96. package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +2 -2
  97. package/docs/functions/_saltcorn_db_common.buildInsertSql.html +2 -2
  98. package/docs/functions/_saltcorn_db_common.doCount.html +2 -2
  99. package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +2 -2
  100. package/docs/functions/_saltcorn_db_common.doListScTables.html +2 -2
  101. package/docs/functions/_saltcorn_db_common.doListTables.html +2 -2
  102. package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +2 -2
  103. package/docs/functions/_saltcorn_db_common.do_add_index.html +2 -2
  104. package/docs/functions/_saltcorn_db_common.do_drop_index.html +2 -2
  105. package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +2 -2
  106. package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +2 -2
  107. package/docs/functions/_saltcorn_db_common.mkVal.html +2 -2
  108. package/docs/functions/_saltcorn_db_common.mkWhere.html +2 -2
  109. package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +3 -2
  110. package/docs/functions/{_saltcorn_db_common.single_tenant.enable_multi_tenant.html → _saltcorn_db_common.multi_tenant.getRequestContext.html} +16 -15
  111. package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +3 -2
  112. package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +3 -2
  113. package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +3 -2
  114. package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +5 -5
  115. package/docs/functions/_saltcorn_db_common.orderByIsObject.html +2 -2
  116. package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +2 -2
  117. package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +2 -2
  118. package/docs/functions/_saltcorn_db_common.reprAsJson.html +2 -2
  119. package/docs/functions/_saltcorn_db_common.sqlBinOp.html +2 -2
  120. package/docs/functions/_saltcorn_db_common.sqlFun.html +2 -2
  121. package/docs/functions/_saltcorn_db_common.sqlsanitize.html +2 -2
  122. package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +2 -2
  123. package/docs/functions/_saltcorn_db_common.subSelectWhere.html +2 -2
  124. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +1 -1
  125. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +1 -1
  126. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +1 -1
  127. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +1 -1
  128. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +1 -1
  129. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +1 -1
  130. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +1 -1
  131. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +1 -1
  132. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +1 -1
  133. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +1 -1
  134. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +1 -1
  135. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +1 -1
  136. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +1 -1
  137. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +1 -1
  138. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +1 -1
  139. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +1 -1
  140. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +1 -1
  141. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +1 -1
  142. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +1 -1
  143. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +1 -1
  144. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +1 -1
  145. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +1 -1
  146. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +1 -1
  147. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +1 -1
  148. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +1 -1
  149. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +1 -1
  150. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +1 -1
  151. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +1 -1
  152. package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +1 -1
  153. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +1 -1
  154. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +1 -1
  155. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +1 -1
  156. package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +1 -1
  157. package/docs/functions/_saltcorn_sqlite.add_index.html +3 -2
  158. package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +3 -2
  159. package/docs/functions/_saltcorn_sqlite.begin.html +3 -2
  160. package/docs/functions/_saltcorn_sqlite.changeConnection.html +3 -2
  161. package/docs/functions/_saltcorn_sqlite.close.html +3 -2
  162. package/docs/functions/_saltcorn_sqlite.commit.html +3 -2
  163. package/docs/functions/_saltcorn_sqlite.count.html +3 -2
  164. package/docs/functions/_saltcorn_sqlite.deleteWhere.html +3 -2
  165. package/docs/functions/_saltcorn_sqlite.dropTable.html +3 -2
  166. package/docs/functions/_saltcorn_sqlite.dropTables.html +3 -2
  167. package/docs/functions/_saltcorn_sqlite.drop_index.html +3 -2
  168. package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +3 -2
  169. package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +3 -2
  170. package/docs/functions/_saltcorn_sqlite.getVersion.html +3 -2
  171. package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +3 -2
  172. package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +3 -2
  173. package/docs/functions/_saltcorn_sqlite.init.html +3 -2
  174. package/docs/functions/_saltcorn_sqlite.insert.html +3 -2
  175. package/docs/functions/_saltcorn_sqlite.listScTables.html +3 -2
  176. package/docs/functions/_saltcorn_sqlite.listTables.html +3 -2
  177. package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +3 -2
  178. package/docs/functions/_saltcorn_sqlite.query.html +3 -2
  179. package/docs/functions/_saltcorn_sqlite.rollback.html +3 -2
  180. package/docs/functions/_saltcorn_sqlite.select.html +3 -2
  181. package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +3 -2
  182. package/docs/functions/_saltcorn_sqlite.selectOne.html +3 -2
  183. package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +3 -2
  184. package/docs/functions/_saltcorn_sqlite.slugify.html +3 -2
  185. package/docs/functions/_saltcorn_sqlite.sql_log.html +3 -2
  186. package/docs/functions/_saltcorn_sqlite.update.html +3 -2
  187. package/docs/functions/_saltcorn_sqlite.updateWhere.html +3 -2
  188. package/docs/functions/_saltcorn_sqlite.withTransaction.html +96 -0
  189. package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
  190. package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
  191. package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
  192. package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
  193. package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
  194. package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
  195. package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
  196. package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
  197. package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
  198. package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
  199. package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
  200. package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
  201. package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
  202. package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
  203. package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
  204. package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
  205. package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
  206. package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
  207. package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
  208. package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
  209. package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
  210. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
  211. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
  212. package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
  213. package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +1 -1
  214. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
  215. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
  216. package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
  217. package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
  218. package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
  219. package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
  220. package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
  221. package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +10 -10
  222. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +14 -14
  223. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
  224. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +26 -26
  225. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
  226. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
  227. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +7 -7
  228. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +16 -16
  229. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
  230. package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
  231. package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
  232. package/docs/modules/_saltcorn_admin_models.html +1 -1
  233. package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
  234. package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
  235. package/docs/modules/_saltcorn_common_code.html +1 -1
  236. package/docs/modules/_saltcorn_data.html +3 -3
  237. package/docs/modules/_saltcorn_data.models.Crash.html +2 -2
  238. package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
  239. package/docs/modules/_saltcorn_data.models.FieldRepeat.html +2 -2
  240. package/docs/modules/_saltcorn_data.models.File.html +2 -2
  241. package/docs/modules/_saltcorn_data.models.Form.html +2 -2
  242. package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
  243. package/docs/modules/_saltcorn_data.models.Table.html +2 -2
  244. package/docs/modules/_saltcorn_data.models.TableConstraint.html +2 -2
  245. package/docs/modules/_saltcorn_data.models.User.html +2 -2
  246. package/docs/modules/_saltcorn_data.models.View.html +2 -2
  247. package/docs/modules/_saltcorn_data.models.Workflow.html +2 -2
  248. package/docs/modules/_saltcorn_data.models.config.html +1 -1
  249. package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
  250. package/docs/modules/_saltcorn_data.models.email.html +1 -1
  251. package/docs/modules/_saltcorn_data.models.expression.html +1 -1
  252. package/docs/modules/_saltcorn_data.models.html +1 -1
  253. package/docs/modules/_saltcorn_data.models.layout.html +1 -1
  254. package/docs/modules/_saltcorn_data.models.random.html +1 -1
  255. package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
  256. package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
  257. package/docs/modules/_saltcorn_data.utils.html +1 -1
  258. package/docs/modules/_saltcorn_db_common.html +7 -7
  259. package/docs/modules/_saltcorn_db_common.multi_tenant.html +4 -2
  260. package/docs/modules/_saltcorn_markup.html +2 -2
  261. package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +1 -1
  262. package/docs/modules/_saltcorn_mobile_builder.html +1 -1
  263. package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +1 -1
  264. package/docs/modules/_saltcorn_sqlite.html +4 -2
  265. package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
  266. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
  267. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
  268. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
  269. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
  270. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
  271. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
  272. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
  273. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
  274. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
  275. package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
  276. package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
  277. package/docs/modules/_saltcorn_types.Types.base_types.html +1 -1
  278. package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
  279. package/docs/modules/_saltcorn_types.Types.html +1 -1
  280. package/docs/modules/_saltcorn_types.generators.html +1 -1
  281. package/docs/modules/_saltcorn_types.html +1 -1
  282. package/docs/types/_saltcorn_data.models.Crash.CrashCfg.html +1 -1
  283. package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
  284. package/docs/types/_saltcorn_data.models.FieldRepeat.FieldRepeatCfg.html +1 -1
  285. package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
  286. package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
  287. package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
  288. package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
  289. package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
  290. package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
  291. package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
  292. package/docs/types/_saltcorn_data.models.TableConstraint.TableConstraintCfg.html +1 -1
  293. package/docs/types/_saltcorn_data.models.User.UserCfg.html +1 -1
  294. package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
  295. package/docs/types/_saltcorn_data.models.Workflow.WorkflowCfg.html +1 -1
  296. package/docs/types/_saltcorn_db_common.AggregationOptions.html +2 -2
  297. package/docs/types/_saltcorn_db_common.CoordOpts.html +2 -2
  298. package/docs/types/_saltcorn_db_common.DatabaseClient.html +111 -0
  299. package/docs/types/_saltcorn_db_common.JoinField.html +2 -2
  300. package/docs/types/_saltcorn_db_common.JoinFields.html +2 -2
  301. package/docs/types/_saltcorn_db_common.JoinOptions.html +2 -2
  302. package/docs/types/_saltcorn_db_common.JsonPath.html +2 -2
  303. package/docs/types/_saltcorn_db_common.JsonPathElem.html +2 -2
  304. package/docs/types/_saltcorn_db_common.Operator.html +2 -2
  305. package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +2 -2
  306. package/docs/types/_saltcorn_db_common.Row.html +2 -2
  307. package/docs/types/_saltcorn_db_common.SelectOptions.html +5 -3
  308. package/docs/types/_saltcorn_db_common.SqlAndValues.html +2 -2
  309. package/docs/types/_saltcorn_db_common.SubselectOptions.html +2 -2
  310. package/docs/types/_saltcorn_db_common.Value.html +2 -2
  311. package/docs/types/_saltcorn_db_common.Where.html +2 -2
  312. package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
  313. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
  314. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
  315. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
  316. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
  317. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
  318. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
  319. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
  320. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
  321. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
  322. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
  323. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
  324. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +3 -3
  325. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
  326. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
  327. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
  328. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
  329. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
  330. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
  331. package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
  332. package/docs/types/_saltcorn_types.Types.base_types.Action.html +1 -1
  333. package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +1 -1
  334. package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +1 -1
  335. package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +1 -1
  336. package/docs/types/_saltcorn_types.Types.base_types.Column.html +1 -1
  337. package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +1 -1
  338. package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +1 -1
  339. package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +1 -1
  340. package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +1 -1
  341. package/docs/types/_saltcorn_types.Types.base_types.Header.html +1 -1
  342. package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +1 -1
  343. package/docs/types/_saltcorn_types.Types.base_types.Layout.html +1 -1
  344. package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +1 -1
  345. package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +1 -1
  346. package/docs/types/_saltcorn_types.Types.base_types.Pack.html +1 -1
  347. package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +1 -1
  348. package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +1 -1
  349. package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +1 -1
  350. package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +1 -1
  351. package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +1 -1
  352. package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +1 -1
  353. package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +1 -1
  354. package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +1 -1
  355. package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +1 -1
  356. package/docs/types/_saltcorn_types.Types.base_types.Req.html +1 -1
  357. package/docs/types/_saltcorn_types.Types.base_types.Res.html +1 -1
  358. package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +1 -1
  359. package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +1 -1
  360. package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +1 -1
  361. package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +1 -1
  362. package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +1 -1
  363. package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +1 -1
  364. package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
  365. package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
  366. package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
  367. package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
  368. package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
  369. package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
  370. package/docs/variables/_saltcorn_data.db.html +1 -1
  371. package/docs/variables/_saltcorn_data.migrations.html +1 -1
  372. package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
  373. package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
  374. package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
  375. package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
  376. package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
  377. package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
  378. package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +4 -3
  379. package/locales/en.json +2 -0
  380. package/package.json +9 -9
  381. package/routes/actions.js +11 -2
  382. package/routes/admin.js +18 -7
  383. package/routes/api.js +49 -40
  384. package/routes/fields.js +54 -53
  385. package/routes/list.js +3 -1
  386. package/routes/menu.js +10 -8
  387. package/routes/models.js +4 -2
  388. package/routes/packs.js +19 -8
  389. package/routes/page.js +17 -13
  390. package/routes/page_groupedit.js +8 -0
  391. package/routes/pageedit.js +10 -1
  392. package/routes/registry.js +3 -1
  393. package/routes/sync.js +60 -72
  394. package/routes/tables.js +129 -90
  395. package/routes/utils.js +27 -17
  396. package/routes/viewedit.js +18 -2
  397. package/tests/auth.test.js +1 -1
  398. package/docs/functions/_saltcorn_db_common.single_tenant.getTenantSchema.html +0 -109
  399. package/docs/functions/_saltcorn_db_common.single_tenant.init.html +0 -115
  400. package/docs/functions/_saltcorn_db_common.single_tenant.is_it_multi_tenant.html +0 -109
  401. package/docs/functions/_saltcorn_db_common.single_tenant.runWithTenant.html +0 -129
  402. package/docs/modules/_saltcorn_db_common.single_tenant.html +0 -115
package/routes/api.js CHANGED
@@ -15,7 +15,7 @@
15
15
  */
16
16
  /** @type {module:express-promise-router} */
17
17
  const Router = require("express-promise-router");
18
- //const db = require("@saltcorn/data/db");
18
+ const db = require("@saltcorn/data/db");
19
19
  const { error_catcher } = require("./utils.js");
20
20
  //const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
21
21
  const { getState } = require("@saltcorn/data/db/state");
@@ -574,6 +574,7 @@ router.post(
574
574
  const { _versions, ...row } = req.body || {};
575
575
  const fields = table.getFields();
576
576
  readState(row, fields, req);
577
+
577
578
  const errors = await prepare_insert_row(row, fields);
578
579
  if (errors.length > 0) {
579
580
  getState().log(
@@ -583,11 +584,13 @@ router.post(
583
584
  res.status(400).json({ error: errors.join(", ") });
584
585
  return;
585
586
  }
586
- const ins_res = await table.tryInsertRow(
587
- row,
588
- req.user || user || { role_id: 100 }
589
- );
590
- if (ins_res.error) {
587
+ let ins_res = await db.withTransaction(async () => {
588
+ return await table.tryInsertRow(
589
+ row,
590
+ req.user || user || { role_id: 100 }
591
+ );
592
+ });
593
+ if (ins_res?.error) {
591
594
  getState().log(2, `API POST ${table.name} error: ${ins_res.error}`);
592
595
  res.status(400).json(ins_res);
593
596
  } else res.json(ins_res);
@@ -623,20 +626,22 @@ router.post(
623
626
  async function (err, user, info) {
624
627
  if (accessAllowedWrite(req, user, table)) {
625
628
  try {
626
- if (id === "undefined") {
627
- const pk_name = table.pk_name;
628
- //const fields = table.getFields();
629
- const row = req.body || {};
630
- //readState(row, fields);
631
- await table.deleteRows(
632
- { [pk_name]: row[pk_name] },
633
- user || req.user || { role_id: 100 }
634
- );
635
- } else
636
- await table.deleteRows(
637
- { id },
638
- user || req.user || { role_id: 100 }
639
- );
629
+ await db.withTransaction(async () => {
630
+ if (id === "undefined") {
631
+ const pk_name = table.pk_name;
632
+ //const fields = table.getFields();
633
+ const row = req.body || {};
634
+ //readState(row, fields);
635
+ await table.deleteRows(
636
+ { [pk_name]: row[pk_name] },
637
+ user || req.user || { role_id: 100 }
638
+ );
639
+ } else
640
+ await table.deleteRows(
641
+ { id },
642
+ user || req.user || { role_id: 100 }
643
+ );
644
+ });
640
645
  res.json({ success: true });
641
646
  } catch (e) {
642
647
  getState().log(2, `API DELETE ${table.name} error: ${e.message}`);
@@ -685,13 +690,15 @@ router.post(
685
690
  res.status(400).json({ error: errors.join(", ") });
686
691
  return;
687
692
  }
688
- const ins_res = await table.tryUpdateRow(
689
- row,
690
- id,
691
- user || req.user || { role_id: 100 }
692
- );
693
+ let ins_res = await db.withTransaction(async () => {
694
+ return await table.tryUpdateRow(
695
+ row,
696
+ id,
697
+ user || req.user || { role_id: 100 }
698
+ );
699
+ });
693
700
 
694
- if (ins_res.error) {
701
+ if (ins_res?.error) {
695
702
  getState().log(2, `API POST ${table.name} error: ${ins_res.error}`);
696
703
  res.status(400).json(ins_res);
697
704
  } else res.json(ins_res);
@@ -727,20 +734,22 @@ router.delete(
727
734
  async function (err, user, info) {
728
735
  if (accessAllowedWrite(req, user, table)) {
729
736
  try {
730
- if (id === "undefined") {
731
- const pk_name = table.pk_name;
732
- //const fields = table.getFields();
733
- const row = req.body || {};
734
- //readState(row, fields);
735
- await table.deleteRows(
736
- { [pk_name]: row[pk_name] },
737
- user || req.user || { role_id: 100 }
738
- );
739
- } else
740
- await table.deleteRows(
741
- { [table.pk_name]: id },
742
- user || req.user || { role_id: 100 }
743
- );
737
+ await db.withTransaction(async () => {
738
+ if (id === "undefined") {
739
+ const pk_name = table.pk_name;
740
+ //const fields = table.getFields();
741
+ const row = req.body || {};
742
+ //readState(row, fields);
743
+ await table.deleteRows(
744
+ { [pk_name]: row[pk_name] },
745
+ user || req.user || { role_id: 100 }
746
+ );
747
+ } else
748
+ await table.deleteRows(
749
+ { [table.pk_name]: id },
750
+ user || req.user || { role_id: 100 }
751
+ );
752
+ });
744
753
  res.json({ success: true });
745
754
  } catch (e) {
746
755
  getState().log(2, `API DELETE ${table.name} error: ${e.message}`);
package/routes/fields.js CHANGED
@@ -304,60 +304,56 @@ const fieldFlow = (req) =>
304
304
  fldRow.required = false;
305
305
  }
306
306
  const table = Table.findOne({ id: table_id });
307
- if (context.id) {
308
- const field = await Field.findOne({ id: context.id });
309
- try {
310
- if (fldRow.label && field.label != fldRow.label) {
311
- fldRow.name = Field.labelToName(fldRow.label);
312
- }
307
+ try {
308
+ await db.withTransaction(async () => {
309
+ if (context.id) {
310
+ const field = await Field.findOne({ id: context.id });
313
311
 
314
- await field.update(fldRow);
315
- Trigger.emitEvent(
316
- "AppChange",
317
- `Field ${fldRow.name} on table ${table?.name}`,
318
- req.user,
319
- {
320
- entity_type: "Field",
321
- entity_name: fldRow.name || fldRow.label,
322
- }
323
- );
324
- } catch (e) {
325
- console.error(e);
326
- return {
327
- redirect: `/table/${context.table_id}`,
328
- flash: ["error", e.message],
329
- };
330
- }
331
- } else {
332
- try {
333
- await Field.create(fldRow);
334
- Trigger.emitEvent(
335
- "AppChange",
336
- `Field ${fldRow.name} on table ${table?.name}`,
337
- req.user,
338
- {
339
- entity_type: "Field",
340
- entity_name: fldRow.name || fldRow.label,
312
+ if (fldRow.label && field.label != fldRow.label) {
313
+ fldRow.name = Field.labelToName(fldRow.label);
341
314
  }
342
- );
343
- } catch (e) {
344
- console.error(e);
345
- return {
346
- redirect: `/table/${context.table_id}`,
347
- flash: ["error", e.message],
348
- };
349
- }
350
- }
351
315
 
352
- return {
353
- redirect: `/table/${context.table_id}`,
354
- flash: [
355
- "success",
356
- context.id
357
- ? req.__("Field %s saved", label)
358
- : req.__("Field %s created", label),
359
- ],
360
- };
316
+ await field.update(fldRow);
317
+ Trigger.emitEvent(
318
+ "AppChange",
319
+ `Field ${fldRow.name} on table ${table?.name}`,
320
+ req.user,
321
+ {
322
+ entity_type: "Field",
323
+ entity_name: fldRow.name || fldRow.label,
324
+ }
325
+ );
326
+ } else {
327
+ await Field.create(fldRow);
328
+ Trigger.emitEvent(
329
+ "AppChange",
330
+ `Field ${fldRow.name} on table ${table?.name}`,
331
+ req.user,
332
+ {
333
+ entity_type: "Field",
334
+ entity_name: fldRow.name || fldRow.label,
335
+ }
336
+ );
337
+ }
338
+ });
339
+ await getState().refresh_tables();
340
+
341
+ return {
342
+ redirect: `/table/${context.table_id}`,
343
+ flash: [
344
+ "success",
345
+ context.id
346
+ ? req.__("Field %s saved", label)
347
+ : req.__("Field %s created", label),
348
+ ],
349
+ };
350
+ } catch (e) {
351
+ console.error(e);
352
+ return {
353
+ redirect: `/table/${context.table_id}`,
354
+ flash: ["error", e.message],
355
+ };
356
+ }
361
357
  },
362
358
  steps: [
363
359
  {
@@ -897,8 +893,11 @@ router.post(
897
893
  return;
898
894
  }
899
895
  const table_id = f.table_id;
896
+ await db.withTransaction(async () => {
897
+ await f.delete();
898
+ });
899
+ await getState().refresh_tables();
900
900
 
901
- await f.delete();
902
901
  req.flash("success", req.__(`Field %s deleted`, f.label));
903
902
  res.redirect(`/table/${table_id}`);
904
903
  })
@@ -1514,7 +1513,9 @@ router.post(
1514
1513
  let val = field.type?.read
1515
1514
  ? field.type?.read(req.body[field_name])
1516
1515
  : req.body[field_name];
1517
- await table.updateRow({ [field_name]: val }, pk, req.user);
1516
+ await db.withTransaction(async () => {
1517
+ await table.updateRow({ [field_name]: val }, pk, req.user);
1518
+ });
1518
1519
  let fv;
1519
1520
  if (field.is_fkey) {
1520
1521
  if (join_field) {
package/routes/list.js CHANGED
@@ -111,7 +111,9 @@ router.post(
111
111
  error_catcher(async (req, res) => {
112
112
  const { tableName, id, _version } = req.params;
113
113
  const table = Table.findOne({ name: tableName });
114
- await table.restore_row_version(id, _version);
114
+ await db.withTransaction(async () => {
115
+ await table.restore_row_version(id, _version);
116
+ });
115
117
  req.flash("success", req.__("Version %s restored", _version));
116
118
  res.redirect(`/list/_versions/${table.name}/${id}`);
117
119
  })
package/routes/menu.js CHANGED
@@ -605,20 +605,22 @@ router.post(
605
605
  else if (item.subitems) search(item.subitems);
606
606
  });
607
607
  search(menu_items);
608
- if (menu_item)
608
+ if (menu_item) {
609
609
  try {
610
- const result = await run_action_column({
611
- col: menu_item,
612
- referrer: req.get("Referrer"),
613
- req,
614
- res,
610
+ const result = await db.withTransaction(async () => {
611
+ return await run_action_column({
612
+ col: menu_item,
613
+ referrer: req.get("Referrer"),
614
+ req,
615
+ res,
616
+ });
615
617
  });
616
618
  res.json({ success: "ok", ...(result || {}) });
617
619
  } catch (e) {
618
620
  console.error(e);
619
621
  res.status(400).json({ error: e.message || e });
620
622
  }
621
- else res.status(404).json({ error: "Action not found" });
623
+ } else res.status(404).json({ error: "Action not found" });
622
624
  })
623
625
  );
624
626
 
@@ -656,7 +658,7 @@ router.get(
656
658
  break;
657
659
  case "json":
658
660
  res.json(icons);
659
-
661
+ break;
660
662
  default:
661
663
  res.send("");
662
664
  break;
package/routes/models.js CHANGED
@@ -93,6 +93,7 @@ router.post(
93
93
  res.sendWrap(req.__(`New model`), renderForm(form, req.csrfToken()));
94
94
  } else {
95
95
  const model = await Model.create({ ...form.values, table_id: table.id });
96
+ await getState().refresh_tables();
96
97
  if (model.templateObj.configuration_workflow)
97
98
  res.redirect(`/models/config/${model.id}`);
98
99
  else res.redirect(`/models/show/${model.id}`);
@@ -157,7 +158,7 @@ const get_model_workflow = (model, req) => {
157
158
  workflow.onDone = async (ctx) => {
158
159
  const { id, ...configuration } = await oldOnDone(ctx);
159
160
  await model.update({ configuration });
160
-
161
+ await getState().refresh_tables();
161
162
  return {
162
163
  redirect: `/models/show/${model.id}`,
163
164
  flash: ["success", `Model ${this.name || ""} saved`],
@@ -340,6 +341,7 @@ router.post(
340
341
  const { id } = req.params;
341
342
  const model = await Model.findOne({ id });
342
343
  await model.delete();
344
+ await getState().refresh_tables();
343
345
  req.flash("success", req.__("Model %s deleted", model.name));
344
346
  res.redirect(`/table/${model.table_id}`);
345
347
  })
@@ -451,7 +453,7 @@ const encode = (s) =>
451
453
  ">": ">",
452
454
  "'": "'",
453
455
  '"': """,
454
- }[tag])
456
+ })[tag]
455
457
  );
456
458
 
457
459
  router.get(
package/routes/packs.js CHANGED
@@ -18,6 +18,8 @@ const EventLog = require("@saltcorn/data/models/eventlog");
18
18
  const Model = require("@saltcorn/data/models/model");
19
19
  const ModelInstance = require("@saltcorn/data/models/model_instance");
20
20
  const load_plugins = require("../load_plugins");
21
+ const { getState } = require("@saltcorn/data/db/state");
22
+ const db = require("@saltcorn/data/db/index");
21
23
 
22
24
  const { is_pack } = require("@saltcorn/data/contracts");
23
25
  const {
@@ -414,6 +416,7 @@ router.post(
414
416
  if (!error && !is_pack.check(pack)) {
415
417
  error = req.__("Not a valid pack");
416
418
  }
419
+
417
420
  if (!error) {
418
421
  const can_install = await can_install_pack(pack);
419
422
  if (can_install.error) {
@@ -444,10 +447,12 @@ router.post(
444
447
  ],
445
448
  });
446
449
  } else {
447
- await install_pack(pack, undefined, (p) =>
448
- load_plugins.loadAndSaveNewPlugin(p)
449
- );
450
-
450
+ await db.withTransaction(async () => {
451
+ await install_pack(pack, undefined, (p) =>
452
+ load_plugins.loadAndSaveNewPlugin(p)
453
+ );
454
+ });
455
+ await getState().refresh();
451
456
  res.redirect(`/`);
452
457
  }
453
458
  })
@@ -480,9 +485,12 @@ router.post(
480
485
  } else if (can_install.warning) {
481
486
  req.flash("warning", can_install.warning);
482
487
  }
483
- await install_pack(pack.pack, name, (p) =>
484
- load_plugins.loadAndSaveNewPlugin(p)
485
- );
488
+ await db.withTransaction(async () => {
489
+ await install_pack(pack.pack, name, (p) =>
490
+ load_plugins.loadAndSaveNewPlugin(p)
491
+ );
492
+ });
493
+ await getState().refresh();
486
494
  req.flash("success", req.__(`Pack %s installed`, text(name)));
487
495
  res.redirect(`/`);
488
496
  })
@@ -506,7 +514,10 @@ router.post(
506
514
  res.redirect(`/plugins`);
507
515
  return;
508
516
  }
509
- await uninstall_pack(pack.pack, name);
517
+ await db.withTransaction(async () => {
518
+ await uninstall_pack(pack.pack, name);
519
+ });
520
+ await getState().refresh();
510
521
 
511
522
  req.flash("success", req.__(`Pack %s uninstalled`, text(name)));
512
523
 
package/routes/page.js CHANGED
@@ -68,13 +68,15 @@ const runPage = async (page, req, res, tic) => {
68
68
  no_menu: page.attributes?.no_menu,
69
69
  requestFluidLayout: page.attributes?.request_fluid_layout,
70
70
  } || `${page.name} page`,
71
- req.smr ? contents : add_edit_bar({
72
- role,
73
- title: page.name,
74
- what: req.__("Page"),
75
- url: `/pageedit/edit/${encodeURIComponent(page.name)}`,
76
- contents,
77
- }),
71
+ req.smr
72
+ ? contents
73
+ : add_edit_bar({
74
+ role,
75
+ title: page.name,
76
+ what: req.__("Page"),
77
+ url: `/pageedit/edit/${encodeURIComponent(page.name)}`,
78
+ contents,
79
+ })
78
80
  );
79
81
  } else {
80
82
  getState().log(2, `Page ${page.name} not authorized`);
@@ -201,15 +203,17 @@ router.post(
201
203
  });
202
204
  if (col) {
203
205
  try {
204
- const result = await run_action_column({
205
- col,
206
- referrer: req.get("Referrer"),
207
- req,
208
- res,
206
+ const result = await db.withTransaction(async () => {
207
+ return await run_action_column({
208
+ col,
209
+ referrer: req.get("Referrer"),
210
+ req,
211
+ res,
212
+ });
209
213
  });
210
214
  res.json({ success: "ok", ...(result || {}) });
211
215
  } catch (e) {
212
- getState().log(2, e?.stack)
216
+ getState().log(2, e?.stack);
213
217
  res.status(400).json({ error: e.message || e });
214
218
  }
215
219
  } else res.status(404).json({ error: "Action not found" });
@@ -412,9 +412,11 @@ router.post(
412
412
  const { id, ...row } = form.values;
413
413
  if (+id) {
414
414
  await PageGroup.update(id, row);
415
+ await getState().refresh_page_groups();
415
416
  res.json({ success: "ok", row });
416
417
  } else {
417
418
  const pageGroup = await PageGroup.create(row);
419
+ await getState().refresh_page_groups();
418
420
  res.redirect(`/page_groupedit/${pageGroup.name}`);
419
421
  }
420
422
  }
@@ -478,6 +480,7 @@ router.post(
478
480
  eligible_formula,
479
481
  description: description || "",
480
482
  });
483
+ await getState().refresh_page_groups();
481
484
  req.flash("success", req.__("Added member"));
482
485
  res.redirect(`/page_groupedit/${page_groupname}`);
483
486
  }
@@ -497,6 +500,7 @@ router.post(
497
500
  const member = PageGroupMember.findOne({ id: member_id });
498
501
  const pageGroup = PageGroup.findOne({ id: member.page_group_id });
499
502
  await pageGroup.moveMember(member, mode);
503
+ await getState().refresh_page_groups();
500
504
  res.json({ success: "ok" });
501
505
  } catch (error) {
502
506
  getState().log(2, `POST /page_groupedit/move-member: '${error.message}'`);
@@ -573,6 +577,7 @@ router.post(
573
577
  eligible_formula,
574
578
  description: description || "",
575
579
  });
580
+ await getState().refresh_page_groups();
576
581
  req.flash("success", req.__("Updated member"));
577
582
  res.redirect(`/page_groupedit/${group.name}`);
578
583
  }
@@ -593,6 +598,7 @@ router.post(
593
598
  res.redirect("/pageedit");
594
599
  } else {
595
600
  await group.delete();
601
+ await getState().refresh_page_groups();
596
602
  req.flash("success", req.__("Deleted page group %s", group_id));
597
603
  res.redirect("/pageedit");
598
604
  }
@@ -622,6 +628,7 @@ router.post(
622
628
  } else {
623
629
  try {
624
630
  await group.removeMember(member_id);
631
+ await getState().refresh_page_groups();
625
632
  req.flash(
626
633
  "success",
627
634
  req.__("Removed member %s", member.name || member_id)
@@ -651,6 +658,7 @@ router.post(
651
658
  res.redirect("/pageedit");
652
659
  } else {
653
660
  const copy = await group.clone();
661
+ await getState().refresh_page_groups();
654
662
  req.flash("success", req.__("Cloned page group %s", group.name));
655
663
  res.redirect(`/page_groupedit/${copy.name}`);
656
664
  }
@@ -508,6 +508,7 @@ router.post(
508
508
  pageRow.layout = {};
509
509
  }
510
510
  await Page.update(+id, pageRow);
511
+ await getState().refresh_pages();
511
512
  Trigger.emitEvent("AppChange", `Page ${dbPage.name}`, req.user, {
512
513
  entity_type: "Page",
513
514
  entity_name: dbPage.name,
@@ -518,6 +519,7 @@ router.post(
518
519
  if (!pageRow.layout) pageRow.layout = {};
519
520
  if (!pageRow.fixed_states) pageRow.fixed_states = {};
520
521
  await Page.create(pageRow);
522
+ await getState().refresh_pages();
521
523
  Trigger.emitEvent("AppChange", `Page ${pageRow.name}`, req.user, {
522
524
  entity_type: "Page",
523
525
  entity_name: pageRow.name,
@@ -693,6 +695,7 @@ router.post(
693
695
  await Page.update(page.id, {
694
696
  layout: decodeURIComponent((req.body || {}).layout),
695
697
  });
698
+ await getState().refresh_pages();
696
699
  Trigger.emitEvent("AppChange", `Page ${page.name}`, req.user, {
697
700
  entity_type: "Page",
698
701
  entity_name: page.name,
@@ -746,6 +749,8 @@ router.post(
746
749
  if (id && (req.body || {}).layout) {
747
750
  await Page.update(+id, { layout: (req.body || {}).layout });
748
751
  const page = await Page.findOne({ id });
752
+ await getState().refresh_pages();
753
+
749
754
  Trigger.emitEvent("AppChange", `Page ${page.name}`, req.user, {
750
755
  entity_type: "Page",
751
756
  entity_name: page.name,
@@ -775,7 +780,10 @@ router.post(
775
780
  entity_type: "Page",
776
781
  entity_name: page.name,
777
782
  });
778
- await page.delete();
783
+ await db.withTransaction(async () => {
784
+ await page.delete();
785
+ });
786
+ await getState().refresh_pages();
779
787
  req.flash("success", req.__(`Page deleted`));
780
788
  res.redirect(`/pageedit`);
781
789
  })
@@ -856,6 +864,7 @@ router.post(
856
864
  entity_type: "Page",
857
865
  entity_name: newpage.name,
858
866
  });
867
+ await getState().refresh_pages();
859
868
  req.flash(
860
869
  "success",
861
870
  req.__("Page %s duplicated as %s", page.name, newpage.name)
@@ -371,7 +371,9 @@ router.post(
371
371
  pack.config[ename] = entVal;
372
372
  break;
373
373
  }
374
- await install_pack(pack);
374
+ await db.withTransaction(async () => {
375
+ await install_pack(pack);
376
+ });
375
377
  res.redirect(
376
378
  `/registry-editor?etype=${etype}&ename=${encodeURIComponent(
377
379
  ename