@opengis/fastify-table 1.4.88 → 1.5.1

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 (489) hide show
  1. package/dist/config.js +33 -0
  2. package/dist/dblist.js +5 -0
  3. package/dist/index.js +170 -0
  4. package/dist/redactionList.js +6 -0
  5. package/dist/server/helpers/core/badge.js +16 -0
  6. package/dist/server/helpers/core/buttonFilePreview.js +12 -0
  7. package/dist/server/helpers/core/buttonHelper.js +20 -0
  8. package/{server → dist/server}/helpers/core/token.js +16 -18
  9. package/dist/server/helpers/format/formatAuto.js +14 -0
  10. package/dist/server/helpers/format/formatDate.js +231 -0
  11. package/{server → dist/server}/helpers/format/formatDigit.js +21 -21
  12. package/dist/server/helpers/format/formatNum.js +331 -0
  13. package/{server → dist/server}/helpers/format/formatNumber.js +50 -55
  14. package/dist/server/helpers/format/formatRelative.js +180 -0
  15. package/{server → dist/server}/helpers/format/formatUnit.js +41 -40
  16. package/{server → dist/server}/helpers/format/num_format.js +40 -44
  17. package/{server → dist/server}/helpers/format/set.js +26 -27
  18. package/{server → dist/server}/helpers/funcs/_math.js +49 -50
  19. package/{server → dist/server}/helpers/funcs/contentList.js +52 -57
  20. package/{server → dist/server}/helpers/funcs/empty.js +21 -21
  21. package/dist/server/helpers/funcs/ifCond.js +109 -0
  22. package/dist/server/helpers/funcs/ifCondAnd.js +109 -0
  23. package/dist/server/helpers/funcs/ifCondOr.js +110 -0
  24. package/{server → dist/server}/helpers/funcs/inc.js +19 -20
  25. package/{server → dist/server}/helpers/funcs/json.js +3 -3
  26. package/dist/server/helpers/funcs/qrcode.js +65 -0
  27. package/{server → dist/server}/helpers/funcs/round.js +27 -29
  28. package/dist/server/helpers/funcs/select.js +39 -0
  29. package/dist/server/helpers/index.js +126 -0
  30. package/dist/server/helpers/list/buttonHelper.js +20 -0
  31. package/{server → dist/server}/helpers/list/descriptionList.js +39 -45
  32. package/dist/server/helpers/list/tableList.js +104 -0
  33. package/{server → dist/server}/helpers/list/utils/button.js +3 -3
  34. package/{server → dist/server}/helpers/list/utils/buttonDel.js +8 -9
  35. package/{server → dist/server}/helpers/list/utils/buttonEdit.js +8 -9
  36. package/{server → dist/server}/helpers/string/coalesce.js +33 -39
  37. package/{server → dist/server}/helpers/string/concat.js +25 -28
  38. package/{server → dist/server}/helpers/string/split.js +19 -20
  39. package/{server → dist/server}/helpers/string/str_replace.js +57 -62
  40. package/{server → dist/server}/helpers/string/substr.js +28 -32
  41. package/{server → dist/server}/helpers/string/translit.js +20 -23
  42. package/dist/server/helpers/string/utils/alphabet.js +76 -0
  43. package/{server → dist/server}/helpers/utils/button.js +3 -3
  44. package/{server → dist/server}/helpers/utils/buttonAdd.js +4 -4
  45. package/{server → dist/server}/helpers/utils/buttonDel.js +11 -15
  46. package/{server → dist/server}/helpers/utils/buttonDownload.js +3 -3
  47. package/dist/server/helpers/utils/buttonEdit.js +14 -0
  48. package/{server → dist/server}/helpers/utils/buttonPreview.js +3 -3
  49. package/{server → dist/server}/helpers/utils/mdToHTML.js +16 -17
  50. package/{server → dist/server}/helpers/utils/paddingNumber.js +5 -5
  51. package/dist/server/plugins/access/funcs/getAdminAccess.js +11 -0
  52. package/dist/server/plugins/cron/cronList.js +2 -0
  53. package/dist/server/plugins/cron/funcs/addCron.js +41 -0
  54. package/{server → dist/server}/plugins/cron/funcs/interval2ms.js +36 -40
  55. package/dist/server/plugins/cron/funcs/runCron.js +20 -0
  56. package/{server → dist/server}/plugins/cron/funcs/verifyUnique.js +19 -23
  57. package/dist/server/plugins/cron/index.js +75 -0
  58. package/dist/server/plugins/crud/funcs/dataDelete.js +87 -0
  59. package/dist/server/plugins/crud/funcs/dataInsert.js +134 -0
  60. package/dist/server/plugins/crud/funcs/dataUpdate.js +198 -0
  61. package/dist/server/plugins/crud/funcs/getAccess.js +82 -0
  62. package/dist/server/plugins/crud/funcs/getOpt.js +13 -0
  63. package/dist/server/plugins/crud/funcs/getToken.js +24 -0
  64. package/dist/server/plugins/crud/funcs/isFileExists.js +11 -0
  65. package/dist/server/plugins/crud/funcs/setOpt.js +19 -0
  66. package/dist/server/plugins/crud/funcs/setToken.js +41 -0
  67. package/dist/server/plugins/crud/funcs/utils/getFolder.js +13 -0
  68. package/dist/server/plugins/crud/funcs/utils/getInsertQuery.js +54 -0
  69. package/dist/server/plugins/crud/funcs/utils/logChanges.js +144 -0
  70. package/{server → dist/server}/plugins/crud/funcs/validateData.js +91 -83
  71. package/dist/server/plugins/extra/extraData.js +81 -0
  72. package/dist/server/plugins/extra/extraDataGet.js +52 -0
  73. package/dist/server/plugins/file/downloadFile.js +15 -0
  74. package/{server → dist/server}/plugins/file/getExport.js +18 -38
  75. package/dist/server/plugins/file/isFileExists.js +13 -0
  76. package/dist/server/plugins/file/providers/fs.js +86 -0
  77. package/dist/server/plugins/file/providers/index.js +28 -0
  78. package/dist/server/plugins/file/providers/mime/index.js +7 -0
  79. package/dist/server/plugins/file/providers/mime/mimes.js +1179 -0
  80. package/dist/server/plugins/file/providers/s3/client.js +26 -0
  81. package/dist/server/plugins/file/providers/s3/funcs/downloadFile.js +42 -0
  82. package/dist/server/plugins/file/providers/s3/funcs/fileExists.js +24 -0
  83. package/dist/server/plugins/file/providers/s3/funcs/uploadFile.js +35 -0
  84. package/dist/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +18 -0
  85. package/{server → dist/server}/plugins/file/providers/s3/index.js +11 -12
  86. package/dist/server/plugins/file/providers/utils/getDataSize.js +19 -0
  87. package/dist/server/plugins/file/providers/utils/getValidData.js +30 -0
  88. package/dist/server/plugins/file/providers/utils/handlers/dataTypes.js +7 -0
  89. package/dist/server/plugins/file/providers/utils/handlers/index.js +50 -0
  90. package/dist/server/plugins/file/providers/utils/handlers/sizeHandlers.js +9 -0
  91. package/dist/server/plugins/file/providers/utils/streamToBuffer.js +7 -0
  92. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isArray.js +2 -3
  93. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isBuffer.js +2 -3
  94. package/dist/server/plugins/file/providers/utils/typeguards/isPath.js +3 -0
  95. package/dist/server/plugins/file/providers/utils/typeguards/isReadableStream.js +7 -0
  96. package/{server → dist/server}/plugins/file/providers/utils/typeguards/isText.js +2 -3
  97. package/dist/server/plugins/file/uploadFile.js +14 -0
  98. package/dist/server/plugins/file/uploadMultiPart.js +101 -0
  99. package/dist/server/plugins/file/utils/allowedExtensions.js +60 -0
  100. package/{server → dist/server}/plugins/file/utils/getFileType.js +12 -10
  101. package/dist/server/plugins/file/utils/getPath.js +30 -0
  102. package/dist/server/plugins/file/utils/isFileExists.js +15 -0
  103. package/dist/server/plugins/grpc/file2json.js +50 -0
  104. package/dist/server/plugins/grpc/grpc.js +103 -0
  105. package/dist/server/plugins/grpc/office2pdf.js +78 -0
  106. package/dist/server/plugins/grpc/utils/csv2xls.js +6 -0
  107. package/dist/server/plugins/grpc/utils/excel2Json.js +10 -0
  108. package/dist/server/plugins/grpc/utils/html2doc.js +17 -0
  109. package/dist/server/plugins/grpc/utils/html2img.js +17 -0
  110. package/dist/server/plugins/grpc/utils/html2pdf.js +19 -0
  111. package/{server → dist/server}/plugins/grpc/utils/htmlTemplate.js +3 -4
  112. package/dist/server/plugins/grpc/utils/json2xls.js +11 -0
  113. package/dist/server/plugins/grpc/utils/mergePdf.js +18 -0
  114. package/dist/server/plugins/hook/funcs/addHook.js +7 -0
  115. package/dist/server/plugins/hook/funcs/applyHook.js +25 -0
  116. package/dist/server/plugins/hook/funcs/applyHookSync.js +7 -0
  117. package/dist/server/plugins/hook/hookList.js +2 -0
  118. package/{server → dist/server}/plugins/hook/index.js +7 -8
  119. package/dist/server/plugins/logger/createFileStream.js +79 -0
  120. package/dist/server/plugins/logger/errorMessage.js +24 -0
  121. package/dist/server/plugins/logger/errorStatus.js +17 -0
  122. package/dist/server/plugins/logger/getHooks.js +17 -0
  123. package/dist/server/plugins/logger/getLogger.js +52 -0
  124. package/dist/server/plugins/logger/index.js +37 -0
  125. package/dist/server/plugins/logger/labels.js +10 -0
  126. package/dist/server/plugins/logger/serializers.js +22 -0
  127. package/{server → dist/server}/plugins/logger/timestampWithTimeZone.js +5 -5
  128. package/dist/server/plugins/md/funcs/formatMdoc.js +45 -0
  129. package/{server → dist/server}/plugins/md/funcs/mdToHTML.js +16 -17
  130. package/dist/server/plugins/metric/index.js +6 -0
  131. package/dist/server/plugins/metric/loggerSystem.js +127 -0
  132. package/dist/server/plugins/metric/systemMetricsFifthly.js +20 -0
  133. package/dist/server/plugins/migration/exec.migrations.js +59 -0
  134. package/dist/server/plugins/migration/exec.sql.js +61 -0
  135. package/{server → dist/server}/plugins/migration/index.js +5 -7
  136. package/dist/server/plugins/pg/funcs/autoIndex.js +102 -0
  137. package/{server → dist/server}/plugins/pg/funcs/getDBParams.js +16 -15
  138. package/dist/server/plugins/pg/funcs/getMeta.js +48 -0
  139. package/dist/server/plugins/pg/funcs/getPG.js +39 -0
  140. package/dist/server/plugins/pg/funcs/getPGAsync.js +45 -0
  141. package/dist/server/plugins/pg/funcs/init.js +157 -0
  142. package/dist/server/plugins/pg/index.js +47 -0
  143. package/dist/server/plugins/pg/pgClients.js +20 -0
  144. package/dist/server/plugins/policy/funcs/checkPolicy.js +173 -0
  145. package/dist/server/plugins/policy/funcs/checkXSS.js +44 -0
  146. package/dist/server/plugins/policy/index.js +11 -0
  147. package/dist/server/plugins/policy/sqlInjection.js +33 -0
  148. package/dist/server/plugins/policy/xssInjection.js +72 -0
  149. package/{server → dist/server}/plugins/redis/client.js +6 -8
  150. package/dist/server/plugins/redis/funcs/getRedis.js +23 -0
  151. package/{server → dist/server}/plugins/redis/funcs/redisClients.js +2 -3
  152. package/dist/server/plugins/redis/index.js +8 -0
  153. package/dist/server/plugins/sqlite/funcs/getSqlite.js +27 -0
  154. package/dist/server/plugins/sqlite/funcs/init.js +45 -0
  155. package/dist/server/plugins/sqlite/index.js +8 -0
  156. package/dist/server/plugins/sqlite/sqliteClients.js +24 -0
  157. package/dist/server/plugins/table/funcs/addMenu.js +12 -0
  158. package/dist/server/plugins/table/funcs/addTemplateDir.js +16 -0
  159. package/dist/server/plugins/table/funcs/customTokens.js +2 -0
  160. package/dist/server/plugins/table/funcs/getData.js +25 -0
  161. package/dist/server/plugins/table/funcs/getFilter.js +18 -0
  162. package/dist/server/plugins/table/funcs/getFilterSQL/index.js +201 -0
  163. package/dist/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +131 -0
  164. package/dist/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +11 -0
  165. package/dist/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +84 -0
  166. package/dist/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +11 -0
  167. package/dist/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +161 -0
  168. package/dist/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +40 -0
  169. package/dist/server/plugins/table/funcs/getSelect.js +37 -0
  170. package/dist/server/plugins/table/funcs/getSelectMeta.js +77 -0
  171. package/dist/server/plugins/table/funcs/getTemplate.js +86 -0
  172. package/dist/server/plugins/table/funcs/getTemplatePath.js +60 -0
  173. package/dist/server/plugins/table/funcs/getTemplateSync.js +84 -0
  174. package/dist/server/plugins/table/funcs/getTemplates.js +15 -0
  175. package/dist/server/plugins/table/funcs/gisIRColumn.js +81 -0
  176. package/dist/server/plugins/table/funcs/loadTemplate.js +2 -0
  177. package/dist/server/plugins/table/funcs/loadTemplatePath.js +2 -0
  178. package/dist/server/plugins/table/funcs/menuDirs.js +2 -0
  179. package/dist/server/plugins/table/funcs/metaFormat/getSelectVal.js +75 -0
  180. package/dist/server/plugins/table/funcs/metaFormat/index.js +64 -0
  181. package/dist/server/plugins/table/funcs/userTemplateDir.js +2 -0
  182. package/dist/server/plugins/table/funcs/userTokens.js +2 -0
  183. package/dist/server/plugins/util/funcs/eventStream.js +28 -0
  184. package/{server → dist/server}/plugins/util/funcs/flattenObject.js +14 -12
  185. package/{server → dist/server}/plugins/util/funcs/unflattenObject.js +48 -46
  186. package/{server → dist/server}/plugins/yml/funcs/json2yml.js +3 -5
  187. package/{server → dist/server}/plugins/yml/funcs/yml2json.js +11 -14
  188. package/{server → dist/server}/routes/access/controllers/access.group.js +17 -23
  189. package/{server → dist/server}/routes/access/controllers/access.group.post.js +46 -53
  190. package/dist/server/routes/access/controllers/access.interface.js +36 -0
  191. package/{server/routes/access/index.mjs → dist/server/routes/access/index.js} +10 -12
  192. package/{server/routes/access/schema.mjs → dist/server/routes/access/schema.js} +65 -68
  193. package/dist/server/routes/cron/controllers/cronApi.js +16 -0
  194. package/dist/server/routes/cron/index.js +15 -0
  195. package/dist/server/routes/crud/controllers/deleteCrud.js +90 -0
  196. package/dist/server/routes/crud/controllers/insert.js +110 -0
  197. package/dist/server/routes/crud/controllers/table.js +144 -0
  198. package/dist/server/routes/crud/controllers/update.js +113 -0
  199. package/dist/server/routes/crud/index.js +22 -0
  200. package/dist/server/routes/dblist/controllers/readItems.js +25 -0
  201. package/dist/server/routes/dblist/controllers/setItem.js +20 -0
  202. package/dist/server/routes/dblist/index.js +17 -0
  203. package/dist/server/routes/dblist/utils/formatData.js +8 -0
  204. package/dist/server/routes/file/controllers/delete.js +99 -0
  205. package/dist/server/routes/file/controllers/download.js +56 -0
  206. package/dist/server/routes/file/controllers/export.js +294 -0
  207. package/dist/server/routes/file/controllers/files.js +57 -0
  208. package/dist/server/routes/file/controllers/resize.js +86 -0
  209. package/dist/server/routes/file/controllers/resizeAll.js +140 -0
  210. package/dist/server/routes/file/controllers/upload.js +56 -0
  211. package/dist/server/routes/file/controllers/uploadImage.js +45 -0
  212. package/dist/server/routes/file/controllers/utils/formatResult.js +13 -0
  213. package/dist/server/routes/file/controllers/utils/jsonToCsv.js +40 -0
  214. package/dist/server/routes/file/controllers/utils/jsonToXls.js +37 -0
  215. package/dist/server/routes/file/index.js +22 -0
  216. package/dist/server/routes/file/schema.js +14 -0
  217. package/dist/server/routes/grpc/controllers/file2geojson.js +54 -0
  218. package/dist/server/routes/grpc/controllers/filePreview.js +87 -0
  219. package/dist/server/routes/grpc/index.js +9 -0
  220. package/dist/server/routes/logger/controllers/logger.file.js +81 -0
  221. package/dist/server/routes/logger/controllers/logger.test.api.js +42 -0
  222. package/dist/server/routes/logger/controllers/utils/checkUserAccess.js +22 -0
  223. package/dist/server/routes/logger/controllers/utils/getRootDir.js +25 -0
  224. package/dist/server/routes/logger/index.js +18 -0
  225. package/dist/server/routes/menu/controllers/getMenu.js +98 -0
  226. package/dist/server/routes/menu/controllers/interfaces.js +18 -0
  227. package/dist/server/routes/menu/index.js +7 -0
  228. package/dist/server/routes/properties/controllers/properties.get.js +23 -0
  229. package/dist/server/routes/properties/controllers/properties.post.js +68 -0
  230. package/dist/server/routes/properties/index.js +21 -0
  231. package/dist/server/routes/table/controllers/card.js +79 -0
  232. package/dist/server/routes/table/controllers/cardData.js +161 -0
  233. package/dist/server/routes/table/controllers/cardTabData.js +49 -0
  234. package/dist/server/routes/table/controllers/dataInfo.js +57 -0
  235. package/dist/server/routes/table/controllers/filter.js +181 -0
  236. package/dist/server/routes/table/controllers/form.js +41 -0
  237. package/{server → dist/server}/routes/table/controllers/getFormByTable.js +105 -125
  238. package/dist/server/routes/table/controllers/search.js +80 -0
  239. package/dist/server/routes/table/controllers/suggest.js +242 -0
  240. package/dist/server/routes/table/controllers/tableData.js +88 -0
  241. package/dist/server/routes/table/controllers/tableInfo.js +112 -0
  242. package/dist/server/routes/table/controllers/tokenInfo.js +10 -0
  243. package/dist/server/routes/table/controllers/utils/conditions.js +30 -0
  244. package/dist/server/routes/table/controllers/utils/formatSchema.js +35 -0
  245. package/dist/server/routes/table/controllers/utils/locales.js +2 -0
  246. package/dist/server/routes/table/functions/getData.js +584 -0
  247. package/dist/server/routes/table/index.js +44 -0
  248. package/dist/server/routes/table/schema.js +117 -0
  249. package/dist/server/routes/templates/controllers/getTemplate.js +65 -0
  250. package/dist/server/routes/templates/index.js +7 -0
  251. package/{server → dist/server}/routes/templates/schema.js +11 -12
  252. package/dist/server/routes/util/controllers/code.generator.js +75 -0
  253. package/dist/server/routes/util/controllers/next.id.js +4 -0
  254. package/dist/server/routes/util/controllers/status.monitor.js +6 -0
  255. package/dist/server/routes/util/controllers/user.tokens.js +32 -0
  256. package/dist/server/routes/util/index.js +13 -0
  257. package/dist/server/routes/widget/controllers/file.edit.js +48 -0
  258. package/dist/server/routes/widget/controllers/widget.del.js +84 -0
  259. package/dist/server/routes/widget/controllers/widget.get.js +164 -0
  260. package/dist/server/routes/widget/controllers/widget.set.js +117 -0
  261. package/dist/server/routes/widget/hook/onWidgetSet.js +10 -0
  262. package/dist/server/routes/widget/index.js +42 -0
  263. package/dist/server/types/core.js +12 -0
  264. package/dist/utils.js +93 -0
  265. package/package.json +23 -16
  266. package/config.js +0 -37
  267. package/dblist.js +0 -5
  268. package/index.js +0 -193
  269. package/redactionList.js +0 -7
  270. package/server/helpers/core/badge.js +0 -14
  271. package/server/helpers/core/buttonFilePreview.js +0 -12
  272. package/server/helpers/core/buttonHelper.js +0 -22
  273. package/server/helpers/format/formatAuto.js +0 -13
  274. package/server/helpers/format/formatDate.js +0 -258
  275. package/server/helpers/format/formatNum.js +0 -365
  276. package/server/helpers/format/formatRelative.js +0 -106
  277. package/server/helpers/funcs/ifCond.js +0 -109
  278. package/server/helpers/funcs/ifCondAnd.js +0 -114
  279. package/server/helpers/funcs/ifCondOr.js +0 -115
  280. package/server/helpers/funcs/qrcode.js +0 -68
  281. package/server/helpers/funcs/select.js +0 -46
  282. package/server/helpers/index.js +0 -137
  283. package/server/helpers/list/buttonHelper.js +0 -22
  284. package/server/helpers/list/tableList.js +0 -87
  285. package/server/helpers/string/utils/alphabet.js +0 -76
  286. package/server/helpers/utils/buttonEdit.js +0 -17
  287. package/server/migrations/0.sql +0 -84
  288. package/server/migrations/cls.sql +0 -40
  289. package/server/migrations/context.sql +0 -135
  290. package/server/migrations/crm.sql +0 -155
  291. package/server/migrations/log.sql +0 -87
  292. package/server/migrations/properties.sql +0 -115
  293. package/server/migrations/roles.sql +0 -191
  294. package/server/migrations/template.sql +0 -44
  295. package/server/migrations/users.sql +0 -176
  296. package/server/plugins/access/funcs/getAdminAccess.js +0 -14
  297. package/server/plugins/access/index.mjs +0 -6
  298. package/server/plugins/cron/cronList.js +0 -1
  299. package/server/plugins/cron/funcs/addCron.js +0 -52
  300. package/server/plugins/cron/funcs/runCron.js +0 -24
  301. package/server/plugins/cron/index.js +0 -77
  302. package/server/plugins/crud/funcs/dataDelete.js +0 -86
  303. package/server/plugins/crud/funcs/dataInsert.js +0 -131
  304. package/server/plugins/crud/funcs/dataUpdate.js +0 -179
  305. package/server/plugins/crud/funcs/getAccess.js +0 -94
  306. package/server/plugins/crud/funcs/getOpt.js +0 -14
  307. package/server/plugins/crud/funcs/getToken.js +0 -33
  308. package/server/plugins/crud/funcs/isFileExists.js +0 -13
  309. package/server/plugins/crud/funcs/setOpt.js +0 -21
  310. package/server/plugins/crud/funcs/setToken.js +0 -43
  311. package/server/plugins/crud/funcs/utils/getFolder.js +0 -11
  312. package/server/plugins/crud/funcs/utils/getInsertQuery.js +0 -44
  313. package/server/plugins/crud/funcs/utils/logChanges.js +0 -121
  314. package/server/plugins/crud/index.js +0 -23
  315. package/server/plugins/extra/extraData.js +0 -79
  316. package/server/plugins/extra/extraDataGet.js +0 -56
  317. package/server/plugins/file/downloadFile.js +0 -18
  318. package/server/plugins/file/isFileExists.js +0 -17
  319. package/server/plugins/file/providers/fs.js +0 -100
  320. package/server/plugins/file/providers/index.d.ts +0 -49
  321. package/server/plugins/file/providers/index.js +0 -36
  322. package/server/plugins/file/providers/mime/index.js +0 -12
  323. package/server/plugins/file/providers/mime/mimes.js +0 -1180
  324. package/server/plugins/file/providers/s3/client.js +0 -41
  325. package/server/plugins/file/providers/s3/funcs/downloadFile.js +0 -50
  326. package/server/plugins/file/providers/s3/funcs/fileExists.js +0 -32
  327. package/server/plugins/file/providers/s3/funcs/uploadFile.js +0 -46
  328. package/server/plugins/file/providers/s3/funcs/utils/getS3FilePath.js +0 -23
  329. package/server/plugins/file/providers/utils/getDataSize.js +0 -20
  330. package/server/plugins/file/providers/utils/getValidData.js +0 -32
  331. package/server/plugins/file/providers/utils/handlers/dataTypes.js +0 -8
  332. package/server/plugins/file/providers/utils/handlers/index.js +0 -53
  333. package/server/plugins/file/providers/utils/handlers/sizeHandlers.js +0 -11
  334. package/server/plugins/file/providers/utils/streamToBuffer.js +0 -8
  335. package/server/plugins/file/providers/utils/typeguards/isPath.js +0 -5
  336. package/server/plugins/file/providers/utils/typeguards/isReadableStream.js +0 -8
  337. package/server/plugins/file/uploadFile.js +0 -19
  338. package/server/plugins/file/uploadMultiPart.js +0 -131
  339. package/server/plugins/file/utils/allowedExtensions.js +0 -25
  340. package/server/plugins/file/utils/getPath.js +0 -25
  341. package/server/plugins/file/utils/isFileExists.js +0 -16
  342. package/server/plugins/grpc/file2json.js +0 -54
  343. package/server/plugins/grpc/grpc.js +0 -125
  344. package/server/plugins/grpc/office2pdf.js +0 -91
  345. package/server/plugins/grpc/utils/csv2xls.js +0 -8
  346. package/server/plugins/grpc/utils/excel2Json.js +0 -8
  347. package/server/plugins/grpc/utils/html2doc.js +0 -19
  348. package/server/plugins/grpc/utils/html2img.js +0 -18
  349. package/server/plugins/grpc/utils/html2pdf.js +0 -23
  350. package/server/plugins/grpc/utils/json2xls.js +0 -13
  351. package/server/plugins/grpc/utils/mergePdf.js +0 -20
  352. package/server/plugins/hook/funcs/addHook.js +0 -8
  353. package/server/plugins/hook/funcs/applyHook.js +0 -25
  354. package/server/plugins/hook/funcs/applyHookSync.js +0 -9
  355. package/server/plugins/hook/hookList.js +0 -1
  356. package/server/plugins/logger/createFileStream.js +0 -88
  357. package/server/plugins/logger/errorMessage.js +0 -25
  358. package/server/plugins/logger/errorStatus.js +0 -19
  359. package/server/plugins/logger/getHooks.js +0 -21
  360. package/server/plugins/logger/getLogger.js +0 -58
  361. package/server/plugins/logger/index.js +0 -33
  362. package/server/plugins/logger/labels.js +0 -11
  363. package/server/plugins/logger/serializers.js +0 -25
  364. package/server/plugins/md/funcs/formatMdoc.js +0 -40
  365. package/server/plugins/metric/index.js +0 -8
  366. package/server/plugins/metric/loggerSystem.js +0 -131
  367. package/server/plugins/metric/systemMetricsFifthly.js +0 -24
  368. package/server/plugins/migration/exec.migrations.js +0 -63
  369. package/server/plugins/migration/exec.sql.js +0 -67
  370. package/server/plugins/pg/funcs/autoIndex.js +0 -103
  371. package/server/plugins/pg/funcs/getMeta.js +0 -49
  372. package/server/plugins/pg/funcs/getPG.js +0 -42
  373. package/server/plugins/pg/funcs/getPGAsync.js +0 -62
  374. package/server/plugins/pg/funcs/init.js +0 -117
  375. package/server/plugins/pg/index.js +0 -54
  376. package/server/plugins/pg/pgClients.js +0 -22
  377. package/server/plugins/policy/funcs/checkPolicy.js +0 -127
  378. package/server/plugins/policy/funcs/checkXSS.js +0 -37
  379. package/server/plugins/policy/index.js +0 -11
  380. package/server/plugins/policy/sqlInjection.js +0 -34
  381. package/server/plugins/policy/xssInjection.js +0 -73
  382. package/server/plugins/redis/funcs/getRedis.js +0 -25
  383. package/server/plugins/redis/index.js +0 -17
  384. package/server/plugins/sqlite/funcs/getSqlite.js +0 -39
  385. package/server/plugins/sqlite/funcs/init.js +0 -53
  386. package/server/plugins/sqlite/index.js +0 -11
  387. package/server/plugins/sqlite/sqliteClients.js +0 -26
  388. package/server/plugins/table/funcs/addMenu.js +0 -16
  389. package/server/plugins/table/funcs/addTemplateDir.js +0 -19
  390. package/server/plugins/table/funcs/customTokens.js +0 -1
  391. package/server/plugins/table/funcs/getData.js +0 -14
  392. package/server/plugins/table/funcs/getFilter.js +0 -14
  393. package/server/plugins/table/funcs/getFilterSQL/index.js +0 -163
  394. package/server/plugins/table/funcs/getFilterSQL/util/formatValue.js +0 -136
  395. package/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +0 -13
  396. package/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +0 -75
  397. package/server/plugins/table/funcs/getFilterSQL/util/getOptimizedQuery.js +0 -12
  398. package/server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.js +0 -156
  399. package/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +0 -34
  400. package/server/plugins/table/funcs/getSelect.js +0 -31
  401. package/server/plugins/table/funcs/getSelectMeta.js +0 -74
  402. package/server/plugins/table/funcs/getTemplate.js +0 -88
  403. package/server/plugins/table/funcs/getTemplatePath.js +0 -60
  404. package/server/plugins/table/funcs/getTemplateSync.js +0 -87
  405. package/server/plugins/table/funcs/getTemplates.js +0 -19
  406. package/server/plugins/table/funcs/gisIRColumn.js +0 -82
  407. package/server/plugins/table/funcs/loadTemplate.js +0 -1
  408. package/server/plugins/table/funcs/loadTemplatePath.js +0 -1
  409. package/server/plugins/table/funcs/menuDirs.js +0 -1
  410. package/server/plugins/table/funcs/metaFormat/getSelectVal.js +0 -61
  411. package/server/plugins/table/funcs/metaFormat/index.js +0 -49
  412. package/server/plugins/table/funcs/userTemplateDir.js +0 -1
  413. package/server/plugins/table/funcs/userTokens.js +0 -1
  414. package/server/plugins/table/index.js +0 -13
  415. package/server/plugins/util/funcs/eventStream.js +0 -29
  416. package/server/plugins/util/index.js +0 -7
  417. package/server/routes/access/controllers/access.interface.js +0 -37
  418. package/server/routes/cron/controllers/cronApi.js +0 -22
  419. package/server/routes/cron/index.js +0 -19
  420. package/server/routes/crud/controllers/deleteCrud.js +0 -84
  421. package/server/routes/crud/controllers/insert.js +0 -103
  422. package/server/routes/crud/controllers/table.js +0 -116
  423. package/server/routes/crud/controllers/update.js +0 -108
  424. package/server/routes/crud/index.js +0 -26
  425. package/server/routes/dblist/controllers/readItems.js +0 -28
  426. package/server/routes/dblist/controllers/setItem.js +0 -25
  427. package/server/routes/dblist/index.mjs +0 -19
  428. package/server/routes/dblist/utils/formatData.js +0 -7
  429. package/server/routes/file/controllers/delete.js +0 -108
  430. package/server/routes/file/controllers/download.js +0 -66
  431. package/server/routes/file/controllers/export.js +0 -290
  432. package/server/routes/file/controllers/files.js +0 -72
  433. package/server/routes/file/controllers/resize.js +0 -96
  434. package/server/routes/file/controllers/resizeAll.js +0 -165
  435. package/server/routes/file/controllers/upload.js +0 -55
  436. package/server/routes/file/controllers/uploadImage.js +0 -47
  437. package/server/routes/file/controllers/utils/formatResult.js +0 -17
  438. package/server/routes/file/controllers/utils/jsonToCsv.js +0 -36
  439. package/server/routes/file/controllers/utils/jsonToXls.js +0 -42
  440. package/server/routes/file/index.mjs +0 -26
  441. package/server/routes/file/schema.js +0 -16
  442. package/server/routes/grpc/controllers/file2geojson.js +0 -60
  443. package/server/routes/grpc/controllers/filePreview.js +0 -89
  444. package/server/routes/grpc/index.mjs +0 -12
  445. package/server/routes/logger/controllers/logger.file.js +0 -97
  446. package/server/routes/logger/controllers/logger.test.api.js +0 -48
  447. package/server/routes/logger/controllers/utils/checkUserAccess.js +0 -24
  448. package/server/routes/logger/controllers/utils/getRootDir.js +0 -27
  449. package/server/routes/logger/index.js +0 -22
  450. package/server/routes/menu/controllers/getMenu.js +0 -98
  451. package/server/routes/menu/controllers/interfaces.js +0 -21
  452. package/server/routes/menu/index.mjs +0 -8
  453. package/server/routes/menu/schema.js +0 -0
  454. package/server/routes/properties/controllers/properties.get.js +0 -33
  455. package/server/routes/properties/controllers/properties.post.js +0 -76
  456. package/server/routes/properties/index.js +0 -25
  457. package/server/routes/table/controllers/card.js +0 -77
  458. package/server/routes/table/controllers/cardData.js +0 -155
  459. package/server/routes/table/controllers/cardTabData.js +0 -57
  460. package/server/routes/table/controllers/dataInfo.js +0 -56
  461. package/server/routes/table/controllers/filter.js +0 -154
  462. package/server/routes/table/controllers/form.js +0 -42
  463. package/server/routes/table/controllers/search.js +0 -74
  464. package/server/routes/table/controllers/suggest.js +0 -246
  465. package/server/routes/table/controllers/tableData.js +0 -62
  466. package/server/routes/table/controllers/tableInfo.js +0 -110
  467. package/server/routes/table/controllers/tokenInfo.js +0 -12
  468. package/server/routes/table/controllers/utils/conditions.js +0 -21
  469. package/server/routes/table/controllers/utils/formatSchema.js +0 -23
  470. package/server/routes/table/controllers/utils/locales.js +0 -1
  471. package/server/routes/table/functions/getData.js +0 -436
  472. package/server/routes/table/index.js +0 -57
  473. package/server/routes/table/schema.js +0 -127
  474. package/server/routes/templates/controllers/getTemplate.js +0 -51
  475. package/server/routes/templates/index.mjs +0 -10
  476. package/server/routes/util/controllers/code.generator.js +0 -94
  477. package/server/routes/util/controllers/next.id.js +0 -4
  478. package/server/routes/util/controllers/status.monitor.js +0 -8
  479. package/server/routes/util/controllers/user.tokens.js +0 -45
  480. package/server/routes/util/index.js +0 -14
  481. package/server/routes/widget/controllers/file.edit.js +0 -55
  482. package/server/routes/widget/controllers/widget.del.js +0 -99
  483. package/server/routes/widget/controllers/widget.get.js +0 -156
  484. package/server/routes/widget/controllers/widget.set.js +0 -108
  485. package/server/routes/widget/hook/onWidgetSet.js +0 -13
  486. package/server/routes/widget/index.mjs +0 -38
  487. package/utils.js +0 -112
  488. /package/{server → dist/server}/plugins/grpc/utils/convertp.proto +0 -0
  489. /package/{server → dist/server}/plugins/grpc/utils/office2pdf.proto +0 -0
