backfarm 1.0.4 → 1.0.6

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 (176) hide show
  1. package/dist/chunk-22GJTNKR.js +47 -0
  2. package/dist/chunk-22GJTNKR.js.map +1 -0
  3. package/dist/{chunk-XBJ3SJ26.js → chunk-2QNCQ5L5.js} +3 -3
  4. package/dist/chunk-2QNCQ5L5.js.map +1 -0
  5. package/dist/chunk-3DJ6GERS.js +17 -0
  6. package/dist/chunk-3DJ6GERS.js.map +1 -0
  7. package/dist/chunk-452DWS46.js +88 -0
  8. package/dist/chunk-452DWS46.js.map +1 -0
  9. package/dist/{chunk-UWIMSKL5.js → chunk-4L35JPDH.js} +2 -2
  10. package/dist/chunk-4L35JPDH.js.map +1 -0
  11. package/dist/{chunk-VFF4YFA3.js → chunk-5AJKFCEE.js} +3 -3
  12. package/dist/chunk-5AJKFCEE.js.map +1 -0
  13. package/dist/chunk-6BNQOIVA.js +34 -0
  14. package/dist/chunk-6BNQOIVA.js.map +1 -0
  15. package/dist/{chunk-P5XJG7OG.js → chunk-A7GR4LD2.js} +1 -1
  16. package/dist/chunk-A7GR4LD2.js.map +1 -0
  17. package/dist/chunk-EEQ2SXDE.js +32 -0
  18. package/dist/chunk-EEQ2SXDE.js.map +1 -0
  19. package/dist/chunk-EUWCMMGI.js +35 -0
  20. package/dist/chunk-EUWCMMGI.js.map +1 -0
  21. package/dist/chunk-HC4IDQP6.js +89 -0
  22. package/dist/chunk-HC4IDQP6.js.map +1 -0
  23. package/dist/{chunk-QVTKG7FD.js → chunk-HV3IQJH3.js} +3 -3
  24. package/dist/chunk-HV3IQJH3.js.map +1 -0
  25. package/dist/{chunk-X3R3RLXY.js → chunk-IZEPCXYK.js} +1 -1
  26. package/dist/chunk-IZEPCXYK.js.map +1 -0
  27. package/dist/{chunk-YTBSGKGF.js → chunk-J3P6W53K.js} +2 -2
  28. package/dist/chunk-J3P6W53K.js.map +1 -0
  29. package/dist/{chunk-EWQYVPOL.js → chunk-LE2SDA4O.js} +1 -1
  30. package/dist/chunk-LE2SDA4O.js.map +1 -0
  31. package/dist/chunk-M7PVDT2D.js +60 -0
  32. package/dist/chunk-M7PVDT2D.js.map +1 -0
  33. package/dist/chunk-O2ZDXQ2Z.js +44 -0
  34. package/dist/chunk-O2ZDXQ2Z.js.map +1 -0
  35. package/dist/{chunk-MNSQSU7T.js → chunk-O5ILFRFV.js} +2 -2
  36. package/dist/chunk-O5ILFRFV.js.map +1 -0
  37. package/dist/chunk-O76OK6Y7.js +40 -0
  38. package/dist/chunk-O76OK6Y7.js.map +1 -0
  39. package/dist/{chunk-W3W3X2OE.js → chunk-QW2GGDEG.js} +54 -19
  40. package/dist/chunk-QW2GGDEG.js.map +1 -0
  41. package/dist/chunk-RZ7XHAUV.js +74 -0
  42. package/dist/chunk-RZ7XHAUV.js.map +1 -0
  43. package/dist/{chunk-TP3K7DMH.js → chunk-U7BCM2WN.js} +2 -2
  44. package/dist/chunk-U7BCM2WN.js.map +1 -0
  45. package/dist/chunk-UPP2FW3G.js +336 -0
  46. package/dist/chunk-UPP2FW3G.js.map +1 -0
  47. package/dist/chunk-YA3MW2CJ.js +33 -0
  48. package/dist/chunk-YA3MW2CJ.js.map +1 -0
  49. package/dist/{chunk-SSFPGDA3.js → chunk-ZC33GE2U.js} +5 -5
  50. package/dist/chunk-ZC33GE2U.js.map +1 -0
  51. package/dist/{chunk-D7A4TEXY.js → chunk-ZC6ZFZ2J.js} +2 -2
  52. package/dist/chunk-ZC6ZFZ2J.js.map +1 -0
  53. package/dist/{chunk-ZMDJ45KH.js → chunk-ZGOMCU4T.js} +7 -7
  54. package/dist/chunk-ZGOMCU4T.js.map +1 -0
  55. package/dist/chunk-ZTTB4NMA.js +18 -0
  56. package/dist/chunk-ZTTB4NMA.js.map +1 -0
  57. package/dist/engine/cloudBucket/r2Storage.js +3 -3
  58. package/dist/engine/mondoDb/mongoDB.js +3 -3
  59. package/dist/engine/multer/multer_configs.js +2 -2
  60. package/dist/engine/server/server.d.ts +5 -3
  61. package/dist/engine/server/server.js +30 -9
  62. package/dist/engine/sql/mySql.d.ts +2 -2
  63. package/dist/engine/sql/mySql.js +3 -3
  64. package/dist/engine/sql/pgSql.js +3 -3
  65. package/dist/utility/libs/env.js +1 -1
  66. package/dist/utility/libs/index.d.ts +1772 -0
  67. package/dist/utility/libs/index.js +101 -0
  68. package/dist/utility/libs/interface.d.ts +5 -7
  69. package/dist/utility/libs/run-all.js +46 -0
  70. package/dist/utility/libs/run-all.js.map +1 -0
  71. package/dist/{chunk-LFRKRR7G.js → utility/libs/run-bucket.js} +4 -7
  72. package/dist/utility/libs/run-bucket.js.map +1 -0
  73. package/dist/utility/libs/run-node-server.js +35 -0
  74. package/dist/utility/libs/run-node-server.js.map +1 -0
  75. package/dist/utility/libs/types.d.ts +11 -31
  76. package/dist/utility/libs/types.js +1 -1
  77. package/dist/utility/libs/types.js.map +1 -1
  78. package/dist/utility/utilis/cloud_storage/deleteFile.js +7 -54
  79. package/dist/utility/utilis/cloud_storage/deleteFile.js.map +1 -1
  80. package/dist/utility/utilis/cloud_storage/deleteFiles.js +7 -83
  81. package/dist/utility/utilis/cloud_storage/deleteFiles.js.map +1 -1
  82. package/dist/utility/utilis/cloud_storage/downloadFile.js +8 -68
  83. package/dist/utility/utilis/cloud_storage/downloadFile.js.map +1 -1
  84. package/dist/utility/utilis/cloud_storage/downloadFiles.js +8 -82
  85. package/dist/utility/utilis/cloud_storage/downloadFiles.js.map +1 -1
  86. package/dist/utility/utilis/cloud_storage/uploadFile.js +6 -6
  87. package/dist/utility/utilis/cloud_storage/uploadFiles.d.ts +0 -64
  88. package/dist/utility/utilis/cloud_storage/uploadFiles.js +9 -43
  89. package/dist/utility/utilis/cloud_storage/uploadFiles.js.map +1 -1
  90. package/dist/utility/utilis/general/error_handler.js +1 -1
  91. package/dist/utility/utilis/general/file-operations.d.ts +7 -132
  92. package/dist/utility/utilis/general/file-operations.js +6 -4
  93. package/dist/utility/utilis/general/sqlDb.js.d.ts +0 -141
  94. package/dist/utility/utilis/general/sqlDb.js.js +2 -2
  95. package/dist/utility/utilis/general/uuids.d.ts +0 -43
  96. package/dist/utility/utilis/general/uuids.js +1 -1
  97. package/dist/utility/utilis/general/web.d.ts +2 -238
  98. package/dist/utility/utilis/general/web.js +4 -4
  99. package/dist/utility/utilis/mongoDb/buldWrite.d.ts +0 -44
  100. package/dist/utility/utilis/mongoDb/buldWrite.js +6 -28
  101. package/dist/utility/utilis/mongoDb/buldWrite.js.map +1 -1
  102. package/dist/utility/utilis/mongoDb/deleteDocument.d.ts +0 -45
  103. package/dist/utility/utilis/mongoDb/deleteDocument.js +6 -30
  104. package/dist/utility/utilis/mongoDb/deleteDocument.js.map +1 -1
  105. package/dist/utility/utilis/mongoDb/insertField.d.ts +2 -33
  106. package/dist/utility/utilis/mongoDb/insertField.js +7 -30
  107. package/dist/utility/utilis/mongoDb/insertField.js.map +1 -1
  108. package/dist/utility/utilis/mongoDb/insertFields.d.ts +2 -41
  109. package/dist/utility/utilis/mongoDb/insertFields.js +7 -32
  110. package/dist/utility/utilis/mongoDb/insertFields.js.map +1 -1
  111. package/dist/utility/utilis/mongoDb/updateFiled.d.ts +0 -56
  112. package/dist/utility/utilis/mongoDb/updateFiled.js +6 -36
  113. package/dist/utility/utilis/mongoDb/updateFiled.js.map +1 -1
  114. package/dist/utility/utilis/multer/upload_batch.js +5 -12
  115. package/dist/utility/utilis/multer/upload_batch.js.map +1 -1
  116. package/dist/utility/utilis/multer/upload_single.d.ts +41 -0
  117. package/dist/utility/utilis/multer/upload_single.js +5 -11
  118. package/dist/utility/utilis/multer/upload_single.js.map +1 -1
  119. package/dist/utility/utilis/postgres/executeQuery.d.ts +2 -205
  120. package/dist/utility/utilis/postgres/executeQuery.js +11 -41
  121. package/dist/utility/utilis/postgres/executeQuery.js.map +1 -1
  122. package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.js +4 -4
  123. package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.js +4 -4
  124. package/dist/utility/utilis/server/app.js +30 -12
  125. package/dist/utility/utilis/server/app.js.map +1 -1
  126. package/dist/utility/utilis/server/server.d.ts +2 -2
  127. package/dist/utility/utilis/server/server.js +30 -20
  128. package/dist/utility/utilis/server/server.js.map +1 -1
  129. package/package.json +55 -56
  130. package/dist/chunk-5A3RVJNT.js +0 -19
  131. package/dist/chunk-5A3RVJNT.js.map +0 -1
  132. package/dist/chunk-D7A4TEXY.js.map +0 -1
  133. package/dist/chunk-EWQYVPOL.js.map +0 -1
  134. package/dist/chunk-ICFMWIIJ.js +0 -53
  135. package/dist/chunk-ICFMWIIJ.js.map +0 -1
  136. package/dist/chunk-LFRKRR7G.js.map +0 -1
  137. package/dist/chunk-MNSQSU7T.js.map +0 -1
  138. package/dist/chunk-NIOLLLJJ.js +0 -44
  139. package/dist/chunk-NIOLLLJJ.js.map +0 -1
  140. package/dist/chunk-P5XJG7OG.js.map +0 -1
  141. package/dist/chunk-QVTKG7FD.js.map +0 -1
  142. package/dist/chunk-SSFPGDA3.js.map +0 -1
  143. package/dist/chunk-TP3K7DMH.js.map +0 -1
  144. package/dist/chunk-UWIMSKL5.js.map +0 -1
  145. package/dist/chunk-VFF4YFA3.js.map +0 -1
  146. package/dist/chunk-W3W3X2OE.js.map +0 -1
  147. package/dist/chunk-X3R3RLXY.js.map +0 -1
  148. package/dist/chunk-XBJ3SJ26.js.map +0 -1
  149. package/dist/chunk-YTBSGKGF.js.map +0 -1
  150. package/dist/chunk-YWFCWT6R.js +0 -23
  151. package/dist/chunk-YWFCWT6R.js.map +0 -1
  152. package/dist/chunk-ZMDJ45KH.js.map +0 -1
  153. package/dist/engine/script/run-all.d.ts +0 -3
  154. package/dist/engine/script/run-all.js +0 -8
  155. package/dist/engine/script/run-bucket.d.ts +0 -3
  156. package/dist/engine/script/run-bucket.js +0 -8
  157. package/dist/engine/script/run-bucket.js.map +0 -1
  158. package/dist/engine/script/run-node-server.d.ts +0 -3
  159. package/dist/engine/script/run-node-server.js +0 -8
  160. package/dist/engine/script/run-node-server.js.map +0 -1
  161. package/dist/engine/server/app.d.ts +0 -5
  162. package/dist/engine/server/app.js +0 -10
  163. package/dist/engine/server/app.js.map +0 -1
  164. package/dist/utility/script/run-all.js +0 -8
  165. package/dist/utility/script/run-all.js.map +0 -1
  166. package/dist/utility/script/run-bucket.js +0 -8
  167. package/dist/utility/script/run-bucket.js.map +0 -1
  168. package/dist/utility/script/run-node-server.js +0 -8
  169. package/dist/utility/script/run-node-server.js.map +0 -1
  170. package/dist/utility/utilis/cloud_storage/s3Client.d.ts +0 -5
  171. package/dist/utility/utilis/cloud_storage/s3Client.js +0 -17
  172. package/dist/utility/utilis/cloud_storage/s3Client.js.map +0 -1
  173. /package/dist/{engine/script/run-all.js.map → utility/libs/index.js.map} +0 -0
  174. /package/dist/utility/{script → libs}/run-all.d.ts +0 -0
  175. /package/dist/utility/{script → libs}/run-bucket.d.ts +0 -0
  176. /package/dist/utility/{script → libs}/run-node-server.d.ts +0 -0
