55 lines
3.2 KiB
Plaintext
55 lines
3.2 KiB
Plaintext
import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';
|
|
export var TypeSystemPolicy;
|
|
(function (TypeSystemPolicy) {
|
|
// ------------------------------------------------------------------
|
|
// TypeSystemPolicy: Instancing
|
|
// ------------------------------------------------------------------
|
|
/**
|
|
* Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript
|
|
* references for embedded types, which may cause side effects if type properties are explicitly updated
|
|
* outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,
|
|
* preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making
|
|
* it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the
|
|
* fastest way to instantiate types. The default setting is `default`.
|
|
*/
|
|
TypeSystemPolicy.InstanceMode = 'default';
|
|
// ------------------------------------------------------------------
|
|
// TypeSystemPolicy: Checking
|
|
// ------------------------------------------------------------------
|
|
/** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */
|
|
TypeSystemPolicy.ExactOptionalPropertyTypes = false;
|
|
/** Sets whether arrays should be treated as a kind of objects. The default is `false` */
|
|
TypeSystemPolicy.AllowArrayObject = false;
|
|
/** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */
|
|
TypeSystemPolicy.AllowNaN = false;
|
|
/** Sets whether `null` should validate for void types. The default is `false` */
|
|
TypeSystemPolicy.AllowNullVoid = false;
|
|
/** Checks this value using the ExactOptionalPropertyTypes policy */
|
|
function IsExactOptionalProperty(value, key) {
|
|
return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;
|
|
}
|
|
TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;
|
|
/** Checks this value using the AllowArrayObjects policy */
|
|
function IsObjectLike(value) {
|
|
const isObject = IsObject(value);
|
|
return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);
|
|
}
|
|
TypeSystemPolicy.IsObjectLike = IsObjectLike;
|
|
/** Checks this value as a record using the AllowArrayObjects policy */
|
|
function IsRecordLike(value) {
|
|
return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);
|
|
}
|
|
TypeSystemPolicy.IsRecordLike = IsRecordLike;
|
|
/** Checks this value using the AllowNaN policy */
|
|
function IsNumberLike(value) {
|
|
return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);
|
|
}
|
|
TypeSystemPolicy.IsNumberLike = IsNumberLike;
|
|
/** Checks this value using the AllowVoidNull policy */
|
|
function IsVoidLike(value) {
|
|
const isUndefined = IsUndefined(value);
|
|
return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;
|
|
}
|
|
TypeSystemPolicy.IsVoidLike = IsVoidLike;
|
|
})(TypeSystemPolicy || (TypeSystemPolicy = {}));
|