nicot 1.1.33 → 1.1.34

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/index.mjs CHANGED
@@ -118,6 +118,7 @@ import {
118
118
  IsOptional as IsOptional2,
119
119
  IsString,
120
120
  IsUUID,
121
+ Max,
121
122
  MaxLength,
122
123
  Min,
123
124
  ValidateNested as ValidateNested2
@@ -212,6 +213,47 @@ var TypeTransformer = class {
212
213
  return entValue;
213
214
  }
214
215
  };
216
+ var TypeTransformerString = class extends TypeTransformer {
217
+ from(dbValue) {
218
+ if (dbValue == null) {
219
+ return dbValue;
220
+ }
221
+ return super.from(JSON.parse(dbValue));
222
+ }
223
+ to(entValue) {
224
+ if (entValue == null) {
225
+ return entValue;
226
+ }
227
+ return JSON.stringify(super.to(entValue));
228
+ }
229
+ };
230
+
231
+ // src/utility/parse-bool.ts
232
+ var parseBool = (value) => {
233
+ const trueValues = ["true", "1", "yes", "on", true, 1];
234
+ const falseValues = ["false", "0", "no", "off", false, 0];
235
+ if (trueValues.indexOf(value) !== -1) return true;
236
+ if (falseValues.indexOf(value) !== -1) return false;
237
+ if (!!value) {
238
+ return true;
239
+ }
240
+ return void 0;
241
+ };
242
+ var parseBoolObject = (obj, boolFields) => {
243
+ const newObj = { ...obj };
244
+ for (const field of boolFields) {
245
+ newObj[field] = parseBool(newObj[field]);
246
+ }
247
+ return newObj;
248
+ };
249
+ var ParseBoolObjectPipe = class {
250
+ constructor(boolFields) {
251
+ this.boolFields = boolFields;
252
+ }
253
+ transform(obj) {
254
+ return parseBoolObject(obj, this.boolFields);
255
+ }
256
+ };
215
257
 
216
258
  // src/decorators/property.ts
