@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.
- package/dist/executors/SqlExecutor.d.ts +2 -15
- package/dist/index.cjs.js +78 -17
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +78 -17
- package/dist/index.esm.js.map +1 -1
- package/dist/types/ormInterfaces.d.ts +16 -4
- 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 +16 -6
|
@@ -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
|
@@ -584,7 +584,6 @@ exports.eFetchDependencies = void 0;
|
|
|
584
584
|
eFetchDependencies[eFetchDependencies["RECURSIVE"] = 8] = "RECURSIVE";
|
|
585
585
|
})(exports.eFetchDependencies || (exports.eFetchDependencies = {}));
|
|
586
586
|
|
|
587
|
-
// Refined TypeScript types for CarbonORM
|
|
588
587
|
var POST = 'POST';
|
|
589
588
|
var PUT = 'PUT';
|
|
590
589
|
var GET = 'GET';
|
|
@@ -3132,21 +3131,21 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
3132
3131
|
case 3: return [4 /*yield*/, this.runQuery()];
|
|
3133
3132
|
case 4:
|
|
3134
3133
|
result = _b.sent();
|
|
3135
|
-
return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
|
|
3134
|
+
return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
|
|
3136
3135
|
case 5:
|
|
3137
3136
|
_b.sent();
|
|
3138
3137
|
return [2 /*return*/, result];
|
|
3139
3138
|
case 6: return [4 /*yield*/, this.runQuery()];
|
|
3140
3139
|
case 7:
|
|
3141
3140
|
result = _b.sent();
|
|
3142
|
-
return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
|
|
3141
|
+
return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
|
|
3143
3142
|
case 8:
|
|
3144
3143
|
_b.sent();
|
|
3145
3144
|
return [2 /*return*/, result];
|
|
3146
3145
|
case 9: return [4 /*yield*/, this.runQuery()];
|
|
3147
3146
|
case 10:
|
|
3148
3147
|
result = _b.sent();
|
|
3149
|
-
return [4 /*yield*/, this.broadcastWebsocketIfConfigured()];
|
|
3148
|
+
return [4 /*yield*/, this.broadcastWebsocketIfConfigured(result)];
|
|
3150
3149
|
case 11:
|
|
3151
3150
|
_b.sent();
|
|
3152
3151
|
return [2 /*return*/, result];
|
|
@@ -3255,8 +3254,9 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
3255
3254
|
var _a, _b;
|
|
3256
3255
|
var request = this.request;
|
|
3257
3256
|
if (this.config.requestMethod === C6Constants.POST) {
|
|
3258
|
-
|
|
3259
|
-
|
|
3257
|
+
var insertRows = request.dataInsertMultipleRows;
|
|
3258
|
+
if (Array.isArray(insertRows) && insertRows.length > 0) {
|
|
3259
|
+
return insertRows[0];
|
|
3260
3260
|
}
|
|
3261
3261
|
if (C6Constants.INSERT in request) {
|
|
3262
3262
|
return (_a = request[C6Constants.INSERT]) !== null && _a !== void 0 ? _a : {};
|
|
@@ -3317,34 +3317,94 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
3317
3317
|
}
|
|
3318
3318
|
return Object.keys(pkValues).length > 0 ? pkValues : null;
|
|
3319
3319
|
};
|
|
3320
|
-
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) {
|
|
3321
3349
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
3322
|
-
var broadcast, payload, error_1;
|
|
3350
|
+
var broadcast, normalizedRequest, pkShorts, columns, validColumns, responseRest, responsePrimaryKey, insertId, synthesizedRequest, now, synthesized, payload, error_1;
|
|
3323
3351
|
var _a, _b;
|
|
3324
|
-
|
|
3325
|
-
|
|
3352
|
+
var _c, _d, _e;
|
|
3353
|
+
return tslib.__generator(this, function (_f) {
|
|
3354
|
+
switch (_f.label) {
|
|
3326
3355
|
case 0:
|
|
3327
3356
|
broadcast = this.config.websocketBroadcast;
|
|
3328
3357
|
if (!broadcast || this.config.requestMethod === C6Constants.GET)
|
|
3329
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
|
+
}
|
|
3330
3388
|
payload = {
|
|
3331
3389
|
REST: {
|
|
3332
3390
|
TABLE_NAME: this.config.restModel.TABLE_NAME,
|
|
3333
|
-
TABLE_PREFIX: (
|
|
3391
|
+
TABLE_PREFIX: (_e = (_d = this.config.C6) === null || _d === void 0 ? void 0 : _d.PREFIX) !== null && _e !== void 0 ? _e : "",
|
|
3334
3392
|
METHOD: this.config.requestMethod,
|
|
3335
|
-
REQUEST:
|
|
3393
|
+
REQUEST: normalizedRequest,
|
|
3336
3394
|
REQUEST_PRIMARY_KEY: this.extractPrimaryKeyValues(),
|
|
3395
|
+
RESPONSE: responseRest,
|
|
3396
|
+
RESPONSE_PRIMARY_KEY: responsePrimaryKey,
|
|
3337
3397
|
},
|
|
3338
3398
|
};
|
|
3339
|
-
|
|
3399
|
+
_f.label = 1;
|
|
3340
3400
|
case 1:
|
|
3341
|
-
|
|
3401
|
+
_f.trys.push([1, 3, , 4]);
|
|
3342
3402
|
return [4 /*yield*/, broadcast(payload)];
|
|
3343
3403
|
case 2:
|
|
3344
|
-
|
|
3404
|
+
_f.sent();
|
|
3345
3405
|
return [3 /*break*/, 4];
|
|
3346
3406
|
case 3:
|
|
3347
|
-
error_1 =
|
|
3407
|
+
error_1 = _f.sent();
|
|
3348
3408
|
if (this.config.verbose) {
|
|
3349
3409
|
console.error("[SQL EXECUTOR] websocketBroadcast failed", error_1);
|
|
3350
3410
|
}
|
|
@@ -3405,7 +3465,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
3405
3465
|
this.config.verbose && console.log("[SQL EXECUTOR] \u270F\uFE0F Rows affected:", result.affectedRows);
|
|
3406
3466
|
return [2 /*return*/, {
|
|
3407
3467
|
affected: result.affectedRows,
|
|
3408
|
-
|
|
3468
|
+
insertId: result.insertId,
|
|
3469
|
+
rest: [], // TODO - remove rest empty array from non-GET responses?
|
|
3409
3470
|
sql: { sql: sql, values: values }
|
|
3410
3471
|
}];
|
|
3411
3472
|
}
|