tRikSonic
Informasi : saat ini anda mengakses blog ini untuk halaman yang di percepat penggunaannya untuk mobile/handphone (AMP) atau akses mobile dengan kecepatan internet yang rendah, mungkin beberapa fitur diblog ini belum tersedia, silahkan ganti Thema untuk mengaktifkan beberapa fitur lainnya. Terimakasih

Polyfill untuk JSON.parse

Terakhir diperbarui : 7 Januari 2019 - 07.59
Polyfill untuk JSON.parse ini hanya berkas salinan yang saya tulis disini
Mengenai apa itu Polyfill, silahkan kunjungi tautan berikut Polyfill (programming)
(function (a, b) {
    typeof define == "function" && define.amd ? define("json", ["exports"], b) : b(typeof exports == "object" && exports || this.JSON || (this.JSON = {}))
})(this, function (a) {
    var b = {}.toString,
        c = {}.hasOwnProperty,
        d, e, f;
    return e = typeof a.stringify == "function", f = typeof a.parse == "function",
        function () {
            var c = '{"result":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}',
                d, g, h;
            if (e) {
                d = function () {
                    return 1
                }, d.toJSON = d;
                try {
                    switch (!1) {
                    case a.stringify(0) === "0":
                    case a.stringify(new 0..constructor) === "0":
                    case a.stringify(new "".constructor) == '""':
                    case a.stringify(b) === void 0:
                    case a.stringify(void 0) === void 0:
                    case a.stringify() === void 0:
                    case a.stringify(d) === "1":
                    case a.stringify([d]) == "[1]":
                    case a.stringify([void 0]) == "[null]":
                    case a.stringify(null) == "null":
                    case a.stringify([void 0, b, null]) == "[null,null,null]":
                    case a.stringify({
                        result: [d, true, false, null, "\0\b\n\f\r	"]
                    }) == c:
                    case a.stringify(null, d) === "1":
                    case a.stringify([1, 2], null, 1) == "[\n 1,\n 2\n]":
                    case (d = new Date(-864e13)).getUTCFullYear() != -271821 || a.stringify(d) == '"-271821-04-20T00:00:00.000Z"':
                    case (d = new Date(864e13)).getUTCFullYear() != 275760 || a.stringify(d) == '"+275760-09-13T00:00:00.000Z"':
                        e = !1
                    }
                } catch (i) {
                    e = !1
                }
            }
            if (f) try {
                if (a.parse("0") === 0 && !a.parse(!1)) {
                    h = a.parse(c);
                    if (f = h.result.length == 5 && h.result[0] == 1) {
                        try {
                            f = !a.parse('"	"')
                        } catch (i) {}
                        if (f) try {
                            f = a.parse("+1") != 1 && a.parse("01") != 1
                        } catch (i) {}
                    }
                }
            } catch (i) {
                f = !1
            }
        }(), typeof c != "function" && (c = function () {
            var a, c = {},
                d = c.constructor;
            return (c.__proto__ = null, c.__proto__ = {
                toString: 1
            }, c).toString != b ? a = function e(a) {
                var b = this.__proto__,
                    c = a in (this.__proto__ = null, this);
                return this.__proto__ = b, c
            } : a = function f(a) {
                var b = (this.constructor || d).prototype;
                return a in this && !(a in b && this[a] === b[a])
            }, a
        }()), d = function () {
            function g() {
                this.valueOf = 0
            }
            var a, d, e, f = 0;
            g.prototype.valueOf = 0, a = new g;
            for (d in a) c.call(a, d) && (f += 1);
            return a = null, f ? f == 2 ? e = function (d, e) {
                var f = {},
                    g = b.call(d) == "[object Function]",
                    h;
                for (h in d)(!g || h != "prototype") && !c.call(f, h) && (f[h] = 1) && c.call(d, h) && e(h)
            } : e = function (d, e) {
                var f = b.call(d) == "[object Function]",
                    g, h;
                for (g in d)(!f || g != "prototype") && c.call(d, g) && !(h = g === "constructor") && e(g);
                (h || c.call(d, "constructor")) && e("constructor")
            } : (a = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"], e = function (e, f) {
                var g = b.call(e) == "[object Function]",
                    h, i;
                for (h in e)(!g || h != "prototype") && c.call(e, h) && f(h);
                for (i = a.length; i--;) h = a[i], c.call(e, h) && f(h)
            }), e
        }(), e || (a.stringify = function () {
            function e(a, b) {
                return b = "000000" + (b || 0), b.slice(b.length - a)
            }

            function f(b) {
                var c = '"',
                    d = 0,
                    f;
                for (; f = b.charAt(d); d += 1) c += '\\"\b\f\n\r	'.indexOf(f) > -1 ? a[f] : f < " " ? "\\u00" + e(2, f.charCodeAt(0).toString(16)) : f;
                return c + '"'
            }

            function g(a, h, i, j, k, l, m) {
                var n = h[a],
                    o, p, q, r, s, t, u, v;
                typeof n == "object" && n && (b.call(n) == "[object Date]" && !c.call(n, "toJSON") ? n > -1 / 0 && n < 1 / 0 ? (p = n.getUTCFullYear(), n = (p <= 0 || p >= 1e4 ? (p < 0 ? "-" : "+") + e(6, p < 0 ? -p : p) : e(4, p)) + "-" + e(2, n.getUTCMonth() + 1) + "-" + e(2, n.getUTCDate()) + "T" + e(2, n.getUTCHours()) + ":" + e(2, n.getUTCMinutes()) + ":" + e(2, n.getUTCSeconds()) + "." + e(3, n.getUTCMilliseconds()) + "Z") : n = null : typeof n.toJSON == "function" && (n = n.toJSON(a))), i && (n = i.call(h, a, n));
                if (n === null) return "null";
                o = b.call(n);
                switch (o) {
                case "[object Boolean]":
                    return "" + n;
                case "[object Number]":
                    return n > -1 / 0 && n < 1 / 0 ? "" + n : "null";
                case "[object String]":
                    return f(n)
                }
                if (typeof n == "object") {
                    for (t = m.length; t--;)
                        if (m[t] == n) throw TypeError("Cyclic structures cannot be serialized.");
                    m.push(n), q = [], u = l, l += k;
                    if (o == "[object Array]") {
                        for (s = 0, t = n.length; s < t; v || (v = !0), s++) r = g(s, n, i, j, k, l, m), q.push(r === void 0 ? "null" : r);
                        return v ? k ? "[\n" + l + q.join(",\n" + l) + "\n" + u + "]" : "[" + q.join(",") + "]" : "[]"
                    }
                    return d(j || n, function (a) {
                        var b = g(a, n, i, j, k, l, m);
                        b !== void 0 && q.push(f(a) + ":" + (k ? " " : "") + b), v || (v = !0)
                    }), v ? k ? "{\n" + l + q.join(",\n" + l) + "\n" + u + "}" : "{" + q.join(",") + "}" : "{}"
                }
            }

            function h(a, c, d) {
                var e = "",
                    f, h, i, j;
                if (typeof c == "function" || typeof c == "object" && c)
                    if (b.call(c) == "[object Function]") f = c;
                    else if (b.call(c) == "[object Array]") {
                    h = {};
                    for (i = c.length; i--;) j = c[i], j && (b.call(j) == "[object String]" || b.call(j) == "[object Number]") && (h[j] = 1)
                }
                if (d != null && d !== "")
                    if (b.call(d) == "[object Number]") {
                        if ((d -= d % 1) > 0)
                            for (e = "", d > 10 && (d = 10); e.length < d;) e += " "
                    } else b.call(d) == "[object String]" && (e = d.length <= 10 ? d : d.slice(0, 10));
                return g("$", {
                    $: a
                }, f, h, e, "", [])
            }
            var a = {
                "\\": "\\\\",
                '"': '\\"',
                "\b": "\\b",
                "\f": "\\f",
                "\n": "\\n",
                "\r": "\\r",
                "	": "\\t"
            };
            return h
        }()), f || (a.parse = function () {
            function e(a) {
                this.source = a, this.index = 0
            }

            function f() {
                for (var b = this.source, d = this.source.length, e, f, g, h, i; this.index < d;) {
                    e = b.charAt(this.index);
                    switch (e) {
                    case "	":
                    case "\r":
                    case "\n":
                    case " ":
                        this.index += 1;
                        break;
                    case "{":
                    case "}":
                    case "[":
                    case "]":
                    case ":":
                    case ",":
                        return this.index += 1, e;
                    case '"':
                        f = "@", this.index += 1;
                        while (this.index < d) {
                            e = b.charAt(this.index);
                            if (e < " ") throw SyntaxError("Unescaped control character in string.");
                            if (e == "\\") {
                                this.index += 1, e = b.charAt(this.index);
                                if ('\\"/btnfr'.indexOf(e) > -1) f += a[e], this.index += 1;
                                else {
                                    if (e != "u") throw SyntaxError("Invalid escape sequence in string.");
                                    g = this.index += 1;
                                    for (h = this.index + 4; this.index < h; this.index += 1) {
                                        e = b.charAt(this.index);
                                        if (!(e >= "0" && e <= "9" || e >= "a" && e <= "f" || e >= "A" && e <= "F")) throw SyntaxError("Invalid Unicode escape sequence in string.")
                                    }
                                    f += c("0x" + b.slice(g, this.index))
                                }
                            } else {
                                if (e == '"') break;
                                f += e, this.index += 1
                            }
                        }
                        if (b.charAt(this.index) == '"') return this.index += 1, f;
                        throw SyntaxError("Unterminated string.");
                    default:
                        g = this.index, e == "-" && (i = !0, e = b.charAt(this.index += 1));
                        if (e >= "0" && e <= "9") {
                            if (e == "0" && (e = b.charAt(this.index + 1), e >= "0" && e <= "9")) throw SyntaxError("Illegal octal literal.");
                            i = !1;
                            for (; this.index < d && (e = b.charAt(this.index), e >= "0" && e <= "9"); this.index += 1);
                            if (b.charAt(this.index) == ".") {
                                h = this.index += 1;
                                for (; h < d && (e = b.charAt(h), e >= "0" && e <= "9"); h += 1);
                                if (h == this.index) throw SyntaxError("Illegal trailing decimal.");
                                this.index = h
                            }
                            e = b.charAt(this.index);
                            if (e == "e" || e == "E") {
                                e = b.charAt(this.index += 1);
                                if (e == "+" || e == "-") this.index += 1;
                                for (h = this.index; h < d && (e = b.charAt(h), e >= "0" && e <= "9"); h += 1);
                                if (h == this.index) throw SyntaxError("Illegal empty exponent.");
                                this.index = h
                            }
                            return +b.slice(g, this.index)
                        }
                        if (i) throw SyntaxError("Unexpected `-`.");
                        if (e == "t" && b.slice(this.index, this.index + 4) == "true") return this.index += 4, !0;
                        if (e == "f" && b.slice(this.index, this.index + 5) == "false") return this.index += 5, !1;
                        if (e == "n" && b.slice(this.index, this.index + 4) == "null") return this.index += 4, null;
                        throw SyntaxError("Unrecognized token.")
                    }
                }
                return "$"
            }

            function g(a) {
                var b, c, d;
                if (a == "$") throw SyntaxError("Unexpected end-of-file.");
                if (typeof a == "string") {
                    if (a.charAt(0) == "@") return a.slice(1);
                    switch (a) {
                    case "[":
                        b = [];
                        for (;; c || (c = !0)) {
                            a = this.lex();
                            if (a == "]") break;
                            if (c) {
                                if (a != ",") throw SyntaxError("A comma (`,`) must separate the previous array element from the next.");
                                a = this.lex();
                                if (a == "]") throw SyntaxError("Unexpected trailing `,` in array literal.")
                            }
                            if (a == ",") throw SyntaxError("Unexpected `,` in array literal.");
                            b.push(this.get(a))
                        }
                        return b;
                    case "{":
                        b = {};
                        for (;; c || (c = !0)) {
                            a = this.lex();
                            if (a == "}") break;
                            if (c) {
                                if (a != ",") throw SyntaxError("A comma (`,`) must separate the previous object member from the next.");
                                a = this.lex();
                                if (a == "}") throw SyntaxError("Unexpected trailing `,`. in object literal.")
                            }
                            if (a == ",") throw SyntaxError("Unexpected `,` in object literal.");
                            if (typeof a != "string" || a.charAt(0) != "@") throw SyntaxError("Object property names must be double-quoted strings.");
                            if (this.lex() != ":") throw SyntaxError("A single colon (`:`) must separate each object property name from the value.");
                            b[a.slice(1)] = this.get(this.lex())
                        }
                        return b
                    }
                    throw SyntaxError("Expected `[` or `{`.")
                }
                return a
            }

            function h(a, c, e) {
                var f = a[c],
                    g, i;
                if (typeof f == "object" && f)
                    if (b.call(f) == "[object Array]")
                        for (g = f.length; g--;) i = h(f, g, e), i === void 0 ? f.splice(g, 1) : f[g] = i;
                    else d(f, function (a) {
                        var b = h(f, a, e);
                        b === void 0 ? delete f[a] : f[a] = b
                    });
                return e.call(a, c, f)
            }

            function i(a, c) {
                var d = new e("" + a),
                    f = d.get(d.lex());
                if (d.lex() != "$") throw SyntaxError("Expected end-of-file.");
                return c && b.call(c) == "[object Function]" ? h({
                    $: f
                }, "$", c) : f
            }
            var a = {
                    "\\": "\\",
                    '"': '"',
                    "/": "/",
                    b: "\b",
                    t: "	",
                    n: "\n",
                    f: "\f",
                    r: "\r"
                },
                c = "".constructor.fromCharCode;
            return e.prototype.lex = f, e.prototype.get = g, i
        }()), a
})

Tidak ada komentar

Add New Comment