@saltcorn/admin-models 1.6.0 → 1.7.0-alpha.0

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 (52) hide show
  1. package/cjs/index.cjs +18 -0
  2. package/cjs/models/backup.cjs +18 -0
  3. package/cjs/models/config-check.cjs +18 -0
  4. package/cjs/models/pack.cjs +18 -0
  5. package/cjs/models/snapshot.cjs +18 -0
  6. package/cjs/models/tenant.cjs +18 -0
  7. package/dist/index.d.ts +6 -5
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +12 -18
  10. package/dist/index.js.map +1 -1
  11. package/dist/models/backup.d.ts +3 -2
  12. package/dist/models/backup.d.ts.map +1 -1
  13. package/dist/models/backup.js +175 -167
  14. package/dist/models/backup.js.map +1 -1
  15. package/dist/models/config-check.d.ts +2 -1
  16. package/dist/models/config-check.d.ts.map +1 -1
  17. package/dist/models/config-check.js +16 -23
  18. package/dist/models/config-check.js.map +1 -1
  19. package/dist/models/pack.d.ts +2 -1
  20. package/dist/models/pack.d.ts.map +1 -1
  21. package/dist/models/pack.js +121 -150
  22. package/dist/models/pack.js.map +1 -1
  23. package/dist/models/snapshot.d.ts +1 -1
  24. package/dist/models/snapshot.d.ts.map +1 -1
  25. package/dist/models/snapshot.js +26 -29
  26. package/dist/models/snapshot.js.map +1 -1
  27. package/dist/models/tenant.d.ts +1 -1
  28. package/dist/models/tenant.d.ts.map +1 -1
  29. package/dist/models/tenant.js +43 -48
  30. package/dist/models/tenant.js.map +1 -1
  31. package/dist/tests/backup.test.d.ts +2 -0
  32. package/dist/tests/backup.test.d.ts.map +1 -0
  33. package/dist/tests/backup.test.js +201 -0
  34. package/dist/tests/backup.test.js.map +1 -0
  35. package/dist/tests/cfgcheck.test.d.ts +2 -0
  36. package/dist/tests/cfgcheck.test.d.ts.map +1 -0
  37. package/dist/tests/cfgcheck.test.js +32 -0
  38. package/dist/tests/cfgcheck.test.js.map +1 -0
  39. package/dist/tests/pack.test.d.ts +2 -0
  40. package/dist/tests/pack.test.d.ts.map +1 -0
  41. package/dist/tests/pack.test.js +769 -0
  42. package/dist/tests/pack.test.js.map +1 -0
  43. package/dist/tests/random.test.d.ts +2 -0
  44. package/dist/tests/random.test.d.ts.map +1 -0
  45. package/dist/tests/random.test.js +150 -0
  46. package/dist/tests/random.test.js.map +1 -0
  47. package/dist/tests/tenant.test.d.ts +2 -0
  48. package/dist/tests/tenant.test.d.ts.map +1 -0
  49. package/dist/tests/tenant.test.js +106 -0
  50. package/dist/tests/tenant.test.js.map +1 -0
  51. package/gen-cjs-shims.cjs +71 -0
  52. package/package.json +31 -27
@@ -1,68 +1,33 @@
1
- "use strict";
2
1
  /**
3
2
  * Packs
4
3
  * @category saltcorn-admin-models
5
4
  * @module pack
6
5
  */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- const table_1 = __importDefault(require("@saltcorn/data/models/table"));
