UNPKG

abi.js

Version:

[![typescript-icon]][typescript-link] [![license-icon]][license-link] [![status-icon]][status-link] [![ci-icon]][ci-link] [![twitter-icon]][twitter-link]

149 lines (148 loc) 3.04 kB
// src/parser.ts function parse_val(val) { if (typeof val !== "string") { return val; } val = val.trim(); const lc_val = val.toLowerCase(); if (lc_val === "null") { return null; } if (lc_val === "undefined") { return void 0; } if (lc_val === "true") { return true; } if (lc_val === "false") { return false; } if (!Number.isNaN(Number(val))) { return Number(val); } if (/^('|")(.*?)\1$/gms.test(val)) { return parse_str(val); } if (/^\[(.*?)\]$/gms.test(val)) { return parse_arr(val); } if (/^\{(.*?)\}$/gms.test(val)) { return parse_obj(val); } return val; } function parse_str(val) { val = val.trim(); const res = /^('|")(.*?)\1$/gms.exec(val); if (res) { val = res[2]; } return val; } function parse_arr(val) { const res = /^\[(.*?)\]$/gms.exec(val); if (res) { val = res[1]; } const arr = []; const items = val.split(","); for (const i in items) { arr[i] = parse_val(items[i]); } return arr; } function parse_obj(val) { const res = /^\{(.*?)\}$/gms.exec(val); if (res) { val = res[1]; } const obj = {}; const items = val.split(","); for (const item of items) { const [key, val2] = parse_prop(item); obj[key] = val2; } return obj; } function parse_params(val) { const res = /^\((.*?)\)$/gms.exec(val); if (res) { val = res[1]; } const params = {}; const items = val.split(","); for (const item of items) { let [name, val2] = parse_param(item); if (val2 !== void 0) { val2 = parse_val(val2); } params[name] = val2; } return params; } function parse_args(val) { const res = /^\((.*?)\)$/gms.exec(val); if (res) { val = res[1]; } const args = {}; const items = val.split(","); for (const item of items) { const [key, val2] = parse_prop(item); args[key] = val2; } return args; } function parse_props(val) { const res = /^\{(.*?)\}$/gms.exec(val); if (res) { val = res[1]; } return parse_args(val); } function parse_prop(val) { if (/^([a-zA-Z0-9_\$]*)\s*\:\s*(.+)$/gms.test(val)) { return parse_arg(val); } return parse_param(val); } function parse_arg(val) { val = val.trim(); const res = /^([a-zA-Z0-9_\$]*)\s*\:\s*(.+)$/gms.exec(val); if (res) { const key = parse_val(res[1]); let value = parse_val(res[2]); if (value !== void 0) { value = parse_val(value); } if (typeof value === "string") { const [_, param] = parse_param(value); return [key, param ?? value]; } if (value === void 0) { return parse_param(key); } return [key, value]; } return parse_param(val); } function parse_param(val) { val = val.trim(); const res = /^([a-zA-Z0-9_\$]+[a-zA-Z0-9_\$]*)\s*\=\s*(.+)$/gms.exec(val); if (res) { return [parse_str(res[1]), parse_val(res[2])]; } return [parse_val(val)]; } export { parse_arg, parse_args, parse_arr, parse_obj, parse_param, parse_params, parse_prop, parse_props, parse_str, parse_val };