backfarm 1.0.3 → 1.0.5

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 (162) hide show
  1. package/dist/{chunk-HZ4GLSOO.js → chunk-2RFTNIPS.js} +11 -7
  2. package/dist/chunk-2RFTNIPS.js.map +1 -0
  3. package/dist/{chunk-X3R3RLXY.js → chunk-3IO4NPP3.js} +1 -1
  4. package/dist/chunk-3IO4NPP3.js.map +1 -0
  5. package/dist/chunk-ATY3REI3.js +89 -0
  6. package/dist/chunk-ATY3REI3.js.map +1 -0
  7. package/dist/{chunk-FMCW72HO.js → chunk-CBTP2HOO.js} +64 -18
  8. package/dist/chunk-CBTP2HOO.js.map +1 -0
  9. package/dist/chunk-CPECHQJJ.js +18 -0
  10. package/dist/chunk-CPECHQJJ.js.map +1 -0
  11. package/dist/{chunk-BMPUYKJJ.js → chunk-DRLEV7OW.js} +2 -2
  12. package/dist/chunk-E2NNDV4O.js +40 -0
  13. package/dist/chunk-E2NNDV4O.js.map +1 -0
  14. package/dist/{chunk-EB35KLDE.js → chunk-ECIP24BN.js} +9 -3
  15. package/dist/chunk-ECIP24BN.js.map +1 -0
  16. package/dist/chunk-ES6AHESH.js +17 -0
  17. package/dist/chunk-ES6AHESH.js.map +1 -0
  18. package/dist/chunk-FNFFY5LD.js +44 -0
  19. package/dist/chunk-FNFFY5LD.js.map +1 -0
  20. package/dist/chunk-IAQMTSGP.js +19 -0
  21. package/dist/chunk-IAQMTSGP.js.map +1 -0
  22. package/dist/chunk-LNFYUCA3.js +32 -0
  23. package/dist/chunk-LNFYUCA3.js.map +1 -0
  24. package/dist/chunk-LW246RDT.js +33 -0
  25. package/dist/chunk-LW246RDT.js.map +1 -0
  26. package/dist/chunk-M2C6HHRK.js +34 -0
  27. package/dist/chunk-M2C6HHRK.js.map +1 -0
  28. package/dist/chunk-MKS3GPZY.js +74 -0
  29. package/dist/chunk-MKS3GPZY.js.map +1 -0
  30. package/dist/chunk-O42S6QIG.js +88 -0
  31. package/dist/chunk-O42S6QIG.js.map +1 -0
  32. package/dist/chunk-OHDZYSL3.js +60 -0
  33. package/dist/chunk-OHDZYSL3.js.map +1 -0
  34. package/dist/chunk-P4FWSZ43.js +47 -0
  35. package/dist/chunk-P4FWSZ43.js.map +1 -0
  36. package/dist/{chunk-SSFPGDA3.js → chunk-QBBF6LZZ.js} +4 -4
  37. package/dist/chunk-QBBF6LZZ.js.map +1 -0
  38. package/dist/chunk-QS4MDB5H.js +336 -0
  39. package/dist/chunk-QS4MDB5H.js.map +1 -0
  40. package/dist/{chunk-MEQAHLW6.js → chunk-QUZPQJRE.js} +2 -2
  41. package/dist/chunk-RIBTACPE.js +35 -0
  42. package/dist/chunk-RIBTACPE.js.map +1 -0
  43. package/dist/{chunk-NMNAPTVV.js → chunk-SOZL76ZM.js} +7 -3
  44. package/dist/chunk-SOZL76ZM.js.map +1 -0
  45. package/dist/{chunk-MNSQSU7T.js → chunk-T4KN3FCF.js} +1 -1
  46. package/dist/chunk-T4KN3FCF.js.map +1 -0
  47. package/dist/{chunk-AATAYCEY.js → chunk-WLJV5O6C.js} +10 -10
  48. package/dist/chunk-WLJV5O6C.js.map +1 -0
  49. package/dist/engine/cloudBucket/r2Storage.js +3 -1
  50. package/dist/engine/mondoDb/mongoDB.js +2 -1
  51. package/dist/engine/server/server.d.ts +5 -3
  52. package/dist/engine/server/server.js +28 -6
  53. package/dist/engine/sql/mySql.d.ts +2 -2
  54. package/dist/engine/sql/mySql.js +2 -1
  55. package/dist/engine/sql/pgSql.js +2 -1
  56. package/dist/utility/libs/index.d.ts +1772 -0
  57. package/dist/utility/libs/index.js +101 -0
  58. package/dist/utility/libs/interface.d.ts +5 -7
  59. package/dist/utility/libs/run-all.js +46 -0
  60. package/dist/utility/libs/run-all.js.map +1 -0
  61. package/dist/{chunk-LFRKRR7G.js → utility/libs/run-bucket.js} +4 -7
  62. package/dist/utility/libs/run-bucket.js.map +1 -0
  63. package/dist/utility/libs/run-node-server.js +35 -0
  64. package/dist/utility/libs/run-node-server.js.map +1 -0
  65. package/dist/utility/libs/types.d.ts +11 -31
  66. package/dist/utility/libs/types.js.map +1 -1
  67. package/dist/utility/utilis/cloud_storage/deleteFile.js +7 -54
  68. package/dist/utility/utilis/cloud_storage/deleteFile.js.map +1 -1
  69. package/dist/utility/utilis/cloud_storage/deleteFiles.js +7 -83
  70. package/dist/utility/utilis/cloud_storage/deleteFiles.js.map +1 -1
  71. package/dist/utility/utilis/cloud_storage/downloadFile.js +8 -68
  72. package/dist/utility/utilis/cloud_storage/downloadFile.js.map +1 -1
  73. package/dist/utility/utilis/cloud_storage/downloadFiles.js +8 -82
  74. package/dist/utility/utilis/cloud_storage/downloadFiles.js.map +1 -1
  75. package/dist/utility/utilis/cloud_storage/uploadFile.js +5 -5
  76. package/dist/utility/utilis/cloud_storage/uploadFiles.d.ts +0 -64
  77. package/dist/utility/utilis/cloud_storage/uploadFiles.js +8 -42
  78. package/dist/utility/utilis/cloud_storage/uploadFiles.js.map +1 -1
  79. package/dist/utility/utilis/general/file-operations.d.ts +8 -132
  80. package/dist/utility/utilis/general/file-operations.js +7 -3
  81. package/dist/utility/utilis/general/sqlDb.js.d.ts +0 -141
  82. package/dist/utility/utilis/general/sqlDb.js.js +1 -1
  83. package/dist/utility/utilis/general/uuids.d.ts +0 -43
  84. package/dist/utility/utilis/general/uuids.js +1 -1
  85. package/dist/utility/utilis/general/web.d.ts +2 -238
  86. package/dist/utility/utilis/general/web.js +3 -3
  87. package/dist/utility/utilis/mongoDb/buldWrite.d.ts +0 -44
  88. package/dist/utility/utilis/mongoDb/buldWrite.js +5 -26
  89. package/dist/utility/utilis/mongoDb/buldWrite.js.map +1 -1
  90. package/dist/utility/utilis/mongoDb/deleteDocument.d.ts +0 -45
  91. package/dist/utility/utilis/mongoDb/deleteDocument.js +5 -28
  92. package/dist/utility/utilis/mongoDb/deleteDocument.js.map +1 -1
  93. package/dist/utility/utilis/mongoDb/insertField.d.ts +2 -33
  94. package/dist/utility/utilis/mongoDb/insertField.js +6 -28
  95. package/dist/utility/utilis/mongoDb/insertField.js.map +1 -1
  96. package/dist/utility/utilis/mongoDb/insertFields.d.ts +2 -41
  97. package/dist/utility/utilis/mongoDb/insertFields.js +6 -30
  98. package/dist/utility/utilis/mongoDb/insertFields.js.map +1 -1
  99. package/dist/utility/utilis/mongoDb/updateFiled.d.ts +0 -56
  100. package/dist/utility/utilis/mongoDb/updateFiled.js +5 -34
  101. package/dist/utility/utilis/mongoDb/updateFiled.js.map +1 -1
  102. package/dist/utility/utilis/multer/upload_batch.js +5 -12
  103. package/dist/utility/utilis/multer/upload_batch.js.map +1 -1
  104. package/dist/utility/utilis/multer/upload_single.d.ts +41 -0
  105. package/dist/utility/utilis/multer/upload_single.js +5 -11
  106. package/dist/utility/utilis/multer/upload_single.js.map +1 -1
  107. package/dist/utility/utilis/postgres/executeQuery.d.ts +2 -205
  108. package/dist/utility/utilis/postgres/executeQuery.js +11 -40
  109. package/dist/utility/utilis/postgres/executeQuery.js.map +1 -1
  110. package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.js +3 -2
  111. package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.js +3 -2
  112. package/dist/utility/utilis/server/app.js +30 -10
  113. package/dist/utility/utilis/server/app.js.map +1 -1
  114. package/dist/utility/utilis/server/server.d.ts +2 -2
  115. package/dist/utility/utilis/server/server.js +28 -17
  116. package/dist/utility/utilis/server/server.js.map +1 -1
  117. package/package.json +7 -8
  118. package/dist/chunk-3AP6JARL.js +0 -12
  119. package/dist/chunk-3AP6JARL.js.map +0 -1
  120. package/dist/chunk-5A3RVJNT.js +0 -19
  121. package/dist/chunk-5A3RVJNT.js.map +0 -1
  122. package/dist/chunk-AATAYCEY.js.map +0 -1
  123. package/dist/chunk-EB35KLDE.js.map +0 -1
  124. package/dist/chunk-FMCW72HO.js.map +0 -1
  125. package/dist/chunk-HZ4GLSOO.js.map +0 -1
  126. package/dist/chunk-LFRKRR7G.js.map +0 -1
  127. package/dist/chunk-MNSQSU7T.js.map +0 -1
  128. package/dist/chunk-NMNAPTVV.js.map +0 -1
  129. package/dist/chunk-SSFPGDA3.js.map +0 -1
  130. package/dist/chunk-W2745SOE.js +0 -38
  131. package/dist/chunk-W2745SOE.js.map +0 -1
  132. package/dist/chunk-WDQJPBUK.js +0 -53
  133. package/dist/chunk-WDQJPBUK.js.map +0 -1
  134. package/dist/chunk-X3R3RLXY.js.map +0 -1
  135. package/dist/chunk-YWFCWT6R.js +0 -23
  136. package/dist/chunk-YWFCWT6R.js.map +0 -1
  137. package/dist/engine/script/run-all.d.ts +0 -3
  138. package/dist/engine/script/run-all.js +0 -8
  139. package/dist/engine/script/run-bucket.d.ts +0 -3
  140. package/dist/engine/script/run-bucket.js +0 -8
  141. package/dist/engine/script/run-bucket.js.map +0 -1
  142. package/dist/engine/script/run-node-server.d.ts +0 -3
  143. package/dist/engine/script/run-node-server.js +0 -8
  144. package/dist/engine/script/run-node-server.js.map +0 -1
  145. package/dist/engine/server/app.d.ts +0 -5
  146. package/dist/engine/server/app.js +0 -8
  147. package/dist/engine/server/app.js.map +0 -1
  148. package/dist/utility/script/run-all.js +0 -8
  149. package/dist/utility/script/run-all.js.map +0 -1
  150. package/dist/utility/script/run-bucket.js +0 -8
  151. package/dist/utility/script/run-bucket.js.map +0 -1
  152. package/dist/utility/script/run-node-server.js +0 -8
  153. package/dist/utility/script/run-node-server.js.map +0 -1
  154. package/dist/utility/utilis/cloud_storage/s3Client.d.ts +0 -5
  155. package/dist/utility/utilis/cloud_storage/s3Client.js +0 -15
  156. package/dist/utility/utilis/cloud_storage/s3Client.js.map +0 -1
  157. /package/dist/{chunk-BMPUYKJJ.js.map → chunk-DRLEV7OW.js.map} +0 -0
  158. /package/dist/{chunk-MEQAHLW6.js.map → chunk-QUZPQJRE.js.map} +0 -0
  159. /package/dist/{engine/script/run-all.js.map → utility/libs/index.js.map} +0 -0
  160. /package/dist/utility/{script → libs}/run-all.d.ts +0 -0
  161. /package/dist/utility/{script → libs}/run-bucket.d.ts +0 -0
  162. /package/dist/utility/{script → libs}/run-node-server.d.ts +0 -0
