@carbonorm/carbonnode 6.0.3 → 6.0.4

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 (68) hide show
  1. package/dist/executors/SqlExecutor.d.ts +2 -15
  2. package/dist/index.cjs.js +78 -16
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +78 -16
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/types/ormInterfaces.d.ts +14 -3
  7. package/package.json +2 -2
  8. package/src/__tests__/sakila-db/C6.js +1 -1
  9. package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
  10. package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
  11. package/src/__tests__/sakila-db/C6.ts +1 -1
  12. package/src/__tests__/sakila-db/sqlResponses/C6.actor.delete.json +1 -0
  13. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +4 -3
  14. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
  15. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +2 -1
  16. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
  17. package/src/__tests__/sakila-db/sqlResponses/C6.address.delete.json +1 -0
  18. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +6 -5
  19. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
  20. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +2 -1
  21. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
  22. package/src/__tests__/sakila-db/sqlResponses/C6.category.delete.json +1 -0
  23. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +3 -2
  24. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
  25. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +2 -1
  26. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
  27. package/src/__tests__/sakila-db/sqlResponses/C6.city.delete.json +1 -0
  28. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +3 -2
  29. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
  30. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +2 -1
  31. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
  32. package/src/__tests__/sakila-db/sqlResponses/C6.country.delete.json +1 -0
  33. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +3 -2
  34. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
  35. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +2 -1
  36. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
  37. package/src/__tests__/sakila-db/sqlResponses/C6.customer.delete.json +1 -0
  38. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +6 -5
  39. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
  40. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +2 -1
  41. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
  42. package/src/__tests__/sakila-db/sqlResponses/C6.film.delete.json +1 -0
  43. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +3 -2
  44. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
  45. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +2 -1
  46. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
  47. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.delete.json +1 -0
  48. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +2 -1
  49. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
  50. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +2 -1
  51. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
  52. package/src/__tests__/sakila-db/sqlResponses/C6.language.delete.json +1 -0
  53. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +3 -2
  54. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
  55. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +2 -1
  56. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
  57. package/src/__tests__/sakila-db/sqlResponses/C6.payment.delete.json +1 -0
  58. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +3 -2
  59. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
  60. package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.json +1 -0
  61. package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
  62. package/src/__tests__/sakila-db/sqlResponses/C6.rental.delete.json +1 -0
  63. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +4 -3
  64. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
  65. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +2 -1
  66. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
  67. package/src/executors/SqlExecutor.ts +98 -21
  68. package/src/types/ormInterfaces.ts +13 -3
@@ -15,21 +15,8 @@ export declare class SqlExecutor<G extends OrmGenerics> extends Executor<G> {
15
15
  private normalizeRequestPayload;
16
16
  private extractRequestBody;
17
17
  private extractPrimaryKeyValues;
18
+ private extractPrimaryKeyValuesFromData;
18
19
  private broadcastWebsocketIfConfigured;
19
- runQuery(): Promise<{
20
- rest: any;
21
- sql: {
22
- sql: any;
23
- values: any;
24
- };
25
- affected?: undefined;
26
- } | {
27
- affected: any;
28
- rest: never[];
29
- sql: {
30
- sql: any;
31
- values: any;
32
- };
33
- }>;
20
+ runQuery(): Promise<DetermineResponseDataType<G['RequestMethod'], G['RestTableInterface']>>;
34
21
  private validateSqlAllowList;
35
22
  }
