@saltcorn/data 1.6.0-alpha.7 → 1.6.0-alpha.9

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 (239) hide show
  1. package/dist/base-plugin/actions.d.ts +1850 -1656
  2. package/dist/base-plugin/actions.d.ts.map +1 -1
  3. package/dist/base-plugin/actions.js +122 -104
  4. package/dist/base-plugin/actions.js.map +1 -1
  5. package/dist/base-plugin/fieldviews.d.ts +284 -114
  6. package/dist/base-plugin/fieldviews.d.ts.map +1 -1
  7. package/dist/base-plugin/fieldviews.js +23 -69
  8. package/dist/base-plugin/fieldviews.js.map +1 -1
  9. package/dist/base-plugin/fileviews.d.ts +15 -14
  10. package/dist/base-plugin/fileviews.d.ts.map +1 -1
  11. package/dist/base-plugin/fileviews.js +22 -18
  12. package/dist/base-plugin/fileviews.js.map +1 -1
  13. package/dist/base-plugin/index.d.ts +3369 -1293
  14. package/dist/base-plugin/index.d.ts.map +1 -1
  15. package/dist/base-plugin/index.js +39 -25
  16. package/dist/base-plugin/index.js.map +1 -1
  17. package/dist/base-plugin/types.d.ts +1438 -1029
  18. package/dist/base-plugin/types.d.ts.map +1 -1
  19. package/dist/base-plugin/types.js +3 -2
  20. package/dist/base-plugin/types.js.map +1 -1
  21. package/dist/base-plugin/viewtemplates/edit.d.ts +133 -257
  22. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  23. package/dist/base-plugin/viewtemplates/edit.js +292 -349
  24. package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
  25. package/dist/base-plugin/viewtemplates/feed.d.ts +30 -81
  26. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
  27. package/dist/base-plugin/viewtemplates/feed.js +37 -30
  28. package/dist/base-plugin/viewtemplates/feed.js.map +1 -1
  29. package/dist/base-plugin/viewtemplates/filter.d.ts +42 -64
  30. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  31. package/dist/base-plugin/viewtemplates/filter.js +86 -82
  32. package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
  33. package/dist/base-plugin/viewtemplates/list.d.ts +40 -115
  34. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
  35. package/dist/base-plugin/viewtemplates/list.js +154 -168
  36. package/dist/base-plugin/viewtemplates/list.js.map +1 -1
  37. package/dist/base-plugin/viewtemplates/listshowlist.d.ts +65 -49
  38. package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -1
  39. package/dist/base-plugin/viewtemplates/listshowlist.js +33 -58
  40. package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -1
  41. package/dist/base-plugin/viewtemplates/room.d.ts +102 -109
  42. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
  43. package/dist/base-plugin/viewtemplates/room.js +53 -50
  44. package/dist/base-plugin/viewtemplates/room.js.map +1 -1
  45. package/dist/base-plugin/viewtemplates/show.d.ts +72 -133
  46. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
  47. package/dist/base-plugin/viewtemplates/show.js +72 -182
  48. package/dist/base-plugin/viewtemplates/show.js.map +1 -1
  49. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +2 -2
  50. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
  51. package/dist/base-plugin/viewtemplates/viewable_fields.js +2 -1
  52. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
  53. package/dist/base-plugin/viewtemplates/workflow-room.d.ts +37 -61
  54. package/dist/base-plugin/viewtemplates/workflow-room.d.ts.map +1 -1
  55. package/dist/base-plugin/viewtemplates/workflow-room.js +42 -65
  56. package/dist/base-plugin/viewtemplates/workflow-room.js.map +1 -1
  57. package/dist/contracts.d.ts +4 -48
  58. package/dist/contracts.d.ts.map +1 -1
  59. package/dist/contracts.js +18 -2
  60. package/dist/contracts.js.map +1 -1
  61. package/dist/db/connect.d.ts.map +1 -1
  62. package/dist/db/connect.js +1 -0
  63. package/dist/db/connect.js.map +1 -1
  64. package/dist/db/state.d.ts +31 -28
  65. package/dist/db/state.d.ts.map +1 -1
  66. package/dist/db/state.js +5 -2
  67. package/dist/db/state.js.map +1 -1
  68. package/dist/model-helper.d.ts +4 -16
  69. package/dist/model-helper.d.ts.map +1 -1
  70. package/dist/model-helper.js +3 -3
  71. package/dist/model-helper.js.map +1 -1
  72. package/dist/models/config.d.ts +5 -0
  73. package/dist/models/config.d.ts.map +1 -1
  74. package/dist/models/config.js +5 -0
  75. package/dist/models/config.js.map +1 -1
  76. package/dist/models/field.d.ts +1 -1
  77. package/dist/models/field.d.ts.map +1 -1
  78. package/dist/models/field.js +3 -2
  79. package/dist/models/field.js.map +1 -1
  80. package/dist/models/file.d.ts +1 -1
  81. package/dist/models/file.d.ts.map +1 -1
  82. package/dist/models/file.js.map +1 -1
  83. package/dist/models/form.js +1 -1
  84. package/dist/models/form.js.map +1 -1
  85. package/dist/models/index.d.ts +5 -0
  86. package/dist/models/index.d.ts.map +1 -1
  87. package/dist/models/layout.d.ts +1 -1
  88. package/dist/models/layout.d.ts.map +1 -1
  89. package/dist/models/layout.js +12 -0
  90. package/dist/models/layout.js.map +1 -1
  91. package/dist/models/plugin.d.ts +3 -2
  92. package/dist/models/plugin.d.ts.map +1 -1
  93. package/dist/models/plugin.js +7 -0
  94. package/dist/models/plugin.js.map +1 -1
  95. package/dist/models/table.d.ts.map +1 -1
  96. package/dist/models/table.js +6 -1
  97. package/dist/models/table.js.map +1 -1
  98. package/dist/plugin-helper.d.ts.map +1 -1
  99. package/dist/plugin-helper.js +4 -0
  100. package/dist/plugin-helper.js.map +1 -1
  101. package/dist/plugin-testing.d.ts +3 -63
  102. package/dist/plugin-testing.d.ts.map +1 -1
  103. package/dist/plugin-testing.js +34 -15
  104. package/dist/plugin-testing.js.map +1 -1
  105. package/dist/standard-menu.d.ts.map +1 -1
  106. package/dist/standard-menu.js +15 -0
  107. package/dist/standard-menu.js.map +1 -1
  108. package/dist/tests/actions.test.d.ts +2 -0
  109. package/dist/tests/actions.test.d.ts.map +1 -0
  110. package/dist/tests/actions.test.js +936 -0
  111. package/dist/tests/actions.test.js.map +1 -0
  112. package/dist/tests/auth.test.d.ts +2 -0
  113. package/dist/tests/auth.test.d.ts.map +1 -0
  114. package/dist/tests/auth.test.js +824 -0
  115. package/dist/tests/auth.test.js.map +1 -0
  116. package/dist/tests/auxtest.test.d.ts +2 -0
  117. package/dist/tests/auxtest.test.d.ts.map +1 -0
  118. package/dist/tests/auxtest.test.js +562 -0
  119. package/dist/tests/auxtest.test.js.map +1 -0
  120. package/dist/tests/base.test.d.ts +2 -0
  121. package/dist/tests/base.test.d.ts.map +1 -0
  122. package/dist/tests/base.test.js +30 -0
  123. package/dist/tests/base.test.js.map +1 -0
  124. package/dist/tests/calc.test.d.ts +2 -0
  125. package/dist/tests/calc.test.d.ts.map +1 -0
  126. package/dist/tests/calc.test.js +1081 -0
  127. package/dist/tests/calc.test.js.map +1 -0
  128. package/dist/tests/composite_pk.test.d.ts +2 -0
  129. package/dist/tests/composite_pk.test.d.ts.map +1 -0
  130. package/dist/tests/composite_pk.test.js +98 -0
  131. package/dist/tests/composite_pk.test.js.map +1 -0
  132. package/dist/tests/config.test.d.ts +2 -0
  133. package/dist/tests/config.test.d.ts.map +1 -0
  134. package/dist/tests/config.test.js +86 -0
  135. package/dist/tests/config.test.js.map +1 -0
  136. package/dist/tests/db.test.d.ts +2 -0
  137. package/dist/tests/db.test.d.ts.map +1 -0
  138. package/dist/tests/db.test.js +178 -0
  139. package/dist/tests/db.test.js.map +1 -0
  140. package/dist/tests/discover.test.d.ts +2 -0
  141. package/dist/tests/discover.test.d.ts.map +1 -0
  142. package/dist/tests/discover.test.js +245 -0
  143. package/dist/tests/discover.test.js.map +1 -0
  144. package/dist/tests/edit.test.d.ts +2 -0
  145. package/dist/tests/edit.test.d.ts.map +1 -0
  146. package/dist/tests/edit.test.js +1161 -0
  147. package/dist/tests/edit.test.js.map +1 -0
  148. package/dist/tests/email.test.d.ts +2 -0
  149. package/dist/tests/email.test.d.ts.map +1 -0
  150. package/dist/tests/email.test.js +255 -0
  151. package/dist/tests/email.test.js.map +1 -0
  152. package/dist/tests/exact_views.test.d.ts +2 -0
  153. package/dist/tests/exact_views.test.d.ts.map +1 -0
  154. package/dist/tests/exact_views.test.js +1363 -0
  155. package/dist/tests/exact_views.test.js.map +1 -0
  156. package/dist/tests/field.test.d.ts +2 -0
  157. package/dist/tests/field.test.d.ts.map +1 -0
  158. package/dist/tests/field.test.js +588 -0
  159. package/dist/tests/field.test.js.map +1 -0
  160. package/dist/tests/fieldviews.test.d.ts +2 -0
  161. package/dist/tests/fieldviews.test.d.ts.map +1 -0
  162. package/dist/tests/fieldviews.test.js +74 -0
  163. package/dist/tests/fieldviews.test.js.map +1 -0
  164. package/dist/tests/file.test.d.ts +2 -0
  165. package/dist/tests/file.test.d.ts.map +1 -0
  166. package/dist/tests/file.test.js +148 -0
  167. package/dist/tests/file.test.js.map +1 -0
  168. package/dist/tests/filter.test.d.ts +2 -0
  169. package/dist/tests/filter.test.d.ts.map +1 -0
  170. package/dist/tests/filter.test.js +496 -0
  171. package/dist/tests/filter.test.js.map +1 -0
  172. package/dist/tests/form.test.d.ts +2 -0
  173. package/dist/tests/form.test.d.ts.map +1 -0
  174. package/dist/tests/form.test.js +264 -0
  175. package/dist/tests/form.test.js.map +1 -0
  176. package/dist/tests/list.test.d.ts +2 -0
  177. package/dist/tests/list.test.d.ts.map +1 -0
  178. package/dist/tests/list.test.js +1037 -0
  179. package/dist/tests/list.test.js.map +1 -0
  180. package/dist/tests/models.test.d.ts +2 -0
  181. package/dist/tests/models.test.d.ts.map +1 -0
  182. package/dist/tests/models.test.js +417 -0
  183. package/dist/tests/models.test.js.map +1 -0
  184. package/dist/tests/page.test.d.ts +2 -0
  185. package/dist/tests/page.test.d.ts.map +1 -0
  186. package/dist/tests/page.test.js +26 -0
  187. package/dist/tests/page.test.js.map +1 -0
  188. package/dist/tests/page_group.test.d.ts +2 -0
  189. package/dist/tests/page_group.test.d.ts.map +1 -0
  190. package/dist/tests/page_group.test.js +51 -0
  191. package/dist/tests/page_group.test.js.map +1 -0
  192. package/dist/tests/plugin.test.d.ts +2 -0
  193. package/dist/tests/plugin.test.d.ts.map +1 -0
  194. package/dist/tests/plugin.test.js +60 -0
  195. package/dist/tests/plugin.test.js.map +1 -0
  196. package/dist/tests/show.test.d.ts +2 -0
  197. package/dist/tests/show.test.d.ts.map +1 -0
  198. package/dist/tests/show.test.js +561 -0
  199. package/dist/tests/show.test.js.map +1 -0
  200. package/dist/tests/state.test.d.ts +2 -0
  201. package/dist/tests/state.test.d.ts.map +1 -0
  202. package/dist/tests/state.test.js +82 -0
  203. package/dist/tests/state.test.js.map +1 -0
  204. package/dist/tests/table.test.d.ts +2 -0
  205. package/dist/tests/table.test.d.ts.map +1 -0
  206. package/dist/tests/table.test.js +2717 -0
  207. package/dist/tests/table.test.js.map +1 -0
  208. package/dist/tests/table_history.test.d.ts +2 -0
  209. package/dist/tests/table_history.test.d.ts.map +1 -0
  210. package/dist/tests/table_history.test.js +413 -0
  211. package/dist/tests/table_history.test.js.map +1 -0
  212. package/dist/tests/tag.test.d.ts +2 -0
  213. package/dist/tests/tag.test.d.ts.map +1 -0
  214. package/dist/tests/tag.test.js +97 -0
  215. package/dist/tests/tag.test.js.map +1 -0
  216. package/dist/tests/user.test.d.ts +2 -0
  217. package/dist/tests/user.test.d.ts.map +1 -0
  218. package/dist/tests/user.test.js +441 -0
  219. package/dist/tests/user.test.js.map +1 -0
  220. package/dist/tests/view.test.d.ts +2 -0
  221. package/dist/tests/view.test.d.ts.map +1 -0
  222. package/dist/tests/view.test.js +699 -0
  223. package/dist/tests/view.test.js.map +1 -0
  224. package/dist/tests/workflow.test.d.ts +2 -0
  225. package/dist/tests/workflow.test.d.ts.map +1 -0
  226. package/dist/tests/workflow.test.js +303 -0
  227. package/dist/tests/workflow.test.js.map +1 -0
  228. package/dist/tests/workflow_run.test.d.ts +2 -0
  229. package/dist/tests/workflow_run.test.d.ts.map +1 -0
  230. package/dist/tests/workflow_run.test.js +922 -0
  231. package/dist/tests/workflow_run.test.js.map +1 -0
  232. package/dist/viewable_fields.d.ts +5 -4
  233. package/dist/viewable_fields.d.ts.map +1 -1
  234. package/dist/viewable_fields.js +12 -6
  235. package/dist/viewable_fields.js.map +1 -1
  236. package/dist/web-mobile-commons.d.ts.map +1 -1
  237. package/dist/web-mobile-commons.js +1 -0
  238. package/dist/web-mobile-commons.js.map +1 -1
  239. package/package.json +8 -8
