backfarm 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-7QVYU63E.js +7 -0
- package/dist/chunk-7QVYU63E.js.map +1 -0
- package/dist/chunk-BMPUYKJJ.js +148 -0
- package/dist/chunk-BMPUYKJJ.js.map +1 -0
- package/dist/chunk-EB35KLDE.js +49 -0
- package/dist/chunk-EB35KLDE.js.map +1 -0
- package/dist/chunk-EWQYVPOL.js +30 -0
- package/dist/chunk-EWQYVPOL.js.map +1 -0
- package/dist/chunk-FMCW72HO.js +110 -0
- package/dist/chunk-FMCW72HO.js.map +1 -0
- package/dist/chunk-GBXVVI2R.js +528 -0
- package/dist/chunk-GBXVVI2R.js.map +1 -0
- package/dist/chunk-HZ4GLSOO.js +91 -0
- package/dist/chunk-HZ4GLSOO.js.map +1 -0
- package/dist/chunk-I6VD2JKM.js +72 -0
- package/dist/chunk-I6VD2JKM.js.map +1 -0
- package/dist/chunk-IN3YY526.js +165 -0
- package/dist/chunk-IN3YY526.js.map +1 -0
- package/dist/chunk-MEQAHLW6.js +135 -0
- package/dist/chunk-MEQAHLW6.js.map +1 -0
- package/dist/chunk-MNSQSU7T.js +90 -0
- package/dist/chunk-MNSQSU7T.js.map +1 -0
- package/dist/chunk-NDJVYPUT.js +61 -0
- package/dist/chunk-NDJVYPUT.js.map +1 -0
- package/dist/chunk-NMNAPTVV.js +91 -0
- package/dist/chunk-NMNAPTVV.js.map +1 -0
- package/dist/chunk-P5XJG7OG.js +71 -0
- package/dist/chunk-P5XJG7OG.js.map +1 -0
- package/dist/chunk-SSFPGDA3.js +73 -0
- package/dist/chunk-SSFPGDA3.js.map +1 -0
- package/dist/chunk-UWIMSKL5.js +35 -0
- package/dist/chunk-UWIMSKL5.js.map +1 -0
- package/dist/chunk-W2745SOE.js +38 -0
- package/dist/chunk-W2745SOE.js.map +1 -0
- package/dist/chunk-X3R3RLXY.js +62 -0
- package/dist/chunk-X3R3RLXY.js.map +1 -0
- package/dist/engine/cloudBucket/r2Storage.d.ts +5 -0
- package/dist/engine/cloudBucket/r2Storage.js +10 -0
- package/dist/engine/cloudBucket/r2Storage.js.map +1 -0
- package/dist/engine/mondoDb/mongoDB.d.ts +6 -0
- package/dist/engine/mondoDb/mongoDB.js +11 -0
- package/dist/engine/mondoDb/mongoDB.js.map +1 -0
- package/dist/engine/multer/multer_configs.d.ts +6 -0
- package/dist/engine/multer/multer_configs.js +11 -0
- package/dist/engine/multer/multer_configs.js.map +1 -0
- package/dist/engine/server/app.d.ts +5 -0
- package/dist/engine/server/app.js +8 -0
- package/dist/engine/server/app.js.map +1 -0
- package/dist/engine/server/server.d.ts +6 -0
- package/dist/engine/server/server.js +17 -0
- package/dist/engine/server/server.js.map +1 -0
- package/dist/engine/sql/mySql.d.ts +7 -0
- package/dist/engine/sql/mySql.js +13 -0
- package/dist/engine/sql/mySql.js.map +1 -0
- package/dist/engine/sql/pgSql.d.ts +7 -0
- package/dist/engine/sql/pgSql.js +13 -0
- package/dist/engine/sql/pgSql.js.map +1 -0
- package/dist/event-streams-PM4LQKAH.js +993 -0
- package/dist/event-streams-PM4LQKAH.js.map +1 -0
- package/dist/utility/libs/env.d.ts +24 -0
- package/dist/utility/libs/env.js +8 -0
- package/dist/utility/libs/env.js.map +1 -0
- package/dist/utility/libs/interface.d.ts +114 -0
- package/dist/utility/libs/interface.js +1 -0
- package/dist/utility/libs/interface.js.map +1 -0
- package/dist/utility/libs/types.d.ts +207 -0
- package/dist/utility/libs/types.js +6 -0
- package/dist/utility/libs/types.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/deleteFile.d.ts +9 -0
- package/dist/utility/utilis/cloud_storage/deleteFile.js +60 -0
- package/dist/utility/utilis/cloud_storage/deleteFile.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/deleteFiles.d.ts +9 -0
- package/dist/utility/utilis/cloud_storage/deleteFiles.js +89 -0
- package/dist/utility/utilis/cloud_storage/deleteFiles.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/downloadFile.d.ts +9 -0
- package/dist/utility/utilis/cloud_storage/downloadFile.js +74 -0
- package/dist/utility/utilis/cloud_storage/downloadFile.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/downloadFiles.d.ts +9 -0
- package/dist/utility/utilis/cloud_storage/downloadFiles.js +88 -0
- package/dist/utility/utilis/cloud_storage/downloadFiles.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/s3Client.d.ts +5 -0
- package/dist/utility/utilis/cloud_storage/s3Client.js +17 -0
- package/dist/utility/utilis/cloud_storage/s3Client.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/uploadFile.d.ts +51 -0
- package/dist/utility/utilis/cloud_storage/uploadFile.js +14 -0
- package/dist/utility/utilis/cloud_storage/uploadFile.js.map +1 -0
- package/dist/utility/utilis/cloud_storage/uploadFiles.d.ts +73 -0
- package/dist/utility/utilis/cloud_storage/uploadFiles.js +49 -0
- package/dist/utility/utilis/cloud_storage/uploadFiles.js.map +1 -0
- package/dist/utility/utilis/general/error_handler.d.ts +31 -0
- package/dist/utility/utilis/general/error_handler.js +8 -0
- package/dist/utility/utilis/general/error_handler.js.map +1 -0
- package/dist/utility/utilis/general/file-operations.d.ts +140 -0
- package/dist/utility/utilis/general/file-operations.js +19 -0
- package/dist/utility/utilis/general/file-operations.js.map +1 -0
- package/dist/utility/utilis/general/sqlDb.js.d.ts +151 -0
- package/dist/utility/utilis/general/sqlDb.js.js +13 -0
- package/dist/utility/utilis/general/sqlDb.js.js.map +1 -0
- package/dist/utility/utilis/general/uuids.d.ts +55 -0
- package/dist/utility/utilis/general/uuids.js +8 -0
- package/dist/utility/utilis/general/uuids.js.map +1 -0
- package/dist/utility/utilis/general/web.d.ts +247 -0
- package/dist/utility/utilis/general/web.js +13 -0
- package/dist/utility/utilis/general/web.js.map +1 -0
- package/dist/utility/utilis/mongoDb/buldWrite.d.ts +53 -0
- package/dist/utility/utilis/mongoDb/buldWrite.js +32 -0
- package/dist/utility/utilis/mongoDb/buldWrite.js.map +1 -0
- package/dist/utility/utilis/mongoDb/deleteDocument.d.ts +54 -0
- package/dist/utility/utilis/mongoDb/deleteDocument.js +34 -0
- package/dist/utility/utilis/mongoDb/deleteDocument.js.map +1 -0
- package/dist/utility/utilis/mongoDb/insertField.d.ts +40 -0
- package/dist/utility/utilis/mongoDb/insertField.js +33 -0
- package/dist/utility/utilis/mongoDb/insertField.js.map +1 -0
- package/dist/utility/utilis/mongoDb/insertFields.d.ts +48 -0
- package/dist/utility/utilis/mongoDb/insertFields.js +35 -0
- package/dist/utility/utilis/mongoDb/insertFields.js.map +1 -0
- package/dist/utility/utilis/mongoDb/updateFiled.d.ts +65 -0
- package/dist/utility/utilis/mongoDb/updateFiled.js +40 -0
- package/dist/utility/utilis/mongoDb/updateFiled.js.map +1 -0
- package/dist/utility/utilis/multer/upload_batch.d.ts +7 -0
- package/dist/utility/utilis/multer/upload_batch.js +17 -0
- package/dist/utility/utilis/multer/upload_batch.js.map +1 -0
- package/dist/utility/utilis/multer/upload_single.d.ts +7 -0
- package/dist/utility/utilis/multer/upload_single.js +16 -0
- package/dist/utility/utilis/multer/upload_single.js.map +1 -0
- package/dist/utility/utilis/postgres/executeQuery.d.ts +215 -0
- package/dist/utility/utilis/postgres/executeQuery.js +46 -0
- package/dist/utility/utilis/postgres/executeQuery.js.map +1 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.d.ts +9 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.js +10 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.js.map +1 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.d.ts +11 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.js +12 -0
- package/dist/utility/utilis/postgres/subSqlfiles/executePgQuery.js.map +1 -0
- package/dist/utility/utilis/server/app.d.ts +5 -0
- package/dist/utility/utilis/server/app.js +15 -0
- package/dist/utility/utilis/server/app.js.map +1 -0
- package/dist/utility/utilis/server/server.d.ts +5 -0
- package/dist/utility/utilis/server/server.js +24 -0
- package/dist/utility/utilis/server/server.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENV
|
|
3
|
+
} from "./chunk-EWQYVPOL.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/engine/sql/mySql.ts
|
|
9
|
+
import mysql from "mysql2/promise";
|
|
10
|
+
import dotenv from "dotenv";
|
|
11
|
+
import fs from "fs/promises";
|
|
12
|
+
import path from "path";
|
|
13
|
+
import { pathToFileURL } from "url";
|
|
14
|
+
dotenv.config();
|
|
15
|
+
var pool = null;
|
|
16
|
+
async function getMySqlPool() {
|
|
17
|
+
if (!pool) {
|
|
18
|
+
let options;
|
|
19
|
+
try {
|
|
20
|
+
const mySqlConfigFile = path.join(process.cwd(), "src/config/mySql.config.ts");
|
|
21
|
+
const { MYSQL_POOL_OPTIONS } = await import(pathToFileURL(mySqlConfigFile).href);
|
|
22
|
+
options = MYSQL_POOL_OPTIONS || {};
|
|
23
|
+
options.uri = ENV.SQL_DB_URL;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
options = {};
|
|
26
|
+
}
|
|
27
|
+
pool = mysql.createPool(options);
|
|
28
|
+
pool.getConnection().then((conn) => {
|
|
29
|
+
console.log("\u2705 MySQL Database connected successfully");
|
|
30
|
+
conn.release();
|
|
31
|
+
}).catch((err) => {
|
|
32
|
+
console.error("\u274C Failed to connect to MySQL:", err.message);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
});
|
|
35
|
+
pool.on("connection", (connection) => {
|
|
36
|
+
console.log("\u{1F50C} New MySQL connection established");
|
|
37
|
+
});
|
|
38
|
+
pool.on("acquire", (connection) => {
|
|
39
|
+
console.log("\u{1F4E5} MySQL connection acquired");
|
|
40
|
+
});
|
|
41
|
+
pool.on("enqueue", () => {
|
|
42
|
+
console.log("\u23F3 MySQL connection queued");
|
|
43
|
+
});
|
|
44
|
+
pool.on("release", (connection) => {
|
|
45
|
+
console.log("\u{1F4E4} MySQL connection released");
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return pool;
|
|
49
|
+
}
|
|
50
|
+
__name(getMySqlPool, "getMySqlPool");
|
|
51
|
+
var runMySqlScript = /* @__PURE__ */ __name(async () => {
|
|
52
|
+
try {
|
|
53
|
+
const fileQuery = await fs.readFile("db.sql", "utf8");
|
|
54
|
+
const queries = fileQuery.split(";").map((q) => q.trim()).filter((q) => q.length > 0);
|
|
55
|
+
const mySqlPool = await getMySqlPool();
|
|
56
|
+
const connection = await mySqlPool.getConnection();
|
|
57
|
+
try {
|
|
58
|
+
for (const query of queries) {
|
|
59
|
+
await mySqlPool.query(query);
|
|
60
|
+
}
|
|
61
|
+
console.log("\u2705 Database schema created successfully");
|
|
62
|
+
} finally {
|
|
63
|
+
connection.release();
|
|
64
|
+
}
|
|
65
|
+
} catch (err) {
|
|
66
|
+
console.error("\u274C Failed to execute SQL script:", err);
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}, "runMySqlScript");
|
|
70
|
+
var closePool = /* @__PURE__ */ __name(async () => {
|
|
71
|
+
if (pool) {
|
|
72
|
+
console.log("Closing database pool...");
|
|
73
|
+
await pool.end();
|
|
74
|
+
console.log("Database pool closed");
|
|
75
|
+
}
|
|
76
|
+
}, "closePool");
|
|
77
|
+
process.on("SIGINT", async () => {
|
|
78
|
+
await closePool();
|
|
79
|
+
process.exit(0);
|
|
80
|
+
});
|
|
81
|
+
process.on("SIGTERM", async () => {
|
|
82
|
+
await closePool();
|
|
83
|
+
process.exit(0);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
export {
|
|
87
|
+
getMySqlPool,
|
|
88
|
+
runMySqlScript,
|
|
89
|
+
closePool
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=chunk-HZ4GLSOO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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\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 mySqlConfigFile = path.join(process.cwd(), \"src/config/mySql.config.ts\");\r\n const {MYSQL_POOL_OPTIONS} = await import(pathToFileURL(mySqlConfigFile).href);\r\n options = MYSQL_POOL_OPTIONS || {};\r\n 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', (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', (connection) => {\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', (connection) => {\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;AAI5B,OAAO,OAAO;AACd,IAAI,OAA0B;AAM9B,eAAsB,eAAoC;AACtD,MAAI,CAAC,MAAM;AAEP,QAAI;AAEJ,QAAI;AACA,YAAM,kBAAkB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAC7E,YAAM,EAAC,mBAAkB,IAAI,MAAM,OAAO,cAAc,eAAe,EAAE;AACzE,gBAAU,sBAAsB,CAAC;AACjC,cAAQ,MAAM,IAAI;AAAA,IACtB,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,CAAC,eAAe;AAClC,cAAQ,IAAI,4CAAqC;AAAA,IACrD,CAAC;AAGD,SAAK,GAAG,WAAW,CAAC,eAAe;AAC/B,cAAQ,IAAI,qCAA8B;AAAA,IAC9C,CAAC;AAGD,SAAK,GAAG,WAAW,MAAM;AACrB,cAAQ,IAAI,gCAA2B;AAAA,IAC3C,CAAC;AAGD,SAAK,GAAG,WAAW,CAAC,eAAe;AAC/B,cAAQ,IAAI,qCAA8B;AAAA,IAC9C,CAAC;AAAA,EACL;AAEA,SAAO;AACX;AAlDsB;AAuDf,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":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildPath,
|
|
3
|
+
getFileContentType,
|
|
4
|
+
getFileExtension,
|
|
5
|
+
toUint8Array
|
|
6
|
+
} from "./chunk-FMCW72HO.js";
|
|
7
|
+
import {
|
|
8
|
+
generateUniqueValue
|
|
9
|
+
} from "./chunk-X3R3RLXY.js";
|
|
10
|
+
import {
|
|
11
|
+
buildURL
|
|
12
|
+
} from "./chunk-SSFPGDA3.js";
|
|
13
|
+
import {
|
|
14
|
+
s3Client
|
|
15
|
+
} from "./chunk-GBXVVI2R.js";
|
|
16
|
+
import {
|
|
17
|
+
ENV
|
|
18
|
+
} from "./chunk-EWQYVPOL.js";
|
|
19
|
+
import {
|
|
20
|
+
__name
|
|
21
|
+
} from "./chunk-7QVYU63E.js";
|
|
22
|
+
|
|
23
|
+
// src/utility/utilis/cloud_storage/uploadFile.ts
|
|
24
|
+
import { PutObjectCommand } from "@aws-sdk/client-s3";
|
|
25
|
+
var upload_file = /* @__PURE__ */ __name(async ({ file, path }) => {
|
|
26
|
+
const isMulterFile = file && typeof file === "object" && "buffer" in file && "originalname" in file;
|
|
27
|
+
const multerFile = isMulterFile ? file : void 0;
|
|
28
|
+
const rawBuffer = Buffer.isBuffer(file) ? file : void 0;
|
|
29
|
+
const rawFile = typeof File !== "undefined" && file instanceof File ? file : void 0;
|
|
30
|
+
const filePath = typeof file === "string" ? file : void 0;
|
|
31
|
+
try {
|
|
32
|
+
const baseFileName = generateUniqueValue(16);
|
|
33
|
+
const fileExtension = getFileExtension(file);
|
|
34
|
+
const fileName = fileExtension ? `${baseFileName}.${fileExtension}` : baseFileName;
|
|
35
|
+
const body = { fileName };
|
|
36
|
+
if (path && path.length) {
|
|
37
|
+
body.path = path;
|
|
38
|
+
}
|
|
39
|
+
const finalFileName = buildPath(body);
|
|
40
|
+
const fileBuffer = await toUint8Array(file);
|
|
41
|
+
const contentType = await getFileContentType(file);
|
|
42
|
+
await s3Client.send(new PutObjectCommand({
|
|
43
|
+
Bucket: ENV.BUCKET_NAME,
|
|
44
|
+
Key: finalFileName,
|
|
45
|
+
Body: fileBuffer,
|
|
46
|
+
ContentType: contentType
|
|
47
|
+
}));
|
|
48
|
+
const generatedUrl = buildURL({
|
|
49
|
+
path: [ENV.BUCKET_END_POINT, ENV.BUCKET_NAME, finalFileName]
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
path: filePath || finalFileName,
|
|
53
|
+
url: generatedUrl,
|
|
54
|
+
...rawFile && { file: rawFile },
|
|
55
|
+
...rawBuffer && { buffer: rawBuffer },
|
|
56
|
+
...multerFile && { multerFile }
|
|
57
|
+
};
|
|
58
|
+
} catch (error) {
|
|
59
|
+
return {
|
|
60
|
+
error,
|
|
61
|
+
...filePath && { path: filePath },
|
|
62
|
+
...rawFile && { file: rawFile },
|
|
63
|
+
...rawBuffer && { buffer: rawBuffer },
|
|
64
|
+
...multerFile && { multerFile }
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}, "upload_file");
|
|
68
|
+
|
|
69
|
+
export {
|
|
70
|
+
upload_file
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=chunk-I6VD2JKM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utility/utilis/cloud_storage/uploadFile.ts"],"sourcesContent":["import {ENV} from \"../../libs/env.js\";\r\nimport type {PathOptions, UploadFileInput} from \"../../libs/interface.js\";\r\nimport {PutObjectCommand} from \"@aws-sdk/client-s3\";\r\nimport {buildPath, getFileContentType, getFileExtension, toUint8Array} from \"../general/file-operations.js\";\r\nimport {buildURL} from \"../general/web.js\";\r\nimport {generateUniqueValue} from \"../general/uuids.js\";\r\nimport {s3Client} from \"../../../engine/cloudBucket/r2Storage.js\";\r\nimport type {FileUploadedResponseData} from \"../../libs/types.js\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Uploads a single file to the configured S3-compatible storage bucket.\r\n *\r\n * The function accepts a Multer file, Web API `File`, raw `Buffer`, or file\r\n * path/URL. A unique file name is generated while preserving the original\r\n * file extension. The file is then converted to a byte array, its content\r\n * type is detected, and it is uploaded to the configured bucket.\r\n *\r\n * On successful upload, the function returns the generated storage path and\r\n * public URL along with the original file data when applicable. If the upload\r\n * fails, it returns the encountered error and the original file data when\r\n * available.\r\n *\r\n * @param params - The file and optional storage path used for the upload.\r\n * @param params.file - The file, buffer, or file path/URL to upload.\r\n * @param params.path - Optional array of path segments under which the file\r\n * should be stored.\r\n * @returns A promise resolving to a `FileUploadedResponseData` containing\r\n * either the uploaded file information or the encountered error.\r\n *\r\n * @example\r\n * const result = await upload_file({\r\n * file: req.file,\r\n * path: ['temporary_files'],\r\n * });\r\n *\r\n * if ('error' in result) {\r\n * console.error('Upload failed:', result.error);\r\n * } else {\r\n * console.log('File uploaded:', result.url);\r\n * }\r\n *\r\n * @example\r\n * const result = await upload_file({\r\n * file: buffer,\r\n * path: ['documents', 'reports'],\r\n * });\r\n *\r\n * if (!result.error) {\r\n * console.log('Uploaded to:', result.path);\r\n * }\r\n */\r\nexport const upload_file = async ({ file, path }: UploadFileInput): Promise<FileUploadedResponseData> => {\r\n // 1. Inspect input type\r\n const isMulterFile = file && typeof file === 'object' && 'buffer' in file && 'originalname' in file;\r\n const multerFile = isMulterFile ? (file as Express.Multer.File) : undefined;\r\n const rawBuffer = Buffer.isBuffer(file) ? file : undefined;\r\n const rawFile = (typeof File !== 'undefined' && file instanceof File) ? file : undefined;\r\n const filePath = typeof file === 'string' ? file : undefined;\r\n\r\n try {\r\n const baseFileName = generateUniqueValue(16);\r\n const fileExtension = getFileExtension(file);\r\n\r\n const fileName: string = fileExtension ? `${baseFileName}.${fileExtension}` : baseFileName;\r\n\r\n const body: PathOptions = { fileName };\r\n if (path && path.length) {\r\n body.path = path;\r\n }\r\n\r\n const finalFileName = buildPath(body);\r\n const fileBuffer = await toUint8Array(file);\r\n const contentType = await getFileContentType(file);\r\n\r\n await s3Client.send(new PutObjectCommand({\r\n Bucket: ENV.BUCKET_NAME,\r\n Key: finalFileName,\r\n Body: fileBuffer,\r\n ContentType: contentType\r\n }));\r\n\r\n const generatedUrl = buildURL({\r\n path: [ENV.BUCKET_END_POINT as string, ENV.BUCKET_NAME as string, finalFileName]\r\n });\r\n\r\n // 2. Build success object omitting undefined keys\r\n return {\r\n path: filePath || finalFileName,\r\n url: generatedUrl,\r\n ...(rawFile && {file: rawFile}),\r\n ...(rawBuffer && {buffer: rawBuffer}),\r\n ...(multerFile && {multerFile: multerFile}),\r\n };\r\n\r\n } catch (error: any | unknown | Error) {\r\n // 3. Build error object omitting undefined keys\r\n return {\r\n error: error,\r\n ...(filePath && {path: filePath}),\r\n ...(rawFile && {file: rawFile}),\r\n ...(rawBuffer && {buffer: rawBuffer}),\r\n ...(multerFile && {multerFile: multerFile}),\r\n };\r\n }\r\n};\r\n\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAQ,wBAAuB;AAsDxB,IAAM,cAAc,8BAAO,EAAE,MAAM,KAAK,MAA0D;AAErG,QAAM,eAAe,QAAQ,OAAO,SAAS,YAAY,YAAY,QAAQ,kBAAkB;AAC/F,QAAM,aAAa,eAAgB,OAA+B;AAClE,QAAM,YAAY,OAAO,SAAS,IAAI,IAAI,OAAO;AACjD,QAAM,UAAW,OAAO,SAAS,eAAe,gBAAgB,OAAQ,OAAO;AAC/E,QAAM,WAAW,OAAO,SAAS,WAAW,OAAO;AAEnD,MAAI;AACA,UAAM,eAAe,oBAAoB,EAAE;AAC3C,UAAM,gBAAgB,iBAAiB,IAAI;AAE3C,UAAM,WAAmB,gBAAgB,GAAG,YAAY,IAAI,aAAa,KAAK;AAE9E,UAAM,OAAoB,EAAE,SAAS;AACrC,QAAI,QAAQ,KAAK,QAAQ;AACrB,WAAK,OAAO;AAAA,IAChB;AAEA,UAAM,gBAAgB,UAAU,IAAI;AACpC,UAAM,aAAa,MAAM,aAAa,IAAI;AAC1C,UAAM,cAAc,MAAM,mBAAmB,IAAI;AAEjD,UAAM,SAAS,KAAK,IAAI,iBAAiB;AAAA,MACrC,QAAQ,IAAI;AAAA,MACZ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACjB,CAAC,CAAC;AAEF,UAAM,eAAe,SAAS;AAAA,MAC1B,MAAM,CAAC,IAAI,kBAA4B,IAAI,aAAuB,aAAa;AAAA,IACnF,CAAC;AAGD,WAAO;AAAA,MACH,MAAM,YAAY;AAAA,MAClB,KAAK;AAAA,MACL,GAAI,WAAW,EAAC,MAAM,QAAO;AAAA,MAC7B,GAAI,aAAa,EAAC,QAAQ,UAAS;AAAA,MACnC,GAAI,cAAc,EAAC,WAAsB;AAAA,IAC7C;AAAA,EAEJ,SAAS,OAA8B;AAEnC,WAAO;AAAA,MACH;AAAA,MACA,GAAI,YAAY,EAAC,MAAM,SAAQ;AAAA,MAC/B,GAAI,WAAW,EAAC,MAAM,QAAO;AAAA,MAC7B,GAAI,aAAa,EAAC,QAAQ,UAAS;AAAA,MACnC,GAAI,cAAc,EAAC,WAAsB;AAAA,IAC7C;AAAA,EACJ;AACJ,GArD2B;","names":[]}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-7QVYU63E.js";
|
|
4
|
+
|
|
5
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/is-array-buffer/is-array-buffer.js
|
|
6
|
+
var isArrayBuffer = /* @__PURE__ */ __name((arg) => typeof ArrayBuffer === "function" && arg instanceof ArrayBuffer || Object.prototype.toString.call(arg) === "[object ArrayBuffer]", "isArrayBuffer");
|
|
7
|
+
|
|
8
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-buffer-from/buffer-from.js
|
|
9
|
+
var fromArrayBuffer = /* @__PURE__ */ __name((input, offset = 0, length = input.byteLength - offset) => {
|
|
10
|
+
if (!isArrayBuffer(input)) {
|
|
11
|
+
throw new TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof input} (${input})`);
|
|
12
|
+
}
|
|
13
|
+
return Buffer.from(input, offset, length);
|
|
14
|
+
}, "fromArrayBuffer");
|
|
15
|
+
var fromString = /* @__PURE__ */ __name((input, encoding) => {
|
|
16
|
+
if (typeof input !== "string") {
|
|
17
|
+
throw new TypeError(`The "input" argument must be of type string. Received type ${typeof input} (${input})`);
|
|
18
|
+
}
|
|
19
|
+
return encoding ? Buffer.from(input, encoding) : Buffer.from(input);
|
|
20
|
+
}, "fromString");
|
|
21
|
+
|
|
22
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-utf8/fromUtf8.js
|
|
23
|
+
var fromUtf8 = /* @__PURE__ */ __name((input) => {
|
|
24
|
+
const buf = fromString(input, "utf8");
|
|
25
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength / Uint8Array.BYTES_PER_ELEMENT);
|
|
26
|
+
}, "fromUtf8");
|
|
27
|
+
|
|
28
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-utf8/toUtf8.js
|
|
29
|
+
var toUtf8 = /* @__PURE__ */ __name((input) => {
|
|
30
|
+
if (typeof input === "string") {
|
|
31
|
+
return input;
|
|
32
|
+
}
|
|
33
|
+
if (typeof input !== "object" || typeof input.byteOffset !== "number" || typeof input.byteLength !== "number") {
|
|
34
|
+
throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");
|
|
35
|
+
}
|
|
36
|
+
return fromArrayBuffer(input.buffer, input.byteOffset, input.byteLength).toString("utf8");
|
|
37
|
+
}, "toUtf8");
|
|
38
|
+
|
|
39
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-hex-encoding/hex-encoding.js
|
|
40
|
+
var SHORT_TO_HEX = {};
|
|
41
|
+
var HEX_TO_SHORT = {};
|
|
42
|
+
for (let i = 0; i < 256; i++) {
|
|
43
|
+
let encodedByte = i.toString(16).toLowerCase();
|
|
44
|
+
if (encodedByte.length === 1) {
|
|
45
|
+
encodedByte = `0${encodedByte}`;
|
|
46
|
+
}
|
|
47
|
+
SHORT_TO_HEX[i] = encodedByte;
|
|
48
|
+
HEX_TO_SHORT[encodedByte] = i;
|
|
49
|
+
}
|
|
50
|
+
function fromHex(encoded) {
|
|
51
|
+
if (encoded.length % 2 !== 0) {
|
|
52
|
+
throw new Error("Hex encoded strings must have an even number length");
|
|
53
|
+
}
|
|
54
|
+
const out = new Uint8Array(encoded.length / 2);
|
|
55
|
+
for (let i = 0; i < encoded.length; i += 2) {
|
|
56
|
+
const encodedByte = encoded.slice(i, i + 2).toLowerCase();
|
|
57
|
+
if (encodedByte in HEX_TO_SHORT) {
|
|
58
|
+
out[i / 2] = HEX_TO_SHORT[encodedByte];
|
|
59
|
+
} else {
|
|
60
|
+
throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
__name(fromHex, "fromHex");
|
|
66
|
+
function toHex(bytes) {
|
|
67
|
+
let out = "";
|
|
68
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
69
|
+
out += SHORT_TO_HEX[bytes[i]];
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
__name(toHex, "toHex");
|
|
74
|
+
|
|
75
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/index.js
|
|
76
|
+
import { getRandomValues } from "crypto";
|
|
77
|
+
|
|
78
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-base64/fromBase64.js
|
|
79
|
+
var BASE64_REGEX = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
80
|
+
var fromBase64 = /* @__PURE__ */ __name((input) => {
|
|
81
|
+
if (input.length * 3 % 4 !== 0) {
|
|
82
|
+
throw new TypeError(`Incorrect padding on base64 string.`);
|
|
83
|
+
}
|
|
84
|
+
if (!BASE64_REGEX.exec(input)) {
|
|
85
|
+
throw new TypeError(`Invalid base64 string.`);
|
|
86
|
+
}
|
|
87
|
+
const buffer = fromString(input, "base64");
|
|
88
|
+
return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
89
|
+
}, "fromBase64");
|
|
90
|
+
|
|
91
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-base64/toBase64.js
|
|
92
|
+
var toBase64 = /* @__PURE__ */ __name((_input) => {
|
|
93
|
+
let input;
|
|
94
|
+
if (typeof _input === "string") {
|
|
95
|
+
input = fromUtf8(_input);
|
|
96
|
+
} else {
|
|
97
|
+
input = _input;
|
|
98
|
+
}
|
|
99
|
+
if (typeof input !== "object" || typeof input.byteOffset !== "number" || typeof input.byteLength !== "number") {
|
|
100
|
+
throw new Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");
|
|
101
|
+
}
|
|
102
|
+
return fromArrayBuffer(input.buffer, input.byteOffset, input.byteLength).toString("base64");
|
|
103
|
+
}, "toBase64");
|
|
104
|
+
|
|
105
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/util-stream/blob/Uint8ArrayBlobAdapter.js
|
|
106
|
+
function bindUint8ArrayBlobAdapter(toUtf82, fromUtf82, toBase642, fromBase642) {
|
|
107
|
+
return class Uint8ArrayBlobAdapter2 extends Uint8Array {
|
|
108
|
+
static {
|
|
109
|
+
__name(this, "Uint8ArrayBlobAdapter");
|
|
110
|
+
}
|
|
111
|
+
static fromString(source, encoding = "utf-8") {
|
|
112
|
+
if (typeof source === "string") {
|
|
113
|
+
if (encoding === "base64") {
|
|
114
|
+
return Uint8ArrayBlobAdapter2.mutate(fromBase642(source));
|
|
115
|
+
}
|
|
116
|
+
return Uint8ArrayBlobAdapter2.mutate(fromUtf82(source));
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);
|
|
119
|
+
}
|
|
120
|
+
static mutate(source) {
|
|
121
|
+
Object.setPrototypeOf(source, Uint8ArrayBlobAdapter2.prototype);
|
|
122
|
+
return source;
|
|
123
|
+
}
|
|
124
|
+
transformToString(encoding = "utf-8") {
|
|
125
|
+
if (encoding === "base64") {
|
|
126
|
+
return toBase642(this);
|
|
127
|
+
}
|
|
128
|
+
return toUtf82(this);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
__name(bindUint8ArrayBlobAdapter, "bindUint8ArrayBlobAdapter");
|
|
133
|
+
|
|
134
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/uuid/v4.js
|
|
135
|
+
var decimalToHex = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
136
|
+
function bindV4(getRandomValues2) {
|
|
137
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
138
|
+
return () => crypto.randomUUID();
|
|
139
|
+
}
|
|
140
|
+
return () => {
|
|
141
|
+
const rnds = new Uint8Array(16);
|
|
142
|
+
getRandomValues2(rnds);
|
|
143
|
+
rnds[6] = rnds[6] & 15 | 64;
|
|
144
|
+
rnds[8] = rnds[8] & 63 | 128;
|
|
145
|
+
return decimalToHex[rnds[0]] + decimalToHex[rnds[1]] + decimalToHex[rnds[2]] + decimalToHex[rnds[3]] + "-" + decimalToHex[rnds[4]] + decimalToHex[rnds[5]] + "-" + decimalToHex[rnds[6]] + decimalToHex[rnds[7]] + "-" + decimalToHex[rnds[8]] + decimalToHex[rnds[9]] + "-" + decimalToHex[rnds[10]] + decimalToHex[rnds[11]] + decimalToHex[rnds[12]] + decimalToHex[rnds[13]] + decimalToHex[rnds[14]] + decimalToHex[rnds[15]];
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
__name(bindV4, "bindV4");
|
|
149
|
+
|
|
150
|
+
// node_modules/@smithy/core/dist-es/submodules/serde/index.js
|
|
151
|
+
var Uint8ArrayBlobAdapter = class extends bindUint8ArrayBlobAdapter(toUtf8, fromUtf8, toBase64, fromBase64) {
|
|
152
|
+
static {
|
|
153
|
+
__name(this, "Uint8ArrayBlobAdapter");
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var _getRandomValues = getRandomValues;
|
|
157
|
+
var v4 = bindV4(_getRandomValues);
|
|
158
|
+
|
|
159
|
+
export {
|
|
160
|
+
fromUtf8,
|
|
161
|
+
toUtf8,
|
|
162
|
+
fromHex,
|
|
163
|
+
toHex
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=chunk-IN3YY526.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/@smithy/core/dist-es/submodules/serde/is-array-buffer/is-array-buffer.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-buffer-from/buffer-from.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-utf8/fromUtf8.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-utf8/toUtf8.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-hex-encoding/hex-encoding.js","../node_modules/@smithy/core/dist-es/submodules/serde/index.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-base64/fromBase64.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-base64/toBase64.js","../node_modules/@smithy/core/dist-es/submodules/serde/util-stream/blob/Uint8ArrayBlobAdapter.js","../node_modules/@smithy/core/dist-es/submodules/serde/uuid/v4.js"],"sourcesContent":["export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"../is-array-buffer/is-array-buffer\";\nexport const fromArrayBuffer = (input, offset = 0, length = input.byteLength - offset) => {\n if (!isArrayBuffer(input)) {\n throw new TypeError(`The \"input\" argument must be ArrayBuffer. Received type ${typeof input} (${input})`);\n }\n return Buffer.from(input, offset, length);\n};\nexport const fromString = (input, encoding) => {\n if (typeof input !== \"string\") {\n throw new TypeError(`The \"input\" argument must be of type string. Received type ${typeof input} (${input})`);\n }\n return encoding ? Buffer.from(input, encoding) : Buffer.from(input);\n};\n","import { fromString } from \"../util-buffer-from/buffer-from\";\nexport const fromUtf8 = (input) => {\n const buf = fromString(input, \"utf8\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n};\n","import { fromArrayBuffer } from \"../util-buffer-from/buffer-from\";\nexport const toUtf8 = (input) => {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n }\n return fromArrayBuffer(input.buffer, input.byteOffset, input.byteLength).toString(\"utf8\");\n};\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { getRandomValues } from \"node:crypto\";\nimport { fromBase64 } from \"./util-base64/fromBase64\";\nimport { toBase64 } from \"./util-base64/toBase64\";\nimport { bindUint8ArrayBlobAdapter } from \"./util-stream/blob/Uint8ArrayBlobAdapter\";\nimport { fromUtf8 } from \"./util-utf8/fromUtf8\";\nimport { toUtf8 } from \"./util-utf8/toUtf8\";\nimport { bindV4 } from \"./uuid/v4\";\nexport { copyDocumentWithTransform } from \"./copyDocumentWithTransform\";\nexport { dateToUtcString, parseRfc3339DateTime, parseRfc3339DateTimeWithOffset, parseRfc7231DateTime, parseEpochTimestamp, } from \"./date-utils\";\nexport { LazyJsonString } from \"./lazy-json\";\nexport { logger, parseBoolean, expectBoolean, expectNumber, expectFloat32, expectInt, expectInt32, expectShort, expectByte, expectNonNull, expectObject, expectString, expectUnion, expectLong, strictParseDouble, strictParseFloat, strictParseFloat32, strictParseLong, strictParseInt, strictParseInt32, strictParseShort, strictParseByte, limitedParseDouble, handleFloat, limitedParseFloat, limitedParseFloat32, } from \"./parse-utils\";\nexport { quoteHeader } from \"./quote-header\";\nexport { _parseEpochTimestamp, _parseRfc3339DateTimeWithOffset, _parseRfc7231DateTime, } from \"./schema-serde-lib/schema-date-utils\";\nexport { splitEvery } from \"./split-every\";\nexport { splitHeader } from \"./split-header\";\nexport { NumericValue, nv } from \"./value/NumericValue\";\nexport { fromHex, toHex } from \"./util-hex-encoding/hex-encoding\";\nexport { toBase64, fromBase64 };\nexport { calculateBodyLength } from \"./util-body-length/calculateBodyLength\";\nexport { toUint8Array } from \"./util-utf8/toUint8Array\";\nexport { toUtf8, fromUtf8 };\nexport { concatBytes } from \"./concatBytes\";\nexport { fromArrayBuffer, fromString } from \"./util-buffer-from/buffer-from\";\nexport { isArrayBuffer } from \"./is-array-buffer/is-array-buffer\";\nexport { deserializerMiddleware } from \"./middleware-serde/deserializerMiddleware\";\nexport { deserializerMiddlewareOption, serializerMiddlewareOption, getSerdePlugin, } from \"./middleware-serde/serdePlugin\";\nexport { serializerMiddleware } from \"./middleware-serde/serializerMiddleware\";\nexport { Hash } from \"./hash-node/hash-node\";\nexport class Uint8ArrayBlobAdapter extends bindUint8ArrayBlobAdapter(toUtf8, fromUtf8, toBase64, fromBase64) {\n}\nexport { ChecksumStream } from \"./util-stream/checksum/ChecksumStream\";\nexport { createChecksumStream } from \"./util-stream/checksum/createChecksumStream\";\nexport { createBufferedReadable } from \"./util-stream/createBufferedReadable\";\nexport { getAwsChunkedEncodingStream } from \"./util-stream/getAwsChunkedEncodingStream\";\nexport { headStream } from \"./util-stream/headStream\";\nexport { sdkStreamMixin } from \"./util-stream/sdk-stream-mixin\";\nexport { splitStream } from \"./util-stream/splitStream\";\nexport { isReadableStream, isBlob } from \"./util-stream/stream-type-check\";\nexport { streamCollector } from \"./util-stream/stream-collector\";\nconst _getRandomValues = getRandomValues;\nexport const v4 = bindV4(_getRandomValues);\nexport const generateIdempotencyToken = v4;\n","import { fromString } from \"../util-buffer-from/buffer-from\";\nconst BASE64_REGEX = /^[A-Za-z0-9+/]*={0,2}$/;\nexport const fromBase64 = (input) => {\n if ((input.length * 3) % 4 !== 0) {\n throw new TypeError(`Incorrect padding on base64 string.`);\n }\n if (!BASE64_REGEX.exec(input)) {\n throw new TypeError(`Invalid base64 string.`);\n }\n const buffer = fromString(input, \"base64\");\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n};\n","import { fromArrayBuffer } from \"../util-buffer-from/buffer-from\";\nimport { fromUtf8 } from \"../util-utf8/fromUtf8\";\nexport const toBase64 = (_input) => {\n let input;\n if (typeof _input === \"string\") {\n input = fromUtf8(_input);\n }\n else {\n input = _input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.\");\n }\n return fromArrayBuffer(input.buffer, input.byteOffset, input.byteLength).toString(\"base64\");\n};\n","export function bindUint8ArrayBlobAdapter(toUtf8, fromUtf8, toBase64, fromBase64) {\n return class Uint8ArrayBlobAdapter extends Uint8Array {\n static fromString(source, encoding = \"utf-8\") {\n if (typeof source === \"string\") {\n if (encoding === \"base64\") {\n return Uint8ArrayBlobAdapter.mutate(fromBase64(source));\n }\n return Uint8ArrayBlobAdapter.mutate(fromUtf8(source));\n }\n throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);\n }\n static mutate(source) {\n Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);\n return source;\n }\n transformToString(encoding = \"utf-8\") {\n if (encoding === \"base64\") {\n return toBase64(this);\n }\n return toUtf8(this);\n }\n };\n}\n","const decimalToHex = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nexport function bindV4(getRandomValues) {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return () => crypto.randomUUID();\n }\n return () => {\n const rnds = new Uint8Array(16);\n getRandomValues(rnds);\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n return (decimalToHex[rnds[0]] +\n decimalToHex[rnds[1]] +\n decimalToHex[rnds[2]] +\n decimalToHex[rnds[3]] +\n \"-\" +\n decimalToHex[rnds[4]] +\n decimalToHex[rnds[5]] +\n \"-\" +\n decimalToHex[rnds[6]] +\n decimalToHex[rnds[7]] +\n \"-\" +\n decimalToHex[rnds[8]] +\n decimalToHex[rnds[9]] +\n \"-\" +\n decimalToHex[rnds[10]] +\n decimalToHex[rnds[11]] +\n decimalToHex[rnds[12]] +\n decimalToHex[rnds[13]] +\n decimalToHex[rnds[14]] +\n decimalToHex[rnds[15]]);\n };\n}\n"],"mappings":"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","names":["toUtf8","fromUtf8","toBase64","fromBase64","Uint8ArrayBlobAdapter","getRandomValues"]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getPgSqlPool
|
|
3
|
+
} from "./chunk-NMNAPTVV.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/utility/utilis/postgres/subSqlfiles/executePgQuery.ts
|
|
9
|
+
var executePgSqlQuery = /* @__PURE__ */ __name(async (query) => {
|
|
10
|
+
let client = null;
|
|
11
|
+
let results = [];
|
|
12
|
+
try {
|
|
13
|
+
const needsTransaction = query.crud && query.crud?.length > 1 || query.crud && query.custom || query.crud && query.crud?.length === 0;
|
|
14
|
+
if (needsTransaction) {
|
|
15
|
+
client = await (await getPgSqlPool()).connect();
|
|
16
|
+
await client.query("BEGIN");
|
|
17
|
+
}
|
|
18
|
+
if (query.crud && query.crud.length > 0) {
|
|
19
|
+
const crudResults = await executeCrud(query.crud, client);
|
|
20
|
+
results = results.concat(crudResults);
|
|
21
|
+
}
|
|
22
|
+
if (query.custom && !Array.isArray(query.custom)) {
|
|
23
|
+
const customResult = await executeCustom(query.custom, client);
|
|
24
|
+
results.push(customResult);
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(query.custom) && query.custom.length) {
|
|
27
|
+
const customResult = await executeCustom(query.custom, client);
|
|
28
|
+
results.push(customResult);
|
|
29
|
+
}
|
|
30
|
+
if (client) {
|
|
31
|
+
await client.query("COMMIT");
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (client) {
|
|
36
|
+
await client.query("ROLLBACK");
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
} finally {
|
|
40
|
+
if (client) {
|
|
41
|
+
client.release();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}, "executePgSqlQuery");
|
|
45
|
+
var executeCrud = /* @__PURE__ */ __name(async (queries, poolClient) => {
|
|
46
|
+
const results = [];
|
|
47
|
+
const pool = poolClient || await getPgSqlPool();
|
|
48
|
+
try {
|
|
49
|
+
for (const query of queries) {
|
|
50
|
+
let sql = "";
|
|
51
|
+
let params = [];
|
|
52
|
+
if ("insert_one" in query) {
|
|
53
|
+
const { item, table } = query.insert_one;
|
|
54
|
+
const columns = Object.keys(item);
|
|
55
|
+
const values = Object.values(item);
|
|
56
|
+
const placeholders = values.map((_, i) => `$${i + 1}`).join(", ");
|
|
57
|
+
sql = `INSERT INTO ${table} (${columns.join(", ")}) VALUES (${placeholders}) RETURNING *`;
|
|
58
|
+
params = values;
|
|
59
|
+
}
|
|
60
|
+
if ("insert_many" in query) {
|
|
61
|
+
const { item, table } = query.insert_many;
|
|
62
|
+
if (item.length > 0) {
|
|
63
|
+
const columns = Object.keys(item[0] || {});
|
|
64
|
+
const placeholders = item.map((row, rowIndex) => {
|
|
65
|
+
const rowPlaceholders = columns.map(
|
|
66
|
+
(_, colIndex) => `$${rowIndex * columns.length + colIndex + 1}`
|
|
67
|
+
);
|
|
68
|
+
return `(${rowPlaceholders.join(", ")})`;
|
|
69
|
+
}).join(", ");
|
|
70
|
+
sql = `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${placeholders} RETURNING *`;
|
|
71
|
+
params = item.flatMap((row) => Object.values(row));
|
|
72
|
+
}
|
|
73
|
+
} else if ("update" in query) {
|
|
74
|
+
const { item, table, condition, conditionalParams = [] } = query.update;
|
|
75
|
+
const columns = Object.keys(item);
|
|
76
|
+
const values = Object.values(item);
|
|
77
|
+
const setClause = columns.map((col, i) => `${col} = $${i + 1}`).join(", ");
|
|
78
|
+
const paramOffset = values.length;
|
|
79
|
+
const conditionWithParams = condition.replace(/\$\d+/g, (match) => {
|
|
80
|
+
const num = parseInt(match.substring(1));
|
|
81
|
+
return `$${num + paramOffset}`;
|
|
82
|
+
});
|
|
83
|
+
sql = `UPDATE ${table} SET ${setClause} WHERE ${conditionWithParams} RETURNING *`;
|
|
84
|
+
params = [...values, ...conditionalParams];
|
|
85
|
+
} else if ("select" in query) {
|
|
86
|
+
const { columns = ["*"], table, condition, conditionalParams = [] } = query.select;
|
|
87
|
+
const selectColumns = columns.join(", ");
|
|
88
|
+
sql = `SELECT ${selectColumns} FROM ${table}`;
|
|
89
|
+
if (condition) {
|
|
90
|
+
sql += ` WHERE ${condition}`;
|
|
91
|
+
params = conditionalParams;
|
|
92
|
+
}
|
|
93
|
+
} else if ("delete" in query) {
|
|
94
|
+
const { table, condition, conditionalParams = [] } = query.delete;
|
|
95
|
+
sql = `DELETE FROM ${table} WHERE ${condition} RETURNING *`;
|
|
96
|
+
params = conditionalParams;
|
|
97
|
+
}
|
|
98
|
+
const result = await pool.query(sql, params);
|
|
99
|
+
results.push(result.rows);
|
|
100
|
+
}
|
|
101
|
+
return results;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}, "executeCrud");
|
|
106
|
+
var executeCustom = /* @__PURE__ */ __name(async (customQuery, poolClient) => {
|
|
107
|
+
const pool = poolClient || await getPgSqlPool();
|
|
108
|
+
try {
|
|
109
|
+
if (Array.isArray(customQuery)) {
|
|
110
|
+
const results = [];
|
|
111
|
+
for (const item of customQuery) {
|
|
112
|
+
const { query: sql2, params: params2 = [] } = item;
|
|
113
|
+
if (sql2) {
|
|
114
|
+
const result2 = await pool.query(sql2, params2);
|
|
115
|
+
results.push(result2.rows);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return results;
|
|
119
|
+
}
|
|
120
|
+
const { query: sql, params = [] } = customQuery;
|
|
121
|
+
if (!sql) {
|
|
122
|
+
throw new Error("Custom query missing required 'query' string property.");
|
|
123
|
+
}
|
|
124
|
+
const result = await pool.query(sql, params);
|
|
125
|
+
return result.rows;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}, "executeCustom");
|
|
130
|
+
|
|
131
|
+
export {
|
|
132
|
+
executePgSqlQuery,
|
|
133
|
+
executeCustom
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=chunk-MEQAHLW6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utility/utilis/postgres/subSqlfiles/executePgQuery.ts"],"sourcesContent":["import type {PoolClient} from \"pg\";\r\nimport type {QueryItems} from \"../../../libs/interface.js\";\r\nimport type {SqlQuery, SqlRawQuery} from \"../../../libs/types.js\";\r\nimport {getPgSqlPool} from \"../../../../engine/sql/pgSql.js\";\r\n\r\n\r\n\r\n\r\n\r\nexport const executePgSqlQuery = async (query: QueryItems) => {\r\n let client: PoolClient | 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 getPgSqlPool()).connect();\r\n await client.query('BEGIN');\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.query('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.query('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\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?: PoolClient | null): Promise<any[]> => {\r\n const results: any[] = [];\r\n const pool = poolClient || await getPgSqlPool();\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\r\n const columns = Object.keys(item);\r\n const values = Object.values(item);\r\n\r\n const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');\r\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${placeholders}) RETURNING *`;\r\n params = values;\r\n }\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 // 1. Extract column names from the first object\r\n const columns = Object.keys(item[0] || {});\r\n\r\n // 2. Generate multi-row parameter placeholders: ($1, $2), ($3, $4)\r\n const placeholders = item.map((row, rowIndex) => {\r\n const rowPlaceholders = columns.map((_, colIndex) =>\r\n `$${rowIndex * columns.length + colIndex + 1}`\r\n );\r\n return `(${rowPlaceholders.join(', ')})`;\r\n }).join(', ');\r\n\r\n // 3. Construct parameterized SQL statement\r\n sql = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${placeholders} RETURNING *`;\r\n\r\n // 4. Flatten all row values into a single array using Object.values()\r\n params = item.flatMap(row => Object.values(row));\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 columns = item.map(({ colName }) => colName);\r\n // const values = item.map(({ colValue }) => colValue);\r\n\r\n const setClause = columns.map((col, i) => `${col} = $${i + 1}`).join(', ');\r\n const paramOffset = values.length;\r\n const conditionWithParams = condition.replace(/\\$\\d+/g, (match) => {\r\n const num = parseInt(match.substring(1));\r\n return `$${num + paramOffset}`;\r\n });\r\n sql = `UPDATE ${table} SET ${setClause} WHERE ${conditionWithParams} RETURNING *`;\r\n params = [...values, ...conditionalParams];\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 }\r\n\r\n\r\n else if ('delete' in query) {\r\n const {table, condition, conditionalParams = []} = query.delete;\r\n sql = `DELETE FROM ${table} WHERE ${condition} RETURNING *`;\r\n params = conditionalParams;\r\n }\r\n\r\n const result = await pool.query(sql, params);\r\n results.push(result.rows);\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\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport const executeCustom = async (\r\n customQuery: SqlRawQuery | SqlRawQuery[],\r\n poolClient?: PoolClient | null\r\n): Promise<any[]> => {\r\n const pool = poolClient || await getPgSqlPool();\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 result = await pool.query(sql, params);\r\n results.push(result.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 const result = await pool.query(sql, params);\r\n return result.rows;\r\n\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n"],"mappings":";;;;;;;;AASO,IAAM,oBAAoB,8BAAO,UAAsB;AAC1D,MAAI,SAA4B;AAChC,MAAI,UAAiB,CAAC;AAEtB,MAAI;AAEA,UAAM,mBAAoB,MAAM,QAAQ,MAAM,MAAM,SAAS,KACxD,MAAM,QAAQ,MAAM,UACpB,MAAM,QAAQ,MAAM,MAAM,WAAW;AAE1C,QAAI,kBAAkB;AAClB,eAAS,OAAO,MAAM,aAAa,GAAG,QAAQ;AAC9C,YAAM,OAAO,MAAM,OAAO;AAAA,IAC9B;AAGA,QAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,GAAG;AACrC,YAAM,cAAc,MAAM,YAAY,MAAM,MAAM,MAAM;AACxD,gBAAU,QAAQ,OAAO,WAAW;AAAA,IACxC;AAGA,QAAI,MAAM,UAAU,CAAC,MAAM,QAAQ,MAAM,MAAM,GAAG;AAC9C,YAAM,eAAe,MAAM,cAAc,MAAM,QAAQ,MAAM;AAC7D,cAAQ,KAAK,YAAY;AAAA,IAC7B;AAEA,QAAI,MAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,OAAO,QAAQ;AACpD,YAAM,eAAe,MAAM,cAAc,MAAM,QAAQ,MAAM;AAC7D,cAAQ,KAAK,YAAY;AAAA,IAC7B;AAGA,QAAI,QAAQ;AACR,YAAM,OAAO,MAAM,QAAQ;AAAA,IAC/B;AAEA,WAAO;AAAA,EAEX,SAAS,OAAO;AAEZ,QAAI,QAAQ;AACR,YAAM,OAAO,MAAM,UAAU;AAAA,IACjC;AACA,UAAM;AAAA,EACV,UACA;AAEI,QAAI,QAAQ;AACR,aAAO,QAAQ;AAAA,IACnB;AAAA,EACJ;AACJ,GApDiC;AA4EjC,IAAM,cAAc,8BAAO,SAAqB,eAAmD;AAC/F,QAAM,UAAiB,CAAC;AACxB,QAAM,OAAO,cAAc,MAAM,aAAa;AAE9C,MAAI;AACA,eAAW,SAAS,SAAS;AACzB,UAAI,MAAc;AAClB,UAAI,SAAgB,CAAC;AAErB,UAAI,gBAAgB,OAAO;AACvB,cAAM,EAAC,MAAM,MAAK,IAAI,MAAM;AAE5B,cAAM,UAAU,OAAO,KAAK,IAAI;AAChC,cAAM,SAAS,OAAO,OAAO,IAAI;AAEjC,cAAM,eAAe,OAAO,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AAChE,cAAM,eAAe,KAAK,KAAK,QAAQ,KAAK,IAAI,CAAC,aAAa,YAAY;AAC1E,iBAAS;AAAA,MACb;AAGA,UAAI,iBAAiB,OAAO;AACxB,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM;AAE9B,YAAI,KAAK,SAAS,GAAG;AAEjB,gBAAM,UAAU,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;AAGzC,gBAAM,eAAe,KAAK,IAAI,CAAC,KAAK,aAAa;AAC7C,kBAAM,kBAAkB,QAAQ;AAAA,cAAI,CAAC,GAAG,aACpC,IAAI,WAAW,QAAQ,SAAS,WAAW,CAAC;AAAA,YAChD;AACA,mBAAO,IAAI,gBAAgB,KAAK,IAAI,CAAC;AAAA,UACzC,CAAC,EAAE,KAAK,IAAI;AAGZ,gBAAM,eAAe,KAAK,KAAK,QAAQ,KAAK,IAAI,CAAC,YAAY,YAAY;AAGzE,mBAAS,KAAK,QAAQ,SAAO,OAAO,OAAO,GAAG,CAAC;AAAA,QACnD;AAAA,MACJ,WAGS,YAAY,OAAO;AACxB,cAAM,EAAC,MAAM,OAAO,WAAW,oBAAoB,CAAC,EAAC,IAAI,MAAM;AAE/D,cAAM,UAAU,OAAO,KAAK,IAAI;AAChC,cAAM,SAAS,OAAO,OAAO,IAAI;AAKjC,cAAM,YAAY,QAAQ,IAAI,CAAC,KAAK,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AACzE,cAAM,cAAc,OAAO;AAC3B,cAAM,sBAAsB,UAAU,QAAQ,UAAU,CAAC,UAAU;AAC/D,gBAAM,MAAM,SAAS,MAAM,UAAU,CAAC,CAAC;AACvC,iBAAO,IAAI,MAAM,WAAW;AAAA,QAChC,CAAC;AACD,cAAM,UAAU,KAAK,QAAQ,SAAS,UAAU,mBAAmB;AACnE,iBAAS,CAAC,GAAG,QAAQ,GAAG,iBAAiB;AAAA,MAC7C,WAGS,YAAY,OAAO;AACxB,cAAM,EAAC,UAAU,CAAC,GAAG,GAAG,OAAO,WAAW,oBAAoB,CAAC,EAAC,IAAI,MAAM;AAC1E,cAAM,gBAAgB,QAAQ,KAAK,IAAI;AACvC,cAAM,UAAU,aAAa,SAAS,KAAK;AAC3C,YAAI,WAAW;AACX,iBAAO,UAAU,SAAS;AAC1B,mBAAS;AAAA,QACb;AAAA,MACJ,WAGS,YAAY,OAAO;AACxB,cAAM,EAAC,OAAO,WAAW,oBAAoB,CAAC,EAAC,IAAI,MAAM;AACzD,cAAM,eAAe,KAAK,UAAU,SAAS;AAC7C,iBAAS;AAAA,MACb;AAEA,YAAM,SAAS,MAAM,KAAK,MAAM,KAAK,MAAM;AAC3C,cAAQ,KAAK,OAAO,IAAI;AAAA,IAC5B;AAEA,WAAO;AAAA,EAEX,SAAS,OAAO;AACZ,UAAM;AAAA,EACV;AACJ,GA3FoB;AAkHb,IAAM,gBAAgB,8BACzB,aACA,eACiB;AACjB,QAAM,OAAO,cAAc,MAAM,aAAa;AAE9C,MAAI;AAEA,QAAI,MAAM,QAAQ,WAAW,GAAG;AAC5B,YAAM,UAAiB,CAAC;AACxB,iBAAW,QAAQ,aAAa;AAC5B,cAAM,EAAE,OAAOA,MAAK,QAAAC,UAAS,CAAC,EAAE,IAAI;AACpC,YAAID,MAAK;AACL,gBAAME,UAAS,MAAM,KAAK,MAAMF,MAAKC,OAAM;AAC3C,kBAAQ,KAAKC,QAAO,IAAI;AAAA,QAC5B;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAGA,UAAM,EAAE,OAAO,KAAK,SAAS,CAAC,EAAE,IAAI;AACpC,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC5E;AAEA,UAAM,SAAS,MAAM,KAAK,MAAM,KAAK,MAAM;AAC3C,WAAO,OAAO;AAAA,EAElB,SAAS,OAAO;AACZ,UAAM;AAAA,EACV;AACJ,GAhC6B;","names":["sql","params","result"]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENV
|
|
3
|
+
} from "./chunk-EWQYVPOL.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/utility/utilis/general/sqlDb.js.ts
|
|
9
|
+
import { URL } from "url";
|
|
10
|
+
function detectSQLDatabase(url) {
|
|
11
|
+
try {
|
|
12
|
+
const parsedUrl = new URL(url);
|
|
13
|
+
const scheme = parsedUrl.protocol.replace(":", "").toLowerCase();
|
|
14
|
+
const mysqlSchemes = [
|
|
15
|
+
"mysql",
|
|
16
|
+
"mysql+pymysql",
|
|
17
|
+
"mysql+mysqldb",
|
|
18
|
+
"mysql+mysqlconnector",
|
|
19
|
+
"mysql2",
|
|
20
|
+
"mysql+mysql2"
|
|
21
|
+
];
|
|
22
|
+
const postgresSchemes = [
|
|
23
|
+
"postgresql",
|
|
24
|
+
"postgres",
|
|
25
|
+
"postgresql+psycopg2",
|
|
26
|
+
"postgres+psycopg2",
|
|
27
|
+
"postgresql+pg8000",
|
|
28
|
+
"postgres+pg8000",
|
|
29
|
+
"postgresql+asyncpg",
|
|
30
|
+
"postgresql+pg",
|
|
31
|
+
"postgres+pg"
|
|
32
|
+
];
|
|
33
|
+
if (mysqlSchemes.includes(scheme)) {
|
|
34
|
+
return ENV.MY_SQL;
|
|
35
|
+
}
|
|
36
|
+
if (postgresSchemes.includes(scheme)) {
|
|
37
|
+
return ENV.POSTGRES_SQL;
|
|
38
|
+
}
|
|
39
|
+
if (scheme === "" && !parsedUrl.protocol) {
|
|
40
|
+
const connectionString = url.toLowerCase();
|
|
41
|
+
if (connectionString.includes("mysql") || connectionString.includes("my-sql") || parsedUrl.port === "3306") {
|
|
42
|
+
return ENV.MY_SQL;
|
|
43
|
+
}
|
|
44
|
+
if (connectionString.includes("postgres") || connectionString.includes("postgre") || parsedUrl.port === "5432") {
|
|
45
|
+
return ENV.POSTGRES_SQL;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
throw new Error(
|
|
49
|
+
`Unsupported or unrecognized database type. URL: ${url}. Detected scheme: ${scheme || "none"}`
|
|
50
|
+
);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
if (error instanceof Error && error.message.includes("Invalid URL")) {
|
|
53
|
+
const lowerUrl = url.toLowerCase();
|
|
54
|
+
if (lowerUrl.includes("mysql") || lowerUrl.includes("my-sql")) {
|
|
55
|
+
return ENV.MY_SQL;
|
|
56
|
+
}
|
|
57
|
+
if (lowerUrl.includes("postgres") || lowerUrl.includes("postgre")) {
|
|
58
|
+
return ENV.POSTGRES_SQL;
|
|
59
|
+
}
|
|
60
|
+
if (url.includes(":3306")) return ENV.MY_SQL;
|
|
61
|
+
if (url.includes(":5432")) return ENV.POSTGRES_SQL;
|
|
62
|
+
throw new Error(`Invalid URL format: ${url}`);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
__name(detectSQLDatabase, "detectSQLDatabase");
|
|
68
|
+
function isMySQL(url) {
|
|
69
|
+
try {
|
|
70
|
+
return detectSQLDatabase(url) === ENV.MY_SQL;
|
|
71
|
+
} catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
__name(isMySQL, "isMySQL");
|
|
76
|
+
function isPostgreSQL(url) {
|
|
77
|
+
try {
|
|
78
|
+
return detectSQLDatabase(url) === ENV.POSTGRES_SQL;
|
|
79
|
+
} catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
__name(isPostgreSQL, "isPostgreSQL");
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
detectSQLDatabase,
|
|
87
|
+
isMySQL,
|
|
88
|
+
isPostgreSQL
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=chunk-MNSQSU7T.js.map
|