package/dist/index.cjs.js CHANGED
@@ -3131,21 +3131,21 @@ var SqlExecutor = /** @class */ (function (_super) {
3131
3131
  case 3: return [4 /*yield*/, this.runQuery()];
3132
3132
  case 4:
3133
3133
  result = _b.sent();
3134
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3134
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3135
3135
  case 5:
3136
3136
  _b.sent();
3137
3137
  return [2 /*return*/, result];
3138
3138
  case 6: return [4 /*yield*/, this.runQuery()];
3139
3139
  case 7:
3140
3140
  result = _b.sent();
3141
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3141
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3142
3142
  case 8:
3143
3143
  _b.sent();
3144
3144
  return [2 /*return*/, result];
3145
3145
  case 9: return [4 /*yield*/, this.runQuery()];
3146
3146
  case 10:
3147
3147
  result = _b.sent();
3148
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3148
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3149
3149
  case 11:
3150
3150
  _b.sent();
3151
3151
  return [2 /*return*/, result];
@@ -3254,8 +3254,9 @@ var SqlExecutor = /** @class */ (function (_super) {
3254
3254
  var _a, _b;
3255
3255
  var request = this.request;
3256
3256
  if (this.config.requestMethod === C6Constants.POST) {
3257
- if (Array.isArray(request.dataInsertMultipleRows) && request.dataInsertMultipleRows.length > 0) {
3258
- return request.dataInsertMultipleRows[0];
3257
+ var insertRows = request.dataInsertMultipleRows;
3258
+ if (Array.isArray(insertRows) && insertRows.length > 0) {
3259
+ return insertRows[0];
3259
3260
  }
3260
3261
  if (C6Constants.INSERT in request) {
3261
3262
  return (_a = request[C6Constants.INSERT]) !== null && _a !== void 0 ? _a : {};
@@ -3316,34 +3317,94 @@ var SqlExecutor = /** @class */ (function (_super) {
3316
3317
  }
3317
3318
  return Object.keys(pkValues).length > 0 ? pkValues : null;
3318
3319
  };
3319
- SqlExecutor.prototype.broadcastWebsocketIfConfigured = function () {
3320
+ SqlExecutor.prototype.extractPrimaryKeyValuesFromData = function (data) {
3321
+ if (!data)
3322
+ return null;
3323
+ var row = Array.isArray(data) ? data[0] : data;
3324
+ if (!row || typeof row !== "object")
3325
+ return null;
3326
+ var pkShorts = this.config.restModel.PRIMARY_SHORT;
3327
+ var columns = this.config.restModel.COLUMNS;
3328
+ var pkValues = {};
3329
+ var _loop_2 = function (pk) {
3330
+ if (pk in row) {
3331
+ pkValues[pk] = row[pk];
3332
+ return "continue";
3333
+ }
3334
+ var fullKey = Object.keys(columns).find(function (key) { return columns[key] === pk; });
3335
+ if (fullKey && fullKey in row) {
3336
+ pkValues[pk] = row[fullKey];
3337
+ }
3338
+ };
3339
+ for (var _i = 0, pkShorts_1 = pkShorts; _i < pkShorts_1.length; _i++) {
3340
+ var pk = pkShorts_1[_i];
3341
+ _loop_2(pk);
3342
+ }
3343
+ if (pkShorts.length > 0 && Object.keys(pkValues).length < pkShorts.length) {
3344
+ return null;
3345
+ }
3346
+ return Object.keys(pkValues).length > 0 ? pkValues : null;
3347
+ };
3348
+ SqlExecutor.prototype.broadcastWebsocketIfConfigured = function (response) {
3320
3349
  return tslib.__awaiter(this, void 0, void 0, function () {
3321
- var broadcast, payload, error_1;
3350
+ var broadcast, normalizedRequest, pkShorts, columns, validColumns, responseRest, responsePrimaryKey, insertId, synthesizedRequest, now, synthesized, payload, error_1;
3322
3351
  var _a, _b;
3323
- return tslib.__generator(this, function (_c) {
3324
- switch (_c.label) {
3352
+ var _c, _d, _e;
3353
+ return tslib.__generator(this, function (_f) {
3354
+ switch (_f.label) {
3325
3355
  case 0:
3326
3356
  broadcast = this.config.websocketBroadcast;
3327
3357
  if (!broadcast || this.config.requestMethod === C6Constants.GET)
3328
3358
  return [2 /*return*/];
3359
+ normalizedRequest = this.normalizeRequestPayload(this.extractRequestBody());
3360
+ pkShorts = (_c = this.config.restModel.PRIMARY_SHORT) !== null && _c !== void 0 ? _c : [];
3361
+ columns = this.config.restModel.COLUMNS;
3362
+ validColumns = new Set(Object.values(columns));
3363
+ responseRest = response === null || response === void 0 ? void 0 : response.rest;
3364
+ responsePrimaryKey = this.extractPrimaryKeyValuesFromData(responseRest);
3365
+ if ((responseRest === null || (Array.isArray(responseRest) && responseRest.length === 0))
3366
+ && this.config.requestMethod === C6Constants.POST) {
3367
+ insertId = response === null || response === void 0 ? void 0 : response.insertId;
3368
+ if (insertId !== undefined && pkShorts.length === 1) {
3369
+ synthesizedRequest = tslib.__assign({}, normalizedRequest);
3370
+ now = new Date().toISOString();
3371
+ if (validColumns.has("changed_at") && synthesizedRequest.changed_at === undefined) {
3372
+ synthesizedRequest.changed_at = now;
3373
+ }
3374
+ if (validColumns.has("created_at") && synthesizedRequest.created_at === undefined) {
3375
+ synthesizedRequest.created_at = now;
3376
+ }
3377
+ if (validColumns.has("updated_at") && synthesizedRequest.updated_at === undefined) {
3378
+ synthesizedRequest.updated_at = now;
3379
+ }
3380
+ synthesized = tslib.__assign(tslib.__assign({}, synthesizedRequest), (_a = {}, _a[pkShorts[0]] = insertId, _a));
3381
+ // @ts-ignore - todo
3382
+ responseRest = [synthesized];
3383
+ responsePrimaryKey = (_b = {},
3384
+ _b[pkShorts[0]] = insertId,
3385
+ _b);
3386
+ }
3387
+ }
3329
3388
  payload = {
3330
3389
  REST: {
3331
3390
  TABLE_NAME: this.config.restModel.TABLE_NAME,
3332
- TABLE_PREFIX: (_b = (_a = this.config.C6) === null || _a === void 0 ? void 0 : _a.PREFIX) !== null && _b !== void 0 ? _b : "",
3391
+ TABLE_PREFIX: (_e = (_d = this.config.C6) === null || _d === void 0 ? void 0 : _d.PREFIX) !== null && _e !== void 0 ? _e : "",
3333
3392
  METHOD: this.config.requestMethod,
3334
- REQUEST: this.normalizeRequestPayload(this.extractRequestBody()),
3393
+ REQUEST: normalizedRequest,
3335
3394
  REQUEST_PRIMARY_KEY: this.extractPrimaryKeyValues(),
3395
+ RESPONSE: responseRest,
3396
+ RESPONSE_PRIMARY_KEY: responsePrimaryKey,
3336
3397
  },
3337
3398
  };
3338
- _c.label = 1;
3399
+ _f.label = 1;
3339
3400
  case 1:
3340
- _c.trys.push([1, 3, , 4]);
3401
+ _f.trys.push([1, 3, , 4]);
3341
3402
  return [4 /*yield*/, broadcast(payload)];
3342
3403
  case 2:
3343
- _c.sent();
3404
+ _f.sent();
3344
3405
  return [3 /*break*/, 4];
3345
3406
  case 3:
3346
- error_1 = _c.sent();
3407
+ error_1 = _f.sent();
3347
3408
  if (this.config.verbose) {
3348
3409
  console.error("[SQL EXECUTOR] websocketBroadcast failed", error_1);
3349
3410
  }
@@ -3404,7 +3465,8 @@ var SqlExecutor = /** @class */ (function (_super) {
3404
3465
  this.config.verbose && console.log("[SQL EXECUTOR] \u270F\uFE0F Rows affected:", result.affectedRows);
3405
3466
  return [2 /*return*/, {
3406
3467
  affected: result.affectedRows,
3407
- rest: [],
3468
+ insertId: result.insertId,
3469
+ rest: [], // TODO - remove rest empty array from non-GET responses?
3408
3470
  sql: { sql: sql, values: values }
3409
3471
  }];
3410
3472
  }