@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.
- package/package.json +1 -1
- package/server/helpers/core/buttonFilePreview.js +0 -1
- package/server/helpers/core/buttonHelper.js +6 -5
- package/server/helpers/format/formatAuto.js +2 -2
- package/server/helpers/format/formatDate.js +3 -3
- package/server/helpers/format/formatDigit.js +1 -1
- package/server/helpers/format/formatNum.js +9 -5
- package/server/helpers/format/formatNumber.js +6 -6
- package/server/helpers/format/formatRelative.js +2 -2
- package/server/helpers/format/formatUnit.js +1 -1
- package/server/helpers/format/num_format.js +1 -1
- package/server/helpers/format/set.js +3 -2
- package/server/helpers/funcs/_math.js +3 -3
- package/server/helpers/funcs/contentList.js +8 -5
- package/server/helpers/funcs/empty.js +1 -1
- package/server/helpers/funcs/ifCondAnd.js +2 -1
- package/server/helpers/funcs/ifCondOr.js +2 -2
- package/server/helpers/funcs/inc.js +1 -2
- package/server/helpers/funcs/json.js +2 -2
- package/server/helpers/funcs/qrcode.js +5 -3
- package/server/helpers/funcs/round.js +2 -2
- package/server/helpers/funcs/select.js +7 -11
- package/server/helpers/list/buttonHelper.js +6 -5
- package/server/helpers/list/utils/button.js +1 -3
- package/server/helpers/list/utils/buttonDel.js +2 -3
- package/server/helpers/list/utils/buttonEdit.js +2 -5
- package/server/helpers/string/concat.js +1 -1
- package/server/helpers/string/split.js +2 -2
- package/server/helpers/string/str_replace.js +11 -10
- package/server/helpers/string/substr.js +1 -1
- package/server/helpers/string/translit.js +1 -1
- package/server/helpers/string/utils/alphabet.js +1 -1
- package/server/helpers/utils/button.js +1 -3
- package/server/helpers/utils/buttonAdd.js +2 -4
- package/server/helpers/utils/buttonDel.js +4 -4
- package/server/helpers/utils/buttonDownload.js +1 -1
- package/server/helpers/utils/buttonEdit.js +2 -4
- package/server/helpers/utils/buttonPreview.js +1 -1
- package/server/helpers/utils/mdToHTML.js +2 -2
- package/server/helpers/utils/paddingNumber.js +2 -2
- package/server/plugins/cron/funcs/interval2ms.js +1 -1
- package/server/plugins/cron/index.js +2 -1
- package/server/plugins/crud/funcs/dataInsert.js +1 -0
- package/server/plugins/crud/funcs/utils/logChanges.js +1 -1
- package/server/plugins/crud/funcs/validateData.js +1 -0
- package/server/plugins/crud/index.js +1 -1
- package/server/plugins/file/uploadMultiPart.js +1 -0
- package/server/plugins/grpc/grpc.js +3 -0
- package/server/plugins/grpc/office2pdf.js +2 -0
- package/server/plugins/hook/funcs/applyHook.js +1 -0
- package/server/plugins/hook/index.js +5 -5
- package/server/plugins/logger/createFileStream.js +3 -1
- package/server/plugins/logger/getLogger.js +2 -0
- package/server/plugins/logger/serializers.js +5 -5
- package/server/plugins/logger/timestampWithTimeZone.js +1 -1
- package/server/plugins/md/funcs/formatMdoc.js +7 -7
- package/server/plugins/md/funcs/mdToHTML.js +2 -2
- package/server/plugins/metric/index.js +1 -1
- package/server/plugins/migration/exec.migrations.js +1 -1
- package/server/plugins/migration/exec.sql.js +1 -0
- package/server/plugins/migration/index.js +3 -3
- package/server/plugins/pg/funcs/autoIndex.js +1 -0
- package/server/plugins/pg/funcs/getDBParams.js +4 -2
- package/server/plugins/pg/funcs/init.js +1 -0
- package/server/plugins/policy/index.js +2 -3
- package/server/plugins/redis/funcs/getRedis.js +1 -0
- package/server/plugins/redis/index.js +1 -1
- package/server/plugins/sqlite/funcs/getSqlite.js +2 -0
- package/server/plugins/sqlite/funcs/init.js +2 -0
- package/server/plugins/sqlite/index.js +1 -1
- package/server/plugins/sqlite/sqliteClients.js +2 -0
- package/server/plugins/table/funcs/addTemplateDir.js +1 -0
- package/server/plugins/table/funcs/customTokens.js +1 -1
- package/server/plugins/table/funcs/getFilterSQL/index.js +2 -2
- package/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +1 -1
- package/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +3 -1
- package/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +7 -7
- package/server/plugins/table/funcs/getSelect.js +3 -3
- package/server/plugins/table/funcs/getSelectMeta.js +4 -1
- package/server/plugins/table/funcs/getTemplate.js +4 -4
- package/server/plugins/table/funcs/getTemplatePath.js +4 -3
- package/server/plugins/table/funcs/getTemplateSync.js +1 -1
- package/server/plugins/table/funcs/metaFormat/getSelectVal.js +1 -1
- package/server/plugins/table/funcs/metaFormat/index.js +2 -4
- package/server/plugins/table/funcs/userTokens.js +1 -1
- package/server/plugins/table/index.js +1 -1
- package/server/plugins/util/funcs/eventStream.js +1 -0
- package/server/plugins/util/funcs/flattenObject.js +5 -4
- package/server/plugins/util/funcs/unflattenObject.js +13 -3
- package/server/plugins/util/index.js +3 -3
- package/server/plugins/yml/funcs/json2yml.js +2 -2
- package/server/plugins/yml/funcs/yml2json.js +5 -4
- package/server/routes/crud/controllers/update.js +1 -1
- package/server/routes/dblist/index.mjs +1 -1
- package/server/routes/file/controllers/export.js +1 -0
- package/server/routes/file/controllers/resize.js +1 -0
- package/server/routes/file/controllers/resizeAll.js +1 -0
- package/server/routes/logger/controllers/logger.test.api.js +1 -0
- package/server/routes/logger/controllers/utils/getRootDir.js +1 -0
- package/server/routes/table/controllers/dataInfo.js +11 -9
- package/server/routes/table/controllers/filter.js +4 -6
- package/server/routes/table/controllers/tableInfo.js +1 -1
- package/server/routes/table/controllers/utils/conditions.js +3 -3
- package/server/routes/table/controllers/utils/locales.js +1 -1
- package/server/routes/table/functions/getData.js +9 -6
- package/server/routes/util/controllers/status.monitor.js +1 -1
- package/server/plugins/migration/get.caller.dir.js +0 -26
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { load } from
|
|
1
|
+
import { load } from 'js-yaml';
|
|
2
2
|
|
|
3
3
|
function loadSafe(yml) {
|
|
4
4
|
try {
|
|
5
5
|
return load(yml);
|
|
6
|
-
}
|
|
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,
|
|
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';
|
|
@@ -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
|
|
5
|
-
import
|
|
6
|
-
import
|
|
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 = {},
|
|
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 {
|
|
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 {
|
|
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(
|
|
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
|
-
/*
|
|
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}
|
|
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
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
|
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
|
-
}
|