typia
Version:
Superfast runtime validators with only one line
43 lines (41 loc) • 1.46 kB
text/typescript
import { _notationAssign } from "./_notationAssign";
export const _notationAny = (rename: (str: string) => string) => {
const main = (input: any): any => {
if (typeof input === "object")
if (input === null) return null;
else if (Array.isArray(input)) return input.map(main);
else if (
input instanceof Boolean ||
input instanceof BigInt ||
input instanceof Number ||
input instanceof String
)
return input.valueOf();
else if (input instanceof Date) return new Date(input);
else if (
input instanceof Uint8Array ||
input instanceof Uint8ClampedArray ||
input instanceof Uint16Array ||
input instanceof Uint32Array ||
input instanceof BigUint64Array ||
input instanceof Int8Array ||
input instanceof Int16Array ||
input instanceof Int32Array ||
input instanceof BigInt64Array ||
input instanceof Float32Array ||
input instanceof Float64Array ||
input instanceof DataView
)
return input;
else return object(input);
return input;
};
const object = (input: Record<string, any>) => {
const output: Record<string, any> = {};
const sources: Record<string, string> = Object.create(null);
for (const [key, value] of Object.entries(input))
_notationAssign(output, sources, key, main(value), rename);
return output;
};
return main;
};