UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

62 lines 8.9 kB
import { col } from "nodejs-polars"; export async function joinHeaderRows(table, options) { const { dialect } = options; const headerOffset = getHeaderOffset(dialect); const headerRows = getHeaderRows(dialect); const headerJoin = dialect?.headerJoin ?? " "; if (headerRows.length < 2) { return table; } const extraLabelsFrame = await table .withRowCount() .withColumn(col("row_nr").add(1)) .filter(col("row_nr").add(headerOffset).isIn(headerRows)) .select(...table.columns.map(name => col(name).str.concat(headerJoin))) .collect(); const labels = table.columns; const extraLabels = extraLabelsFrame.row(0); const mapping = Object.fromEntries(labels.map((label, index) => [ label, [label, extraLabels[index]].join(headerJoin), ])); return table .withRowCount() .withColumn(col("row_nr").add(1)) .filter(col("row_nr").add(headerOffset).isIn(headerRows).not()) .rename(mapping) .drop("row_nr"); } export function skipCommentRows(table, options) { const { dialect } = options; const commentOffset = getCommentOffset(dialect); if (!dialect?.commentRows) { return table; } return table .withRowCount() .withColumn(col("row_nr").add(1)) .filter(col("row_nr").add(commentOffset).isIn(dialect.commentRows).not()) .drop("row_nr"); } export function stripInitialSpace(table, options) { const { dialect } = options; if (!dialect?.skipInitialSpace) { return table; } return table.select( // TODO: rebase on stripCharsStart when it's fixed in polars // https://github.com/pola-rs/nodejs-polars/issues/336 table.columns.map(name => col(name).str.strip().as(name))); } function getHeaderOffset(dialect) { const headerRows = getHeaderRows(dialect); return headerRows.at(0) ?? 0; } function getHeaderRows(dialect) { return dialect?.header !== false ? (dialect?.headerRows ?? [1]) : []; } function getCommentOffset(dialect) { const headerRows = getHeaderRows(dialect); return headerRows.at(-1) ?? 0; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUduQyxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBWSxFQUNaLE9BQTZCO0lBRTdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQTtJQUM3QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUs7U0FDakMsWUFBWSxFQUFFO1NBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN0RSxPQUFPLEVBQUUsQ0FBQTtJQUVaLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7SUFDNUIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMzQixLQUFLO1FBQ0wsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUM3QyxDQUFDLENBQ0gsQ0FBQTtJQUVELE9BQU8sS0FBSztTQUNULFlBQVksRUFBRTtTQUNkLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM5RCxNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQVksRUFBRSxPQUE2QjtJQUN6RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRTNCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9DLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLO1NBQ1QsWUFBWSxFQUFFO1NBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsT0FBNkI7SUFDM0UsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUUzQixJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsTUFBTTtJQUNqQiw0REFBNEQ7SUFDNUQsc0RBQXNEO0lBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDMUQsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFpQjtJQUN4QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekMsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBaUI7SUFDdEMsT0FBTyxPQUFPLEVBQUUsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ3RFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE9BQWlCO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlhbGVjdCB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgeyBjb2wgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgdHlwZSB7IFRhYmxlIH0gZnJvbSBcIi4uL3RhYmxlL2luZGV4LnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGpvaW5IZWFkZXJSb3dzKFxuICB0YWJsZTogVGFibGUsXG4gIG9wdGlvbnM6IHsgZGlhbGVjdDogRGlhbGVjdCB9LFxuKSB7XG4gIGNvbnN0IHsgZGlhbGVjdCB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IGhlYWRlck9mZnNldCA9IGdldEhlYWRlck9mZnNldChkaWFsZWN0KVxuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICBjb25zdCBoZWFkZXJKb2luID0gZGlhbGVjdD8uaGVhZGVySm9pbiA/PyBcIiBcIlxuICBpZiAoaGVhZGVyUm93cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICBjb25zdCBleHRyYUxhYmVsc0ZyYW1lID0gYXdhaXQgdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChoZWFkZXJPZmZzZXQpLmlzSW4oaGVhZGVyUm93cykpXG4gICAgLnNlbGVjdCguLi50YWJsZS5jb2x1bW5zLm1hcChuYW1lID0+IGNvbChuYW1lKS5zdHIuY29uY2F0KGhlYWRlckpvaW4pKSlcbiAgICAuY29sbGVjdCgpXG5cbiAgY29uc3QgbGFiZWxzID0gdGFibGUuY29sdW1uc1xuICBjb25zdCBleHRyYUxhYmVscyA9IGV4dHJhTGFiZWxzRnJhbWUucm93KDApXG5cbiAgY29uc3QgbWFwcGluZyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBsYWJlbHMubWFwKChsYWJlbCwgaW5kZXgpID0+IFtcbiAgICAgIGxhYmVsLFxuICAgICAgW2xhYmVsLCBleHRyYUxhYmVsc1tpbmRleF1dLmpvaW4oaGVhZGVySm9pbiksXG4gICAgXSksXG4gIClcblxuICByZXR1cm4gdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChoZWFkZXJPZmZzZXQpLmlzSW4oaGVhZGVyUm93cykubm90KCkpXG4gICAgLnJlbmFtZShtYXBwaW5nKVxuICAgIC5kcm9wKFwicm93X25yXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBza2lwQ29tbWVudFJvd3ModGFibGU6IFRhYmxlLCBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSkge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBjb25zdCBjb21tZW50T2Zmc2V0ID0gZ2V0Q29tbWVudE9mZnNldChkaWFsZWN0KVxuICBpZiAoIWRpYWxlY3Q/LmNvbW1lbnRSb3dzKSB7XG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICByZXR1cm4gdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChjb21tZW50T2Zmc2V0KS5pc0luKGRpYWxlY3QuY29tbWVudFJvd3MpLm5vdCgpKVxuICAgIC5kcm9wKFwicm93X25yXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEluaXRpYWxTcGFjZSh0YWJsZTogVGFibGUsIG9wdGlvbnM6IHsgZGlhbGVjdDogRGlhbGVjdCB9KSB7XG4gIGNvbnN0IHsgZGlhbGVjdCB9ID0gb3B0aW9uc1xuXG4gIGlmICghZGlhbGVjdD8uc2tpcEluaXRpYWxTcGFjZSkge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlLnNlbGVjdChcbiAgICAvLyBUT0RPOiByZWJhc2Ugb24gc3RyaXBDaGFyc1N0YXJ0IHdoZW4gaXQncyBmaXhlZCBpbiBwb2xhcnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9sYS1ycy9ub2RlanMtcG9sYXJzL2lzc3Vlcy8zMzZcbiAgICB0YWJsZS5jb2x1bW5zLm1hcChuYW1lID0+IGNvbChuYW1lKS5zdHIuc3RyaXAoKS5hcyhuYW1lKSksXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyT2Zmc2V0KGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhlYWRlclJvd3MgPSBnZXRIZWFkZXJSb3dzKGRpYWxlY3QpXG4gIHJldHVybiBoZWFkZXJSb3dzLmF0KDApID8/IDBcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyUm93cyhkaWFsZWN0PzogRGlhbGVjdCkge1xuICByZXR1cm4gZGlhbGVjdD8uaGVhZGVyICE9PSBmYWxzZSA/IChkaWFsZWN0Py5oZWFkZXJSb3dzID8/IFsxXSkgOiBbXVxufVxuXG5mdW5jdGlvbiBnZXRDb21tZW50T2Zmc2V0KGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhlYWRlclJvd3MgPSBnZXRIZWFkZXJSb3dzKGRpYWxlY3QpXG4gIHJldHVybiBoZWFkZXJSb3dzLmF0KC0xKSA/PyAwXG59XG4iXX0=