@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.
Files changed (56) hide show
  1. package/dist/handlers/ExpressHandler.d.ts +3 -2
  2. package/dist/index.cjs.js +33 -2
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +33 -2
  5. package/dist/index.esm.js.map +1 -1
  6. package/package.json +1 -1
  7. package/src/__tests__/sakila-db/C6.js +1 -1
  8. package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
  9. package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
  10. package/src/__tests__/sakila-db/C6.ts +1 -1
  11. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +3 -3
  12. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
  13. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +1 -1
  14. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
  15. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +5 -5
  16. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
  17. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +1 -1
  18. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
  19. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +2 -2
  20. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
  21. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +1 -1
  22. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
  23. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +2 -2
  24. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
  25. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +1 -1
  26. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
  27. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +2 -2
  28. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
  29. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +1 -1
  30. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
  31. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +5 -5
  32. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
  33. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +1 -1
  34. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
  35. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +2 -2
  36. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
  37. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +1 -1
  38. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
  39. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +1 -1
  40. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
  41. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +1 -1
  42. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
  43. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +2 -2
  44. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
  45. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +1 -1
  46. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
  47. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +2 -2
  48. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
  49. package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
  50. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +3 -3
  51. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
  52. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +1 -1
  53. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
  54. package/src/executors/HttpExecutor.ts +2 -1
  55. package/src/executors/SqlExecutor.ts +34 -1
  56. 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
- if (!broadcast || this.config.requestMethod === C6C.GET) return;
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);