@@ -5,20 +5,24 @@
5
5
  * @module base-plugin/actions
6
6
  * @subcategory base-plugin
7
7
  */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
8
11
  const fetch = require("node-fetch");
9
12
  const vm = require("vm");
10
- const Table = require("../models/table");
11
- const EventLog = require("../models/eventlog");
12
- const View = require("../models/view");
13
- const Model = require("../models/model");
14
- const Page = require("../models/page");
15
- const Field = require("../models/field");
16
- const File = require("../models/file");
17
- const { getState } = require("../db/state");
18
- const User = require("../models/user");
19
- const Trigger = require("../models/trigger");
20
- const WorkflowRun = require("../models/workflow_run");
21
- const Notification = require("../models/notification");
13
+ const table_1 = __importDefault(require("../models/table"));
14
+ const eventlog_1 = __importDefault(require("../models/eventlog"));
15
+ const view_1 = __importDefault(require("../models/view"));
16
+ const model_1 = __importDefault(require("../models/model"));
17
+ const page_1 = __importDefault(require("../models/page"));
18
+ const field_1 = __importDefault(require("../models/field"));
19
+ const user_1 = __importDefault(require("../models/user"));
20
+ const trigger_1 = __importDefault(require("../models/trigger"));
21
+ const workflow_run_1 = __importDefault(require("../models/workflow_run"));
22
+ const notification_1 = __importDefault(require("../models/notification"));
23
+ const file_1 = __importDefault(require("../models/file"));
24
+ const state_1 = __importDefault(require("../db/state"));
25
+ const { getState } = state_1.default;
22
26
  const { getMailTransport, viewToEmailHtml, loadAttachments, getFileAggregations, mjml2html, } = require("../models/email");
