UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

84 lines 10.7 kB
export function getRecordsFromRows(rows, dialect) { const records = []; const header = getHeaderFromRows(rows, dialect); const content = getContentFromRows(rows, dialect); const labels = getLabelsFromHeader(header, dialect); if (!labels) { return records; } for (const row of content) { const isCommentedRow = getIsCommentedRow(row, dialect); if (isCommentedRow) { continue; } records.push(Object.fromEntries(labels.map((label, index) => [label, row[index]]))); } return records; } function getHeaderFromRows(rows, dialect) { const hasHeader = dialect?.header !== false; const headerRows = dialect?.headerRows ?? [1]; if (!hasHeader) { const length = Math.max(...rows.map(row => row.length)); const labels = Array.from({ length }, (_, idx) => `field${idx + 1}`); return [labels]; } const header = []; for (const number of headerRows) { const row = rows[number - 1]; if (row) { header.push(row); } } return header; } function getContentFromRows(rows, dialect) { const hasHeader = dialect?.header !== false; const headerRows = dialect?.headerRows ?? (hasHeader ? [1] : []); const commentRows = dialect?.commentRows ?? []; const skipRows = headerRows[0] ? headerRows[0] - 1 : 0; const content = []; for (const [index, row] of rows.entries()) { const number = index + 1; if (number <= skipRows) { continue; } if (headerRows.includes(number)) { continue; } if (commentRows.includes(number)) { continue; } const isCommentedRow = getIsCommentedRow(row, dialect); if (isCommentedRow) { continue; } content.push(row); } return content; } function getLabelsFromHeader(header, dialect) { if (!header[0]) { return undefined; } const labels = header[0].map(String); const headerJoin = dialect?.headerJoin ?? " "; for (const row of header.slice(1)) { for (const [index, label] of row.entries()) { const prefix = labels[index] ?? ""; labels[index] = [prefix, label].filter(Boolean).join(headerJoin); } } return labels; } function getIsCommentedRow(row, dialect) { const commentChar = dialect?.commentChar; if (!commentChar) { return false; } if (typeof row[0] !== "string") { return false; } return row[0].startsWith(commentChar); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGF0YS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQWUsRUFBRSxPQUFpQjtJQUNuRSxNQUFNLE9BQU8sR0FBaUIsRUFBRSxDQUFBO0lBRWhDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMvQyxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFakQsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLFNBQVE7UUFDVixDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FDVixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBZSxFQUFFLE9BQWlCO0lBQzNELE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssS0FBSyxDQUFBO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksQ0FBQyxD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LEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBYyxFQUFFLE9BQWlCO0lBQzFELE1BQU0sV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLENBQUE7SUFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpYWxlY3QgfSBmcm9tIFwiQGRwa2l0L2NvcmVcIlxuXG5leHBvcnQgdHlwZSBEYXRhUm93ID0gdW5rbm93bltdXG5leHBvcnQgdHlwZSBEYXRhUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY29yZHNGcm9tUm93cyhyb3dzOiBEYXRhUm93W10sIGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IHJlY29yZHM6IERhdGFSZWNvcmRbXSA9IFtdXG5cbiAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyRnJvbVJvd3Mocm93cywgZGlhbGVjdClcbiAgY29uc3QgY29udGVudCA9IGdldENvbnRlbnRGcm9tUm93cyhyb3dzLCBkaWFsZWN0KVxuXG4gIGNvbnN0IGxhYmVscyA9IGdldExhYmVsc0Zyb21IZWFkZXIoaGVhZGVyLCBkaWFsZWN0KVxuICBpZiAoIWxhYmVscykge1xuICAgIHJldHVybiByZWNvcmRzXG4gIH1cblxuICBmb3IgKGNvbnN0IHJvdyBvZiBjb250ZW50KSB7XG4gICAgY29uc3QgaXNDb21tZW50ZWRSb3cgPSBnZXRJc0NvbW1lbnRlZFJvdyhyb3csIGRpYWxlY3QpXG4gICAgaWYgKGlzQ29tbWVudGVkUm93KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHJlY29yZHMucHVzaChcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhsYWJlbHMubWFwKChsYWJlbCwgaW5kZXgpID0+IFtsYWJlbCwgcm93W2luZGV4XV0pKSxcbiAgICApXG4gIH1cblxuICByZXR1cm4gcmVjb3Jkc1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGcm9tUm93cyhyb3dzOiBEYXRhUm93W10sIGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhhc0hlYWRlciA9IGRpYWxlY3Q/LmhlYWRlciAhPT0gZmFsc2VcbiAgY29uc3QgaGVhZGVyUm93cyA9IGRpYWxlY3Q/LmhlYWRlclJvd3MgPz8gWzFdXG5cbiAgaWYgKCFoYXNIZWFkZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCguLi5yb3dzLm1hcChyb3cgPT4gcm93Lmxlbmd0aCkpXG4gICAgY29uc3QgbGFiZWxzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaWR4KSA9PiBgZmllbGQke2lkeCArIDF9YClcblxuICAgIHJldHVybiBbbGFiZWxzXVxuICB9XG5cbiAgY29uc3QgaGVhZGVyOiBEYXRhUm93W10gPSBbXVxuICBmb3IgKGNvbnN0IG51bWJlciBvZiBoZWFkZXJSb3dzKSB7XG4gICAgY29uc3Qgcm93ID0gcm93c1tudW1iZXIgLSAxXVxuICAgIGlmIChyb3cpIHtcbiAgICAgIGhlYWRlci5wdXNoKHJvdylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGVhZGVyXG59XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRGcm9tUm93cyhyb3dzOiBEYXRhUm93W10sIGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhhc0hlYWRlciA9IGRpYWxlY3Q/LmhlYWRlciAhPT0gZmFsc2VcbiAgY29uc3QgaGVhZGVyUm93cyA9IGRpYWxlY3Q/LmhlYWRlclJvd3MgPz8gKGhhc0hlYWRlciA/IFsxXSA6IFtdKVxuICBjb25zdCBjb21tZW50Um93cyA9IGRpYWxlY3Q/LmNvbW1lbnRSb3dzID8/IFtdXG4gIGNvbnN0IHNraXBSb3dzID0gaGVhZGVyUm93c1swXSA/IGhlYWRlclJvd3NbMF0gLSAxIDogMFxuXG4gIGNvbnN0IGNvbnRlbnQ6IERhdGFSb3dbXSA9IFtdXG4gIGZvciAoY29uc3QgW2luZGV4LCByb3ddIG9mIHJvd3MuZW50cmllcygpKSB7XG4gICAgY29uc3QgbnVtYmVyID0gaW5kZXggKyAxXG5cbiAgICBpZiAobnVtYmVyIDw9IHNraXBSb3dzKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJSb3dzLmluY2x1ZGVzKG51bWJlcikpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNvbW1lbnRSb3dzLmluY2x1ZGVzKG51bWJlcikpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgaXNDb21tZW50ZWRSb3cgPSBnZXRJc0NvbW1lbnRlZFJvdyhyb3csIGRpYWxlY3QpXG4gICAgaWYgKGlzQ29tbWVudGVkUm93KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnRlbnQucHVzaChyb3cpXG4gIH1cblxuICByZXR1cm4gY29udGVudFxufVxuXG5mdW5jdGlvbiBnZXRMYWJlbHNGcm9tSGVhZGVyKGhlYWRlcjogRGF0YVJvd1tdLCBkaWFsZWN0PzogRGlhbGVjdCkge1xuICBpZiAoIWhlYWRlclswXSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IGxhYmVscyA9IGhlYWRlclswXS5tYXAoU3RyaW5nKVxuICBjb25zdCBoZWFkZXJKb2luID0gZGlhbGVjdD8uaGVhZGVySm9pbiA/PyBcIiBcIlxuXG4gIGZvciAoY29uc3Qgcm93IG9mIGhlYWRlci5zbGljZSgxKSkge1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBsYWJlbF0gb2Ygcm93LmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gbGFiZWxzW2luZGV4XSA/PyBcIlwiXG4gICAgICBsYWJlbHNbaW5kZXhdID0gW3ByZWZpeCwgbGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKGhlYWRlckpvaW4pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhYmVsc1xufVxuXG5mdW5jdGlvbiBnZXRJc0NvbW1lbnRlZFJvdyhyb3c6IHVua25vd25bXSwgZGlhbGVjdD86IERpYWxlY3QpIHtcbiAgY29uc3QgY29tbWVudENoYXIgPSBkaWFsZWN0Py5jb21tZW50Q2hhclxuXG4gIGlmICghY29tbWVudENoYXIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygcm93WzBdICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gcm93WzBdLnN0YXJ0c1dpdGgoY29tbWVudENoYXIpXG59XG4iXX0=