123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- // https://d3js.org/d3-dsv/ v3.0.1 Copyright 2013-2021 Mike Bostock
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
- }(this, (function (exports) { 'use strict';
-
- var EOL = {},
- EOF = {},
- QUOTE = 34,
- NEWLINE = 10,
- RETURN = 13;
-
- function objectConverter(columns) {
- return new Function("d", "return {" + columns.map(function(name, i) {
- return JSON.stringify(name) + ": d[" + i + "] || \"\"";
- }).join(",") + "}");
- }
-
- function customConverter(columns, f) {
- var object = objectConverter(columns);
- return function(row, i) {
- return f(object(row), i, columns);
- };
- }
-
- // Compute unique columns in order of discovery.
- function inferColumns(rows) {
- var columnSet = Object.create(null),
- columns = [];
-
- rows.forEach(function(row) {
- for (var column in row) {
- if (!(column in columnSet)) {
- columns.push(columnSet[column] = column);
- }
- }
- });
-
- return columns;
- }
-
- function pad(value, width) {
- var s = value + "", length = s.length;
- return length < width ? new Array(width - length + 1).join(0) + s : s;
- }
-
- function formatYear(year) {
- return year < 0 ? "-" + pad(-year, 6)
- : year > 9999 ? "+" + pad(year, 6)
- : pad(year, 4);
- }
-
- function formatDate(date) {
- var hours = date.getUTCHours(),
- minutes = date.getUTCMinutes(),
- seconds = date.getUTCSeconds(),
- milliseconds = date.getUTCMilliseconds();
- return isNaN(date) ? "Invalid Date"
- : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
- + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
- : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
- : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
- : "");
- }
-
- function dsv(delimiter) {
- var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
- DELIMITER = delimiter.charCodeAt(0);
-
- function parse(text, f) {
- var convert, columns, rows = parseRows(text, function(row, i) {
- if (convert) return convert(row, i - 1);
- columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
- });
- rows.columns = columns || [];
- return rows;
- }
-
- function parseRows(text, f) {
- var rows = [], // output rows
- N = text.length,
- I = 0, // current character index
- n = 0, // current line number
- t, // current token
- eof = N <= 0, // current token followed by EOF?
- eol = false; // current token followed by EOL?
-
- // Strip the trailing newline.
- if (text.charCodeAt(N - 1) === NEWLINE) --N;
- if (text.charCodeAt(N - 1) === RETURN) --N;
-
- function token() {
- if (eof) return EOF;
- if (eol) return eol = false, EOL;
-
- // Unescape quotes.
- var i, j = I, c;
- if (text.charCodeAt(j) === QUOTE) {
- while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);
- if ((i = I) >= N) eof = true;
- else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;
- else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
- return text.slice(j + 1, i - 1).replace(/""/g, "\"");
- }
-
- // Find next delimiter or newline.
- while (I < N) {
- if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;
- else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
- else if (c !== DELIMITER) continue;
- return text.slice(j, i);
- }
-
- // Return last token before EOF.
- return eof = true, text.slice(j, N);
- }
-
- while ((t = token()) !== EOF) {
- var row = [];
- while (t !== EOL && t !== EOF) row.push(t), t = token();
- if (f && (row = f(row, n++)) == null) continue;
- rows.push(row);
- }
-
- return rows;
- }
-
- function preformatBody(rows, columns) {
- return rows.map(function(row) {
- return columns.map(function(column) {
- return formatValue(row[column]);
- }).join(delimiter);
- });
- }
-
- function format(rows, columns) {
- if (columns == null) columns = inferColumns(rows);
- return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
- }
-
- function formatBody(rows, columns) {
- if (columns == null) columns = inferColumns(rows);
- return preformatBody(rows, columns).join("\n");
- }
-
- function formatRows(rows) {
- return rows.map(formatRow).join("\n");
- }
-
- function formatRow(row) {
- return row.map(formatValue).join(delimiter);
- }
-
- function formatValue(value) {
- return value == null ? ""
- : value instanceof Date ? formatDate(value)
- : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
- : value;
- }
-
- return {
- parse: parse,
- parseRows: parseRows,
- format: format,
- formatBody: formatBody,
- formatRows: formatRows,
- formatRow: formatRow,
- formatValue: formatValue
- };
- }
-
- var csv = dsv(",");
-
- var csvParse = csv.parse;
- var csvParseRows = csv.parseRows;
- var csvFormat = csv.format;
- var csvFormatBody = csv.formatBody;
- var csvFormatRows = csv.formatRows;
- var csvFormatRow = csv.formatRow;
- var csvFormatValue = csv.formatValue;
-
- var tsv = dsv("\t");
-
- var tsvParse = tsv.parse;
- var tsvParseRows = tsv.parseRows;
- var tsvFormat = tsv.format;
- var tsvFormatBody = tsv.formatBody;
- var tsvFormatRows = tsv.formatRows;
- var tsvFormatRow = tsv.formatRow;
- var tsvFormatValue = tsv.formatValue;
-
- function autoType(object) {
- for (var key in object) {
- var value = object[key].trim(), number, m;
- if (!value) value = null;
- else if (value === "true") value = true;
- else if (value === "false") value = false;
- else if (value === "NaN") value = NaN;
- else if (!isNaN(number = +value)) value = number;
- else if (m = value.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)) {
- if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, "/").replace(/T/, " ");
- value = new Date(value);
- }
- else continue;
- object[key] = value;
- }
- return object;
- }
-
- // https://github.com/d3/d3-dsv/issues/45
- const fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours();
-
- exports.autoType = autoType;
- exports.csvFormat = csvFormat;
- exports.csvFormatBody = csvFormatBody;
- exports.csvFormatRow = csvFormatRow;
- exports.csvFormatRows = csvFormatRows;
- exports.csvFormatValue = csvFormatValue;
- exports.csvParse = csvParse;
- exports.csvParseRows = csvParseRows;
- exports.dsvFormat = dsv;
- exports.tsvFormat = tsvFormat;
- exports.tsvFormatBody = tsvFormatBody;
- exports.tsvFormatRow = tsvFormatRow;
- exports.tsvFormatRows = tsvFormatRows;
- exports.tsvFormatValue = tsvFormatValue;
- exports.tsvParse = tsvParse;
- exports.tsvParseRows = tsvParseRows;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
- })));
|