@opengis/fastify-table 1.4.49 → 1.4.51

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 (107) hide show
  1. package/package.json +1 -1
  2. package/server/helpers/core/buttonFilePreview.js +0 -1
  3. package/server/helpers/core/buttonHelper.js +6 -5
  4. package/server/helpers/format/formatAuto.js +2 -2
  5. package/server/helpers/format/formatDate.js +3 -3
  6. package/server/helpers/format/formatDigit.js +1 -1
  7. package/server/helpers/format/formatNum.js +9 -5
  8. package/server/helpers/format/formatNumber.js +6 -6
  9. package/server/helpers/format/formatRelative.js +2 -2
  10. package/server/helpers/format/formatUnit.js +1 -1
  11. package/server/helpers/format/num_format.js +1 -1
  12. package/server/helpers/format/set.js +3 -2
  13. package/server/helpers/funcs/_math.js +3 -3
  14. package/server/helpers/funcs/contentList.js +8 -5
  15. package/server/helpers/funcs/empty.js +1 -1
  16. package/server/helpers/funcs/ifCondAnd.js +2 -1
  17. package/server/helpers/funcs/ifCondOr.js +2 -2
  18. package/server/helpers/funcs/inc.js +1 -2
  19. package/server/helpers/funcs/json.js +2 -2
  20. package/server/helpers/funcs/qrcode.js +5 -3
  21. package/server/helpers/funcs/round.js +2 -2
  22. package/server/helpers/funcs/select.js +7 -11
  23. package/server/helpers/list/buttonHelper.js +6 -5
  24. package/server/helpers/list/utils/button.js +1 -3
  25. package/server/helpers/list/utils/buttonDel.js +2 -3
  26. package/server/helpers/list/utils/buttonEdit.js +2 -5
  27. package/server/helpers/string/concat.js +1 -1
  28. package/server/helpers/string/split.js +2 -2
  29. package/server/helpers/string/str_replace.js +11 -10
  30. package/server/helpers/string/substr.js +1 -1
  31. package/server/helpers/string/translit.js +1 -1
  32. package/server/helpers/string/utils/alphabet.js +1 -1
  33. package/server/helpers/utils/button.js +1 -3
  34. package/server/helpers/utils/buttonAdd.js +2 -4
  35. package/server/helpers/utils/buttonDel.js +4 -4
  36. package/server/helpers/utils/buttonDownload.js +1 -1
  37. package/server/helpers/utils/buttonEdit.js +2 -4
  38. package/server/helpers/utils/buttonPreview.js +1 -1
  39. package/server/helpers/utils/mdToHTML.js +2 -2
  40. package/server/helpers/utils/paddingNumber.js +2 -2
  41. package/server/plugins/cron/funcs/interval2ms.js +1 -1
  42. package/server/plugins/cron/index.js +2 -1
  43. package/server/plugins/crud/funcs/dataInsert.js +1 -0
  44. package/server/plugins/crud/funcs/utils/logChanges.js +1 -1
  45. package/server/plugins/crud/funcs/validateData.js +1 -0
  46. package/server/plugins/crud/index.js +1 -1
  47. package/server/plugins/file/uploadMultiPart.js +1 -0
  48. package/server/plugins/grpc/grpc.js +3 -0
  49. package/server/plugins/grpc/office2pdf.js +2 -0
  50. package/server/plugins/hook/funcs/applyHook.js +1 -0
  51. package/server/plugins/hook/index.js +5 -5
  52. package/server/plugins/logger/createFileStream.js +3 -1
  53. package/server/plugins/logger/getLogger.js +2 -0
  54. package/server/plugins/logger/serializers.js +5 -5
  55. package/server/plugins/logger/timestampWithTimeZone.js +1 -1
  56. package/server/plugins/md/funcs/formatMdoc.js +7 -7
  57. package/server/plugins/md/funcs/mdToHTML.js +2 -2
  58. package/server/plugins/metric/index.js +1 -1
  59. package/server/plugins/migration/exec.migrations.js +1 -1
  60. package/server/plugins/migration/exec.sql.js +1 -0
  61. package/server/plugins/migration/index.js +3 -3
  62. package/server/plugins/pg/funcs/autoIndex.js +1 -0
  63. package/server/plugins/pg/funcs/getDBParams.js +4 -2
  64. package/server/plugins/pg/funcs/init.js +1 -0
  65. package/server/plugins/policy/index.js +2 -3
  66. package/server/plugins/redis/funcs/getRedis.js +1 -0
  67. package/server/plugins/redis/index.js +1 -1
  68. package/server/plugins/sqlite/funcs/getSqlite.js +2 -0
  69. package/server/plugins/sqlite/funcs/init.js +2 -0
  70. package/server/plugins/sqlite/index.js +1 -1
  71. package/server/plugins/sqlite/sqliteClients.js +2 -0
  72. package/server/plugins/table/funcs/addTemplateDir.js +1 -0
  73. package/server/plugins/table/funcs/customTokens.js +1 -1
  74. package/server/plugins/table/funcs/getFilterSQL/index.js +2 -2
  75. package/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +1 -1
  76. package/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +3 -1
  77. package/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +7 -7
  78. package/server/plugins/table/funcs/getSelect.js +3 -3
  79. package/server/plugins/table/funcs/getSelectMeta.js +4 -1
  80. package/server/plugins/table/funcs/getTemplate.js +4 -4
  81. package/server/plugins/table/funcs/getTemplatePath.js +4 -3
  82. package/server/plugins/table/funcs/getTemplateSync.js +1 -1
  83. package/server/plugins/table/funcs/metaFormat/getSelectVal.js +1 -1
  84. package/server/plugins/table/funcs/metaFormat/index.js +2 -4
  85. package/server/plugins/table/funcs/userTokens.js +1 -1
  86. package/server/plugins/table/index.js +1 -1
  87. package/server/plugins/util/funcs/eventStream.js +1 -0
  88. package/server/plugins/util/funcs/flattenObject.js +5 -4
  89. package/server/plugins/util/funcs/unflattenObject.js +13 -3
  90. package/server/plugins/util/index.js +3 -3
  91. package/server/plugins/yml/funcs/json2yml.js +2 -2
  92. package/server/plugins/yml/funcs/yml2json.js +5 -4
  93. package/server/routes/crud/controllers/update.js +1 -1
  94. package/server/routes/dblist/index.mjs +1 -1
  95. package/server/routes/file/controllers/export.js +1 -0
  96. package/server/routes/file/controllers/resize.js +1 -0
  97. package/server/routes/file/controllers/resizeAll.js +1 -0
  98. package/server/routes/logger/controllers/logger.test.api.js +1 -0
  99. package/server/routes/logger/controllers/utils/getRootDir.js +1 -0
  100. package/server/routes/table/controllers/dataInfo.js +11 -9
  101. package/server/routes/table/controllers/filter.js +4 -6
  102. package/server/routes/table/controllers/tableInfo.js +1 -1
  103. package/server/routes/table/controllers/utils/conditions.js +3 -3
  104. package/server/routes/table/controllers/utils/locales.js +1 -1
  105. package/server/routes/table/functions/getData.js +9 -6
  106. package/server/routes/util/controllers/status.monitor.js +1 -1
  107. package/server/plugins/migration/get.caller.dir.js +0 -26
