UNPKG

@dpkit/table

Version:

Data Package implementation in TypeScript.

58 lines (45 loc) 1.74 kB
import type { IntegerField } from "@dpkit/core" import { DataType, col, lit, when } from "nodejs-polars" import type { Expr } from "nodejs-polars" // TODO: support categories // TODO: support categoriesOrder export function parseIntegerField(field: IntegerField, expr?: Expr) { expr = expr ?? col(field.name) const groupChar = field.groupChar const bareNumber = field.bareNumber const flattenCategories = field.categories?.map(it => typeof it === "number" ? it : it.value, ) // Handle non-bare numbers (with currency symbols, percent signs, etc.) if (bareNumber === false) { // Preserve the minus sign when removing leading characters expr = expr.str.replaceAll("^[^\\d\\-]+", "") expr = expr.str.replaceAll("[^\\d\\-]+$", "") } // Handle group character (thousands separator) if (groupChar) { // Escape special characters for regex const escapedGroupChar = groupChar.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") expr = expr.str.replaceAll(escapedGroupChar, "") } // Cast to int64 (will handle values up to 2^63-1) expr = expr.cast(DataType.Int64) // Currently, only string categories are supported if (flattenCategories) { return when(expr.isIn(flattenCategories)) .then(expr) .otherwise(lit(null)) .alias(field.name) } return expr } export function stringifyIntegerField(field: IntegerField, expr?: Expr) { expr = expr ?? col(field.name) // Convert to string expr = expr.cast(DataType.String) //const groupChar = field.groupChar //const bareNumber = field.bareNumber // TODO: Add group character formatting (thousands separator) when needed // TODO: Add non-bare number formatting (currency symbols, etc.) when needed return expr }