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 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 字符串解码成 `Buffer`
211
- (默认列类型 `bytea`),读取时再编码回 base64 字符串。
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
- `Buffer`,从而与列里存的二进制匹配。
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 `Buffer` on the
313
- way into the DB (`bytea` by default) and encodes it back to base64 on read.
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 `Buffer` right before it is bound, so it matches the
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
- if (isBinaryLike(entValue)) {
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
- return Buffer.from(String(dbValue)).toString("base64");
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 toBase64QueryBuffer = (value) => {
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
- if (isBinaryLike(value)) {
1432
- return binaryToBuffer(value);
1433
- }
1434
- return Buffer.from(String(value), "base64");
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 import_nesties13 = require("nesties");
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
- var import_constants = require("@nestjs/swagger/dist/constants");
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 = (0, import_nesties12.getApiProperty)(originalCl, field);
3229
+ const originalApiProp = getApiProperty(originalCl, field);
3150
3230
  const info = reflector.get("getMutator", useCl, field);
3151
3231
  Reflect.defineMetadata(
3152
- import_constants.DECORATORS.API_MODEL_PROPERTIES,
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 = (0, import_nesties12.getApiProperty)(originalCl, field);
3251
+ const originalApiProp = getApiProperty(originalCl, field);
3172
3252
  Reflect.defineMetadata(
3173
- import_constants.DECORATORS.API_MODEL_PROPERTIES,
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, import_nesties14.RenameClass)(
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, import_nesties14.RenameClass)(
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, import_nesties14.RenameClass)(
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, import_nesties14.RenameClass)(cl, `Find${this.entityClassName}Dto`);
3538
+ return (0, import_nesties12.RenameClass)(cl, `Find${this.entityClassName}Dto`);
3459
3539
  }
3460
3540
  get findAllCursorPaginatedDto() {
3461
- return (0, import_nesties14.RenameClass)(
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 = (0, import_nesties13.getApiProperty)(
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 = (0, import_nesties13.getApiProperty)(resultDto, field);
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, import_nesties14.RenameClass)(
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, import_nesties14.RenameClass)(
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, import_nesties14.RenameClass)(
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, import_nesties13.ReturnMessageDto)(this.entityResultDto);
3659
+ return (0, import_nesties12.ReturnMessageDto)(this.entityResultDto);
3580
3660
  }
3581
3661
  get entityCreateReturnMessageDto() {
3582
- return (0, import_nesties13.ReturnMessageDto)(this.entityCreateResultDto);
3662
+ return (0, import_nesties12.ReturnMessageDto)(this.entityCreateResultDto);
3583
3663
  }
3584
3664
  get entityArrayReturnMessageDto() {
3585
- return (0, import_nesties13.PaginatedReturnMessageDto)(this.entityResultDto);
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, import_nesties13.ReturnMessageDto)([ImportEntryDto(this.entityCreateResultDto)]);
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiError)(400, `The ${this.entityClassName} is not valid`)
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, import_nesties13.DataPipe)(), OmitPipe(this.fieldsInCreateToOmit));
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiError)(400, `The ${this.entityClassName} is not valid`)
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, import_nesties13.DataPipe)(), OmitPipe(this.fieldsInUpsertToOmit));
3725
+ return (0, import_common3.Body)((0, import_nesties12.DataPipe)(), OmitPipe(this.fieldsInUpsertToOmit));
3646
3726
  }
3647
3727
  findOne(extras = {}) {
3648
- return (0, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiError)(
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiBlankResponse)(),
3716
- (0, import_nesties13.ApiError)(
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, import_nesties13.ApiError)(400, `The ${this.entityClassName} is not valid`),
3721
- (0, import_nesties13.ApiError)(500, "Internal error")
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, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiBlankResponse)(),
3737
- (0, import_nesties13.ApiError)(
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, import_nesties13.ApiError)(500, "Internal error")
3821
+ (0, import_nesties12.ApiError)(500, "Internal error")
3742
3822
  ]);
3743
3823
  }
3744
3824
  import(extras = {}) {
3745
- return (0, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiError)(500, "Internal error")
3834
+ (0, import_nesties12.ApiError)(500, "Internal error")
3755
3835
  ]);
3756
3836
  }
3757
3837
  operation(operationName, options = {}) {
3758
- return (0, import_nesties13.MergeMethodDecorators)([
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, import_nesties13.ApiTypeResponse)(options.returnType) : (0, import_nesties13.ApiBlankResponse)(),
3766
- (0, import_nesties13.ApiError)(
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, import_nesties14.RenameClass)(cl, `${this.entityClassName}Controller`);
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 import_nesties15 = require("nesties");
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, import_nesties15.parseBool)(obj[field]);
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, import_nesties15.parseBool)(obj[field]);
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 import_nesties16 = require("nesties");
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, import_nesties16.createProvider)(
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, import_nesties16.createProvider)(
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,