UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

62 lines 8.89 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUduQyxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBWSxFQUNaLE9BQTZCO0lBRTdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFFM0IsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLEdBQUcsQ0FBQTtJQUM3QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUs7U0FDakMsWUFBWSxFQUFFO1NBQ2QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDbkUsT0FBTyxFQUFFLENBQUE7SUFFWixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBQzVCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FB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L2NvcmVcIlxuaW1wb3J0IHsgY29sIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHR5cGUgeyBUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBqb2luSGVhZGVyUm93cyhcbiAgdGFibGU6IFRhYmxlLFxuICBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSxcbikge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBjb25zdCBoZWFkZXJPZmZzZXQgPSBnZXRIZWFkZXJPZmZzZXQoZGlhbGVjdClcbiAgY29uc3QgaGVhZGVyUm93cyA9IGdldEhlYWRlclJvd3MoZGlhbGVjdClcbiAgY29uc3QgaGVhZGVySm9pbiA9IGRpYWxlY3Q/LmhlYWRlckpvaW4gPz8gXCIgXCJcbiAgaWYgKGhlYWRlclJvd3MubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgY29uc3QgZXh0cmFMYWJlbHNGcmFtZSA9IGF3YWl0IHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoaGVhZGVyT2Zmc2V0KS5pc0luKGhlYWRlclJvd3MpKVxuICAgIC5zZWxlY3QodGFibGUuY29sdW1ucy5tYXAobmFtZSA9PiBjb2wobmFtZSkuc3RyLmNvbmNhdChoZWFkZXJKb2luKSkpXG4gICAgLmNvbGxlY3QoKVxuXG4gIGNvbnN0IGxhYmVscyA9IHRhYmxlLmNvbHVtbnNcbiAgY29uc3QgZXh0cmFMYWJlbHMgPSBleHRyYUxhYmVsc0ZyYW1lLnJvdygwKVxuXG4gIGNvbnN0IG1hcHBpbmcgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbGFiZWxzLm1hcCgobGFiZWwsIGluZGV4KSA9PiBbXG4gICAgICBsYWJlbCxcbiAgICAgIFtsYWJlbCwgZXh0cmFMYWJlbHNbaW5kZXhdXS5qb2luKGhlYWRlckpvaW4pLFxuICAgIF0pLFxuICApXG5cbiAgcmV0dXJuIHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoaGVhZGVyT2Zmc2V0KS5pc0luKGhlYWRlclJvd3MpLm5vdCgpKVxuICAgIC5yZW5hbWUobWFwcGluZylcbiAgICAuZHJvcChcInJvd19uclwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2tpcENvbW1lbnRSb3dzKHRhYmxlOiBUYWJsZSwgb3B0aW9uczogeyBkaWFsZWN0OiBEaWFsZWN0IH0pIHtcbiAgY29uc3QgeyBkaWFsZWN0IH0gPSBvcHRpb25zXG5cbiAgY29uc3QgY29tbWVudE9mZnNldCA9IGdldENvbW1lbnRPZmZzZXQoZGlhbGVjdClcbiAgaWYgKCFkaWFsZWN0Py5jb21tZW50Um93cykge1xuICAgIHJldHVybiB0YWJsZVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlXG4gICAgLndpdGhSb3dDb3VudCgpXG4gICAgLndpdGhDb2x1bW4oY29sKFwicm93X25yXCIpLmFkZCgxKSlcbiAgICAuZmlsdGVyKGNvbChcInJvd19uclwiKS5hZGQoY29tbWVudE9mZnNldCkuaXNJbihkaWFsZWN0LmNvbW1lbnRSb3dzKS5ub3QoKSlcbiAgICAuZHJvcChcInJvd19uclwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBJbml0aWFsU3BhY2UodGFibGU6IFRhYmxlLCBvcHRpb25zOiB7IGRpYWxlY3Q6IERpYWxlY3QgfSkge1xuICBjb25zdCB7IGRpYWxlY3QgfSA9IG9wdGlvbnNcblxuICBpZiAoIWRpYWxlY3Q/LnNraXBJbml0aWFsU3BhY2UpIHtcbiAgICByZXR1cm4gdGFibGVcbiAgfVxuXG4gIHJldHVybiB0YWJsZS5zZWxlY3QoXG4gICAgLy8gVE9ETzogcmViYXNlIG9uIHN0cmlwQ2hhcnNTdGFydCB3aGVuIGl0J3MgZml4ZWQgaW4gcG9sYXJzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGEtcnMvbm9kZWpzLXBvbGFycy9pc3N1ZXMvMzM2XG4gICAgdGFibGUuY29sdW1ucy5tYXAobmFtZSA9PiBjb2wobmFtZSkuc3RyLnN0cmlwKCkuYXMobmFtZSkpLFxuICApXG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlck9mZnNldChkaWFsZWN0PzogRGlhbGVjdCkge1xuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICByZXR1cm4gaGVhZGVyUm93cy5hdCgwKSA/PyAwXG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlclJvd3MoZGlhbGVjdD86IERpYWxlY3QpIHtcbiAgcmV0dXJuIGRpYWxlY3Q/LmhlYWRlciAhPT0gZmFsc2UgPyAoZGlhbGVjdD8uaGVhZGVyUm93cyA/PyBbMV0pIDogW11cbn1cblxuZnVuY3Rpb24gZ2V0Q29tbWVudE9mZnNldChkaWFsZWN0PzogRGlhbGVjdCkge1xuICBjb25zdCBoZWFkZXJSb3dzID0gZ2V0SGVhZGVyUm93cyhkaWFsZWN0KVxuICByZXR1cm4gaGVhZGVyUm93cy5hdCgtMSkgPz8gMFxufVxuIl19