@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,19 +0,0 @@
1
- /* eslint-disable no-console */
2
- import { existsSync, readFileSync } from 'node:fs';
3
-
4
- import userTemplateDir from './userTemplateDir.js';
5
- import customTokens from './customTokens.js';
6
- import yml2json from '../../yml/funcs/yml2json.js';
7
-
8
- export default function addTemplateDir(dir) {
9
- if (dir && !userTemplateDir.includes(dir)) {
10
- userTemplateDir.push(dir);
11
-
12
- if (existsSync(`${dir}/tokens.yml`)) {
13
- const json = yml2json(readFileSync(`${dir}/tokens.yml`));
14
- Object.assign(customTokens, { ...json });
15
- console.log('load user tokens', dir);
16
- }
17
- }
18
- return userTemplateDir;
19
- }
@@ -1 +0,0 @@
1
- export default {};
@@ -1,14 +0,0 @@
1
- import routeData from '../../../routes/table/controllers/tableData.js';
2
-
3
- export default async function getData({
4
- id, table, pg, headers, filter, state, limit, page, search, user, order, desc, sql, contextQuery, sufix, filterList,
5
- }, reply, called) {
6
- const params = { table, id };
7
- const query = {
8
- filter, limit, page, search, sql, state, order, desc,
9
- };
10
- const result = await routeData({
11
- pg, headers, params, query, user, contextQuery, sufix, filterList,
12
- }, reply, called);
13
- return result;
14
- }
@@ -1,14 +0,0 @@
1
- import routeFilter from '../../../routes/table/controllers/filter.js';
2
-
3
- export default async function getFilter({
4
- pg, table, filter, custom, state, search, user,
5
- }, reply) {
6
- const params = { table };
7
- const query = {
8
- filter, custom, state, search,
9
- };
10
- const result = await routeFilter({
11
- pg, params, query, user,
12
- }, reply, 1);
13
- return result;
14
- }
@@ -1,163 +0,0 @@
1
- import getTemplate from '../getTemplate.js';
2
- import getSelect from '../getSelect.js';
3
- import pgClients from '../../../pg/pgClients.js';
4
- import config from '../../../../../config.js';
5
-
6
- // filter util
7
- import getTableSql from './util/getTableSql.js';
8
- import getFilterQuery from './util/getFilterQuery.js';
9
- import getOptimizedQuery from './util/getOptimizedQuery.js';
10
- import getFilter from '../getFilter.js';
11
-
12
- const checkInline = {};
13
- const defaultTable = 'crm.extra_data';
14
-
15
- function getExtraQuery(mainColumns, schema, table, pk) {
16
- const extraColumns = Object.keys(schema || {}).filter(key => !mainColumns.map(el => el?.name).includes(key)).map(key => ({ name: key, type: schema[key]?.type }));
17
-
18
- return {
19
- q: extraColumns.map((el) => `,(select value_text as "${el.name.replace(/'/g, "''")}" from ${table} where property_key='${el.name.replace(/'/g, "''")}' and object_id=t.${pk} limit 1)`).join(' '),
20
- extraColumns,
21
- };
22
- }
23
-
24
- export default async function getFilterSQL({
25
- table, filter, pg = pgClients.client, search, filterList, query, custom, state, uid, objectId, order,
26
- }) {
27
- if (!table) return { error: 'param table is required', status: 400 };
28
-
29
- const body = await getTemplate('table', table);
30
- const loadTemplate = body?.form ? await getTemplate('form', body?.form) : null;
31
- const { extra } = loadTemplate || {};
32
-
33
- const extraDataTable = extra
34
- ? config.extraData?.[body.table]
35
- || config.extraData?.[body.table.split('.').shift()]
36
- || config.extraData?.default
37
- || config.extraData
38
- || defaultTable
39
- : undefined;
40
-
41
- const { fields: fieldsModel = [] } = body?.table && pg.pk[body.table] ? await pg.query(`select * from ${body.table} limit 0`) : {};
42
- const { q: extraSqlColumns, extraColumns = [] } = pg.pk?.[extraDataTable] && pg.pk?.[body.table || table]
43
- ? getExtraQuery(fieldsModel, loadTemplate?.schema, extraDataTable, pg.pk[body.table || table])
44
- : {};
45
-
46
- // console.log('extra getFilterSQL', extraDataTable, pg.pk?.[extraDataTable]);
47
-
48
- // check sql inline fields count
49
- if (body?.table && !checkInline[body?.table] && body?.sql?.length) {
50
- const filterSql = body.sql.filter(el => !el?.disabled && (el.inline ?? true));
51
- const sqlTable = filterSql.map((el, i) => ` left join lateral (${el.sql}) ${el.name || `t${i}`} on 1=1 `)?.join('') || '';
52
- const d = await Promise.all(filterSql.map((el, i) => pg.query(`select ${el.name || `t${i}`}.* from(select * from ${body.table})t ${sqlTable} limit 0`).then(item => item.fields)));
53
- d.forEach((el, i) => {
54
- filterSql[i].inline = el.length === 1;
55
- filterSql[i].fields = el.map(f => f.name);
56
- });
57
- checkInline[body?.table] = body.sql;
58
- }
59
- else if (checkInline[body?.table]) {
60
- body.sql = checkInline[body?.table];
61
- }
62
-
63
- const sqlTable = body?.sql?.length
64
- ? body.sql
65
- .filter((el) => !el?.disabled && !el.inline && el?.sql?.replace && (!el.sql.includes('{{uid}}') || uid))
66
- .map((el, i) => ` left join lateral (${el.sql.replace('{{uid}}', uid)}) ${el.name || `t${i}`} on 1=1 `)
67
- .join('')
68
- : null;
69
- const sqlInline = body?.sql?.filter?.(el => el.inline).map(el => `,(${el.sql})`).join('');
70
-
71
- const fieldQuery = `select * ${extraSqlColumns || ''} ${sqlInline || ''} from ${body?.table || table} t ${sqlTable || ''} limit 0`;
72
- const { fields = [] } = await pg.query(fieldQuery);
73
- const autoSearchColumn = fields?.filter((el) => pg.pgType?.[el.dataTypeID] === 'text')?.map((el) => el.name).join(',');
74
- const searchColumn = body?.search_column || body?.meta?.search || autoSearchColumn;
75
- const fieldsList = (fieldsModel || fields)?.map((el) => el.name);
76
-
77
- try {
78
- const tableSQL = await getTableSql({
79
- pg, body, table, fields,
80
- });
81
-
82
- const sval = `ilike '%${decodeURIComponent(search?.replace(/%/g, '%25')).replace(/'/g, "''").replace(/%/g, '\\%')}%'`;
83
- const searchQuery = search && searchColumn
84
- ? ` (${searchColumn.split(',')?.map((name) => {
85
- const { pk } = tableSQL.find((el) => el.name === name) || {};
86
- return pk && !fieldsList.includes(name) ? `${pk} in (select ${pk} from (${fieldQuery.replace(/limit 0/g, '')} where ${name} ${sval} )q where 1=1)` : `${name} ${sval}`;
87
- }).join(' or ')} )` : '';
88
-
89
- const filterResponse = await getFilter({
90
- pg, table, user: { uid },
91
- }, null, 1);
92
-
93
- const filterList1 = await Promise.all((filterList || [])
94
- .concat(filterResponse?.inline || [])
95
- .concat(filterResponse?.custom || [])
96
- .concat(filterResponse?.state || [])
97
- .concat(filterResponse?.list || [])
98
- ?.filter(el => el.id || el.name)
99
- ?.map(async (el) => {
100
- Object.assign(el, { name: el.name || el.id });
101
-
102
- if (el.name && extraColumns.find(item => item?.name === el?.name)) {
103
- Object.assign(el, { extra: { table: extraDataTable, input: extraColumns.find(item => item?.name === el?.name)?.type } });
104
- }
105
- if (!el?.data) return el;
106
- // const cls = await getTemplate(['cls', 'select'], el.data); // only git cls
107
- const cls = await getSelect(el.data, pg); // git + db cls
108
-
109
- if (Array.isArray(cls?.arr) && cls.arr.length) {
110
- Object.assign(el, { cls: el.data, options: cls, select: `select code, name from admin.cls where parent='${el.data}'` });
111
- }
112
- else if (typeof (cls?.sql || cls) === 'string') {
113
- Object.assign(el, { select: cls?.sql || cls });
114
- }
115
- return el;
116
- }));
117
-
118
- const modelQuery = body?.model || body?.table || table;
119
-
120
- const filters = getFilterQuery({
121
- pg,
122
- filter,
123
- table: modelQuery,
124
- tableSQL,
125
- fields,
126
- filterList: filterList1,
127
- uid,
128
- objectId,
129
- });
130
-
131
- // filter
132
- const customQuery = body?.filterCustom?.length && custom ? body.filterCustom?.find((el) => el.name === custom)?.sql : null;
133
- const stateQuery = body?.filterState?.length && state ? body.filterState?.find((el) => el.name === state)?.sql : null;
134
-
135
- const filterQuery = filters?.filter((el) => el.query)?.map((el) => `${el.query}`).join(' and ');
136
- const q = [body?.query, query, searchQuery, filterQuery, stateQuery, customQuery].filter((el) => el).join(' and ');
137
-
138
- // table
139
-
140
- const obj = {
141
- body, extraSqlColumns, table, q,
142
- };
143
-
144
- const optimizedSQL = `select * from ${getOptimizedQuery(obj)} ${order ? `order by ${order}` : ''}`;
145
- const tableCount = getOptimizedQuery(obj, true);
146
-
147
- return {
148
- filterList,
149
- filters,
150
- q,
151
- optimizedSQL,
152
- sqlTable,
153
- extraSqlColumns,
154
- tableCount,
155
- table: modelQuery,
156
- // filter parts
157
- searchQuery,
158
- };
159
- }
160
- catch (err) {
161
- throw new Error(err.toString());
162
- }
163
- }
@@ -1,136 +0,0 @@
1
- import applyHookSync from '../../../../hook/funcs/applyHookSync.js';
2
- import getRangeQuery from './getRangeQuery.js';
3
-
4
- export default function formatValue({
5
- pg, table, filter = {}, name, value, dataTypeID, uid = 1, optimize,
6
- }) {
7
- const {
8
- extra, sql, select, strict, options, /* default: defaultValue, */
9
- } = filter;
10
-
11
- const pk = pg?.pk && table ? pg.pk[table] : undefined;
12
-
13
- const filterType = filter.type?.toLowerCase?.() || 'text';
14
-
15
- if (filterType === 'text' && value && filter?.columns) {
16
- const columns = filter.columns.split(',');
17
- const sval = `ilike '%${decodeURIComponent(value.replace(/%/g, '%25')).replace(/%/g, '\\%')}%'`;
18
- const query = `(${columns.map(el => `"${el}" ${sval}`).join(' or ')})`;
19
- return { op: '~', query };
20
- }
21
-
22
- const fieldType = pg?.pgType?.[dataTypeID] || pg?.pgType?.[{ date: 1114 }[filterType] || 25];
23
-
24
- const hookData = applyHookSync('onFormatValue', {
25
- pg, pk, table, name, value, filterType, fieldType, filter, dataTypeID, uid, optimize,
26
- });
27
-
28
- if (hookData) {
29
- return hookData?.query ? hookData : { op: '=', query: hookData };
30
- }
31
-
32
- if (!name
33
- || !value
34
- || (!dataTypeID && !extra && !sql && !options)
35
- || extra?.input?.toLowerCase?.() === 'datatable'
36
- || (!['check', 'autocomplete', 'tags', 'avatar', 'radio'].includes(filterType) && options?.find?.(el => el?.sql))
37
- ) {
38
- return {};
39
- }
40
-
41
- // my rows
42
- if (value === 'me' && uid) {
43
- return { op: '=', query: `${name}::text = '${uid}'` };
44
- }
45
-
46
- const matchNull = { null: 'is null', notnull: 'is not null' }[value];
47
- // null = true is null, not false
48
- const matchBoolean = fieldType === 'boolean' ? { true: 'is true', false: 'is false' }[value] : null;
49
- const matchMulti = fieldType?.includes('[]') ? `::text[] && '{${value}}'::text[]` : null;
50
- const match = matchNull || matchBoolean || matchMulti || `::text=any('{${value}}'::text[])`;
51
-
52
- // geometry
53
- if (['geometry'].includes(fieldType)) {
54
- if (matchNull) {
55
- return { op: 'nullable', query: `${name} ${matchNull}` };
56
- }
57
-
58
- const bbox = value[0].split('_');
59
-
60
- if (bbox?.length !== 4) {
61
- return {};
62
- }
63
-
64
- const query = ` ${name} && 'box(${bbox[0]} ${bbox[1]},${bbox[2]} ${bbox[3]})'::box2d `;
65
- return { op: '&&', query };
66
- }
67
-
68
- const querysql = sql?.replace?.(/= ?any\(\$1\)/g, `::text=any('{ ${value} }'::text[])`)?.replace?.(/\$1/g, `'${value}'`);
69
- const op = filterType === 'text' && !strict ? '~' : '=';
70
-
71
- // text
72
- if (['text'].includes(filterType)) {
73
- // with sql subquery
74
- if (sql) {
75
- return { op: '=', query: querysql };
76
- }
77
-
78
- // extra table, example: crm.extra_data
79
- if (extra?.table && pk) {
80
- const query = `${pk} in (select object_id from ${extra.table} where property_key='${name}' and value_text ${matchNull || `${op} '${value}'`} )`;
81
- return { op, query };
82
- }
83
-
84
- // select / cls
85
- if (select) {
86
- const subquery = matchNull ? `name ${matchNull}` : `lower(name::text) ~ lower('${value}')`;
87
- return {
88
- op,
89
- query: `${name}::text in ( ( with q(id,name) as (${select}) select id from q where ${subquery}) )`,
90
- };
91
- }
92
-
93
- // nullable
94
- if (matchNull) {
95
- const query = `${name} ${matchNull}`;
96
- return { op, query };
97
- }
98
-
99
- // default
100
- const query = `lower(${name}::text) ${op} lower('${value}')`;
101
-
102
- return { op, query };
103
- }
104
-
105
- // date: 01.01.2024-31.12.2024 / number range: 100-500
106
- if (['date', 'datepicker', 'range'].includes(filterType)) {
107
- const query = getRangeQuery(value, name, fieldType, filterType, sql, extra, pk);
108
- return { op: 'between', query };
109
- }
110
-
111
- /* select query - from admin.cls / filter options */
112
- if (['check', 'autocomplete', 'tags', 'avatar', 'radio'].includes(filterType)) {
113
- // multiple checks with predefined query
114
- if (options?.find?.(el => el?.sql)) {
115
- const query = options.filter(el => value.split(',').includes(el.id)).map(el => el.sql || 'false').join(' and ') || 'false';
116
- return { op: '=', query };
117
- }
118
-
119
- // with sql subquery
120
- if (sql) {
121
- return { op: '=', query: querysql };
122
- }
123
-
124
- // extra table, example: crm.extra_data
125
- if (extra?.table && pk) {
126
- const query = `${pk} in (select object_id from ${extra.table} where property_key='${name}' and value_text ${matchNull || `='${value}'`} )`;
127
- return { op: '=', query };
128
- }
129
-
130
- // nullable + default
131
- const query = `${name} ${match}`;
132
- return { op: '=', query };
133
- }
134
-
135
- return {};
136
- }
@@ -1,13 +0,0 @@
1
- async function getCustomQuery({
2
- pg, table, customFilter,
3
- }) {
4
- if (!customFilter) return null;
5
- const customFilterList = customFilter?.split(',')?.map((el) => el?.split('_').pop());
6
- const { property_json: customFilterSQL } = await pg.one(`select json_agg(json_build_object('id',property_id,'name',property_key,'query',property_text)
7
- ) as property_json from admin.properties where property_key is not null and property_entity='customQuery' and object_id=$1`, [table]);
8
- const data = customFilterSQL?.length ? customFilterSQL.filter((el) => customFilterList.includes(el.id)) || [] : [];
9
- const customQuery = data?.map((el) => el.query).join(' and ');
10
- return `${customQuery}`;
11
- }
12
-
13
- export default getCustomQuery;
@@ -1,75 +0,0 @@
1
- /* eslint-disable no-continue */
2
-
3
- /**
4
- * @param {Number} opt.json - (1|0) 1 - Результат - Object, 0 - String
5
- * @param {String} opt.query - запит до таблиці
6
- * @param {String} opt.hash - інформація з хешу по запиту
7
- */
8
-
9
- import formatValue from './formatValue.js';
10
-
11
- function getFilterQuery({
12
- pg, filter: filterStr, table, tableSQL, fields, filterList, uid, objectId,
13
- }) {
14
- // if (!filterStr) return null; // filter list API
15
-
16
- const mainOperators = ['=', '~', '>', '<'];
17
-
18
- const filterQueryArray = decodeURIComponent(filterStr?.replace?.(/%/g, '%25')?.replace?.(/%/g, '\\%')?.replace?.(/(^,)|(,$)/g, ''))?.replace?.(/'/g, "''")?.split?.(/[;|]/) || [];
19
- // default filter value form checkboxes, autocomplete or sql-defined only - if not called from card
20
- const filterDefaultQueryArray = !objectId ? (filterList?.filter?.(el => el.name && !filterStr?.includes?.(`${el.name}=`) && el.default && (el.options || el.sql))?.map?.((el) => `${el.name}=${el.default}`) || []) : [];
21
-
22
- // concat default + request filters
23
- const arr = filterQueryArray.concat(filterDefaultQueryArray).filter(el => el);
24
-
25
- const resultList = [];
26
-
27
- for (let i = 0; i < arr.length; i += 1) {
28
- const item = arr[i];
29
- const splitby = mainOperators?.find((el) => item.indexOf(el) !== -1) || '=';
30
- const [name] = item.split(splitby);
31
-
32
- // skip already added filter
33
- if (resultList.find((el) => el.name === name)) {
34
- continue;
35
- }
36
-
37
- // filter
38
- const filter = filterList?.find?.((el) => el.type && el.name === name)
39
- || { type: 'text' };
40
- const { strict, extra } = filter;
41
-
42
- // find all value
43
- const value = arr.filter((el) => el.split(splitby)?.[0] === name).map((el) => el.substring(name.length + 1)).join(',');
44
-
45
- const optimize = fields?.find((el) => el.name === name) ? null : tableSQL.find((el) => el.name === name);
46
-
47
- // find field and skip not exists
48
- const { dataTypeID } = fields?.find((el) => el.name === name)
49
- || fields?.find((el) => el.name === optimize?.pk)
50
- || {};
51
-
52
- // format query
53
- const {
54
- op, query, filterType, fieldType,
55
- } = formatValue({
56
- pg,
57
- table,
58
- filter,
59
- name,
60
- value,
61
- dataTypeID,
62
- uid,
63
- optimize,
64
- }) || {};
65
- if (!query) continue;
66
-
67
- resultList.push({
68
- name, value, query, operator: op, filterType, type: fieldType, strict, extra,
69
- });
70
- }
71
-
72
- return resultList;
73
- }
74
-
75
- export default getFilterQuery;
@@ -1,12 +0,0 @@
1
- export default function getOptimizedQuery({
2
- body, extraSqlColumns, table, q,
3
- }, count) {
4
- const order = body?.orderby || body?.order ? `order by ${body?.orderby || body?.order}` : '';
5
-
6
- const tableName = body?.table || body?.model || table;
7
-
8
- const sqlList = body?.sql?.filter((el) => !el.disabled && el?.sql?.replace && (count ? el.count !== false : true))
9
- .map((el) => ` left join lateral (${el.filter ? el.sql.replace(/limit 1/ig, '') : el.sql}) as ${el.name} on 1=1 `).join(' ');
10
-
11
- return `(select * ${extraSqlColumns || ''} from ${tableName} t ${sqlList ? ` ${sqlList}` : ''} where 1=1 and ${q?.replace('q.', 't.') || '1=1'} ${order})q`;
12
- }
@@ -1,156 +0,0 @@
1
- /* eslint-disable no-restricted-globals */
2
- const dateTypeList = ['date', 'timestamp', 'timestamp without time zone', 'timestamp with time zone'];
3
- const numberTypeList = ['float8', 'int4', 'int8', 'numeric', 'double precision', 'integer', 'bigint'];
4
-
5
- const isValidDate = (dateStr) => {
6
- if (!dateStr) return false;
7
- if (['min', 'max'].includes(dateStr)) return true;
8
- // iso date: 2024-01-01
9
- if (dateStr?.indexOf('-') !== -1) {
10
- const [yyyy, mm, dd] = dateStr.split('-');
11
- return new Date(`${mm}/${dd}/${yyyy}`).toString() !== 'Invalid Date';
12
- }
13
-
14
- // locale date: 01.01.2024
15
- const [dd, mm, yyyy] = dateStr.split('.');
16
- return new Date(`${mm}/${dd}/${yyyy}`).toString() !== 'Invalid Date';
17
- };
18
-
19
- const isValidNumber = (numStr) => (['min', 'max'].includes(numStr) ? true : !isNaN(numStr));
20
-
21
- function dt(y, m, d) {
22
- return new Date(Date.UTC(y, m, d)).toISOString().slice(0, 10);
23
- }
24
-
25
- const dp = {
26
- d: new Date().getDate(),
27
- w: new Date().getDate() - (new Date().getDay() || 7) + 1,
28
- m: new Date().getMonth(),
29
- q: (new Date().getMonth() / 4).toFixed() * 3,
30
- y: new Date().getFullYear(),
31
- };
32
-
33
- function formatDateISOString(date) {
34
- if (!date?.includes('.')) return date;
35
- const [day, month, year] = date.split('.');
36
- return `${year}-${month}-${day}`;
37
- }
38
-
39
- function getRangeValues(value = '', filterType = 'range') {
40
- if (['range'].includes(filterType)) {
41
- if (value?.includes(',')) return value.split(',').map((el) => el || 'min');
42
- if (value?.includes('_')) return value.split('_');
43
-
44
- return value.split('-');
45
- }
46
-
47
- // date range, specific options: current day, week, month, year etc.
48
- if (value === 'cd') {
49
- return [dt(dp.y, dp.m, dp.d)];
50
- }
51
- if (value === 'cw') {
52
- return [dt(dp.y, dp.m, dp.w), dt(dp.y, dp.m, dp.w + 6)];
53
- }
54
- if (value === 'cm') {
55
- return [dt(dp.y, dp.m, 1), dt(dp.y, dp.m + 1, 0)];
56
- }
57
- if (value === 'cq') {
58
- return [dt(dp.y, dp.q, 1), dt(dp.y, dp.q + 3, 0)];
59
- }
60
- if (value === 'cy') {
61
- return [dt(dp.y, 0, 1), dt(dp.y, 11, 31)];
62
- }
63
-
64
- // date range, example: 01.01.2024-31.12.2024
65
- const [startDate, endDate = 'max'] = value?.includes(',') ? value.split(',').map((el) => el || 'min') : value.split('-');
66
- const min = startDate === 'min' ? startDate : formatDateISOString(startDate);
67
- const max = endDate === 'max' ? endDate : formatDateISOString(endDate);
68
- return [min, max];
69
- }
70
-
71
- function checkValid(value, fieldType, filterType, sql, extra) {
72
- const [min, max = 'max'] = getRangeValues(value, filterType);
73
-
74
- if (['date', 'datepicker'].includes(filterType)) {
75
- const isvalid = (dateTypeList.includes(fieldType) || sql || extra) && (isValidDate(min) && (isValidDate(max) || value === 'cd'));
76
- return { min, max, isvalid };
77
- }
78
-
79
- if (['range'].includes(filterType)) {
80
- const isvalid = (numberTypeList.includes(fieldType) || sql || extra) && isValidNumber(min) && isValidNumber(max);
81
- return { min, max, isvalid };
82
- }
83
-
84
- return { isvalid: false };
85
- }
86
-
87
- export default function getRangeQuery(value, name, fieldType, filterType, sql, extra, pk) {
88
- const { min, max, isvalid } = checkValid(value, fieldType, filterType, sql, extra);
89
- if (!isvalid) return 'false';
90
-
91
- // with sql subquery
92
- if (['date', 'datepicker'].includes(filterType) && sql) {
93
- return sql.replace(/\$1/g, `'${min}'::date`).replace(/\$2/g, `'${max}'::date`);
94
- }
95
-
96
- // with sql subquery
97
- if (['range'].includes(filterType) && sql) {
98
- return sql.replace(/\$1/g, min).replace(/\$2/g, max);
99
- }
100
-
101
- // preset date values
102
- if (['date', 'datepicker'].includes(filterType) && ['cd', 'cw', 'cm', 'cq', 'cy'].includes(value)) {
103
- return value === 'cd'
104
- ? `${name}::date = '${min}'::date`
105
- : `${name}::date between '${min}'::date and '${max}'::date`;
106
- }
107
-
108
- // extra columns, example: crm.extra_data
109
- if (['date', 'datepicker'].includes(filterType) && extra?.table && pk) {
110
- const subquery = (max && min && min === max ? `value_date = '${value}'::date` : null)
111
- || (max === 'max' ? `value_date::date > '${min}'::date` : null)
112
- || (min === 'min' ? `value_date::date < '${max}'::date` : null)
113
- || `value_date::date between '${min}'::date and '${max}'::date`;
114
- const query = `${pk} in (select object_id from ${extra.table} where property_key='${name}' and ${subquery})`;
115
- return query;
116
- }
117
-
118
- // extra columns, example: crm.extra_data
119
- if (['range'].includes(filterType) && extra?.table && pk) {
120
- const subquery = (max && min && min === max ? `value_text = '${value}'` : null)
121
- || (max === 'max' ? `value_text::numeric > ${min}` : null)
122
- || (min === 'min' ? `value_text::numeric < ${max}` : null)
123
- || `value_text::numeric between ${min} and ${max}`;
124
- const query = `${pk} in (select object_id from ${extra.table} where property_key='${name}' and ${subquery} )`;
125
- return query;
126
- }
127
-
128
- // same date
129
- if (['date', 'datepicker'].includes(filterType) && max && min && min === max) {
130
- return `${name}::date = '${min}'::date`;
131
- }
132
-
133
- // skip, same as 1=1
134
- if (['range'].includes(filterType) && min === 'min' && max === 'max') {
135
- return 'true';
136
- }
137
-
138
- // default
139
- if (max === 'max') {
140
- return ['date', 'datepicker'].includes(filterType)
141
- ? `${name} >= '${min}'::date`
142
- : `${name} >= ${min}`;
143
- }
144
-
145
- if (min === 'min') {
146
- return ['date', 'datepicker'].includes(filterType)
147
- ? `${name} <= '${max}'::date`
148
- : `${name} <= ${max}`;
149
- }
150
-
151
- if (['date', 'datepicker'].includes(filterType)) {
152
- return `${name}::date between '${min}'::date and '${max}'::date`;
153
- }
154
-
155
- return `${name} between ${min} and ${max}`;
156
- }
@@ -1,34 +0,0 @@
1
- function getTable(table) {
2
- const result = table?.toLowerCase()?.replace(/[\n\r]+/g, ' ')?.split(' from ')?.filter((el) => /^[a-z0-9_]+\.[a-z0-9_]+/.test(el))
3
- ?.map((el) => el.split(/[ )]/)[0]);
4
- return result;
5
- }
6
-
7
- /**
8
- * @param {Number} opt.json - (1|0) 1 - Результат - Object, 0 - String
9
- * @param {String} opt.query - запит до таблиці
10
- * @param {String} opt.hash - інформація з хешу по запиту
11
- */
12
- const tableSql = {};
13
- async function getTableSql({
14
- pg, body, table, fields,
15
- }) {
16
- if (tableSql[table]) return tableSql[table];
17
-
18
- const fieldList = fields.map((el) => el.name);
19
-
20
- const tableList = body?.sql?.map((el) => getTable(el.sql)).reduce((acc, el) => acc.concat(el), []).filter((el) => fieldList.includes(pg.pk[el]));
21
-
22
- if (!tableList) { tableSql[table] = []; return []; }
23
-
24
- const data = await Promise.all(tableList?.map(async (tableEl) => {
25
- const { fields: fieldsEl } = await pg.query(`select * from ${tableEl} limit 0`);
26
- return fieldsEl.map((el) => ({ name: el.name, table: tableEl, pk: pg.pk[tableEl] }));
27
- }));
28
-
29
- tableSql[table] = data.reduce((acc, el) => acc.concat(el), []);
30
-
31
- return tableSql[table];
32
- }
33
-
34
- export default getTableSql;
@@ -1,31 +0,0 @@
1
- import config from '../../../../config.js';
2
- import pgClients from '../../pg/pgClients.js';
3
- import getTemplate from './getTemplate.js';
4
-
5
- const loadCls = {};
6
-
7
- const sqls = {
8
- sql: 'select data from admin.user_cls where name=$1 union all select data from admin.cls where name=$1',
9
- json: `select json_agg(json_build_object('id', code, 'text', name, 'icon', icon, 'color', color)) as data from admin.user_cls where parent=$1
10
- union all select json_agg(json_build_object('id', code, 'text', name, 'icon', icon, 'color', color)) as data from admin.cls where parent=$1`,
11
- };
12
-
13
- export default async function getSelect(name, pg = pgClients.client) {
14
- if (loadCls[name] && !config.local) return loadCls[name];
15
-
16
- const clsDataGIT = await getTemplate(['cls', 'select'], name);
17
- const { type } = !clsDataGIT && pg.pk?.['admin.user_cls'] ? await pg.query('select type from admin.user_cls where parent is null and name=$1 union all select type from admin.cls where parent is null and name=$1 limit 1', [name]).then(el => el.rows?.[0] || {}) : {};
18
- const q = !clsDataGIT && type && ['sql', 'json'].includes(type) ? sqls[type] : undefined;
19
- const clsDataDB = q ? await pg.query(q, [name]).then(el => el.rows?.find(item => item?.data)?.data) : undefined;
20
- const clsData = clsDataGIT || clsDataDB;
21
- if (!clsData) return null;
22
-
23
- // console.log(clsData);
24
- if (clsData && Array.isArray(clsData)) {
25
- loadCls[name] = { arr: clsData };
26
- return loadCls[name];
27
- }
28
-
29
- loadCls[name] = clsData.sql ? clsData : { sql: clsData };
30
- return loadCls[name];
31
- }