const BROWSER = false; const escaped = { "<": "\\u003C", "\\": "\\\\", "\b": "\\b", "\f": "\\f", "\n": "\\n", "\r": "\\r", " ": "\\t", "\u2028": "\\u2028", "\u2029": "\\u2029" }; class DevalueError extends Error { /** * @param {string} message * @param {string[]} keys * @param {any} [value] - The value that failed to be serialized * @param {any} [root] - The root value being serialized */ constructor(message, keys, value, root) { super(message); this.name = "DevalueError"; this.path = keys.join(""); this.value = value; this.root = root; } } function is_primitive(thing) { return Object(thing) !== thing; } const object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames( Object.prototype ).sort().join("\0"); function is_plain_object(thing) { const proto = Object.getPrototypeOf(thing); return proto === Object.prototype || proto === null || Object.getPrototypeOf(proto) === null || Object.getOwnPropertyNames(proto).sort().join("\0") === object_proto_names; } function get_type(thing) { return Object.prototype.toString.call(thing).slice(8, -1); } function get_escaped_char(char) { switch (char) { case '"': return '\\"'; case "<": return "\\u003C"; case "\\": return "\\\\"; case "\n": return "\\n"; case "\r": return "\\r"; case " ": return "\\t"; case "\b": return "\\b"; case "\f": return "\\f"; case "\u2028": return "\\u2028"; case "\u2029": return "\\u2029"; default: return char < " " ? `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}` : ""; } } function stringify_string(str) { let result = ""; let last_pos = 0; const len = str.length; for (let i = 0; i < len; i += 1) { const char = str[i]; const replacement = get_escaped_char(char); if (replacement) { result += str.slice(last_pos, i) + replacement; last_pos = i + 1; } } return `"${last_pos === 0 ? str : result + str.slice(last_pos)}"`; } function enumerable_symbols(object) { return Object.getOwnPropertySymbols(object).filter( (symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable ); } const is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/; function stringify_key(key) { return is_identifier.test(key) ? "." + key : "[" + JSON.stringify(key) + "]"; } function is_valid_array_index(s) { if (s.length === 0) return false; if (s.length > 1 && s.charCodeAt(0) === 48) return false; for (let i = 0; i < s.length; i++) { const c = s.charCodeAt(i); if (c < 48 || c > 57) return false; } const n = +s; if (n >= 2 ** 32 - 1) return false; if (n < 0) return false; return true; } function valid_array_indices(array) { const keys = Object.keys(array); for (var i = keys.length - 1; i >= 0; i--) { if (is_valid_array_index(keys[i])) { break; } } keys.length = i + 1; return keys; } export { BROWSER as B, DevalueError as D, is_plain_object as a, stringify_string as b, escaped as c, enumerable_symbols as e, get_type as g, is_primitive as i, stringify_key as s, valid_array_indices as v };