UNPKG

@sudoo/marked

Version:

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

54 lines (53 loc) 1.95 kB
"use strict"; /** * @author WMXPY * @namespace Operation * @description Unary */ Object.defineProperty(exports, "__esModule", { value: true }); exports.getUnaryOperation = void 0; const error_code_1 = require("../declare/error-code"); const error_1 = require("../util/error/error"); 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 sand_map_1 = require("../variable/sand-map"); const getUnaryOperation = (symbol) => { switch (symbol) { case "!": return (value) => !Boolean(value); case "+": return null; case "-": return (value) => { if (typeof value === "number" && !isNaN(value)) { return value * -1; } throw (0, error_1.error)(error_code_1.ERROR_CODE.NEGATIVE_UNARY_ONLY_AVAILABLE_FOR_VALID_NUMBER, symbol); }; case "delete": return null; case "typeof": return (value) => { if (value === null) { return "null"; } if (value instanceof sand_class_1.SandClass) { return "class"; } if (value instanceof sand_class_instance_1.SandClassInstance) { return "class-instance"; } if (value instanceof sand_function_1.SandFunction) { return "function"; } if (value instanceof sand_list_1.SandList) { return "array"; } if (value instanceof sand_map_1.SandMap) { return "object"; } return typeof value; }; case "void": return () => undefined; case "~": return null; } return null; }; exports.getUnaryOperation = getUnaryOperation;