@@ -0,0 +1,60 @@
1
+ import {
2
+ getKeyFromUrl
3
+ } from "./chunk-ZC33GE2U.js";
4
+ import {
5
+ s3Client
6
+ } from "./chunk-J3P6W53K.js";
7
+ import {
8
+ url_or_path
9
+ } from "./chunk-QW2GGDEG.js";
10
+ import {
11
+ ENV
12
+ } from "./chunk-LE2SDA4O.js";
13
+ import {
14
+ __name
15
+ } from "./chunk-7QVYU63E.js";
16
+
17
+ // src/utility/utilis/cloud_storage/deleteFile.ts
18
+ import { DeleteObjectCommand } from "@aws-sdk/client-s3";
19
+ import * as fs from "fs";
20
+ var deleteFile = /* @__PURE__ */ __name(async (item_file) => {
21
+ try {
22
+ const fileType = url_or_path(item_file);
23
+ if (fileType === ENV.URL) {
24
+ const key = getKeyFromUrl(item_file);
25
+ const command = new DeleteObjectCommand({
26
+ Bucket: ENV.BUCKET_NAME,
27
+ Key: key
28
+ });
29
+ await s3Client.send(command);
30
+ return {
31
+ status: true,
32
+ url_or_path: item_file
33
+ };
34
+ }
35
+ if (fileType === ENV.PATH) {
36
+ if (fs.existsSync(item_file)) {
37
+ await fs.promises.unlink(item_file);
38
+ }
39
+ return {
40
+ status: true,
41
+ url_or_path: item_file
42
+ };
43
+ }
44
+ return {
45
+ url_or_path: item_file,
46
+ status: false
47
+ };
48
+ } catch (error) {
49
+ return {
50
+ status: false,
51
+ url_or_path: item_file,
52
+ error
53
+ };
54
+ }
55
+ }, "deleteFile");
56
+
57
+ export {
58
+ deleteFile
59
+ };
60
+ //# sourceMappingURL=chunk-M7PVDT2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/deleteFile.ts"],"sourcesContent":["import {ENV} from \"../../libs/env.js\";\nimport {url_or_path} from \"../general/file-operations.js\";\nimport {getKeyFromUrl} from \"../general/web.js\";\nimport {DeleteObjectCommand} from \"@aws-sdk/client-s3\";\nimport * as fs from \"node:fs\";\nimport type {DeleteFile} from \"../../libs/interface.js\";\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\n\n\n\n\nexport const deleteFile = async (item_file: string): Promise<DeleteFile> => {\n try {\n const fileType = url_or_path(item_file);\n\n if (fileType === ENV.URL) {\n // Extract the MinIO object key from the full public URL\n const key = getKeyFromUrl(item_file);\n\n const command = new DeleteObjectCommand({\n Bucket: ENV.BUCKET_NAME,\n Key: key,\n });\n\n await s3Client.send(command);\n return {\n status: true,\n url_or_path: item_file,\n }\n }\n\n if (fileType === ENV.PATH) {\n // Check if file exists locally before unlinking\n if (fs.existsSync(item_file)) {\n await fs.promises.unlink(item_file);\n }\n return {\n status: true,\n url_or_path: item_file,\n }\n }\n\n return {\n url_or_path: item_file,\n status: false,\n }\n } catch (error) {\n return {\n status: false,\n url_or_path: item_file,\n error: error,\n }\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA,SAAQ,2BAA0B;AAClC,YAAY,QAAQ;AAOb,IAAM,aAAa,8BAAO,cAA2C;AACxE,MAAI;AACA,UAAM,WAAW,YAAY,SAAS;AAEtC,QAAI,aAAa,IAAI,KAAK;AAEtB,YAAM,MAAM,cAAc,SAAS;AAEnC,YAAM,UAAU,IAAI,oBAAoB;AAAA,QACpC,QAAQ,IAAI;AAAA,QACZ,KAAK;AAAA,MACT,CAAC;AAED,YAAM,SAAS,KAAK,OAAO;AAC3B,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,aAAa;AAAA,MACjB;AAAA,IACJ;AAEA,QAAI,aAAa,IAAI,MAAM;AAEvB,UAAO,cAAW,SAAS,GAAG;AAC1B,cAAS,YAAS,OAAO,SAAS;AAAA,MACtC;AACA,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,aAAa;AAAA,MACjB;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,aAAa;AAAA,MACb,QAAQ;AAAA,IACZ;AAAA,EACJ,SAAS,OAAO;AACZ,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACJ,GA1C0B;","names":[]}
@@ -0,0 +1,44 @@
1
+ import {
2
+ upload_file
3
+ } from "./chunk-ZGOMCU4T.js";
4
+ import {
5
+ __name
6
+ } from "./chunk-7QVYU63E.js";
7
+
8
+ // src/utility/utilis/cloud_storage/uploadFiles.ts
9
+ import pLimit from "p-limit";
10
+ var upload_files = /* @__PURE__ */ __name(async ({
11
+ files,
12
+ globalPath,
13
+ concurrency = 5
14
+ }) => {
15
+ if (globalPath && files.some((item) => item.path && item.path.length > 0)) {
16
+ throw new Error("Invalid options: 'globalPath' and individual 'path' cannot both exist.");
17
+ }
18
+ const limiter = pLimit(concurrency);
19
+ const returnData = {
20
+ successFiles: [],
21
+ failedFiles: []
22
+ };
23
+ const uploadTasks = files.map(
24
+ ({ file, path }) => limiter(async () => {
25
+ const resolvedPath = path ?? (globalPath?.length ? globalPath : void 0);
26
+ const result = await upload_file({
27
+ file,
28
+ path: resolvedPath
29
+ });
30
+ if ("error" in result && result.error) {
31
+ returnData.failedFiles.push(result);
32
+ } else {
33
+ returnData.successFiles.push(result);
34
+ }
35
+ })
36
+ );
37
+ await Promise.all(uploadTasks);
38
+ return returnData;
39
+ }, "upload_files");
40
+
41
+ export {
42
+ upload_files
43
+ };
44
+ //# sourceMappingURL=chunk-O2ZDXQ2Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/uploadFiles.ts"],"sourcesContent":["import type {FilesUploadedResponseData, UploadFilesInput} from \"../../libs/interface.js\";\n\n\n\n\n\n\n\nimport pLimit from 'p-limit';\nimport {upload_file} from \"./uploadFile.js\";\n\n\n\n\n\n\n\n\nexport const upload_files = async ({\n files,\n globalPath,\n concurrency = 5\n }: UploadFilesInput): Promise<FilesUploadedResponseData> => {\n\n // 1. Validate: Throw error immediately if globalPath coexists with any item's individual path\n if (globalPath && files.some((item) => item.path && item.path.length > 0)) {\n throw new Error(\"Invalid options: 'globalPath' and individual 'path' cannot both exist.\");\n }\n\n const limiter = pLimit(concurrency);\n const returnData: FilesUploadedResponseData = {\n successFiles: [],\n failedFiles: []\n };\n\n // 2. Map and run concurrent uploads inside limiter tasks\n const uploadTasks = files.map(({ file, path }) =>\n limiter(async () => {\n // Resolve target path (use item's path if available, otherwise globalPath array)\n const resolvedPath = path ?? (globalPath?.length ? globalPath : undefined);\n\n // Delegate single file upload logic to upload_file function\n const result = await upload_file({\n file,\n path: resolvedPath\n });\n\n // Aggregate results based on whether an error occurred on the single file upload\n if ('error' in result && result.error) {\n returnData.failedFiles.push(result);\n } else {\n returnData.successFiles.push(result);\n }\n })\n );\n\n // 3. Wait for all concurrent uploads to settle\n await Promise.all(uploadTasks);\n\n return returnData;\n};\n"],"mappings":";;;;;;;;AAQA,OAAO,YAAY;AAUZ,IAAM,eAAe,8BAAO;AAAA,EACI;AAAA,EACA;AAAA,EACA,cAAc;AAClB,MAA4D;AAG3F,MAAI,cAAc,MAAM,KAAK,CAAC,SAAS,KAAK,QAAQ,KAAK,KAAK,SAAS,CAAC,GAAG;AACvE,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC5F;AAEA,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,aAAwC;AAAA,IAC1C,cAAc,CAAC;AAAA,IACf,aAAa,CAAC;AAAA,EAClB;AAGA,QAAM,cAAc,MAAM;AAAA,IAAI,CAAC,EAAE,MAAM,KAAK,MACxC,QAAQ,YAAY;AAEhB,YAAM,eAAe,SAAS,YAAY,SAAS,aAAa;AAGhE,YAAM,SAAS,MAAM,YAAY;AAAA,QAC7B;AAAA,QACA,MAAM;AAAA,MACV,CAAC;AAGD,UAAI,WAAW,UAAU,OAAO,OAAO;AACnC,mBAAW,YAAY,KAAK,MAAM;AAAA,MACtC,OAAO;AACH,mBAAW,aAAa,KAAK,MAAM;AAAA,MACvC;AAAA,IACJ,CAAC;AAAA,EACL;AAGA,QAAM,QAAQ,IAAI,WAAW;AAE7B,SAAO;AACX,GA1C4B;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ENV
3
- } from "./chunk-EWQYVPOL.js";
3
+ } from "./chunk-LE2SDA4O.js";
4
4
  import {
5
5
  __name
6
6
  } from "./chunk-7QVYU63E.js";