@@ -1,154 +0,0 @@
1
- /* eslint-disable no-console */
2
-
3
- import logger from '../../../plugins/logger/getLogger.js';
4
- import autoIndex from '../../../plugins/pg/funcs/autoIndex.js';
5
- import getSelect from '../../../plugins/table/funcs/getSelect.js';
6
- import getSelectVal from '../../../plugins/table/funcs/metaFormat/getSelectVal.js';
7
- import pgClients from '../../../plugins/pg/pgClients.js';
8
- import applyHook from '../../../plugins/hook/funcs/applyHook.js';
9
- import getTemplate from '../../../plugins/table/funcs/getTemplate.js';
10
-
11
- export default async function filterAPI(req, reply, iscalled) {
12
- const time = Date.now();
13
-
14
- const {
15
- params, pg = pgClients.client, user = {}, query = {},
16
- } = req;
17
-
18
- const hookData = await applyHook('preFilter', { pg, table: params.table });
19
- const loadTable = await getTemplate('table', params.table);
20
-
21
- const {
22
- table, sql, query: tableQuery, form, extra, filterState, filterCustom,
23
- } = hookData || loadTable || {};
24
-
25
- if (!table) {
26
- return { status: 404, message: 'not found' };
27
- }
28
-
29
- const sqlTable = sql?.filter?.((el) => !el?.disabled && el?.sql?.replace)?.map?.((el, i) => ` left join lateral (${el.sql.replace('{{uid}}', user?.uid)}) ${el.name || `t${i}`} on 1=1 `)?.join?.('') || '';
30
- const { fields: columns = [] } = await pg.query(`select * from ${table} t ${sqlTable} limit 0`);
31
- const { fields = [] } = await pg.query(`select * from ${table} t limit 0`);
32
-
33
- const optimizedSQL = `select * from ${table} t ${sqlTable} where ${tableQuery || '1=1'} and ${iscalled && query.filter ? query.filter : '1=1'}`.replace(/{{uid}}/g, user?.uid);
34
-
35
- if (query?.sql && user?.user_type === 'admin') return optimizedSQL;
36
-
37
- const filters = (hookData?.filters || loadTable?.filter_list || loadTable?.filters || loadTable?.filterList || []).concat(loadTable?.filterSql || []);
38
-
39
- // admin.custom_column - user filter NA-165
40
- const { rows: properties = [] } = await pg.query('select column_id, name, title, format, data from admin.custom_column where entity=$1 and uid=$2 and filter', [params.table, user?.uid]);
41
- properties.forEach((row) => filters.push({
42
- id: row.name, name: row.name, ua: row.title, type: row.format, data: row.data,
43
- }));
44
-
45
- // KRYVYIRIH-231
46
- autoIndex({ table, columns: filters.filter((el) => columns?.find?.((item) => item?.name === el.name)) })
47
- .catch(err => {
48
- console.error(err.toString());
49
- logger.file('autoindex/error', { name: params?.table, error: err.toString(), stack: err.stack });
50
- });
51
-
52
- const loadTemplate = form ? await getTemplate('form', form) : {};
53
- const extraColumns = extra ? Object.keys(loadTemplate?.schema || {}).filter(key => !columns.find(col => col.name === key)) : [];
54
-
55
- filters?.forEach?.(el => Object.assign(el, { id: el.id || el.name, title: el.title || el.ua, extra: extraColumns.includes(el.id || el.name) }));
56
-
57
- await Promise.all(filters.filter((el) => el.id && el.type !== 'Autocomplete' && !el.sql && !el.options?.find?.(item => item.sql)).map(async (el) => {
58
- const cls = el.data ? await getSelect(el.data, pg) : null;
59
-
60
- if (!cls && !el.type?.includes?.('Check')) return;
61
- const { dataTypeID } = columns.find((item) => item.name === el.id) || {};
62
-
63
- if (el.extra && Array.isArray(cls?.arr || cls)) {
64
- const countArr = await pg.query('select value_text as id, count(*) from crm.extra_data where property_key=$1 and property_entity=$2 group by value_text', [el.id, table]);
65
- const options = countArr.rows.map(cel => {
66
- const data = (cls?.arr || cls).find(c => c.id === cel.id);
67
- return { ...cel, ...data };
68
- });
69
- Object.assign(el, { options });
70
- return;
71
- }
72
-
73
- const q = pg.pgType[dataTypeID]?.includes('[]')
74
- ? `select unnest(${el.id})::text as id,count(*) from (${optimizedSQL})q group by unnest(${el.id}) limit 100`
75
- : `select ${el.id}::text as id,count(*) from (${optimizedSQL})q group by ${el.id} limit 100`;
76
-
77
- const countArr = await pg.queryCache(q, { table });
78
-
79
- if (countArr.timeout) {
80
- Object.assign(el, { timeout: countArr.timeout });
81
- console.log('timeout filter', params.table, el.id);
82
- logger.file('timeout/filter', { table: params.table, type: 'cls', filter: el.id });
83
- }
84
-
85
- const ids = countArr.rows.map(el1 => el1.id);
86
-
87
- const clsData = await getSelectVal({ pg, values: ids, name: el.data });
88
-
89
- const options = countArr.rows.map(cel => {
90
- const data = cls?.arr?.find?.(c => c.id?.toString?.() === cel.id?.toString?.()) || { text: clsData?.[cel.id]?.text || clsData?.[cel.id] || cel.id };
91
- return { ...cel, id: cel.id === null ? 'null' : cel.id, ...data };
92
- });
93
- Object.assign(el, { options });
94
- }));
95
-
96
- const q = ((filterState || []).concat(filterCustom || [])).filter((el) => el.name && el.sql).map((el) => `select count(*), '${el.name}' as name from (${optimizedSQL})q where ${el.sql}`).join(' union all ');
97
-
98
- const { rows = [], timeout: timeout1 } = q ? await pg.queryCache(q) : {};
99
- if (timeout1) logger.file('timeout/filter', { table: params.table, type: 'state/custom' });
100
-
101
- if (rows?.length) {
102
- ((filterState || []).concat(filterCustom || [])).filter((el) => el.name && el.sql).forEach((el) => {
103
- const { count } = rows.find((row) => row.name === el.name) || {};
104
- Object.assign(el, { count, sql: undefined });
105
- });
106
- }
107
-
108
- /* const sqlList = loadTable?.sql
109
- ?.filter((el) => !el.disabled && el?.sql?.replace)
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 `)
111
- ?.join(' ') || ''; */
112
-
113
- // percentile_cont - alternative
114
- await Promise.all(filters.filter((el) => el.name && el.type === 'Range' && fields?.find?.((item) => item?.name === el.name)).map(async (el) => {
115
- const data = await pg.queryCache(
116
- `select array[
117
- min(${el.name}),
118
- percentile_disc(0.25) within group (order by ${el.name}),
119
- percentile_disc(0.5) within group (order by ${el.name}),
120
- percentile_disc(0.75) within group (order by ${el.name}),
121
- max(${el.name})
122
- ] as range from ${table} where ${tableQuery || '1=1'}`,
123
- { table },
124
- ).then(res => {
125
- if (res.timeout) {
126
- logger.file('timeout/filter', { table: params.table, type: 'Range', filter: res.name });
127
- return res;
128
- }
129
- return res.rows?.[0]?.range;
130
- });
131
- Object.assign(el, { data });
132
- }));
133
-
134
- const sqlFilters = (filterCustom || []).filter((el) => el.name && el.sql);
135
- const q1 = sqlFilters.map((el) => `select count(*), '${el.name}' as name from ${table} where ${tableQuery || '1=1'} and ${el.sql}`).join(' union all ');
136
-
137
- const { rows: sqlRows = [], timeout } = q1 ? await pg.queryCache(q1, { table }) : {};
138
- if (timeout) logger.file('timeout/filter', { table: params.table, type: 'sqlFilters' });
139
-
140
- if (sqlRows?.length) {
141
- sqlFilters.forEach((el) => {
142
- const { count } = sqlRows.find((row) => row.name === el.name) || {};
143
- Object.assign(el, { count, sql: undefined });
144
- });
145
- }
146
-
147
- return {
148
- time: Date.now() - time,
149
- list: filters?.map?.(el => ({ ...el, sql: iscalled ? el.sql : undefined })),
150
- custom: filterCustom,
151
- inline: loadTable?.filterInline,
152
- state: filterState,
153
- };
154
- }
@@ -1,42 +0,0 @@
1
- import { applyHook, getTemplate } from '../../../../utils.js';
2
-
3
- const sql = `select property_key as key, property_json as json, property_int as int,
4
- property_text as text from admin.properties where 1=1`;
5
-
6
- async function getSettings({ pg }) {
7
- const { rows = [] } = await pg.query(sql);
8
- const data = rows.reduce((acc, curr) => Object.assign(acc, { [curr.key]: curr.json || curr.int || curr.text }), {});
9
- return data;
10
- }
11
-
12
- export default async function formFunction(req) {
13
- const time = Date.now();
14
-
15
- const { pg, params, user } = req;
16
- const hookData = await applyHook('preForm', { form: params?.name, user });
17
-
18
- if (hookData?.message && hookData?.status) {
19
- return { message: hookData?.message, status: hookData?.status };
20
- }
21
-
22
- const form = await getTemplate('form', hookData?.form || params?.name);
23
- if (!form) { return { status: 404, message: 'not found' }; }
24
-
25
- // replace settings
26
- const arr = JSON.stringify(form).match(/{{settings.([^}]*)}}/g);
27
- if (arr?.length) {
28
- const string = JSON.stringify(form);
29
- const settings = await getSettings({ pg });
30
- const match = arr.reduce((acc, curr) => Object.assign(acc, { [curr]: settings[curr.replace(/^{{settings./g, '').replace(/}}$/, '')] }), {});
31
- const res = Object.keys(match).reduce((s, m) => s.replace(m, match[m]), string);
32
- return { time: Date.now() - time, form: JSON.parse(res) };
33
- }
34
-
35
- const res = { time: Date.now() - time, form };
36
- const res1 = await applyHook('afterForm', {
37
- form: hookData?.form || params?.name,
38
- payload: res,
39
- user,
40
- });
41
- return res1 || { time: Date.now() - time, form };
42
- }
@@ -1,74 +0,0 @@
1
- import {
2
- getMeta, metaFormat, getTemplates, getTemplate, handlebars,
3
- } from '../../../../utils.js';
4
-
5
- function sequence(tables, data, fn) {
6
- return tables.reduce((promise, table) => promise.then(() => fn({
7
- ...data, tableName: table.replace('.json', ''),
8
- })), Promise.resolve());
9
- }
10
-
11
- async function getData({
12
- pg, tableName, query = {}, maxLimit, res,
13
- }) {
14
- const loadTable = await getTemplate('table', tableName);
15
-
16
- if (!loadTable) { return { message: 'not found', status: 404 }; }
17
-
18
- const {
19
- table, columns, meta,
20
- } = loadTable;
21
-
22
- const { pk } = await getMeta(table);
23
-
24
- const cols = columns.map((el) => el.name || el).join(',');
25
- const [orderColumn, orderDir] = (query.order || loadTable.order || '').split('-');
26
- const order = cols.includes(orderColumn) && orderColumn?.length ? `order by ${orderColumn} ${query.desc || orderDir === 'desc' ? 'desc' : ''}` : '';
27
-
28
- const limit = Math.max(maxLimit - res.rows.length, 0);
29
- // Math.max(query.offset - res.rows.length,0)
30
- const offset = query.page && query.page > 0 ? ` offset ${(query.page - 1) * limit}` : '';
31
-
32
- const search1 = meta?.search && query.key ? `(${meta?.search.concat(meta?.title ? `,${meta?.title}` : '').split(',').map(el => `${el} ilike '%${query.key}%'`).join(' or ')})` : 'false';
33
-
34
- const where = [!pk ? 'false' : 'true', loadTable.query, search1].filter((el) => el);
35
- const q = `select ${[`"${pk}" as id`, meta?.title ? `${meta.title} as title` : ''].filter((el) => el).join(',')} from ${table} t where ${where.join(' and ') || 'true'} ${order} ${offset} limit ${limit}`;
36
- if (query.sql) {
37
- res.sql.push(q);
38
- return null;
39
- }
40
-
41
- const { rows } = await pg.query(q);
42
-
43
- const total = await pg.queryCache(`select count(*) from ${table} t where ${where.join(' and ') || 'true'}`).then((el) => el?.rows[0]?.count) || 0;
44
-
45
- await metaFormat({ rows, table: tableName });
46
- res.total += +total;
47
- rows.forEach((row) => {
48
- const href = meta?.href ? handlebars.compile(meta.href)({ ...row, [pk]: row.id }) : undefined;
49
- res.rows.push({
50
- ...row, register: tableName, register_title: loadTable.ua, href,
51
- });
52
- });
53
- return null;
54
- }
55
-
56
- export default async function search({
57
- pg, funcs, query = {},
58
- }) {
59
- const time = Date.now();
60
-
61
- const tables = query.table ? [query.table] : await getTemplates('table');
62
- const res = { rows: [], sql: [], total: 0 };
63
-
64
- const maxLimit = Math.min(100, query.limit || '16');
65
- await sequence(tables, {
66
- pg, funcs, query, maxLimit, res,
67
- }, getData);
68
-
69
- if (query.sql) return res.sql.join(';\n');
70
-
71
- return {
72
- time: Date.now() - time, total: res.total, count: res.rows.length, rows: res.rows,
73
- };
74
- }
@@ -1,246 +0,0 @@
1
- import path from 'node:path';
2
- import { existsSync, readFileSync } from 'node:fs';
3
-
4
- import {
5
- config, getPG, getTemplate, getSelectMeta, getMeta, applyHook, getSelectVal, logger, getSelect,
6
- } from '../../../../utils.js';
7
-
8
- const limit = 50;
9
- const headers = {
10
- 'Access-Control-Allow-Origin': '*',
11
- 'Access-Control-Allow-Methods': 'GET',
12
- 'Cache-Control': 'no-cache',
13
- };
14
-
15
- async function getTableColumnMeta(tableName, column, filtered, pg) {
16
- if (!tableName || !column) { return null; }
17
-
18
- const loadTable = await getTemplate('table', tableName);
19
- const { data: clsName } = loadTable?.columns?.find?.(el => el.name === column) || {};
20
- const { arr } = await getSelect(clsName, pg) || {};
21
-
22
- const original = {
23
- true: `with c(id,text) as (select ${column} as id, ${column} as text from ${loadTable?.table || tableName} group by ${column}) select id, text from c`,
24
- false: `with c(id,text) as (select ${column} as id, ${column} as text, count(*) from ${loadTable?.table || tableName} group by ${column} limit ${limit}) select * from c`,
25
- }[!!filtered];
26
- return {
27
- arr,
28
- original,
29
- searchQuery: '(lower("text") ~ $1 )',
30
- pk: 'id',
31
- };
32
- }
33
-
34
- export default async function suggest(req) {
35
- const {
36
- params, query, pg: pg1, user,
37
- } = req;
38
-
39
- const lang = query.lang || 'ua';
40
- const time = Date.now();
41
- const parent = query.parent || '';
42
-
43
- if (params?.data && params.data?.startsWith?.('hash-')) {
44
- const filepath = path.join(process.cwd(), `/log/suggest/${params.data.replace('hash-', '')}.json`);
45
- if (existsSync(filepath)) {
46
- const { table, column } = JSON.parse(readFileSync(filepath, { encoding: 'utf8' }) || '{}');
47
- params.data = `${table}:${column}`;
48
- }
49
- }
50
-
51
- const [table, column] = params.data?.includes(':') ? params.data.split(':') : [query.token, query.column];
52
- const selectName = query.sel || query.name || params.data;
53
-
54
- if (!selectName) return { status: 400, message: 'name is required' };
55
-
56
- const { body: hookBody } = table || query.token ? await applyHook('preSuggest', { pg: pg1, table: table || query.token }) || {} : {};
57
- const body = await getTemplate('table', table || query.token);
58
- const tableName = hookBody?.table || body?.table || table || query.token;
59
-
60
- if (table && !pg1.pk?.[tableName]) {
61
- return { status: 400, message: 'param name is invalid: 1' };
62
- }
63
-
64
- const tableMeta = await getMeta({ pg: pg1, table: tableName });
65
- const columnExists = (hookBody?.columns || body?.columns || tableMeta?.columns)?.find(col => col?.name === (column || query.column));
66
-
67
- if (table && (!column || !columnExists)) {
68
- return { status: 400, message: 'param name is invalid: 2' };
69
- }
70
-
71
- if (query.limit && query.limit < 0) {
72
- return { status: 400, message: 'param limit is invalid' };
73
- }
74
-
75
- const meta = tableName && column
76
- ? await getTableColumnMeta(table, column, query?.key || query?.val, pg1)
77
- : await getSelectMeta({
78
- pg: pg1, name: selectName, nocache: query?.nocache, parent,
79
- });
80
-
81
- if (meta?.minLength && query.key && query.key.length < meta?.minLength) {
82
- return { message: `min length: ${meta.minLength}` };
83
- }
84
-
85
- const pg = meta?.db ? getPG(meta.db) : pg1;
86
-
87
- if (!meta) {
88
- return { headers, status: 404, message: 'Not found query select ' };
89
- }
90
-
91
- if (query.meta) {
92
- return meta;
93
- }
94
-
95
- const { arr, searchQuery } = meta;
96
-
97
- if (arr && query.token && query.column) {
98
- const loadTable = await getTemplate('table', query.token);
99
-
100
- const { columns = [] } = await getMeta({ pg, table: loadTable?.table || tableName });
101
-
102
- const column1 = columns.find(el => el.name === query.column);
103
- const args = { table: tableName };
104
- if (!column1) return [];
105
- const sqlCls = query.count
106
- ? `select value, count(*) from (select ${pg.pgType?.[column1.dataTypeID]?.includes('[]') ? `unnest(${column1.name})` : `${column1.name}`} as value from ${(loadTable?.table || tableName).replace(/'/g, "''")} where ${hookBody?.query || loadTable?.query || '1=1'})q group by value`
107
- : `select array_agg(distinct value)::text[] from (select ${pg.pgType?.[column1.dataTypeID]?.includes('[]') ? `unnest(${column1.name})` : `${column1.name}`} as value from ${(loadTable?.table || tableName).replace(/'/g, "''")} where ${hookBody?.query || loadTable?.query || '1=1'})q`;
108
-
109
- if (query.sql && (config.local || user?.user_type?.includes?.('admin'))) {
110
- return sqlCls;
111
- }
112
-
113
- if (pg.pk?.[loadTable?.table || tableName] && column1?.name) {
114
- const qRes = await pg.queryCache(sqlCls, args);
115
- const vals = (query.count ? qRes.rows?.map?.(el => el.value?.toString?.()) : qRes.rows?.[0]?.array_agg) || [];
116
-
117
- const lower = query.key?.toLowerCase?.();
118
- const data1 = query.key || query.val
119
- ? arr?.filter((el) => !lower || (el[lang] || el.text)?.toLowerCase()?.indexOf(lower) !== -1)?.filter((el) => !query.val || el.id === query.val)
120
- : arr;
121
-
122
- const data2 = data1.filter((el) => el.id && vals.includes(el.id.toString()));
123
- const data = data2.slice(0, Math.min(query.limit || limit, limit));
124
-
125
- if (data.length && query.count) {
126
- const counts = qRes.rows?.reduce?.((acc, curr) => ({ ...acc, [curr.value]: curr.count }), {});
127
- data.forEach(el => Object.assign(el, { count: counts?.[el.id] || 0 }));
128
- }
129
-
130
- if (config.debug) {
131
- logger.file('suggest/debug', {
132
- type: 1,
133
- loadTable: loadTable?.table,
134
- tableName,
135
- column: column?.name,
136
- data,
137
- data1,
138
- data2,
139
- query,
140
- });
141
- }
142
-
143
- return {
144
- time: Date.now() - time,
145
- limit: Math.min(query.limit || limit, limit),
146
- count: data.length,
147
- total: arr.length,
148
- mode: 'array',
149
- sql: (config.local || user?.user_type?.includes?.('admin')) ? sqlCls : undefined,
150
- data,
151
- };
152
- }
153
- }
154
-
155
- if (arr) {
156
- const lower = query.key?.toLowerCase();
157
- const data1 = query.key || query.val
158
- ? arr?.filter((el) => !lower || (el[lang] || el.text)?.toLowerCase()?.indexOf(lower) !== -1)?.filter((el) => !query.val || el.id === query.val)
159
- : arr;
160
- const data = data1.slice(0, Math.min(query.limit || limit, limit));
161
-
162
- if (config.debug) {
163
- logger.file('suggest/debug', {
164
- type: 2,
165
- key: query.key,
166
- data,
167
- data1,
168
- });
169
- }
170
-
171
- return {
172
- time: Date.now() - time,
173
- limit: Math.min(query.limit || limit, limit),
174
- count: data.length,
175
- total: arr.length,
176
- mode: 'array',
177
- data,
178
- };
179
- }
180
-
181
- // search
182
- const search = query.key ? searchQuery : null;
183
-
184
- // val
185
- // const pk = meta.originalCols.split(',')[0];
186
- // return meta;
187
-
188
- const val = query.val ? ` ${meta.pk}=any('{${query.val.replace(/'/g, "''")}}')` : '';
189
- const where = [search, val, meta.pk ? `${meta.pk} is not null` : null].filter((el) => el).join(' and ') || 'true';
190
-
191
- const loadTable = await getTemplate('table', query.token);
192
-
193
- const tableName1 = hookBody?.table || loadTable?.table || query.token;
194
-
195
- const { columns = [] } = await getMeta({ pg: pg1, table: tableName1 });
196
-
197
- const { name: filterColumn, dataTypeID } = query.column ? (columns.find(el => el.name === query.column) || {}) : {};
198
- const filter = query.token && pg.pk?.[loadTable?.table || query.token] && filterColumn && dataTypeID
199
- ? `id in (select ${pg.pgType[dataTypeID]?.includes('[]') ? `unnest(${filterColumn})` : filterColumn} from ${(loadTable?.table || query.token).replace(/'/g, "''")})`
200
- : 'true';
201
-
202
- const sqlSuggest = `with c(id,text) as ( ${meta.original.replace(/{{parent}}/gi, parent)} where ${where} order by 2) select * from c where ${filter} limit ${Math.min(query.limit || meta.limit || limit, limit)}`.replace(/{{uid}}/g, user?.uid || '0');
203
-
204
- if (query.sql && (config.local || user?.user_type?.includes?.('admin'))) {
205
- return sqlSuggest;
206
- }
207
-
208
- // query
209
- const { rows: dataNew } = await pg.query(sqlSuggest, query.key ? [`${query.key.toLowerCase()}`] : []);
210
- // const { rows: dataNew1 } = dataNew.length < limit ? await pg.query(sqlSuggest, query.key ? [`${query.key}`] : []) : {};
211
- // const ids = dataNew.map((el) => el.id);
212
- const data = dataNew.filter(el => el.id && el.text);
213
-
214
- if (query.sel) {
215
- const clsData = await getSelectVal({
216
- pg,
217
- name: query.sel,
218
- values: data.map((el) => el.id),
219
- });
220
- data.forEach(el => Object.assign(el, { text: clsData?.[el.id || ''] || el.id }));
221
- }
222
-
223
- if (config.debug) {
224
- logger.file('suggest/debug', {
225
- type: 3,
226
- sel: query.sel,
227
- data,
228
- dataNew,
229
- sqlSuggest,
230
- // ids,
231
- });
232
- }
233
-
234
- const message = {
235
- time: Date.now() - time,
236
- limit: Math.min(query.limit || meta.limit || limit, limit),
237
- count: data.length,
238
- total: meta.count - 0,
239
- mode: 'sql',
240
- db: meta.db,
241
- sql: (config.local || user?.user_type?.includes?.('admin')) ? sqlSuggest : undefined,
242
- data,
243
- };
244
-
245
- return message;
246
- }
@@ -1,62 +0,0 @@
1
- import getToken from '../../../plugins/crud/funcs/getToken.js';
2
- import getOpt from '../../../plugins/crud/funcs/getOpt.js';
3
- import getTemplate from '../../../plugins/table/funcs/getTemplate.js';
4
- import getMeta from '../../../plugins/pg/funcs/getMeta.js';
5
- import pgClients from '../../../plugins/pg/pgClients.js';
6
-
7
- import getData from '../functions/getData.js';
8
-
9
- export default async function getTableData(req, reply, called) {
10
- const {
11
- user = {}, params = {}, headers = {}, query = {}, pg = pgClients.client, contextQuery: contextQuery1, sufix = true, filterList,
12
- } = req;
13
-
14
- const { id } = params || {};
15
-
16
- const tokenData1 = await getOpt(params.table, user?.uid);
17
- const tokenData2 = await getToken({
18
- uid: user?.uid, token: params.table, json: true,
19
- });
20
- const tokenData = tokenData1 || tokenData2;
21
-
22
- if (tokenData?.table) {
23
- const loadTable = await getTemplate('table', tokenData.table);
24
-
25
- if (!loadTable) {
26
- const { rows = [], fields = [] } = await pg.query(`select ${tokenData.columns || '*'} from ${tokenData.table} where ${tokenData.query || 'true'} limit 10`);
27
- const meta = await getMeta({ pg, table: tokenData.table });
28
- const columns = (meta?.columns || fields).map(el => ({ name: el.name, type: pg.pgType?.[el.dataTypeID], title: el.title }));
29
- return { rows, columns };
30
- }
31
-
32
- const resp = await getData({
33
- pg, params: { id, table: tokenData.table }, headers, query, user, contextQuery: [contextQuery1, tokenData.query].filter(Boolean).join(' and '), sufix, filterList, actions: tokenData1?.actions,
34
- }, reply, called);
35
- if (resp?.addToken && tokenData.obj) { Object.assign(resp, { addToken: params.table }); }
36
- return resp;
37
- }
38
-
39
- // Це можна 1 раз на старті
40
- const interfaceName = req.headers?.referer?.match(/.*\/([^?]+)/)?.[1];
41
- const { query: interfaceQuery } = interfaceName && pg?.pk
42
- ? await pg.query('select query from admin.routes where route_id=$1', [interfaceName])
43
- .then(el => el.rows?.[0] || {}) : {};
44
-
45
- // це можна від користувача
46
- const q = `select attr,
47
- (select rule_values from admin.account_grants where account_id in (select account_id from admin.account_users where user_uid=$2) and rule_id=r.rule_id limit 1)
48
- from admin.rules r where (select route_id from admin.routes where $1 in (alias,table_name)) = any(routes)`;
49
- const { rows = [] } = pg?.pk?.['admin.rules'] ? await pg.query(q, [params.table, user.uid]) : {};
50
-
51
- const context = rows.filter(el => el.rule_values).map(el => `${el.attr} = any ('{${el.rule_values}}')`).join(' and ');
52
- const contextQuery = [contextQuery1, interfaceQuery, context].filter(Boolean).join(' and ') || ' 2=2 ';
53
-
54
- const res = await getData({
55
- pg, params, query, headers, user, contextQuery, sufix, filterList, actions: tokenData1?.actions,
56
- }, reply, called);
57
- const route = pg.tlist?.includes('admin.routes') ? await pg.query('select route_id as path, title from admin.routes where enabled and alias=$1 limit 1', [params.table])
58
- .then(el => el.rows?.[0] || {}) : {};
59
-
60
- if (typeof res === 'string') return res;
61
- return { route, ...res };
62
- }