@carbonorm/carbonnode 6.0.4 → 6.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/handlers/ExpressHandler.d.ts +3 -2
- package/dist/index.cjs.js +33 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +33 -2
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/sakila-db/C6.js +1 -1
- package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
- package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
- package/src/__tests__/sakila-db/C6.ts +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
- package/src/executors/HttpExecutor.ts +2 -1
- package/src/executors/SqlExecutor.ts +34 -1
- package/src/handlers/ExpressHandler.ts +4 -1
|
@@ -260,7 +260,16 @@ export class SqlExecutor<
|
|
|
260
260
|
response?: DetermineResponseDataType<G['RequestMethod'], G['RestTableInterface']>
|
|
261
261
|
): Promise<void> {
|
|
262
262
|
const broadcast = this.config.websocketBroadcast;
|
|
263
|
-
|
|
263
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 broadcastWebsocketIfConfigured start", {
|
|
264
|
+
method: this.config.requestMethod,
|
|
265
|
+
hasBroadcast: Boolean(broadcast),
|
|
266
|
+
});
|
|
267
|
+
if (!broadcast || this.config.requestMethod === C6C.GET) {
|
|
268
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket broadcast skipped", {
|
|
269
|
+
reason: !broadcast ? "no broadcast configured" : "GET request",
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
264
273
|
|
|
265
274
|
const normalizedRequest = this.normalizeRequestPayload(this.extractRequestBody());
|
|
266
275
|
const pkShorts = this.config.restModel.PRIMARY_SHORT ?? [];
|
|
@@ -269,11 +278,27 @@ export class SqlExecutor<
|
|
|
269
278
|
let responseRest = response?.rest;
|
|
270
279
|
let responsePrimaryKey = this.extractPrimaryKeyValuesFromData(responseRest);
|
|
271
280
|
|
|
281
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket request payload", {
|
|
282
|
+
normalizedRequest,
|
|
283
|
+
requestPrimaryKey: this.extractPrimaryKeyValues(),
|
|
284
|
+
pkShorts,
|
|
285
|
+
});
|
|
286
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket response payload", {
|
|
287
|
+
responseRest,
|
|
288
|
+
responsePrimaryKey,
|
|
289
|
+
});
|
|
290
|
+
|
|
272
291
|
if (
|
|
273
292
|
(responseRest === null || (Array.isArray(responseRest) && responseRest.length === 0))
|
|
274
293
|
&& this.config.requestMethod === C6C.POST
|
|
275
294
|
) {
|
|
295
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 response rest empty, attempting synthesize", {
|
|
296
|
+
responseRest,
|
|
297
|
+
});
|
|
276
298
|
const insertId = (response as DetermineResponseDataType<G['RequestMethod'], G['RestTableInterface']> & { insertId?: number | string | null })?.insertId;
|
|
299
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 POST insertId lookup", {
|
|
300
|
+
insertId,
|
|
301
|
+
});
|
|
277
302
|
if (insertId !== undefined && pkShorts.length === 1) {
|
|
278
303
|
const synthesizedRequest = {
|
|
279
304
|
...normalizedRequest,
|
|
@@ -298,6 +323,10 @@ export class SqlExecutor<
|
|
|
298
323
|
responsePrimaryKey = {
|
|
299
324
|
[pkShorts[0]]: insertId,
|
|
300
325
|
};
|
|
326
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 synthesized response payload", {
|
|
327
|
+
synthesized,
|
|
328
|
+
responsePrimaryKey,
|
|
329
|
+
});
|
|
301
330
|
}
|
|
302
331
|
}
|
|
303
332
|
|
|
@@ -313,8 +342,12 @@ export class SqlExecutor<
|
|
|
313
342
|
},
|
|
314
343
|
};
|
|
315
344
|
|
|
345
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket payload ready", payload);
|
|
346
|
+
|
|
316
347
|
try {
|
|
348
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket broadcast dispatch start");
|
|
317
349
|
await broadcast(payload);
|
|
350
|
+
this.config.verbose && console.log("[SQL EXECUTOR] 📣 websocket broadcast dispatch complete");
|
|
318
351
|
} catch (error) {
|
|
319
352
|
if (this.config.verbose) {
|
|
320
353
|
console.error("[SQL EXECUTOR] websocketBroadcast failed", error);
|
|
@@ -2,7 +2,7 @@ import type {Request, Response, NextFunction} from "express";
|
|
|
2
2
|
import type {Pool} from "mysql2/promise";
|
|
3
3
|
import {C6C} from "../constants/C6Constants";
|
|
4
4
|
import restRequest from "../api/restRequest";
|
|
5
|
-
import type {iC6Object, iRestMethods} from "../types/ormInterfaces";
|
|
5
|
+
import type {iC6Object, iRestMethods, tWebsocketBroadcast} from "../types/ormInterfaces";
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
// TODO - WE MUST make this a generic - optional, but helpful
|
|
@@ -11,10 +11,12 @@ export function ExpressHandler({
|
|
|
11
11
|
C6,
|
|
12
12
|
mysqlPool,
|
|
13
13
|
sqlAllowListPath,
|
|
14
|
+
websocketBroadcast,
|
|
14
15
|
}: {
|
|
15
16
|
C6: iC6Object;
|
|
16
17
|
mysqlPool: Pool;
|
|
17
18
|
sqlAllowListPath?: string;
|
|
19
|
+
websocketBroadcast?: tWebsocketBroadcast;
|
|
18
20
|
}) {
|
|
19
21
|
|
|
20
22
|
return async (req: Request, res: Response, next: NextFunction) => {
|
|
@@ -101,6 +103,7 @@ export function ExpressHandler({
|
|
|
101
103
|
C6,
|
|
102
104
|
mysqlPool,
|
|
103
105
|
sqlAllowListPath,
|
|
106
|
+
websocketBroadcast,
|
|
104
107
|
requestMethod: method,
|
|
105
108
|
restModel: C6.TABLES[table]
|
|
106
109
|
})(payload);
|