UNPKG

2.06 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ParseFloatPipe = void 0;
4const tslib_1 = require("tslib");
5const core_1 = require("../decorators/core");
6const index_1 = require("../index");
7const http_error_by_code_util_1 = require("../utils/http-error-by-code.util");
8const shared_utils_1 = require("../utils/shared.utils");
9/**
10 * Defines the built-in ParseFloat Pipe
11 *
12 * @see [Built-in Pipes](https://docs.nestjs.com/pipes#built-in-pipes)
13 *
14 * @publicApi
15 */
16let ParseFloatPipe = class ParseFloatPipe {
17 constructor(options) {
18 this.options = options;
19 options = options || {};
20 const { exceptionFactory, errorHttpStatusCode = index_1.HttpStatus.BAD_REQUEST } = options;
21 this.exceptionFactory =
22 exceptionFactory ||
23 (error => new http_error_by_code_util_1.HttpErrorByCode[errorHttpStatusCode](error));
24 }
25 /**
26 * Method that accesses and performs optional transformation on argument for
27 * in-flight requests.
28 *
29 * @param value currently processed route argument
30 * @param metadata contains metadata about the currently processed route argument
31 */
32 async transform(value, metadata) {
33 if ((0, shared_utils_1.isNil)(value) && this.options?.optional) {
34 return value;
35 }
36 if (!this.isNumeric(value)) {
37 throw this.exceptionFactory('Validation failed (numeric string is expected)');
38 }
39 return parseFloat(value);
40 }
41 /**
42 * @param value currently processed route argument
43 * @returns `true` if `value` is a valid float number
44 */
45 isNumeric(value) {
46 return (['string', 'number'].includes(typeof value) &&
47 !isNaN(parseFloat(value)) &&
48 isFinite(value));
49 }
50};
51exports.ParseFloatPipe = ParseFloatPipe;
52exports.ParseFloatPipe = ParseFloatPipe = tslib_1.__decorate([
53 (0, core_1.Injectable)(),
54 tslib_1.__param(0, (0, core_1.Optional)()),
55 tslib_1.__metadata("design:paramtypes", [Object])
56], ParseFloatPipe);