UNPKG

@sinclair/typebox

Version:

Json Schema Type Builder with Static Type Resolution for TypeScript

46 lines (44 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Clone = void 0; // ------------------------------------------------------------------ // ValueGuard // ------------------------------------------------------------------ const index_1 = require("../guard/index"); // ------------------------------------------------------------------ // Clonable // ------------------------------------------------------------------ function ObjectType(value) { const keys = [...Object.getOwnPropertyNames(value), ...Object.getOwnPropertySymbols(value)]; return keys.reduce((acc, key) => ({ ...acc, [key]: Clone(value[key]) }), {}); } function ArrayType(value) { return value.map((element) => Clone(element)); } function TypedArrayType(value) { return value.slice(); } function DateType(value) { return new Date(value.toISOString()); } function ValueType(value) { return value; } // ------------------------------------------------------------------ // Clone // ------------------------------------------------------------------ /** Returns a clone of the given value */ function Clone(value) { if ((0, index_1.IsArray)(value)) return ArrayType(value); if ((0, index_1.IsDate)(value)) return DateType(value); if ((0, index_1.IsPlainObject)(value)) return ObjectType(value); if ((0, index_1.IsTypedArray)(value)) return TypedArrayType(value); if ((0, index_1.IsValueType)(value)) return ValueType(value); throw new Error('ValueClone: Unable to clone value'); } exports.Clone = Clone;