@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.
- package/dist/executors/SqlExecutor.d.ts +2 -15
- package/dist/index.cjs.js +78 -16
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +78 -16
- package/dist/index.esm.js.map +1 -1
- package/dist/types/ormInterfaces.d.ts +14 -3
- package/package.json +2 -2
- 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.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +4 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.address.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +6 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.category.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +6 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.film.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +3 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.delete.json +1 -0
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +4 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +2 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
- package/src/executors/SqlExecutor.ts +98 -21
- 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
|
-
|
|
3258
|
-
|
|
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.
|
|
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
|
-
|
|
3324
|
-
|
|
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: (
|
|
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:
|
|
3393
|
+
REQUEST: normalizedRequest,
|
|
3335
3394
|
REQUEST_PRIMARY_KEY: this.extractPrimaryKeyValues(),
|
|
3395
|
+
RESPONSE: responseRest,
|
|
3396
|
+
RESPONSE_PRIMARY_KEY: responsePrimaryKey,
|
|
3336
3397
|
},
|
|
3337
3398
|
};
|
|
3338
|
-
|
|
3399
|
+
_f.label = 1;
|
|
3339
3400
|
case 1:
|
|
3340
|
-
|
|
3401
|
+
_f.trys.push([1, 3, , 4]);
|
|
3341
3402
|
return [4 /*yield*/, broadcast(payload)];
|
|
3342
3403
|
case 2:
|
|
3343
|
-
|
|
3404
|
+
_f.sent();
|
|
3344
3405
|
return [3 /*break*/, 4];
|
|
3345
3406
|
case 3:
|
|
3346
|
-
error_1 =
|
|
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
|
-
|
|
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
|
}
|