@@ -87,4 +87,4 @@ export {
87
87
  isMySQL,
88
88
  isPostgreSQL
89
89
  };
90
- //# sourceMappingURL=chunk-MNSQSU7T.js.map
90
+ //# sourceMappingURL=chunk-O5ILFRFV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/general/sqlDb.js.ts"],"sourcesContent":["// constants.ts or at top of file\nimport type {DatabaseType} from \"../../libs/types.js\";\nimport { URL } from 'url';\nimport {ENV} from \"../../libs/env.js\";\n\n\n\nexport function detectSQLDatabase(url: string): DatabaseType {\n try {\n // Parse the URL\n const parsedUrl = new URL(url);\n const scheme = parsedUrl.protocol.replace(':', '').toLowerCase();\n\n // MySQL schemes\n const mysqlSchemes = [\n 'mysql',\n 'mysql+pymysql',\n 'mysql+mysqldb',\n 'mysql+mysqlconnector',\n 'mysql2',\n 'mysql+mysql2'\n ];\n\n // PostgreSQL schemes\n const postgresSchemes = [\n 'postgresql',\n 'postgres',\n 'postgresql+psycopg2',\n 'postgres+psycopg2',\n 'postgresql+pg8000',\n 'postgres+pg8000',\n 'postgresql+asyncpg',\n 'postgresql+pg',\n 'postgres+pg'\n ];\n\n // Check for MySQL\n if (mysqlSchemes.includes(scheme)) {\n return ENV.MY_SQL;\n }\n\n // Check for PostgreSQL\n if (postgresSchemes.includes(scheme)) {\n return ENV.POSTGRES_SQL;\n }\n\n // If it's a generic URL without protocol, try to detect from connection string\n // This handles cases like \"localhost:5432/mydb\" or \"127.0.0.1:3306/mydb\"\n if (scheme === '' && !parsedUrl.protocol) {\n // Try parsing as a generic connection string\n const connectionString = url.toLowerCase();\n if (connectionString.includes('mysql') ||\n connectionString.includes('my-sql') ||\n parsedUrl.port === '3306') {\n return ENV.MY_SQL;\n }\n if (connectionString.includes('postgres') ||\n connectionString.includes('postgre') ||\n parsedUrl.port === '5432') {\n return ENV.POSTGRES_SQL;\n }\n }\n\n // If we reach here, we couldn't detect the database type\n throw new Error(\n `Unsupported or unrecognized database type. URL: ${url}. ` +\n `Detected scheme: ${scheme || 'none'}`\n );\n\n } catch (error) {\n if (error instanceof Error && error.message.includes('Invalid URL')) {\n // Try to detect from raw connection string without protocol\n const lowerUrl = url.toLowerCase();\n if (lowerUrl.includes('mysql') || lowerUrl.includes('my-sql')) {\n return ENV.MY_SQL;\n }\n if (lowerUrl.includes('postgres') || lowerUrl.includes('postgre')) {\n return ENV.POSTGRES_SQL;\n }\n // Check ports as fallback\n if (url.includes(':3306')) return ENV.MY_SQL;\n if (url.includes(':5432')) return ENV.POSTGRES_SQL;\n\n throw new Error(`Invalid URL format: ${url}`);\n }\n throw error;\n }\n}\n\n\n\n\n\n\nexport function isMySQL(url: string): boolean {\n try {\n return detectSQLDatabase(url) === ENV.MY_SQL;\n } catch {\n return false;\n }\n}\n\n\n\n\n\n\n\nexport function isPostgreSQL(url: string): boolean {\n try {\n return detectSQLDatabase(url) === ENV.POSTGRES_SQL;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;AAEA,SAAS,WAAW;AAKb,SAAS,kBAAkB,KAA2B;AACzD,MAAI;AAEA,UAAM,YAAY,IAAI,IAAI,GAAG;AAC7B,UAAM,SAAS,UAAU,SAAS,QAAQ,KAAK,EAAE,EAAE,YAAY;AAG/D,UAAM,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAGA,UAAM,kBAAkB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAGA,QAAI,aAAa,SAAS,MAAM,GAAG;AAC/B,aAAO,IAAI;AAAA,IACf;AAGA,QAAI,gBAAgB,SAAS,MAAM,GAAG;AAClC,aAAO,IAAI;AAAA,IACf;AAIA,QAAI,WAAW,MAAM,CAAC,UAAU,UAAU;AAEtC,YAAM,mBAAmB,IAAI,YAAY;AACzC,UAAI,iBAAiB,SAAS,OAAO,KACjC,iBAAiB,SAAS,QAAQ,KAClC,UAAU,SAAS,QAAQ;AAC3B,eAAO,IAAI;AAAA,MACf;AACA,UAAI,iBAAiB,SAAS,UAAU,KACpC,iBAAiB,SAAS,SAAS,KACnC,UAAU,SAAS,QAAQ;AAC3B,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AAGA,UAAM,IAAI;AAAA,MACN,mDAAmD,GAAG,sBAClC,UAAU,MAAM;AAAA,IACxC;AAAA,EAEJ,SAAS,OAAO;AACZ,QAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,aAAa,GAAG;AAEjE,YAAM,WAAW,IAAI,YAAY;AACjC,UAAI,SAAS,SAAS,OAAO,KAAK,SAAS,SAAS,QAAQ,GAAG;AAC3D,eAAO,IAAI;AAAA,MACf;AACA,UAAI,SAAS,SAAS,UAAU,KAAK,SAAS,SAAS,SAAS,GAAG;AAC/D,eAAO,IAAI;AAAA,MACf;AAEA,UAAI,IAAI,SAAS,OAAO,EAAG,QAAO,IAAI;AACtC,UAAI,IAAI,SAAS,OAAO,EAAG,QAAO,IAAI;AAEtC,YAAM,IAAI,MAAM,uBAAuB,GAAG,EAAE;AAAA,IAChD;AACA,UAAM;AAAA,EACV;AACJ;AAhFgB;AAuFT,SAAS,QAAQ,KAAsB;AAC1C,MAAI;AACA,WAAO,kBAAkB,GAAG,MAAM,IAAI;AAAA,EAC1C,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AANgB;AAcT,SAAS,aAAa,KAAsB;AAC/C,MAAI;AACA,WAAO,kBAAkB,GAAG,MAAM,IAAI;AAAA,EAC1C,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AANgB;","names":[]}
@@ -0,0 +1,40 @@
1
+ import {
2
+ getMongoServer
3
+ } from "./chunk-2QNCQ5L5.js";
4
+ import {
5
+ __name
6
+ } from "./chunk-7QVYU63E.js";
7
+
8
+ // src/utility/utilis/mongoDb/updateFiled.ts
9
+ var mongoUpdateField = /* @__PURE__ */ __name(async (params) => {
10
+ const {
11
+ dbName,
12
+ collectionName,
13
+ query,
14
+ updatable,
15
+ updateMany = false,
16
+ options
17
+ } = params;
18
+ try {
19
+ const db = getMongoServer().db(dbName);
20
+ const collection = db.collection(collectionName);
21
+ const result = updateMany ? await collection.updateMany(query, updatable, options) : await collection.updateOne(query, updatable, options);
22
+ return {
23
+ status: true,
24
+ result,
25
+ error: null
26
+ };
27
+ } catch (err) {
28
+ const error = err instanceof Error ? err : new Error(String(err));
29
+ return {
30
+ status: false,
31
+ result: null,
32
+ error
33
+ };
34
+ }
35
+ }, "mongoUpdateField");
36
+
37
+ export {
38
+ mongoUpdateField
39
+ };
40
+ //# sourceMappingURL=chunk-O76OK6Y7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/mongoDb/updateFiled.ts"],"sourcesContent":["import type {CustomUpdateResult} from \"../../libs/types.js\";\nimport {getMongoServer} from \"../../../engine/mondoDb/mongoDB.js\";\nimport type {UpdateDocument} from \"../../libs/interface.js\";\n\n\n\nexport const mongoUpdateField = async (\n params: UpdateDocument\n): Promise<CustomUpdateResult> => {\n const {\n dbName,\n collectionName,\n query,\n updatable,\n updateMany = false,\n options\n } = params;\n\n try {\n const db = getMongoServer().db(dbName);\n const collection = db.collection(collectionName);\n\n // Perform update with await\n const result = updateMany\n ? await collection.updateMany(query, updatable, options)\n : await collection.updateOne(query, updatable, options);\n\n return {\n status: true,\n result,\n error: null,\n };\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n\n return {\n status: false,\n result: null,\n error,\n };\n }\n};\n"],"mappings":";;;;;;;;AAMO,IAAM,mBAAmB,8BAC5B,WAC8B;AAC9B,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EACJ,IAAI;AAEJ,MAAI;AACA,UAAM,KAAK,eAAe,EAAE,GAAG,MAAM;AACrC,UAAM,aAAa,GAAG,WAAW,cAAc;AAG/C,UAAM,SAAS,aACT,MAAM,WAAW,WAAW,OAAO,WAAW,OAAO,IACrD,MAAM,WAAW,UAAU,OAAO,WAAW,OAAO;AAE1D,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,OAAO;AAAA,IACX;AAAA,EACJ,SAAS,KAAK;AACV,UAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAEhE,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACJ,GAnCgC;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ENV
3
- } from "./chunk-EWQYVPOL.js";
3
+ } from "./chunk-LE2SDA4O.js";
4
4
  import {
5
5
  __name
6
6
  } from "./chunk-7QVYU63E.js";