44
- const index_1 = __importDefault(require("@saltcorn/data/db/index"));
45
- const view_1 = __importDefault(require("@saltcorn/data/models/view"));
46
- const field_1 = __importDefault(require("@saltcorn/data/models/field"));
47
- const trigger_1 = __importDefault(require("@saltcorn/data/models/trigger"));
48
- const workflow_step_1 = __importDefault(require("@saltcorn/data/models/workflow_step"));
49
- const { getState } = require("@saltcorn/data/db/state");
50
- const node_fetch_1 = __importDefault(require("node-fetch"));
51
- const page_1 = __importDefault(require("@saltcorn/data/models/page"));
52
- const page_group_1 = __importDefault(require("@saltcorn/data/models/page_group"));
53
- const table_constraints_1 = __importDefault(require("@saltcorn/data/models/table_constraints"));
54
- const role_1 = __importDefault(require("@saltcorn/data/models/role"));
55
- const library_1 = __importDefault(require("@saltcorn/data/models/library"));
56
- const tag_1 = __importDefault(require("@saltcorn/data/models/tag"));
57
- const tag_entry_1 = __importDefault(require("@saltcorn/data/models/tag_entry"));
58
- const model_1 = __importDefault(require("@saltcorn/data/models/model"));
59
- const model_instance_1 = __importDefault(require("@saltcorn/data/models/model_instance"));
60
- const eventlog_1 = __importDefault(require("@saltcorn/data/models/eventlog"));
61
- const user_1 = __importDefault(require("@saltcorn/data/models/user"));
62
- const config_1 = __importDefault(require("@saltcorn/data/models/config"));
63
- const { save_menu_items } = config_1.default;
64
- const lodash_1 = require("lodash");
65
- const { isStale, getFetchProxyOptions } = require("@saltcorn/data/utils");
6
+ import Table from "@saltcorn/data/models/table";
7
+ import db from "@saltcorn/data/db/index";
8
+ import View from "@saltcorn/data/models/view";
9
+ import Field from "@saltcorn/data/models/field";
10
+ import Trigger from "@saltcorn/data/models/trigger";
11
+ import WorkflowStep from "@saltcorn/data/models/workflow_step";
12
+ import { getState } from "@saltcorn/data/db/state";
13
+ import fetchLib from "node-fetch";
14
+ const fetch = fetchLib; // NodeNext default-import interop for node-fetch
15
+ import Page from "@saltcorn/data/models/page";
16
+ import PageGroup from "@saltcorn/data/models/page_group";
17
+ import TableConstraint from "@saltcorn/data/models/table_constraints";
18
+ import Role from "@saltcorn/data/models/role";
19
+ import Library from "@saltcorn/data/models/library";
20
+ import Tag from "@saltcorn/data/models/tag";
21
+ import TagEntry from "@saltcorn/data/models/tag_entry";
22
+ import Model from "@saltcorn/data/models/model";
23
+ import ModelInstance from "@saltcorn/data/models/model_instance";
24
+ import EventLog from "@saltcorn/data/models/eventlog";
25
+ import User from "@saltcorn/data/models/user";
26
+ import * as config from "@saltcorn/data/models/config";
27
+ const { save_menu_items } = config;
28
+ import lodash from "lodash";
29
+ const { isEqual } = lodash;
30
+ import { isStale, getFetchProxyOptions } from "@saltcorn/data/utils";
66
31
  /**
67
32
  * Table Pack
68
33
  * @function
@@ -71,7 +36,7 @@ const { isStale, getFetchProxyOptions } = require("@saltcorn/data/utils");
71
36
  const table_pack = async (nameOrTable) => {
72
37
  // todo check this change
73
38
  const table = typeof nameOrTable === "string"
74
- ? table_1.default.findOne({ name: nameOrTable })
39
+ ? Table.findOne({ name: nameOrTable })
75
40
  : nameOrTable;
76
41
  if (!table)
77
42
  throw new Error(`Unable to find table '${nameOrTable}'`);
@@ -82,7 +47,7 @@ const table_pack = async (nameOrTable) => {
82
47
  return o;
83
48
  };
84
49
  //const triggers = await Trigger.find({ table_id: table.id });
85
- const constraints = await table_constraints_1.default.find({ table_id: table.id });
50
+ const constraints = await TableConstraint.find({ table_id: table.id });
86
51
  return {
87
52
  name: table.name,
88
53
  description: table.description,
@@ -94,6 +59,7 @@ const table_pack = async (nameOrTable) => {
94
59
  provider_name: table.provider_name,
95
60
  provider_cfg: table.provider_cfg,
96
61
  ownership_formula: table.ownership_formula,
62
+ rls_enabled: table.rls_enabled,
97
63
  fields: fields.map((f) => strip_ids(f.toJson)),
98
64
  //triggers: triggers.map((tr) => tr.toJson),
99
65
  constraints: constraints.map((c) => c.toJson),
@@ -107,10 +73,10 @@ const table_pack = async (nameOrTable) => {
107
73
  * @param name
108
74
  */