@@ -0,0 +1,34 @@
1
+ import {
2
+ getMongoServer
3
+ } from "./chunk-ECIP24BN.js";
4
+ import {
5
+ __name
6
+ } from "./chunk-7QVYU63E.js";
7
+
8
+ // src/utility/utilis/mongoDb/deleteDocument.ts
9
+ var mongoDeleteDocument = /* @__PURE__ */ __name(async (params) => {
10
+ const { dbName, collection, query, deleteMany = false, options } = params;
11
+ try {
12
+ const col = getMongoServer().db(dbName).collection(collection);
13
+ const result = deleteMany ? await col.deleteMany(query, options) : await col.deleteOne(query, options);
14
+ return {
15
+ status: true,
16
+ result,
17
+ deletedCount: result.deletedCount,
18
+ error: null
19
+ };
20
+ } catch (err) {
21
+ const error = err instanceof Error ? err : new Error(String(err));
22
+ return {
23
+ status: false,
24
+ result: null,
25
+ deletedCount: 0,
26
+ error
27
+ };
28
+ }
29
+ }, "mongoDeleteDocument");
30
+
31
+ export {
32
+ mongoDeleteDocument
33
+ };
34
+ //# sourceMappingURL=chunk-M2C6HHRK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/mongoDb/deleteDocument.ts"],"sourcesContent":["import { getMongoServer } from \"../../../engine/mondoDb/mongoDB.js\";\r\nimport type {CustomDeleteResult} from \"../../libs/types.js\";\r\nimport type {DeleteDocuments} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const mongoDeleteDocument = async (\r\n params: DeleteDocuments\r\n): Promise<CustomDeleteResult> => {\r\n\r\n\r\n const { dbName, collection, query, deleteMany = false, options } = params;\r\n\r\n try {\r\n const col = getMongoServer().db(dbName).collection(collection);\r\n\r\n const result = deleteMany\r\n ? await col.deleteMany(query, options)\r\n : await col.deleteOne(query, options);\r\n\r\n return {\r\n status: true,\r\n result,\r\n deletedCount: result.deletedCount,\r\n error: null,\r\n };\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n\r\n return {\r\n status: false,\r\n result: null,\r\n deletedCount: 0,\r\n error,\r\n };\r\n }\r\n};\r\n"],"mappings":";;;;;;;;AAUO,IAAM,sBAAsB,8BAC/B,WAC8B;AAG9B,QAAM,EAAE,QAAQ,YAAY,OAAO,aAAa,OAAO,QAAQ,IAAI;AAEnE,MAAI;AACA,UAAM,MAAM,eAAe,EAAE,GAAG,MAAM,EAAE,WAAW,UAAU;AAE7D,UAAM,SAAS,aACT,MAAM,IAAI,WAAW,OAAO,OAAO,IACnC,MAAM,IAAI,UAAU,OAAO,OAAO;AAExC,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,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,cAAc;AAAA,MACd;AAAA,IACJ;AAAA,EACJ;AACJ,GA9BmC;","names":[]}
@@ -0,0 +1,74 @@
1
+ import {
2
+ generateUniqueValue
3
+ } from "./chunk-3IO4NPP3.js";
4
+ import {
5
+ getKeyFromUrl
6
+ } from "./chunk-QBBF6LZZ.js";
7
+ import {
8
+ s3Client
9
+ } from "./chunk-IAQMTSGP.js";
10
+ import {
11
+ getFileExtension,
12
+ getInAppBucketDownloadPath
13
+ } from "./chunk-CBTP2HOO.js";
14
+ import {
15
+ ENV
16
+ } from "./chunk-EWQYVPOL.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-MKS3GPZY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/downloadFile.ts"],"sourcesContent":["import {GetObjectCommand} from \"@aws-sdk/client-s3\";\r\nimport {getKeyFromUrl} from \"../general/web.js\";\r\nimport { pipeline } from \"stream/promises\";\r\nimport path from 'node:path'\r\nimport fsPromises from 'fs/promises';\r\nimport * as fs from \"node:fs\";\r\nimport type {DownloadedFile, DownloadFileParams} from \"../../libs/interface.js\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport {getFileExtension, getInAppBucketDownloadPath} from \"../general/file-operations.js\";\r\nimport {generateUniqueValue} from \"../general/uuids.js\";\r\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\r\n\r\n\r\n\r\nexport const downloadFile = async ({\r\n url,\r\n outputPath,\r\n }: DownloadFileParams): Promise<DownloadedFile> => {\r\n try {\r\n const key = getKeyFromUrl(url);\r\n\r\n const command = new GetObjectCommand({\r\n Bucket: ENV.BUCKET_NAME,\r\n Key: key,\r\n });\r\n\r\n const response = await s3Client.send(command);\r\n\r\n if (!response.Body) {\r\n console.log(response);\r\n return {\r\n status: true,\r\n url: url,\r\n error: new Error(`Empty response body received for key: ${key}`),\r\n };\r\n }\r\n\r\n const fileExtension = getFileExtension(url);\r\n const fileName = generateUniqueValue(16);\r\n const finalFileName = `${fileName}.${fileExtension}`;\r\n const targetPath = getInAppBucketDownloadPath({ segments: outputPath || [], fileName: finalFileName });\r\n\r\n // Ensure directory structure exists for targetPath\r\n const dir = path.dirname(targetPath);\r\n if (!fs.existsSync(dir)) {\r\n await fsPromises.mkdir(dir, { recursive: true });\r\n }\r\n\r\n // Cast stream to NodeJS.ReadableStream for pipeline overload\r\n const stream = response.Body as NodeJS.ReadableStream;\r\n await pipeline(stream, fs.createWriteStream(targetPath));\r\n\r\n return {\r\n status: true,\r\n url: url,\r\n path: targetPath,\r\n };\r\n\r\n } catch (error) {\r\n console.error(error);\r\n return {\r\n status: false,\r\n url: url,\r\n error: error instanceof Error ? error : new Error(String(error)),\r\n };\r\n }\r\n};\r\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":[]}
@@ -0,0 +1,88 @@
1
+ import {
2
+ generateUniqueValue
3
+ } from "./chunk-3IO4NPP3.js";
4
+ import {
5
+ getKeyFromUrl
6
+ } from "./chunk-QBBF6LZZ.js";
7
+ import {
8
+ s3Client
9
+ } from "./chunk-IAQMTSGP.js";
10
+ import {
11
+ getFileExtension,
12
+ getInAppBucketDownloadPath
13
+ } from "./chunk-CBTP2HOO.js";
14
+ import {
15
+ ENV
16
+ } from "./chunk-EWQYVPOL.js";
17
+ import {
18
+ __name
19
+ } from "./chunk-7QVYU63E.js";
20
+
21
+ // src/utility/utilis/cloud_storage/downloadFiles.ts
22
+ import { GetObjectCommand } from "@aws-sdk/client-s3";
23
+ import path from "path";
24
+ import fsPromises from "fs/promises";
25
+ import * as fs from "fs";
26
+ import { pipeline } from "stream/promises";
27
+ var downloadFiles = /* @__PURE__ */ __name(async ({
28
+ files,
29
+ globalPath
30
+ }) => {
31
+ const hasIndividualOutputPath = files.some(
32
+ (file) => file.outputPath && file.outputPath.length > 0
33
+ );
34
+ if (globalPath && hasIndividualOutputPath) {
35
+ throw new Error(
36
+ "Conflict: Cannot specify both 'globalPath' and individual 'outputPath' on files."
37
+ );
38
+ }
39
+ const downloadPromises = files.map(async (file) => {
40
+ const { url, outputPath } = file;
41
+ try {
42
+ const key = getKeyFromUrl(url);
43
+ const command = new GetObjectCommand({
44
+ Bucket: ENV.BUCKET_NAME,
45
+ Key: key
46
+ });
47
+ const response = await s3Client.send(command);
48
+ if (!response.Body) {
49
+ return {
50
+ status: false,
51
+ url,
52
+ error: new Error(`Empty response body received for key: ${key}`)
53
+ };
54
+ }
55
+ const fileExtension = getFileExtension(url);
56
+ const fileName = generateUniqueValue(16);
57
+ const finalFileName = `${fileName}.${fileExtension}`;
58
+ const resolvedPathSegments = outputPath || (globalPath ? [globalPath] : []);
59
+ const targetPath = getInAppBucketDownloadPath({
60
+ segments: resolvedPathSegments,
61
+ fileName: finalFileName
62
+ });
63
+ const dir = path.dirname(targetPath);
64
+ if (!fs.existsSync(dir)) {
65
+ await fsPromises.mkdir(dir, { recursive: true });
66
+ }
67
+ const stream = response.Body;
68
+ await pipeline(stream, fs.createWriteStream(targetPath));
69
+ return {
70
+ status: true,
71
+ url,
72
+ path: targetPath
73
+ };
74
+ } catch (error) {
75
+ return {
76
+ status: false,
77
+ url,
78
+ error: error instanceof Error ? error : new Error(String(error))
79
+ };
80
+ }
81
+ });
82
+ return Promise.all(downloadPromises);
83
+ }, "downloadFiles");
84
+
85
+ export {
86
+ downloadFiles
87
+ };
88
+ //# sourceMappingURL=chunk-O42S6QIG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/downloadFiles.ts"],"sourcesContent":["import type {DownloadedFile, DownloadFilesParams} from \"../../libs/interface.js\";\r\nimport {getKeyFromUrl} from \"../general/web.js\";\r\nimport {GetObjectCommand} from \"@aws-sdk/client-s3\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport {getInAppBucketDownloadPath, getFileExtension} from \"../general/file-operations.js\";\r\nimport path from \"node:path\";\r\nimport fsPromises from \"fs/promises\";\r\nimport * as fs from \"node:fs\";\r\nimport {pipeline} from \"stream/promises\";\r\nimport {generateUniqueValue} from \"../general/uuids.js\";\r\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\r\n\r\nexport const downloadFiles = async ({\r\n files,\r\n globalPath,\r\n }: DownloadFilesParams): Promise<DownloadedFile[]> => {\r\n // 1. Validate path conflict rule upfront\r\n const hasIndividualOutputPath = files.some(\r\n (file) => file.outputPath && file.outputPath.length > 0\r\n );\r\n\r\n if (globalPath && hasIndividualOutputPath) {\r\n throw new Error(\r\n \"Conflict: Cannot specify both 'globalPath' and individual 'outputPath' on files.\"\r\n );\r\n }\r\n\r\n // 2. Process all files independently in parallel\r\n const downloadPromises = files.map(async (file): Promise<DownloadedFile> => {\r\n const { url, outputPath } = file;\r\n\r\n try {\r\n const key = getKeyFromUrl(url);\r\n\r\n const command = new GetObjectCommand({\r\n Bucket: ENV.BUCKET_NAME,\r\n Key: key,\r\n });\r\n\r\n const response = await s3Client.send(command);\r\n\r\n if (!response.Body) {\r\n return {\r\n status: false,\r\n url: url,\r\n error: new Error(`Empty response body received for key: ${key}`),\r\n };\r\n }\r\n\r\n const fileExtension = getFileExtension(url);\r\n const fileName = generateUniqueValue(16);\r\n const finalFileName = `${fileName}.${fileExtension}`;\r\n\r\n // Resolve target path using either file's outputPath or globalPath\r\n const resolvedPathSegments = outputPath || (globalPath ? [globalPath] : []);\r\n const targetPath = getInAppBucketDownloadPath({\r\n segments: resolvedPathSegments,\r\n fileName: finalFileName,\r\n });\r\n\r\n // Ensure output folder structure exists\r\n const dir = path.dirname(targetPath);\r\n if (!fs.existsSync(dir)) {\r\n await fsPromises.mkdir(dir, { recursive: true });\r\n }\r\n\r\n // Stream response body directly to file\r\n const stream = response.Body as NodeJS.ReadableStream;\r\n await pipeline(stream, fs.createWriteStream(targetPath));\r\n\r\n return {\r\n status: true,\r\n url: url,\r\n path: targetPath,\r\n };\r\n } catch (error) {\r\n return {\r\n status: false,\r\n url: url,\r\n error: error instanceof Error ? error : new Error(String(error)),\r\n };\r\n }\r\n });\r\n\r\n return Promise.all(downloadPromises);\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA,SAAQ,wBAAuB;AAG/B,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,YAAY,QAAQ;AACpB,SAAQ,gBAAe;AAIhB,IAAM,gBAAgB,8BAAO;AAAA,EACI;AAAA,EACA;AACJ,MAAsD;AAEtF,QAAM,0BAA0B,MAAM;AAAA,IAClC,CAAC,SAAS,KAAK,cAAc,KAAK,WAAW,SAAS;AAAA,EAC1D;AAEA,MAAI,cAAc,yBAAyB;AACvC,UAAM,IAAI;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AAGA,QAAM,mBAAmB,MAAM,IAAI,OAAO,SAAkC;AACxE,UAAM,EAAE,KAAK,WAAW,IAAI;AAE5B,QAAI;AACA,YAAM,MAAM,cAAc,GAAG;AAE7B,YAAM,UAAU,IAAI,iBAAiB;AAAA,QACjC,QAAQ,IAAI;AAAA,QACZ,KAAK;AAAA,MACT,CAAC;AAED,YAAM,WAAW,MAAM,SAAS,KAAK,OAAO;AAE5C,UAAI,CAAC,SAAS,MAAM;AAChB,eAAO;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,UACA,OAAO,IAAI,MAAM,yCAAyC,GAAG,EAAE;AAAA,QACnE;AAAA,MACJ;AAEA,YAAM,gBAAgB,iBAAiB,GAAG;AAC1C,YAAM,WAAW,oBAAoB,EAAE;AACvC,YAAM,gBAAgB,GAAG,QAAQ,IAAI,aAAa;AAGlD,YAAM,uBAAuB,eAAe,aAAa,CAAC,UAAU,IAAI,CAAC;AACzE,YAAM,aAAa,2BAA2B;AAAA,QAC1C,UAAU;AAAA,QACV,UAAU;AAAA,MACd,CAAC;AAGD,YAAM,MAAM,KAAK,QAAQ,UAAU;AACnC,UAAI,CAAI,cAAW,GAAG,GAAG;AACrB,cAAM,WAAW,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACnD;AAGA,YAAM,SAAS,SAAS;AACxB,YAAM,SAAS,QAAW,qBAAkB,UAAU,CAAC;AAEvD,aAAO;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,MAAM;AAAA,MACV;AAAA,IACJ,SAAS,OAAO;AACZ,aAAO;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MACnE;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,SAAO,QAAQ,IAAI,gBAAgB;AACvC,GAzE6B;","names":[]}
@@ -0,0 +1,60 @@
1
+ import {
2
+ getKeyFromUrl
3
+ } from "./chunk-QBBF6LZZ.js";
4
+ import {
5
+ s3Client
6
+ } from "./chunk-IAQMTSGP.js";
7
+ import {
8
+ url_or_path
9
+ } from "./chunk-CBTP2HOO.js";
10
+ import {
11
+ ENV
12
+ } from "./chunk-EWQYVPOL.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-OHDZYSL3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/cloud_storage/deleteFile.ts"],"sourcesContent":["import {ENV} from \"../../libs/env.js\";\r\nimport {url_or_path} from \"../general/file-operations.js\";\r\nimport {getKeyFromUrl} from \"../general/web.js\";\r\nimport {DeleteObjectCommand} from \"@aws-sdk/client-s3\";\r\nimport * as fs from \"node:fs\";\r\nimport type {DeleteFile} from \"../../libs/interface.js\";\r\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\r\n\r\n\r\n\r\n\r\nexport const deleteFile = async (item_file: string): Promise<DeleteFile> => {\r\n try {\r\n const fileType = url_or_path(item_file);\r\n\r\n if (fileType === ENV.URL) {\r\n // Extract the MinIO object key from the full public URL\r\n const key = getKeyFromUrl(item_file);\r\n\r\n const command = new DeleteObjectCommand({\r\n Bucket: ENV.BUCKET_NAME,\r\n Key: key,\r\n });\r\n\r\n await s3Client.send(command);\r\n return {\r\n status: true,\r\n url_or_path: item_file,\r\n }\r\n }\r\n\r\n if (fileType === ENV.PATH) {\r\n // Check if file exists locally before unlinking\r\n if (fs.existsSync(item_file)) {\r\n await fs.promises.unlink(item_file);\r\n }\r\n return {\r\n status: true,\r\n url_or_path: item_file,\r\n }\r\n }\r\n\r\n return {\r\n url_or_path: item_file,\r\n status: false,\r\n }\r\n } catch (error) {\r\n return {\r\n status: false,\r\n url_or_path: item_file,\r\n error: error,\r\n }\r\n }\r\n};\r\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,47 @@
1
+ import {
2
+ executeMySqlQuery
3
+ } from "./chunk-DRLEV7OW.js";
4
+ import {
5
+ executePgSqlQuery
6
+ } from "./chunk-QUZPQJRE.js";
7
+ import {
8
+ isMySQL,
9
+ isPostgreSQL
10
+ } from "./chunk-T4KN3FCF.js";
11
+ import {
12
+ getMySqlPool
13
+ } from "./chunk-2RFTNIPS.js";
14
+ import {
15
+ getPgSqlPool
16
+ } from "./chunk-SOZL76ZM.js";
17
+ import {
18
+ ENV
19
+ } from "./chunk-EWQYVPOL.js";
20
+ import {
21
+ __name
22
+ } from "./chunk-7QVYU63E.js";
23
+
24
+ // src/utility/utilis/postgres/executeQuery.ts
25
+ var executeQuery = /* @__PURE__ */ __name(async (query) => {
26
+ if (isPostgreSQL(ENV.SQL_DB_URL)) {
27
+ return await executePgSqlQuery(query);
28
+ } else if (isMySQL(ENV.SQL_DB_URL)) {
29
+ return await executeMySqlQuery(query);
30
+ } else {
31
+ return new Error(`Unable to execute query. Please check the SQL_DB_URL in .env file and the db.sql file.`);
32
+ }
33
+ }, "executeQuery");
34
+ var getPool = /* @__PURE__ */ __name(async () => {
35
+ if (isPostgreSQL(ENV.SQL_DB_URL)) {
36
+ return getPgSqlPool();
37
+ }
38
+ if (isMySQL(ENV.SQL_DB_URL)) {
39
+ return getMySqlPool();
40
+ }
41
+ }, "getPool");
42
+
43
+ export {
44
+ executeQuery,
45
+ getPool
46
+ };
47
+ //# sourceMappingURL=chunk-P4FWSZ43.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/postgres/executeQuery.ts"],"sourcesContent":["import type {QueryItems} from \"../../libs/interface.js\";\r\nimport {isMySQL, isPostgreSQL} from \"../general/sqlDb.js.js\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport {executePgSqlQuery} from \"./subSqlfiles/executePgQuery.js\";\r\nimport {executeMySqlQuery} from \"./subSqlfiles/executeMySqlQuery.js\";\r\nimport {getMySqlPool} from \"../../../engine/sql/mySql.js\";\r\nimport {getPgSqlPool} from \"../../../engine/sql/pgSql.js\";\r\n\r\n\r\n\r\n\r\n\r\nexport const executeQuery = async (query: QueryItems) => {\r\n\r\n if (isPostgreSQL(ENV.SQL_DB_URL)) {\r\n return await executePgSqlQuery(query)\r\n }\r\n else if (isMySQL(ENV.SQL_DB_URL)) {\r\n return await executeMySqlQuery(query)\r\n }\r\n else {\r\n return new Error(`Unable to execute query. Please check the SQL_DB_URL in .env file and the db.sql file.`);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport const getPool = async () => {\r\n if (isPostgreSQL(ENV.SQL_DB_URL)) {\r\n return getPgSqlPool()\r\n }\r\n if (isMySQL(ENV.SQL_DB_URL)) {\r\n return getMySqlPool()\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAYO,IAAM,eAAe,8BAAO,UAAsB;AAErD,MAAI,aAAa,IAAI,UAAU,GAAG;AAC9B,WAAO,MAAM,kBAAkB,KAAK;AAAA,EACxC,WACS,QAAQ,IAAI,UAAU,GAAG;AAC9B,WAAO,MAAM,kBAAkB,KAAK;AAAA,EACxC,OACK;AACD,WAAO,IAAI,MAAM,wFAAwF;AAAA,EAC7G;AAEJ,GAZ4B;AAkBrB,IAAM,UAAU,mCAAY;AAC/B,MAAI,aAAa,IAAI,UAAU,GAAG;AAC9B,WAAO,aAAa;AAAA,EACxB;AACA,MAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,WAAO,aAAa;AAAA,EACxB;AACJ,GAPuB;","names":[]}
@@ -36,7 +36,7 @@ var getKeyFromUrl = /* @__PURE__ */ __name((url) => {
36
36
  }
37
37
  return decodeURIComponent(pathParts.join("/"));
38
38
  }, "getKeyFromUrl");
