@opengis/fastify-table 1.4.87 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +125 -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 +24 -17
  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 -137
  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
@@ -0,0 +1,26 @@
1
+ import { S3Client } from "@aws-sdk/client-s3";
2
+ import { createHash } from "crypto";
3
+ function md5(string) {
4
+ return createHash("md5").update(string).digest("hex");
5
+ }
6
+ const CLIENT_CACHE = {};
7
+ const getS3Client = ({ accessKeyId, secretAccessKey, user, password, endpoint, host, region = "us-west-2", }) => {
8
+ // md5 have a hign chance of collisions consider switching on highload
9
+ // if (!accessKeyId || !secretAccessKey || !endpoint) throw new Error('No required params');
10
+ const uniqueKey = md5(`${accessKeyId}${secretAccessKey}${endpoint}`);
11
+ let client = CLIENT_CACHE[uniqueKey];
12
+ if (client)
13
+ return client;
14
+ client = new S3Client({
15
+ credentials: {
16
+ accessKeyId: accessKeyId || user,
17
+ secretAccessKey: secretAccessKey || password,
18
+ },
19
+ endpoint: endpoint || host,
20
+ forcePathStyle: true,
21
+ region,
22
+ });
23
+ CLIENT_CACHE[uniqueKey] = client;
24
+ return client;
25
+ };
26
+ export default { getS3Client };
@@ -0,0 +1,42 @@
1
+ import { GetObjectCommand } from "@aws-sdk/client-s3";
2
+ import { readFile } from "node:fs/promises";
3
+ import { createReadStream } from "node:fs";
4
+ import client from "../client.js";
5
+ import streamToBuffer from "../../utils/streamToBuffer.js";
6
+ // if not found on s3 => fs
7
+ import fsFuncs from "../../fs.js";
8
+ import getPath from "../../../utils/getPath.js";
9
+ import getS3FilePath from "./utils/getS3FilePath.js";
10
+ const getFileStream = (s3Settings) => async (fp, options = {}) => {
11
+ const filepath = getS3FilePath(fp, s3Settings);
12
+ const s3Client = client.getS3Client(s3Settings);
13
+ const bucketName = s3Settings.containerName;
14
+ const bucketParams = {
15
+ Bucket: bucketName,
16
+ Key: filepath[0] === "/" ? filepath?.slice(1) : filepath,
17
+ };
18
+ try {
19
+ const data = await s3Client.send(new GetObjectCommand(bucketParams));
20
+ if (options.buffer) {
21
+ return streamToBuffer(data.Body);
22
+ }
23
+ return data.Body;
24
+ }
25
+ catch (err) {
26
+ const filepath1 = getPath(fp, options);
27
+ if (!filepath1) {
28
+ return null;
29
+ }
30
+ const { fileExists } = fsFuncs();
31
+ const exists = await fileExists(filepath1);
32
+ if (!exists) {
33
+ return null;
34
+ }
35
+ if (options.buffer) {
36
+ return readFile(filepath1);
37
+ }
38
+ const fileStream = createReadStream(filepath1);
39
+ return fileStream;
40
+ }
41
+ };
42
+ export default getFileStream;
@@ -0,0 +1,24 @@
1
+ import { HeadObjectCommand, } from '@aws-sdk/client-s3';
2
+ import client from '../client.js';
3
+ import getPath from '../../../utils/getPath.js';
4
+ import getS3FilePath from './utils/getS3FilePath.js';
5
+ // if not found on s3 => fs
6
+ import isFileExists from '../../../utils/isFileExists.js';
7
+ const getFileMetadata = (s3Settings) => async (fp) => {
8
+ const filepath = getS3FilePath(fp, s3Settings);
9
+ const s3Client = client.getS3Client(s3Settings);
10
+ const bucketName = s3Settings.containerName;
11
+ const bucketParams = {
12
+ Bucket: bucketName,
13
+ Key: filepath[0] === '/' ? filepath?.slice(1) : filepath,
14
+ };
15
+ try {
16
+ const data = await s3Client.send(new HeadObjectCommand(bucketParams));
17
+ return data;
18
+ }
19
+ catch (err) {
20
+ const filepath1 = getPath(fp);
21
+ return isFileExists(filepath1);
22
+ }
23
+ };
24
+ export default getFileMetadata;
@@ -0,0 +1,35 @@
1
+ import { Upload } from "@aws-sdk/lib-storage";
2
+ import client from "../client.js";
3
+ import getValidData from "../../utils/getValidData.js";
4
+ import getDataSize from "../../utils/getDataSize.js";
5
+ import dataTypes from "../../utils/handlers/dataTypes.js";
6
+ import getMimeType from "../../mime/index.js";
7
+ import getS3FilePath from "./utils/getS3FilePath.js";
8
+ const uploadFile = (s3Settings) => async (fp, data) => {
9
+ const filepath = getS3FilePath(fp, s3Settings);
10
+ const validData = await getValidData({ data, types: [dataTypes.stream] });
11
+ const size = await getDataSize({ data });
12
+ const type = getMimeType(filepath);
13
+ try {
14
+ const s3Client = client.getS3Client(s3Settings);
15
+ const bucketName = s3Settings.containerName;
16
+ const bucketParams = {
17
+ Bucket: bucketName,
18
+ Key: filepath,
19
+ ContentLength: size,
20
+ ContentType: type,
21
+ Body: validData,
22
+ };
23
+ const parallelUpload = new Upload({
24
+ client: s3Client,
25
+ params: bucketParams,
26
+ });
27
+ const res = await parallelUpload.done();
28
+ // const res = await s3Client.send(new PutObjectCommand(bucketParams));
29
+ return res; // For unit tests.
30
+ }
31
+ catch (err) {
32
+ throw new Error(`Upload error s3: ${err}. Message: ${err.message}. Keys: ${Object.keys(err)}. Filepath: ${filepath}. Data type: ${typeof validData}.`);
33
+ }
34
+ };
35
+ export default uploadFile;
@@ -0,0 +1,18 @@
1
+ import path from "node:path";
2
+ import config from "../../../../../../../config.js";
3
+ function getPath(fp, s3Settings) {
4
+ const filepath = fp.replace(/\\/g, "/");
5
+ if (s3Settings.folder && !filepath.includes(s3Settings.folder)) {
6
+ return path.join(s3Settings.folder, fp.startsWith("files") ? "" : "files", filepath);
7
+ }
8
+ return filepath;
9
+ }
10
+ function getS3FilePath(fp, s3Settings) {
11
+ const filepath = getPath(fp, s3Settings);
12
+ const unixPath = filepath.replace(/\\/g, "/").split("work/").pop();
13
+ const prefix = !filepath.includes(config.folder) ? config.folder : "";
14
+ const sufix = unixPath[0] === "/" ? "" : "/";
15
+ const s3FilePath = prefix + sufix + unixPath;
16
+ return s3FilePath;
17
+ }
18
+ export default getS3FilePath;
@@ -1,12 +1,11 @@
1
- import downloadFile from './funcs/downloadFile.js';
2
- import fileExists from './funcs/fileExists.js';
3
- import uploadFile from './funcs/uploadFile.js';
4
-
5
- export default function s3Storage(opt) {
6
- return {
7
- name: 's3',
8
- downloadFile: downloadFile(opt),
9
- uploadFile: uploadFile(opt),
10
- fileExists: fileExists(opt),
11
- };
12
- }
1
+ import downloadFile from './funcs/downloadFile.js';
2
+ import fileExists from './funcs/fileExists.js';
3
+ import uploadFile from './funcs/uploadFile.js';
4
+ export default function s3Storage(opt) {
5
+ return {
6
+ name: 's3',
7
+ downloadFile: downloadFile(opt),
8
+ uploadFile: uploadFile(opt),
9
+ fileExists: fileExists(opt),
10
+ };
11
+ }
@@ -0,0 +1,19 @@
1
+ import isText from "./typeguards/isText.js";
2
+ import isPath from "./typeguards/isPath.js";
3
+ import isBuffer from "./typeguards/isBuffer.js";
4
+ import isReadableStream from "./typeguards/isReadableStream.js";
5
+ import isArray from "./typeguards/isArray.js";
6
+ import sizeHandlers from "./handlers/sizeHandlers.js";
7
+ const getDataSizeInBytes = async ({ data }) => {
8
+ const validators = [isReadableStream, isBuffer, isPath, isText, isArray];
9
+ const values = await Promise.all(validators.map(async (func) => ({
10
+ name: func.name,
11
+ bool: await func(data),
12
+ })));
13
+ const [value] = values.filter(({ bool }) => bool === true);
14
+ if (!value)
15
+ throw new Error("No support for this data type");
16
+ const handler = sizeHandlers[value.name];
17
+ return handler({ data });
18
+ };
19
+ export default getDataSizeInBytes;
@@ -0,0 +1,30 @@
1
+ import isText from "./typeguards/isText.js";
2
+ import isPath from "./typeguards/isPath.js";
3
+ import isBuffer from "./typeguards/isBuffer.js";
4
+ import isReadableStream from "./typeguards/isReadableStream.js";
5
+ import isArray from "./typeguards/isArray.js";
6
+ import convertHandlers from "./handlers/index.js";
7
+ const getValidData = async ({ data, types }) => {
8
+ // chain of responsibility
9
+ const validators = [isReadableStream, isBuffer, isPath, isText, isArray];
10
+ const values = await Promise.all(validators.map(async (func) => ({
11
+ name: func.name,
12
+ bool: await func(data),
13
+ })));
14
+ const isValid = !values.reduce((acc, { name, bool }) => {
15
+ let valid = false;
16
+ types.forEach((dataType) => {
17
+ if (name === dataType)
18
+ valid = bool;
19
+ });
20
+ return acc && !valid;
21
+ }, true);
22
+ if (isValid)
23
+ return data;
24
+ const [value] = values.filter(({ bool }) => bool === true);
25
+ if (!value)
26
+ throw new Error("No support for this data type");
27
+ const handler = convertHandlers[value.name];
28
+ return handler({ data, types });
29
+ };
30
+ export default getValidData;
@@ -0,0 +1,7 @@
1
+ const types = {
2
+ buffer: 'isBuffer',
3
+ stream: 'isReadableStream',
4
+ path: 'isPath',
5
+ text: 'isText',
6
+ };
7
+ export default types;
@@ -0,0 +1,50 @@
1
+ import { readFile } from "fs/promises";
2
+ import { createReadStream } from "fs";
3
+ import { Readable } from "stream";
4
+ import dataTypes from "./dataTypes.js";
5
+ const handlers = {
6
+ isReadableStream: () => "Unsupported",
7
+ isBuffer: ({ data, types }) => {
8
+ if (types.includes(dataTypes.stream)) {
9
+ return Readable.from(data);
10
+ }
11
+ return null;
12
+ },
13
+ isArray: ({ data, types }) => {
14
+ if (types.includes(dataTypes.stream)) {
15
+ return Readable.from(Buffer.from(data));
16
+ }
17
+ if (types.includes(dataTypes.buffer)) {
18
+ return Buffer.from(data, "utf-8");
19
+ }
20
+ if (types.includes(dataTypes.path)) {
21
+ return "Unsupported";
22
+ }
23
+ return null;
24
+ },
25
+ isPath: async ({ data, types }) => {
26
+ if (types.includes(dataTypes.stream)) {
27
+ return createReadStream(data);
28
+ }
29
+ if (types.includes(dataTypes.buffer)) {
30
+ return readFile(data);
31
+ }
32
+ if (types.includes(dataTypes.text)) {
33
+ return (await readFile(data)).toString();
34
+ }
35
+ return null;
36
+ },
37
+ isText: async ({ data, types }) => {
38
+ if (types.includes(dataTypes.stream)) {
39
+ return Readable.from(Buffer.from(data));
40
+ }
41
+ if (types.includes(dataTypes.buffer)) {
42
+ return Buffer.from(data, "utf-8");
43
+ }
44
+ if (types.includes(dataTypes.path)) {
45
+ return "Unsupported";
46
+ }
47
+ return null;
48
+ },
49
+ };
50
+ export default handlers;
@@ -0,0 +1,9 @@
1
+ import { stat } from "fs/promises";
2
+ const handlers = {
3
+ isReadableStream: () => "Unsupported",
4
+ isBuffer: ({ data }) => data.length,
5
+ isArray: ({ data }) => Buffer.byteLength(data),
6
+ isPath: async ({ data }) => (await stat(data)).size,
7
+ isText: ({ data }) => Buffer.byteLength(data),
8
+ };
9
+ export default handlers;
@@ -0,0 +1,7 @@
1
+ const streamToBuffer = (stream) => new Promise((res, rej) => {
2
+ const buf = [];
3
+ stream.on('data', (data) => buf.push(data));
4
+ stream.on('end', () => res(Buffer.concat(buf)));
5
+ stream.on('error', (err) => rej(err));
6
+ });
7
+ export default streamToBuffer;
@@ -1,3 +1,2 @@
1
- const isArray = (array) => Array.isArray(array);
2
-
3
- export default isArray;
1
+ const isArray = (array) => Array.isArray(array);
2
+ export default isArray;
@@ -1,3 +1,2 @@
1
- const isBuffer = (buffer) => Buffer.isBuffer(buffer);
2
-
3
- export default isBuffer;
1
+ const isBuffer = (buffer) => Buffer.isBuffer(buffer);
2
+ export default isBuffer;
@@ -0,0 +1,3 @@
1
+ import fileExists from "../../../utils/isFileExists.js";
2
+ const isPath = async (path) => fileExists(path, { check: true });
3
+ export default isPath;
@@ -0,0 +1,7 @@
1
+ /* eslint-disable no-underscore-dangle */
2
+ const isReadableStream = (stream) => stream !== null
3
+ && typeof stream === 'object'
4
+ && typeof stream.pipe === 'function'
5
+ && typeof stream._read === 'function'
6
+ && typeof stream._readableState === 'object';
7
+ export default isReadableStream;
@@ -1,3 +1,2 @@
1
- const isText = (text) => text !== null && typeof text === 'string';
2
-
3
- export default isText;
1
+ const isText = (text) => text !== null && typeof text === 'string';
2
+ export default isText;
@@ -0,0 +1,14 @@
1
+ import path from "path";
2
+ import providers from "./providers/index.js";
3
+ async function uploadFile(filePath, data, options = {}) {
4
+ const filename = path.basename(filePath);
5
+ // prefix
6
+ const prefix = (options.prefix === "date"
7
+ ? new Date().toISOString().split("T")[0]
8
+ : null) || (options.prefix === "3s" ? filename.substring(0, 3) : "");
9
+ const relativePath = path.join(path.dirname(filePath), prefix, filename);
10
+ const fp = providers(options);
11
+ await fp.uploadFile(relativePath, data, options);
12
+ return relativePath;
13
+ }
14
+ export default uploadFile;
@@ -0,0 +1,101 @@
1
+ /* eslint-disable no-console */
2
+ import path from "node:path";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { randomUUID } from "node:crypto";
5
+ import { imageSize } from "image-size";
6
+ import { existsSync } from "node:fs";
7
+ import config from "../../../config.js";
8
+ import providers from "./providers/index.js";
9
+ import { all, images } from "./utils/allowedExtensions.js";
10
+ import grpc from "../grpc/grpc.js";
11
+ import getFileType from "./utils/getFileType.js";
12
+ const { resizeImage } = grpc();
13
+ const { resizeImageMinSize = 5 } = config; // resize images >= 5 MB by default
14
+ async function writeFileToDisk(file, buffer) {
15
+ if (!file?.filepath || !file.extension || !buffer) {
16
+ return null;
17
+ }
18
+ // resize big images
19
+ if (images.find((el) => el === file.extension) &&
20
+ file.size >= resizeImageMinSize * 1024 * 1024) {
21
+ const { width = 320, height = 240 } = imageSize(buffer) || {};
22
+ const ratio = width / height;
23
+ const resizeWidth = Math.min(width, 2048);
24
+ const resizeHeight = resizeWidth / ratio;
25
+ const { result } = await resizeImage({
26
+ base64: buffer.toString("base64"),
27
+ width: resizeWidth,
28
+ height: resizeHeight,
29
+ quality: 75,
30
+ });
31
+ await writeFile(`${file.filepath.replace(`.${file.extension}`, `_original.${file.extension}`)}`, buffer);
32
+ await writeFile(file.filepath, Buffer.from(result, "base64"));
33
+ return null;
34
+ }
35
+ await writeFile(file.filepath, buffer);
36
+ return null;
37
+ }
38
+ export default async function uploadMultiPart(req, { extensions, raw, subdir, originalFilename = false } = {}) {
39
+ const allowedExtensions = req.routeOptions?.url === "/file/upload-image/*" ? images : all;
40
+ const parts = req.parts();
41
+ // const part = await parts.next();
42
+ const { value: part, done } = await parts.next();
43
+ if (done) {
44
+ throw new Error("parts already processed");
45
+ }
46
+ const value = part?.fields?.file || part;
47
+ if (!value?.file?.on || !value?.filename) {
48
+ throw new Error("upload error");
49
+ }
50
+ const ext = path.extname(value.filename).toLowerCase();
51
+ if (Array.isArray(extensions) && !extensions.includes(ext)) {
52
+ throw new Error("file extension is not allowed");
53
+ }
54
+ // check extension
55
+ if (!allowedExtensions.includes(ext.substring(1))) {
56
+ throw new Error("file extension is not allowed");
57
+ }
58
+ const fileBuffer = await new Promise((res, rej) => {
59
+ const chunks = [];
60
+ value.file.on("data", (chunk) => chunks.push(chunk));
61
+ value.file.on("end", () => res(Buffer.concat(chunks)));
62
+ value.file.on("error", rej);
63
+ });
64
+ if (!fileBuffer?.length) {
65
+ throw new Error("file buffer is empty");
66
+ }
67
+ if (raw)
68
+ return { buffer: fileBuffer, filename: value.filename, ext }; // return buffer for custom upload
69
+ const dir = subdir != null ? subdir : req.params?.["*"] || "uploads";
70
+ const yearMonthDay = subdir != null ? "" : new Date().toISOString().split("T")[0];
71
+ const dbname = req.pg?.options?.database || req.pg?.database || config.pg?.database; // request / config params / default config params
72
+ const rootDir = config.root || `/data/local/${dbname || ""}`;
73
+ const reldirpath = path.join("/files", dir, yearMonthDay);
74
+ const folder = path.join(rootDir, config.folder || "", reldirpath);
75
+ const newFilename = originalFilename
76
+ ? value.filename
77
+ : `${randomUUID()}${ext}`;
78
+ if (existsSync(path.join(folder, newFilename).replace(/\\/g, "/"))) {
79
+ throw new Error("file with specified name already exists in directory");
80
+ }
81
+ const file = {
82
+ originalFilename: value.filename,
83
+ newFilename,
84
+ filepath: path.join(folder, newFilename).replace(/\\/g, "/"),
85
+ filetype: getFileType(newFilename),
86
+ relativeFilepath: path.join(reldirpath, newFilename).replace(/\\/g, "/"),
87
+ size: Buffer.byteLength(fileBuffer),
88
+ mimetype: value.mimetype,
89
+ extension: ext.substring(1),
90
+ };
91
+ await mkdir(folder, { recursive: true });
92
+ await writeFileToDisk(file, fileBuffer);
93
+ // move file to s3
94
+ if (config.s3?.endpoint) {
95
+ const s3 = providers();
96
+ await s3.uploadFile(file.relativeFilepath, fileBuffer);
97
+ if (config.trace)
98
+ console.log("upload to s3", file.relativeFilepath);
99
+ }
100
+ return file;
101
+ }
@@ -0,0 +1,60 @@
1
+ const all = [
2
+ "jpg",
3
+ "jpeg",
4
+ "png",
5
+ "json",
6
+ "geojson",
7
+ "pdf",
8
+ "doc",
9
+ "docx",
10
+ "xks",
11
+ "csv",
12
+ "xls",
13
+ "xlsx",
14
+ "txt",
15
+ "log",
16
+ "mp4",
17
+ "mov",
18
+ "avi",
19
+ "zip",
20
+ "rar",
21
+ "7z",
22
+ "gz",
23
+ "geotiff",
24
+ "tiff",
25
+ "tif",
26
+ "svg",
27
+ "p7s",
28
+ "asice",
29
+ "shp",
30
+ "xml",
31
+ "gpkg",
32
+ "dmf",
33
+ "dwg",
34
+ "ico",
35
+ "ppt",
36
+ "pptx",
37
+ ];
38
+ const images = ["jpg", "jpeg", "png", "tiff", "tif", "ico", "svg"];
39
+ const videos = ["mp4", "mov", "avi"];
40
+ const documents = [
41
+ "pdf",
42
+ "doc",
43
+ "docx",
44
+ "xks",
45
+ "csv",
46
+ "xls",
47
+ "xlsx",
48
+ "txt",
49
+ "log",
50
+ "xml",
51
+ "ppt",
52
+ "pptx",
53
+ ];
54
+ export { all, images, videos, documents };
55
+ export default {
56
+ all,
57
+ images,
58
+ videos,
59
+ documents,
60
+ };
@@ -1,10 +1,12 @@
1
- import path from 'node:path';
2
- import { images, videos, documents } from './allowedExtensions.js';
3
-
4
- export default function getFileType(filename) {
5
- const ext = path.extname(filename).toLocaleLowerCase().slice(1);
6
- if (images.includes(ext)) return 'image';
7
- if (videos.includes(ext)) return 'video';
8
- if (documents.includes(ext)) return 'document';
9
- return 'other';
10
- }
1
+ import path from 'node:path';
2
+ import { images, videos, documents } from './allowedExtensions.js';
3
+ export default function getFileType(filename) {
4
+ const ext = path.extname(filename).toLocaleLowerCase().slice(1);
5
+ if (images.includes(ext))
6
+ return 'image';
7
+ if (videos.includes(ext))
8
+ return 'video';
9
+ if (documents.includes(ext))
10
+ return 'document';
11
+ return 'other';
12
+ }
@@ -0,0 +1,30 @@
1
+ import path from "node:path";
2
+ import config from "../../../../config.js";
3
+ function getPath(filepath, options = {}) {
4
+ // used at getValidData
5
+ if (typeof filepath !== "string" && options?.check) {
6
+ return null;
7
+ }
8
+ if (typeof filepath !== "string") {
9
+ throw new Error("invalid filepath type");
10
+ }
11
+ // full path support + windows drive
12
+ const relpath = filepath.replace(/\\/g, "/");
13
+ const isFull = relpath.substring(0, 14).includes("/data/local/") ||
14
+ Object.values(config.fileStorage || {}).find((el) => relpath.includes(el));
15
+ if (isFull)
16
+ return relpath;
17
+ const rootDir = config.root || `/data/local/${options.database || config.pg?.database}`;
18
+ const sufix = ["files", "/files"].find((el) => relpath.startsWith(el))
19
+ ? ""
20
+ : "files";
21
+ const prefix = !relpath.toLowerCase().includes(rootDir.toLowerCase())
22
+ ? rootDir
23
+ : "";
24
+ if (config.folder &&
25
+ !relpath.toLowerCase().includes(config.folder.toLowerCase())) {
26
+ return path.join(prefix, config.folder, sufix, relpath);
27
+ }
28
+ return path.join(prefix, relpath);
29
+ }
30
+ export default getPath;
@@ -0,0 +1,15 @@
1
+ import { access } from "node:fs/promises";
2
+ import getPath from "./getPath.js";
3
+ const isFileExists = async (filepath, options = {}) => {
4
+ const fullPath = getPath(filepath, options);
5
+ if (!fullPath)
6
+ return false;
7
+ try {
8
+ await access(fullPath);
9
+ return true;
10
+ }
11
+ catch (err) {
12
+ return false;
13
+ }
14
+ };
15
+ export default isFileExists;
@@ -0,0 +1,50 @@
1
+ import path from "node:path";
2
+ import downloadFile from "../file/downloadFile.js";
3
+ import getGRPC from "./grpc.js";
4
+ const grpc = getGRPC();
5
+ const file2json = async ({ buffer: buffer1, ext: ext1, filepath = "", encoding: encoding1 = "UTF-8", debug, }) => {
6
+ if (!filepath && !(buffer1?.length && ext1))
7
+ return null;
8
+ const ext = ext1 || path.extname(filepath || "");
9
+ const encoding = { CP1251: "windows-1251" }[encoding1] || encoding1;
10
+ const buffer = buffer1 ||
11
+ (await downloadFile(filepath, { provider: "fs", buffer: true, debug })) ||
12
+ "{}";
13
+ if (debug)
14
+ return { filepath, buffer };
15
+ if ([".xls", ".xlsx"].includes(ext)) {
16
+ const { result } = await grpc.excelToJson({
17
+ base64: buffer.toString("base64"),
18
+ type: "xls",
19
+ });
20
+ const json = typeof result === "object" ? result : JSON.parse(result || {});
21
+ return json;
22
+ }
23
+ if ([".csv", ".txt"].includes(ext)) {
24
+ const { result } = await grpc.excelToJson({
25
+ base64: buffer.toString("base64"),
26
+ type: "csv",
27
+ encoding,
28
+ });
29
+ const json = typeof result === "object" ? result : JSON.parse(result || {});
30
+ return json;
31
+ }
32
+ if ([".zip"].includes(ext)) {
33
+ const { result } = await grpc.shpToGeojson({
34
+ base64: buffer.toString("base64"),
35
+ encoding,
36
+ });
37
+ const json = typeof result === "object" ? result : JSON.parse(result);
38
+ return json;
39
+ }
40
+ if ([".xml"].includes(ext)) {
41
+ const { result } = await grpc.xmlToJson({ xml: buffer.toString("utf-8") });
42
+ const json = typeof result === "object" ? result : JSON.parse(result);
43
+ return json;
44
+ }
45
+ if ([".geojson", ".json"].includes(ext)) {
46
+ return JSON.parse(buffer.toString("utf-8"));
47
+ }
48
+ return filepath.replace(/"/g, "");
49
+ };
50
+ export default file2json;