23
27
  const { get_async_expression_function, recalculate_for_stored, eval_expression, freeVariablesInInterpolation, add_free_variables_to_joinfields, freeVariables, } = require("../models/expression");
24
28
  const { div, code, a, span } = require("@saltcorn/markup/tags");
@@ -58,7 +62,9 @@ const emit_to_client = (user) => (data, userIds) => {
58
62
  ? userIds
59
63
  : userIds
60
64
  ? [userIds]
61
- : [user?.id] || [];
65
+ : user?.id
66
+ ? [user.id]
67
+ : [];
62
68
  state.emitDynamicUpdate(db.getTenantSchema(), data, safeIds);
63
69
  };
64
70
  /**
@@ -79,7 +85,7 @@ const run_code = async ({ row, table, channel, configuration: { code, run_where
79
85
  field_names: table ? table.fields.map((f) => f.name) : undefined,
80
86
  };
81
87
  if (!isNode()) {
82
- const { isOfflineMode } = getState().mobileConfig;
88
+ const { isOfflineMode } = getState().mobileConfig || {};
83
89
  if (!isOfflineMode && run_where === "Server") {
84
90
  // stop on the app and run the action server side
85
91
  return { server_eval: true };
@@ -91,7 +97,7 @@ const run_code = async ({ row, table, channel, configuration: { code, run_where
91
97
  return v.run({ row, table, user, configuration: args, ...rest, ...args });
92
98
  };
93
99
  });
94
- const trigger_actions = await Trigger.find({
100
+ const trigger_actions = await trigger_1.default.find({
95
101
  when_trigger: { or: ["API call", "Never"] },
96
102
  });
97
103
  for (const trigger of trigger_actions) {
@@ -130,7 +136,7 @@ const run_code = async ({ row, table, channel, configuration: { code, run_where
130
136
  ...restArgs,
131
137
  });
132
138
  };
133
- const emitEvent = (eventType, channel, payload) => Trigger.emitEvent(eventType, channel, user, payload);
139
+ const emitEvent = (eventType, channel, payload) => trigger_1.default.emitEvent(eventType, channel, user, payload);
134
140
  const fetchJSON = async (...args) => await (await fetch(...args)).json();
135
141
  const sysState = getState();
136
142
  const require = (nm) => sysState.codeNPMmodules[nm];
@@ -142,14 +148,16 @@ const run_code = async ({ row, table, channel, configuration: { code, run_where
142
148
  await sysState.refresh(true);
143
149
  //other workers
144
150
  db.whenTransactionisFree(async () => {
145
- if (which)
146
- await getState()[`refresh_${which}`]();
151
+ if (which) {
152
+ const state = getState();
153
+ await state[`refresh_${which}`]();
154
+ }
147
155
  else
148
- await getState().refresh();
156
+ await getState().refresh(false);
149
157
  });
150
158
  };
151
159
  const f = vm.runInNewContext(`async () => {${code}\n}`, {
152
- Table,
160
+ Table: table_1.default,
153
161
  table,
154
162
  row,
155
163
  context: row,
@@ -170,16 +178,16 @@ const run_code = async ({ row, table, channel, configuration: { code, run_where
170
178
  await sysState.refresh();
171
179
  },
172
180
  URL,
173
- File,
174
- User,
175
- View,
176
- Page,
177
- Field,
178
- EventLog,
181
+ File: file_1.default,
182
+ User: user_1.default,
183
+ View: view_1.default,
184
+ Page: page_1.default,
185
+ Field: field_1.default,
186
+ EventLog: eventlog_1.default,
179
187
  Buffer: isNode() ? Buffer : require("buffer"),
180
- Trigger,
181
- Notification,
182
- WorkflowRun,
188
+ Trigger: trigger_1.default,
189
+ Notification: notification_1.default,
190
+ WorkflowRun: workflow_run_1.default,
183
191
  setTimeout,
184
192
  interpolate,
185
193
  require,
@@ -241,7 +249,7 @@ module.exports = {
241
249
  label: "Event type",
242
250
  required: true,
243
251
  input_type: "select",
244
- options: Trigger.when_options,
252
+ options: trigger_1.default.when_options,
245
253
  },
246
254
  {
247
255
  name: "channel",
@@ -265,7 +273,7 @@ module.exports = {
265
273
  * @returns {Promise<void>}
266
274
  */
