mirror of
https://github.com/rxliuli/apps.apple.com.git
synced 2025-11-09 22:00:32 +00:00
139 lines
4.5 KiB
JavaScript
139 lines
4.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.valueAsNumber = exports.valueAsString = exports.valueAsBoolean = void 0;
|
|
const optional_1 = require("../../types/optional");
|
|
const validation = require("../validation");
|
|
/**
|
|
* Attempt to coerce the given value to a boolean.
|
|
*
|
|
* @see asBoolean
|
|
* @param value - the value to coerce
|
|
* @param policy - determines when validation errors are added to the current validation context
|
|
* @param path - an optional string appended to validation errors to identify where this value originated
|
|
* @returns a boolean if the value was a boolean or coercible to a boolean, otherwise null
|
|
*/
|
|
function valueAsBoolean(value, policy = "coercible", path) {
|
|
if (!(0, optional_1.isSome)(value)) {
|
|
return value;
|
|
}
|
|
if (typeof value === "boolean") {
|
|
return value;
|
|
}
|
|
// Handle string coercion
|
|
if (typeof value === "string") {
|
|
if (value === "true") {
|
|
return true;
|
|
}
|
|
else if (value === "false") {
|
|
return false;
|
|
}
|
|
}
|
|
// Else coerce.
|
|
const coercedValue = Boolean(value);
|
|
switch (policy) {
|
|
case "strict": {
|
|
validation.context("asBoolean", () => {
|
|
validation.unexpectedType("coercedValue", "boolean", value, path);
|
|
});
|
|
break;
|
|
}
|
|
case "coercible": {
|
|
if ((0, optional_1.isNothing)(coercedValue)) {
|
|
validation.context("asBoolean", () => {
|
|
validation.unexpectedType("coercedValue", "boolean", value, path);
|
|
});
|
|
return null;
|
|
}
|
|
break;
|
|
}
|
|
case "none":
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
return coercedValue;
|
|
}
|
|
exports.valueAsBoolean = valueAsBoolean;
|
|
/**
|
|
* Attempt to coerce the given value to a string.
|
|
*
|
|
* @see asString
|
|
* @param value - the value to coerce
|
|
* @param policy - determines when validation errors are added to the current validation context
|
|
* @param path - an optional string appended to validation errors to identify where this value originated
|
|
* @returns a string if the value was a string or coercible to a string, otherwise null
|
|
*/
|
|
function valueAsString(value, policy = "coercible", path) {
|
|
if (!(0, optional_1.isSome)(value)) {
|
|
return value;
|
|
}
|
|
if (typeof value === "string") {
|
|
return value;
|
|
}
|
|
// We don't consider arbitrary objects as convertable to strings even through they will result in some value
|
|
const coercedValue = typeof value === "object" ? null : String(value);
|
|
switch (policy) {
|
|
case "strict": {
|
|
validation.context("asString", () => {
|
|
validation.unexpectedType("coercedValue", "string", value, path);
|
|
});
|
|
break;
|
|
}
|
|
case "coercible": {
|
|
if ((0, optional_1.isNothing)(coercedValue)) {
|
|
validation.context("asString", () => {
|
|
validation.unexpectedType("coercedValue", "string", value, path);
|
|
});
|
|
}
|
|
break;
|
|
}
|
|
case "none":
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
return coercedValue;
|
|
}
|
|
exports.valueAsString = valueAsString;
|
|
/**
|
|
* Attempt to coerce the given value to a number.
|
|
*
|
|
* @see asNumber
|
|
* @param value - the value to coerce
|
|
* @param policy - determines when validation errors are added to the current validation context
|
|
* @param path - an optional string appended to validation errors to identify where this value originated
|
|
* @returns a number if the value was a number or coercible to a number, otherwise null
|
|
*/
|
|
function valueAsNumber(value, policy = "coercible", path) {
|
|
if (!(0, optional_1.isSome)(value)) {
|
|
return value;
|
|
}
|
|
if (typeof value === "number") {
|
|
return value;
|
|
}
|
|
const coercedValue = Number(value);
|
|
switch (policy) {
|
|
case "strict": {
|
|
validation.context("asNumber", () => {
|
|
validation.unexpectedType("coercedValue", "number", value, path);
|
|
});
|
|
break;
|
|
}
|
|
case "coercible": {
|
|
if (isNaN(coercedValue)) {
|
|
validation.context("asNumber", () => {
|
|
validation.unexpectedType("coercedValue", "number", value, path);
|
|
});
|
|
return null;
|
|
}
|
|
break;
|
|
}
|
|
case "none":
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
return coercedValue;
|
|
}
|
|
exports.valueAsNumber = valueAsNumber;
|
|
//# sourceMappingURL=coercion.js.map
|