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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getMySqlPool
|
|
3
|
+
} from "./chunk-HZ4GLSOO.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/utility/utilis/postgres/subSqlfiles/executeMySqlQuery.ts
|
|
9
|
+
var executeMySqlQuery = /* @__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 getMySqlPool()).getConnection();
|
|
16
|
+
await client.beginTransaction();
|
|
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.commit();
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (client) {
|
|
36
|
+
await client.rollback();
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
} finally {
|
|
40
|
+
if (client) {
|
|
41
|
+
client.release();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}, "executeMySqlQuery");
|
|
45
|
+
var executeCrud = /* @__PURE__ */ __name(async (queries, poolClient) => {
|
|
46
|
+
const results = [];
|
|
47
|
+
const pool = poolClient || await getMySqlPool();
|
|
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(() => "?").join(", ");
|
|
57
|
+
sql = `INSERT INTO ${table} (${columns.join(", ")}) VALUES (${placeholders})`;
|
|
58
|
+
params = values;
|
|
59
|
+
const result = pool.query(sql, params);
|
|
60
|
+
const insertId = result[0]?.insertId;
|
|
61
|
+
if (insertId) {
|
|
62
|
+
const [rows] = await (await pool).query(`SELECT * FROM ${table} WHERE id = ?`, [insertId]);
|
|
63
|
+
results.push(rows);
|
|
64
|
+
} else {
|
|
65
|
+
results.push([]);
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if ("insert_many" in query) {
|
|
70
|
+
const { item, table } = query.insert_many;
|
|
71
|
+
if (item.length > 0) {
|
|
72
|
+
const columns = Object.keys(item[0] || {});
|
|
73
|
+
const placeholders = item.map(() => `(${columns.map(() => "?").join(", ")})`).join(", ");
|
|
74
|
+
sql = `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${placeholders}`;
|
|
75
|
+
params = item.flatMap((row) => Object.values(row));
|
|
76
|
+
const result = await pool.query(sql, params);
|
|
77
|
+
const insertId = result[0]?.insertId;
|
|
78
|
+
if (insertId) {
|
|
79
|
+
const [rows] = await pool.query(`SELECT * FROM ${table} WHERE id >= ? ORDER BY id LIMIT ?`, [insertId, item.length]);
|
|
80
|
+
results.push(rows);
|
|
81
|
+
} else {
|
|
82
|
+
results.push([]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else if ("update" in query) {
|
|
86
|
+
const { item, table, condition, conditionalParams = [] } = query.update;
|
|
87
|
+
const columns = Object.keys(item);
|
|
88
|
+
const values = Object.values(item);
|
|
89
|
+
const setClause = columns.map((col) => `${col} = ?`).join(", ");
|
|
90
|
+
sql = `UPDATE ${table} SET ${setClause} WHERE ${condition}`;
|
|
91
|
+
params = [...values, ...conditionalParams];
|
|
92
|
+
await (await pool).query(sql, params);
|
|
93
|
+
const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;
|
|
94
|
+
const [rows] = await pool.query(selectSql, conditionalParams);
|
|
95
|
+
results.push(rows);
|
|
96
|
+
} else if ("select" in query) {
|
|
97
|
+
const { columns = ["*"], table, condition, conditionalParams = [] } = query.select;
|
|
98
|
+
const selectColumns = columns.join(", ");
|
|
99
|
+
sql = `SELECT ${selectColumns} FROM ${table}`;
|
|
100
|
+
if (condition) {
|
|
101
|
+
sql += ` WHERE ${condition}`;
|
|
102
|
+
params = conditionalParams;
|
|
103
|
+
}
|
|
104
|
+
const [rows] = await pool.query(sql, params);
|
|
105
|
+
results.push(rows);
|
|
106
|
+
} else if ("delete" in query) {
|
|
107
|
+
const { table, condition, conditionalParams = [] } = query.delete;
|
|
108
|
+
const selectSql = `SELECT * FROM ${table} WHERE ${condition}`;
|
|
109
|
+
const [rows] = await pool.query(selectSql, conditionalParams);
|
|
110
|
+
sql = `DELETE FROM ${table} WHERE ${condition}`;
|
|
111
|
+
params = conditionalParams;
|
|
112
|
+
await pool.query(sql, params);
|
|
113
|
+
results.push(rows);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return results;
|
|
117
|
+
} catch (error) {
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}, "executeCrud");
|
|
121
|
+
var executeCustom = /* @__PURE__ */ __name(async (customQuery, poolClient) => {
|
|
122
|
+
const pool = poolClient || await getMySqlPool();
|
|
123
|
+
try {
|
|
124
|
+
if (Array.isArray(customQuery)) {
|
|
125
|
+
const results = [];
|
|
126
|
+
for (const item of customQuery) {
|
|
127
|
+
const { query: sql2, params: params2 = [] } = item;
|
|
128
|
+
if (sql2) {
|
|
129
|
+
const [rows] = await pool.query(sql2, params2);
|
|
130
|
+
results.push(rows);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return results;
|
|
134
|
+
}
|
|
135
|
+
const { query: sql, params = [] } = customQuery;
|
|
136
|
+
if (!sql) {
|
|
137
|
+
throw new Error("Custom query missing required 'query' string property.");
|
|
138
|
+
}
|
|
139
|
+
return await pool.query(sql, params);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}, "executeCustom");
|
|
144
|
+
|
|
145
|
+
export {
|
|
146
|
+
executeMySqlQuery
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=chunk-BMPUYKJJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENV
|
|
3
|
+
} from "./chunk-EWQYVPOL.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/engine/mondoDb/mongoDB.ts
|
|
9
|
+
import { MongoClient } from "mongodb";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import { pathToFileURL } from "url";
|
|
12
|
+
var uri = ENV.MONGO_SERVER_URL;
|
|
13
|
+
var client = null;
|
|
14
|
+
async function connectToMongo() {
|
|
15
|
+
if (!uri) return;
|
|
16
|
+
try {
|
|
17
|
+
if (!client) {
|
|
18
|
+
let options;
|
|
19
|
+
try {
|
|
20
|
+
const mongoConfigFilePath = path.join(process.cwd(), "src/config/mongo.config.ts");
|
|
21
|
+
const { MONGO_CLIENT_OPTIONS } = await import(pathToFileURL(mongoConfigFilePath).href);
|
|
22
|
+
options = MONGO_CLIENT_OPTIONS || {};
|
|
23
|
+
} catch (error) {
|
|
24
|
+
options = {};
|
|
25
|
+
}
|
|
26
|
+
client = new MongoClient(uri, options);
|
|
27
|
+
await client.connect();
|
|
28
|
+
console.log("\u2705 Connected to MongoDB Cluster");
|
|
29
|
+
}
|
|
30
|
+
return client;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error("\u274C MongoDB Connection Error:", error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
__name(connectToMongo, "connectToMongo");
|
|
37
|
+
function getMongoServer() {
|
|
38
|
+
if (!client) {
|
|
39
|
+
throw new Error("Call connectToMongo first!");
|
|
40
|
+
}
|
|
41
|
+
return client;
|
|
42
|
+
}
|
|
43
|
+
__name(getMongoServer, "getMongoServer");
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
connectToMongo,
|
|
47
|
+
getMongoServer
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=chunk-EB35KLDE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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\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 mongoConfigFilePath= path.join(process.cwd(), \"src/config/mongo.config.ts\");\r\n const {MONGO_CLIENT_OPTIONS} = await import(pathToFileURL(mongoConfigFilePath).href);\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;AAG5B,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,sBAAqB,KAAK,KAAK,QAAQ,IAAI,GAAG,4BAA4B;AAChF,cAAM,EAAC,qBAAoB,IAAI,MAAM,OAAO,cAAc,mBAAmB,EAAE;AAC/E,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;AA3Be;AA+Bf,SAAS,iBAA8B;AACrC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,SAAO;AACT;AALS;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/utility/libs/env.ts
|
|
2
|
+
import { configDotenv } from "dotenv";
|
|
3
|
+
configDotenv();
|
|
4
|
+
var ENV = {
|
|
5
|
+
FILE: "file",
|
|
6
|
+
FILES: "files",
|
|
7
|
+
SERVER_PORT: process.env.SERVER_PORT,
|
|
8
|
+
CURRENT_ENVIRONMENT: process.env.CURRENT_ENVIRONMENT,
|
|
9
|
+
ENV_TYPE_LOCAL: process.env.ENV_TYPE_LOCAL,
|
|
10
|
+
ENV_TYPE_PRODUCTION: process.env.ENV_TYPE_PRODUCTION,
|
|
11
|
+
SQL_DB_URL: process.env.SQL_DB_URL,
|
|
12
|
+
MONGO_SERVER_URL: process.env.MONGO_DB_URL,
|
|
13
|
+
IN_APP_BUCKET: process.env.IN_APP_BUCKET,
|
|
14
|
+
BUCKET_NAME: process.env.BUCKET_NAME,
|
|
15
|
+
BUCKET_END_POINT: process.env.BUCKET_END_POINT,
|
|
16
|
+
BUCKET_ACCESS_KEY_ID: process.env.BACKEND_ACCESS_KEY,
|
|
17
|
+
BUCKET_SECRET_KEY_ID: process.env.BACKEND_SECRET_KEY,
|
|
18
|
+
URL: "url",
|
|
19
|
+
PATH: "path",
|
|
20
|
+
MY_SQL: "mysql",
|
|
21
|
+
POSTGRES_SQL: "postgresql",
|
|
22
|
+
MAX_BATCH_FILES: process.env.MAX_BATCH_FILES,
|
|
23
|
+
MAX_FILE_SIZE_IN_MB: process.env.MAX_FILE_SIZE_IN_MB,
|
|
24
|
+
MAX_FIELD_SIZE_IN_MB: process.env.MAX_FIELD_SIZE_IN_MB
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
ENV
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-EWQYVPOL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENV
|
|
3
|
+
} from "./chunk-EWQYVPOL.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "./chunk-7QVYU63E.js";
|
|
7
|
+
|
|
8
|
+
// src/utility/utilis/general/file-operations.ts
|
|
9
|
+
import mime from "mime-types";
|
|
10
|
+
import { readFile } from "fs/promises";
|
|
11
|
+
function getFileExtension(input) {
|
|
12
|
+
if (Buffer.isBuffer(input)) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
let filename = "";
|
|
16
|
+
if (typeof input === "string") {
|
|
17
|
+
filename = input;
|
|
18
|
+
} else if ("originalname" in input && input.originalname) {
|
|
19
|
+
filename = input.originalname;
|
|
20
|
+
} else if ("name" in input && input.name) {
|
|
21
|
+
filename = input.name;
|
|
22
|
+
}
|
|
23
|
+
if (!filename) {
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
const cleanFilename = filename.split(/[?#]/)[0];
|
|
27
|
+
const match = cleanFilename.match(/\.([^./\\]+)$/);
|
|
28
|
+
return match?.[1]?.toLowerCase() ?? "";
|
|
29
|
+
}
|
|
30
|
+
__name(getFileExtension, "getFileExtension");
|
|
31
|
+
function buildPath({
|
|
32
|
+
path_prefix = "",
|
|
33
|
+
path = [],
|
|
34
|
+
path_postfix = "",
|
|
35
|
+
fileName
|
|
36
|
+
}) {
|
|
37
|
+
const resolvedFileName = fileName instanceof File ? fileName.name : fileName ?? "";
|
|
38
|
+
const allSegments = [
|
|
39
|
+
path_prefix,
|
|
40
|
+
...path,
|
|
41
|
+
path_postfix,
|
|
42
|
+
resolvedFileName
|
|
43
|
+
];
|
|
44
|
+
return allSegments.filter((segment) => Boolean(segment && segment.trim())).map((segment) => segment.replace(/^\/+|\/+$/g, "")).map((segment) => segment.replace(/\/+/g, "/")).filter((segment) => segment.length > 0).join("/");
|
|
45
|
+
}
|
|
46
|
+
__name(buildPath, "buildPath");
|
|
47
|
+
function downloadedFilePath({ path = [], fileName }) {
|
|
48
|
+
const cleanedPath = path.filter((segment) => segment !== ENV.IN_APP_BUCKET);
|
|
49
|
+
return buildPath({
|
|
50
|
+
path_prefix: ENV.IN_APP_BUCKET,
|
|
51
|
+
fileName: fileName instanceof File ? fileName.name : fileName ?? "",
|
|
52
|
+
path: cleanedPath
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
__name(downloadedFilePath, "downloadedFilePath");
|
|
56
|
+
var getFileContentType = /* @__PURE__ */ __name(async (file) => {
|
|
57
|
+
if (Buffer.isBuffer(file)) {
|
|
58
|
+
return "application/octet-stream";
|
|
59
|
+
}
|
|
60
|
+
if (typeof file === "string") {
|
|
61
|
+
const detectedType = mime.lookup(file);
|
|
62
|
+
return detectedType || "application/octet-stream";
|
|
63
|
+
}
|
|
64
|
+
if ("mimetype" in file && file.mimetype) {
|
|
65
|
+
return file.mimetype;
|
|
66
|
+
}
|
|
67
|
+
if ("type" in file && file.type) {
|
|
68
|
+
return file.type;
|
|
69
|
+
}
|
|
70
|
+
return "application/octet-stream";
|
|
71
|
+
}, "getFileContentType");
|
|
72
|
+
var url_or_path = /* @__PURE__ */ __name((val) => {
|
|
73
|
+
try {
|
|
74
|
+
const parsed = new URL(val);
|
|
75
|
+
if (parsed.protocol === "http:" || parsed.protocol === "https:") {
|
|
76
|
+
return ENV.URL;
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
}
|
|
80
|
+
return ENV.PATH;
|
|
81
|
+
}, "url_or_path");
|
|
82
|
+
async function toUint8Array(file) {
|
|
83
|
+
if (typeof file === "string") {
|
|
84
|
+
return await readFile(file);
|
|
85
|
+
}
|
|
86
|
+
if (Buffer.isBuffer(file)) {
|
|
87
|
+
return new Uint8Array(file);
|
|
88
|
+
}
|
|
89
|
+
if ("buffer" in file && Buffer.isBuffer(file.buffer)) {
|
|
90
|
+
return new Uint8Array(file.buffer);
|
|
91
|
+
}
|
|
92
|
+
if ("path" in file && typeof file.path === "string") {
|
|
93
|
+
return await readFile(file.path);
|
|
94
|
+
}
|
|
95
|
+
if ("arrayBuffer" in file && typeof file.arrayBuffer === "function") {
|
|
96
|
+
return new Uint8Array(await file.arrayBuffer());
|
|
97
|
+
}
|
|
98
|
+
throw new Error("Unable to parse file input into a valid binary buffer.");
|
|
99
|
+
}
|
|
100
|
+
__name(toUint8Array, "toUint8Array");
|
|
101
|
+
|
|
102
|
+
export {
|
|
103
|
+
getFileExtension,
|
|
104
|
+
buildPath,
|
|
105
|
+
downloadedFilePath,
|
|
106
|
+
getFileContentType,
|
|
107
|
+
url_or_path,
|
|
108
|
+
toUint8Array
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=chunk-FMCW72HO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utility/utilis/general/file-operations.ts"],"sourcesContent":["import type {PathOptions} from \"../../libs/interface.js\";\r\nimport mime from \"mime-types\";\r\nimport {ENV} from \"../../libs/env.js\";\r\nimport {readFile} from \"node:fs/promises\";\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 * Extracts the file extension from a supported file input.\r\n *\r\n * Supports Express Multer files, Web API `File` objects, raw `Buffer` values,\r\n * and file paths or URLs. For URLs and paths, query parameters and hash\r\n * fragments are ignored when determining the extension.\r\n *\r\n * @param input - The file, buffer, path, or URL from which to extract the extension.\r\n * @returns The file extension without the leading dot, converted to lowercase.\r\n * Returns an empty string if no extension can be determined.\r\n *\r\n * @example\r\n * const extension = getFileExtension('https://example.com/files/image.PNG');\r\n * // Returns: \"png\"\r\n *\r\n * @example\r\n * const extension = getFileExtension(req.file);\r\n * // Returns: \"pdf\"\r\n *\r\n * @example\r\n * const extension = getFileExtension('documents/report.pdf?download=true');\r\n * // Returns: \"pdf\"\r\n *\r\n * @example\r\n * const extension = getFileExtension(buffer);\r\n * // Returns: \"\"\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\n * Builds a normalized file path from the provided path components.\r\n *\r\n * Combines the path prefix, path segments, path postfix, and file name,\r\n * while removing empty values and normalizing redundant slashes.\r\n *\r\n * If `fileName` is a Web API `File` object, its `name` property is used.\r\n *\r\n * @param options - The path components used to construct the final path.\r\n * @param options.path_prefix - An optional prefix to prepend to the path.\r\n * @param options.path - An array of path segments.\r\n * @param options.path_postfix - An optional postfix to append before the file name.\r\n * @param options.fileName - The file name or a Web API `File` object.\r\n * @returns A normalized path with components separated by a single slash.\r\n *\r\n * @example\r\n * const filePath = buildPath({\r\n * path_prefix: 'uploads',\r\n * path: ['documents', 'reports'],\r\n * fileName: 'report.pdf',\r\n * });\r\n * // Returns: \"uploads/documents/reports/report.pdf\"\r\n *\r\n * @example\r\n * const filePath = buildPath({\r\n * path: ['documents//', '/reports/'],\r\n * fileName: 'report.pdf',\r\n * });\r\n * // Returns: \"documents/reports/report.pdf\"\r\n */\r\nexport function buildPath({\r\n path_prefix = '',\r\n path = [],\r\n path_postfix = '',\r\n fileName,\r\n }: PathOptions): string {\r\n // Extract string name if fileName is a File object\r\n const resolvedFileName =\r\n fileName instanceof File ? fileName.name : fileName ?? '';\r\n\r\n // Combine all segments into a single array\r\n const allSegments = [\r\n path_prefix,\r\n ...path,\r\n path_postfix,\r\n resolvedFileName,\r\n ];\r\n\r\n return allSegments\r\n // Filter out null/undefined/empty string items\r\n .filter((segment): segment is string => Boolean(segment && segment.trim()))\r\n // Clean leading/trailing slashes from individual segments\r\n .map((segment) => segment.replace(/^\\/+|\\/+$/g, ''))\r\n // Remove any extra slashes inside a segment (e.g. \"folder//subfolder\")\r\n .map((segment) => segment.replace(/\\/+/g, '/'))\r\n // Filter again in case cleaning left an empty string\r\n .filter((segment) => segment.length > 0)\r\n // Join with a single slash\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\n/**\r\n * Builds the local file path for a downloaded file.\r\n *\r\n * Removes any occurrence of the configured in-app bucket from the provided\r\n * path to prevent duplicating the bucket name, then constructs the final\r\n * path using the configured in-app bucket as the path prefix.\r\n *\r\n * @param options - The path and file name options used to build the downloaded file path.\r\n * @param options.path - The path segments leading to the file.\r\n * @param options.fileName - The name of the file or a Web API `File` object.\r\n * @returns The complete local path for the downloaded file.\r\n *\r\n * @example\r\n * const filePath = downloadedFilePath({\r\n * path: ['documents', 'reports'],\r\n * fileName: 'report.pdf',\r\n * });\r\n * // Returns a path prefixed with ENV.IN_APP_BUCKET.\r\n *\r\n * @example\r\n * const filePath = downloadedFilePath({\r\n * path: [ENV.IN_APP_BUCKET, 'documents'],\r\n * fileName: file,\r\n * });\r\n * // The duplicate bucket segment is removed before building the path.\r\n */\r\nexport function downloadedFilePath({path = [], fileName}: PathOptions): string {\r\n // Filter out any occurrence of ENV.IN_APP_BUCKET (case-sensitive or trimmed)\r\n const cleanedPath = path.filter((segment) => segment !== ENV.IN_APP_BUCKET);\r\n\r\n return buildPath({\r\n path_prefix: ENV.IN_APP_BUCKET,\r\n fileName: fileName instanceof File ? fileName.name : fileName ?? '',\r\n path: cleanedPath,\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 * Determines the MIME content type of a file from its available metadata\r\n * or, when given a file path or URL, from its file extension.\r\n *\r\n * Supports Express Multer files, Web API `File` objects, raw `Buffer` values,\r\n * and file paths or URLs.\r\n *\r\n * @param file - The file, buffer, path, or URL whose content type should be determined.\r\n * @returns A promise resolving to the detected MIME content type.\r\n *\r\n * @example\r\n * const contentType = await getFileContentType(req.file);\r\n * // Returns something like: \"image/jpeg\"\r\n *\r\n * @example\r\n * const contentType = await getFileContentType('/uploads/document.pdf');\r\n * // Returns: \"application/pdf\"\r\n *\r\n * @example\r\n * const contentType = await getFileContentType(buffer);\r\n * // Returns: \"application/octet-stream\"\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\n/**\r\n * Determines whether the provided value is a URL or a local/server based file path.\r\n *\r\n * If the value is a valid HTTP/HTTPS URL, the configured URL environment\r\n * value is returned. Otherwise, the configured local path environment value\r\n * is returned.\r\n *\r\n * @param val - The URL or local file path to evaluate.\r\n * @returns The configured URL or local path based on the input type.\r\n *\r\n * @example\r\n * const basePath = url_or_path('https://example.com/file.png');\r\n * // Returns ENV.URL\r\n *\r\n * @example\r\n * const basePath = url_or_path('/uploads/file.png');\r\n * // Returns ENV.PATH\r\n */\r\nexport const url_or_path = (val: string): string => {\r\n try {\r\n const parsed = new URL(val);\r\n if (parsed.protocol === \"http:\" || parsed.protocol === \"https:\") {\r\n return ENV.URL;\r\n }\r\n } catch {\r\n // If new URL() throws, it is a local path\r\n }\r\n return ENV.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\n * Safely normalizes Buffer, Express.Multer.File, Web File, or File Path into Uint8Array\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":[]}
|