@@ -9,6 +9,7 @@ import {
9
9
  import mime from "mime-types";
10
10
  import { readFile } from "fs/promises";
11
11
  import fs from "fs/promises";
12
+ import fsSync from "fs";
12
13
  async function fileExistsAsync(filePath) {
13
14
  try {
14
15
  await fs.access(filePath);
@@ -18,6 +19,15 @@ async function fileExistsAsync(filePath) {
18
19
  }
19
20
  }
20
21
  __name(fileExistsAsync, "fileExistsAsync");
22
+ function fileExistsSync(filePath) {
23
+ try {
24
+ fsSync.accessSync(filePath);
25
+ return true;
26
+ } catch {
27
+ return false;
28
+ }
29
+ }
30
+ __name(fileExistsSync, "fileExistsSync");
21
31
  function getFileExtension(input) {
22
32
  if (Buffer.isBuffer(input)) {
23
33
  return "";
@@ -38,31 +48,55 @@ function getFileExtension(input) {
38
48
  return match?.[1]?.toLowerCase() ?? "";
39
49
  }
40
50
  __name(getFileExtension, "getFileExtension");
41
- function buildPath({
42
- path_prefix = "",
43
- path = [],
44
- path_postfix = "",
45
- fileName
46
- }) {
47
- const resolvedFileName = fileName instanceof File ? fileName.name : fileName ?? "";
51
+ function buildPath(options) {
52
+ if ("path" in options) {
53
+ return options.path.replace(/^\/+|\/+$/g, "").replace(/\/+/g, "/");
54
+ }
55
+ const {
56
+ path_prefix,
57
+ segments = [],
58
+ path_postfix,
59
+ fileName
60
+ } = options;
61
+ let resolvedFileName = "";
62
+ if (typeof fileName === "string") {
63
+ resolvedFileName = fileName;
64
+ } else if (Buffer.isBuffer(fileName)) {
65
+ resolvedFileName = fileName.toString();
66
+ } else if (fileName) {
67
+ if ("name" in fileName) {
68
+ resolvedFileName = fileName.name;
69
+ } else if ("originalname" in fileName) {
70
+ resolvedFileName = fileName.originalname;
71
+ }
72
+ }
48
73
  const allSegments = [
49
74
  path_prefix,
50
- ...path,
75
+ ...segments,
51
76
  path_postfix,
52
77
  resolvedFileName
53
78
  ];
54
- return allSegments.filter((segment) => Boolean(segment && segment.trim())).map((segment) => segment.replace(/^\/+|\/+$/g, "")).map((segment) => segment.replace(/\/+/g, "/")).filter((segment) => segment.length > 0).join("/");
79
+ return allSegments.filter(
80
+ (segment) => Boolean(segment && segment.trim())
81
+ ).map(
82
+ (segment) => segment.replace(/^\/+|\/+$/g, "").replace(/\/+/g, "/")
83
+ ).filter((segment) => segment.length > 0).join("/");
55
84
  }
56
85
  __name(buildPath, "buildPath");
57
- function downloadedFilePath({ path = [], fileName }) {
58
- const cleanedPath = path.filter((segment) => segment !== ENV.IN_APP_BUCKET);
86
+ function getInAppBucketDownloadPath({
87
+ segments = [],
88
+ fileName
89
+ } = {}) {
90
+ const cleanedSegments = segments.filter(
91
+ (segment) => segment !== ENV.IN_APP_BUCKET
92
+ );
59
93
  return buildPath({
60
94
  path_prefix: ENV.IN_APP_BUCKET,
61
- fileName: fileName instanceof File ? fileName.name : fileName ?? "",
62
- path: cleanedPath
95
+ segments: cleanedSegments,
96
+ ...fileName && { fileName }
63
97
  });
64
98
  }
65
- __name(downloadedFilePath, "downloadedFilePath");
99
+ __name(getInAppBucketDownloadPath, "getInAppBucketDownloadPath");
66
100
  var getFileContentType = /* @__PURE__ */ __name(async (file) => {
67
101
  if (Buffer.isBuffer(file)) {
68
102
  return "application/octet-stream";
@@ -83,11 +117,11 @@ var url_or_path = /* @__PURE__ */ __name((val) => {
83
117
  try {
84
118
  const parsed = new URL(val);
85
119
  if (parsed.protocol === "http:" || parsed.protocol === "https:") {
86
- return ENV.URL;
120
+ return "url";
87
121
  }
88
122
  } catch {
89
123
  }
90
- return ENV.PATH;
124
+ return "path";
91
125
  }, "url_or_path");
92
126
  async function toUint8Array(file) {
93
127
  if (typeof file === "string") {
@@ -111,11 +145,12 @@ __name(toUint8Array, "toUint8Array");
111
145
 
112
146
  export {
113
147
  fileExistsAsync,
148
+ fileExistsSync,
114
149
  getFileExtension,
115
150
  buildPath,
116
- downloadedFilePath,
151
+ getInAppBucketDownloadPath,
117
152
  getFileContentType,
118
153
  url_or_path,
119
154
  toUint8Array
120
155
  };
121
- //# sourceMappingURL=chunk-W3W3X2OE.js.map
156
+ //# sourceMappingURL=chunk-QW2GGDEG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/general/file-operations.ts"],"sourcesContent":["import mime from \"mime-types\";\nimport {ENV} from \"../../libs/env.js\";\nimport {readFile} from \"node:fs/promises\";\nimport fs from \"fs/promises\";\nimport fsSync from \"fs\";\nimport type {PathOptions} from \"../../libs/types.js\";\nimport type {DownloadablePath} from \"../../libs/interface.js\";\n\n\n\n\n\n\n\n\nexport async function fileExistsAsync(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true; // File exists and is accessible\n } catch {\n return false; // File does not exist\n }\n}\n\n\n\n\n\n\nexport function fileExistsSync(filePath: string): boolean {\n try {\n fsSync.accessSync(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n\n\n\n\n\nexport function getFileExtension(input: Express.Multer.File | File | Buffer | string): string {\n // 1. If it's a raw Buffer, it has no file name/extension metadata\n if (Buffer.isBuffer(input)) {\n return '';\n }\n\n // 2. Extract the filename string based on the input type\n let filename = '';\n\n if (typeof input === 'string') {\n filename = input;\n }\n else if ('originalname' in input && input.originalname) {\n // Express.Multer.File\n filename = input.originalname;\n }\n else if ('name' in input && input.name) {\n // Web API File\n filename = input.name;\n }\n\n if (!filename) {\n return '';\n }\n\n // 3. Remove URL query parameters or hashes (if a URL/path string is passed)\n const cleanFilename = filename.split(/[?#]/)[0] as string;\n\n // 4. Extract the last segment after the final dot\n const match = cleanFilename.match(/\\.([^./\\\\]+)$/);\n\n return match?.[1]?.toLowerCase() ?? '';\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport function buildPath(options: PathOptions): string {\n // If a complete path is directly provided\n if (\"path\" in options) {\n return options.path\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/\\/+/g, '/');\n }\n\n const {\n path_prefix,\n segments = [],\n path_postfix,\n fileName,\n } = options;\n\n let resolvedFileName = '';\n\n if (typeof fileName === 'string') {\n resolvedFileName = fileName;\n } else if (Buffer.isBuffer(fileName)) {\n resolvedFileName = fileName.toString();\n } else if (fileName) {\n // Browser File\n if ('name' in fileName) {\n resolvedFileName = fileName.name;\n }\n // Express.Multer.File\n else if ('originalname' in fileName) {\n resolvedFileName = fileName.originalname;\n }\n }\n\n const allSegments = [\n path_prefix,\n ...segments,\n path_postfix,\n resolvedFileName,\n ];\n\n return allSegments\n .filter(\n (segment): segment is string =>\n Boolean(segment && segment.trim())\n )\n .map((segment) =>\n segment\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/\\/+/g, '/')\n )\n .filter((segment) => segment.length > 0)\n .join('/');\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport function getInAppBucketDownloadPath(\n {\n segments = [],\n fileName,\n }: DownloadablePath = {}\n): string {\n const cleanedSegments = segments.filter(\n (segment) => segment !== ENV.IN_APP_BUCKET\n );\n\n return buildPath({\n path_prefix: ENV.IN_APP_BUCKET,\n segments: cleanedSegments,\n ...(fileName && {fileName: fileName}),\n });\n}\n\n\n\n\n\n\n\n\n\n\n\nexport const getFileContentType = async (\n file: Express.Multer.File | File | Buffer | string\n): Promise<string> => {\n // 1. Raw Buffer: Buffers don't carry MIME metadata, so default to octet-stream\n if (Buffer.isBuffer(file)) {\n return 'application/octet-stream';\n }\n\n // 2. String path or URL: Look up MIME type based on extension/filename\n if (typeof file === 'string') {\n const detectedType = mime.lookup(file);\n return detectedType || 'application/octet-stream';\n }\n\n // 3. Express.Multer.File: Has 'mimetype' property\n if ('mimetype' in file && file.mimetype) {\n return file.mimetype;\n }\n\n // 4. Web API File: Has 'type' property\n if ('type' in file && file.type) {\n return file.type;\n }\n\n // 5. Fallback if object has no recognizable MIME type\n return 'application/octet-stream';\n};\n\n\n\n\n\n\n\n\n\n\n\n\nexport const url_or_path = (val: string): 'url' | 'path' => {\n try {\n const parsed = new URL(val);\n if (parsed.protocol === \"http:\" || parsed.protocol === \"https:\") {\n return 'url';\n }\n } catch {\n // If new URL() throws, it is a local path\n }\n return 'path';\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport async function toUint8Array(file: Express.Multer.File | File | Buffer | string): Promise<Uint8Array> {\n if (typeof file === \"string\") {\n // File path on disk\n return await readFile(file);\n }\n\n if (Buffer.isBuffer(file)) {\n // Raw Node.js Buffer\n return new Uint8Array(file);\n }\n\n if (\"buffer\" in file && Buffer.isBuffer(file.buffer)) {\n // Express.Multer.File (Memory storage)\n return new Uint8Array(file.buffer);\n }\n\n if (\"path\" in file && typeof file.path === \"string\") {\n // Express.Multer.File (Disk storage)\n return await readFile(file.path);\n }\n\n if (\"arrayBuffer\" in file && typeof file.arrayBuffer === \"function\") {\n // Web API File / Blob\n return new Uint8Array(await file.arrayBuffer());\n }\n\n throw new Error(\"Unable to parse file input into a valid binary buffer.\");\n}\n\n\n\n\n\n"],"mappings":"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","names":[]}
@@ -0,0 +1,74 @@
1
+ import {
2
+ generateUniqueValue
3
+ } from "./chunk-IZEPCXYK.js";
4
+ import {
5
+ getKeyFromUrl
6
+ } from "./chunk-ZC33GE2U.js";
7
+ import {
8
+ s3Client
9
+ } from "./chunk-J3P6W53K.js";
10
+ import {
11
+ getFileExtension,
12
+ getInAppBucketDownloadPath
13
+ } from "./chunk-QW2GGDEG.js";
14
+ import {
15
+ ENV
16
+ } from "./chunk-LE2SDA4O.js";
17
+ import {
18
+ __name
19
+ } from "./chunk-7QVYU63E.js";
20
+
21
+ // src/utility/utilis/cloud_storage/downloadFile.ts
22
+ import { GetObjectCommand } from "@aws-sdk/client-s3";
23
+ import { pipeline } from "stream/promises";
24
+ import path from "path";
25
+ import fsPromises from "fs/promises";
26
+ import * as fs from "fs";
27
+ var downloadFile = /* @__PURE__ */ __name(async ({
28
+ url,
29
+ outputPath
30
+ }) => {
31
+ try {
32
+ const key = getKeyFromUrl(url);
33
+ const command = new GetObjectCommand({
34
+ Bucket: ENV.BUCKET_NAME,
35
+ Key: key
36
+ });
37
+ const response = await s3Client.send(command);
38
+ if (!response.Body) {
39
+ console.log(response);
40
+ return {
41
+ status: true,
42
+ url,
43
+ error: new Error(`Empty response body received for key: ${key}`)
44
+ };
45
+ }
46
+ const fileExtension = getFileExtension(url);
47
+ const fileName = generateUniqueValue(16);
48
+ const finalFileName = `${fileName}.${fileExtension}`;
49
+ const targetPath = getInAppBucketDownloadPath({ segments: outputPath || [], fileName: finalFileName });
50
+ const dir = path.dirname(targetPath);
51
+ if (!fs.existsSync(dir)) {
52
+ await fsPromises.mkdir(dir, { recursive: true });
53
+ }
54
+ const stream = response.Body;
55
+ await pipeline(stream, fs.createWriteStream(targetPath));
56
+ return {
57
+ status: true,
58
+ url,
59
+ path: targetPath
60
+ };
61
+ } catch (error) {
62
+ console.error(error);
63
+ return {
64
+ status: false,
65
+ url,
66
+ error: error instanceof Error ? error : new Error(String(error))
67
+ };
68
+ }
69
+ }, "downloadFile");
70
+
71
+ export {
72
+ downloadFile
73
+ };
74
+ //# sourceMappingURL=chunk-RZ7XHAUV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/downloadFile.ts"],"sourcesContent":["import {GetObjectCommand} from \"@aws-sdk/client-s3\";\nimport {getKeyFromUrl} from \"../general/web.js\";\nimport { pipeline } from \"stream/promises\";\nimport path from 'node:path'\nimport fsPromises from 'fs/promises';\nimport * as fs from \"node:fs\";\nimport type {DownloadedFile, DownloadFileParams} from \"../../libs/interface.js\";\nimport {ENV} from \"../../libs/env.js\";\nimport {getFileExtension, getInAppBucketDownloadPath} from \"../general/file-operations.js\";\nimport {generateUniqueValue} from \"../general/uuids.js\";\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\n\n\n\nexport const downloadFile = async ({\n url,\n outputPath,\n }: DownloadFileParams): Promise<DownloadedFile> => {\n try {\n const key = getKeyFromUrl(url);\n\n const command = new GetObjectCommand({\n Bucket: ENV.BUCKET_NAME,\n Key: key,\n });\n\n const response = await s3Client.send(command);\n\n if (!response.Body) {\n console.log(response);\n return {\n status: true,\n url: url,\n error: new Error(`Empty response body received for key: ${key}`),\n };\n }\n\n const fileExtension = getFileExtension(url);\n const fileName = generateUniqueValue(16);\n const finalFileName = `${fileName}.${fileExtension}`;\n const targetPath = getInAppBucketDownloadPath({ segments: outputPath || [], fileName: finalFileName });\n\n // Ensure directory structure exists for targetPath\n const dir = path.dirname(targetPath);\n if (!fs.existsSync(dir)) {\n await fsPromises.mkdir(dir, { recursive: true });\n }\n\n // Cast stream to NodeJS.ReadableStream for pipeline overload\n const stream = response.Body as NodeJS.ReadableStream;\n await pipeline(stream, fs.createWriteStream(targetPath));\n\n return {\n status: true,\n url: url,\n path: targetPath,\n };\n\n } catch (error) {\n console.error(error);\n return {\n status: false,\n url: url,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAQ,wBAAuB;AAE/B,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,YAAY,QAAQ;AASb,IAAM,eAAe,8BAAO;AAAA,EACI;AAAA,EACA;AACJ,MAAmD;AAClF,MAAI;AACA,UAAM,MAAM,cAAc,GAAG;AAE7B,UAAM,UAAU,IAAI,iBAAiB;AAAA,MACjC,QAAQ,IAAI;AAAA,MACZ,KAAK;AAAA,IACT,CAAC;AAED,UAAM,WAAW,MAAM,SAAS,KAAK,OAAO;AAE5C,QAAI,CAAC,SAAS,MAAM;AAChB,cAAQ,IAAI,QAAQ;AACpB,aAAO;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,IAAI,MAAM,yCAAyC,GAAG,EAAE;AAAA,MACnE;AAAA,IACJ;AAEA,UAAM,gBAAgB,iBAAiB,GAAG;AAC1C,UAAM,WAAW,oBAAoB,EAAE;AACvC,UAAM,gBAAgB,GAAG,QAAQ,IAAI,aAAa;AAClD,UAAM,aAAa,2BAA2B,EAAE,UAAU,cAAc,CAAC,GAAG,UAAU,cAAc,CAAC;AAGrG,UAAM,MAAM,KAAK,QAAQ,UAAU;AACnC,QAAI,CAAI,cAAW,GAAG,GAAG;AACrB,YAAM,WAAW,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACnD;AAGA,UAAM,SAAS,SAAS;AACxB,UAAM,SAAS,QAAW,qBAAkB,UAAU,CAAC;AAEvD,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,IACV;AAAA,EAEJ,SAAS,OAAO;AACZ,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,IACnE;AAAA,EACJ;AACJ,GApD4B;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getMySqlPool
3
- } from "./chunk-QVTKG7FD.js";
3
+ } from "./chunk-HV3IQJH3.js";
4
4
  import {
5
5
  __name
6
6
  } from "./chunk-7QVYU63E.js";
@@ -145,4 +145,4 @@ var executeCustom = /* @__PURE__ */ __name(async (customQuery, poolClient) => {
145
145
  export {
146
146
  executeMySqlQuery
147
147
  };
148
- //# sourceMappingURL=chunk-TP3K7DMH.js.map
148
+ //# sourceMappingURL=chunk-U7BCM2WN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.ts"],"sourcesContent":["import type {PoolConnection} from \"mysql2/promise\";\nimport type {QueryItems} from \"../../../libs/interface.js\";\nimport {getMySqlPool} from \"../../../../engine/sql/mySql.js\";\nimport type {SqlQuery, SqlRawQuery} from \"../../../libs/types.js\";\n\n\nexport const executeMySqlQuery = async (query: QueryItems) => {\n let client: PoolConnection | null = null;\n let results: any[] = [];\n\n try {\n // Check if we need a transaction (multiple queries or mix of crud and custom)\n const needsTransaction = (query.crud && query.crud?.length > 1) ||\n (query.crud && query.custom) ||\n (query.crud && query.crud?.length === 0);\n\n if (needsTransaction) {\n client = await (await getMySqlPool()).getConnection();\n await client.beginTransaction();\n }\n\n // Execute CRUD queries\n if (query.crud && query.crud.length > 0) {\n const crudResults = await executeCrud(query.crud, client);\n results = results.concat(crudResults);\n }\n\n // Execute custom query\n if (query.custom && !Array.isArray(query.custom)) {\n const customResult = await executeCustom(query.custom, client);\n results.push(customResult);\n }\n\n if (Array.isArray(query.custom) && query.custom.length) {\n const customResult = await executeCustom(query.custom, client);\n results.push(customResult);\n }\n\n // Commit transaction if we started one\n if (client) {\n await client.commit();\n }\n\n return results;\n\n } catch (error) {\n // Rollback if we have a client (meaning we started a transaction)\n if (client) {\n await client.rollback();\n }\n throw error;\n }\n finally {\n // Release client if we acquired one\n if (client) {\n client.release();\n }\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\nconst executeCrud = async (queries: SqlQuery[], poolClient?: PoolConnection | null): Promise<any[]> => {\n const results: any[] = [];\n const pool = poolClient || await getMySqlPool();\n\n try {\n for (const query of queries) {\n let sql: string = '';\n let params: any[] = [];\n\n if ('insert_one' in query) {\n const { item, table } = query.insert_one;\n const columns = Object.keys(item);\n const values = Object.values(item);\n\n const placeholders = values.map(() => '?').join(', ');\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders})`;\n params = values;\n\n const result = pool.query(sql, params);\n const insertId = (result as any)[0]?.insertId;\n\n if (insertId) {\n const [rows] = await (await pool).query(`SELECT * FROM ${table} WHERE id = ?`, [insertId]);\n results.push(rows);\n } else {\n results.push([]);\n }\n continue;\n }\n\n if ('insert_many' in query) {\n const { item, table } = query.insert_many;\n\n if (item.length > 0) {\n\n const columns = Object.keys(item[0] || {});\n const placeholders = item.map(() => `(${columns.map(() => '?').join(', ')})`).join(', ');\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${placeholders}`;\n params = item.flatMap(row => Object.values(row));\n\n const result = await pool.query(sql, params);\n const insertId = (result as any)[0]?.insertId;\n\n if (insertId) {\n const [rows] = await pool.query(`SELECT * FROM ${table} WHERE id >= ? ORDER BY id LIMIT ?`, [insertId, item.length]);\n results.push(rows);\n } else {\n results.push([]);\n }\n }\n\n }\n\n else if ('update' in query) {\n const { item, table, condition, conditionalParams = [] } = query.update;\n\n const columns = Object.keys(item);\n const values = Object.values(item);\n\n const setClause = columns.map(col => `${col} = ?`).join(', ');\n sql = `UPDATE ${table} SET ${setClause} WHERE ${condition}`;\n params = [...values, ...conditionalParams];\n\n await (await pool).query(sql, params);\n\n // Get updated rows\n const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;\n const [rows] = await pool.query(selectSql, conditionalParams);\n results.push(rows);\n\n }\n\n else if ('select' in query) {\n const { columns = ['*'], table, condition, conditionalParams = [] } = query.select;\n const selectColumns = columns.join(', ');\n sql = `SELECT ${selectColumns} FROM ${table}`;\n if (condition) {\n sql += ` WHERE ${condition}`;\n params = conditionalParams;\n }\n const [rows] = await pool.query(sql, params);\n results.push(rows);\n\n }\n\n else if ('delete' in query) {\n const { table, condition, conditionalParams = [] } = query.delete;\n\n // Get deleted rows before deleting\n const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;\n const [rows] = await pool.query(selectSql, conditionalParams);\n\n sql = `DELETE FROM ${table} WHERE ${condition}`;\n params = conditionalParams;\n await pool.query(sql, params);\n results.push(rows);\n\n }\n }\n\n return results;\n\n } catch (error) {\n throw error;\n }\n}\n\n\n\n\n\n\n\n\n\n\n\nconst executeCustom = async (\n customQuery: SqlRawQuery | SqlRawQuery[],\n poolClient?: PoolConnection | null\n): Promise<any[]> => {\n const pool = poolClient || await getMySqlPool();\n\n try {\n // If an array of raw queries was passed\n if (Array.isArray(customQuery)) {\n const results: any[] = [];\n for (const item of customQuery) {\n const { query: sql, params = [] } = item;\n if (sql) {\n const [rows] = await pool.query(sql, params);\n results.push(rows);\n }\n }\n return results;\n }\n\n // If a single raw query object was passed\n const { query: sql, params = [] } = customQuery;\n if (!sql) {\n throw new Error(\"Custom query missing required 'query' string property.\");\n }\n\n return await pool.query(sql, params);\n\n } catch (error) {\n throw error;\n }\n};\n"],"mappings":"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","names":["sql","params"]}