@carbonorm/carbonnode 6.0.2 → 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 -17
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +78 -17
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/types/ormInterfaces.d.ts +16 -4
  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 +16 -6
package/dist/index.esm.js CHANGED
@@ -581,7 +581,6 @@ var eFetchDependencies;
581
581
  eFetchDependencies[eFetchDependencies["RECURSIVE"] = 8] = "RECURSIVE";
582
582
  })(eFetchDependencies || (eFetchDependencies = {}));
583
583
 
584
- // Refined TypeScript types for CarbonORM
585
584
  var POST = 'POST';
586
585
  var PUT = 'PUT';
587
586
  var GET = 'GET';
@@ -3129,21 +3128,21 @@ var SqlExecutor = /** @class */ (function (_super) {
3129
3128
  case 3: return [4 /*yield*/, this.runQuery()];
3130
3129
  case 4:
3131
3130
  result = _b.sent();
3132
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3131
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3133
3132
  case 5:
3134
3133
  _b.sent();
3135
3134
  return [2 /*return*/, result];
3136
3135
  case 6: return [4 /*yield*/, this.runQuery()];
3137
3136
  case 7:
3138
3137
  result = _b.sent();
3139
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3138
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3140
3139
  case 8:
3141
3140
  _b.sent();
3142
3141
  return [2 /*return*/, result];
3143
3142
  case 9: return [4 /*yield*/, this.runQuery()];
3144
3143
  case 10:
3145
3144
  result = _b.sent();
3146
- return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
3145
+ return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
3147
3146
  case 11:
3148
3147
  _b.sent();
3149
3148
  return [2 /*return*/, result];
@@ -3252,8 +3251,9 @@ var SqlExecutor = /** @class */ (function (_super) {
3252
3251
  var _a, _b;
3253
3252
  var request = this.request;
3254
3253
  if (this.config.requestMethod === C6Constants.POST) {
3255
- if (Array.isArray(request.dataInsertMultipleRows) && request.dataInsertMultipleRows.length > 0) {
3256
- return request.dataInsertMultipleRows[0];
3254
+ var insertRows = request.dataInsertMultipleRows;
3255
+ if (Array.isArray(insertRows) && insertRows.length > 0) {
3256
+ return insertRows[0];
3257
3257
  }
3258
3258
  if (C6Constants.INSERT in request) {
3259
3259
  return (_a = request[C6Constants.INSERT]) !== null && _a !== void 0 ? _a : {};
@@ -3314,34 +3314,94 @@ var SqlExecutor = /** @class */ (function (_super) {
3314
3314
  }
3315
3315
  return Object.keys(pkValues).length > 0 ? pkValues : null;
3316
3316
  };
3317
- SqlExecutor.prototype.broadcastWebsocketIfConfigured = function () {
3317
+ SqlExecutor.prototype.extractPrimaryKeyValuesFromData = function (data) {
3318
+ if (!data)
3319
+ return null;
3320
+ var row = Array.isArray(data) ? data[0] : data;
3321
+ if (!row || typeof row !== "object")
3322
+ return null;
3323
+ var pkShorts = this.config.restModel.PRIMARY_SHORT;
3324
+ var columns = this.config.restModel.COLUMNS;
3325
+ var pkValues = {};
3326
+ var _loop_2 = function (pk) {
3327
+ if (pk in row) {
3328
+ pkValues[pk] = row[pk];
3329
+ return "continue";
3330
+ }
3331
+ var fullKey = Object.keys(columns).find(function (key) { return columns[key] === pk; });
3332
+ if (fullKey && fullKey in row) {
3333
+ pkValues[pk] = row[fullKey];
3334
+ }
3335
+ };
3336
+ for (var _i = 0, pkShorts_1 = pkShorts; _i < pkShorts_1.length; _i++) {
3337
+ var pk = pkShorts_1[_i];
3338
+ _loop_2(pk);
3339
+ }
3340
+ if (pkShorts.length > 0 && Object.keys(pkValues).length < pkShorts.length) {
3341
+ return null;
3342
+ }
3343
+ return Object.keys(pkValues).length > 0 ? pkValues : null;
3344
+ };
3345
+ SqlExecutor.prototype.broadcastWebsocketIfConfigured = function (response) {
3318
3346
  return __awaiter(this, void 0, void 0, function () {
3319
- var broadcast, payload, error_1;
3347
+ var broadcast, normalizedRequest, pkShorts, columns, validColumns, responseRest, responsePrimaryKey, insertId, synthesizedRequest, now, synthesized, payload, error_1;
3320
3348
  var _a, _b;
3321
- return __generator(this, function (_c) {
3322
- switch (_c.label) {
3349
+ var _c, _d, _e;
3350
+ return __generator(this, function (_f) {
3351
+ switch (_f.label) {
3323
3352
  case 0:
3324
3353
  broadcast = this.config.websocketBroadcast;
3325
3354
  if (!broadcast || this.config.requestMethod === C6Constants.GET)
3326
3355
  return [2 /*return*/];
3356
+ normalizedRequest = this.normalizeRequestPayload(this.extractRequestBody());
3357
+ pkShorts = (_c = this.config.restModel.PRIMARY_SHORT) !== null && _c !== void 0 ? _c : [];
3358
+ columns = this.config.restModel.COLUMNS;
3359
+ validColumns = new Set(Object.values(columns));
3360
+ responseRest = response === null || response === void 0 ? void 0 : response.rest;
3361
+ responsePrimaryKey = this.extractPrimaryKeyValuesFromData(responseRest);
3362
+ if ((responseRest === null || (Array.isArray(responseRest) && responseRest.length === 0))
3363
+ && this.config.requestMethod === C6Constants.POST) {
3364
+ insertId = response === null || response === void 0 ? void 0 : response.insertId;
3365
+ if (insertId !== undefined && pkShorts.length === 1) {
3366
+ synthesizedRequest = __assign({}, normalizedRequest);
3367
+ now = new Date().toISOString();
3368
+ if (validColumns.has("changed_at") && synthesizedRequest.changed_at === undefined) {
3369
+ synthesizedRequest.changed_at = now;
3370
+ }
3371
+ if (validColumns.has("created_at") && synthesizedRequest.created_at === undefined) {
3372
+ synthesizedRequest.created_at = now;
3373
+ }
3374
+ if (validColumns.has("updated_at") && synthesizedRequest.updated_at === undefined) {
3375
+ synthesizedRequest.updated_at = now;
3376
+ }
3377
+ synthesized = __assign(__assign({}, synthesizedRequest), (_a = {}, _a[pkShorts[0]] = insertId, _a));
3378
+ // @ts-ignore - todo
3379
+ responseRest = [synthesized];
3380
+ responsePrimaryKey = (_b = {},
3381
+ _b[pkShorts[0]] = insertId,
3382
+ _b);
3383
+ }
3384
+ }
3327
3385
  payload = {
3328
3386
  REST: {
3329
3387
  TABLE_NAME: this.config.restModel.TABLE_NAME,
3330
- TABLE_PREFIX: (_b = (_a = this.config.C6) === null || _a === void 0 ? void 0 : _a.PREFIX) !== null && _b !== void 0 ? _b : "",
3388
+ TABLE_PREFIX: (_e = (_d = this.config.C6) === null || _d === void 0 ? void 0 : _d.PREFIX) !== null && _e !== void 0 ? _e : "",
3331
3389
  METHOD: this.config.requestMethod,
3332
- REQUEST: this.normalizeRequestPayload(this.extractRequestBody()),
3390
+ REQUEST: normalizedRequest,
3333
3391
  REQUEST_PRIMARY_KEY: this.extractPrimaryKeyValues(),
3392
+ RESPONSE: responseRest,
3393
+ RESPONSE_PRIMARY_KEY: responsePrimaryKey,
3334
3394
  },
3335
3395
  };
3336
- _c.label = 1;
3396
+ _f.label = 1;
3337
3397
  case 1:
3338
- _c.trys.push([1, 3, , 4]);
3398
+ _f.trys.push([1, 3, , 4]);
3339
3399
  return [4 /*yield*/, broadcast(payload)];
3340
3400
  case 2:
3341
- _c.sent();
3401
+ _f.sent();
3342
3402
  return [3 /*break*/, 4];
3343
3403
  case 3:
3344
- error_1 = _c.sent();
3404
+ error_1 = _f.sent();
3345
3405
  if (this.config.verbose) {
3346
3406
  console.error("[SQL EXECUTOR] websocketBroadcast failed", error_1);
3347
3407
  }
@@ -3402,7 +3462,8 @@ var SqlExecutor = /** @class */ (function (_super) {
3402
3462
  this.config.verbose && console.log("[SQL EXECUTOR] \u270F\uFE0F Rows affected:", result.affectedRows);
3403
3463
  return [2 /*return*/, {
3404
3464
  affected: result.affectedRows,
3405
- rest: [],
3465
+ insertId: result.insertId,
3466
+ rest: [], // TODO - remove rest empty array from non-GET responses?
3406
3467
  sql: { sql: sql, values: values }
3407
3468
  }];
3408
3469
  }