/** * Parses a PB single .pb file * @param{string} rinput * @return{Object} */ export function parse(rinput) { let input = rinput.split("\n").map(v => v.trim()).filter(v => v.length > 0) let object = {} let object_key = "" let object_buffer = {} let object_value_buffer = "" let object_open = false for (let line of input) { if (line.endsWith("{")) { object_key = line.replaceAll("{", "").trim() object_buffer = {} object_value_buffer = "" object_open = true } else if (line.endsWith("}")) { object_open = false if (object[object_key] != null) { if (Array.isArray(object[object_key])) { object[object_key].push(object_buffer) } else { let old_obj = object[object_key] object[object_key] = [old_obj, object_buffer] } } else { object[object_key] = object_buffer } } else { let { key, value } = parse_value(line) if (object_open === true) { object_buffer[key] = value } else { object[key] = value } } } return object } /** * Parses a single value * @param{string} input * @return{{key: string, value: string|number}} */ export function parse_value(input) { let [key, ...rvalues] = input.split(":") let value = rvalues.join("").trim() if (value.startsWith("\"") && value.endsWith("\"")) { return { key, value: value.slice(1, -1).replaceAll("\\", ""), } } else { return { key, value: Number(value) } } }