@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
73 lines (65 loc) • 3.01 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define('@terminus/ngx-tools/coercion', ['exports'], factory) :
(global = global || self, factory((global.terminus = global.terminus || {}, global.terminus['ngx-tools'] = global.terminus['ngx-tools'] || {}, global.terminus['ngx-tools'].coercion = {})));
}(this, (function (exports) { 'use strict';
/**
* Coerces a data-bound value (typically a string) to a boolean.
*
* @param value - The value to coerce to a boolean
* @returns The boolean
*
* @example
* coerceBooleanProperty('true'); // Returns: true
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var coerceBooleanProperty = function (value) { return value != null && "" + value !== 'false'; };
function coerceNumberProperty(value, fallbackValue) {
if (fallbackValue === void 0) { fallbackValue = 0; }
return isNumberValue(value) ? Number(value) : fallbackValue;
}
/**
* Whether the provided value is considered a number.
*
* ParseFloat(value) handles most of the cases we're interested in (it treats null, empty string,
* and other non-number values as NaN, where Number just uses 0) but it considers the string
* '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.
* NOTE: TypeScript seems to consider `parseFloat(value)` unsafe. In my tests there are no values which `parseFloat`
* cannot handle safely.
*
* @private
* @param value
*/
var isNumberValue = function (value) { return !isNaN(parseFloat(value)) && !isNaN(Number(value)); };
function coerceDateProperty(value, fallbackValue) {
if (fallbackValue === void 0) { fallbackValue = new Date(); }
return isDateValue(value) ? new Date(value) : fallbackValue;
}
/**
* Whether the provided value is considered a date.
*
* @private
* @param value
* @returns Boolean
*/
var isDateValue = function (value) { return !isNaN(Date.parse(value)); };
/**
* Wraps the provided value in an array, unless the provided value is an array.
*
* @param value - The value to coerce to an array
* @returns An array
*
* @example
* coerceArray<string>('foo'); // Returns: ['foo']
* coerceArray(['foo']); // Returns: ['foo']
*/
var coerceArray = function (value) { return (Array.isArray(value) ? value : [value]); };
exports.coerceArray = coerceArray;
exports.coerceBooleanProperty = coerceBooleanProperty;
exports.coerceDateProperty = coerceDateProperty;
exports.coerceNumberProperty = coerceNumberProperty;
exports.isDateValue = isDateValue;
exports.isNumberValue = isNumberValue;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=terminus-ngx-tools-coercion.umd.js.map