Newer
Older
reroad-test / 2020-skippage / lib / csv.min.js
@ryusei ryusei on 10 Jul 2020 7 KB csv.min.js
! function(t, e) {
  "function" == typeof define && define.amd ? define([], e) : "object" == typeof module && module.exports ? module.exports = e() : t.CSV = e()
}(this, function() {
  "use strict";

  function t(t) {
    var e = typeof t;
    return "function" === e || "object" === e && !!t
  }

  function e(t) {
    return "string" == typeof t
  }

  function n(t) {
    return !isNaN(+t)
  }

  function i(t) {
    return 0 == t || 1 == t
  }

  function r(t) {
    return null == t
  }

  function o(t) {
    return null != t
  }

  function c(t, e) {
    return o(t) ? t : e
  }

  function u(t, e) {
    for (var n = 0, i = t.length; i > n && e(t[n], n) !== !1; n += 1);
  }

  function s(t) {
    return t.replace(/"/g, '\\"')
  }

  function a(t) {
    return "attrs[" + t + "]"
  }

  function l(t, e) {
    return n(t) ? "Number(" + a(e) + ")" : i(t) ? "Boolean(" + a(e) + " == true)" : "String(" + a(e) + ")"
  }

  function f(t, n, i, r) {
    var o = [];
    return 3 == arguments.length ? (n ? g(n) ? u(i, function(i, r) {
      e(n[r]) ? n[r] = n[r].toLowerCase() : t[n[r]] = n[r], o.push("deserialize[cast[" + r + "]](" + a(r) + ")")
    }) : u(i, function(t, e) {
      o.push(l(t, e))
    }) : u(i, function(t, e) {
      o.push(a(e))
    }), o = "return [" + o.join(",") + "]") : (n ? g(n) ? u(i, function(i, c) {
      e(n[c]) ? n[c] = n[c].toLowerCase() : t[n[c]] = n[c], o.push('"' + s(r[c]) + '": deserialize[cast[' + c + "]](" + a(c) + ")")
    }) : u(i, function(t, e) {
      o.push('"' + s(r[e]) + '": ' + l(t, e))
    }) : u(i, function(t, e) {
      o.push('"' + s(r[e]) + '": ' + a(e))
    }), o = "return {" + o.join(",") + "}"), Function("attrs", "deserialize", "cast", o)
  }

  function h(t, e) {
    var n, i = 0;
    return u(e, function(e) {
      var r, o = e; - 1 != p.indexOf(e) && (o = "\\" + o), r = t.match(RegExp(o, "g")), r && r.length > i && (i = r.length, n = e)
    }), n || e[0]
  }
  var p = ["|", "^"],
    d = [",", ";", "  ", "|", "^"],
    m = ["\r\n", "\r", "\n"],
    g = Array.isArray || function(t) {
      return "[object Array]" === toString.call(t)
    },
    y = function() {
      function n(t, n) {
        if (n || (n = {}), g(t)) this.mode = "encode";
        else {
          if (!e(t)) throw Error("Incompatible format!");
          this.mode = "parse"
        }
        this.data = t, this.options = {
          header: c(n.header, !1),
          cast: c(n.cast, !0)
        };
        var i = n.lineDelimiter || n.line,
          r = n.cellDelimiter || n.delimiter;
        this.isParser() ? (this.options.lineDelimiter = i || h(this.data, m), this.options.cellDelimiter = r || h(this.data, d), this.data = o(this.data, this.options.lineDelimiter)) : this.isEncoder() && (this.options.lineDelimiter = i || "\r\n", this.options.cellDelimiter = r || ",")
      }

      function i(t, e, n, i, r) {
        t(new e(n, i, r))
      }

      function o(t, e) {
        return t.slice(-e.length) != e && (t += e), t
      }

      function s(n) {
        return g(n) ? "array" : t(n) ? "object" : e(n) ? "string" : r(n) ? "null" : "primitive"
      }
      return n.prototype.set = function(t, e) {
        return this.options[t] = e
      }, n.prototype.isParser = function() {
        return "parse" == this.mode
      }, n.prototype.isEncoder = function() {
        return "encode" == this.mode
      }, n.prototype.parse = function(t) {
        function e() {
          s = {
            escaped: !1,
            quote: !1,
            cell: !0
          }
        }

        function n() {
          m.cell = ""
        }

        function r() {
          m.line = []
        }

        function o(t) {
          m.line.push(s.escaped ? t.slice(1, -1).replace(/""/g, '"') : t), n(), e()
        }

        function c(t) {
          o(t.slice(0, 1 - p.lineDelimiter.length))
        }

        function u() {
          d ? g(d) ? (a = f(y, p.cast, m.line, d), (u = function() {
            i(t, a, m.line, y, p.cast)
          })()) : d = m.line : (a || (a = f(y, p.cast, m.line)), (u = function() {
            i(t, a, m.line, y, p.cast)
          })())
        }
        if ("parse" == this.mode) {
          if (0 === this.data.trim().length) return [];
          var s, a, l, h = this.data,
            p = this.options,
            d = p.header,
            m = {
              cell: "",
              line: []
            },
            y = this.deserialize;
          t || (l = [], t = function(t) {
            l.push(t)
          }), 1 == p.lineDelimiter.length && (c = o);
          var v, A, D, b = h.length,
            j = p.cellDelimiter.charCodeAt(0),
            w = p.lineDelimiter.charCodeAt(p.lineDelimiter.length - 1);
          for (e(), v = 0, A = 0; b > v; v++) D = h.charCodeAt(v), s.cell && (s.cell = !1, 34 == D) ? s.escaped = !0 : s.escaped && 34 == D ? s.quote = !s.quote : (s.escaped && s.quote || !s.escaped) && (D == j ? (o(m.cell + h.slice(A, v)), A = v + 1) : D == w && (c(m.cell + h.slice(A, v)), A = v + 1, (m.line.length > 1 || "" !== m.line[0]) && u(), r()));
          return l ? l : this
        }
      }, n.prototype.deserialize = {
        string: function(t) {
          return t + ""
        },
        number: function(t) {
          return +t
        },
        "boolean": function(t) {
          return !!t
        }
      }, n.prototype.serialize = {
        object: function(t) {
          var e = this,
            n = Object.keys(t),
            i = Array(n.length);
          return u(n, function(n, r) {
            i[r] = e[s(t[n])](t[n])
          }), i
        },
        array: function(t) {
          var e = this,
            n = Array(t.length);
          return u(t, function(t, i) {
            n[i] = e[s(t)](t)
          }), n
        },
        string: function(t) {
          return '"' + (t + "").replace(/"/g, '""') + '"'
        },
        "null": function() {
          return ""
        },
        primitive: function(t) {
          return t
        }
      }, n.prototype.encode = function(t) {
        function n(t) {
          return t.join(c.cellDelimiter)
        }
        if ("encode" == this.mode) {
          if (0 == this.data.length) return "";
          var i, r, o = this.data,
            c = this.options,
            a = c.header,
            l = o[0],
            f = this.serialize,
            h = 0;
          t || (r = Array(o.length), t = function(t, e) {
            r[e + h] = t
          }), a && (g(a) || (i = Object.keys(l), a = i), t(n(f.array(a)), 0), h = 1);
          var p, d = s(l);
          return "array" == d ? (g(c.cast) ? (p = Array(c.cast.length), u(c.cast, function(t, n) {
            e(t) ? p[n] = t.toLowerCase() : (p[n] = t, f[t] = t)
          })) : (p = Array(l.length), u(l, function(t, e) {
            p[e] = s(t)
          })), u(o, function(e, i) {
            var r = Array(p.length);
            u(e, function(t, e) {
              r[e] = f[p[e]](t)
            }), t(n(r), i)
          })) : "object" == d && (i = Object.keys(l), g(c.cast) ? (p = Array(c.cast.length), u(c.cast, function(t, n) {
            e(t) ? p[n] = t.toLowerCase() : (p[n] = t, f[t] = t)
          })) : (p = Array(i.length), u(i, function(t, e) {
            p[e] = s(l[t])
          })), u(o, function(e, r) {
            var o = Array(i.length);
            u(i, function(t, n) {
              o[n] = f[p[n]](e[t])
            }), t(n(o), r)
          })), r ? r.join(c.lineDelimiter) : this
        }
      }, n.prototype.forEach = function(t) {
        return this[this.mode](t)
      }, n
    }();
  return y.parse = function(t, e) {
    return new y(t, e).parse()
  }, y.encode = function(t, e) {
    return new y(t, e).encode()
  }, y.forEach = function(t, e, n) {
    return 2 == arguments.length && (n = e), new y(t, e).forEach(n)
  }, y
});