backfarm 1.0.5 → 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.
- package/dist/{chunk-P4FWSZ43.js → chunk-22GJTNKR.js} +7 -7
- package/dist/chunk-22GJTNKR.js.map +1 -0
- package/dist/{chunk-ECIP24BN.js → chunk-2QNCQ5L5.js} +3 -3
- package/dist/chunk-2QNCQ5L5.js.map +1 -0
- package/dist/{chunk-ES6AHESH.js → chunk-3DJ6GERS.js} +3 -3
- package/dist/chunk-3DJ6GERS.js.map +1 -0
- package/dist/{chunk-O42S6QIG.js → chunk-452DWS46.js} +6 -6
- package/dist/chunk-452DWS46.js.map +1 -0
- package/dist/{chunk-UWIMSKL5.js → chunk-4L35JPDH.js} +2 -2
- package/dist/chunk-4L35JPDH.js.map +1 -0
- package/dist/{chunk-SOZL76ZM.js → chunk-5AJKFCEE.js} +3 -3
- package/dist/chunk-5AJKFCEE.js.map +1 -0
- package/dist/{chunk-M2C6HHRK.js → chunk-6BNQOIVA.js} +2 -2
- package/dist/chunk-6BNQOIVA.js.map +1 -0
- package/dist/{chunk-P5XJG7OG.js → chunk-A7GR4LD2.js} +1 -1
- package/dist/chunk-A7GR4LD2.js.map +1 -0
- package/dist/{chunk-LNFYUCA3.js → chunk-EEQ2SXDE.js} +2 -2
- package/dist/chunk-EEQ2SXDE.js.map +1 -0
- package/dist/{chunk-RIBTACPE.js → chunk-EUWCMMGI.js} +2 -2
- package/dist/chunk-EUWCMMGI.js.map +1 -0
- package/dist/{chunk-ATY3REI3.js → chunk-HC4IDQP6.js} +5 -5
- package/dist/chunk-HC4IDQP6.js.map +1 -0
- package/dist/{chunk-2RFTNIPS.js → chunk-HV3IQJH3.js} +3 -3
- package/dist/chunk-HV3IQJH3.js.map +1 -0
- package/dist/{chunk-3IO4NPP3.js → chunk-IZEPCXYK.js} +1 -1
- package/dist/chunk-IZEPCXYK.js.map +1 -0
- package/dist/{chunk-IAQMTSGP.js → chunk-J3P6W53K.js} +2 -2
- package/dist/chunk-J3P6W53K.js.map +1 -0
- package/dist/{chunk-EWQYVPOL.js → chunk-LE2SDA4O.js} +1 -1
- package/dist/chunk-LE2SDA4O.js.map +1 -0
- package/dist/{chunk-OHDZYSL3.js → chunk-M7PVDT2D.js} +5 -5
- package/dist/chunk-M7PVDT2D.js.map +1 -0
- package/dist/{chunk-FNFFY5LD.js → chunk-O2ZDXQ2Z.js} +2 -2
- package/dist/chunk-O2ZDXQ2Z.js.map +1 -0
- package/dist/{chunk-T4KN3FCF.js → chunk-O5ILFRFV.js} +2 -2
- package/dist/chunk-O5ILFRFV.js.map +1 -0
- package/dist/{chunk-E2NNDV4O.js → chunk-O76OK6Y7.js} +2 -2
- package/dist/chunk-O76OK6Y7.js.map +1 -0
- package/dist/{chunk-CBTP2HOO.js → chunk-QW2GGDEG.js} +2 -2
- package/dist/chunk-QW2GGDEG.js.map +1 -0
- package/dist/{chunk-MKS3GPZY.js → chunk-RZ7XHAUV.js} +6 -6
- package/dist/chunk-RZ7XHAUV.js.map +1 -0
- package/dist/{chunk-DRLEV7OW.js → chunk-U7BCM2WN.js} +2 -2
- package/dist/chunk-U7BCM2WN.js.map +1 -0
- package/dist/{chunk-QS4MDB5H.js → chunk-UPP2FW3G.js} +36 -36
- package/dist/chunk-UPP2FW3G.js.map +1 -0
- package/dist/{chunk-LW246RDT.js → chunk-YA3MW2CJ.js} +2 -2
- package/dist/chunk-YA3MW2CJ.js.map +1 -0
- package/dist/{chunk-QBBF6LZZ.js → chunk-ZC33GE2U.js} +2 -2
- package/dist/chunk-ZC33GE2U.js.map +1 -0
- package/dist/{chunk-QUZPQJRE.js → chunk-ZC6ZFZ2J.js} +2 -2
- package/dist/chunk-ZC6ZFZ2J.js.map +1 -0
- package/dist/{chunk-WLJV5O6C.js → chunk-ZGOMCU4T.js} +6 -6
- package/dist/chunk-ZGOMCU4T.js.map +1 -0
- package/dist/{chunk-CPECHQJJ.js → chunk-ZTTB4NMA.js} +3 -3
- package/dist/chunk-ZTTB4NMA.js.map +1 -0
- package/dist/engine/cloudBucket/r2Storage.js +3 -3
- package/dist/engine/mondoDb/mongoDB.js +3 -3
- package/dist/engine/multer/multer_configs.js +2 -2
- package/dist/engine/server/server.js +28 -28
- package/dist/engine/sql/mySql.js +3 -3
- package/dist/engine/sql/pgSql.js +3 -3
- package/dist/utility/libs/env.js +1 -1
- package/dist/utility/libs/index.js +28 -28
- package/dist/utility/libs/run-all.js +28 -28
- package/dist/utility/libs/run-bucket.js.map +1 -1
- package/dist/utility/libs/run-node-server.js +28 -28
- package/dist/utility/libs/run-node-server.js.map +1 -1
- package/dist/utility/libs/types.js +1 -1
- package/dist/utility/libs/types.js.map +1 -1
- package/dist/utility/utilis/cloud_storage/deleteFile.js +5 -5
- package/dist/utility/utilis/cloud_storage/deleteFiles.js +5 -5
- package/dist/utility/utilis/cloud_storage/downloadFile.js +6 -6
- package/dist/utility/utilis/cloud_storage/downloadFiles.js +6 -6
- package/dist/utility/utilis/cloud_storage/uploadFile.js +6 -6
- package/dist/utility/utilis/cloud_storage/uploadFiles.js +7 -7
- package/dist/utility/utilis/general/error_handler.js +1 -1
- package/dist/utility/utilis/general/file-operations.js +2 -2
- package/dist/utility/utilis/general/sqlDb.js.js +2 -2
- package/dist/utility/utilis/general/uuids.js +1 -1
- package/dist/utility/utilis/general/web.js +2 -2
- package/dist/utility/utilis/mongoDb/buldWrite.js +4 -4
- package/dist/utility/utilis/mongoDb/deleteDocument.js +4 -4
- package/dist/utility/utilis/mongoDb/insertField.js +4 -4
- package/dist/utility/utilis/mongoDb/insertFields.js +4 -4
- package/dist/utility/utilis/mongoDb/updateFiled.js +4 -4
- package/dist/utility/utilis/multer/upload_batch.js +3 -3
- package/dist/utility/utilis/multer/upload_single.js +3 -3
- package/dist/utility/utilis/postgres/executeQuery.js +8 -8
- package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.js +4 -4
- package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.js +4 -4
- package/dist/utility/utilis/server/app.js +28 -28
- package/dist/utility/utilis/server/server.js +28 -28
- package/package.json +55 -55
- package/dist/chunk-2RFTNIPS.js.map +0 -1
- package/dist/chunk-3IO4NPP3.js.map +0 -1
- package/dist/chunk-ATY3REI3.js.map +0 -1
- package/dist/chunk-CBTP2HOO.js.map +0 -1
- package/dist/chunk-CPECHQJJ.js.map +0 -1
- package/dist/chunk-DRLEV7OW.js.map +0 -1
- package/dist/chunk-E2NNDV4O.js.map +0 -1
- package/dist/chunk-ECIP24BN.js.map +0 -1
- package/dist/chunk-ES6AHESH.js.map +0 -1
- package/dist/chunk-EWQYVPOL.js.map +0 -1
- package/dist/chunk-FNFFY5LD.js.map +0 -1
- package/dist/chunk-IAQMTSGP.js.map +0 -1
- package/dist/chunk-LNFYUCA3.js.map +0 -1
- package/dist/chunk-LW246RDT.js.map +0 -1
- package/dist/chunk-M2C6HHRK.js.map +0 -1
- package/dist/chunk-MKS3GPZY.js.map +0 -1
- package/dist/chunk-O42S6QIG.js.map +0 -1
- package/dist/chunk-OHDZYSL3.js.map +0 -1
- package/dist/chunk-P4FWSZ43.js.map +0 -1
- package/dist/chunk-P5XJG7OG.js.map +0 -1
- package/dist/chunk-QBBF6LZZ.js.map +0 -1
- package/dist/chunk-QS4MDB5H.js.map +0 -1
- package/dist/chunk-QUZPQJRE.js.map +0 -1
- package/dist/chunk-RIBTACPE.js.map +0 -1
- package/dist/chunk-SOZL76ZM.js.map +0 -1
- package/dist/chunk-T4KN3FCF.js.map +0 -1
- package/dist/chunk-UWIMSKL5.js.map +0 -1
- package/dist/chunk-WLJV5O6C.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeQuery,
|
|
3
3
|
getPool
|
|
4
|
-
} from "../../../chunk-
|
|
5
|
-
import "../../../chunk-
|
|
6
|
-
import "../../../chunk-
|
|
7
|
-
import "../../../chunk-
|
|
8
|
-
import "../../../chunk-
|
|
9
|
-
import "../../../chunk-
|
|
10
|
-
import "../../../chunk-
|
|
11
|
-
import "../../../chunk-
|
|
4
|
+
} from "../../../chunk-22GJTNKR.js";
|
|
5
|
+
import "../../../chunk-U7BCM2WN.js";
|
|
6
|
+
import "../../../chunk-ZC6ZFZ2J.js";
|
|
7
|
+
import "../../../chunk-O5ILFRFV.js";
|
|
8
|
+
import "../../../chunk-HV3IQJH3.js";
|
|
9
|
+
import "../../../chunk-5AJKFCEE.js";
|
|
10
|
+
import "../../../chunk-QW2GGDEG.js";
|
|
11
|
+
import "../../../chunk-LE2SDA4O.js";
|
|
12
12
|
import "../../../chunk-7QVYU63E.js";
|
|
13
13
|
export {
|
|
14
14
|
executeQuery,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeMySqlQuery
|
|
3
|
-
} from "../../../../chunk-
|
|
4
|
-
import "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
6
|
-
import "../../../../chunk-
|
|
3
|
+
} from "../../../../chunk-U7BCM2WN.js";
|
|
4
|
+
import "../../../../chunk-HV3IQJH3.js";
|
|
5
|
+
import "../../../../chunk-QW2GGDEG.js";
|
|
6
|
+
import "../../../../chunk-LE2SDA4O.js";
|
|
7
7
|
import "../../../../chunk-7QVYU63E.js";
|
|
8
8
|
export {
|
|
9
9
|
executeMySqlQuery
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeCustom,
|
|
3
3
|
executePgSqlQuery
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
6
|
-
import "../../../../chunk-
|
|
7
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-ZC6ZFZ2J.js";
|
|
5
|
+
import "../../../../chunk-5AJKFCEE.js";
|
|
6
|
+
import "../../../../chunk-QW2GGDEG.js";
|
|
7
|
+
import "../../../../chunk-LE2SDA4O.js";
|
|
8
8
|
import "../../../../chunk-7QVYU63E.js";
|
|
9
9
|
export {
|
|
10
10
|
executeCustom,
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getApp
|
|
3
|
-
} from "../../../chunk-
|
|
4
|
-
import "../../../chunk-
|
|
5
|
-
import "../../../chunk-
|
|
6
|
-
import "../../../chunk-
|
|
7
|
-
import "../../../chunk-
|
|
8
|
-
import "../../../chunk-
|
|
9
|
-
import "../../../chunk-
|
|
10
|
-
import "../../../chunk-
|
|
11
|
-
import "../../../chunk-
|
|
12
|
-
import "../../../chunk-
|
|
13
|
-
import "../../../chunk-
|
|
14
|
-
import "../../../chunk-
|
|
15
|
-
import "../../../chunk-
|
|
16
|
-
import "../../../chunk-
|
|
17
|
-
import "../../../chunk-
|
|
18
|
-
import "../../../chunk-
|
|
19
|
-
import "../../../chunk-
|
|
20
|
-
import "../../../chunk-
|
|
21
|
-
import "../../../chunk-
|
|
22
|
-
import "../../../chunk-
|
|
23
|
-
import "../../../chunk-
|
|
24
|
-
import "../../../chunk-
|
|
25
|
-
import "../../../chunk-
|
|
26
|
-
import "../../../chunk-
|
|
27
|
-
import "../../../chunk-
|
|
28
|
-
import "../../../chunk-
|
|
29
|
-
import "../../../chunk-
|
|
30
|
-
import "../../../chunk-
|
|
3
|
+
} from "../../../chunk-UPP2FW3G.js";
|
|
4
|
+
import "../../../chunk-ZTTB4NMA.js";
|
|
5
|
+
import "../../../chunk-3DJ6GERS.js";
|
|
6
|
+
import "../../../chunk-EEQ2SXDE.js";
|
|
7
|
+
import "../../../chunk-6BNQOIVA.js";
|
|
8
|
+
import "../../../chunk-YA3MW2CJ.js";
|
|
9
|
+
import "../../../chunk-EUWCMMGI.js";
|
|
10
|
+
import "../../../chunk-O76OK6Y7.js";
|
|
11
|
+
import "../../../chunk-22GJTNKR.js";
|
|
12
|
+
import "../../../chunk-U7BCM2WN.js";
|
|
13
|
+
import "../../../chunk-ZC6ZFZ2J.js";
|
|
14
|
+
import "../../../chunk-452DWS46.js";
|
|
15
|
+
import "../../../chunk-O2ZDXQ2Z.js";
|
|
16
|
+
import "../../../chunk-ZGOMCU4T.js";
|
|
17
|
+
import "../../../chunk-A7GR4LD2.js";
|
|
18
|
+
import "../../../chunk-O5ILFRFV.js";
|
|
19
|
+
import "../../../chunk-M7PVDT2D.js";
|
|
20
|
+
import "../../../chunk-HC4IDQP6.js";
|
|
21
|
+
import "../../../chunk-RZ7XHAUV.js";
|
|
22
|
+
import "../../../chunk-IZEPCXYK.js";
|
|
23
|
+
import "../../../chunk-ZC33GE2U.js";
|
|
24
|
+
import "../../../chunk-J3P6W53K.js";
|
|
25
|
+
import "../../../chunk-2QNCQ5L5.js";
|
|
26
|
+
import "../../../chunk-4L35JPDH.js";
|
|
27
|
+
import "../../../chunk-HV3IQJH3.js";
|
|
28
|
+
import "../../../chunk-5AJKFCEE.js";
|
|
29
|
+
import "../../../chunk-QW2GGDEG.js";
|
|
30
|
+
import "../../../chunk-LE2SDA4O.js";
|
|
31
31
|
import "../../../chunk-7QVYU63E.js";
|
|
32
32
|
export {
|
|
33
33
|
getApp
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getServer
|
|
3
|
-
} from "../../../chunk-
|
|
4
|
-
import "../../../chunk-
|
|
5
|
-
import "../../../chunk-
|
|
6
|
-
import "../../../chunk-
|
|
7
|
-
import "../../../chunk-
|
|
8
|
-
import "../../../chunk-
|
|
9
|
-
import "../../../chunk-
|
|
10
|
-
import "../../../chunk-
|
|
11
|
-
import "../../../chunk-
|
|
12
|
-
import "../../../chunk-
|
|
13
|
-
import "../../../chunk-
|
|
14
|
-
import "../../../chunk-
|
|
15
|
-
import "../../../chunk-
|
|
16
|
-
import "../../../chunk-
|
|
17
|
-
import "../../../chunk-
|
|
18
|
-
import "../../../chunk-
|
|
19
|
-
import "../../../chunk-
|
|
20
|
-
import "../../../chunk-
|
|
21
|
-
import "../../../chunk-
|
|
22
|
-
import "../../../chunk-
|
|
23
|
-
import "../../../chunk-
|
|
24
|
-
import "../../../chunk-
|
|
25
|
-
import "../../../chunk-
|
|
26
|
-
import "../../../chunk-
|
|
27
|
-
import "../../../chunk-
|
|
28
|
-
import "../../../chunk-
|
|
29
|
-
import "../../../chunk-
|
|
30
|
-
import "../../../chunk-
|
|
3
|
+
} from "../../../chunk-UPP2FW3G.js";
|
|
4
|
+
import "../../../chunk-ZTTB4NMA.js";
|
|
5
|
+
import "../../../chunk-3DJ6GERS.js";
|
|
6
|
+
import "../../../chunk-EEQ2SXDE.js";
|
|
7
|
+
import "../../../chunk-6BNQOIVA.js";
|
|
8
|
+
import "../../../chunk-YA3MW2CJ.js";
|
|
9
|
+
import "../../../chunk-EUWCMMGI.js";
|
|
10
|
+
import "../../../chunk-O76OK6Y7.js";
|
|
11
|
+
import "../../../chunk-22GJTNKR.js";
|
|
12
|
+
import "../../../chunk-U7BCM2WN.js";
|
|
13
|
+
import "../../../chunk-ZC6ZFZ2J.js";
|
|
14
|
+
import "../../../chunk-452DWS46.js";
|
|
15
|
+
import "../../../chunk-O2ZDXQ2Z.js";
|
|
16
|
+
import "../../../chunk-ZGOMCU4T.js";
|
|
17
|
+
import "../../../chunk-A7GR4LD2.js";
|
|
18
|
+
import "../../../chunk-O5ILFRFV.js";
|
|
19
|
+
import "../../../chunk-M7PVDT2D.js";
|
|
20
|
+
import "../../../chunk-HC4IDQP6.js";
|
|
21
|
+
import "../../../chunk-RZ7XHAUV.js";
|
|
22
|
+
import "../../../chunk-IZEPCXYK.js";
|
|
23
|
+
import "../../../chunk-ZC33GE2U.js";
|
|
24
|
+
import "../../../chunk-J3P6W53K.js";
|
|
25
|
+
import "../../../chunk-2QNCQ5L5.js";
|
|
26
|
+
import "../../../chunk-4L35JPDH.js";
|
|
27
|
+
import "../../../chunk-HV3IQJH3.js";
|
|
28
|
+
import "../../../chunk-5AJKFCEE.js";
|
|
29
|
+
import "../../../chunk-QW2GGDEG.js";
|
|
30
|
+
import "../../../chunk-LE2SDA4O.js";
|
|
31
31
|
import "../../../chunk-7QVYU63E.js";
|
|
32
32
|
export {
|
|
33
33
|
getServer
|
package/package.json
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "backfarm",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "",
|
|
5
|
-
"keywords": [],
|
|
6
|
-
"author": "Divyanshu Jha",
|
|
7
|
-
"license": "ISC",
|
|
8
|
-
"type": "module",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"all": "tsx src/utility/libs/run-all.ts",
|
|
11
|
-
"bucket": "tsx src/utility/libs/run-bucket.ts",
|
|
12
|
-
"node": "tsx src/utility/libs/run-node-server.ts",
|
|
13
|
-
"build": "tsup",
|
|
14
|
-
"prepublishOnly": "npm run build",
|
|
15
|
-
"start": "node dist/server.js",
|
|
16
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"dist"
|
|
20
|
-
],
|
|
21
|
-
"exports": {
|
|
22
|
-
"./*": {
|
|
23
|
-
"types": "./dist/utility/libs/*.d.ts",
|
|
24
|
-
"import": "./dist/utility/libs/*.js",
|
|
25
|
-
"require": "./dist/utility/libs/*.js"
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"@aws-sdk/client-s3": "^3.1080.0",
|
|
30
|
-
"dotenv": "^17.4.2",
|
|
31
|
-
"express": "^5.2.1",
|
|
32
|
-
"mongodb": "^7.4.0",
|
|
33
|
-
"multer": "^2.2.0",
|
|
34
|
-
"mysql2": "^3.23.3",
|
|
35
|
-
"p-limit": "^7.3.1",
|
|
36
|
-
"pg": "^8.22.0",
|
|
37
|
-
"swagger-ui-express": "^5.0.1",
|
|
38
|
-
"yamljs": "^0.3.0"
|
|
39
|
-
},
|
|
40
|
-
"devDependencies": {
|
|
41
|
-
"@types/express": "^5.0.6",
|
|
42
|
-
"@types/mime-types": "^3.0.1",
|
|
43
|
-
"@types/mongodb": "^4.0.6",
|
|
44
|
-
"@types/multer": "^2.2.0",
|
|
45
|
-
"@types/node": "^26.2.0",
|
|
46
|
-
"@types/pg": "^8.21.0",
|
|
47
|
-
"@types/swagger-ui-express": "^4.1.8",
|
|
48
|
-
"@types/ws": "^8.18.1",
|
|
49
|
-
"@types/yamljs": "^0.2.34",
|
|
50
|
-
"ts-node": "^10.9.2",
|
|
51
|
-
"tsup": "^8.5.1",
|
|
52
|
-
"tsx": "^4.23.0",
|
|
53
|
-
"typescript": "^6.0.3"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "backfarm",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"author": "Divyanshu Jha",
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"all": "tsx src/utility/libs/run-all.ts",
|
|
11
|
+
"bucket": "tsx src/utility/libs/run-bucket.ts",
|
|
12
|
+
"node": "tsx src/utility/libs/run-node-server.ts",
|
|
13
|
+
"build": "tsup",
|
|
14
|
+
"prepublishOnly": "npm run build",
|
|
15
|
+
"start": "node dist/server.js",
|
|
16
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"exports": {
|
|
22
|
+
"./*": {
|
|
23
|
+
"types": "./dist/utility/libs/*.d.ts",
|
|
24
|
+
"import": "./dist/utility/libs/*.js",
|
|
25
|
+
"require": "./dist/utility/libs/*.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@aws-sdk/client-s3": "^3.1080.0",
|
|
30
|
+
"dotenv": "^17.4.2",
|
|
31
|
+
"express": "^5.2.1",
|
|
32
|
+
"mongodb": "^7.4.0",
|
|
33
|
+
"multer": "^2.2.0",
|
|
34
|
+
"mysql2": "^3.23.3",
|
|
35
|
+
"p-limit": "^7.3.1",
|
|
36
|
+
"pg": "^8.22.0",
|
|
37
|
+
"swagger-ui-express": "^5.0.1",
|
|
38
|
+
"yamljs": "^0.3.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/express": "^5.0.6",
|
|
42
|
+
"@types/mime-types": "^3.0.1",
|
|
43
|
+
"@types/mongodb": "^4.0.6",
|
|
44
|
+
"@types/multer": "^2.2.0",
|
|
45
|
+
"@types/node": "^26.2.0",
|
|
46
|
+
"@types/pg": "^8.21.0",
|
|
47
|
+
"@types/swagger-ui-express": "^4.1.8",
|
|
48
|
+
"@types/ws": "^8.18.1",
|
|
49
|
+
"@types/yamljs": "^0.2.34",
|
|
50
|
+
"ts-node": "^10.9.2",
|
|
51
|
+
"tsup": "^8.5.1",
|
|
52
|
+
"tsx": "^4.23.0",
|
|
53
|
+
"typescript": "^6.0.3"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/sql/mySql.ts"],"sourcesContent":["// mySql.ts\r\nimport mysql from 'mysql2/promise';\r\nimport dotenv from 'dotenv';\r\nimport fs from 'fs/promises';\r\nimport path from \"node:path\"\r\nimport {pathToFileURL} from \"node:url\";\r\nimport {ENV} from \"../../utility/libs/env.js\";\r\nimport {fileExistsAsync} from \"../../utility/utilis/general/file-operations.js\";\r\n\r\n\r\ndotenv.config();\r\nlet pool: mysql.Pool | null = null;\r\n\r\n\r\n\r\n\r\n\r\nexport async function getMySqlPool(): Promise<mysql.Pool> {\r\n if (!pool) {\r\n\r\n let options: mysql.PoolOptions;\r\n\r\n try {\r\n const mySqlConfigFileTs = path.join(process.cwd(), \"src/config/mySql.config.ts\");\r\n const mySqlConfigFileJs = path.join(process.cwd(), \"src/config/mySql.config.js\");\r\n const {MYSQL_POOL_OPTIONS} = await import(pathToFileURL(await fileExistsAsync(mySqlConfigFileJs) ? mySqlConfigFileJs : mySqlConfigFileTs).href);\r\n options = MYSQL_POOL_OPTIONS || {};\r\n if (!options.uri) options.uri = ENV.SQL_DB_URL\r\n }\r\n catch (error) {\r\n options = {};\r\n }\r\n\r\n pool = mysql.createPool(options);\r\n\r\n // Test connection on startup\r\n pool.getConnection()\r\n .then(conn => {\r\n console.log('✅ MySQL Database connected successfully');\r\n conn.release();\r\n })\r\n .catch(err => {\r\n console.error('❌ Failed to connect to MySQL:', err.message);\r\n process.exit(1);\r\n });\r\n\r\n // Connection event\r\n pool.on('connection', () => {\r\n console.log('🔌 New MySQL connection established');\r\n });\r\n\r\n // Acquire event (when connection is acquired from pool)\r\n pool.on('acquire', () => {\r\n console.log('📥 MySQL connection acquired');\r\n });\r\n\r\n // Enqueue event (when connection is queued)\r\n pool.on('enqueue', () => {\r\n console.log('⏳ MySQL connection queued');\r\n });\r\n\r\n // Release event (when connection is released back to pool)\r\n pool.on('release', () => {\r\n console.log('📤 MySQL connection released');\r\n });\r\n }\r\n\r\n return pool;\r\n}\r\n\r\n\r\n\r\n\r\nexport const runMySqlScript = async () => {\r\n try {\r\n const fileQuery = await fs.readFile('db.sql', 'utf8');\r\n\r\n // Split queries for multiple statements\r\n const queries = fileQuery\r\n .split(';')\r\n .map(q => q.trim())\r\n .filter(q => q.length > 0);\r\n\r\n\r\n const mySqlPool = await getMySqlPool();\r\n\r\n const connection = await mySqlPool.getConnection();\r\n\r\n try {\r\n for (const query of queries) {\r\n await mySqlPool.query(query);\r\n }\r\n console.log(\"✅ Database schema created successfully\");\r\n } finally {\r\n connection.release();\r\n }\r\n } catch (err) {\r\n console.error('❌ Failed to execute SQL script:', err);\r\n throw err;\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Graceful shutdown\r\nexport const closePool = async () => {\r\n if (pool) {\r\n console.log('Closing database pool...');\r\n await pool.end();\r\n console.log('Database pool closed');\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n// Handle process termination\r\nprocess.on('SIGINT', async () => {\r\n await closePool();\r\n process.exit(0);\r\n});\r\n\r\n\r\n\r\n\r\nprocess.on('SIGTERM', async () => {\r\n await closePool();\r\n process.exit(0);\r\n});\r\n"],"mappings":";;;;;;;;;;;AACA,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAQ,qBAAoB;AAK5B,OAAO,OAAO;AACd,IAAI,OAA0B;AAM9B,eAAsB,eAAoC;AACtD,MAAI,CAAC,MAAM;AAEP,QAAI;AAEJ,QAAI;AACA,YAAM,oBAAoB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAC/E,YAAM,oBAAoB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAC/E,YAAM,EAAC,mBAAkB,IAAI,MAAM,OAAO,cAAc,MAAM,gBAAgB,iBAAiB,IAAI,oBAAoB,iBAAiB,EAAE;AAC1I,gBAAU,sBAAsB,CAAC;AACjC,UAAI,CAAC,QAAQ,IAAK,SAAQ,MAAM,IAAI;AAAA,IACxC,SACO,OAAO;AACV,gBAAU,CAAC;AAAA,IACf;AAEA,WAAO,MAAM,WAAW,OAAO;AAG/B,SAAK,cAAc,EACd,KAAK,UAAQ;AACV,cAAQ,IAAI,8CAAyC;AACrD,WAAK,QAAQ;AAAA,IACjB,CAAC,EACA,MAAM,SAAO;AACV,cAAQ,MAAM,sCAAiC,IAAI,OAAO;AAC1D,cAAQ,KAAK,CAAC;AAAA,IAClB,CAAC;AAGL,SAAK,GAAG,cAAc,MAAM;AACxB,cAAQ,IAAI,4CAAqC;AAAA,IACrD,CAAC;AAGD,SAAK,GAAG,WAAW,MAAM;AACrB,cAAQ,IAAI,qCAA8B;AAAA,IAC9C,CAAC;AAGD,SAAK,GAAG,WAAW,MAAM;AACrB,cAAQ,IAAI,gCAA2B;AAAA,IAC3C,CAAC;AAGD,SAAK,GAAG,WAAW,MAAM;AACrB,cAAQ,IAAI,qCAA8B;AAAA,IAC9C,CAAC;AAAA,EACL;AAEA,SAAO;AACX;AAnDsB;AAwDf,IAAM,iBAAiB,mCAAY;AACtC,MAAI;AACA,UAAM,YAAY,MAAM,GAAG,SAAS,UAAU,MAAM;AAGpD,UAAM,UAAU,UACX,MAAM,GAAG,EACT,IAAI,OAAK,EAAE,KAAK,CAAC,EACjB,OAAO,OAAK,EAAE,SAAS,CAAC;AAG7B,UAAM,YAAY,MAAM,aAAa;AAErC,UAAM,aAAa,MAAM,UAAU,cAAc;AAEjD,QAAI;AACA,iBAAW,SAAS,SAAS;AACzB,cAAM,UAAU,MAAM,KAAK;AAAA,MAC/B;AACA,cAAQ,IAAI,6CAAwC;AAAA,IACxD,UAAE;AACE,iBAAW,QAAQ;AAAA,IACvB;AAAA,EACJ,SAAS,KAAK;AACV,YAAQ,MAAM,wCAAmC,GAAG;AACpD,UAAM;AAAA,EACV;AACJ,GA3B8B;AAmCvB,IAAM,YAAY,mCAAY;AACjC,MAAI,MAAM;AACN,YAAQ,IAAI,0BAA0B;AACtC,UAAM,KAAK,IAAI;AACf,YAAQ,IAAI,sBAAsB;AAAA,EACtC;AACJ,GANyB;AAYzB,QAAQ,GAAG,UAAU,YAAY;AAC7B,QAAM,UAAU;AAChB,UAAQ,KAAK,CAAC;AAClB,CAAC;AAKD,QAAQ,GAAG,WAAW,YAAY;AAC9B,QAAM,UAAU;AAChB,UAAQ,KAAK,CAAC;AAClB,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/general/uuids.ts"],"sourcesContent":["import crypto from 'crypto';\r\nimport { getRandomValues } from 'node:crypto';\r\nimport type {GenerateIdOptions} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\n\r\nexport function generateUniqueValue(length: number, options?: GenerateIdOptions): string;\r\nexport function generateUniqueValue(length: number, options: GenerateIdOptions & { count: number }): string[];\r\nexport function generateUniqueValue(\r\n length: number,\r\n options?: GenerateIdOptions & { count?: number }\r\n): string | string[] {\r\n if (length <= 0) {\r\n throw new Error('Length must be greater than 0');\r\n }\r\n\r\n const count = options?.count ?? 1;\r\n if (count <= 0) {\r\n throw new Error('Count must be greater than 0');\r\n }\r\n\r\n const generateSingleId = (): string => {\r\n let id = '';\r\n\r\n if (options?.useHex) {\r\n // 1 byte = 2 hex chars. We use Math.ceil and slice to ensure exact requested length.\r\n id = crypto.randomBytes(Math.ceil(length / 2)).toString('hex').slice(0, length);\r\n } else {\r\n // Allowed characters: A-Z, a-z, 0-9, and _ (63 total characters)\r\n const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_';\r\n const alphabetLength = alphabet.length; // 63\r\n\r\n // 63 is less than 64 (2^6), so 6 bits can represent 0-62.\r\n // Using a bitmask (63) avoids modulo bias for uniform randomness.\r\n const mask = (2 << (31 - Math.clz32((alphabetLength - 1) | 1))) - 1;\r\n const step = Math.ceil((1.6 * mask * length) / alphabetLength);\r\n\r\n const getBaseId = (): string => {\r\n let baseId = '';\r\n while (true) {\r\n const bytes = new Uint8Array(step);\r\n getRandomValues(bytes);\r\n\r\n for (const byteValue of bytes) {\r\n const byte = byteValue & mask;\r\n if (byte < alphabetLength) {\r\n baseId += alphabet[byte];\r\n if (baseId.length === length) {\r\n return baseId;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n id = getBaseId();\r\n }\r\n\r\n // Apply formatting (Timestamp first, then Prefix)\r\n if (options?.includeTimestamp) {\r\n const timestamp = Date.now().toString(16);\r\n id = `${timestamp}-${id}`;\r\n }\r\n\r\n if (options?.prefix) {\r\n id = `${options.prefix}-${id}`;\r\n }\r\n\r\n return id;\r\n };\r\n\r\n // Return an array if count is explicitly requested, otherwise return a single string\r\n if (options?.count !== undefined) {\r\n return Array.from({ length: count }, () => generateSingleId());\r\n }\r\n\r\n return generateSingleId();\r\n}\r\n"],"mappings":";;;;;AAAA,OAAO,YAAY;AACnB,SAAS,uBAAuB;AAQzB,SAAS,oBACZ,QACA,SACiB;AACnB,MAAI,UAAU,GAAG;AACf,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,QAAM,QAAQ,SAAS,SAAS;AAChC,MAAI,SAAS,GAAG;AACd,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,QAAM,mBAAmB,6BAAc;AACrC,QAAI,KAAK;AAET,QAAI,SAAS,QAAQ;AAEnB,WAAK,OAAO,YAAY,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE,SAAS,KAAK,EAAE,MAAM,GAAG,MAAM;AAAA,IAChF,OAAO;AAEL,YAAM,WAAW;AACjB,YAAM,iBAAiB,SAAS;AAIhC,YAAM,QAAQ,KAAM,KAAK,KAAK,MAAO,iBAAiB,IAAK,CAAC,KAAM;AAClE,YAAM,OAAO,KAAK,KAAM,MAAM,OAAO,SAAU,cAAc;AAE7D,YAAM,YAAY,6BAAc;AAC9B,YAAI,SAAS;AACb,eAAO,MAAM;AACX,gBAAM,QAAQ,IAAI,WAAW,IAAI;AACjC,0BAAgB,KAAK;AAErB,qBAAW,aAAa,OAAO;AAC7B,kBAAM,OAAO,YAAY;AACzB,gBAAI,OAAO,gBAAgB;AACzB,wBAAU,SAAS,IAAI;AACvB,kBAAI,OAAO,WAAW,QAAQ;AAC5B,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,GAhBkB;AAiBlB,WAAK,UAAU;AAAA,IACjB;AAGA,QAAI,SAAS,kBAAkB;AAC7B,YAAM,YAAY,KAAK,IAAI,EAAE,SAAS,EAAE;AACxC,WAAK,GAAG,SAAS,IAAI,EAAE;AAAA,IACzB;AAEA,QAAI,SAAS,QAAQ;AACnB,WAAK,GAAG,QAAQ,MAAM,IAAI,EAAE;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT,GA/CyB;AAkDzB,MAAI,SAAS,UAAU,QAAW;AAChC,WAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,MAAM,iBAAiB,CAAC;AAAA,EAC/D;AAEA,SAAO,iBAAiB;AAC1B;AApEgB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/cloud_storage/deleteFiles.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 {DeleteFiles} from \"../../libs/interface.js\";\r\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\r\n\r\n\r\n\r\nexport const deleteFiles = async (item_files: string[]): Promise<DeleteFiles> => {\r\n // Early return for empty array\r\n if (!item_files || item_files.length === 0) {\r\n return { items: [] };\r\n }\r\n\r\n // Optional: Deduplicate files to avoid redundant operations\r\n const uniqueFiles = [...new Set(item_files)];\r\n\r\n // Optional: Limit concurrency to avoid overwhelming the system\r\n const BATCH_SIZE = 50; // Adjust based on your needs\r\n const results: DeleteFiles['items'] = [];\r\n\r\n const deleteSingleFile = async (item_file: string): Promise<DeleteFiles['items'][0]> => {\r\n try {\r\n const fileType = url_or_path(item_file);\r\n\r\n if (fileType === ENV.URL) {\r\n const key = getKeyFromUrl(item_file);\r\n const command = new DeleteObjectCommand({\r\n Bucket: ENV.BUCKET_NAME,\r\n Key: key,\r\n });\r\n await s3Client.send(command);\r\n return {\r\n url_or_path: item_file,\r\n status: true,\r\n };\r\n }\r\n\r\n if (fileType === ENV.PATH) {\r\n try {\r\n await fs.promises.access(item_file);\r\n await fs.promises.unlink(item_file);\r\n } catch (accessError) {\r\n // File doesn't exist - consider this a success (idempotent)\r\n }\r\n return {\r\n url_or_path: item_file,\r\n status: true,\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 url_or_path: item_file,\r\n status: false,\r\n error: error,\r\n };\r\n }\r\n };\r\n\r\n // Process in batches to control memory/connection usage\r\n for (let i = 0; i < uniqueFiles.length; i += BATCH_SIZE) {\r\n const batch = uniqueFiles.slice(i, i + BATCH_SIZE);\r\n const batchResults = await Promise.allSettled(\r\n batch.map(file => deleteSingleFile(file))\r\n );\r\n\r\n batchResults.forEach((result, index) => {\r\n if (result.status === 'fulfilled') {\r\n results.push(result.value);\r\n } else {\r\n // result.reason should never happen with allSettled, but handle it anyway\r\n results.push({\r\n url_or_path: batch[index] || 'unknown', // Provide fallback\r\n status: false,\r\n error: result.reason,\r\n });\r\n }\r\n });\r\n }\r\n\r\n return { items: results };\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA,SAAQ,2BAA0B;AAClC,YAAY,QAAQ;AAMb,IAAM,cAAc,8BAAO,eAA+C;AAE7E,MAAI,CAAC,cAAc,WAAW,WAAW,GAAG;AACxC,WAAO,EAAE,OAAO,CAAC,EAAE;AAAA,EACvB;AAGA,QAAM,cAAc,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAG3C,QAAM,aAAa;AACnB,QAAM,UAAgC,CAAC;AAEvC,QAAM,mBAAmB,8BAAO,cAAwD;AACpF,QAAI;AACA,YAAM,WAAW,YAAY,SAAS;AAEtC,UAAI,aAAa,IAAI,KAAK;AACtB,cAAM,MAAM,cAAc,SAAS;AACnC,cAAM,UAAU,IAAI,oBAAoB;AAAA,UACpC,QAAQ,IAAI;AAAA,UACZ,KAAK;AAAA,QACT,CAAC;AACD,cAAM,SAAS,KAAK,OAAO;AAC3B,eAAO;AAAA,UACH,aAAa;AAAA,UACb,QAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,UAAI,aAAa,IAAI,MAAM;AACvB,YAAI;AACA,gBAAS,YAAS,OAAO,SAAS;AAClC,gBAAS,YAAS,OAAO,SAAS;AAAA,QACtC,SAAS,aAAa;AAAA,QAEtB;AACA,eAAO;AAAA,UACH,aAAa;AAAA,UACb,QAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,aAAO;AAAA,QACH,aAAa;AAAA,QACb,QAAQ;AAAA,MACZ;AAAA,IACJ,SAAS,OAAO;AACZ,aAAO;AAAA,QACH,aAAa;AAAA,QACb,QAAQ;AAAA,QACR;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,GAzCyB;AA4CzB,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK,YAAY;AACrD,UAAM,QAAQ,YAAY,MAAM,GAAG,IAAI,UAAU;AACjD,UAAM,eAAe,MAAM,QAAQ;AAAA,MAC/B,MAAM,IAAI,UAAQ,iBAAiB,IAAI,CAAC;AAAA,IAC5C;AAEA,iBAAa,QAAQ,CAAC,QAAQ,UAAU;AACpC,UAAI,OAAO,WAAW,aAAa;AAC/B,gBAAQ,KAAK,OAAO,KAAK;AAAA,MAC7B,OAAO;AAEH,gBAAQ,KAAK;AAAA,UACT,aAAa,MAAM,KAAK,KAAK;AAAA;AAAA,UAC7B,QAAQ;AAAA,UACR,OAAO,OAAO;AAAA,QAClB,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO,EAAE,OAAO,QAAQ;AAC5B,GA9E2B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/general/file-operations.ts"],"sourcesContent":["import mime from \"mime-types\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport {readFile} from \"node:fs/promises\";\r\nimport fs from \"fs/promises\";\r\nimport fsSync from \"fs\";\r\nimport type {PathOptions} from \"../../libs/types.js\";\r\nimport type {DownloadablePath} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport async function fileExistsAsync(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.access(filePath);\r\n return true; // File exists and is accessible\r\n } catch {\r\n return false; // File does not exist\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function fileExistsSync(filePath: string): boolean {\r\n try {\r\n fsSync.accessSync(filePath);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function getFileExtension(input: Express.Multer.File | File | Buffer | string): string {\r\n // 1. If it's a raw Buffer, it has no file name/extension metadata\r\n if (Buffer.isBuffer(input)) {\r\n return '';\r\n }\r\n\r\n // 2. Extract the filename string based on the input type\r\n let filename = '';\r\n\r\n if (typeof input === 'string') {\r\n filename = input;\r\n }\r\n else if ('originalname' in input && input.originalname) {\r\n // Express.Multer.File\r\n filename = input.originalname;\r\n }\r\n else if ('name' in input && input.name) {\r\n // Web API File\r\n filename = input.name;\r\n }\r\n\r\n if (!filename) {\r\n return '';\r\n }\r\n\r\n // 3. Remove URL query parameters or hashes (if a URL/path string is passed)\r\n const cleanFilename = filename.split(/[?#]/)[0] as string;\r\n\r\n // 4. Extract the last segment after the final dot\r\n const match = cleanFilename.match(/\\.([^./\\\\]+)$/);\r\n\r\n return match?.[1]?.toLowerCase() ?? '';\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function buildPath(options: PathOptions): string {\r\n // If a complete path is directly provided\r\n if (\"path\" in options) {\r\n return options.path\r\n .replace(/^\\/+|\\/+$/g, '')\r\n .replace(/\\/+/g, '/');\r\n }\r\n\r\n const {\r\n path_prefix,\r\n segments = [],\r\n path_postfix,\r\n fileName,\r\n } = options;\r\n\r\n let resolvedFileName = '';\r\n\r\n if (typeof fileName === 'string') {\r\n resolvedFileName = fileName;\r\n } else if (Buffer.isBuffer(fileName)) {\r\n resolvedFileName = fileName.toString();\r\n } else if (fileName) {\r\n // Browser File\r\n if ('name' in fileName) {\r\n resolvedFileName = fileName.name;\r\n }\r\n // Express.Multer.File\r\n else if ('originalname' in fileName) {\r\n resolvedFileName = fileName.originalname;\r\n }\r\n }\r\n\r\n const allSegments = [\r\n path_prefix,\r\n ...segments,\r\n path_postfix,\r\n resolvedFileName,\r\n ];\r\n\r\n return allSegments\r\n .filter(\r\n (segment): segment is string =>\r\n Boolean(segment && segment.trim())\r\n )\r\n .map((segment) =>\r\n segment\r\n .replace(/^\\/+|\\/+$/g, '')\r\n .replace(/\\/+/g, '/')\r\n )\r\n .filter((segment) => segment.length > 0)\r\n .join('/');\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function getInAppBucketDownloadPath(\r\n {\r\n segments = [],\r\n fileName,\r\n }: DownloadablePath = {}\r\n): string {\r\n const cleanedSegments = segments.filter(\r\n (segment) => segment !== ENV.IN_APP_BUCKET\r\n );\r\n\r\n return buildPath({\r\n path_prefix: ENV.IN_APP_BUCKET,\r\n segments: cleanedSegments,\r\n ...(fileName && {fileName: fileName}),\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const getFileContentType = async (\r\n file: Express.Multer.File | File | Buffer | string\r\n): Promise<string> => {\r\n // 1. Raw Buffer: Buffers don't carry MIME metadata, so default to octet-stream\r\n if (Buffer.isBuffer(file)) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n // 2. String path or URL: Look up MIME type based on extension/filename\r\n if (typeof file === 'string') {\r\n const detectedType = mime.lookup(file);\r\n return detectedType || 'application/octet-stream';\r\n }\r\n\r\n // 3. Express.Multer.File: Has 'mimetype' property\r\n if ('mimetype' in file && file.mimetype) {\r\n return file.mimetype;\r\n }\r\n\r\n // 4. Web API File: Has 'type' property\r\n if ('type' in file && file.type) {\r\n return file.type;\r\n }\r\n\r\n // 5. Fallback if object has no recognizable MIME type\r\n return 'application/octet-stream';\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const url_or_path = (val: string): 'url' | 'path' => {\r\n try {\r\n const parsed = new URL(val);\r\n if (parsed.protocol === \"http:\" || parsed.protocol === \"https:\") {\r\n return 'url';\r\n }\r\n } catch {\r\n // If new URL() throws, it is a local path\r\n }\r\n return 'path';\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport async function toUint8Array(file: Express.Multer.File | File | Buffer | string): Promise<Uint8Array> {\r\n if (typeof file === \"string\") {\r\n // File path on disk\r\n return await readFile(file);\r\n }\r\n\r\n if (Buffer.isBuffer(file)) {\r\n // Raw Node.js Buffer\r\n return new Uint8Array(file);\r\n }\r\n\r\n if (\"buffer\" in file && Buffer.isBuffer(file.buffer)) {\r\n // Express.Multer.File (Memory storage)\r\n return new Uint8Array(file.buffer);\r\n }\r\n\r\n if (\"path\" in file && typeof file.path === \"string\") {\r\n // Express.Multer.File (Disk storage)\r\n return await readFile(file.path);\r\n }\r\n\r\n if (\"arrayBuffer\" in file && typeof file.arrayBuffer === \"function\") {\r\n // Web API File / Blob\r\n return new Uint8Array(await file.arrayBuffer());\r\n }\r\n\r\n throw new Error(\"Unable to parse file input into a valid binary buffer.\");\r\n}\r\n\r\n\r\n\r\n\r\n\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/multer/upload_batch.ts"],"sourcesContent":["import {MAX_BATCH_FILES, multerInstance} from \"../../../engine/multer/multer_configs.js\";\r\nimport {ENV} from \"../../libs/env.js\";\r\n\r\n\r\n\r\nexport const upload_batch = (fieldName: string = ENV.FILES, maxCount: number = MAX_BATCH_FILES) =>\r\n multerInstance.array(fieldName, maxCount);\r\n\r\n"],"mappings":";;;;;;;;;;;;AAKO,IAAM,eAAe,wBAAC,YAAoB,IAAI,OAAO,WAAmB,oBAC3E,eAAe,MAAM,WAAW,QAAQ,GADhB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.ts"],"sourcesContent":["import type {PoolConnection} from \"mysql2/promise\";\r\nimport type {QueryItems} from \"../../../libs/interface.js\";\r\nimport {getMySqlPool} from \"../../../../engine/sql/mySql.js\";\r\nimport type {SqlQuery, SqlRawQuery} from \"../../../libs/types.js\";\r\n\r\n\r\nexport const executeMySqlQuery = async (query: QueryItems) => {\r\n let client: PoolConnection | null = null;\r\n let results: any[] = [];\r\n\r\n try {\r\n // Check if we need a transaction (multiple queries or mix of crud and custom)\r\n const needsTransaction = (query.crud && query.crud?.length > 1) ||\r\n (query.crud && query.custom) ||\r\n (query.crud && query.crud?.length === 0);\r\n\r\n if (needsTransaction) {\r\n client = await (await getMySqlPool()).getConnection();\r\n await client.beginTransaction();\r\n }\r\n\r\n // Execute CRUD queries\r\n if (query.crud && query.crud.length > 0) {\r\n const crudResults = await executeCrud(query.crud, client);\r\n results = results.concat(crudResults);\r\n }\r\n\r\n // Execute custom query\r\n if (query.custom && !Array.isArray(query.custom)) {\r\n const customResult = await executeCustom(query.custom, client);\r\n results.push(customResult);\r\n }\r\n\r\n if (Array.isArray(query.custom) && query.custom.length) {\r\n const customResult = await executeCustom(query.custom, client);\r\n results.push(customResult);\r\n }\r\n\r\n // Commit transaction if we started one\r\n if (client) {\r\n await client.commit();\r\n }\r\n\r\n return results;\r\n\r\n } catch (error) {\r\n // Rollback if we have a client (meaning we started a transaction)\r\n if (client) {\r\n await client.rollback();\r\n }\r\n throw error;\r\n }\r\n finally {\r\n // Release client if we acquired one\r\n if (client) {\r\n client.release();\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst executeCrud = async (queries: SqlQuery[], poolClient?: PoolConnection | null): Promise<any[]> => {\r\n const results: any[] = [];\r\n const pool = poolClient || await getMySqlPool();\r\n\r\n try {\r\n for (const query of queries) {\r\n let sql: string = '';\r\n let params: any[] = [];\r\n\r\n if ('insert_one' in query) {\r\n const { item, table } = query.insert_one;\r\n const columns = Object.keys(item);\r\n const values = Object.values(item);\r\n\r\n const placeholders = values.map(() => '?').join(', ');\r\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders})`;\r\n params = values;\r\n\r\n const result = pool.query(sql, params);\r\n const insertId = (result as any)[0]?.insertId;\r\n\r\n if (insertId) {\r\n const [rows] = await (await pool).query(`SELECT * FROM ${table} WHERE id = ?`, [insertId]);\r\n results.push(rows);\r\n } else {\r\n results.push([]);\r\n }\r\n continue;\r\n }\r\n\r\n if ('insert_many' in query) {\r\n const { item, table } = query.insert_many;\r\n\r\n if (item.length > 0) {\r\n\r\n const columns = Object.keys(item[0] || {});\r\n const placeholders = item.map(() => `(${columns.map(() => '?').join(', ')})`).join(', ');\r\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${placeholders}`;\r\n params = item.flatMap(row => Object.values(row));\r\n\r\n const result = await pool.query(sql, params);\r\n const insertId = (result as any)[0]?.insertId;\r\n\r\n if (insertId) {\r\n const [rows] = await pool.query(`SELECT * FROM ${table} WHERE id >= ? ORDER BY id LIMIT ?`, [insertId, item.length]);\r\n results.push(rows);\r\n } else {\r\n results.push([]);\r\n }\r\n }\r\n\r\n }\r\n\r\n else if ('update' in query) {\r\n const { item, table, condition, conditionalParams = [] } = query.update;\r\n\r\n const columns = Object.keys(item);\r\n const values = Object.values(item);\r\n\r\n const setClause = columns.map(col => `${col} = ?`).join(', ');\r\n sql = `UPDATE ${table} SET ${setClause} WHERE ${condition}`;\r\n params = [...values, ...conditionalParams];\r\n\r\n await (await pool).query(sql, params);\r\n\r\n // Get updated rows\r\n const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;\r\n const [rows] = await pool.query(selectSql, conditionalParams);\r\n results.push(rows);\r\n\r\n }\r\n\r\n else if ('select' in query) {\r\n const { columns = ['*'], table, condition, conditionalParams = [] } = query.select;\r\n const selectColumns = columns.join(', ');\r\n sql = `SELECT ${selectColumns} FROM ${table}`;\r\n if (condition) {\r\n sql += ` WHERE ${condition}`;\r\n params = conditionalParams;\r\n }\r\n const [rows] = await pool.query(sql, params);\r\n results.push(rows);\r\n\r\n }\r\n\r\n else if ('delete' in query) {\r\n const { table, condition, conditionalParams = [] } = query.delete;\r\n\r\n // Get deleted rows before deleting\r\n const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;\r\n const [rows] = await pool.query(selectSql, conditionalParams);\r\n\r\n sql = `DELETE FROM ${table} WHERE ${condition}`;\r\n params = conditionalParams;\r\n await pool.query(sql, params);\r\n results.push(rows);\r\n\r\n }\r\n }\r\n\r\n return results;\r\n\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst executeCustom = async (\r\n customQuery: SqlRawQuery | SqlRawQuery[],\r\n poolClient?: PoolConnection | null\r\n): Promise<any[]> => {\r\n const pool = poolClient || await getMySqlPool();\r\n\r\n try {\r\n // If an array of raw queries was passed\r\n if (Array.isArray(customQuery)) {\r\n const results: any[] = [];\r\n for (const item of customQuery) {\r\n const { query: sql, params = [] } = item;\r\n if (sql) {\r\n const [rows] = await pool.query(sql, params);\r\n results.push(rows);\r\n }\r\n }\r\n return results;\r\n }\r\n\r\n // If a single raw query object was passed\r\n const { query: sql, params = [] } = customQuery;\r\n if (!sql) {\r\n throw new Error(\"Custom query missing required 'query' string property.\");\r\n }\r\n\r\n return await pool.query(sql, params);\r\n\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n"],"mappings":"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","names":["sql","params"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/mongoDb/updateFiled.ts"],"sourcesContent":["import type {CustomUpdateResult} from \"../../libs/types.js\";\r\nimport {getMongoServer} from \"../../../engine/mondoDb/mongoDB.js\";\r\nimport type {UpdateDocument} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\nexport const mongoUpdateField = async (\r\n params: UpdateDocument\r\n): Promise<CustomUpdateResult> => {\r\n const {\r\n dbName,\r\n collectionName,\r\n query,\r\n updatable,\r\n updateMany = false,\r\n options\r\n } = params;\r\n\r\n try {\r\n const db = getMongoServer().db(dbName);\r\n const collection = db.collection(collectionName);\r\n\r\n // Perform update with await\r\n const result = updateMany\r\n ? await collection.updateMany(query, updatable, options)\r\n : await collection.updateOne(query, updatable, options);\r\n\r\n return {\r\n status: true,\r\n result,\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 error,\r\n };\r\n }\r\n};\r\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/mondoDb/mongoDB.ts"],"sourcesContent":["import { ENV } from \"../../utility/libs/env.js\";\r\nimport { MongoClient, type MongoClientOptions } from 'mongodb';\r\nimport path from \"node:path\"\r\nimport {pathToFileURL} from \"node:url\";\r\nimport {fileExistsAsync} from \"../../utility/utilis/general/file-operations.js\";\r\n\r\n\r\nconst uri = ENV.MONGO_SERVER_URL;\r\nlet client: MongoClient | null = null;\r\n\r\n\r\nasync function connectToMongo(): Promise<MongoClient|undefined> {\r\n if (!uri) return;\r\n try {\r\n if (!client) {\r\n\r\n let options: MongoClientOptions;\r\n\r\n try {\r\n const mongoConfigFileTs = path.join(process.cwd(), \"src/config/mongo.config.ts\");\r\n const mongoConfigFileJs = path.join(process.cwd(), \"src/config/mongo.config.js\");\r\n\r\n const { MONGO_CLIENT_OPTIONS } = await import(\r\n pathToFileURL(\r\n (await fileExistsAsync(mongoConfigFileJs)) ? mongoConfigFileJs : mongoConfigFileTs\r\n ).href\r\n );\r\n options = MONGO_CLIENT_OPTIONS || {};\r\n }\r\n catch (error) {\r\n options = {}\r\n }\r\n\r\n\r\n client = new MongoClient(uri, options);\r\n await client.connect();\r\n console.log(\"✅ Connected to MongoDB Cluster\");\r\n\r\n }\r\n return client;\r\n } catch (error) {\r\n console.error(\"❌ MongoDB Connection Error:\", error);\r\n throw error;\r\n }\r\n}\r\n\r\n\r\n\r\nfunction getMongoServer(): MongoClient {\r\n if (!client) {\r\n throw new Error(\"Call connectToMongo first!\");\r\n }\r\n return client;\r\n}\r\n\r\n\r\n\r\nexport { connectToMongo, getMongoServer };\r\n"],"mappings":";;;;;;;;;;;AACA,SAAS,mBAA4C;AACrD,OAAO,UAAU;AACjB,SAAQ,qBAAoB;AAI5B,IAAM,MAAM,IAAI;AAChB,IAAI,SAA6B;AAGjC,eAAe,iBAAiD;AAC9D,MAAI,CAAC,IAAK;AACV,MAAI;AACF,QAAI,CAAC,QAAQ;AAEX,UAAI;AAEJ,UAAI;AACF,cAAM,oBAAoB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAC/E,cAAM,oBAAoB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAE/E,cAAM,EAAE,qBAAqB,IAAI,MAAM,OACnC;AAAA,UACK,MAAM,gBAAgB,iBAAiB,IAAK,oBAAoB;AAAA,QACrE,EAAE;AAEN,kBAAU,wBAAwB,CAAC;AAAA,MACrC,SACO,OAAO;AACZ,kBAAU,CAAC;AAAA,MACb;AAGA,eAAS,IAAI,YAAY,KAAK,OAAO;AACrC,YAAM,OAAO,QAAQ;AACrB,cAAQ,IAAI,qCAAgC;AAAA,IAE9C;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,oCAA+B,KAAK;AAClD,UAAM;AAAA,EACR;AACF;AAjCe;AAqCf,SAAS,iBAA8B;AACrC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,SAAO;AACT;AALS;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/multer/upload_single.ts"],"sourcesContent":["import {multerInstance} from \"../../../engine/multer/multer_configs.js\";\r\nimport {ENV} from \"../../libs/env.js\";\r\n\r\n\r\n/**\r\n * Creates Multer middleware for handling a single file upload.\r\n *\r\n * The middleware expects one uploaded file from the specified\r\n * `multipart/form-data` field and makes the uploaded file available through\r\n * `req.file`.\r\n *\r\n * If no field name is provided, `ENV.FILE` is used as the default field name.\r\n *\r\n * @param fieldName - Name of the multipart/form-data field containing the\r\n * uploaded file.\r\n *\r\n * @returns Multer middleware configured to process a single uploaded file.\r\n *\r\n * @example\r\n * // Use the default field name.\r\n * router.post(\r\n * '/upload',\r\n * upload_single(),\r\n * uploadSingleFileApi\r\n * );\r\n *\r\n * @example\r\n * // Accept a single file from the \"file\" field.\r\n * router.post(\r\n * '/upload',\r\n * upload_single('file'),\r\n * uploadSingleFileApi\r\n * );\r\n *\r\n * @example\r\n * // Use a custom field name.\r\n * router.post(\r\n * '/profile-picture',\r\n * upload_single('profilePicture'),\r\n * uploadSingleFileApi\r\n * );\r\n *\r\n * // The uploaded file will be available as:\r\n * // req.file\r\n */\r\nexport const upload_single = (fieldName: string = ENV.FILE) =>\r\n multerInstance.single(fieldName);\r\n"],"mappings":";;;;;;;;;;;AA6CO,IAAM,gBAAgB,wBAAC,YAAoB,IAAI,SAClD,eAAe,OAAO,SAAS,GADN;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/libs/env.ts"],"sourcesContent":["import { configDotenv } from 'dotenv';\r\nconfigDotenv();\r\n\r\n\r\nexport const ENV = {\r\n\r\n FILE: \"file\",\r\n FILES: \"files\",\r\n\r\n SERVER_PORT: process.env.SERVER_PORT as string,\r\n\r\n CURRENT_ENVIRONMENT: process.env.CURRENT_ENVIRONMENT as string,\r\n ENV_TYPE_LOCAL: process.env.ENV_TYPE_LOCAL as string,\r\n ENV_TYPE_PRODUCTION: process.env.ENV_TYPE_PRODUCTION as string,\r\n\r\n SQL_DB_URL: process.env.SQL_DB_URL as string,\r\n MONGO_SERVER_URL: process.env.MONGO_DB_URL as string,\r\n\r\n IN_APP_BUCKET: process.env.IN_APP_BUCKET as string,\r\n BUCKET_NAME: process.env.BUCKET_NAME as string,\r\n BUCKET_END_POINT: process.env.BUCKET_END_POINT as string,\r\n BUCKET_ACCESS_KEY_ID: process.env.BACKEND_ACCESS_KEY as string,\r\n BUCKET_SECRET_KEY_ID: process.env.BACKEND_SECRET_KEY as string,\r\n\r\n URL: \"url\",\r\n PATH: 'path',\r\n\r\n MY_SQL: 'mysql',\r\n POSTGRES_SQL: 'postgresql',\r\n\r\n MAX_BATCH_FILES: process.env.MAX_BATCH_FILES as string,\r\n MAX_FILE_SIZE_IN_MB: process.env.MAX_FILE_SIZE_IN_MB as string,\r\n MAX_FIELD_SIZE_IN_MB: process.env.MAX_FIELD_SIZE_IN_MB as string,\r\n\r\n\r\n}\r\n"],"mappings":";AAAA,SAAS,oBAAoB;AAC7B,aAAa;AAGN,IAAM,MAAM;AAAA,EAEf,MAAM;AAAA,EACN,OAAO;AAAA,EAEP,aAAa,QAAQ,IAAI;AAAA,EAEzB,qBAAqB,QAAQ,IAAI;AAAA,EACjC,gBAAgB,QAAQ,IAAI;AAAA,EAC5B,qBAAqB,QAAQ,IAAI;AAAA,EAEjC,YAAY,QAAQ,IAAI;AAAA,EACxB,kBAAkB,QAAQ,IAAI;AAAA,EAE9B,eAAe,QAAQ,IAAI;AAAA,EAC3B,aAAa,QAAQ,IAAI;AAAA,EACzB,kBAAkB,QAAQ,IAAI;AAAA,EAC9B,sBAAsB,QAAQ,IAAI;AAAA,EAClC,sBAAsB,QAAQ,IAAI;AAAA,EAElC,KAAK;AAAA,EACL,MAAM;AAAA,EAEN,QAAQ;AAAA,EACR,cAAc;AAAA,EAEd,iBAAiB,QAAQ,IAAI;AAAA,EAC7B,qBAAqB,QAAQ,IAAI;AAAA,EACjC,sBAAsB,QAAQ,IAAI;AAGtC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/cloud_storage/uploadFiles.ts"],"sourcesContent":["import type {FilesUploadedResponseData, UploadFilesInput} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nimport pLimit from 'p-limit';\r\nimport {upload_file} from \"./uploadFile.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const upload_files = async ({\r\n files,\r\n globalPath,\r\n concurrency = 5\r\n }: UploadFilesInput): Promise<FilesUploadedResponseData> => {\r\n\r\n // 1. Validate: Throw error immediately if globalPath coexists with any item's individual path\r\n if (globalPath && files.some((item) => item.path && item.path.length > 0)) {\r\n throw new Error(\"Invalid options: 'globalPath' and individual 'path' cannot both exist.\");\r\n }\r\n\r\n const limiter = pLimit(concurrency);\r\n const returnData: FilesUploadedResponseData = {\r\n successFiles: [],\r\n failedFiles: []\r\n };\r\n\r\n // 2. Map and run concurrent uploads inside limiter tasks\r\n const uploadTasks = files.map(({ file, path }) =>\r\n limiter(async () => {\r\n // Resolve target path (use item's path if available, otherwise globalPath array)\r\n const resolvedPath = path ?? (globalPath?.length ? globalPath : undefined);\r\n\r\n // Delegate single file upload logic to upload_file function\r\n const result = await upload_file({\r\n file,\r\n path: resolvedPath\r\n });\r\n\r\n // Aggregate results based on whether an error occurred on the single file upload\r\n if ('error' in result && result.error) {\r\n returnData.failedFiles.push(result);\r\n } else {\r\n returnData.successFiles.push(result);\r\n }\r\n })\r\n );\r\n\r\n // 3. Wait for all concurrent uploads to settle\r\n await Promise.all(uploadTasks);\r\n\r\n return returnData;\r\n};\r\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/cloudBucket/r2Storage.ts"],"sourcesContent":["import { S3Client } from '@aws-sdk/client-s3';\r\nimport path from \"node:path\";\r\nimport {pathToFileURL} from \"node:url\";\r\nimport {fileExistsAsync} from \"../../utility/utilis/general/file-operations.js\";\r\n\r\n\r\n\r\n\r\n\r\nconst s3ConfigFileTs = path.join(process.cwd(), \"src/config/s3bucket.config.ts\");\r\nconst s3ConfigFileJs = path.join(process.cwd(), \"src/config/s3bucket.config.js\");\r\n\r\nconst { S3_BUCKET_CONFIG } = await import(\r\n pathToFileURL(\r\n (await fileExistsAsync(s3ConfigFileJs)) ? s3ConfigFileJs : s3ConfigFileTs\r\n ).href\r\n );\r\n\r\n\r\nexport const s3Client: S3Client = new S3Client(S3_BUCKET_CONFIG);\r\n"],"mappings":";;;;;AAAA,SAAS,gBAAgB;AACzB,OAAO,UAAU;AACjB,SAAQ,qBAAoB;AAO5B,IAAM,iBAAiB,KAAK,KAAK,QAAQ,IAAI,GAAG,+BAA+B;AAC/E,IAAM,iBAAiB,KAAK,KAAK,QAAQ,IAAI,GAAG,+BAA+B;AAE/E,IAAM,EAAE,iBAAiB,IAAI,MAAM,OAC/B;AAAA,EACK,MAAM,gBAAgB,cAAc,IAAK,iBAAiB;AAC/D,EAAE;AAIC,IAAM,WAAqB,IAAI,SAAS,gBAAgB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/mongoDb/buldWrite.ts"],"sourcesContent":["import {getMongoServer} from \"../../../engine/mondoDb/mongoDB.js\";\r\nimport type {CustomBulkWriteResult} from \"../../libs/types.js\";\r\nimport type {BulkWriteInterface} from \"../../libs/interface.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const mongoBulkWrite = async (\r\n params: BulkWriteInterface\r\n): Promise<CustomBulkWriteResult> => {\r\n const { dbName, collectionName, writable, options } = params;\r\n\r\n try {\r\n const col = getMongoServer().db(dbName).collection(collectionName);\r\n\r\n // Added 'await' to ensure operations complete\r\n const result = await col.bulkWrite(writable, options);\r\n\r\n return {\r\n status: true,\r\n result,\r\n error: null,\r\n };\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n return {\r\n status: false,\r\n result: null,\r\n error,\r\n };\r\n }\r\n};\r\n"],"mappings":";;;;;;;;AAWO,IAAM,iBAAiB,8BAC1B,WACiC;AACjC,QAAM,EAAE,QAAQ,gBAAgB,UAAU,QAAQ,IAAI;AAEtD,MAAI;AACA,UAAM,MAAM,eAAe,EAAE,GAAG,MAAM,EAAE,WAAW,cAAc;AAGjE,UAAM,SAAS,MAAM,IAAI,UAAU,UAAU,OAAO;AAEpD,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;AAChE,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACJ,GAxB8B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/mongoDb/insertField.ts"],"sourcesContent":["import {getMongoServer} from \"../../../engine/mondoDb/mongoDB.js\";\r\nimport type {CustomInsertOneResult} from \"../../libs/types.js\";\r\nimport type {InsertOneInterface} from \"../../libs/interface.js\";\r\nimport type {Document } from \"mongodb\";\r\n\r\n\r\n\r\nexport const mongoInsertField = async <T>(\r\n params: InsertOneInterface<T>\r\n): Promise<CustomInsertOneResult<T>> => {\r\n const { dbName, collectionName, field, options } = params;\r\n\r\n try {\r\n const db = getMongoServer().db(dbName);\r\n const collection = db.collection<T & Document>(collectionName);\r\n\r\n const result = await collection.insertOne(field, options);\r\n\r\n return {\r\n status: true,\r\n result,\r\n error: null,\r\n };\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n return {\r\n status: false,\r\n result: null,\r\n error,\r\n };\r\n }\r\n};\r\n"],"mappings":";;;;;;;;AAOO,IAAM,mBAAmB,8BAC5B,WACoC;AACpC,QAAM,EAAE,QAAQ,gBAAgB,OAAO,QAAQ,IAAI;AAEnD,MAAI;AACA,UAAM,KAAK,eAAe,EAAE,GAAG,MAAM;AACrC,UAAM,aAAa,GAAG,WAAyB,cAAc;AAE7D,UAAM,SAAS,MAAM,WAAW,UAAU,OAAO,OAAO;AAExD,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;AAChE,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACJ,GAxBgC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utility/utilis/general/error_handler.ts"],"sourcesContent":["import type {CustomErrorTemplate} from \"../../libs/interface.js\";\r\n\r\nfunction normalizeError(err: unknown): CustomErrorTemplate {\r\n const timestamp = new Date().toISOString();\r\n\r\n if (err instanceof Error) {\r\n return {\r\n timestamp,\r\n type: err.name || 'Error',\r\n message: err.message || 'An unknown error occurred.',\r\n ...(err.stack !== undefined && { stack: err.stack }),\r\n rawError: err,\r\n };\r\n }\r\n\r\n if (typeof err === 'string') {\r\n return {\r\n timestamp,\r\n type: 'StringError',\r\n message: err,\r\n rawError: err,\r\n };\r\n }\r\n\r\n if (typeof err === 'object' && err !== null) {\r\n return {\r\n timestamp,\r\n type: 'ObjectError',\r\n message: JSON.stringify(err),\r\n rawError: err,\r\n };\r\n }\r\n\r\n return {\r\n timestamp,\r\n type: 'UnknownError',\r\n message: String(err),\r\n rawError: err,\r\n };\r\n}\r\n\r\n/**\r\n * Normalizes and logs an error with optional contextual information.\r\n *\r\n * Formats the error for both terminal and browser environments, displaying\r\n * its type, message, timestamp, context, stack trace, and raw error object.\r\n * The normalized error is returned after being logged.\r\n *\r\n * @param err - The unknown error value to normalize and handle.\r\n * @param context - Optional context describing where the error occurred.\r\n * @returns The normalized error as a `CustomErrorTemplate`.\r\n *\r\n * @example\r\n * const error = handleError(error, 'File Upload');\r\n * // Logs the normalized error and returns a CustomErrorTemplate.\r\n *\r\n * @example\r\n * try {\r\n * await upload_file(file);\r\n * } catch (error) {\r\n * handleError(error, 'MinIO Upload');\r\n * }\r\n */\r\nexport function handleError(\r\n err: unknown,\r\n context?: string\r\n): CustomErrorTemplate {\r\n const normalized = normalizeError(err);\r\n const contextLabel = context ? ` [${context.toUpperCase()}]` : '';\r\n\r\n // Terminal/Browser styling rules\r\n const titleStyle = 'color: #ff4d4f; font-weight: bold; font-size: 12px;';\r\n const labelStyle = 'color: #999; font-weight: normal;';\r\n\r\n console.groupCollapsed(\r\n `%c🚨 ERROR${contextLabel}: ${normalized.type} — ${normalized.message}`,\r\n titleStyle\r\n );\r\n\r\n console.log(`%cTimestamp:%c ${normalized.timestamp}`, labelStyle, 'color: inherit;');\r\n\r\n if (context) {\r\n console.log(`%cContext:%c ${context}`, labelStyle, 'color: inherit;');\r\n }\r\n\r\n console.log(`%cMessage:%c ${normalized.message}`, labelStyle, 'color: #ff7875;');\r\n\r\n if (normalized.stack) {\r\n console.group('Stack Trace');\r\n console.log(normalized.stack);\r\n console.groupEnd();\r\n }\r\n\r\n console.group('Raw Error Object');\r\n console.dir(normalized.rawError);\r\n console.groupEnd();\r\n\r\n console.groupEnd();\r\n\r\n return normalized;\r\n}\r\n"],"mappings":";;;;;AAEA,SAAS,eAAe,KAAmC;AACvD,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AAEzC,MAAI,eAAe,OAAO;AACtB,WAAO;AAAA,MACH;AAAA,MACA,MAAM,IAAI,QAAQ;AAAA,MAClB,SAAS,IAAI,WAAW;AAAA,MACxB,GAAI,IAAI,UAAU,UAAa,EAAE,OAAO,IAAI,MAAM;AAAA,MAClD,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,MAAI,OAAO,QAAQ,UAAU;AACzB,WAAO;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AACzC,WAAO;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,SAAS,KAAK,UAAU,GAAG;AAAA,MAC3B,UAAU;AAAA,IACd;AAAA,EACJ;AAEA,SAAO;AAAA,IACH;AAAA,IACA,MAAM;AAAA,IACN,SAAS,OAAO,GAAG;AAAA,IACnB,UAAU;AAAA,EACd;AACJ;AArCS;AA6DF,SAAS,YACZ,KACA,SACmB;AACnB,QAAM,aAAa,eAAe,GAAG;AACrC,QAAM,eAAe,UAAU,KAAK,QAAQ,YAAY,CAAC,MAAM;AAG/D,QAAM,aAAa;AACnB,QAAM,aAAa;AAEnB,UAAQ;AAAA,IACJ,oBAAa,YAAY,KAAK,WAAW,IAAI,WAAM,WAAW,OAAO;AAAA,IACrE;AAAA,EACJ;AAEA,UAAQ,IAAI,kBAAkB,WAAW,SAAS,IAAI,YAAY,iBAAiB;AAEnF,MAAI,SAAS;AACT,YAAQ,IAAI,gBAAgB,OAAO,IAAI,YAAY,iBAAiB;AAAA,EACxE;AAEA,UAAQ,IAAI,gBAAgB,WAAW,OAAO,IAAI,YAAY,iBAAiB;AAE/E,MAAI,WAAW,OAAO;AAClB,YAAQ,MAAM,aAAa;AAC3B,YAAQ,IAAI,WAAW,KAAK;AAC5B,YAAQ,SAAS;AAAA,EACrB;AAEA,UAAQ,MAAM,kBAAkB;AAChC,UAAQ,IAAI,WAAW,QAAQ;AAC/B,UAAQ,SAAS;AAEjB,UAAQ,SAAS;AAEjB,SAAO;AACX;AArCgB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|