267
275
  run: async ({ row, configuration: { eventType, channel, payload }, user, }) => {
268
- return await Trigger.emitEvent(eventType, channel, user, payload ? JSON.parse(payload) : row);
276
+ return await trigger_1.default.emitEvent(eventType, channel, user, payload ? JSON.parse(payload) : row);
269
277
  },
270
278
  namespace: "Control",
271
279
  },
@@ -275,8 +283,8 @@ module.exports = {
275
283
  */
276
284
  description: "Repeat an action over some or all rows in a table",
277
285
  configFields: async () => {
278
- const tables = await Table.find({}, { cached: true });
279
- const trigger_actions0 = await Trigger.find({});
286
+ const tables = await table_1.default.find({}, { cached: true });
287
+ const trigger_actions0 = await trigger_1.default.find({});
280
288
  const trigger_actions = trigger_actions0.sort(comparingCaseInsensitive("name"));
281
289
  const order_options = {};
282
290
  for (const table of tables) {
@@ -349,13 +357,13 @@ module.exports = {
349
357
  * @returns {Promise<void>}
350
358
  */
351
359
  run: async ({ row, configuration: { table_name, where, limit, orderBy, orderDesc, trigger_id, interval, }, user, ...rest }) => {
352
- const table = Table.findOne({ name: table_name });
360
+ const table = table_1.default.findOne({ name: table_name });
353
361
  const wh = where ? eval_expression(where, row, user) : {};
354
362
  const selOpts = { orderDesc, orderBy };
355
363
  if (limit)
356
364
  selOpts.limit = limit;
357
365
  const rows = await table.getRows(wh, selOpts);
358
- const trigger = Trigger.findOne({ id: trigger_id });
366
+ const trigger = trigger_1.default.findOne({ id: trigger_id });
359
367
  let result = {};
360
368
  let first = true;
361
369
  for (const row_i of rows) {
@@ -390,7 +398,8 @@ module.exports = {
390
398
  let field_opts = [];
391
399
  if (table) {
392
400
  field_opts = table.fields
393
- .filter((f) => f.type && ["String", "HTML", "JSON"].includes(f.type.name))
401
+ .filter((f) => f.type &&
402
+ ["String", "HTML", "JSON"].includes(typeof f.type === "string" ? f.type : f.type?.name))
394
403
  .map((f) => f.name);
395
404
  }
396
405
  return [
@@ -488,6 +497,7 @@ module.exports = {
488
497
  ? await response.json()
489
498
  : await response.text();
490
499
  const saveResponse = isJSON &&
500
+ typeof field?.type !== "string" &&
491
501
  (field?.type?.name === "String" || field?.type?.sql_name === "text")
492
502
  ? JSON.stringify(parsedResponse)
493
503
  : parsedResponse;
@@ -508,7 +518,7 @@ module.exports = {
508
518
  */
509
519
  description: "Find or create a direct message room for the user, redirect the page to this room",
510
520
  configFields: async () => {
511
- const views = await View.find_all_views_where(({ viewrow }) => viewrow.viewtemplate === "Room");
521
+ const views = await view_1.default.find_all_views_where(({ viewrow }) => viewrow.viewtemplate === "Room");
512
522
  const view_opts = views.map((v) => v.name);
513
523
  return [
514
524
  {
@@ -528,17 +538,17 @@ module.exports = {
528
538
  * @param {object} opts.user
529
539
  * @returns {Promise<object>}
530
540
  */
531
- run: async ({ row, table, configuration: { viewname }, user }) => {
532
- const view = await View.findOne({ name: viewname });
541
+ run: async ({ row, table, configuration: { viewname }, user, }) => {
542
+ const view = view_1.default.findOne({ name: viewname });
533
543
  if (!view)
534
544
  throw new Error(`In find_or_create_dm_room action, Room view ${viewname} does not exist`);
535
545
  const { participant_field } = view.configuration;
536
546
  const [part_table_name, part_key_to_room, part_user_field] = participant_field.split(".");
537
- const roomtable = Table.findOne({ id: view.table_id });
538
- const parttable = Table.findOne({ name: part_table_name });
547
+ const roomtable = table_1.default.findOne({ id: view.table_id });
548
+ const parttable = table_1.default.findOne({ name: part_table_name });
539
549
  //find a room that has both participants
540
550
  //select id from rooms r where uid1 in (select id from participants where...) and
541
- const { rows } = await db.query(`with my_rooms as (select "${part_key_to_room}" from "${db.getTenantSchema()}"."${db.sqlsanitize(part_table_name)}" where "${part_user_field}" = $1)
551
+ const { rows } = await db.query(`with my_rooms as (select "${part_key_to_room}" from "${db.getTenantSchema()}"."${db.sqlsanitize(part_table_name)}" where "${part_user_field}" = $1)
542
552
  select * from "${db.getTenantSchema()}"."${db.sqlsanitize(roomtable.name)}" r where r.id in (select "${part_key_to_room}" from my_rooms)
543
553
  and $2 in (select "${part_user_field}" from "${db.getTenantSchema()}"."${db.sqlsanitize(part_table_name)}" where "${part_key_to_room}" = r.id)`, [user.id, row.id]);
544
554
  if (rows.length > 0) {
@@ -630,17 +640,17 @@ module.exports = {
630
640
  }
631
641
  if (!table)
632
642
  return [];
633
- const views = await View.find_table_views_where(table, ({ viewtemplate }) => viewtemplate?.runMany || viewtemplate?.renderRows);
643
+ const views = await view_1.default.find_table_views_where(table, ({ state_fields, viewtemplate, viewrow }) => !!(viewtemplate?.runMany || viewtemplate?.renderRows));
634
644
  const view_opts = views.map((v) => v.name);
635
645
  const fields = table.getFields();
636
646
  const field_opts = fields
637
- .filter((f) => (f.type && f.type.name === "String") || f.reftable_name === "users")
647
+ .filter((f) => f.type_name === "String" || f.reftable_name === "users")
638
648
  .map((f) => f.name);
639
649
  const body_field_opts = fields
640
- .filter((f) => f.type && (f.type.name === "HTML" || f.type.name === "String"))
650
+ .filter((f) => f.type_name === "HTML" || f.type_name === "String")
641
651
  .map((f) => f.name);
642
652
  const confirm_field_opts = fields
643
- .filter((f) => f.type && (f.type.name === "Bool" || f.type.name === "Date"))
653
+ .filter((f) => f.type_name === "Bool" || f.type_name === "Date")
644
654
  .map((f) => f.name);
645
655
  const attachment_opts = [""];
646
656
  for (const field of fields) {
@@ -827,7 +837,9 @@ module.exports = {
827
837
  if (field && field.type.name === "String")
828
838
  to_addr = row[to_email_field];
829
839
  else if (field && field.reftable_name === "users") {
830
- const refuser = await User.findOne({ id: row[to_email_field] });
840
+ const refuser = await user_1.default.findOne({
841
+ id: row[to_email_field],
842
+ });
831
843
  to_addr = refuser.email;
832
844
  }
833
845
  break;
@@ -837,13 +849,13 @@ module.exports = {
837
849
  return;
838
850
  }
839
851
  const setBody = {};
840
- if (body_type === "Text field") {
852
+ if (body_type === "Text field" && body_field) {
841
853
  setBody.text = row[body_field];
842
854
  }
843
- else if (body_type === "HTML field") {
855
+ else if (body_type === "HTML field" && body_field) {
844
856
  setBody.html = row[body_field];
845
857
  }
846
- else if (body_type === "MJML field") {
858
+ else if (body_type === "MJML field" && body_field) {
847
859
  const mjml = row[body_field];
848
860
  const html = mjml2html(mjml, { minify: true });
849
861
  setBody.html = html.html;
@@ -859,7 +871,7 @@ module.exports = {
859
871
  opts.locale = Object.values(cfgLangs).find((r) => r.name).locale;
860
872
  }
861
873
  }
862
- const view = await View.findOne({ name: viewname });
874
+ const view = await view_1.default.findOne({ name: viewname });
863
875
  setBody.html = await viewToEmailHtml(view, {
864
876
  [table.pk_name]: row[table.pk_name],
865
877
  }, opts);
@@ -891,12 +903,12 @@ module.exports = {
891
903
  if (confirm_field) {
892
904
  const confirm_fld = table.getField(confirm_field);
893
905
  if (sendres.accepted.length > 0) {
894
- if (confirm_fld && confirm_fld.type.name === "Date")
906
+ if (confirm_fld && confirm_fld.type_name === "Date")
895
907
  await table.updateRow({ [confirm_field]: new Date() }, row[table.pk_name]);
896
- else if (confirm_fld && confirm_fld.type.name === "Bool")
908
+ else if (confirm_fld && confirm_fld.type_name === "Bool")
897
909
  await table.updateRow({ [confirm_field]: true }, row[table.pk_name]);
898
910
  }
899
- else if (confirm_fld && confirm_fld.type.name === "Bool") {
911
+ else if (confirm_fld && confirm_fld.type_name === "Bool") {
900
912
  await table.updateRow({ [confirm_field]: false }, row[table.pk_name]);
901
913
  }
902
914
  }
@@ -908,7 +920,10 @@ module.exports = {
908
920
  catch (e) {
909
921
  if (confirm_field) {
910
922
  const confirm_fld = table.getField(confirm_field);
911
- if (confirm_fld && confirm_fld.type.name === "Bool")
923
+ if (confirm_fld &&
924
+ (typeof confirm_fld.type === "string"
925
+ ? confirm_fld.type === "Bool"
926
+ : confirm_fld.type?.name === "Bool"))
912
927
  await table.updateRow({ [confirm_field]: false }, row[table.pk_name]);
913
928
  throw e;
914
929
  }
@@ -952,11 +967,11 @@ module.exports = {
952
967
  * @param {object} opts.user
953
968
  * @returns {Promise<object>}
954
969
  */
955
- run: async ({ row, table, configuration: { joined_table }, user }) => {
970
+ run: async ({ row, table, configuration: { joined_table }, user, }) => {
956
971
  if (!joined_table)
957
972
  throw new Error(`Relation not specified in insert_joined_row action`);
958
973
  const [join_table_name, join_field] = joined_table.split(".");
959
- const joinTable = Table.findOne({ name: join_table_name });
974
+ const joinTable = table_1.default.findOne({ name: join_table_name });
960
975
  if (!joinTable)
961
976
  throw new Error(`Table ${join_table_name} not found in insert_joined_row action`);
962
977
  const fields = joinTable.getFields();
@@ -992,7 +1007,7 @@ module.exports = {
992
1007
  * @param {*} opts.user
993
1008
  * @returns {Promise<object>}
994
1009
  */
995
- run: async ({ row, table, user }) => {
1010
+ run: async ({ row, table, user, }) => {
996
1011
  const newRow = { ...row };
997
1012
  table.getFields();
998
1013
  delete newRow[table.pk_name];
@@ -1018,7 +1033,7 @@ module.exports = {
1018
1033
  */
1019
1034
  description: "Re-calculate the stored calculated fields for a table, optionally only for the triggering row",
1020
1035
  configFields: async ({ table }) => {
1021
- const tables = await Table.find({}, { cached: true });
1036
+ const tables = await table_1.default.find({}, { cached: true });
1022
1037
  return [
1023
1038
  {
1024
1039
  name: "table",
@@ -1051,12 +1066,13 @@ module.exports = {
1051
1066
  * @param {object} opts.configuration
1052
1067
  * @returns {Promise<void>}
1053
1068
  */
1054
- run: async ({ table, row, configuration, user }) => {
1055
- const table_for_recalc = Table.findOne({
1069
+ run: async ({ table, row, configuration, user, }) => {
1070
+ const table_for_recalc = table_1.default.findOne({
1056
1071
  name: configuration.table,
1057
1072
  });
1058
1073
  //intentionally omit await
1059
1074
  if (configuration.only_triggering_row &&
1075
+ table &&
1060
1076
  table.name === table_for_recalc?.name &&
1061
1077
  row &&
1062
1078
  row[table.pk_name]) {
@@ -1086,7 +1102,7 @@ module.exports = {
1086
1102
  */
1087
1103
  description: "insert a row into any table, using a formula expression",
1088
1104
  configFields: async ({ mode }) => {
1089
- const tables = await Table.find({}, { cached: true });
1105
+ const tables = await table_1.default.find({}, { cached: true });
1090
1106
  return [
1091
1107
  {
1092
1108
  name: "table",
@@ -1136,7 +1152,7 @@ module.exports = {
1136
1152
  ...dollarizeObject(state),
1137
1153
  });
1138
1154
  const calcrow = await f(row || {}, user);
1139
- const table_for_insert = Table.findOne({ name: configuration.table });
1155
+ const table_for_insert = table_1.default.findOne({ name: configuration.table });
1140
1156
  const all_results = {};
1141
1157
  const ids = [];
1142
1158
  const upsertOne = async (row) => {
@@ -1181,7 +1197,7 @@ module.exports = {
1181
1197
  */
1182
1198
  modify_row: {
1183
1199
  description: "Modify the triggering row",
1184
- configFields: async ({ mode, when_trigger }) => {
1200
+ configFields: async ({ mode, when_trigger, }) => {
1185
1201
  return [
1186
1202
  {
1187
1203
  name: "row_expr",
@@ -1224,7 +1240,7 @@ module.exports = {
1224
1240
  type: "String",
1225
1241
  required: true,
1226
1242
  attributes: {
1227
- options: (await Table.find()).map((t) => t.name),
1243
+ options: (await table_1.default.find()).map((t) => t.name),
1228
1244
  showIf: { where: "Database" },
1229
1245
  },
1230
1246
  },
@@ -1246,7 +1262,7 @@ module.exports = {
1246
1262
  },
1247
1263
  requireRow: true,
1248
1264
  run: async ({ row, table, configuration: { row_expr, where, select_table, query }, user, ...rest }) => {
1249
- const f = get_async_expression_function(row_expr, table?.fields || Object.keys(row).map((k) => ({ name: k })), {
1265
+ const f = get_async_expression_function(row_expr, table?.fields || Object.keys(row || {}).map((k) => ({ name: k })), {
1250
1266
  row: row || {},
1251
1267
  user,
1252
1268
  });
@@ -1258,7 +1274,7 @@ module.exports = {
1258
1274
  return { set_fields: calcrow };
1259
1275
  if (select_table && query) {
1260
1276
  //get table
1261
- const table = Table.findOne(select_table);
1277
+ const table = table_1.default.findOne(select_table);
1262
1278
  // evaluate query
1263
1279
  const q = eval_expression(query, row, user, "Query expression in modify_row step");
1264
1280
  const rows = await table.getRows(q);
@@ -1283,7 +1299,7 @@ module.exports = {
1283
1299
  */
1284
1300
  description: "Modify the triggering row",
1285
1301
  configFields: async ({ mode, when_trigger }) => {
1286
- const tables = await Table.find({}, { cached: true });
1302
+ const tables = await table_1.default.find({}, { cached: true });
1287
1303
  return [
1288
1304
  ...(mode === "workflow"
1289
1305
  ? []
@@ -1322,7 +1338,7 @@ module.exports = {
1322
1338
  return resultCollector;
1323
1339
  }
1324
1340
  const where = eval_expression(delete_where, row || {}, user, "recalculate_stored_fields where");
1325
- const tbl = Table.findOne({ name: table_name });
1341
+ const tbl = table_1.default.findOne({ name: table_name });
1326
1342
  await tbl.deleteRows(where, user, false, resultCollector);
1327
1343
  return resultCollector;
1328
1344
  },
@@ -1341,8 +1357,8 @@ module.exports = {
1341
1357
  */
1342
1358
  description: "Navigation action",
1343
1359
  configFields: async () => {
1344
- const pages = await Page.find({}, { cached: true });
1345
- const views = await View.find({}, { cached: true });
1360
+ const pages = await page_1.default.find({}, { cached: true });
1361
+ const views = await view_1.default.find({}, { cached: true });
1346
1362
  return [
1347
1363
  {
1348
1364
  name: "nav_action",
@@ -1473,7 +1489,7 @@ module.exports = {
1473
1489
  showIf: { control_action: ["Goto step"] },
1474
1490
  },
1475
1491
  ],
1476
- run: async ({ row, user, configuration: { control_action, step } }) => {
1492
+ run: async ({ row, user, configuration: { control_action, step }, }) => {
1477
1493
  switch (control_action) {
1478
1494
  case "Halt steps":
1479
1495
  return { halt_steps: true };
@@ -1539,7 +1555,7 @@ module.exports = {
1539
1555
  : cfgFolder;
1540
1556
  }
1541
1557
  }
1542
- const file = await File.from_req_files(req.files[field.name], user ? user.id : null, (field.attributes && +field.attributes.min_role_read) || 1, folder);
1558
+ const file = await file_1.default.from_req_files(req.files[field.name], user?.id, (field.attributes && +field.attributes.min_role_read) || 1, folder);
1543
1559
  row[field.name] = file.path_to_serve;
1544
1560
  processed = true;
1545
1561
  }
@@ -1809,15 +1825,15 @@ module.exports = {
1809
1825
  },
1810
1826
  ];
1811
1827
  const field_opts = table.fields
1812
- .filter((f) => f.type?.name === "String")
1828
+ .filter((f) => f.type_name === "String")
1813
1829
  .map((f) => f.name);
1814
1830
  table.fields.forEach((f) => {
1815
1831
  if (f.is_fkey && f.type !== "File") {
1816
- const refTable = Table.findOne({ name: f.reftable_name });
1832
+ const refTable = table_1.default.findOne({ name: f.reftable_name });
1817
1833
  if (!refTable)
1818
1834
  throw new Error(`Unable to find table '${f.reftable_name}`);
1819
1835
  field_opts.push(...refTable.fields
1820
- .filter((jf) => jf.type?.name === "String")
1836
+ .filter((jf) => jf.type_name === "String")
1821
1837
  .map((jf) => `${f.name}.${jf.name}`));
1822
1838
  }
1823
1839
  });
@@ -1855,7 +1871,7 @@ module.exports = {
1855
1871
  return;
1856
1872
  else {
1857
1873
  const keyfield = table.getField(ref);
1858
- const refTable = Table.findOne({ name: keyfield.reftable_name });
1874
+ const refTable = table_1.default.findOne({ name: keyfield.reftable_name });
1859
1875
  const refRow = await refTable.getRow({ [table.pk_name]: row[ref] });
1860
1876
  code = refRow[target];
1861
1877
  }
@@ -1867,7 +1883,7 @@ module.exports = {
1867
1883
  ...rest,
1868
1884
  table,
1869
1885
  row,
1870
- configuration: { run_where, code },
1886
+ configuration: { run_where: run_where || "Server", code },
1871
1887
  });
1872
1888
  },
1873
1889
  namespace: "Code",
@@ -1875,7 +1891,7 @@ module.exports = {
1875
1891
  duplicate_row_prefill_edit: {
1876
1892
  configFields: async ({ table }) => {
1877
1893
  const fields = table ? table.getFields() : [];
1878
- const views = await View.find_table_views_where(table, ({ viewrow }) => viewrow.viewtemplate === "Edit");
1894
+ const views = await view_1.default.find_table_views_where(table, ({ viewtemplate, viewrow, state_fields }) => viewrow.viewtemplate === "Edit");
1879
1895
  const fldOpts = fields.map((f) => ({
1880
1896
  label: f.name,
1881
1897
  name: f.name,
@@ -1894,7 +1910,7 @@ module.exports = {
1894
1910
  },
1895
1911
  disableInWorkflow: true,
1896
1912
  requireRow: true,
1897
- run: async ({ row, table, configuration: { viewname, ...flds }, user }) => {
1913
+ run: async ({ row, table, configuration: { viewname, ...flds }, user, }) => {
1898
1914
  const qs = Object.entries(flds)
1899
1915
  .map(([k, v]) => v && typeof row[k] !== "undefined"
1900
1916
  ? `${encodeURIComponent(k)}=${encodeURIComponent(row[k])}`
@@ -1925,9 +1941,9 @@ module.exports = {
1925
1941
  },
1926
1942
  },
1927
1943
  ],
1928
- run: async ({ configuration: { language }, user, req, res }) => {
1944
+ run: async ({ configuration: { language }, user, req, res, }) => {
1929
1945
  if (user?.id) {
1930
- const u = await User.findForSession({ id: user.id });
1946
+ const u = await user_1.default.findForSession({ id: user.id });
1931
1947
  await u.set_language(language);
1932
1948
  req.login(u.session_object, function (err) {
1933
1949
  if (!err) {
@@ -1959,7 +1975,7 @@ module.exports = {
1959
1975
  */
1960
1976
  description: "Synchronize a database table with an external/provider table by copying rows from the external table",
1961
1977
  configFields: async ({ table }) => {
1962
- const tables = await Table.find_with_external();
1978
+ const tables = await table_1.default.find_with_external();
1963
1979
  const pk_options = {};
1964
1980
  for (const table of tables) {
1965
1981
  const fields = table.getFields();
@@ -2042,7 +2058,7 @@ module.exports = {
2042
2058
  // https://stackoverflow.com/a/36504668/19839414
2043
2059
  const set_diff = (a, b) => new Set([...a].filter((x) => !b.has(x)));
2044
2060
  let set_intersect = (a, b) => new Set([...a].filter((x) => b.has(x)));
2045
- const source_table = Table.findOne({ name: table_src });
2061
+ const source_table = table_1.default.findOne({ name: table_src });
2046
2062
  if (!source_table)
2047
2063
  return { error: "Source table not found" };
2048
2064
  let q = {};
@@ -2051,7 +2067,7 @@ module.exports = {
2051
2067
  const source_rows = await source_table.getRows(q);
2052
2068
  if (!source_rows)
2053
2069
  return { error: "No data received" };
2054
- const table_for_insert = Table.findOne({ name: table_dest });
2070
+ const table_for_insert = table_1.default.findOne({ name: table_dest });
2055
2071
  const dest_rows = await table_for_insert.getRows({});
2056
2072
  const srcPKfield = source_table.fields.find((f) => f.primary_key).name;
2057
2073
  const src_pks = new Set(source_rows.map((r) => r[srcPKfield]));
@@ -2074,7 +2090,7 @@ module.exports = {
2074
2090
  .join(",")}})`;
2075
2091
  }
2076
2092
  // new rows
2077
- for (const newPK of set_diff(src_pks, dest_pks)) {
2093
+ for (const newPK of Array.from(set_diff(src_pks, dest_pks))) {
2078
2094
  const srcRow = source_rows.find((r) => r[srcPKfield] === newPK);
2079
2095
  const newRow = {
2080
2096
  [pk_field]: newPK,
@@ -2085,10 +2101,10 @@ module.exports = {
2085
2101
  // delete rows
2086
2102
  if (delete_rows)
2087
2103
  await table_for_insert.deleteRows({
2088
- [pk_field]: { in: [...set_diff(dest_pks, src_pks)] },
2104
+ [pk_field]: { in: Array.from(set_diff(dest_pks, src_pks)) },
2089
2105
  }, user);
2090
2106
  //update existing
2091
- for (const existPK of set_intersect(src_pks, dest_pks)) {
2107
+ for (const existPK of Array.from(set_intersect(src_pks, dest_pks))) {
2092
2108
  const srcRow = source_rows.find((r) => r[srcPKfield] === existPK);
2093
2109
  const newRow = {
2094
2110
  [pk_field]: existPK,
@@ -2111,7 +2127,7 @@ module.exports = {
2111
2127
  reload_embedded_view: {
2112
2128
  description: "Reload an embedded view without full page reload",
2113
2129
  configFields: async () => {
2114
- const views = await View.find({});
2130
+ const views = await view_1.default.find({});
2115
2131
  return [
2116
2132
  {
2117
2133
  name: "view",
@@ -2242,7 +2258,7 @@ module.exports = {
2242
2258
  options: ["Client page", "Server"],
2243
2259
  },
2244
2260
  ],
2245
- run: async ({ configuration: { seconds, sleep_where } }) => {
2261
+ run: async ({ configuration: { seconds, sleep_where }, }) => {
2246
2262
  if (sleep_where === "Server") {
2247
2263
  await sleep((seconds || 0) * 1000);
2248
2264
  return;
@@ -2258,7 +2274,7 @@ module.exports = {
2258
2274
  run: async ({ user, req }) => {
2259
2275
  if (!user?.id)
2260
2276
  return;
2261
- const u = await User.findOne({ id: user.id });
2277
+ const u = await user_1.default.findOne({ id: user.id });
2262
2278
  if (!u)
2263
2279
  return;
2264
2280
  await u.relogin(req);
@@ -2304,14 +2320,14 @@ module.exports = {
2304
2320
  ? { id: user_spec }
2305
2321
  : typeof user_spec === "object"
2306
2322
  ? user_spec
2307
- : User.valid_email(user_spec)
2323
+ : user_1.default.valid_email(user_spec)
2308
2324
  ? { email: user_spec }
2309
2325
  : user_spec === "*"
2310
2326
  ? {}
2311
2327
  : eval_expression(user_spec, row || {}, user, "Notify user user where");
2312
- const users = await User.find(user_where);
2328
+ const users = await user_1.default.find(user_where);
2313
2329
  for (const user of users) {
2314
- await Notification.create({
2330
+ await notification_1.default.create({
2315
2331
  title: interpolate(title, row, user, "notify_user title"),
2316
2332
  body: interpolate(body, row, user, "notify_user body"),
2317
2333
  link: interpolate(link, row, user, "notify_user link"),
@@ -2324,13 +2340,13 @@ module.exports = {
2324
2340
  convert_session_to_user: {
2325
2341
  description: "Convert session id fields to user key fields on a table on Login events",
2326
2342
  configFields: async ({ table }) => {
2327
- const tables = await Table.find_with_external();
2343
+ const tables = await table_1.default.find_with_external();
2328
2344
  const sess_options = {};
2329
2345
  const user_options = {};
2330
2346
  for (const table of tables) {
2331
2347
  const fields = table.getFields();
2332
2348
  sess_options[table.name] = fields
2333
- .filter((f) => f.type?.name === "String")
2349
+ .filter((f) => f.type_name === "String")
2334
2350
  .map((f) => f.name);
2335
2351
  user_options[table.name] = fields
2336
2352
  .filter((f) => f.reftable_name === "users")
@@ -2369,7 +2385,7 @@ module.exports = {
2369
2385
  run: async ({ row, configuration: { table_name, session_field, user_field }, user, }) => {
2370
2386
  if (!row?.old_session_id || !user || !session_field || !user_field)
2371
2387
  return;
2372
- const table = Table.findOne({ name: table_name });
2388
+ const table = table_1.default.findOne({ name: table_name });
2373
2389
  const rows = await table.getRows({
2374
2390
  [session_field]: row.old_session_id,
2375
2391
  [user_field]: null,
@@ -2382,17 +2398,17 @@ module.exports = {
2382
2398
  },
2383
2399
  train_model_instance: {
2384
2400
  description: "Train a model instance",
2385
- disableIf: () => !Model.has_templates,
2401
+ disableIf: () => !model_1.default.has_templates,
2386
2402
  configFields: async () => {
2387
- const models = await Model.find({});
2403
+ const models = await model_1.default.find({});
2388
2404
  const explainers = {};
2389
2405
  for (const model of models) {
2390
2406
  try {
2391
- const table = Table.findOne({ id: model.table_id });
2407
+ const table = table_1.default.findOne({ id: model.table_id });
2392
2408
  if (!model.templateObj)
2393
2409
  continue;
2394
2410
  const hyperparameter_fields = model.templateObj.hyperparameter_fields?.({
2395
- table,
2411
+ table: table,
2396
2412
  ...model,
2397
2413
  }) || [];
2398
2414
  if (hyperparameter_fields.length)
@@ -2411,7 +2427,7 @@ module.exports = {
2411
2427
  input_type: "select",
2412
2428
  required: true,
2413
2429
  options: models.map((model) => ({
2414
- label: `${model.name} [${model.modelpattern} on ${Table.findOne({ id: model.table_id }).name}]`,
2430
+ label: `${model.name} [${model.modelpattern} on ${table_1.default.findOne({ id: model.table_id }).name}]`,
2415
2431
  value: model.id,
2416
2432
  })),
2417
2433
  attributes: {
@@ -2455,7 +2471,7 @@ module.exports = {
2455
2471
  const hpars = hyperparameters
2456
2472
  ? eval_expression(hyperparameters, row || {}, user, "train_model_instance hyperparameters")
2457
2473
  : {};
2458
- const model = await Model.findOne({ id: model_id });
2474
+ const model = await model_1.default.findOne({ id: model_id });
2459
2475
  if (!model)
2460
2476
  throw new Error("model not found");
2461
2477
  const inst = await model.train_instance(use_instance_name, hpars, state);
@@ -2503,7 +2519,9 @@ module.exports = {
2503
2519
  filepath = row[file_field];
2504
2520
  if (!filepath)
2505
2521
  return;
2506
- const file = await File.findOne(filepath);
2522
+ const file = await file_1.default.findOne(filepath);
2523
+ if (!file)
2524
+ throw new Error("File not found");
2507
2525
  return {
2508
2526
  download: {
2509
2527
  filename: file.filename,