@dpkit/table
Version:
Data Package implementation in TypeScript.
62 lines • 8.9 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUduQyxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBWSxFQUNaLE9BQTZCO0lBRTdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQTtJQUM3QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUs7U0FDakMsWUFBWSxFQUFFO1NBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN0RSxPQUFPLEVBQUUsQ0FBQTtJQUVaLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7SUFDNUIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FB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ZHBraXQvY29yZVwiXG5pbXBvcnQgeyBjb2wgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgdHlwZSB7IFRhYmxlIH0gZnJvbSBcIi4uL3RhYmxlL2luZGV4LnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGpvaW5IZWFkZXJSb3dzKFxuICB0YWJsZTogVGFibGUsXG4gIG9wdGlvbnM6IHsgZGlhbGVjdDogRGlhbGVjdCB9LFxuKSB7XG4gIGNvbnN0IHsgZGlhbGVjdCB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IGhlYWRlck9mZnNldCA9IGdldEhlYWRlck9mZnNldChkaWFsZWN0KVxuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICBjb25zdCBoZWFkZXJKb2luID0gZGlhbGVjdD8uaGVhZGVySm9pbiA/PyBcIiBcIlxuICBpZiAoaGVhZGVyUm93cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICBjb25zdCBleHRyYUxhYmVsc0ZyYW1lID0gYXdhaXQgdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChoZWFkZXJPZmZzZXQpLmlzSW4oaGVhZGVyUm93cykpXG4gICAgLnNlbGVjdCguLi50YWJsZS5jb2x1bW5zLm1hcChuYW1lID0+IGNvbChuYW1lKS5zdHIuY29uY2F0KGhlYWRlckpvaW4pKSlcbiAgICAuY29sbGVjdCgpXG5cbiAgY29uc3QgbGFiZWxzID0gdGFibGUuY29sdW1uc1xuICBjb25zdCBleHRyYUxhYmVscyA9IGV4dHJhTGFiZWxzRnJhbWUucm93KDApXG5cbiAgY29uc3QgbWFwcGluZyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBsYWJlbHMubWFwKChsYWJlbCwgaW5kZXgpID0+IFtcbiAgICAgIGxhYmVsLFxuICAgICAgW2xhYmVsLCBleHRyYUxhYmVsc1tpbmRleF1dLmpvaW4oaGVhZGVySm9pbiksXG4gICAgXSksXG4gIClcblxuICByZXR1cm4gdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChoZWFkZXJPZmZzZXQpLmlzSW4oaGVhZGVyUm93cykubm90KCkpXG4gICAgLnJlbmFtZShtYXBwaW5nKVxuICAgIC5kcm9wKFwicm93X25yXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBza2lwQ29tbWVudFJvd3ModGFibGU6IFRhYmxlLCBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSkge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBjb25zdCBjb21tZW50T2Zmc2V0ID0gZ2V0Q29tbWVudE9mZnNldChkaWFsZWN0KVxuICBpZiAoIWRpYWxlY3Q/LmNvbW1lbnRSb3dzKSB7XG4gICAgcmV0dXJuIHRhYmxlXG4gIH1cblxuICByZXR1cm4gdGFibGVcbiAgICAud2l0aFJvd0NvdW50KClcbiAgICAud2l0aENvbHVtbihjb2woXCJyb3dfbnJcIikuYWRkKDEpKVxuICAgIC5maWx0ZXIoY29sKFwicm93X25yXCIpLmFkZChjb21tZW50T2Zmc2V0KS5pc0luKGRpYWxlY3QuY29tbWVudFJvd3MpLm5vdCgpKVxuICAgIC5kcm9wKFwicm93X25yXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEluaXRpYWxTcGFjZSh0YWJsZTogVGFibGUsIG9wdGlvbnM6IHsgZGlhbGVjdDogRGlhbGVjdCB9KSB7XG4gIGNvbnN0IHsgZGlhbGVjdCB9ID0gb3B0aW9uc1xuXG4gIGlmICghZGlhbGVjdD8uc2tpcEluaXRpYWxTcGFjZSkge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlLnNlbGVjdChcbiAgICAvLyBUT0RPOiByZWJhc2Ugb24gc3RyaXBDaGFyc1N0YXJ0IHdoZW4gaXQncyBmaXhlZCBpbiBwb2xhcnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9sYS1ycy9ub2RlanMtcG9sYXJzL2lzc3Vlcy8zMzZcbiAgICB0YWJsZS5jb2x1bW5zLm1hcChuYW1lID0+IGNvbChuYW1lKS5zdHIuc3RyaXAoKS5hcyhuYW1lKSksXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyT2Zmc2V0KGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhlYWRlclJvd3MgPSBnZXRIZWFkZXJSb3dzKGRpYWxlY3QpXG4gIHJldHVybiBoZWFkZXJSb3dzLmF0KDApID8/IDBcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyUm93cyhkaWFsZWN0PzogRGlhbGVjdCkge1xuICByZXR1cm4gZGlhbGVjdD8uaGVhZGVyICE9PSBmYWxzZSA/IChkaWFsZWN0Py5oZWFkZXJSb3dzID8/IFsxXSkgOiBbXVxufVxuXG5mdW5jdGlvbiBnZXRDb21tZW50T2Zmc2V0KGRpYWxlY3Q/OiBEaWFsZWN0KSB7XG4gIGNvbnN0IGhlYWRlclJvd3MgPSBnZXRIZWFkZXJSb3dzKGRpYWxlY3QpXG4gIHJldHVybiBoZWFkZXJSb3dzLmF0KC0xKSA/PyAwXG59XG4iXX0=