217
259
  function swaggerDecorator(options, injected = {}) {
@@ -241,13 +283,24 @@ function columnDecoratorOptions(options) {
241
283
  }
242
284
  var StringColumn = (length, options = {}) => {
243
285
  return MergePropertyDecorators2([
244
- Column("varchar", { length, ...columnDecoratorOptions(options) }),
286
+ Column(options.columnType || "varchar", {
287
+ length,
288
+ ...columnDecoratorOptions(options)
289
+ }),
245
290
  IsString(),
246
291
  MaxLength(length),
247
292
  validatorDecorator(options),
248
293
  swaggerDecorator(options, { type: String, maxLength: length })
249
294
  ]);
250
295
  };
296
+ var TextColumn = (options = {}) => {
297
+ return MergePropertyDecorators2([
298
+ Column(options.columnType || "text", columnDecoratorOptions(options)),
299
+ IsString(),
300
+ validatorDecorator(options),
301
+ swaggerDecorator(options, { type: String })
302
+ ]);
303
+ };
251
304
  var UuidColumn = (options = {}) => {
252
305
  return MergePropertyDecorators2([
253
306
  Column("uuid", {
@@ -266,8 +319,28 @@ var UuidColumn = (options = {}) => {
266
319
  })
267
320
  ]);
268
321
  };
322
+ var intMaxList = {
323
+ tinyint: 127,
324
+ smallint: 32767,
325
+ mediumint: 8388607,
326
+ int: 2147483647,
327
+ bigint: Number.MAX_SAFE_INTEGER
328
+ };
269
329
  var IntColumn = (type, options = {}) => {
270
- const decs = [
330
+ let max = intMaxList[type] || Number.MAX_SAFE_INTEGER;
331
+ if (max !== Number.MAX_SAFE_INTEGER && options.unsigned) {
332
+ max = max * 2 + 1;
333
+ }
334
+ let min = options.unsigned ? 0 : -max - 1;
335
+ if (options.range) {
336
+ if (typeof options.range.min === "number" && options.range.min > min) {
337
+ min = options.range.min;
338
+ }
339
+ if (typeof options.range.max === "number" && options.range.max < max) {
340
+ max = options.range.max;
341
+ }
342
+ }
343
+ return MergePropertyDecorators2([
271
344
  Column(type, {
272
345
  default: options.default,
273
346
  unsigned: options.unsigned,
@@ -275,39 +348,53 @@ var IntColumn = (type, options = {}) => {
275
348
  ...columnDecoratorOptions(options)
276
349
  }),
277
350
  IsInt(),
351
+ ...min > Number.MIN_SAFE_INTEGER ? [Min(min)] : [],
352
+ ...max < Number.MAX_SAFE_INTEGER ? [Max(max)] : [],
278
353
  validatorDecorator(options),
279
354
  swaggerDecorator(options, {
280
355
  type: Number,
281
- minimum: options.unsigned ? 0 : void 0
356
+ minimum: min > Number.MIN_SAFE_INTEGER ? min : void 0,
357
+ maximum: max < Number.MAX_SAFE_INTEGER ? max : void 0
282
358
  })
283
- ];
284
- if (options.unsigned) {
285
- decs.push(Min(0));
286
- }
287
- return MergePropertyDecorators2(decs);
359
+ ]);
288
360
  };
289
361
  var FloatColumn = (type, options = {}) => {
290
- const decs = [
362
+ let min = options.unsigned ? 0 : Number.MIN_SAFE_INTEGER;
363
+ let max = Number.MAX_SAFE_INTEGER;
364
+ if (options.columnExtras?.precision != null && options.columnExtras?.scale != null) {
365
+ const precision = options.columnExtras.precision;
366
+ const scale = options.columnExtras.scale;
367
+ const intDigits = precision - scale;
368
+ if (intDigits > 0) {
369
+ const maxIntPart = Math.pow(10, intDigits) - 1;
370
+ const maxDecimalPart = scale > 0 ? (Math.pow(10, scale) - 1) / Math.pow(10, scale) : 0;
371
+ max = maxIntPart + maxDecimalPart;
372
+ min = options.unsigned ? 0 : -max;
373
+ }
374
+ }
375
+ return MergePropertyDecorators2([
291
376
  Column(type, {
292
377
  default: options.default,
293
378
  unsigned: options.unsigned,
294
379
  ...columnDecoratorOptions(options)
295
380
  }),
296
381
  IsNumber(),
382
+ ...min > Number.MIN_SAFE_INTEGER ? [Min(min)] : [],
383
+ ...max < Number.MAX_SAFE_INTEGER ? [Max(max)] : [],
297
384
  validatorDecorator(options),
298
385
  swaggerDecorator(options, {
299
386
  type: Number,
300
- minimum: options.unsigned ? 0 : void 0
387
+ minimum: min > Number.MIN_SAFE_INTEGER ? min : void 0,
388
+ maximum: max < Number.MAX_SAFE_INTEGER ? max : void 0
301
389
  })
302
- ];
303
- if (options.unsigned) {
304
- decs.push(Min(0));
305
- }
306
- return MergePropertyDecorators2(decs);
390
+ ]);
307
391
  };
308
392
  var DateColumn = (options = {}) => {
309
393
  return MergePropertyDecorators2([
310
- Column("timestamp", columnDecoratorOptions(options)),
394
+ Column(
395
+ options.columnType || "timestamp",
396
+ columnDecoratorOptions(options)
397
+ ),
311
398
  IsDate(),
312
399
  Transform(
313
400
  (v) => {
@@ -347,31 +434,33 @@ var EnumColumn = (targetEnum, options = {}) => {
347
434
  var BoolColumn = (options = {}) => MergePropertyDecorators2([
348
435
  Index(),
349
436
  Transform((v) => {
350
- const trueValues = ["true", "1", "yes", "on", true, 1];
351
- const falseValues = ["false", "0", "no", "off", false, 0];
352
- if (trueValues.indexOf(v.value) !== -1) return true;
353
- if (falseValues.indexOf(v.value) !== -1) return false;
354
- return void 0;
437
+ return parseBool(v.value);
355
438
  }),
356
439
  Column("boolean", columnDecoratorOptions(options)),
357
440
  validatorDecorator(options),
358
441
  swaggerDecorator(options, { type: Boolean }),
359
442
  Metadata.set("boolColumn", true, "boolColumnFields")
360
443
  ]);
361
- var JsonColumn = (definition, options = {}) => {
444
+ var createJsonColumnDef = (columnType = "jsonb", typeTransformerClass = TypeTransformer) => (definition, options = {}) => {
362
445
  const cl = getClassFromClassOrArray2(definition);
363
446
  return MergePropertyDecorators2([
364
447
  NotQueryable(),
365
448
  Type2(() => cl),
366
449
  ValidateNested2(),
367
- Column("jsonb", {
450
+ Column(options.columnType || columnType, {
368
451
  ...columnDecoratorOptions(options),
369
- transformer: new TypeTransformer(definition)
452
+ transformer: new typeTransformerClass(definition)
370
453
  }),
371
454
  validatorDecorator(options),
372
455
  swaggerDecorator(options, { type: definition })
373
456
  ]);
374
457
  };
458
+ var JsonColumn = createJsonColumnDef();
459
+ var SimpleJsonColumn = createJsonColumnDef("json");
460
+ var StringJsonColumn = createJsonColumnDef(
461
+ "text",
462
+ TypeTransformerString
463
+ );
375
464
  var NotColumn = (options = {}, specials = {}) => MergePropertyDecorators2([
376
465
  Exclude(),
377
466
  swaggerDecorator({
@@ -466,15 +555,26 @@ var applyQueryPropertyZeroNullable = createQueryCondition(
466
555
  );
467
556
  var applyQueryMatchBoolean = createQueryCondition(
468
557
  (obj, qb, entityName, field) => {
469
- const value = obj[field];
470
- if (value === true || value === "true" || value === 1 || value === "1") {
558
+ const value = parseBool(obj[field]);
559
+ if (value === true) {
471
560
  qb.andWhere(`${entityName}.${field} = TRUE`);
472
561
  }
473
- if (value === false || value === "false" || value === 0 || value === "0") {
562
+ if (value === false) {
474
563
  qb.andWhere(`${entityName}.${field} = FALSE`);
475
564
  }
476
565
  }
477
566
  );
567
+ var applyQueryMatchBooleanMySQL = createQueryCondition(
568
+ (obj, qb, entityName, field) => {
569
+ const value = parseBool(obj[field]);
570
+ if (value === true) {
571
+ qb.andWhere(`${entityName}.${field} = 1`);
572
+ }
573
+ if (value === false) {
574
+ qb.andWhere(`${entityName}.${field} = 0`);
575
+ }
576
+ }
577
+ );
478
578
 
479
579
  // src/decorators/query.ts
480
580
  import { MergePropertyDecorators as MergePropertyDecorators3 } from "nesties";
@@ -519,6 +619,7 @@ var QueryLike = () => QueryCondition(applyQueryPropertyLike);
519
619
  var QuerySearch = () => QueryCondition(applyQueryPropertySearch);
520
620
  var QueryEqualZeroNullable = () => QueryCondition(applyQueryPropertyZeroNullable);
521
621
  var QueryMatchBoolean = () => QueryCondition(applyQueryMatchBoolean);
622
+ var QueryMatchBooleanMySQL = () => QueryCondition(applyQueryMatchBooleanMySQL);
522
623
  var QueryOperator = (operator, field) => QueryCondition((obj, qb, entityName, key) => {
523
624
  if (obj[key] == null) return;
524
625
  const fieldName = field || key;
@@ -743,7 +844,7 @@ __decorateClass([
743
844
  ], TimeBase.prototype, "deleteTime", 2);
744
845
 
745
846
  // src/bases/id-base.ts
746
- import { Generated as Generated2 } from "typeorm";
847
+ import { Generated } from "typeorm";
747
848
  import { IsNotEmpty as IsNotEmpty2 } from "class-validator";
748
849
  import { MergePropertyDecorators as MergePropertyDecorators4 } from "nesties";
749
850
  function IdBase(idOptions = {}) {
@@ -763,7 +864,7 @@ function IdBase(idOptions = {}) {
763
864
  columnExtras: { nullable: false, primary: true }
764
865
  }),
765
866
  Reflect.metadata("design:type", Number),
766
- Generated2("increment"),
867
+ Generated("increment"),
767
868
  QueryEqual()
768
869
  ]);
769
870
  dec(cl.prototype, "id");
@@ -1788,8 +1889,8 @@ var PatchColumnsInGet = (cl, originalCl = cl, fieldsToOmit = []) => {
1788
1889
  ...originalApiProp,
1789
1890
  type: String,
1790
1891
  required: false,
1791
- enum: ["", "1"],
1792
- default: originalApiProp?.default === true ? "1" : originalApiProp?.default === false ? "" : void 0
1892
+ enum: ["0", "1"],
1893
+ default: originalApiProp?.default === true ? "1" : originalApiProp?.default === false ? "0" : void 0
1793
1894
  })(cl.prototype, field);
1794
1895
  }
1795
1896
  return cl;
@@ -2040,8 +2141,17 @@ var RestfulFactory = class _RestfulFactory {
2040
2141
  ApiOkResponse({ type: this.entityCursorPaginationReturnMessageDto })
2041
2142
  ]);
2042
2143
  }
2144
+ getBoolColumns() {
2145
+ const boolColumns = getSpecificFields(this.entityClass, "boolColumn");
2146
+ return _4.difference(boolColumns, this.fieldsInGetToOmit);
2147
+ }
2043
2148
  findAllParam() {
2044
- return Query(GetPipe());
2149
+ const boolColumns = this.getBoolColumns();
2150
+ if (boolColumns.length) {
2151
+ return Query(new ParseBoolObjectPipe(boolColumns), GetPipe());
2152
+ } else {
2153
+ return Query(GetPipe());
2154
+ }
2045
2155
  }
2046
2156
  update(extras = {}) {
2047
2157
  return MergeMethodDecorators([
@@ -2265,18 +2375,23 @@ export {
2265
2375
  QueryLessEqual,
2266
2376
  QueryLike,
2267
2377
  QueryMatchBoolean,
2378
+ QueryMatchBooleanMySQL,
2268
2379
  QueryNotEqual,
2269
2380
  QueryOperator,
2270
2381
  QuerySearch,
2271
2382
  Relation,
2272
2383
  RelationComputed,
2273
2384
  RestfulFactory,
2385
+ SimpleJsonColumn,
2274
2386
  StringColumn,
2275
2387
  StringIdBase,
2388
+ StringJsonColumn,
2389
+ TextColumn,
2276
2390
  TimeBase,
2277
2391
  UpdatePipe,
2278
2392
  UuidColumn,
2279
2393
  applyQueryMatchBoolean,
2394
+ applyQueryMatchBooleanMySQL,
2280
2395
  applyQueryProperty,
2281
2396
  applyQueryPropertyLike,
2282
2397
  applyQueryPropertySearch,