39
- var response_to_client = /* @__PURE__ */ __name(({
39
+ var responseToClient = /* @__PURE__ */ __name(({
40
40
  response,
41
41
  ...payload
42
42
  }) => {
@@ -63,11 +63,11 @@ var response_to_client = /* @__PURE__ */ __name(({
63
63
  timestamp
64
64
  }
65
65
  });
66
- }, "response_to_client");
66
+ }, "responseToClient");
67
67
 
68
68
  export {
69
69
  buildURL,
70
70
  getKeyFromUrl,
71
- response_to_client
71
+ responseToClient
72
72
  };
73
- //# sourceMappingURL=chunk-SSFPGDA3.js.map
73
+ //# sourceMappingURL=chunk-QBBF6LZZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility/utilis/general/web.ts"],"sourcesContent":["import type {URLOptions} from \"../../libs/interface.js\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport type {ResponseInterface} from \"../../libs/types.js\";\r\n\r\n\r\n\r\nexport function buildURL({\r\n end_point,\r\n path = [],\r\n fileName,\r\n }: URLOptions): string {\r\n const resolvedFileName =\r\n fileName instanceof File ? fileName.name : fileName ?? '';\r\n\r\n // Filter out undefined, null, or empty string values safely\r\n const rawSegments: string[] = [\r\n end_point ?? '',\r\n ...path,\r\n resolvedFileName,\r\n ].filter((segment): segment is string => Boolean(segment && segment.trim()));\r\n\r\n if (rawSegments.length === 0) return '';\r\n\r\n // Extract and preserve protocol (http:// or https://) if present\r\n const match = rawSegments[0]?.match(/^(https?:\\/\\/)(.*)/i);\r\n let protocol = '';\r\n\r\n if (match) {\r\n protocol = match[1] ?? '';\r\n rawSegments[0] = match[2] ?? '';\r\n }\r\n\r\n // Clean leading/trailing/duplicate slashes\r\n const cleanedPath = rawSegments\r\n .map((segment) => segment.replace(/^\\/+|\\/+$/g, ''))\r\n .map((segment) => segment.replace(/\\/+/g, '/'))\r\n .filter((segment) => segment.length > 0)\r\n .join('/');\r\n\r\n return `${protocol}${cleanedPath}`;\r\n}\r\n\r\n\r\n\r\n\r\nexport const getKeyFromUrl = (url: string): string => {\r\n\r\n\r\n const parsedUrl = new URL(url);\r\n const pathParts = parsedUrl.pathname.split(\"/\").filter(Boolean);\r\n\r\n if (pathParts[0] === ENV.BUCKET_NAME) {\r\n pathParts.shift();\r\n }\r\n\r\n return decodeURIComponent(pathParts.join(\"/\"));\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const responseToClient = ({\r\n response,\r\n ...payload\r\n }: ResponseInterface) => {\r\n const timestamp = payload.meta?.timestamp || new Date().toISOString();\r\n\r\n if (payload.success) {\r\n return response.status(payload.status).json({\r\n success: true,\r\n status: payload.status,\r\n message: payload.message ?? 'Success',\r\n data: payload.data,\r\n meta: {\r\n ...payload.meta,\r\n timestamp,\r\n },\r\n });\r\n }\r\n\r\n return response.status(payload.status).json({\r\n success: false,\r\n status: payload.status,\r\n message: payload.message ?? 'An error occurred',\r\n error: payload.error,\r\n meta: {\r\n ...payload.meta,\r\n timestamp,\r\n },\r\n });\r\n};\r\n\r\n\r\n\r\n"],"mappings":";;;;;;;;AAMO,SAAS,SAAS;AAAA,EACI;AAAA,EACA,OAAO,CAAC;AAAA,EACR;AACJ,GAAuB;AAC5C,QAAM,mBACF,oBAAoB,OAAO,SAAS,OAAO,YAAY;AAG3D,QAAM,cAAwB;AAAA,IAC1B,aAAa;AAAA,IACb,GAAG;AAAA,IACH;AAAA,EACJ,EAAE,OAAO,CAAC,YAA+B,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC;AAE3E,MAAI,YAAY,WAAW,EAAG,QAAO;AAGrC,QAAM,QAAQ,YAAY,CAAC,GAAG,MAAM,qBAAqB;AACzD,MAAI,WAAW;AAEf,MAAI,OAAO;AACP,eAAW,MAAM,CAAC,KAAK;AACvB,gBAAY,CAAC,IAAI,MAAM,CAAC,KAAK;AAAA,EACjC;AAGA,QAAM,cAAc,YACf,IAAI,CAAC,YAAY,QAAQ,QAAQ,cAAc,EAAE,CAAC,EAClD,IAAI,CAAC,YAAY,QAAQ,QAAQ,QAAQ,GAAG,CAAC,EAC7C,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC,EACtC,KAAK,GAAG;AAEb,SAAO,GAAG,QAAQ,GAAG,WAAW;AACpC;AAlCgB;AAuCT,IAAM,gBAAgB,wBAAC,QAAwB;AAGlD,QAAM,YAAY,IAAI,IAAI,GAAG;AAC7B,QAAM,YAAY,UAAU,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAE9D,MAAI,UAAU,CAAC,MAAM,IAAI,aAAa;AAClC,cAAU,MAAM;AAAA,EACpB;AAEA,SAAO,mBAAmB,UAAU,KAAK,GAAG,CAAC;AACjD,GAX6B;AAoBtB,IAAM,mBAAmB,wBAAC;AAAA,EACS;AAAA,EACA,GAAG;AACP,MAAyB;AAC3D,QAAM,YAAY,QAAQ,MAAM,cAAa,oBAAI,KAAK,GAAE,YAAY;AAEpE,MAAI,QAAQ,SAAS;AACjB,WAAO,SAAS,OAAO,QAAQ,MAAM,EAAE,KAAK;AAAA,MACxC,SAAS;AAAA,MACT,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ,WAAW;AAAA,MAC5B,MAAM,QAAQ;AAAA,MACd,MAAM;AAAA,QACF,GAAG,QAAQ;AAAA,QACX;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO,SAAS,OAAO,QAAQ,MAAM,EAAE,KAAK;AAAA,IACxC,SAAS;AAAA,IACT,QAAQ,QAAQ;AAAA,IAChB,SAAS,QAAQ,WAAW;AAAA,IAC5B,OAAO,QAAQ;AAAA,IACf,MAAM;AAAA,MACF,GAAG,QAAQ;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,CAAC;AACL,GA7BgC;","names":[]}