Skip to content
This repository was archived by the owner on Apr 29, 2025. It is now read-only.

Commit 340ca48

Browse files
committed
refactor: error handling
Add boolean to disable throwing error for query. Reject promises when using _async exports. Return errors as strings instead of Error (fails to serialise). Fixes #122
1 parent 2e751a3 commit 340ca48

File tree

4 files changed

+49
-23
lines changed

4 files changed

+49
-23
lines changed

src/database/rawExecute.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export const rawExecute = async (
1010
invokingResource: string,
1111
query: string,
1212
parameters: CFXParameters,
13-
cb?: CFXCallback
13+
cb?: CFXCallback,
14+
throwError?: boolean
1415
) => {
1516
const type = executeType(query);
1617
parameters = parseExecute(parameters);
@@ -45,9 +46,12 @@ export const rawExecute = async (
4546

4647
single = response.length === 1;
4748
} catch (err: any) {
48-
throw new Error(`${invokingResource} was unable to execute a query!
49-
${err.message}
50-
${err.sql}`);
49+
const error = `${invokingResource} was unable to execute a query!
50+
${err.message}
51+
${err.sql}`;
52+
53+
if (cb) cb(null, error)
54+
if (throwError) throw new Error(error)
5155
} finally {
5256
connection.release();
5357
}

src/database/rawQuery.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ export const rawQuery = async (
1111
invokingResource: string,
1212
query: string,
1313
parameters: CFXParameters,
14-
cb?: CFXCallback
14+
cb?: CFXCallback,
15+
throwError?: boolean
1516
) => {
1617
await scheduleTick();
1718
[query, parameters, cb] = parseArguments(invokingResource, query, parameters, cb);
@@ -27,8 +28,9 @@ export const rawQuery = async (
2728
} catch (err) {}
2829
});
2930
}).catch((err) => {
30-
throw new Error(
31-
`${invokingResource} was unable to execute a query!\n${err.message}\n${`${query} ${JSON.stringify(parameters)}`}`
32-
);
31+
const error = `${invokingResource} was unable to execute a query!\n${err.message}\n${`${query} ${JSON.stringify(parameters)}`}`
32+
33+
if (cb) cb(null, error)
34+
if (throwError) throw new Error(error)
3335
});
3436
};

src/index.ts

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,44 +6,54 @@ import('./update');
66

77
const MySQL = {} as Record<string, Function>;
88

9-
MySQL.query = (query: string, parameters: CFXParameters, cb: CFXCallback, invokingResource = GetInvokingResource()) => {
10-
rawQuery(null, invokingResource, query, parameters, cb);
9+
MySQL.query = (
10+
query: string,
11+
parameters: CFXParameters,
12+
cb: CFXCallback,
13+
invokingResource = GetInvokingResource(),
14+
throwError?: boolean
15+
) => {
16+
rawQuery(null, invokingResource, query, parameters, cb, throwError);
1117
};
1218

1319
MySQL.single = (
1420
query: string,
1521
parameters: CFXParameters,
1622
cb: CFXCallback,
17-
invokingResource = GetInvokingResource()
23+
invokingResource = GetInvokingResource(),
24+
throwError?: boolean
1825
) => {
19-
rawQuery('single', invokingResource, query, parameters, cb);
26+
rawQuery('single', invokingResource, query, parameters, cb, throwError);
2027
};
2128

2229
MySQL.scalar = (
2330
query: string,
2431
parameters: CFXParameters,
2532
cb: CFXCallback,
26-
invokingResource = GetInvokingResource()
33+
invokingResource = GetInvokingResource(),
34+
throwError?: boolean
2735
) => {
28-
rawQuery('scalar', invokingResource, query, parameters, cb);
36+
rawQuery('scalar', invokingResource, query, parameters, cb, throwError);
2937
};
3038

3139
MySQL.update = (
3240
query: string,
3341
parameters: CFXParameters,
3442
cb: CFXCallback,
35-
invokingResource = GetInvokingResource()
43+
invokingResource = GetInvokingResource(),
44+
throwError?: boolean
3645
) => {
37-
rawQuery('update', invokingResource, query, parameters, cb);
46+
rawQuery('update', invokingResource, query, parameters, cb, throwError);
3847
};
3948

4049
MySQL.insert = (
4150
query: string,
4251
parameters: CFXParameters,
4352
cb: CFXCallback,
44-
invokingResource = GetInvokingResource()
53+
invokingResource = GetInvokingResource(),
54+
throwError?: boolean
4555
) => {
46-
rawQuery('insert', invokingResource, query, parameters, cb);
56+
rawQuery('insert', invokingResource, query, parameters, cb, throwError);
4757
};
4858

4959
MySQL.transaction = (
@@ -59,9 +69,10 @@ MySQL.prepare = (
5969
query: string,
6070
parameters: CFXParameters,
6171
cb: CFXCallback,
62-
invokingResource = GetInvokingResource()
72+
invokingResource = GetInvokingResource(),
73+
throwError?: boolean
6374
) => {
64-
rawExecute(invokingResource, query, parameters, cb);
75+
rawExecute(invokingResource, query, parameters, cb, throwError);
6576
};
6677

6778
MySQL.execute = MySQL.query;
@@ -71,8 +82,17 @@ for (const key in MySQL) {
7182
global.exports(key, MySQL[key]);
7283

7384
const exp = (query: string, parameters: CFXParameters, invokingResource = GetInvokingResource()) => {
74-
return new Promise((resolve) => {
75-
MySQL[key](query, parameters, resolve, invokingResource);
85+
return new Promise((resolve, reject) => {
86+
MySQL[key](
87+
query,
88+
parameters,
89+
(result: unknown, err: string) => {
90+
if (err) return reject(new Error(err));
91+
resolve(result);
92+
},
93+
invokingResource,
94+
true
95+
);
7696
});
7797
};
7898

src/types/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ export type TransactionQuery = {
1515
// working with this type is impossible but at least we can pretend to be strictly typed
1616
export type CFXParameters = any[];
1717

18-
export type CFXCallback = (result: QueryResponse | number | null) => void;
18+
export type CFXCallback = (result: QueryResponse | number | null, err?: string) => void;

0 commit comments

Comments
 (0)