nicot 1.4.1 → 1.4.3
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/README-CN.md +4 -3
- package/README.md +5 -4
- package/dist/index.cjs +151 -68
- package/dist/index.cjs.map +4 -4
- package/dist/index.mjs +102 -22
- package/dist/index.mjs.map +4 -4
- package/dist/src/decorators/property.d.ts +2 -0
- package/dist/src/decorators/query.d.ts +12 -7
- package/dist/src/restful.d.ts +3 -3
- package/dist/src/utility/base64-binary.d.ts +11 -5
- package/dist/src/utility/get-api-property.d.ts +3 -0
- package/dist/src/utility/patch-column-in-get.d.ts +1 -1
- package/dist/src/utility/swagger-decorators.d.ts +23 -0
- package/package.json +3 -2
package/README-CN.md
CHANGED
|
@@ -207,8 +207,9 @@ OpenAPI 层面统统“伪装成”一个普通的 base64 `string` 字段:
|
|
|
207
207
|
|
|
208
208
|
- 实体属性类型是 `string`(base64 字符串)。
|
|
209
209
|
- OpenAPI 中以 `{ type: String, format: 'byte' }` 展示。
|
|
210
|
-
- 通过 TypeORM `ValueTransformer`:写库时把 base64 字符串解码成
|
|
211
|
-
|
|
210
|
+
- 通过 TypeORM `ValueTransformer`:写库时把 base64 字符串解码成
|
|
211
|
+
PostgreSQL 安全的 bytea 参数(默认列类型 `bytea`),读取时再编码回
|
|
212
|
+
base64 字符串。
|
|
212
213
|
|
|
213
214
|
```ts
|
|
214
215
|
@Entity()
|
|
@@ -229,7 +230,7 @@ export class Attachment extends IdBase() {
|
|
|
229
230
|
**查询。** base64 二进制列本身就是可查询字段(不需要 `GetMutator`)。想在
|
|
230
231
|
`findAll` 中按它过滤,给它挂上 `@QueryBase64Equal()`(或
|
|
231
232
|
`@QueryBase64NotEqual()`)即可:传入的 base64 查询串会在绑定参数前被解码成
|
|
232
|
-
|
|
233
|
+
PostgreSQL 安全的 bytea 参数,从而与列里存的二进制匹配。
|
|
233
234
|
|
|
234
235
|
```ts
|
|
235
236
|
@Base64BinaryColumn()
|
package/README.md
CHANGED
|
@@ -309,8 +309,9 @@ entity / DTO / OpenAPI surface all behave like a plain **base64 `string`**:
|
|
|
309
309
|
|
|
310
310
|
- The TS property type is `string` (a base64 string).
|
|
311
311
|
- It is exposed to OpenAPI as `{ type: String, format: 'byte' }`.
|
|
312
|
-
- A TypeORM `ValueTransformer` decodes the base64 string into a
|
|
313
|
-
way into the DB (`bytea` by default) and encodes it
|
|
312
|
+
- A TypeORM `ValueTransformer` decodes the base64 string into a PostgreSQL-safe
|
|
313
|
+
bytea parameter on the way into the DB (`bytea` by default) and encodes it
|
|
314
|
+
back to base64 on read.
|
|
314
315
|
|
|
315
316
|
```ts
|
|
316
317
|
@Entity()
|
|
@@ -333,8 +334,8 @@ API.
|
|
|
333
334
|
**Querying.** A base64 binary column is a normal queryable field (no
|
|
334
335
|
`GetMutator` required). To filter on it in `findAll`, attach
|
|
335
336
|
`@QueryBase64Equal()` (or `@QueryBase64NotEqual()`); the incoming base64 query
|
|
336
|
-
string is decoded to a
|
|
337
|
-
binary stored in the column:
|
|
337
|
+
string is decoded to a PostgreSQL-safe bytea parameter right before it is bound,
|
|
338
|
+
so it matches the binary stored in the column:
|
|
338
339
|
|
|
339
340
|
```ts
|
|
340
341
|
@Base64BinaryColumn()
|
package/dist/index.cjs
CHANGED
|
@@ -665,7 +665,10 @@ __export(index_exports, {
|
|
|
665
665
|
applyQueryPropertyLike: () => applyQueryPropertyLike,
|
|
666
666
|
applyQueryPropertySearch: () => applyQueryPropertySearch,
|
|
667
667
|
applyQueryPropertyZeroNullable: () => applyQueryPropertyZeroNullable,
|
|
668
|
+
base64OrBinaryToBuffer: () => base64OrBinaryToBuffer,
|
|
669
|
+
base64OrBinaryToDatabaseValue: () => base64OrBinaryToDatabaseValue,
|
|
668
670
|
binaryToBuffer: () => binaryToBuffer,
|
|
671
|
+
binaryToPostgresByteaHex: () => binaryToPostgresByteaHex,
|
|
669
672
|
createGetMutator: () => createGetMutator,
|
|
670
673
|
createQueryArrayify: () => createQueryArrayify,
|
|
671
674
|
createQueryBase64Operator: () => createQueryBase64Operator,
|
|
@@ -935,15 +938,31 @@ function binaryToBuffer(value) {
|
|
|
935
938
|
}
|
|
936
939
|
return Buffer.from(new Uint8Array(value));
|
|
937
940
|
}
|
|
941
|
+
function binaryToPostgresByteaHex(value) {
|
|
942
|
+
return `\\x${binaryToBuffer(value).toString("hex")}`;
|
|
943
|
+
}
|
|
944
|
+
function base64OrBinaryToBuffer(value) {
|
|
945
|
+
if (isBinaryLike(value)) {
|
|
946
|
+
return binaryToBuffer(value);
|
|
947
|
+
}
|
|
948
|
+
return Buffer.from(String(value), "base64");
|
|
949
|
+
}
|
|
950
|
+
function base64OrBinaryToDatabaseValue(value, storage = "postgres-bytea") {
|
|
951
|
+
const buffer = base64OrBinaryToBuffer(value);
|
|
952
|
+
if (storage === "postgres-bytea") {
|
|
953
|
+
return binaryToPostgresByteaHex(buffer);
|
|
954
|
+
}
|
|
955
|
+
return buffer;
|
|
956
|
+
}
|
|
938
957
|
var Base64BinaryTransformer = class {
|
|
958
|
+
constructor(storage = "postgres-bytea") {
|
|
959
|
+
this.storage = storage;
|
|
960
|
+
}
|
|
939
961
|
to(entValue) {
|
|
940
962
|
if (entValue == null) {
|
|
941
963
|
return entValue;
|
|
942
964
|
}
|
|
943
|
-
|
|
944
|
-
return binaryToBuffer(entValue);
|
|
945
|
-
}
|
|
946
|
-
return Buffer.from(String(entValue), "base64");
|
|
965
|
+
return base64OrBinaryToDatabaseValue(entValue, this.storage);
|
|
947
966
|
}
|
|
948
967
|
from(dbValue) {
|
|
949
968
|
if (dbValue == null) {
|
|
@@ -952,7 +971,11 @@ var Base64BinaryTransformer = class {
|
|
|
952
971
|
if (isBinaryLike(dbValue)) {
|
|
953
972
|
return binaryToBuffer(dbValue).toString("base64");
|
|
954
973
|
}
|
|
955
|
-
|
|
974
|
+
const text = String(dbValue);
|
|
975
|
+
if (/^\\x[0-9a-f]*$/i.test(text)) {
|
|
976
|
+
return Buffer.from(text.slice(2), "hex").toString("base64");
|
|
977
|
+
}
|
|
978
|
+
return Buffer.from(text).toString("base64");
|
|
956
979
|
}
|
|
957
980
|
};
|
|
958
981
|
|
|
@@ -1195,7 +1218,9 @@ var Base64BinaryColumn = (options = {}) => (0, import_nesties4.MergePropertyDeco
|
|
|
1195
1218
|
(0, import_typeorm.Column)(options.columnType || "bytea", {
|
|
1196
1219
|
...columnDecoratorOptions(options),
|
|
1197
1220
|
default: void 0,
|
|
1198
|
-
transformer: new Base64BinaryTransformer(
|
|
1221
|
+
transformer: new Base64BinaryTransformer(
|
|
1222
|
+
options.binaryStorage ?? (options.columnType && options.columnType !== "bytea" ? "binary" : "postgres-bytea")
|
|
1223
|
+
)
|
|
1199
1224
|
}),
|
|
1200
1225
|
IsBase64OrBinary(),
|
|
1201
1226
|
validatorDecorator(options),
|
|
@@ -1424,19 +1449,20 @@ var createQueryOperatorArrayify = (operator, singleFallback) => createQueryArray
|
|
|
1424
1449
|
);
|
|
1425
1450
|
var QueryIn = createQueryOperatorArrayify("IN", "=");
|
|
1426
1451
|
var QueryNotIn = createQueryOperatorArrayify("NOT IN", "!=");
|
|
1427
|
-
var
|
|
1452
|
+
var normalizeQueryBase64Options = (fieldOrOptions) => typeof fieldOrOptions === "string" ? { field: fieldOrOptions } : fieldOrOptions ?? {};
|
|
1453
|
+
var toBase64QueryValue = (value, storage = "postgres-bytea") => {
|
|
1428
1454
|
if (value == null) {
|
|
1429
1455
|
return value;
|
|
1430
1456
|
}
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1457
|
+
return base64OrBinaryToDatabaseValue(value, storage);
|
|
1458
|
+
};
|
|
1459
|
+
var createQueryBase64Operator = (operator) => (fieldOrOptions) => {
|
|
1460
|
+
const options = normalizeQueryBase64Options(fieldOrOptions);
|
|
1461
|
+
return QueryWrap((entityExpr, varExpr, info) => {
|
|
1462
|
+
info.mutateValue(toBase64QueryValue(info.value, options.binaryStorage));
|
|
1463
|
+
return `${entityExpr} ${operator} ${varExpr}`;
|
|
1464
|
+
}, options.field);
|
|
1435
1465
|
};
|
|
1436
|
-
var createQueryBase64Operator = (operator) => (field) => QueryWrap((entityExpr, varExpr, info) => {
|
|
1437
|
-
info.mutateValue(toBase64QueryBuffer(info.value));
|
|
1438
|
-
return `${entityExpr} ${operator} ${varExpr}`;
|
|
1439
|
-
}, field);
|
|
1440
1466
|
var QueryBase64Equal = createQueryBase64Operator("=");
|
|
1441
1467
|
var QueryBase64NotEqual = createQueryBase64Operator("!=");
|
|
1442
1468
|
var QueryFullText = (options = {}) => {
|
|
@@ -3067,10 +3093,9 @@ function CrudService(entityClass, crudOptions = {}) {
|
|
|
3067
3093
|
|
|
3068
3094
|
// src/restful.ts
|
|
3069
3095
|
var import_common3 = require("@nestjs/common");
|
|
3070
|
-
var
|
|
3096
|
+
var import_nesties12 = require("nesties");
|
|
3071
3097
|
var import_swagger6 = require("@nestjs/swagger");
|
|
3072
3098
|
var import_lodash6 = __toESM(require("lodash"));
|
|
3073
|
-
var import_nesties14 = require("nesties");
|
|
3074
3099
|
|
|
3075
3100
|
// src/bases/base-restful-controller.ts
|
|
3076
3101
|
var RestfulMethods = [
|
|
@@ -3136,9 +3161,64 @@ var OmitTypeExclude = (cl, keys) => {
|
|
|
3136
3161
|
};
|
|
3137
3162
|
|
|
3138
3163
|
// src/utility/patch-column-in-get.ts
|
|
3139
|
-
var import_nesties12 = require("nesties");
|
|
3140
3164
|
var import_lodash5 = __toESM(require("lodash"));
|
|
3141
|
-
|
|
3165
|
+
|
|
3166
|
+
// src/utility/swagger-decorators.ts
|
|
3167
|
+
var DECORATORS_PREFIX = "swagger";
|
|
3168
|
+
var FALLBACK_DECORATORS = {
|
|
3169
|
+
API_OPERATION: `${DECORATORS_PREFIX}/apiOperation`,
|
|
3170
|
+
API_RESPONSE: `${DECORATORS_PREFIX}/apiResponse`,
|
|
3171
|
+
API_PRODUCES: `${DECORATORS_PREFIX}/apiProduces`,
|
|
3172
|
+
API_CONSUMES: `${DECORATORS_PREFIX}/apiConsumes`,
|
|
3173
|
+
API_TAGS: `${DECORATORS_PREFIX}/apiUseTags`,
|
|
3174
|
+
API_WEBHOOK: `${DECORATORS_PREFIX}/apiWebhook`,
|
|
3175
|
+
API_CALLBACKS: `${DECORATORS_PREFIX}/apiCallbacks`,
|
|
3176
|
+
API_PARAMETERS: `${DECORATORS_PREFIX}/apiParameters`,
|
|
3177
|
+
API_HEADERS: `${DECORATORS_PREFIX}/apiHeaders`,
|
|
3178
|
+
API_MODEL_PROPERTIES: `${DECORATORS_PREFIX}/apiModelProperties`,
|
|
3179
|
+
API_MODEL_PROPERTIES_ARRAY: `${DECORATORS_PREFIX}/apiModelPropertiesArray`,
|
|
3180
|
+
API_SECURITY: `${DECORATORS_PREFIX}/apiSecurity`,
|
|
3181
|
+
API_EXCLUDE_ENDPOINT: `${DECORATORS_PREFIX}/apiExcludeEndpoint`,
|
|
3182
|
+
API_INCLUDE_ENDPOINT: `${DECORATORS_PREFIX}/apiIncludeEndpoint`,
|
|
3183
|
+
API_EXCLUDE_CONTROLLER: `${DECORATORS_PREFIX}/apiExcludeController`,
|
|
3184
|
+
API_EXTRA_MODELS: `${DECORATORS_PREFIX}/apiExtraModels`,
|
|
3185
|
+
API_EXTENSION: `${DECORATORS_PREFIX}/apiExtension`,
|
|
3186
|
+
API_SCHEMA: `${DECORATORS_PREFIX}/apiSchema`,
|
|
3187
|
+
API_DEFAULT_GETTER: `${DECORATORS_PREFIX}/apiDefaultGetter`,
|
|
3188
|
+
API_LINK: `${DECORATORS_PREFIX}/apiLink`
|
|
3189
|
+
};
|
|
3190
|
+
function loadSwaggerDecorators() {
|
|
3191
|
+
try {
|
|
3192
|
+
const req = typeof require === "function" ? require : void 0;
|
|
3193
|
+
const decorators = req?.("@nestjs/swagger/dist/constants")?.DECORATORS;
|
|
3194
|
+
if (decorators) {
|
|
3195
|
+
return {
|
|
3196
|
+
...FALLBACK_DECORATORS,
|
|
3197
|
+
...decorators
|
|
3198
|
+
};
|
|
3199
|
+
}
|
|
3200
|
+
} catch {
|
|
3201
|
+
}
|
|
3202
|
+
return FALLBACK_DECORATORS;
|
|
3203
|
+
}
|
|
3204
|
+
var DECORATORS = loadSwaggerDecorators();
|
|
3205
|
+
|
|
3206
|
+
// src/utility/get-api-property.ts
|
|
3207
|
+
var getApiProperty = (cls, key) => {
|
|
3208
|
+
let proto = cls.prototype;
|
|
3209
|
+
while (proto && proto !== Object.prototype) {
|
|
3210
|
+
const meta = Reflect.getMetadata(
|
|
3211
|
+
DECORATORS.API_MODEL_PROPERTIES,
|
|
3212
|
+
proto,
|
|
3213
|
+
key
|
|
3214
|
+
);
|
|
3215
|
+
if (meta) return meta;
|
|
3216
|
+
proto = Object.getPrototypeOf(proto);
|
|
3217
|
+
}
|
|
3218
|
+
return {};
|
|
3219
|
+
};
|
|
3220
|
+
|
|
3221
|
+
// src/utility/patch-column-in-get.ts
|
|
3142
3222
|
var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
|
|
3143
3223
|
const omit2 = new Set(fieldsToOmit);
|
|
3144
3224
|
const useCl = originalCl || cl;
|
|
@@ -3146,10 +3226,10 @@ var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
|
|
|
3146
3226
|
(f) => !omit2.has(f)
|
|
3147
3227
|
);
|
|
3148
3228
|
for (const field of mutateFields) {
|
|
3149
|
-
const originalApiProp =
|
|
3229
|
+
const originalApiProp = getApiProperty(originalCl, field);
|
|
3150
3230
|
const info = reflector.get("getMutator", useCl, field);
|
|
3151
3231
|
Reflect.defineMetadata(
|
|
3152
|
-
|
|
3232
|
+
DECORATORS.API_MODEL_PROPERTIES,
|
|
3153
3233
|
{
|
|
3154
3234
|
...originalApiProp,
|
|
3155
3235
|
type: String,
|
|
@@ -3168,9 +3248,9 @@ var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
|
|
|
3168
3248
|
mutateFields
|
|
3169
3249
|
);
|
|
3170
3250
|
for (const field of queryableFieldsRemaining) {
|
|
3171
|
-
const originalApiProp =
|
|
3251
|
+
const originalApiProp = getApiProperty(originalCl, field);
|
|
3172
3252
|
Reflect.defineMetadata(
|
|
3173
|
-
|
|
3253
|
+
DECORATORS.API_MODEL_PROPERTIES,
|
|
3174
3254
|
{
|
|
3175
3255
|
...originalApiProp,
|
|
3176
3256
|
default: void 0
|
|
@@ -3379,7 +3459,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3379
3459
|
]);
|
|
3380
3460
|
}
|
|
3381
3461
|
get createDto() {
|
|
3382
|
-
return (0,
|
|
3462
|
+
return (0, import_nesties12.RenameClass)(
|
|
3383
3463
|
OmitTypeExclude(this.entityClass, this.fieldsInCreateToOmit),
|
|
3384
3464
|
`Create${this.entityClassName}Dto`
|
|
3385
3465
|
);
|
|
@@ -3394,7 +3474,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3394
3474
|
]);
|
|
3395
3475
|
}
|
|
3396
3476
|
get updateDto() {
|
|
3397
|
-
return (0,
|
|
3477
|
+
return (0, import_nesties12.RenameClass)(
|
|
3398
3478
|
(0, import_swagger6.PartialType)(OmitTypeExclude(this.entityClass, this.fieldsInUpdateToOmit)),
|
|
3399
3479
|
`Update${this.entityClassName}Dto`
|
|
3400
3480
|
);
|
|
@@ -3409,7 +3489,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3409
3489
|
]);
|
|
3410
3490
|
}
|
|
3411
3491
|
get upsertDto() {
|
|
3412
|
-
return (0,
|
|
3492
|
+
return (0, import_nesties12.RenameClass)(
|
|
3413
3493
|
OmitTypeExclude(this.entityClass, this.fieldsInUpsertToOmit),
|
|
3414
3494
|
`Upsert${this.entityClassName}Dto`
|
|
3415
3495
|
);
|
|
@@ -3455,10 +3535,10 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3455
3535
|
if (this.options.skipNonQueryableFields) {
|
|
3456
3536
|
cl = (0, import_swagger6.PickType)(cl, this.queryableFields);
|
|
3457
3537
|
}
|
|
3458
|
-
return (0,
|
|
3538
|
+
return (0, import_nesties12.RenameClass)(cl, `Find${this.entityClassName}Dto`);
|
|
3459
3539
|
}
|
|
3460
3540
|
get findAllCursorPaginatedDto() {
|
|
3461
|
-
return (0,
|
|
3541
|
+
return (0, import_nesties12.RenameClass)(
|
|
3462
3542
|
(0, import_swagger6.IntersectionType)(
|
|
3463
3543
|
OmitTypeExclude(this.findAllDto, ["pageCount"]),
|
|
3464
3544
|
CursorPaginationDto
|
|
@@ -3486,7 +3566,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3486
3566
|
if (outputFieldsToOmit.has(relation.propertyName)) continue;
|
|
3487
3567
|
if (nonTransformableTypes.has(relation.propertyClass)) continue;
|
|
3488
3568
|
const replace = (useClass) => {
|
|
3489
|
-
const oldApiProperty =
|
|
3569
|
+
const oldApiProperty = getApiProperty(
|
|
3490
3570
|
this.entityClass,
|
|
3491
3571
|
relation.propertyName
|
|
3492
3572
|
);
|
|
@@ -3529,13 +3609,13 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3529
3609
|
"notRequiredButHasDefault"
|
|
3530
3610
|
).filter((f) => !outputFieldsToOmit.has(f));
|
|
3531
3611
|
for (const field of notRequiredButHasDefaultFields) {
|
|
3532
|
-
const oldApiProperty =
|
|
3612
|
+
const oldApiProperty = getApiProperty(resultDto, field);
|
|
3533
3613
|
(0, import_swagger6.ApiProperty)({
|
|
3534
3614
|
...oldApiProperty,
|
|
3535
3615
|
required: true
|
|
3536
3616
|
})(resultDto.prototype, field);
|
|
3537
3617
|
}
|
|
3538
|
-
const res = (0,
|
|
3618
|
+
const res = (0, import_nesties12.RenameClass)(
|
|
3539
3619
|
resultDto,
|
|
3540
3620
|
`${this.entityClassName}ResultDto`
|
|
3541
3621
|
);
|
|
@@ -3546,7 +3626,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3546
3626
|
return res;
|
|
3547
3627
|
}
|
|
3548
3628
|
get entityCreateResultDto() {
|
|
3549
|
-
return (0,
|
|
3629
|
+
return (0, import_nesties12.RenameClass)(
|
|
3550
3630
|
(0, import_swagger6.OmitType)(this.entityResultDto, [
|
|
3551
3631
|
...getTypeormRelations(this.entityClass).map(
|
|
3552
3632
|
(r) => r.propertyName
|
|
@@ -3561,7 +3641,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3561
3641
|
);
|
|
3562
3642
|
}
|
|
3563
3643
|
get entityUpsertResultDto() {
|
|
3564
|
-
return (0,
|
|
3644
|
+
return (0, import_nesties12.RenameClass)(
|
|
3565
3645
|
(0, import_swagger6.OmitType)(this.entityResultDto, [
|
|
3566
3646
|
...this.options.upsertIncludeRelations ? [] : getTypeormRelations(this.entityClass).map(
|
|
3567
3647
|
(r) => r.propertyName
|
|
@@ -3576,19 +3656,19 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3576
3656
|
);
|
|
3577
3657
|
}
|
|
3578
3658
|
get entityReturnMessageDto() {
|
|
3579
|
-
return (0,
|
|
3659
|
+
return (0, import_nesties12.ReturnMessageDto)(this.entityResultDto);
|
|
3580
3660
|
}
|
|
3581
3661
|
get entityCreateReturnMessageDto() {
|
|
3582
|
-
return (0,
|
|
3662
|
+
return (0, import_nesties12.ReturnMessageDto)(this.entityCreateResultDto);
|
|
3583
3663
|
}
|
|
3584
3664
|
get entityArrayReturnMessageDto() {
|
|
3585
|
-
return (0,
|
|
3665
|
+
return (0, import_nesties12.PaginatedReturnMessageDto)(this.entityResultDto);
|
|
3586
3666
|
}
|
|
3587
3667
|
get entityCursorPaginationReturnMessageDto() {
|
|
3588
3668
|
return CursorPaginationReturnMessageDto(this.entityResultDto);
|
|
3589
3669
|
}
|
|
3590
3670
|
get importReturnMessageDto() {
|
|
3591
|
-
return (0,
|
|
3671
|
+
return (0, import_nesties12.ReturnMessageDto)([ImportEntryDto(this.entityCreateResultDto)]);
|
|
3592
3672
|
}
|
|
3593
3673
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
3594
3674
|
get idType() {
|
|
@@ -3605,7 +3685,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3605
3685
|
}
|
|
3606
3686
|
}
|
|
3607
3687
|
create(extras = {}) {
|
|
3608
|
-
return (0,
|
|
3688
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3609
3689
|
this.usePrefix(import_common3.Post, extras.prefix),
|
|
3610
3690
|
(0, import_common3.HttpCode)(200),
|
|
3611
3691
|
(0, import_swagger6.ApiOperation)({
|
|
@@ -3614,11 +3694,11 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3614
3694
|
}),
|
|
3615
3695
|
(0, import_swagger6.ApiBody)({ type: this.createDto }),
|
|
3616
3696
|
(0, import_swagger6.ApiOkResponse)({ type: this.entityCreateReturnMessageDto }),
|
|
3617
|
-
(0,
|
|
3697
|
+
(0, import_nesties12.ApiError)(400, `The ${this.entityClassName} is not valid`)
|
|
3618
3698
|
]);
|
|
3619
3699
|
}
|
|
3620
3700
|
createParam() {
|
|
3621
|
-
return (0, import_common3.Body)((0,
|
|
3701
|
+
return (0, import_common3.Body)((0, import_nesties12.DataPipe)(), OmitPipe(this.fieldsInCreateToOmit));
|
|
3622
3702
|
}
|
|
3623
3703
|
isUpsertable() {
|
|
3624
3704
|
return !!reflector.get("upsertableEntity", this.entityClass);
|
|
@@ -3629,7 +3709,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3629
3709
|
`Entity ${this.entityClass.name} is not upsertable. Please define at least one UpsertColumn or BindingColumn, and set @UpsertableEntity() decorator.`
|
|
3630
3710
|
);
|
|
3631
3711
|
}
|
|
3632
|
-
return (0,
|
|
3712
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3633
3713
|
this.usePrefix(import_common3.Put, extras.prefix),
|
|
3634
3714
|
(0, import_common3.HttpCode)(200),
|
|
3635
3715
|
(0, import_swagger6.ApiOperation)({
|
|
@@ -3638,14 +3718,14 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3638
3718
|
}),
|
|
3639
3719
|
(0, import_swagger6.ApiBody)({ type: this.upsertDto }),
|
|
3640
3720
|
(0, import_swagger6.ApiOkResponse)({ type: this.entityUpsertResultDto }),
|
|
3641
|
-
(0,
|
|
3721
|
+
(0, import_nesties12.ApiError)(400, `The ${this.entityClassName} is not valid`)
|
|
3642
3722
|
]);
|
|
3643
3723
|
}
|
|
3644
3724
|
upsertParam() {
|
|
3645
|
-
return (0, import_common3.Body)((0,
|
|
3725
|
+
return (0, import_common3.Body)((0, import_nesties12.DataPipe)(), OmitPipe(this.fieldsInUpsertToOmit));
|
|
3646
3726
|
}
|
|
3647
3727
|
findOne(extras = {}) {
|
|
3648
|
-
return (0,
|
|
3728
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3649
3729
|
this.usePrefix(import_common3.Get, extras.prefix, ":id"),
|
|
3650
3730
|
(0, import_swagger6.ApiOperation)({
|
|
3651
3731
|
summary: `Find a ${this.entityClassName} by id`,
|
|
@@ -3653,7 +3733,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3653
3733
|
}),
|
|
3654
3734
|
(0, import_swagger6.ApiParam)({ name: "id", type: this.idType, required: true }),
|
|
3655
3735
|
(0, import_swagger6.ApiOkResponse)({ type: this.entityReturnMessageDto }),
|
|
3656
|
-
(0,
|
|
3736
|
+
(0, import_nesties12.ApiError)(
|
|
3657
3737
|
404,
|
|
3658
3738
|
`The ${this.entityClassName} with the given id was not found`
|
|
3659
3739
|
)
|
|
@@ -3667,7 +3747,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3667
3747
|
}
|
|
3668
3748
|
}
|
|
3669
3749
|
findAll(extras = {}) {
|
|
3670
|
-
return (0,
|
|
3750
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3671
3751
|
this.usePrefix(import_common3.Get, extras.prefix),
|
|
3672
3752
|
(0, import_swagger6.ApiOperation)({
|
|
3673
3753
|
summary: `Find all ${this.entityClassName}`,
|
|
@@ -3677,7 +3757,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3677
3757
|
]);
|
|
3678
3758
|
}
|
|
3679
3759
|
findAllCursorPaginated(extras = {}) {
|
|
3680
|
-
return (0,
|
|
3760
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3681
3761
|
this.usePrefix(import_common3.Get, extras.prefix),
|
|
3682
3762
|
(0, import_swagger6.ApiOperation)({
|
|
3683
3763
|
summary: `Find all ${this.entityClassName}`,
|
|
@@ -3703,7 +3783,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3703
3783
|
}
|
|
3704
3784
|
}
|
|
3705
3785
|
update(extras = {}) {
|
|
3706
|
-
return (0,
|
|
3786
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3707
3787
|
this.usePrefix(import_common3.Patch, extras.prefix, ":id"),
|
|
3708
3788
|
(0, import_common3.HttpCode)(200),
|
|
3709
3789
|
(0, import_swagger6.ApiOperation)({
|
|
@@ -3712,20 +3792,20 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3712
3792
|
}),
|
|
3713
3793
|
(0, import_swagger6.ApiParam)({ name: "id", type: this.idType, required: true }),
|
|
3714
3794
|
(0, import_swagger6.ApiBody)({ type: this.updateDto }),
|
|
3715
|
-
(0,
|
|
3716
|
-
(0,
|
|
3795
|
+
(0, import_nesties12.ApiBlankResponse)(),
|
|
3796
|
+
(0, import_nesties12.ApiError)(
|
|
3717
3797
|
404,
|
|
3718
3798
|
`The ${this.entityClassName} with the given id was not found`
|
|
3719
3799
|
),
|
|
3720
|
-
(0,
|
|
3721
|
-
(0,
|
|
3800
|
+
(0, import_nesties12.ApiError)(400, `The ${this.entityClassName} is not valid`),
|
|
3801
|
+
(0, import_nesties12.ApiError)(500, "Internal error")
|
|
3722
3802
|
]);
|
|
3723
3803
|
}
|
|
3724
3804
|
updateParam() {
|
|
3725
3805
|
return (0, import_common3.Body)(OptionalDataPipe(), OmitPipe(this.fieldsInUpdateToOmit));
|
|
3726
3806
|
}
|
|
3727
3807
|
delete(extras = {}) {
|
|
3728
|
-
return (0,
|
|
3808
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3729
3809
|
this.usePrefix(import_common3.Delete, extras.prefix, ":id"),
|
|
3730
3810
|
(0, import_common3.HttpCode)(200),
|
|
3731
3811
|
(0, import_swagger6.ApiOperation)({
|
|
@@ -3733,16 +3813,16 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3733
3813
|
...import_lodash6.default.omit(extras, "prefix")
|
|
3734
3814
|
}),
|
|
3735
3815
|
(0, import_swagger6.ApiParam)({ name: "id", type: this.idType, required: true }),
|
|
3736
|
-
(0,
|
|
3737
|
-
(0,
|
|
3816
|
+
(0, import_nesties12.ApiBlankResponse)(),
|
|
3817
|
+
(0, import_nesties12.ApiError)(
|
|
3738
3818
|
404,
|
|
3739
3819
|
`The ${this.entityClassName} with the given id was not found`
|
|
3740
3820
|
),
|
|
3741
|
-
(0,
|
|
3821
|
+
(0, import_nesties12.ApiError)(500, "Internal error")
|
|
3742
3822
|
]);
|
|
3743
3823
|
}
|
|
3744
3824
|
import(extras = {}) {
|
|
3745
|
-
return (0,
|
|
3825
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3746
3826
|
this.usePrefix(import_common3.Post, extras.prefix, "import"),
|
|
3747
3827
|
(0, import_common3.HttpCode)(200),
|
|
3748
3828
|
(0, import_swagger6.ApiOperation)({
|
|
@@ -3751,19 +3831,19 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3751
3831
|
}),
|
|
3752
3832
|
(0, import_swagger6.ApiBody)({ type: this.importDto }),
|
|
3753
3833
|
(0, import_swagger6.ApiOkResponse)({ type: this.importReturnMessageDto }),
|
|
3754
|
-
(0,
|
|
3834
|
+
(0, import_nesties12.ApiError)(500, "Internal error")
|
|
3755
3835
|
]);
|
|
3756
3836
|
}
|
|
3757
3837
|
operation(operationName, options = {}) {
|
|
3758
|
-
return (0,
|
|
3838
|
+
return (0, import_nesties12.MergeMethodDecorators)([
|
|
3759
3839
|
this.usePrefix(import_common3.Post, options.prefix, ":id", operationName),
|
|
3760
3840
|
(0, import_common3.HttpCode)(200),
|
|
3761
3841
|
(0, import_swagger6.ApiOperation)({
|
|
3762
3842
|
summary: `${(0, import_lodash6.upperFirst)(operationName)} a ${this.entityClassName} by id`,
|
|
3763
3843
|
...import_lodash6.default.omit(options, "prefix", "returnType")
|
|
3764
3844
|
}),
|
|
3765
|
-
options.returnType ? (0,
|
|
3766
|
-
(0,
|
|
3845
|
+
options.returnType ? (0, import_nesties12.ApiTypeResponse)(options.returnType) : (0, import_nesties12.ApiBlankResponse)(),
|
|
3846
|
+
(0, import_nesties12.ApiError)(
|
|
3767
3847
|
404,
|
|
3768
3848
|
`The ${this.entityClassName} with the given id pessimistic_write`
|
|
3769
3849
|
)
|
|
@@ -3888,7 +3968,7 @@ var _RestfulFactory = class _RestfulFactory {
|
|
|
3888
3968
|
Object.defineProperty(cl.prototype, method, descriptor);
|
|
3889
3969
|
});
|
|
3890
3970
|
}
|
|
3891
|
-
return (0,
|
|
3971
|
+
return (0, import_nesties12.RenameClass)(cl, `${this.entityClassName}Controller`);
|
|
3892
3972
|
}
|
|
3893
3973
|
crudService(options = {}) {
|
|
3894
3974
|
const keysToMigrate = [
|
|
@@ -3969,7 +4049,7 @@ __decorateClass([
|
|
|
3969
4049
|
var RestfulFactory = _RestfulFactory;
|
|
3970
4050
|
|
|
3971
4051
|
// src/utility/query.ts
|
|
3972
|
-
var
|
|
4052
|
+
var import_nesties13 = require("nesties");
|
|
3973
4053
|
function createQueryCondition(cond) {
|
|
3974
4054
|
return (obj, qb, entityName, ...fields) => {
|
|
3975
4055
|
for (const field of fields) {
|
|
@@ -4013,7 +4093,7 @@ var applyQueryPropertyZeroNullable = createQueryCondition(
|
|
|
4013
4093
|
);
|
|
4014
4094
|
var applyQueryMatchBoolean = createQueryCondition(
|
|
4015
4095
|
(obj, qb, entityName, field) => {
|
|
4016
|
-
const value = (0,
|
|
4096
|
+
const value = (0, import_nesties13.parseBool)(obj[field]);
|
|
4017
4097
|
if (value === true) {
|
|
4018
4098
|
qb.andWhere(`${entityName}.${field} = TRUE`);
|
|
4019
4099
|
}
|
|
@@ -4024,7 +4104,7 @@ var applyQueryMatchBoolean = createQueryCondition(
|
|
|
4024
4104
|
);
|
|
4025
4105
|
var applyQueryMatchBooleanMySQL = createQueryCondition(
|
|
4026
4106
|
(obj, qb, entityName, field) => {
|
|
4027
|
-
const value = (0,
|
|
4107
|
+
const value = (0, import_nesties13.parseBool)(obj[field]);
|
|
4028
4108
|
if (value === true) {
|
|
4029
4109
|
qb.andWhere(`${entityName}.${field} = 1`);
|
|
4030
4110
|
}
|
|
@@ -4038,7 +4118,7 @@ var applyQueryMatchBooleanMySQL = createQueryCondition(
|
|
|
4038
4118
|
var import_typeorm9 = __toESM(require_typeorm());
|
|
4039
4119
|
var import_typeorm10 = require("typeorm");
|
|
4040
4120
|
var import_common5 = require("@nestjs/common");
|
|
4041
|
-
var
|
|
4121
|
+
var import_nesties14 = require("nesties");
|
|
4042
4122
|
var import_core = require("@nestjs/core");
|
|
4043
4123
|
|
|
4044
4124
|
// src/utility/create-dynamic-fetcher-proxy.ts
|
|
@@ -4150,7 +4230,7 @@ var TransactionalTypeOrmInterceptor = (dataSource) => {
|
|
|
4150
4230
|
return interceptorClass;
|
|
4151
4231
|
};
|
|
4152
4232
|
var getTransactionalEntityManagerToken = (dataSource) => `Transactional${normalizeDataSourceToken((0, import_typeorm9.getEntityManagerToken)(dataSource))}`;
|
|
4153
|
-
var getTransactionalEntityManagerProvider = (dataSource) => (0,
|
|
4233
|
+
var getTransactionalEntityManagerProvider = (dataSource) => (0, import_nesties14.createProvider)(
|
|
4154
4234
|
{
|
|
4155
4235
|
provide: getTransactionalEntityManagerToken(dataSource),
|
|
4156
4236
|
inject: [(0, import_typeorm9.getEntityManagerToken)(dataSource), import_core.REQUEST],
|
|
@@ -4172,7 +4252,7 @@ var InjectTransactionalEntityManager = createInjectFromTokenFactory(
|
|
|
4172
4252
|
var getTransactionalRepositoryToken = (entity, dataSource) => `Transactional${normalizeDataSourceToken(
|
|
4173
4253
|
(0, import_typeorm9.getEntityManagerToken)(dataSource)
|
|
4174
4254
|
)}Repository_${entity.name || entity.toString()}`;
|
|
4175
|
-
var getTransactionalRepositoryProvider = (entity, dataSource) => (0,
|
|
4255
|
+
var getTransactionalRepositoryProvider = (entity, dataSource) => (0, import_nesties14.createProvider)(
|
|
4176
4256
|
{
|
|
4177
4257
|
provide: getTransactionalRepositoryToken(entity, dataSource),
|
|
4178
4258
|
inject: [(0, import_typeorm9.getEntityManagerToken)(dataSource), import_core.REQUEST],
|
|
@@ -4312,7 +4392,10 @@ TransactionalTypeOrmModule = __decorateClass([
|
|
|
4312
4392
|
applyQueryPropertyLike,
|
|
4313
4393
|
applyQueryPropertySearch,
|
|
4314
4394
|
applyQueryPropertyZeroNullable,
|
|
4395
|
+
base64OrBinaryToBuffer,
|
|
4396
|
+
base64OrBinaryToDatabaseValue,
|
|
4315
4397
|
binaryToBuffer,
|
|
4398
|
+
binaryToPostgresByteaHex,
|
|
4316
4399
|
createGetMutator,
|
|
4317
4400
|
createQueryArrayify,
|
|
4318
4401
|
createQueryBase64Operator,
|