109
75
  const view_pack = async (name) => {
110
- const view = typeof name === "string" ? await view_1.default.findOne({ name }) : name;
76
+ const view = typeof name === "string" ? await View.findOne({ name }) : name;
111
77
  if (!view)
112
78
  throw new Error(`Unable to find view '${name}'`);
113
- const table = table_1.default.findOne({ id: view.table_id });
79
+ const table = Table.findOne({ id: view.table_id });
114
80
  //if (!table)
115
81
  // throw new Error(`Unable to find table with id '${view.table_id}'`);
116
82
  return {
@@ -132,7 +98,7 @@ const view_pack = async (name) => {
132
98
  * @param name
133
99
  */
134
100
  const plugin_pack = async (name) => {
135
- const Plugin = (await Promise.resolve().then(() => __importStar(require("@saltcorn/data/models/plugin")))).default;
101
+ const Plugin = (await import("@saltcorn/data/models/plugin")).default;
136
102
  const plugin = await Plugin.findOne({ name });
137
103
  if (!plugin)
138
104
  throw new Error(`Unable to find plugin '${name}'`);
@@ -160,7 +126,7 @@ const plugin_pack = async (name) => {
160
126
  * @param name name of the page
161
127
  */
162
128
  const page_pack = async (name) => {
163
- const page = typeof name === "string" ? page_1.default.findOne({ name }) : name;
129
+ const page = typeof name === "string" ? Page.findOne({ name }) : name;
164
130
  if (!page)
165
131
  throw new Error(`Unable to find page '${name}'`);
166
132
  const root_page_for_roles = await page.is_root_page_for_roles();
@@ -181,7 +147,7 @@ const page_pack = async (name) => {
181
147
  * @param name name of the page group
182
148
  */
183
149
  const page_group_pack = async (name) => {
184
- const group = page_group_1.default.findOne({ name });
150
+ const group = PageGroup.findOne({ name });
185
151
  if (!group)
186
152
  throw new Error(`Unable to find page group '${name}'`);
187
153
  return {
@@ -191,7 +157,7 @@ const page_group_pack = async (name) => {
191
157
  random_allocation: group.random_allocation,
192
158
  members: group.members.map((m) => {
193
159
  // could get slow (caching ?)
194
- const page = page_1.default.findOne({ id: m.page_id });
160
+ const page = Page.findOne({ id: m.page_id });
195
161
  if (!page)
196
162
  throw new Error(`Unable to find page '${m.page_id}'`);
197
163
  return {
@@ -209,7 +175,7 @@ const page_group_pack = async (name) => {
209
175
  * @param name
210
176
  */
211
177
  const library_pack = async (name) => {
212
- const lib = await library_1.default.findOne({ name });
178
+ const lib = await Library.findOne({ name });
213
179
  return lib.toJson;
214
180
  };
215
181
  const orderWorkflowSteps = (steps) => {
@@ -318,10 +284,10 @@ const orderWorkflowSteps = (steps) => {
318
284
  * @param name
319
285
  */
320
286
  const trigger_pack = async (name) => {
321
- const trig = typeof name === "string" ? await trigger_1.default.findOne({ name }) : name;
287
+ const trig = typeof name === "string" ? await Trigger.findOne({ name }) : name;
322
288
  const pack = trig.toJson;
323
289
  if (trig.action === "Workflow") {
324
- const steps = await workflow_step_1.default.find({ trigger_id: trig.id });
290
+ const steps = await WorkflowStep.find({ trigger_id: trig.id });
325
291
  const ordered = orderWorkflowSteps(steps.map((s) => s.toJson));
326
292
  pack.steps = ordered;
327
293
  }
@@ -334,7 +300,7 @@ const trigger_pack = async (name) => {
334
300
  * @returns {Promise<object>}
335
301
  */
336
302
  const role_pack = async (role) => {
337
- return await role_1.default.findOne({ role });
303
+ return await Role.findOne({ role });
338
304
  };
339
305
  /**
340
306
  * 'page/view/table/trigger' ids are replaced by names
@@ -342,32 +308,32 @@ const role_pack = async (role) => {
342
308
  * @returns
343
309
  */
344
310
  const tag_pack = async (name) => {
345
- const tag = typeof name === "string" ? await tag_1.default.findOne({ name }) : name;
311
+ const tag = typeof name === "string" ? await Tag.findOne({ name }) : name;
346
312
  if (!tag)
347
313
  throw new Error(`Unable to find tag '${name}'`);
348
314
  const entries = await tag.getEntries();
349
315
  const withNames = entries.map((e) => {
350
316
  const result = {};
351
317
  if (e.page_id) {
352
- const page = page_1.default.findOne({ id: e.page_id });
318
+ const page = Page.findOne({ id: e.page_id });
353
319
  if (!page)
354
320
  throw new Error(`Unable to find page '${e.page_id}'`);
355
321
  result.page_name = page.name;
356
322
  }
357
323
  if (e.view_id) {
358
- const view = view_1.default.findOne({ id: e.view_id });
324
+ const view = View.findOne({ id: e.view_id });
359
325
  if (!view)
360
326
  throw new Error(`Unable to find view '${e.view_id}'`);
361
327
  result.view_name = view.name;
362
328
  }
363
329
  if (e.table_id) {
364
- const table = table_1.default.findOne({ id: e.table_id });
330
+ const table = Table.findOne({ id: e.table_id });
365
331
  if (!table)
366
332
  throw new Error(`Unable to find table '${e.table_id}'`);
367
333
  result.table_name = table.name;
368
334
  }
369
335
  if (e.trigger_id) {
370
- const trigger = trigger_1.default.findOne({ id: e.trigger_id });
336
+ const trigger = Trigger.findOne({ id: e.trigger_id });
371
337
  if (!trigger)
372
338
  throw new Error(`Unable to find trigger '${e.trigger_id}'`);
373
339
  result.trigger_name = trigger.name;
@@ -386,10 +352,10 @@ const tag_pack = async (name) => {
386
352
  * @returns
387
353
  */
388
354
  const model_pack = async (name, tableName) => {
389
- const table = table_1.default.findOne({ name: tableName });
355
+ const table = Table.findOne({ name: tableName });
390
356
  if (!table)
391
357
  throw new Error(`Model-table '${tableName}' not found`);
392
- const model = await model_1.default.findOne({ name, table_id: table.id });
358
+ const model = await Model.findOne({ name, table_id: table.id });
393
359
  if (!model)
394
360
  throw new Error(`Model '${name}' not found`);
395
361
  return model.toJson;
@@ -402,13 +368,13 @@ const model_pack = async (name, tableName) => {
402
368
  * @returns
403
369
  */
404
370
  const model_instance_pack = async (instanceName, modelName, tableName) => {
405
- const table = table_1.default.findOne({ name: tableName });
371
+ const table = Table.findOne({ name: tableName });
406
372
  if (!table)
407
373
  throw new Error(`Model-table '${tableName}' not found`);
408
- const model = await model_1.default.findOne({ name: modelName, table_id: table.id });
374
+ const model = await Model.findOne({ name: modelName, table_id: table.id });
409
375
  if (!model)
410
376
  throw new Error(`Unable to find model '${modelName}'`);
411
- const instance = await model_instance_1.default.findOne({
377
+ const instance = await ModelInstance.findOne({
412
378
  name: instanceName,
413
379
  model_id: model.id,
414
380
  });
@@ -432,7 +398,7 @@ const event_log_pack = async (eventLog) => {
432
398
  const userId = result.user_id;
433
399
  if (result.user_id)
434
400
  delete result.user_id;
435
- const user = await user_1.default.findOne({ id: userId });
401
+ const user = await User.findOne({ id: userId });
436
402
  if (user)
437
403
  result.user_email = user.email;
438
404
  }
@@ -444,16 +410,16 @@ const event_log_pack = async (eventLog) => {
444
410
  */
445
411
  const can_install_pack = async (pack) => {
446
412
  const warns = new Array();
447
- const allViews = (await view_1.default.find()).map((t) => ({
413
+ const allViews = (await View.find()).map((t) => ({
448
414
  name: t.name,
449
- table: table_1.default.findOne({ id: t.table_id })?.name,
415
+ table: Table.findOne({ id: t.table_id })?.name,
450
416
  }));
451
417
  for (const pt of pack.tables || []) {
452
- const matchTable = table_1.default.findOne({ name: pt.name });
418
+ const matchTable = Table.findOne({ name: pt.name });
453
419
  if (!matchTable)
454
420
  continue;
455
421
  //failure conditions: existing field with different type (warn)
456
- pt.fields.forEach((f) => {
422
+ (pt.fields || []).forEach((f) => {
457
423
  const ex = matchTable.getField(f.name);
458
424
  if (ex && ex.type_name !== f.type) {
459
425
  warns.push(`Clashing field types for ${f.name} on table ${pt.name}`);
@@ -463,8 +429,8 @@ const can_install_pack = async (pack) => {
463
429
  const matchViews = allViews.filter((dbt) => (pack.views || []).some((pv) => pv.name === dbt.name && dbt.table && pv.table !== dbt.table));
464
430
  pack.tables.forEach((t) => {
465
431
  if (t.name === "users") {
466
- const userTable = table_1.default.findOne({ name: "users" });
467
- t.fields.forEach((f) => {
432
+ const userTable = Table.findOne({ name: "users" });
433
+ (t.fields || []).forEach((f) => {
468
434
  if (f.required) {
469
435
  const ex = userTable?.getField(f.name);
470
436
  if (!ex || !ex.required)
@@ -488,22 +454,22 @@ const can_install_pack = async (pack) => {
488
454
  */
489
455
  const uninstall_pack = async (pack, name) => {
490
456
  for (const pageGroupSpec of pack.page_groups || []) {
491
- const pageGroup = page_group_1.default.findOne({ name: pageGroupSpec.name });
457
+ const pageGroup = PageGroup.findOne({ name: pageGroupSpec.name });
492
458
  if (pageGroup)
493
459
  await pageGroup.delete();
494
460
  }
495
461
  for (const pageSpec of pack.pages || []) {
496
- const page = page_1.default.findOne({ name: pageSpec.name });
462
+ const page = Page.findOne({ name: pageSpec.name });
497
463
  if (page)
498
464
  await page.delete();
499
465
  }
500
466
  for (const viewSpec of pack.views) {
501
- const view = view_1.default.findOne({ name: viewSpec.name });
467
+ const view = View.findOne({ name: viewSpec.name });
502
468
  if (view)
503
469
  await view.delete();
504
470
  }
505
471
  for (const tableSpec of pack.tables) {
506
- const table = table_1.default.findOne({ name: tableSpec.name });
472
+ const table = Table.findOne({ name: tableSpec.name });
507
473
  if (table && table.name === "users")
508
474
  continue;
509
475
  if (table) {
@@ -512,14 +478,14 @@ const uninstall_pack = async (pack, name) => {
512
478
  if (field.is_fkey)
513
479
  await field.delete();
514
480
  }
515
- const triggers = trigger_1.default.find({ table_id: table.id });
481
+ const triggers = Trigger.find({ table_id: table.id });
516
482
  for (const trigger of triggers) {
517
483
  await trigger.delete();
518
484
  }
519
485
  }
520
486
  }
521
487
  for (const tableSpec of pack.tables) {
522
- const table = table_1.default.findOne({ name: tableSpec.name });
488
+ const table = Table.findOne({ name: tableSpec.name });
523
489
  if (table && table.name !== "users")
524
490
  await table.delete();
525
491
  }
@@ -595,7 +561,7 @@ const filter_pack = (pack, options) => {
595
561
  * @param bare_tables
596
562
  */
597
563
  const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = false) => {
598
- const Plugin = (await Promise.resolve().then(() => __importStar(require("@saltcorn/data/models/plugin")))).default;
564
+ const Plugin = (await import("@saltcorn/data/models/plugin")).default;
599
565
  for (const plugin of pack.plugins) {
600
566
  if (plugin.source === "npm" && plugin.name.startsWith("@saltcorn/"))
601
567
  plugin.name = plugin.name.replace("@saltcorn/", "");
@@ -613,18 +579,18 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
613
579
  }
614
580
  for (const role of pack.roles || []) {
615
581
  role.id = old_to_new_role(role.id);
616
- const existing = await role_1.default.findOne({ id: role.id });
582
+ const existing = await Role.findOne({ id: role.id });
617
583
  if (existing)
618
584
  await existing.update(role);
619
585
  else
620
- await role_1.default.create(role);
586
+ await Role.create(role);
621
587
  }
622
588
  for (const lib of pack.library || []) {
623
- const exisiting = await library_1.default.findOne({ name: lib.name });
589
+ const exisiting = await Library.findOne({ name: lib.name });
624
590
  if (exisiting)
625
591
  await exisiting.update(lib);
626
592
  else
627
- await library_1.default.create(lib);
593
+ await Library.create(lib);
628
594
  }
629
595
  // create tables (users skipped because created by other ways)
630
596
  // tables with a provider go last because they can depend on presence
@@ -634,8 +600,8 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
634
600
  const { id, ownership_field_id, ownership_field_name, triggers, constraints, fields, ...updrow } = tableSpec;
635
601
  if (tableSpec.name !== "users") {
636
602
  let tbl_pk;
637
- const existing = table_1.default.findOne({ name: tableSpec.name });
638
- getState().log(5, `Restoring table pack name=${tableSpec.name} existing=${!!existing} tenant=${index_1.default.getTenantSchema()}`);
603
+ const existing = Table.findOne({ name: tableSpec.name });
604
+ getState().log(5, `Restoring table pack name=${tableSpec.name} existing=${!!existing} tenant=${db.getTenantSchema()}`);
639
605
  if (existing) {
640
606
  tbl_pk = await existing.getField(existing.pk_name);
641
607
  await existing.update(updrow);
@@ -643,34 +609,34 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
643
609
  else {
644
610
  tableSpec.min_role_read = old_to_new_role(tableSpec.min_role_read);
645
611
  tableSpec.min_role_write = old_to_new_role(tableSpec.min_role_write);
646
- const table = await table_1.default.create(tableSpec.name, tableSpec);
612
+ const table = await Table.create(tableSpec.name, tableSpec);
647
613
  [tbl_pk] = table.getFields();
648
614
  } //set pk
649
- const pack_pk = tableSpec.fields.find((f) => f.primary_key);
615
+ const pack_pk = (tableSpec.fields || []).find((f) => f.primary_key);
650
616
  if (pack_pk && tbl_pk) {
651
617
  await tbl_pk.update(pack_pk);
652
618
  }
653
619
  }
654
620
  else {
655
- await user_1.default.table.update(updrow);
621
+ await User.table.update(updrow);
656
622
  }
657
623
  }
658
624
  await getState().refresh_tables(true);
659
625
  for (const tableSpec of pack.tables) {
660
- const _table = table_1.default.findOne({ name: tableSpec.name });
626
+ const _table = Table.findOne({ name: tableSpec.name });
661
627
  if (!_table)
662
628
  throw new Error(`Unable to find table '${tableSpec.name}'`);
663
629
  const exfields = _table.getFields();
664
630
  if (!_table.provider_name)
665
- for (const field of tableSpec.fields) {
631
+ for (const field of tableSpec.fields || []) {
666
632
  const exfield = exfields.find((f) => f.name === field.name);
667
633
  if (!((_table.name === "users" &&
668
634
  (field.name === "email" || field.name === "role_id")) ||
669
635
  exfield)) {
670
636
  if (_table.name === "users" && field.required)
671
- await field_1.default.create({ table: _table, ...field, required: false }, bare_tables);
637
+ await Field.create({ table: _table, ...field, required: false }, bare_tables);
672
638
  else
673
- await field_1.default.create({ table: _table, ...field }, bare_tables);
639
+ await Field.create({ table: _table, ...field }, bare_tables);
674
640
  }
675
641
  else if (exfield &&
676
642
  !(_table.name === "users" &&
@@ -682,33 +648,38 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
682
648
  }
683
649
  for (const { table, ...trigger } of tableSpec.triggers || []) {
684
650
  trigger.min_role = old_to_new_role(trigger.min_role);
685
- await trigger_1.default.create({ table: _table, ...trigger }); //legacy, not in new packs
651
+ await Trigger.create({ table: _table, ...trigger }); //legacy, not in new packs
686
652
  }
687
653
  const existing_constraints = _table.constraints;
688
654
  for (const constraint of tableSpec.constraints || []) {
689
655
  if (!existing_constraints.find((excon) => excon.type === constraint.type &&
690
- (0, lodash_1.isEqual)(excon.configuration, constraint.configuration)))
691
- await table_constraints_1.default.create({ table: _table, ...constraint });
656
+ isEqual(excon.configuration, constraint.configuration)))
657
+ await TableConstraint.create({ table: _table, ...constraint });
692
658
  }
693
659
  if (tableSpec.ownership_field_name) {
694
- const owner_field = await field_1.default.findOne({
660
+ const owner_field = await Field.findOne({
695
661
  table_id: _table.id,
696
662
  name: tableSpec.ownership_field_name,
697
663
  });
698
664
  await _table.update({ ownership_field_id: owner_field.id });
699
665
  }
666
+ else if (tableSpec.rls_enabled && tableSpec.ownership_formula) {
667
+ const freshTable = Table.findOne({ name: _table.name });
668
+ if (freshTable)
669
+ await freshTable.enableOwnershipRLS();
670
+ }
700
671
  }
701
672
  await getState().refresh_tables(true);
702
673
  for (const viewSpec of pack.views) {
703
674
  viewSpec.min_role = old_to_new_role(viewSpec.min_role);
704
675
  const { table, on_menu, menu_label, on_root_page, ...viewNoTable } = viewSpec;
705
- const vtable = table_1.default.findOne({ name: table });
706
- const existing = view_1.default.findOne({ name: viewNoTable.name });
676
+ const vtable = Table.findOne({ name: table });
677
+ const existing = View.findOne({ name: viewNoTable.name });
707
678
  if (existing?.id) {
708
- await view_1.default.update(viewNoTable, existing.id);
679
+ await View.update(viewNoTable, existing.id);
709
680
  }
710
681
  else {
711
- await view_1.default.create({
682
+ await View.create({
712
683
  ...viewNoTable,
713
684
  table_id: vtable ? vtable.id : null,
714
685
  });
@@ -725,22 +696,22 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
725
696
  for (const triggerSpec of pack.triggers || []) {
726
697
  triggerSpec.min_role = old_to_new_role(triggerSpec.min_role);
727
698
  let id;
728
- const existing = await trigger_1.default.findOne({ name: triggerSpec.name });
699
+ const existing = await Trigger.findOne({ name: triggerSpec.name });
729
700
  if (existing) {
730
701
  const { table_name, steps, ...tsNoTableName } = triggerSpec;
731
702
  if (table_name)
732
- tsNoTableName.table_id = table_1.default.findOne({ name: table_name })?.id;
733
- await trigger_1.default.update(existing.id, tsNoTableName);
703
+ tsNoTableName.table_id = Table.findOne({ name: table_name })?.id;
704
+ await Trigger.update(existing.id, tsNoTableName);
734
705
  id = existing.id;
735
706
  }
736
707
  else {
737
- const newTrigger = await trigger_1.default.create(triggerSpec);
708
+ const newTrigger = await Trigger.create(triggerSpec);
738
709
  id = newTrigger.id;
739
710
  }
740
711
  if (triggerSpec.action === "Workflow" && triggerSpec.steps) {
741
- await workflow_step_1.default.deleteForTrigger(id);
712
+ await WorkflowStep.deleteForTrigger(id);
742
713
  for (const step of triggerSpec.steps) {
743
- await workflow_step_1.default.create({ ...step, trigger_id: id });
714
+ await WorkflowStep.create({ ...step, trigger_id: id });
744
715
  }
745
716
  }
746
717
  }
@@ -748,11 +719,11 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
748
719
  for (const pageFullSpec of pack.pages || []) {
749
720
  pageFullSpec.min_role = old_to_new_role(pageFullSpec.min_role);
750
721
  const { root_page_for_roles, menu_label, ...pageSpec } = pageFullSpec;
751
- const existing = page_1.default.findOne({ name: pageSpec.name });
722
+ const existing = Page.findOne({ name: pageSpec.name });
752
723
  if (existing?.id)
753
- await page_1.default.update(existing.id, pageSpec);
724
+ await Page.update(existing.id, pageSpec);
754
725
  else
755
- await page_1.default.create(pageSpec);
726
+ await Page.create(pageSpec);
756
727
  for (const role of root_page_for_roles || []) {
757
728
  const current_root = getState().getConfigCopy(role + "_home", "");
758
729
  if (!current_root || current_root === "")
@@ -770,19 +741,19 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
770
741
  for (const pageGroupSpec of pack.page_groups || []) {
771
742
  pageGroupSpec.min_role = old_to_new_role(pageGroupSpec.min_role);
772
743
  const { members, ...pageGroupNoMembers } = pageGroupSpec;
773
- let existing = page_group_1.default.findOne({ name: pageGroupSpec.name });
744
+ let existing = PageGroup.findOne({ name: pageGroupSpec.name });
774
745
  if (existing?.id) {
775
746
  await existing.clearMembers(); // or merge ?
776
- await page_group_1.default.update(existing.id, pageGroupNoMembers);
747
+ await PageGroup.update(existing.id, pageGroupNoMembers);
777
748
  }
778
749
  else
779
- existing = await page_group_1.default.create(pageGroupNoMembers);
750
+ existing = await PageGroup.create(pageGroupNoMembers);
780
751
  const group = existing;
781
752
  if (!group)
782
753
  throw new Error(`Unable to create page group '${pageGroupSpec.name}'`);
783
754
  for (const member of members || []) {
784
755
  const { page_name, ...memberNoPageName } = member;
785
- const page = page_1.default.findOne({ name: page_name });
756
+ const page = Page.findOne({ name: page_name });
786
757
  if (!page)
787
758
  throw new Error(`Unable to find page '${member.page_name}'`);
788
759
  await group.addMember({ ...memberNoPageName, page_id: page.id });
@@ -793,25 +764,25 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
793
764
  ? tag.entries.map((e) => {
794
765
  const result = {};
795
766
  if (e.page_name) {
796
- const page = page_1.default.findOne({ name: e.page_name });
767
+ const page = Page.findOne({ name: e.page_name });
797
768
  if (!page)
798
769
  throw new Error(`Unable to find page '${e.page_name}'`);
799
770
  result.page_id = page.id;
800
771
  }
801
772
  if (e.view_name) {
802
- const view = view_1.default.findOne({ name: e.view_name });
773
+ const view = View.findOne({ name: e.view_name });
803
774
  if (!view)
804
775
  throw new Error(`Unable to find view '${e.view_name}'`);
805
776
  result.view_id = view.id;
806
777
  }
807
778
  if (e.table_name) {
808
- const table = table_1.default.findOne({ name: e.table_name });
779
+ const table = Table.findOne({ name: e.table_name });
809
780
  if (!table)
810
781
  throw new Error(`Unable to find table '${e.table_name}'`);
811
782
  result.table_id = table.id;
812
783
  }
813
784
  if (e.trigger_name) {
814
- const trigger = trigger_1.default.findOne({ name: e.trigger_name });
785
+ const trigger = Trigger.findOne({ name: e.trigger_name });
815
786
  if (!trigger)
816
787
  throw new Error(`Unable to find trigger '${e.trigger_name}'`);
817
788
  result.trigger_id = trigger.id;
@@ -819,17 +790,17 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
819
790
  return result;
820
791
  })
821
792
  : undefined;
822
- const existing = await tag_1.default.findOne({ name: tag.name });
793
+ const existing = await Tag.findOne({ name: tag.name });
823
794
  if (!existing)
824
- await tag_1.default.create({ name: tag.name, entries });
795
+ await Tag.create({ name: tag.name, entries });
825
796
  else {
826
797
  for (const entry of entries || []) {
827
- await tag_entry_1.default.create({ tag_id: existing.id, ...entry });
798
+ await TagEntry.create({ tag_id: existing.id, ...entry });
828
799
  }
829
800
  }
830
801
  }
831
802
  for (const model of pack.models || []) {
832
- const mTbl = table_1.default.findOne({ name: model.table_name });
803
+ const mTbl = Table.findOne({ name: model.table_name });
833
804
  if (!mTbl)
834
805
  throw new Error(`Unable to find table '${model.table_name}'`);
835
806
  if (!mTbl.id)
@@ -839,13 +810,13 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
839
810
  if (table_name === mTbl.name)
840
811
  cfg.table_id = mTbl.id;
841
812
  else {
842
- const cfgTbl = table_1.default.findOne({ name: table_name });
813
+ const cfgTbl = Table.findOne({ name: table_name });
843
814
  if (!cfgTbl)
844
815
  throw new Error(`Unable to find table '${table_name}'`);
845
816
  cfg.table_id = cfgTbl.id;
846
817
  }
847
818
  }
848
- const existing = await model_1.default.findOne({
819
+ const existing = await Model.findOne({
849
820
  name: model.name,
850
821
  table_id: mTbl.id,
851
822
  });
@@ -855,7 +826,7 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
855
826
  configuration: cfg,
856
827
  });
857
828
  else
858
- await model_1.default.create({
829
+ await Model.create({
859
830
  name: model.name,
860
831
  table_id: mTbl.id,
861
832
  modelpattern: model.modelpattern,
@@ -863,10 +834,10 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
863
834
  });
864
835
  }
865
836
  for (const modelInst of pack.model_instances || []) {
866
- const table = table_1.default.findOne({ name: modelInst.table_name });
837
+ const table = Table.findOne({ name: modelInst.table_name });
867
838
  if (!table)
868
839
  throw new Error(`Unable to find table '${modelInst.table_name}'`);
869
- const model = await model_1.default.findOne({
840
+ const model = await Model.findOne({
870
841
  name: modelInst.model_name,
871
842
  table_id: table.id,
872
843
  });
@@ -874,7 +845,7 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
874
845
  throw new Error(`Unable to find table '${modelInst.model_name}'`);
875
846
  const { model_name, ...mICfg } = modelInst;
876
847
  mICfg.model_id = model.id;
877
- const existing = await model_instance_1.default.findOne({
848
+ const existing = await ModelInstance.findOne({
878
849
  name: modelInst.name,
879
850
  model_id: model.id,
880
851
  });
@@ -883,20 +854,20 @@ const install_pack = async (pack, name, loadAndSaveNewPlugin, bare_tables = fals
883
854
  await existing.update(updrow);
884
855
  }
885
856
  else
886
- await model_instance_1.default.create(mICfg);
857
+ await ModelInstance.create(mICfg);
887
858
  }
888
859
  for (const eventLog of pack.event_logs || []) {
889
860
  const { user_email, ...rest } = eventLog;
890
861
  const eventLogCfg = rest;
891
862
  if (user_email) {
892
- const user = await user_1.default.findOne({ email: user_email });
863
+ const user = await User.findOne({ email: user_email });
893
864
  if (user)
894
865
  eventLogCfg.user_id = user.id;
895
866
  else {
896
867
  getState().log(3, `User '${user_email}' not found for event log ${eventLog.event_type}`);
897
868
  }
898
869
  }
899
- await eventlog_1.default.create(eventLogCfg);
870
+ await EventLog.create(eventLogCfg);
900
871
  }
901
872
  if (pack.config) {
902
873
  const state = getState();
@@ -958,7 +929,7 @@ const fetch_available_packs_from_store = async () => {
958
929
  //const { getState } = require("../db/state");
959
930
  const packs_store_endpoint = getState().getConfig("packs_store_endpoint", false);
960
931
  //console.log(`[fetch_available_packs_from_store] packs_store_endpoint:%s`, packs_store_endpoint);
961
- const response = await (0, node_fetch_1.default)(
932
+ const response = await fetch(
962
933
  //"http://store.saltcorn.com/api/packs?fields=name,description"
963
934
  packs_store_endpoint + "?fields=name,description", getFetchProxyOptions());
964
935
  const json = await response.json();
@@ -973,7 +944,7 @@ const fetch_pack_by_name = async (name) => {
973
944
  //const { getState } = require("../db/state");
974
945
  const packs_store_endpoint = getState().getConfig("packs_store_endpoint", false);
975
946
  //console.log(`[fetch_pack_by_name] packs_store_endpoint:%s`, packs_store_endpoint);
976
- const response = await (0, node_fetch_1.default)(
947
+ const response = await fetch(
977
948
  //"http://store.saltcorn.com/api/packs?name=" + encodeURIComponent(name)
978
949
  packs_store_endpoint + "?name=" + encodeURIComponent(name), getFetchProxyOptions());
979
950
  const json = await response.json();
@@ -1026,7 +997,7 @@ const create_pack_from_tag = async (tag) => {
1026
997
  return pack;
1027
998
  //TODO add models, plugins
1028
999
  };
1029
- module.exports = {
1000
+ export default {
1030
1001
  table_pack,
1031
1002
  view_pack,
1032
1003
  plugin_pack,