@dpkit/table
Version:
Data Package implementation in TypeScript.
62 lines • 8.89 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUduQyxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBWSxFQUNaLE9BQTZCO0lBRTdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQTtJQUM3QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUs7U0FDakMsWUFBWSxFQUFFO1NBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDbkUsT0FBTyxFQUFFLENBQUE7SUFFWixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBQzVCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FB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L2NvcmVcIlxuaW1wb3J0IHsgY29sIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHR5cGUgeyBUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBqb2luSGVhZGVyUm93cyhcbiAgdGFibGU6IFRhYmxlLFxuICBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSxcbikge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBjb25zdCBoZWFkZXJPZmZzZXQgPSBnZXRIZWFkZXJPZmZzZXQoZGlhbGVjdClcbiAgY29uc3QgaGVhZGVyUm93cyA9IGdldEhlYWRlclJvd3MoZGlhbGVjdClcbiAgY29uc3QgaGVhZGVySm9pbiA9IGRpYWxlY3Q/LmhlYWRlckpvaW4gPz8gXCIgXCJcbiAgaWYgKGhlYWRlclJvd3MubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgY29uc3QgZXh0cmFMYWJlbHNGcmFtZSA9IGF3YWl0IHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoaGVhZGVyT2Zmc2V0KS5pc0luKGhlYWRlclJvd3MpKVxuICAgIC5zZWxlY3QodGFibGUuY29sdW1ucy5tYXAobmFtZSA9PiBjb2wobmFtZSkuc3RyLmNvbmNhdChoZWFkZXJKb2luKSkpXG4gICAgLmNvbGxlY3QoKVxuXG4gIGNvbnN0IGxhYmVscyA9IHRhYmxlLmNvbHVtbnNcbiAgY29uc3QgZXh0cmFMYWJlbHMgPSBleHRyYUxhYmVsc0ZyYW1lLnJvdygwKVxuXG4gIGNvbnN0IG1hcHBpbmcgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbGFiZWxzLm1hcCgobGFiZWwsIGluZGV4KSA9PiBbXG4gICAgICBsYWJlbCxcbiAgICAgIFtsYWJlbCwgZXh0cmFMYWJlbHNbaW5kZXhdXS5qb2luKGhlYWRlckpvaW4pLFxuICAgIF0pLFxuICApXG5cbiAgcmV0dXJuIHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoaGVhZGVyT2Zmc2V0KS5pc0luKGhlYWRlclJvd3MpLm5vdCgpKVxuICAgIC5yZW5hbWUobWFwcGluZylcbiAgICAuZHJvcChcInJvd19uclwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2tpcENvbW1lbnRSb3dzKHRhYmxlOiBUYWJsZSwgb3B0aW9uczogeyBkaWFsZWN0OiBEaWFsZWN0IH0pIHtcbiAgY29uc3QgeyBkaWFsZWN0IH0gPSBvcHRpb25zXG5cbiAgY29uc3QgY29tbWVudE9mZnNldCA9IGdldENvbW1lbnRPZmZzZXQoZGlhbGVjdClcbiAgaWYgKCFkaWFsZWN0Py5jb21tZW50Um93cykge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoY29tbWVudE9mZnNldCkuaXNJbihkaWFsZWN0LmNvbW1lbnRSb3dzKS5ub3QoKSlcbiAgICAuZHJvcChcInJvd19uclwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBJbml0aWFsU3BhY2UodGFibGU6IFRhYmxlLCBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSkge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBpZiAoIWRpYWxlY3Q/LnNraXBJbml0aWFsU3BhY2UpIHtcbiAgICByZXR1cm4gdGFibGVcbiAgfVxuXG4gIHJldHVybiB0YWJsZS5zZWxlY3QoXG4gICAgLy8gVE9ETzogcmViYXNlIG9uIHN0cmlwQ2hhcnNTdGFydCB3aGVuIGl0J3MgZml4ZWQgaW4gcG9sYXJzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGEtcnMvbm9kZWpzLXBvbGFycy9pc3N1ZXMvMzM2XG4gICAgdGFibGUuY29sdW1ucy5tYXAobmFtZSA9PiBjb2wobmFtZSkuc3RyLnN0cmlwKCkuYXMobmFtZSkpLFxuICApXG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlck9mZnNldChkaWFsZWN0PzogRGlhbGVjdCkge1xuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICByZXR1cm4gaGVhZGVyUm93cy5hdCgwKSA/PyAwXG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlclJvd3MoZGlhbGVjdD86IERpYWxlY3QpIHtcbiAgcmV0dXJuIGRpYWxlY3Q/LmhlYWRlciAhPT0gZmFsc2UgPyAoZGlhbGVjdD8uaGVhZGVyUm93cyA/PyBbMV0pIDogW11cbn1cblxuZnVuY3Rpb24gZ2V0Q29tbWVudE9mZnNldChkaWFsZWN0PzogRGlhbGVjdCkge1xuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICByZXR1cm4gaGVhZGVyUm93cy5hdCgtMSkgPz8gMFxufVxuIl19