@@ -1,13 +1,14 @@
1
- import { load } from "js-yaml";
1
+ import { load } from 'js-yaml';
2
2
 
3
3
  function loadSafe(yml) {
4
4
  try {
5
5
  return load(yml);
6
- } catch (err) {
6
+ }
7
+ catch (err) {
7
8
  return { error: err.toString() };
8
9
  }
9
- };
10
+ }
10
11
 
11
12
  const yml2json = (yml) => loadSafe(yml);
12
13
 
13
- export default yml2json;
14
+ export default yml2json;
@@ -1,5 +1,5 @@
1
1
  import {
2
- pgClients, applyHook, getAccess, getTemplate, checkXSS, dataInsert, dataUpdate, logger, getToken, validateData,
2
+ pgClients, applyHook, getAccess, getTemplate, checkXSS, dataUpdate, logger, getToken, validateData,
3
3
  } from '../../../../utils.js';
4
4
  import config from '../../../../config.js';
5
5
  import insert from './insert.js';
@@ -3,7 +3,7 @@ import setItem from './controllers/setItem.js';
3
3
 
4
4
  const policy = ['site'];
5
5
 
6
- export default async function plugin(app, config = {}) {
6
+ export default async function plugin(app) {
7
7
  app.route({
8
8
  method: 'GET',
9
9
  url: '/db-list',
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  /* eslint-disable no-param-reassign */
2
3
  /* eslint-disable no-plusplus */
3
4
  /* eslint-disable no-await-in-loop */
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  import path from 'node:path';
2
3
  import { imageSize } from 'image-size';
3
4
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  import { imageSize } from 'image-size';
2
3
 
3
4
  import {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-unreachable */
1
2
  import { rename } from 'fs/promises';
2
3
 
3
4
  export default async function testLog(request) {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  import fs from 'node:fs';
2
3
  import path from 'node:path';
3
4
 
@@ -1,9 +1,10 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
 
3
3
  import getMeta from '../../../plugins/pg/funcs/getMeta.js';
4
- import metaFormat from "../../../plugins/table/funcs/metaFormat/index.js";
5
- import getTemplatePath from "../../../plugins/table/funcs/getTemplatePath.js";
6
- import yml2json from "../../../plugins/yml/funcs/yml2json.js";
4
+ import pgClients from '../../../plugins/pg/pgClients.js';
5
+ import metaFormat from '../../../plugins/table/funcs/metaFormat/index.js';
6
+ import getTemplatePath from '../../../plugins/table/funcs/getTemplatePath.js';
7
+ import yml2json from '../../../plugins/yml/funcs/yml2json.js';
7
8
 
8
9
  const infoList = [];
9
10
 
@@ -14,7 +15,7 @@ infoTemplateList?.forEach?.(el => {
14
15
  });
15
16
 
16
17
  export default async function dataInfo({
17
- pg = pgClients.client, params = {}, query = {}, user = {},
18
+ pg = pgClients.client, params = {}, query = {},
18
19
  }, reply) {
19
20
  const timeStart = Date.now();
20
21
  const { id } = params;
@@ -31,18 +32,19 @@ export default async function dataInfo({
31
32
  }
32
33
 
33
34
  const result = await Promise.all(filteredList.filter(el => el.table && pg.pk?.[el.table]).map(async (el) => {
34
- const { table, cls } = el;
35
- const { rowCount = 0, rows = [] } = await pg.query(`select ${pg.pk?.[el.table]} as id, ${el.columns?.map?.(el => el?.replace?.(/'/g, "''")) || '*'} from ${table} where ${el.query || 'true'} and ${pg.pk?.[table]}=$1`, [id]);
35
+ const { rowCount = 0, rows = [] } = await pg.query(`select ${pg.pk?.[el.table]} as id, ${el.columns?.map?.(item => item?.replace?.(/'/g, "''")) || '*'} from ${el.table} where ${el.query || 'true'} and ${pg.pk?.[el.table]}=$1`, [id]);
36
36
  if (rowCount > 0) {
37
- const meta = await getMeta({ pg, table });
37
+ const meta = await getMeta({ pg, table: el.table });
38
38
  const columns = meta?.columns?.filter(item => el.columns?.includes?.(item.name))?.map?.(({ name, title, dataTypeID }) => ({ name, title, type: pg.pgType[dataTypeID] }));
39
- return { table, columns, rows, cls, sufix: false };
39
+ return {
40
+ table: el.table, columns, rows, cls: el.cls, sufix: false,
41
+ };
40
42
  }
41
43
  return null;
42
44
  }));
43
45
 
44
46
  if (!result[0]?.table) {
45
- return reply.status(404).send('object not found: ' + id);
47
+ return reply.status(404).send(`object not found: ${id}`);
46
48
  }
47
49
 
48
50
  await metaFormat(result[0], pg);
@@ -1,6 +1,4 @@
1
- /* import {
2
- logger, autoIndex, getSelect, getTemplate, getSelectVal, pgClients, applyHook,
3
- } from '../../../../utils.js'; */
1
+ /* eslint-disable no-console */
4
2
 
5
3
  import logger from '../../../plugins/logger/getLogger.js';
6
4
  import autoIndex from '../../../plugins/pg/funcs/autoIndex.js';
@@ -107,10 +105,10 @@ export default async function filterAPI(req, reply, iscalled) {
107
105
  });
108
106
  }
109
107
 
110
- const sqlList = loadTable?.sql
108
+ /* const sqlList = loadTable?.sql
111
109
  ?.filter((el) => !el.disabled && el?.sql?.replace)
112
110
  ?.map((el, i) => ` left join lateral (${el.filter ? el.sql.replace(/limit 1/ig, '') : el.sql}) as ${el.name || `t${i + 1}`} on 1=1 `)
113
- ?.join(' ') || '';
111
+ ?.join(' ') || ''; */
114
112
 
115
113
  // percentile_cont - alternative
116
114
  await Promise.all(filters.filter((el) => el.name && el.type === 'Range' && fields?.find?.((item) => item?.name === el.name)).map(async (el) => {
@@ -121,7 +119,7 @@ export default async function filterAPI(req, reply, iscalled) {
121
119
  percentile_disc(0.5) within group (order by ${el.name}),
122
120
  percentile_disc(0.75) within group (order by ${el.name}),
123
121
  max(${el.name})
124
- ] as range from ${table} ${sqlList && false ? ` t ${sqlList}` : ''} where ${tableQuery || '1=1'}`,
122
+ ] as range from ${table} where ${tableQuery || '1=1'}`,
125
123
  { table },
126
124
  ).then(res => {
127
125
  if (res.timeout) {
@@ -59,7 +59,7 @@ export default async function tableInfo(req, reply) {
59
59
  const interfaceQuery = params?.query ? await handlebars.compile(params?.query)({ user, uid }) : undefined;
60
60
  const where = [params.id ? `"${pk}" = $1` : null, loadTable.query, interfaceQuery].filter((el) => el).filter((el) => (user?.user_type === 'superadmin' ? !el.includes('{{uid}}') : true));
61
61
 
62
- const { fields = [] } = await pg.query(`select * from ${table} where ${sqlTable ? 'true' : (where.join(' and ') || 'true')} limit 0`, ([sqlTable ? null : params.id].filter(el => el)) );
62
+ const { fields = [] } = await pg.query(`select * from ${table} where ${sqlTable ? 'true' : (where.join(' and ') || 'true')} limit 0`, ([sqlTable ? null : params.id].filter(el => el)));
63
63
  const columnList = fields.map(el => el.name);
64
64
 
65
65
  const metaInfoCols = meta.info.split(',').filter(el => columnList.includes(el)).map((el) => `"${el}"`);
@@ -11,11 +11,11 @@ function onCheck(rule, data) {
11
11
 
12
12
  if (rule[1] === '>') return val > rule[2];
13
13
  if (rule[1] === '<') return val < rule[2];
14
+ return null;
14
15
  }
15
16
  export default function conditions(rules, data) {
16
17
  if (!rules?.length) return true;
17
- const result = Array.isArray(rules[0]) ? !rules.filter(el => !onCheck(el, data)).length : onCheck(rules, data)
18
+ const result = Array.isArray(rules[0]) ? !rules.filter(el => !onCheck(el, data)).length : onCheck(rules, data);
18
19
  // console.log(rules, result)
19
20
  return result;
20
-
21
- }
21
+ }
@@ -1 +1 @@
1
- export default {}
1
+ export default {};
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-console */
1
2
  import config from '../../../../config.js';
2
3
  import { handlebars, handlebarsSync } from '../../../helpers/index.js';
3
4
 
@@ -226,11 +227,13 @@ export default async function dataAPI(req, reply, called) {
226
227
 
227
228
  if (uid && rows.length && !config.security?.disableToken && (editable || actions.includes('edit') || actions.includes('del'))) {
228
229
  rows.forEach(row => {
229
- row.token = setToken({
230
- ids: [JSON.stringify({ id: row.id, table: tokenData?.table || hookData?.table || params.table, form: loadTable?.form })],
231
- uid,
232
- array: 1,
233
- })?.[0];
230
+ Object.assign(row, {
231
+ token: setToken({
232
+ ids: [JSON.stringify({ id: row.id, table: tokenData?.table || hookData?.table || params.table, form: loadTable?.form })],
233
+ uid,
234
+ array: 1,
235
+ })?.[0],
236
+ });
234
237
  });
235
238
  }
236
239
 
@@ -307,7 +310,7 @@ export default async function dataAPI(req, reply, called) {
307
310
 
308
311
  // conditions
309
312
  panels?.filter(el => el.items).forEach(el => {
310
- el.items = el.items?.filter(item => conditions(item.conditions, rows[0]));
313
+ Object.assign(el, { items: el.items?.filter(item => conditions(item.conditions, rows[0])) });
311
314
  });
312
315
 
313
316
  // title, count
@@ -1,4 +1,4 @@
1
- const formatMemoryUsage = (data) => `${Math.round(data / 1024 / 1024 * 100) / 100} MB`;
1
+ const formatMemoryUsage = (data) => `${Math.round((data / 1024 / 1024) * 100) / 100} MB`;
2
2
 
3
3
  export default async function statusMonitor() {
4
4
  const memoryUsage = process.memoryUsage();
@@ -1,26 +0,0 @@
1
- import path from 'node:path';
2
-
3
- export default function getCallerDir() {
4
- const originalFunc = Error.prepareStackTrace;
5
-
6
- let callerfile;
7
- try {
8
- const err = new Error();
9
- // let currentfile;
10
-
11
- Error.prepareStackTrace = function (err, stack) { return stack; };
12
-
13
- const currentfile = err.stack.shift().getFileName();
14
-
15
- while (err.stack.length) {
16
- callerfile = err.stack.shift().getFileName();
17
-
18
- if (currentfile !== callerfile) break;
19
- }
20
- }
21
- catch (err) { }
22
-
23
- Error.prepareStackTrace = originalFunc;
24
-
25
- return path.dirname(callerfile);
26
- }