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/README.md +4 -3
- package/dist/index.cjs +149 -30
- package/dist/index.cjs.map +3 -3
- package/dist/index.mjs +147 -32
- package/dist/index.mjs.map +4 -4
- package/dist/src/decorators/property.d.ts +27 -4
- package/dist/src/decorators/query.d.ts +1 -0
- package/dist/src/restful.d.ts +1 -0
- package/dist/src/utility/parse-bool.d.ts +8 -0
- package/dist/src/utility/query.d.ts +1 -0
- package/dist/src/utility/type-transformer.d.ts +4 -0
- package/package.json +1 -1
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", {
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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(
|
|
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
|
-
|
|
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
|
|
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(
|
|
450
|
+
Column(options.columnType || columnType, {
|
|
368
451
|
...columnDecoratorOptions(options),
|
|
369
|
-
transformer: new
|
|
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
|
|
558
|
+
const value = parseBool(obj[field]);
|
|
559
|
+
if (value === true) {
|
|
471
560
|
qb.andWhere(`${entityName}.${field} = TRUE`);
|
|
472
561
|
}
|
|
473
|
-
if (value === false
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|