UNPKG

@sudoo/marked

Version:

JavaScript & TypeScript code runner in JavaScript, safe with marked territory, asynchronous

104 lines (103 loc) 3.74 kB
"use strict"; /** * @author WMXPY * @namespace Parse * @description Native To Sand */ Object.defineProperty(exports, "__esModule", { value: true }); exports.parseNativeToSand = void 0; const error_code_1 = require("../declare/error-code"); const error_1 = require("../util/error/error"); const type_check_1 = require("../util/type-check"); const native_class_1 = require("../variable/native-class/native-class"); const native_class_instance_1 = require("../variable/native-class/native-class-instance"); const sand_class_1 = require("../variable/sand-class/sand-class"); const sand_class_instance_1 = require("../variable/sand-class/sand-class-instance"); const sand_function_1 = require("../variable/sand-function/sand-function"); const sand_list_1 = require("../variable/sand-list"); const bigint_1 = require("../variable/sand-literal/bigint"); const regexp_1 = require("../variable/sand-literal/regexp"); const sand_map_1 = require("../variable/sand-map"); const sand_to_native_1 = require("./sand-to-native"); const parseNativeToSand = (target) => { if (typeof target === "undefined") { return undefined; } if (target === null) { return null; } if (typeof target === "string") { return target; } if (typeof target === "number") { return target; } if (typeof target === "boolean") { return target; } if (typeof target === "bigint") { const sandBitInt = bigint_1.SandLiteralBigInt.create(target.toString()); return sandBitInt; } if (Array.isArray(target)) { const list = sand_list_1.SandList.fromScratch(); for (const element of target) { list.push((0, exports.parseNativeToSand)(element)); } return list; } if (target instanceof RegExp) { return regexp_1.SandLiteralRegExp.create(target.source, target.flags); } if (target instanceof native_class_1.MarkedNativeClass) { return target; } if (target instanceof native_class_instance_1.MarkedNativeClassInstance) { return target; } if (target instanceof sand_class_1.SandClass) { return target; } if (target instanceof sand_class_instance_1.SandClassInstance) { return target; } if (target instanceof sand_function_1.SandFunction) { return target; } if (target instanceof bigint_1.SandLiteralBigInt) { return target; } if (target instanceof regexp_1.SandLiteralRegExp) { return target; } if (target instanceof sand_map_1.SandMap) { return target; } if (target instanceof sand_list_1.SandList) { return target; } if (typeof target === "object") { if (target.constructor && target.constructor.name !== "Object") { throw (0, error_1.error)(error_code_1.ERROR_CODE.CANNOT_TRANSFER_NATIVE_TO_CLASS_INSTANCE, target.constructor.name); } const map = sand_map_1.SandMap.fromScratch(); for (const key of Object.keys(target)) { map.set(key, (0, exports.parseNativeToSand)(target[key])); } return map; } if ((0, type_check_1.typeCheckIsConstructor)(target)) { throw (0, error_1.error)(error_code_1.ERROR_CODE.CANNOT_TRANSFER_NATIVE_TO_CLASS, target); } if (typeof target === "function") { return (...args) => { const parsedArgs = []; for (const arg of args) { parsedArgs.push((0, sand_to_native_1.extractSandToNative)(arg)); } return target(...parsedArgs); }; } throw (0, error_1.error)(error_code_1.ERROR_CODE.INTERNAL_ERROR, "Invalid Type"); }; exports.parseNativeToSand = parseNativeToSand;