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) => `column_${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/LmhlYWRlclJvd3MgPz8gWzFdXG5cbiAgaWYgKCFoYXNIZWFkZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCguLi5yb3dzLm1hcChyb3cgPT4gcm93Lmxlbmd0aCkpXG4gICAgY29uc3QgbGFiZWxzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaWR4KSA9PiBgY29sdW1uXyR7aWR4ICsgMX1gKVxuXG4gICAgcmV0dXJuIFtsYWJlbHNdXG4gIH1cblxuICBjb25zdCBoZWFkZXI6IERhdGFSb3dbXSA9IFtdXG4gIGZvciAoY29uc3QgbnVtYmVyIG9mIGhlYWRlclJvd3MpIHtcbiAgICBjb25zdCByb3cgPSByb3dzW251bWJlciAtIDFdXG4gICAgaWYgKHJvdykge1xuICAgICAgaGVhZGVyLnB1c2gocm93KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWFkZXJcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudEZyb21Sb3dzKHJvd3M6IERhdGFSb3dbXSwgZGlhbGVjdD86IERpYWxlY3QpIHtcbiAgY29uc3QgaGFzSGVhZGVyID0gZGlhbGVjdD8uaGVhZGVyICE9PSBmYWxzZVxuICBjb25zdCBoZWFkZXJSb3dzID0gZGlhbGVjdD8uaGVhZGVyUm93cyA/PyAoaGFzSGVhZGVyID8gWzFdIDogW10pXG4gIGNvbnN0IGNvbW1lbnRSb3dzID0gZGlhbGVjdD8uY29tbWVudFJvd3MgPz8gW11cbiAgY29uc3Qgc2tpcFJvd3MgPSBoZWFkZXJSb3dzWzBdID8gaGVhZGVyUm93c1swXSAtIDEgOiAwXG5cbiAgY29uc3QgY29udGVudDogRGF0YVJvd1tdID0gW11cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJvd10gb2Ygcm93cy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBudW1iZXIgPSBpbmRleCArIDFcblxuICAgIGlmIChudW1iZXIgPD0gc2tpcFJvd3MpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlclJvd3MuaW5jbHVkZXMobnVtYmVyKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY29tbWVudFJvd3MuaW5jbHVkZXMobnVtYmVyKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBpc0NvbW1lbnRlZFJvdyA9IGdldElzQ29tbWVudGVkUm93KHJvdywgZGlhbGVjdClcbiAgICBpZiAoaXNDb21tZW50ZWRSb3cpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29udGVudC5wdXNoKHJvdylcbiAgfVxuXG4gIHJldHVybiBjb250ZW50XG59XG5cbmZ1bmN0aW9uIGdldExhYmVsc0Zyb21IZWFkZXIoaGVhZGVyOiBEYXRhUm93W10sIGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGlmICghaGVhZGVyWzBdKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgbGFiZWxzID0gaGVhZGVyWzBdLm1hcChTdHJpbmcpXG4gIGNvbnN0IGhlYWRlckpvaW4gPSBkaWFsZWN0Py5oZWFkZXJKb2luID8/IFwiIFwiXG5cbiAgZm9yIChjb25zdCByb3cgb2YgaGVhZGVyLnNsaWNlKDEpKSB7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGxhYmVsXSBvZiByb3cuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBsYWJlbHNbaW5kZXhdID8/IFwiXCJcbiAgICAgIGxhYmVsc1tpbmRleF0gPSBbcHJlZml4LCBsYWJlbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oaGVhZGVySm9pbilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFiZWxzXG59XG5cbmZ1bmN0aW9uIGdldElzQ29tbWVudGVkUm93KHJvdzogdW5rbm93bltdLCBkaWFsZWN0PzogRGlhbGVjdCkge1xuICBjb25zdCBjb21tZW50Q2hhciA9IGRpYWxlY3Q/LmNvbW1lbnRDaGFyXG5cbiAgaWYgKCFjb21tZW50Q2hhcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHR5cGVvZiByb3dbMF0gIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiByb3dbMF0uc3RhcnRzV2l0aChjb21tZW50Q2hhcilcbn1cbiJdfQ==