goldenflow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/types.ts","../../src/core/transforms/registry.ts","../../src/core/domains/people-hr.ts","../../src/core/domains/healthcare.ts","../../src/core/domains/finance.ts","../../src/core/domains/ecommerce.ts","../../src/core/domains/real-estate.ts","../../src/core/index.ts","../../src/core/data.ts","../../src/core/transforms/text.ts","../../src/core/transforms/phone.ts","../../src/core/transforms/names.ts","../../src/core/transforms/address.ts","../../src/core/transforms/dates.ts","../../src/core/transforms/email.ts","../../src/core/transforms/numeric.ts","../../src/core/transforms/categorical.ts","../../src/core/transforms/identifiers.ts","../../src/core/transforms/url.ts","../../src/core/transforms/auto-correct.ts","../../src/core/transforms/index.ts","../../src/core/engine/transformer.ts","../../src/core/engine/profiler-bridge.ts","../../src/core/engine/selector.ts","../../src/core/engine/differ.ts","../../src/core/engine/streaming.ts","../../src/core/config/schema.ts","../../src/core/config/loader.ts","../../src/core/config/learner.ts","../../src/core/mapping/name-similarity.ts","../../src/core/mapping/profile-similarity.ts","../../src/core/mapping/schema-mapper.ts","../../src/core/domains/index.ts","../../src/core/reporters/json-reporter.ts","../../src/core/reporters/console.ts","../../src/core/llm/corrector.ts","../../src/core/notebook.ts","../../src/node/connectors/file.ts","../../src/node/history.ts","../../src/node/mcp/server.ts","../../src/node/watch.ts","../../src/node/schedule.ts","../../src/node/init-wizard.ts","../../src/node/api/server.ts"],"names":["MutableManifest","PACK","mapStrings","extractDigits","EMAIL_RE","path","extname","content","readFileSync","dirname","mkdirSync","writeFileSync","join","homedir","existsSync","readdirSync","statSync","isAbsolute","resolve","basename","createInterface","sanitizePath","createServer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Core types for GoldenFlow JS — ported from Python dataclasses and Pydantic models.\n * All types are readonly. Use factory functions for construction.\n */\n\n// ---------------------------------------------------------------------------\n// Transform Registry\n// ---------------------------------------------------------------------------\n\nexport type TransformMode = \"expr\" | \"series\" | \"dataframe\";\n\n/** Metadata for a registered transform. */\nexport interface TransformInfo {\n readonly name: string;\n readonly func: TransformFunction;\n readonly inputTypes: readonly string[];\n readonly autoApply: boolean;\n readonly priority: number;\n readonly mode: TransformMode;\n}\n\n/**\n * A transform function. Shape depends on mode:\n * - expr: (column: string, ...params: unknown[]) => ExprTransform\n * - series: (values: readonly ColumnValue[], ...params: unknown[]) => ColumnValue[] | [ColumnValue[], number[]]\n * - dataframe: (rows: readonly Row[], column: string) => Row[]\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TransformFunction = (...args: any[]) => any;\n\n// ---------------------------------------------------------------------------\n// TabularData primitives\n// ---------------------------------------------------------------------------\n\nexport type ColumnValue = string | number | boolean | null;\nexport type Row = Readonly<Record<string, unknown>>;\n\nexport type Dtype =\n | \"string\"\n | \"integer\"\n | \"float\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"null\";\n\n// ---------------------------------------------------------------------------\n// Manifest / Transform results\n// ---------------------------------------------------------------------------\n\nexport interface TransformRecord {\n readonly column: string;\n readonly transform: string;\n readonly affectedRows: number;\n readonly totalRows: number;\n readonly sampleBefore: readonly string[];\n readonly sampleAfter: readonly string[];\n}\n\nexport function makeTransformRecord(\n input: Pick<TransformRecord, \"column\" | \"transform\" | \"affectedRows\" | \"totalRows\"> &\n Partial<Pick<TransformRecord, \"sampleBefore\" | \"sampleAfter\">>,\n): TransformRecord {\n return {\n sampleBefore: [],\n sampleAfter: [],\n ...input,\n };\n}\n\nexport interface TransformError {\n readonly column: string;\n readonly transform: string;\n readonly row: number;\n readonly error: string;\n}\n\nexport interface Manifest {\n readonly source: string;\n readonly records: readonly TransformRecord[];\n readonly errors: readonly TransformError[];\n readonly createdAt: string;\n}\n\nexport function makeManifest(source: string): MutableManifest {\n return new MutableManifest(source);\n}\n\n/** Mutable manifest used during transform pipeline, then frozen. */\nexport class MutableManifest implements Manifest {\n readonly source: string;\n readonly records: TransformRecord[] = [];\n readonly errors: TransformError[] = [];\n readonly createdAt: string;\n\n constructor(source: string) {\n this.source = source;\n this.createdAt = new Date().toISOString();\n }\n\n addRecord(record: TransformRecord): void {\n this.records.push(record);\n }\n\n addError(column: string, transform: string, row: number, error: string): void {\n this.errors.push({ column, transform, row, error });\n }\n\n toDict(): Record<string, unknown> {\n return {\n source: this.source,\n created_at: this.createdAt,\n records: this.records.map((r) => ({\n column: r.column,\n transform: r.transform,\n affected_rows: r.affectedRows,\n total_rows: r.totalRows,\n sample_before: r.sampleBefore,\n sample_after: r.sampleAfter,\n })),\n errors: this.errors.map((e) => ({\n column: e.column,\n transform: e.transform,\n row: e.row,\n error: e.error,\n })),\n summary: {\n total_transforms: this.records.length,\n total_errors: this.errors.length,\n columns_affected: [...new Set(this.records.map((r) => r.column))],\n },\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// TransformResult\n// ---------------------------------------------------------------------------\n\nexport interface TransformResult {\n readonly rows: readonly Row[];\n readonly columns: readonly string[];\n readonly manifest: Manifest;\n}\n\n// ---------------------------------------------------------------------------\n// Profiler types\n// ---------------------------------------------------------------------------\n\nexport interface ColumnProfile {\n readonly name: string;\n readonly inferredType: string;\n readonly rowCount: number;\n readonly nullCount: number;\n readonly nullPct: number;\n readonly uniqueCount: number;\n readonly uniquePct: number;\n readonly sampleValues: readonly string[];\n readonly detectedFormat: string | null;\n}\n\nexport function makeColumnProfile(\n input: Pick<ColumnProfile, \"name\" | \"inferredType\" | \"rowCount\" | \"nullCount\" | \"nullPct\" | \"uniqueCount\" | \"uniquePct\"> &\n Partial<Pick<ColumnProfile, \"sampleValues\" | \"detectedFormat\">>,\n): ColumnProfile {\n return {\n sampleValues: [],\n detectedFormat: null,\n ...input,\n };\n}\n\nexport interface DatasetProfile {\n readonly filePath: string;\n readonly rowCount: number;\n readonly columnCount: number;\n readonly columns: readonly ColumnProfile[];\n}\n\n// ---------------------------------------------------------------------------\n// Diff types\n// ---------------------------------------------------------------------------\n\nexport interface ColumnDiffDetail {\n readonly changedRows: number;\n}\n\nexport interface DiffResult {\n readonly totalChanges: number;\n readonly changedColumns: readonly string[];\n readonly addedColumns: readonly string[];\n readonly removedColumns: readonly string[];\n readonly rowCountBefore: number;\n readonly rowCountAfter: number;\n readonly columnDetails: Readonly<Record<string, ColumnDiffDetail>>;\n}\n\n// ---------------------------------------------------------------------------\n// Config types (Pydantic → interfaces + validator)\n// ---------------------------------------------------------------------------\n\nexport interface TransformSpec {\n readonly column: string;\n readonly ops: readonly string[];\n}\n\nexport interface SplitSpec {\n readonly source: string;\n readonly target: readonly string[];\n readonly method: string;\n}\n\nexport interface FilterSpec {\n readonly column: string;\n readonly condition: string;\n}\n\nexport interface DedupSpec {\n readonly columns: readonly string[];\n readonly keep: \"first\" | \"last\";\n}\n\nexport interface MappingSpec {\n readonly source: string;\n readonly target: string | readonly string[];\n readonly transform: string | readonly string[] | null;\n}\n\nexport interface GoldenFlowConfig {\n readonly source: string | null;\n readonly output: string | null;\n readonly transforms: readonly TransformSpec[];\n readonly splits: readonly SplitSpec[];\n readonly renames: Readonly<Record<string, string>>;\n readonly drop: readonly string[];\n readonly filters: readonly FilterSpec[];\n readonly dedup: DedupSpec | null;\n readonly mappings: readonly MappingSpec[];\n}\n\nexport function makeConfig(\n input?: Partial<GoldenFlowConfig>,\n): GoldenFlowConfig {\n return {\n source: null,\n output: null,\n transforms: [],\n splits: [],\n renames: {},\n drop: [],\n filters: [],\n dedup: null,\n mappings: [],\n ...input,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Schema Mapping\n// ---------------------------------------------------------------------------\n\nexport interface ColumnMapping {\n readonly source: string;\n readonly target: string;\n readonly confidence: number;\n readonly transform: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Domain packs\n// ---------------------------------------------------------------------------\n\nexport interface DomainPack {\n readonly name: string;\n readonly description: string;\n readonly transforms: readonly string[];\n readonly defaultConfig: GoldenFlowConfig;\n}\n\n// ---------------------------------------------------------------------------\n// History\n// ---------------------------------------------------------------------------\n\nexport interface RunRecord {\n readonly runId: string;\n readonly source: string;\n readonly timestamp: string;\n readonly rows: number;\n readonly columns: number;\n readonly transformsApplied: number;\n readonly errors: number;\n readonly durationSeconds: number;\n readonly configHash: string | null;\n readonly manifestPath: string | null;\n}\n","/**\n * Transform registry — TS equivalent of goldenflow/transforms/__init__.py.\n * Transforms self-register via registerTransform().\n */\n\nimport type { TransformFunction, TransformInfo, TransformMode } from \"../types.js\";\n\nconst _REGISTRY = new Map<string, TransformInfo>();\n\nexport interface RegisterOptions {\n name: string;\n inputTypes: readonly string[];\n autoApply?: boolean;\n priority?: number;\n mode?: TransformMode;\n}\n\nexport function registerTransform(opts: RegisterOptions, func: TransformFunction): void {\n _REGISTRY.set(opts.name, {\n name: opts.name,\n func,\n inputTypes: opts.inputTypes,\n autoApply: opts.autoApply ?? false,\n priority: opts.priority ?? 50,\n mode: opts.mode ?? \"series\",\n });\n}\n\nexport function getTransform(name: string): TransformInfo | undefined {\n return _REGISTRY.get(name);\n}\n\nexport function listTransforms(): TransformInfo[] {\n return [..._REGISTRY.values()].sort((a, b) => b.priority - a.priority);\n}\n\nexport function parseTransformName(raw: string): [string, string[]] {\n const parts = raw.split(\":\");\n return [parts[0]!, parts.slice(1)];\n}\n\nexport function registry(): ReadonlyMap<string, TransformInfo> {\n return _REGISTRY;\n}\n","import type { ColumnValue, DomainPack } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\nconst SSN_RE = /^(\\d{3})-?(\\d{2})-?(\\d{4})$/;\n\nfunction ssnValidate(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const m = v.trim().match(SSN_RE);\n if (!m) return false;\n if (m[1] === \"000\" || m[2] === \"00\" || m[3] === \"0000\") return false;\n return true;\n });\n}\n\nregisterTransform(\n { name: \"ssn_validate\", inputTypes: [\"ssn\", \"string\"], priority: 55, mode: \"series\" },\n ssnValidate,\n);\n\nexport const PACK: DomainPack = {\n name: \"people_hr\",\n description: \"Name parsing, SSN formatting, employment dates, gender/boolean standardization\",\n transforms: [\n \"split_name\", \"split_name_reverse\", \"strip_titles\", \"strip_suffixes\",\n \"name_proper\", \"ssn_mask\", \"ssn_validate\",\n \"date_iso8601\", \"gender_standardize\", \"boolean_normalize\",\n ],\n defaultConfig: makeConfig({\n transforms: [\n { column: \"name\", ops: [\"strip\", \"strip_titles\", \"title_case\"] },\n { column: \"ssn\", ops: [\"ssn_validate\"] },\n { column: \"gender\", ops: [\"gender_standardize\"] },\n { column: \"hire_date\", ops: [\"date_iso8601\"] },\n { column: \"active\", ops: [\"boolean_normalize\"] },\n ],\n }),\n};\n","import type { ColumnValue, DomainPack } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\nfunction npiValidate(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = v.replace(/\\D/g, \"\");\n if (digits.length !== 10) return false;\n const full = \"80840\" + digits;\n let total = 0;\n for (let i = full.length - 1, pos = 0; i >= 0; i--, pos++) {\n let n = parseInt(full[i]!, 10);\n if (pos % 2 === 1) {\n n *= 2;\n if (n > 9) n -= 9;\n }\n total += n;\n }\n return total % 10 === 0;\n });\n}\n\nfunction icd10Format(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const code = v.trim().toUpperCase().replace(/\\./g, \"\");\n return code.length > 3 ? code.slice(0, 3) + \".\" + code.slice(3) : code;\n });\n}\n\nregisterTransform(\n { name: \"npi_validate\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n npiValidate,\n);\nregisterTransform(\n { name: \"icd10_format\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n icd10Format,\n);\n\nexport const PACK: DomainPack = {\n name: \"healthcare\",\n description: \"MRN normalization, ICD-10 formatting, NPI validation, date standardization\",\n transforms: [\"npi_validate\", \"icd10_format\", \"date_iso8601\", \"null_standardize\", \"strip\"],\n defaultConfig: makeConfig({\n transforms: [\n { column: \"npi\", ops: [\"npi_validate\"] },\n { column: \"icd10_code\", ops: [\"icd10_format\"] },\n { column: \"service_date\", ops: [\"date_iso8601\"] },\n { column: \"patient_name\", ops: [\"strip\", \"title_case\"] },\n ],\n }),\n};\n","import type { ColumnValue, DomainPack } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\nfunction accountMask(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = v.replace(/\\D/g, \"\");\n if (digits.length < 4) return v;\n return \"*\".repeat(digits.length - 4) + digits.slice(-4);\n });\n}\n\nfunction cusipFormat(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return v.trim().toUpperCase().slice(0, 9);\n });\n}\n\nregisterTransform(\n { name: \"account_mask\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n accountMask,\n);\nregisterTransform(\n { name: \"cusip_format\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n cusipFormat,\n);\n\nexport const PACK: DomainPack = {\n name: \"finance\",\n description: \"Account masking, currency standardization, CUSIP/ISIN formatting\",\n transforms: [\"account_mask\", \"cusip_format\", \"currency_strip\", \"date_iso8601\"],\n defaultConfig: makeConfig({\n transforms: [\n { column: \"account_number\", ops: [\"account_mask\"] },\n { column: \"amount\", ops: [\"currency_strip\"] },\n { column: \"transaction_date\", ops: [\"date_iso8601\"] },\n ],\n }),\n};\n","import type { ColumnValue, DomainPack } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\nfunction skuNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return v.trim().toUpperCase().replace(/[^A-Z0-9-]/g, \"\");\n });\n}\n\nregisterTransform(\n { name: \"sku_normalize\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n skuNormalize,\n);\n\nexport const PACK: DomainPack = {\n name: \"ecommerce\",\n description: \"SKU normalization, price cleaning, category standardization\",\n transforms: [\"sku_normalize\", \"currency_strip\", \"category_auto_correct\", \"strip\"],\n defaultConfig: makeConfig({\n transforms: [\n { column: \"sku\", ops: [\"sku_normalize\"] },\n { column: \"price\", ops: [\"currency_strip\"] },\n { column: \"category\", ops: [\"strip\", \"title_case\"] },\n ],\n }),\n};\n","import type { ColumnValue, DomainPack } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\nfunction mlsNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return v.trim().toUpperCase();\n });\n}\n\nregisterTransform(\n { name: \"mls_normalize\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n mlsNormalize,\n);\n\nexport const PACK: DomainPack = {\n name: \"real_estate\",\n description: \"Address parsing (USPS), MLS ID normalization, price cleaning\",\n transforms: [\"mls_normalize\", \"address_standardize\", \"zip_normalize\", \"currency_strip\"],\n defaultConfig: makeConfig({\n transforms: [\n { column: \"mls_id\", ops: [\"mls_normalize\"] },\n { column: \"address\", ops: [\"strip\", \"address_standardize\"] },\n { column: \"price\", ops: [\"currency_strip\"] },\n { column: \"zip\", ops: [\"zip_normalize\"] },\n ],\n }),\n};\n","/**\n * Core public API — edge-safe (no Node dependencies).\n */\n\n// Types\nexport type {\n TransformMode,\n TransformInfo,\n TransformFunction,\n ColumnValue,\n Row,\n Dtype,\n TransformRecord,\n TransformError,\n Manifest,\n TransformResult,\n ColumnProfile,\n DatasetProfile,\n ColumnDiffDetail,\n DiffResult,\n TransformSpec,\n SplitSpec,\n FilterSpec,\n DedupSpec,\n MappingSpec,\n GoldenFlowConfig,\n ColumnMapping,\n DomainPack,\n RunRecord,\n} from \"./types.js\";\n\n// Factory functions\nexport {\n makeTransformRecord,\n makeManifest,\n MutableManifest,\n makeColumnProfile,\n makeConfig,\n} from \"./types.js\";\n\n// Data layer\nexport { TabularData, isNullish, toColumnValue } from \"./data.js\";\n\n// Transform registry (imports all transform modules for side-effect registration)\nexport {\n registerTransform,\n getTransform,\n listTransforms,\n parseTransformName,\n registry,\n} from \"./transforms/index.js\";\n\n// Engine\nexport { TransformEngine } from \"./engine/transformer.js\";\nexport { profileDataframe } from \"./engine/profiler-bridge.js\";\nexport {\n selectTransforms,\n selectFromFindings,\n FINDING_TRANSFORM_MAP,\n} from \"./engine/selector.js\";\nexport { diffDataframes } from \"./engine/differ.js\";\nexport { StreamProcessor } from \"./engine/streaming.js\";\n\n// Config\nexport { validateConfig, loadConfigFromString, saveConfigToString, mergeConfigs } from \"./config/index.js\";\nexport { learnConfig } from \"./config/learner.js\";\n\n// Mapping\nexport { nameSimilarity } from \"./mapping/name-similarity.js\";\nexport { profileSimilarity } from \"./mapping/profile-similarity.js\";\nexport { SchemaMapper } from \"./mapping/schema-mapper.js\";\n\n// Domains\nexport { loadDomain, listDomains } from \"./domains/index.js\";\n\n// Reporters\nexport { manifestToJson } from \"./reporters/json-reporter.js\";\nexport { printProfile, printManifest, printDiff } from \"./reporters/console.js\";\n\n// LLM\nexport { applyLlmCorrections, prepareLlmCorrections } from \"./llm/index.js\";\n\n// Notebook\nexport { transformResultToHtml, manifestToHtml, profileToHtml } from \"./notebook.js\";\n","/**\n * TabularData — edge-safe Polars replacement.\n * Wraps Record<string, unknown>[] and provides column operations.\n */\n\nimport type { ColumnValue, Dtype, Row } from \"./types.js\";\n\n/** Values treated as null (case-insensitive for strings). */\nconst NULL_STRINGS = new Set([\n \"\",\n \"null\",\n \"none\",\n \"nan\",\n \"n/a\",\n \"na\",\n \"nil\",\n \"#n/a\",\n \"missing\",\n \"undefined\",\n]);\n\nexport function isNullish(v: unknown): v is null | undefined {\n if (v === null || v === undefined) return true;\n if (typeof v === \"string\") return NULL_STRINGS.has(v.toLowerCase().trim());\n if (typeof v === \"number\") return Number.isNaN(v);\n return false;\n}\n\nexport function toColumnValue(v: unknown): ColumnValue {\n if (isNullish(v)) return null;\n if (typeof v === \"string\") return v;\n if (typeof v === \"number\") return v;\n if (typeof v === \"boolean\") return v;\n return String(v);\n}\n\n/** Mulberry32 seedable PRNG (NOT Mersenne Twister — results differ from Python). */\nfunction mulberry32(seed: number): () => number {\n let s = seed | 0;\n return () => {\n s = (s + 0x6d2b79f5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport class TabularData {\n private readonly _rows: readonly Row[];\n private _columnCache = new Map<string, readonly ColumnValue[]>();\n\n constructor(rows: readonly Row[]) {\n this._rows = rows;\n }\n\n get rows(): readonly Row[] {\n return this._rows;\n }\n\n get columns(): readonly string[] {\n if (this._rows.length === 0) return [];\n return Object.keys(this._rows[0]!);\n }\n\n get rowCount(): number {\n return this._rows.length;\n }\n\n // ---- Column access ----\n\n column(name: string): readonly ColumnValue[] {\n const cached = this._columnCache.get(name);\n if (cached) return cached;\n const values = this._rows.map((r) => toColumnValue(r[name]));\n this._columnCache.set(name, values);\n return values;\n }\n\n /** Raw column access — preserves original values without null coercion.\n * Use for profiling where \"N/A\" should remain a string, not become null. */\n rawColumn(name: string): readonly ColumnValue[] {\n return this._rows.map((r) => {\n const v = r[name];\n if (v === null || v === undefined) return null;\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") return v;\n return String(v);\n });\n }\n\n // ---- Null handling ----\n\n nullCount(col: string): number {\n let count = 0;\n for (const v of this.column(col)) {\n if (v === null) count++;\n }\n return count;\n }\n\n dropNulls(col: string): ColumnValue[] {\n return this.column(col).filter((v): v is Exclude<ColumnValue, null> => v !== null);\n }\n\n // ---- Type inference ----\n\n dtype(col: string): Dtype {\n const values = this.dropNulls(col);\n if (values.length === 0) return \"null\";\n\n let hasInt = false;\n let hasFloat = false;\n let hasBool = false;\n let hasString = false;\n\n for (const v of values) {\n if (typeof v === \"boolean\") {\n hasBool = true;\n } else if (typeof v === \"number\") {\n if (Number.isInteger(v)) hasInt = true;\n else hasFloat = true;\n } else {\n hasString = true;\n }\n }\n\n if (hasString) return \"string\";\n if (hasBool && !hasInt && !hasFloat) return \"boolean\";\n if (hasFloat) return \"float\";\n if (hasInt) return \"integer\";\n return \"string\";\n }\n\n // ---- Aggregation ----\n\n nUnique(col: string): number {\n const set = new Set<ColumnValue>();\n for (const v of this.dropNulls(col)) set.add(v);\n return set.size;\n }\n\n valueCounts(col: string): Map<ColumnValue, number> {\n const map = new Map<ColumnValue, number>();\n for (const v of this.dropNulls(col)) {\n map.set(v, (map.get(v) ?? 0) + 1);\n }\n return map;\n }\n\n /** MUST use loop — Math.min(...array) crashes on >65K elements. */\n min(col: string): number | null {\n const nums = this.numericValues(col);\n if (nums.length === 0) return null;\n let m = nums[0]!;\n for (let i = 1; i < nums.length; i++) {\n if (nums[i]! < m) m = nums[i]!;\n }\n return m;\n }\n\n /** MUST use loop — Math.max(...array) crashes on >65K elements. */\n max(col: string): number | null {\n const nums = this.numericValues(col);\n if (nums.length === 0) return null;\n let m = nums[0]!;\n for (let i = 1; i < nums.length; i++) {\n if (nums[i]! > m) m = nums[i]!;\n }\n return m;\n }\n\n mean(col: string): number | null {\n const nums = this.numericValues(col);\n if (nums.length === 0) return null;\n let sum = 0;\n for (const n of nums) sum += n;\n return sum / nums.length;\n }\n\n std(col: string): number | null {\n const nums = this.numericValues(col);\n if (nums.length < 2) return null;\n const avg = this.mean(col)!;\n let sumSq = 0;\n for (const n of nums) sumSq += (n - avg) ** 2;\n return Math.sqrt(sumSq / (nums.length - 1));\n }\n\n // ---- Filtering & sampling ----\n\n filter(predicate: (row: Row) => boolean): TabularData {\n return new TabularData(this._rows.filter(predicate));\n }\n\n head(n: number): TabularData {\n return new TabularData(this._rows.slice(0, n));\n }\n\n sample(n: number, seed = 42): TabularData {\n if (n >= this._rows.length) return this;\n const rng = mulberry32(seed);\n const indices = Array.from({ length: this._rows.length }, (_, i) => i);\n // Fisher-Yates shuffle (partial)\n for (let i = indices.length - 1; i > 0 && indices.length - 1 - i < n; i--) {\n const j = Math.floor(rng() * (i + 1));\n [indices[i], indices[j]] = [indices[j]!, indices[i]!];\n }\n const sampled = indices.slice(indices.length - n).map((i) => this._rows[i]!);\n return new TabularData(sampled);\n }\n\n // ---- String operations ----\n\n strContains(col: string, pattern: RegExp): boolean[] {\n return this.column(col).map((v) =>\n typeof v === \"string\" ? pattern.test(v) : false,\n );\n }\n\n strLengths(col: string): number[] {\n return this.column(col).map((v) =>\n typeof v === \"string\" ? v.length : 0,\n );\n }\n\n // ---- Casting ----\n\n castFloat(col: string): (number | null)[] {\n return this.column(col).map((v) => {\n if (v === null) return null;\n const n = Number(v);\n return Number.isFinite(n) ? n : null;\n });\n }\n\n castInt(col: string): (number | null)[] {\n return this.column(col).map((v) => {\n if (v === null) return null;\n const n = Number(v);\n return Number.isFinite(n) ? Math.trunc(n) : null;\n });\n }\n\n // ---- Helpers ----\n\n numericValues(col: string): number[] {\n const result: number[] = [];\n for (const v of this.column(col)) {\n if (typeof v === \"number\" && Number.isFinite(v)) {\n result.push(v);\n }\n }\n return result;\n }\n\n stringValues(col: string): string[] {\n const result: string[] = [];\n for (const v of this.column(col)) {\n if (typeof v === \"string\") result.push(v);\n }\n return result;\n }\n\n sortedNumeric(col: string): number[] {\n return this.numericValues(col).sort((a, b) => a - b);\n }\n\n isSorted(col: string, descending = false): boolean {\n const nums = this.numericValues(col);\n for (let i = 1; i < nums.length; i++) {\n if (descending ? nums[i]! > nums[i - 1]! : nums[i]! < nums[i - 1]!) {\n return false;\n }\n }\n return true;\n }\n}\n","/**\n * Text transforms — ported from goldenflow/transforms/text.py\n * Side-effect module: registers 18 text transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mapStrings(\n values: readonly ColumnValue[],\n fn: (s: string) => string,\n): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return fn(v);\n });\n}\n\n// ---------------------------------------------------------------------------\n// strip (priority 90, auto_apply, string)\n// ---------------------------------------------------------------------------\n\nfunction strip(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.trim());\n}\n\nregisterTransform(\n { name: \"strip\", inputTypes: [\"string\"], autoApply: true, priority: 90, mode: \"expr\" },\n strip,\n);\n\n// ---------------------------------------------------------------------------\n// lowercase (50, string)\n// ---------------------------------------------------------------------------\n\nfunction lowercase(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.toLowerCase());\n}\n\nregisterTransform(\n { name: \"lowercase\", inputTypes: [\"string\"], priority: 50, mode: \"expr\" },\n lowercase,\n);\n\n// ---------------------------------------------------------------------------\n// uppercase (50, string)\n// ---------------------------------------------------------------------------\n\nfunction uppercase(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.toUpperCase());\n}\n\nregisterTransform(\n { name: \"uppercase\", inputTypes: [\"string\"], priority: 50, mode: \"expr\" },\n uppercase,\n);\n\n// ---------------------------------------------------------------------------\n// title_case (50, string)\n// ---------------------------------------------------------------------------\n\nfunction titleCase(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) =>\n s.toLowerCase().replace(/\\b\\w/g, (ch) => ch.toUpperCase()),\n );\n}\n\nregisterTransform(\n { name: \"title_case\", inputTypes: [\"string\"], priority: 50, mode: \"expr\" },\n titleCase,\n);\n\n// ---------------------------------------------------------------------------\n// normalize_unicode (85, auto_apply, string)\n// ---------------------------------------------------------------------------\n\nfunction normalizeUnicode(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) =>\n s.normalize(\"NFKD\").replace(/\\p{M}/gu, \"\"),\n );\n}\n\nregisterTransform(\n { name: \"normalize_unicode\", inputTypes: [\"string\"], autoApply: true, priority: 85, mode: \"series\" },\n normalizeUnicode,\n);\n\n// ---------------------------------------------------------------------------\n// remove_punctuation (40, string)\n// ---------------------------------------------------------------------------\n\nfunction removePunctuation(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(/[^\\w\\s]/g, \"\"));\n}\n\nregisterTransform(\n { name: \"remove_punctuation\", inputTypes: [\"string\"], priority: 40, mode: \"series\" },\n removePunctuation,\n);\n\n// ---------------------------------------------------------------------------\n// collapse_whitespace (80, auto_apply, string)\n// ---------------------------------------------------------------------------\n\nfunction collapseWhitespace(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(/\\s+/g, \" \").trim());\n}\n\nregisterTransform(\n { name: \"collapse_whitespace\", inputTypes: [\"string\"], autoApply: true, priority: 80, mode: \"expr\" },\n collapseWhitespace,\n);\n\n// ---------------------------------------------------------------------------\n// truncate (30, string, param: n=255)\n// ---------------------------------------------------------------------------\n\nfunction truncate(values: readonly ColumnValue[], n: unknown = 255): ColumnValue[] {\n const maxLen = typeof n === \"number\" ? n : Number(n) || 255;\n return mapStrings(values, (s) => s.slice(0, maxLen));\n}\n\nregisterTransform(\n { name: \"truncate\", inputTypes: [\"string\"], priority: 30, mode: \"series\" },\n truncate,\n);\n\n// ---------------------------------------------------------------------------\n// normalize_quotes (84, auto_apply, string)\n// ---------------------------------------------------------------------------\n\nfunction normalizeQuotes(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) =>\n s\n .replace(/[\\u2018\\u2019\\u201A\\u201B]/g, \"'\")\n .replace(/[\\u201C\\u201D\\u201E\\u201F]/g, '\"'),\n );\n}\n\nregisterTransform(\n { name: \"normalize_quotes\", inputTypes: [\"string\"], autoApply: true, priority: 84, mode: \"series\" },\n normalizeQuotes,\n);\n\n// ---------------------------------------------------------------------------\n// remove_html_tags (45, string)\n// ---------------------------------------------------------------------------\n\nfunction removeHtmlTags(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(/<[^>]*>/g, \"\"));\n}\n\nregisterTransform(\n { name: \"remove_html_tags\", inputTypes: [\"string\"], priority: 45, mode: \"series\" },\n removeHtmlTags,\n);\n\n// ---------------------------------------------------------------------------\n// remove_urls (40, string)\n// ---------------------------------------------------------------------------\n\nfunction removeUrls(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) =>\n s.replace(/https?:\\/\\/[^\\s]+/g, \"\").trim(),\n );\n}\n\nregisterTransform(\n { name: \"remove_urls\", inputTypes: [\"string\"], priority: 40, mode: \"series\" },\n removeUrls,\n);\n\n// ---------------------------------------------------------------------------\n// remove_digits (35, string)\n// ---------------------------------------------------------------------------\n\nfunction removeDigits(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(/\\d/g, \"\"));\n}\n\nregisterTransform(\n { name: \"remove_digits\", inputTypes: [\"string\"], priority: 35, mode: \"series\" },\n removeDigits,\n);\n\n// ---------------------------------------------------------------------------\n// pad_left (30, string, params: width=10, char=\"0\")\n// ---------------------------------------------------------------------------\n\nfunction padLeft(\n values: readonly ColumnValue[],\n width: unknown = 10,\n char: unknown = \"0\",\n): ColumnValue[] {\n const w = typeof width === \"number\" ? width : Number(width) || 10;\n const c = typeof char === \"string\" ? char : \"0\";\n return mapStrings(values, (s) => s.padStart(w, c));\n}\n\nregisterTransform(\n { name: \"pad_left\", inputTypes: [\"string\"], priority: 30, mode: \"series\" },\n padLeft,\n);\n\n// ---------------------------------------------------------------------------\n// pad_right (30, string, params: width=10, char=\" \")\n// ---------------------------------------------------------------------------\n\nfunction padRight(\n values: readonly ColumnValue[],\n width: unknown = 10,\n char: unknown = \" \",\n): ColumnValue[] {\n const w = typeof width === \"number\" ? width : Number(width) || 10;\n const c = typeof char === \"string\" ? char : \" \";\n return mapStrings(values, (s) => s.padEnd(w, c));\n}\n\nregisterTransform(\n { name: \"pad_right\", inputTypes: [\"string\"], priority: 30, mode: \"series\" },\n padRight,\n);\n\n// ---------------------------------------------------------------------------\n// remove_emojis (38, string)\n// ---------------------------------------------------------------------------\n\nfunction removeEmojis(values: readonly ColumnValue[]): ColumnValue[] {\n // Covers common emoji Unicode ranges including emoticons, symbols, dingbats,\n // supplemental symbols, flags, and extended pictographic.\n const emojiPattern =\n /[\\u{1F600}-\\u{1F64F}\\u{1F300}-\\u{1F5FF}\\u{1F680}-\\u{1F6FF}\\u{1F1E0}-\\u{1F1FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{1F900}-\\u{1F9FF}\\u{1FA00}-\\u{1FA6F}\\u{1FA70}-\\u{1FAFF}\\u{200D}\\u{20E3}\\u{E0020}-\\u{E007F}]/gu;\n return mapStrings(values, (s) => s.replace(emojiPattern, \"\"));\n}\n\nregisterTransform(\n { name: \"remove_emojis\", inputTypes: [\"string\"], priority: 38, mode: \"series\" },\n removeEmojis,\n);\n\n// ---------------------------------------------------------------------------\n// fix_mojibake (86, string)\n// ---------------------------------------------------------------------------\n\nfunction fixMojibake(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n try {\n // Attempt latin1 -> utf8 re-encoding: encode string bytes as latin1,\n // then decode as UTF-8. If the result is valid and different, use it.\n const encoder = new TextEncoder();\n const bytes = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i);\n if (code > 255) return s; // Not latin1-encodable; skip\n bytes[i] = code;\n }\n const decoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n return decoded;\n } catch {\n // If decoding fails the string is not mojibake; return as-is\n return s;\n }\n });\n}\n\nregisterTransform(\n { name: \"fix_mojibake\", inputTypes: [\"string\"], priority: 86, mode: \"series\" },\n fixMojibake,\n);\n\n// ---------------------------------------------------------------------------\n// normalize_line_endings (82, string)\n// ---------------------------------------------------------------------------\n\nfunction normalizeLineEndings(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"));\n}\n\nregisterTransform(\n { name: \"normalize_line_endings\", inputTypes: [\"string\"], priority: 82, mode: \"series\" },\n normalizeLineEndings,\n);\n\n// ---------------------------------------------------------------------------\n// extract_numbers (30, string)\n// ---------------------------------------------------------------------------\n\nfunction extractNumbers(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const nums = s.match(/-?\\d+(?:\\.\\d+)?/g);\n return nums ? nums.join(\" \") : \"\";\n });\n}\n\nregisterTransform(\n { name: \"extract_numbers\", inputTypes: [\"string\"], priority: 30, mode: \"series\" },\n extractNumbers,\n);\n","/**\n * Phone transforms — ported from goldenflow/transforms/phone.py\n * Side-effect module: registers 5 phone transforms on import.\n *\n * Edge-safe implementation: no phonenumbers library dependency.\n * Handles US numbers (10 or 11 digits starting with 1).\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Extract all digits from a string. */\nfunction extractDigits(s: string): string {\n return s.replace(/\\D/g, \"\");\n}\n\n/**\n * Normalize a US phone string to exactly 10 digits (without country code).\n * Returns null if the input does not look like a valid US number.\n */\nfunction normalizeUsDigits(s: string): string | null {\n const digits = extractDigits(s);\n if (digits.length === 10) return digits;\n if (digits.length === 11 && digits[0] === \"1\") return digits.slice(1);\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// phone_e164 (50, auto_apply, phone)\n// ---------------------------------------------------------------------------\n\nfunction phoneE164(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = normalizeUsDigits(v);\n if (digits === null) return v;\n return `+1${digits}`;\n });\n}\n\nregisterTransform(\n { name: \"phone_e164\", inputTypes: [\"phone\"], autoApply: true, priority: 50, mode: \"series\" },\n phoneE164,\n);\n\n// ---------------------------------------------------------------------------\n// phone_national (50, phone)\n// ---------------------------------------------------------------------------\n\nfunction phoneNational(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = normalizeUsDigits(v);\n if (digits === null) return v;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n });\n}\n\nregisterTransform(\n { name: \"phone_national\", inputTypes: [\"phone\"], priority: 50, mode: \"series\" },\n phoneNational,\n);\n\n// ---------------------------------------------------------------------------\n// phone_digits (50, phone)\n// ---------------------------------------------------------------------------\n\nfunction phoneDigits(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return extractDigits(v);\n });\n}\n\nregisterTransform(\n { name: \"phone_digits\", inputTypes: [\"phone\"], priority: 50, mode: \"series\" },\n phoneDigits,\n);\n\n// ---------------------------------------------------------------------------\n// phone_validate (60, phone)\n// ---------------------------------------------------------------------------\n\nfunction phoneValidate(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = extractDigits(v);\n return digits.length === 10 || (digits.length === 11 && digits[0] === \"1\");\n });\n}\n\nregisterTransform(\n { name: \"phone_validate\", inputTypes: [\"phone\"], priority: 60, mode: \"series\" },\n phoneValidate,\n);\n\n// ---------------------------------------------------------------------------\n// phone_country_code (45, phone)\n// ---------------------------------------------------------------------------\n\nfunction phoneCountryCode(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const digits = extractDigits(v);\n // Recognise US numbers: 10 digits or 11 starting with 1\n if (digits.length === 10) return 1;\n if (digits.length === 11 && digits[0] === \"1\") return 1;\n return null;\n });\n}\n\nregisterTransform(\n { name: \"phone_country_code\", inputTypes: [\"phone\"], priority: 45, mode: \"series\" },\n phoneCountryCode,\n);\n","/**\n * Name transforms — ported from goldenflow/transforms/names.py\n * Side-effect module: registers 8 name transforms on import.\n */\n\nimport type { ColumnValue, Row } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mapStrings(\n values: readonly ColumnValue[],\n fn: (s: string) => string,\n): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return fn(v);\n });\n}\n\nconst _TITLES = /^(Mr\\.?|Mrs\\.?|Ms\\.?|Miss\\.?|Dr\\.?|Prof\\.?|Rev\\.?|Sr\\.?|Sra\\.?)\\s+/i;\nconst _SUFFIXES = /\\s+(Jr\\.?|Sr\\.?|II|III|IV|MD|PhD|PharmD|DDS|DVM|Esq\\.?|CPA|RN|DO)$/i;\nconst _INITIAL_PATTERN = /\\b[A-Z]\\.\\s/;\nconst _MC_PATTERN = /\\bMc(\\w)/g;\nconst _O_PATTERN = /\\bO'(\\w)/g;\n\n// ---------------------------------------------------------------------------\n// Nickname map\n// ---------------------------------------------------------------------------\n\nconst _NICKNAMES: Record<string, string> = {\n bob: \"Robert\", rob: \"Robert\", robby: \"Robert\", robbie: \"Robert\", bobby: \"Robert\",\n bill: \"William\", billy: \"William\", will: \"William\", willy: \"William\",\n jim: \"James\", jimmy: \"James\", jamie: \"James\",\n mike: \"Michael\", mikey: \"Michael\", mick: \"Michael\",\n dick: \"Richard\", rick: \"Richard\", rich: \"Richard\", ricky: \"Richard\",\n tom: \"Thomas\", tommy: \"Thomas\",\n joe: \"Joseph\", joey: \"Joseph\",\n jack: \"John\", johnny: \"John\", jon: \"Jonathan\",\n dave: \"David\", davy: \"David\",\n steve: \"Steven\", stevie: \"Steven\",\n dan: \"Daniel\", danny: \"Daniel\",\n pat: \"Patrick\", patty: \"Patricia\", patsy: \"Patricia\",\n chris: \"Christopher\", kit: \"Christopher\",\n tony: \"Anthony\",\n ed: \"Edward\", eddie: \"Edward\", ted: \"Edward\", teddy: \"Edward\",\n al: \"Albert\", bert: \"Albert\",\n charlie: \"Charles\", chuck: \"Charles\",\n sam: \"Samuel\", sammy: \"Samuel\",\n ben: \"Benjamin\", benny: \"Benjamin\",\n matt: \"Matthew\",\n andy: \"Andrew\", drew: \"Andrew\",\n nick: \"Nicholas\",\n alex: \"Alexander\",\n liz: \"Elizabeth\", beth: \"Elizabeth\", betty: \"Elizabeth\",\n kate: \"Katherine\", kathy: \"Katherine\", katie: \"Katherine\",\n sue: \"Susan\", susie: \"Susan\",\n meg: \"Margaret\", maggie: \"Margaret\", peggy: \"Margaret\",\n jenny: \"Jennifer\", jen: \"Jennifer\",\n debbie: \"Deborah\", deb: \"Deborah\",\n barb: \"Barbara\",\n cindy: \"Cynthia\",\n sandy: \"Sandra\",\n};\n\n// ---------------------------------------------------------------------------\n// split_name (dataframe, name, 50)\n// ---------------------------------------------------------------------------\n\nfunction splitName(rows: readonly Row[], column: string): Row[] {\n return rows.map((row) => {\n const val = row[column];\n if (val === null || val === undefined || typeof val !== \"string\") {\n return { ...row, first_name: null, last_name: null };\n }\n const trimmed = val.trim();\n const lastSpace = trimmed.lastIndexOf(\" \");\n if (lastSpace === -1) {\n return { ...row, first_name: trimmed, last_name: \"\" };\n }\n return {\n ...row,\n first_name: trimmed.slice(0, lastSpace),\n last_name: trimmed.slice(lastSpace + 1),\n };\n });\n}\n\nregisterTransform(\n { name: \"split_name\", inputTypes: [\"name\"], priority: 50, mode: \"dataframe\" },\n splitName,\n);\n\n// ---------------------------------------------------------------------------\n// split_name_reverse (dataframe, name, 50)\n// ---------------------------------------------------------------------------\n\nfunction splitNameReverse(rows: readonly Row[], column: string): Row[] {\n return rows.map((row) => {\n const val = row[column];\n if (val === null || val === undefined || typeof val !== \"string\") {\n return { ...row, first_name: null, last_name: null };\n }\n const commaIdx = val.indexOf(\",\");\n if (commaIdx === -1) {\n return { ...row, first_name: val.trim(), last_name: \"\" };\n }\n return {\n ...row,\n last_name: val.slice(0, commaIdx).trim(),\n first_name: val.slice(commaIdx + 1).trim(),\n };\n });\n}\n\nregisterTransform(\n { name: \"split_name_reverse\", inputTypes: [\"name\"], priority: 50, mode: \"dataframe\" },\n splitNameReverse,\n);\n\n// ---------------------------------------------------------------------------\n// strip_titles (series, name, 70, auto_apply)\n// ---------------------------------------------------------------------------\n\nfunction stripTitles(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(_TITLES, \"\").trim());\n}\n\nregisterTransform(\n { name: \"strip_titles\", inputTypes: [\"name\"], autoApply: true, priority: 70, mode: \"series\" },\n stripTitles,\n);\n\n// ---------------------------------------------------------------------------\n// strip_suffixes (series, name, 60)\n// ---------------------------------------------------------------------------\n\nfunction stripSuffixes(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => s.replace(_SUFFIXES, \"\").trim());\n}\n\nregisterTransform(\n { name: \"strip_suffixes\", inputTypes: [\"name\"], priority: 60, mode: \"series\" },\n stripSuffixes,\n);\n\n// ---------------------------------------------------------------------------\n// name_proper (series, name, 45)\n// ---------------------------------------------------------------------------\n\nfunction nameProper(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n // Title case first\n let result = s.toLowerCase().replace(/\\b\\w/g, (ch) => ch.toUpperCase());\n // Mc handling — reset _MC_PATTERN.lastIndex since it has the g flag\n result = result.replace(_MC_PATTERN, (_match, letter: string) => `Mc${letter.toUpperCase()}`);\n // O' handling\n result = result.replace(_O_PATTERN, (_match, letter: string) => `O'${letter.toUpperCase()}`);\n return result;\n });\n}\n\nregisterTransform(\n { name: \"name_proper\", inputTypes: [\"name\"], priority: 45, mode: \"series\" },\n nameProper,\n);\n\n// ---------------------------------------------------------------------------\n// initial_expand (series, name, 40)\n// ---------------------------------------------------------------------------\n\nfunction initialExpand(values: readonly ColumnValue[]): [ColumnValue[], number[]] {\n const flagged: number[] = [];\n const result: ColumnValue[] = values.map((v, i) => {\n if (v !== null && typeof v === \"string\" && _INITIAL_PATTERN.test(v)) {\n flagged.push(i);\n }\n return v === undefined ? null : (v as ColumnValue);\n });\n return [result, flagged];\n}\n\nregisterTransform(\n { name: \"initial_expand\", inputTypes: [\"name\"], priority: 40, mode: \"series\" },\n initialExpand,\n);\n\n// ---------------------------------------------------------------------------\n// nickname_standardize (series, name, 42)\n// ---------------------------------------------------------------------------\n\nfunction nicknameStandardize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const lookup = s.trim().toLowerCase();\n return _NICKNAMES[lookup] ?? s;\n });\n}\n\nregisterTransform(\n { name: \"nickname_standardize\", inputTypes: [\"name\"], priority: 42, mode: \"series\" },\n nicknameStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// merge_name (dataframe, name, 45, param: last_name_col=\"last_name\")\n// ---------------------------------------------------------------------------\n\nfunction mergeName(\n rows: readonly Row[],\n column: string,\n lastNameCol: unknown = \"last_name\",\n): Row[] {\n const lnCol = typeof lastNameCol === \"string\" ? lastNameCol : \"last_name\";\n\n // If no rows or first row lacks the last_name column, return unchanged\n if (rows.length > 0 && !(lnCol in rows[0]!)) {\n return rows.map((r) => ({ ...r }));\n }\n\n return rows.map((row) => {\n const first = row[column];\n const last = row[lnCol];\n const parts: string[] = [];\n if (first !== null && first !== undefined) {\n const s = String(first).trim();\n if (s) parts.push(s);\n }\n if (last !== null && last !== undefined) {\n const s = String(last).trim();\n if (s) parts.push(s);\n }\n return { ...row, full_name: parts.length > 0 ? parts.join(\" \") : null };\n });\n}\n\nregisterTransform(\n { name: \"merge_name\", inputTypes: [\"name\"], priority: 45, mode: \"dataframe\" },\n mergeName,\n);\n","/**\n * Address transforms — ported from goldenflow/transforms/address.py\n * Side-effect module: registers 8 address transforms on import.\n */\n\nimport type { ColumnValue, Row } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mapStrings(\n values: readonly ColumnValue[],\n fn: (s: string) => string,\n): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return fn(v);\n });\n}\n\n// ---------------------------------------------------------------------------\n// Street abbreviation maps\n// ---------------------------------------------------------------------------\n\nconst _STREET_ABBREV: Record<string, string> = {\n Street: \"St\", Avenue: \"Ave\", Boulevard: \"Blvd\", Drive: \"Dr\",\n Lane: \"Ln\", Road: \"Rd\", Court: \"Ct\", Place: \"Pl\",\n Circle: \"Cir\", Trail: \"Trl\", Way: \"Way\", Parkway: \"Pkwy\",\n Highway: \"Hwy\", Terrace: \"Ter\", Square: \"Sq\",\n};\n\nconst _STREET_EXPAND: Record<string, string> = {};\nfor (const [full, abbr] of Object.entries(_STREET_ABBREV)) {\n _STREET_EXPAND[abbr] = full;\n}\n\n// ---------------------------------------------------------------------------\n// US states\n// ---------------------------------------------------------------------------\n\nconst _STATES: Record<string, string> = {\n Alabama: \"AL\", Alaska: \"AK\", Arizona: \"AZ\", Arkansas: \"AR\",\n California: \"CA\", Colorado: \"CO\", Connecticut: \"CT\", Delaware: \"DE\",\n Florida: \"FL\", Georgia: \"GA\", Hawaii: \"HI\", Idaho: \"ID\",\n Illinois: \"IL\", Indiana: \"IN\", Iowa: \"IA\", Kansas: \"KS\",\n Kentucky: \"KY\", Louisiana: \"LA\", Maine: \"ME\", Maryland: \"MD\",\n Massachusetts: \"MA\", Michigan: \"MI\", Minnesota: \"MN\", Mississippi: \"MS\",\n Missouri: \"MO\", Montana: \"MT\", Nebraska: \"NE\", Nevada: \"NV\",\n \"New Hampshire\": \"NH\", \"New Jersey\": \"NJ\", \"New Mexico\": \"NM\", \"New York\": \"NY\",\n \"North Carolina\": \"NC\", \"North Dakota\": \"ND\", Ohio: \"OH\", Oklahoma: \"OK\",\n Oregon: \"OR\", Pennsylvania: \"PA\", \"Rhode Island\": \"RI\", \"South Carolina\": \"SC\",\n \"South Dakota\": \"SD\", Tennessee: \"TN\", Texas: \"TX\", Utah: \"UT\",\n Vermont: \"VT\", Virginia: \"VA\", Washington: \"WA\", \"West Virginia\": \"WV\",\n Wisconsin: \"WI\", Wyoming: \"WY\", \"District Of Columbia\": \"DC\",\n};\n\nconst _STATES_REVERSE: Record<string, string> = {};\nfor (const [name, abbr] of Object.entries(_STATES)) {\n _STATES_REVERSE[abbr] = name;\n}\n\nconst _STATES_LOWER: Record<string, string> = {};\nfor (const [name, abbr] of Object.entries(_STATES)) {\n _STATES_LOWER[name.toLowerCase()] = abbr;\n}\n\n// ---------------------------------------------------------------------------\n// Country map\n// ---------------------------------------------------------------------------\n\nconst _COUNTRIES: Record<string, string> = {\n \"united states\": \"US\", \"united states of america\": \"US\", usa: \"US\", us: \"US\",\n \"u.s.a.\": \"US\", \"u.s.\": \"US\", america: \"US\",\n \"united kingdom\": \"GB\", uk: \"GB\", \"great britain\": \"GB\", england: \"GB\",\n scotland: \"GB\", wales: \"GB\", \"northern ireland\": \"GB\",\n canada: \"CA\", ca: \"CA\",\n australia: \"AU\", au: \"AU\",\n germany: \"DE\", deutschland: \"DE\", de: \"DE\",\n france: \"FR\", fr: \"FR\",\n italy: \"IT\", italia: \"IT\", it: \"IT\",\n spain: \"ES\", espana: \"ES\", es: \"ES\",\n mexico: \"MX\", mx: \"MX\",\n brazil: \"BR\", brasil: \"BR\", br: \"BR\",\n japan: \"JP\", jp: \"JP\",\n china: \"CN\", cn: \"CN\",\n india: \"IN\", in: \"IN\",\n \"south korea\": \"KR\", korea: \"KR\", kr: \"KR\",\n netherlands: \"NL\", holland: \"NL\", nl: \"NL\",\n sweden: \"SE\", se: \"SE\",\n norway: \"NO\", no: \"NO\",\n denmark: \"DK\", dk: \"DK\",\n switzerland: \"CH\", ch: \"CH\",\n ireland: \"IE\", ie: \"IE\",\n \"new zealand\": \"NZ\", nz: \"NZ\",\n singapore: \"SG\", sg: \"SG\",\n portugal: \"PT\", pt: \"PT\",\n argentina: \"AR\", ar: \"AR\",\n colombia: \"CO\", co: \"CO\",\n philippines: \"PH\", ph: \"PH\",\n poland: \"PL\", pl: \"PL\",\n belgium: \"BE\", be: \"BE\",\n austria: \"AT\", at: \"AT\",\n};\n\n// ---------------------------------------------------------------------------\n// Unit normalization patterns\n// ---------------------------------------------------------------------------\n\nconst _UNIT_PATTERNS: [RegExp, string][] = [\n [/^(?:Apt|Apartment)\\.?\\s+/i, \"Unit \"],\n [/^(?:Ste|Suite)\\.?\\s+/i, \"Ste \"],\n [/^#\\s*/i, \"Unit \"],\n];\n\n// ---------------------------------------------------------------------------\n// address_standardize (series, address, 50)\n// ---------------------------------------------------------------------------\n\n// Pre-compiled regex for address standardize/expand (avoids re-creating per value)\nconst _ABBREV_PATTERNS = Object.entries(_STREET_ABBREV).map(\n ([full, abbr]) => [new RegExp(`\\\\b${full}\\\\b`, \"gi\"), abbr] as const,\n);\nconst _EXPAND_PATTERNS = Object.entries(_STREET_EXPAND).map(\n ([abbr, full]) => [new RegExp(`\\\\b${abbr}\\\\b`, \"gi\"), full] as const,\n);\n\nfunction addressStandardize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let result = s;\n for (const [pattern, abbr] of _ABBREV_PATTERNS) {\n result = result.replace(pattern, abbr);\n }\n return result;\n });\n}\n\nregisterTransform(\n { name: \"address_standardize\", inputTypes: [\"address\"], priority: 50, mode: \"series\" },\n addressStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// address_expand (series, address, 50)\n// ---------------------------------------------------------------------------\n\nfunction addressExpand(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let result = s;\n for (const [pattern, full] of _EXPAND_PATTERNS) {\n result = result.replace(pattern, full);\n }\n return result;\n });\n}\n\nregisterTransform(\n { name: \"address_expand\", inputTypes: [\"address\"], priority: 50, mode: \"series\" },\n addressExpand,\n);\n\n// ---------------------------------------------------------------------------\n// state_abbreviate (series, state|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction stateAbbreviate(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const trimmed = s.trim();\n // Already a 2-letter abbreviation?\n if (trimmed.length === 2 && _STATES_REVERSE[trimmed.toUpperCase()]) {\n return trimmed.toUpperCase();\n }\n const matched = _STATES_LOWER[trimmed.toLowerCase()];\n return matched ?? s;\n });\n}\n\nregisterTransform(\n { name: \"state_abbreviate\", inputTypes: [\"state\", \"string\"], priority: 50, mode: \"series\" },\n stateAbbreviate,\n);\n\n// ---------------------------------------------------------------------------\n// state_expand (series, state|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction stateExpand(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n return _STATES_REVERSE[s.trim().toUpperCase()] ?? s;\n });\n}\n\nregisterTransform(\n { name: \"state_expand\", inputTypes: [\"state\", \"string\"], priority: 50, mode: \"series\" },\n stateExpand,\n);\n\n// ---------------------------------------------------------------------------\n// zip_normalize (series, zip, 55, auto_apply)\n// ---------------------------------------------------------------------------\n\nfunction zipNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let val = s.trim();\n // Strip +4 extension\n val = val.split(\"-\")[0]!;\n if (/^\\d+$/.test(val)) {\n return val.padStart(5, \"0\");\n }\n return val; // preserve invalid\n });\n}\n\nregisterTransform(\n { name: \"zip_normalize\", inputTypes: [\"zip\"], autoApply: true, priority: 55, mode: \"series\" },\n zipNormalize,\n);\n\n// ---------------------------------------------------------------------------\n// split_address (dataframe, address, 45)\n// ---------------------------------------------------------------------------\n\nconst _ADDRESS_PATTERN = /^(.+?),\\s*(.+?),\\s*([A-Za-z]{2})\\s+(\\d{5}(?:-\\d{4})?)$/;\n\nfunction splitAddress(rows: readonly Row[], column: string): Row[] {\n return rows.map((row) => {\n const val = row[column];\n if (val === null || val === undefined || typeof val !== \"string\") {\n return { ...row, street: null, city: null, state: null, zip: null };\n }\n const m = val.trim().match(_ADDRESS_PATTERN);\n if (m) {\n return { ...row, street: m[1], city: m[2], state: m[3], zip: m[4] };\n }\n return { ...row, street: val, city: null, state: null, zip: null };\n });\n}\n\nregisterTransform(\n { name: \"split_address\", inputTypes: [\"address\"], priority: 45, mode: \"dataframe\" },\n splitAddress,\n);\n\n// ---------------------------------------------------------------------------\n// country_standardize (series, country|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction countryStandardize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const lookup = s.trim().toLowerCase();\n return _COUNTRIES[lookup] ?? s;\n });\n}\n\nregisterTransform(\n { name: \"country_standardize\", inputTypes: [\"country\", \"string\"], priority: 50, mode: \"series\" },\n countryStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// unit_normalize (series, address|string, 45)\n// ---------------------------------------------------------------------------\n\nfunction unitNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let result = s.trim();\n for (const [pattern, replacement] of _UNIT_PATTERNS) {\n result = result.replace(pattern, replacement);\n }\n return result;\n });\n}\n\nregisterTransform(\n { name: \"unit_normalize\", inputTypes: [\"address\", \"string\"], priority: 45, mode: \"series\" },\n unitNormalize,\n);\n","/**\n * Date transforms — ported from goldenflow/transforms/dates.py\n * Side-effect module: registers 13 date transforms on import.\n *\n * All date operations use UTC to avoid timezone-dependent results\n * (matching Python's timezone-naive dateutil behavior).\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction _parseDate(val: string): Date | null {\n const trimmed = val.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n if (isNaN(d.getTime())) return null;\n return d;\n}\n\nfunction pad(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\nconst DAY_NAMES = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n];\n\n// ---------------------------------------------------------------------------\n// date_iso8601 (series, date, 50, auto_apply) — parse -> YYYY-MM-DD\n// ---------------------------------------------------------------------------\n\nfunction dateIso8601(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const s = String(v);\n const d = _parseDate(s);\n if (!d) return v;\n return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}`;\n });\n}\n\nregisterTransform(\n { name: \"date_iso8601\", inputTypes: [\"date\"], autoApply: true, priority: 50, mode: \"series\" },\n dateIso8601,\n);\n\n// ---------------------------------------------------------------------------\n// date_us (series, date, 50) — parse -> MM/DD/YYYY\n// ---------------------------------------------------------------------------\n\nfunction dateUs(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const s = String(v);\n const d = _parseDate(s);\n if (!d) return v;\n return `${pad(d.getUTCMonth() + 1)}/${pad(d.getUTCDate())}/${d.getUTCFullYear()}`;\n });\n}\n\nregisterTransform(\n { name: \"date_us\", inputTypes: [\"date\"], priority: 50, mode: \"series\" },\n dateUs,\n);\n\n// ---------------------------------------------------------------------------\n// date_eu (series, date, 50) — parse -> DD/MM/YYYY\n// ---------------------------------------------------------------------------\n\nfunction dateEu(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const s = String(v);\n const d = _parseDate(s);\n if (!d) return v;\n return `${pad(d.getUTCDate())}/${pad(d.getUTCMonth() + 1)}/${d.getUTCFullYear()}`;\n });\n}\n\nregisterTransform(\n { name: \"date_eu\", inputTypes: [\"date\"], priority: 50, mode: \"series\" },\n dateEu,\n);\n\n// ---------------------------------------------------------------------------\n// date_parse (series, date, 55) — same as date_iso8601\n// ---------------------------------------------------------------------------\n\nregisterTransform(\n { name: \"date_parse\", inputTypes: [\"date\"], priority: 55, mode: \"series\" },\n dateIso8601,\n);\n\n// ---------------------------------------------------------------------------\n// age_from_dob (series, date, 40, param: reference_date=null)\n// ---------------------------------------------------------------------------\n\nfunction ageFromDob(\n values: readonly ColumnValue[],\n referenceDate: unknown = null,\n): ColumnValue[] {\n const ref = referenceDate ? _parseDate(String(referenceDate)) : new Date();\n if (!ref) return values.slice();\n\n return values.map((v) => {\n if (v === null) return null;\n const dob = _parseDate(String(v));\n if (!dob) return v;\n\n let age = ref.getUTCFullYear() - dob.getUTCFullYear();\n const monthDiff = ref.getUTCMonth() - dob.getUTCMonth();\n if (monthDiff < 0 || (monthDiff === 0 && ref.getUTCDate() < dob.getUTCDate())) {\n age--;\n }\n return age;\n });\n}\n\nregisterTransform(\n { name: \"age_from_dob\", inputTypes: [\"date\"], priority: 40, mode: \"series\" },\n ageFromDob,\n);\n\n// ---------------------------------------------------------------------------\n// datetime_iso8601 (series, date, 50) — parse -> YYYY-MM-DDTHH:MM:SS\n// ---------------------------------------------------------------------------\n\nfunction datetimeIso8601(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n if (!d) return v;\n return (\n `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}` +\n `T${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())}`\n );\n });\n}\n\nregisterTransform(\n { name: \"datetime_iso8601\", inputTypes: [\"date\"], priority: 50, mode: \"series\" },\n datetimeIso8601,\n);\n\n// ---------------------------------------------------------------------------\n// extract_year/month/day/quarter/day_of_week (series, date, 35)\n// ---------------------------------------------------------------------------\n\nfunction extractYear(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n return d ? d.getUTCFullYear() : v;\n });\n}\n\nfunction extractMonth(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n return d ? d.getUTCMonth() + 1 : v;\n });\n}\n\nfunction extractDay(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n return d ? d.getUTCDate() : v;\n });\n}\n\nfunction extractQuarter(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n if (!d) return v;\n return Math.floor(d.getUTCMonth() / 3) + 1;\n });\n}\n\nfunction extractDayOfWeek(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n return d ? DAY_NAMES[d.getUTCDay()]! : v;\n });\n}\n\nregisterTransform({ name: \"extract_year\", inputTypes: [\"date\"], priority: 35, mode: \"series\" }, extractYear);\nregisterTransform({ name: \"extract_month\", inputTypes: [\"date\"], priority: 35, mode: \"series\" }, extractMonth);\nregisterTransform({ name: \"extract_day\", inputTypes: [\"date\"], priority: 35, mode: \"series\" }, extractDay);\nregisterTransform({ name: \"extract_quarter\", inputTypes: [\"date\"], priority: 35, mode: \"series\" }, extractQuarter);\nregisterTransform({ name: \"extract_day_of_week\", inputTypes: [\"date\"], priority: 35, mode: \"series\" }, extractDayOfWeek);\n\n// ---------------------------------------------------------------------------\n// date_shift (series, date, 30, param: days=0) — add days, return ISO date\n// ---------------------------------------------------------------------------\n\nfunction dateShift(\n values: readonly ColumnValue[],\n days: unknown = 0,\n): ColumnValue[] {\n const shift = typeof days === \"number\" ? days : Number(days) || 0;\n const shiftMs = shift * 86_400_000;\n\n return values.map((v) => {\n if (v === null) return null;\n const d = _parseDate(String(v));\n if (!d) return v;\n const shifted = new Date(d.getTime() + shiftMs);\n return `${shifted.getUTCFullYear()}-${pad(shifted.getUTCMonth() + 1)}-${pad(shifted.getUTCDate())}`;\n });\n}\n\nregisterTransform(\n { name: \"date_shift\", inputTypes: [\"date\"], priority: 30, mode: \"series\" },\n dateShift,\n);\n\n// ---------------------------------------------------------------------------\n// date_validate (series, date|string, 60) — returns boolean\n// ---------------------------------------------------------------------------\n\nfunction dateValidate(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const s = String(v).trim();\n if (!s) return false;\n return _parseDate(s) !== null;\n });\n}\n\nregisterTransform(\n { name: \"date_validate\", inputTypes: [\"date\", \"string\"], priority: 60, mode: \"series\" },\n dateValidate,\n);\n","/**\n * Email transforms — ported from goldenflow/transforms/email.py\n * Side-effect module: registers 4 email transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Simple but practical email regex (RFC 5321 simplified). */\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/** Gmail-like domains where dots in the local part are ignored. */\nconst GMAIL_DOMAINS = new Set([\"gmail.com\", \"googlemail.com\"]);\n\n// ---------------------------------------------------------------------------\n// email_lowercase (55, email|string)\n// ---------------------------------------------------------------------------\n\nfunction emailLowercase(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return v.toLowerCase();\n });\n}\n\nregisterTransform(\n { name: \"email_lowercase\", inputTypes: [\"email\", \"string\"], priority: 55, mode: \"series\" },\n emailLowercase,\n);\n\n// ---------------------------------------------------------------------------\n// email_normalize (50, email)\n// ---------------------------------------------------------------------------\n\nfunction emailNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const lowered = v.toLowerCase().trim();\n const atIdx = lowered.lastIndexOf(\"@\");\n if (atIdx === -1) return lowered;\n\n let local = lowered.slice(0, atIdx);\n const domain = lowered.slice(atIdx + 1);\n\n // Strip +tags (e.g. user+tag@gmail.com -> user@gmail.com)\n const plusIdx = local.indexOf(\"+\");\n if (plusIdx !== -1) {\n local = local.slice(0, plusIdx);\n }\n\n // Strip dots for Gmail-like domains\n if (GMAIL_DOMAINS.has(domain)) {\n local = local.replace(/\\./g, \"\");\n }\n\n return `${local}@${domain}`;\n });\n}\n\nregisterTransform(\n { name: \"email_normalize\", inputTypes: [\"email\"], priority: 50, mode: \"series\" },\n emailNormalize,\n);\n\n// ---------------------------------------------------------------------------\n// email_extract_domain (40, email)\n// ---------------------------------------------------------------------------\n\nfunction emailExtractDomain(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const atIdx = v.lastIndexOf(\"@\");\n if (atIdx === -1) return null;\n return v.slice(atIdx + 1).toLowerCase();\n });\n}\n\nregisterTransform(\n { name: \"email_extract_domain\", inputTypes: [\"email\"], priority: 40, mode: \"series\" },\n emailExtractDomain,\n);\n\n// ---------------------------------------------------------------------------\n// email_validate (60, email|string)\n// ---------------------------------------------------------------------------\n\nfunction emailValidate(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return EMAIL_RE.test(v.trim());\n });\n}\n\nregisterTransform(\n { name: \"email_validate\", inputTypes: [\"email\", \"string\"], priority: 60, mode: \"series\" },\n emailValidate,\n);\n","/**\n * Numeric transforms — ported from goldenflow/transforms/numeric.py\n * Side-effect module: registers 9 numeric transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// currency_strip (series, string|numeric, 50)\n// ---------------------------------------------------------------------------\n\nfunction currencyStrip(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v === \"number\") return v;\n const cleaned = String(v).replace(/[^0-9.\\-]/g, \"\");\n if (cleaned === \"\" || cleaned === \"-\") return v;\n const n = Number(cleaned);\n return isNaN(n) ? v : n;\n });\n}\n\nregisterTransform(\n { name: \"currency_strip\", inputTypes: [\"string\", \"numeric\"], priority: 50, mode: \"series\" },\n currencyStrip,\n);\n\n// ---------------------------------------------------------------------------\n// percentage_normalize (series, string|numeric, 50)\n// ---------------------------------------------------------------------------\n\nfunction percentageNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v === \"number\") return v / 100;\n const s = String(v).replace(/%/g, \"\").trim();\n const n = Number(s);\n return isNaN(n) ? v : n / 100;\n });\n}\n\nregisterTransform(\n { name: \"percentage_normalize\", inputTypes: [\"string\", \"numeric\"], priority: 50, mode: \"series\" },\n percentageNormalize,\n);\n\n// ---------------------------------------------------------------------------\n// round (series, numeric, 40, param: n=2)\n// ---------------------------------------------------------------------------\n\nfunction roundTransform(\n values: readonly ColumnValue[],\n n: unknown = 2,\n): ColumnValue[] {\n const decimals = typeof n === \"number\" ? n : Number(n) || 2;\n const factor = Math.pow(10, decimals);\n\n return values.map((v) => {\n if (v === null) return null;\n const num = typeof v === \"number\" ? v : Number(v);\n if (isNaN(num)) return v;\n return Math.round(num * factor) / factor;\n });\n}\n\nregisterTransform(\n { name: \"round\", inputTypes: [\"numeric\"], priority: 40, mode: \"series\" },\n roundTransform,\n);\n\n// ---------------------------------------------------------------------------\n// clamp (series, numeric, 40, params: min_val=0, max_val=1)\n// ---------------------------------------------------------------------------\n\nfunction clamp(\n values: readonly ColumnValue[],\n minVal: unknown = 0,\n maxVal: unknown = 1,\n): ColumnValue[] {\n const lo = typeof minVal === \"number\" ? minVal : Number(minVal) || 0;\n const hi = typeof maxVal === \"number\" ? maxVal : Number(maxVal) || 1;\n\n return values.map((v) => {\n if (v === null) return null;\n const num = typeof v === \"number\" ? v : Number(v);\n if (isNaN(num)) return v;\n return Math.min(hi, Math.max(lo, num));\n });\n}\n\nregisterTransform(\n { name: \"clamp\", inputTypes: [\"numeric\"], priority: 40, mode: \"series\" },\n clamp,\n);\n\n// ---------------------------------------------------------------------------\n// to_integer (series, string|numeric, 45)\n// ---------------------------------------------------------------------------\n\nfunction toInteger(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const num = Number(v);\n if (isNaN(num)) return v;\n return Math.trunc(num);\n });\n}\n\nregisterTransform(\n { name: \"to_integer\", inputTypes: [\"string\", \"numeric\"], priority: 45, mode: \"series\" },\n toInteger,\n);\n\n// ---------------------------------------------------------------------------\n// abs_value (series, numeric, 40)\n// ---------------------------------------------------------------------------\n\nfunction absValue(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const num = typeof v === \"number\" ? v : Number(v);\n if (isNaN(num)) return v;\n return Math.abs(num);\n });\n}\n\nregisterTransform(\n { name: \"abs_value\", inputTypes: [\"numeric\"], priority: 40, mode: \"series\" },\n absValue,\n);\n\n// ---------------------------------------------------------------------------\n// fill_zero (series, numeric, 35) — null -> 0\n// ---------------------------------------------------------------------------\n\nfunction fillZero(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => (v === null ? 0 : v));\n}\n\nregisterTransform(\n { name: \"fill_zero\", inputTypes: [\"numeric\"], priority: 35, mode: \"series\" },\n fillZero,\n);\n\n// ---------------------------------------------------------------------------\n// comma_decimal (series, string|numeric, 48) — European \"1.234,56\" -> 1234.56\n// ---------------------------------------------------------------------------\n\nfunction commaDecimal(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v === \"number\") return v;\n const s = String(v);\n // European format: dots as thousands separators, comma as decimal\n const converted = s.replace(/\\./g, \"\").replace(\",\", \".\");\n const n = Number(converted);\n return isNaN(n) ? v : n;\n });\n}\n\nregisterTransform(\n { name: \"comma_decimal\", inputTypes: [\"string\", \"numeric\"], priority: 48, mode: \"series\" },\n commaDecimal,\n);\n\n// ---------------------------------------------------------------------------\n// scientific_to_decimal (series, string|numeric, 45)\n// ---------------------------------------------------------------------------\n\nfunction scientificToDecimal(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const n = Number(v);\n return isNaN(n) ? v : n;\n });\n}\n\nregisterTransform(\n { name: \"scientific_to_decimal\", inputTypes: [\"string\", \"numeric\"], priority: 45, mode: \"series\" },\n scientificToDecimal,\n);\n","/**\n * Categorical transforms — ported from goldenflow/transforms/categorical.py\n * Side-effect module: registers 5 categorical transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// boolean_normalize (series, boolean|string, 50)\n// ---------------------------------------------------------------------------\n\nconst TRUTHY = new Set([\"yes\", \"y\", \"1\", \"true\", \"t\"]);\nconst FALSY = new Set([\"no\", \"n\", \"0\", \"false\", \"f\"]);\n\nfunction booleanNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n const s = String(v).trim().toLowerCase();\n if (TRUTHY.has(s)) return true;\n if (FALSY.has(s)) return false;\n return v;\n });\n}\n\nregisterTransform(\n { name: \"boolean_normalize\", inputTypes: [\"boolean\", \"string\"], priority: 50, mode: \"series\" },\n booleanNormalize,\n);\n\n// ---------------------------------------------------------------------------\n// gender_standardize (series, string, 50)\n// ---------------------------------------------------------------------------\n\nfunction genderStandardize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v !== \"string\") return v;\n const s = v.trim().toLowerCase();\n if (s === \"male\" || s === \"m\") return \"M\";\n if (s === \"female\" || s === \"f\") return \"F\";\n return v;\n });\n}\n\nregisterTransform(\n { name: \"gender_standardize\", inputTypes: [\"string\"], priority: 50, mode: \"series\" },\n genderStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// null_standardize (series, string, 80, auto_apply)\n// ---------------------------------------------------------------------------\n\nconst NULL_VARIANTS = new Set([\n \"n/a\", \"null\", \"none\", \"na\", \"nil\", \"nan\", \"-\", \"\",\n]);\n\nfunction nullStandardize(values: readonly ColumnValue[]): ColumnValue[] {\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v !== \"string\") return v;\n const s = v.trim().toLowerCase();\n if (NULL_VARIANTS.has(s)) return null;\n return v;\n });\n}\n\nregisterTransform(\n { name: \"null_standardize\", inputTypes: [\"string\"], autoApply: true, priority: 80, mode: \"series\" },\n nullStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// category_standardize (series, string, 45, param: mapping=null)\n// Mapping format: { canonical: [variant1, variant2, ...], ... }\n// ---------------------------------------------------------------------------\n\nfunction categoryStandardize(\n values: readonly ColumnValue[],\n mapping: unknown = null,\n): ColumnValue[] {\n if (!mapping || typeof mapping !== \"object\") return values.slice();\n\n // Build a reverse lookup: lowercase variant -> canonical\n const lookup = new Map<string, string>();\n for (const [canonical, variants] of Object.entries(\n mapping as Record<string, string[]>,\n )) {\n if (Array.isArray(variants)) {\n for (const variant of variants) {\n lookup.set(String(variant).toLowerCase(), canonical);\n }\n }\n // Also map the canonical itself\n lookup.set(canonical.toLowerCase(), canonical);\n }\n\n return values.map((v) => {\n if (v === null) return null;\n if (typeof v !== \"string\") return v;\n const key = v.trim().toLowerCase();\n return lookup.get(key) ?? v;\n });\n}\n\nregisterTransform(\n { name: \"category_standardize\", inputTypes: [\"string\"], priority: 45, mode: \"series\" },\n categoryStandardize,\n);\n\n// ---------------------------------------------------------------------------\n// category_from_file (series, string, 45, param: lookup_path=null)\n// Stub: Node-only implementation later; returns input unchanged.\n// ---------------------------------------------------------------------------\n\nfunction categoryFromFile(\n values: readonly ColumnValue[],\n lookupPath: unknown = null,\n): ColumnValue[] {\n if (lookupPath) {\n console.warn(\"[goldenflow] category_from_file is not yet implemented in the JS port — returning values unchanged\");\n }\n return values.slice();\n}\n\nregisterTransform(\n { name: \"category_from_file\", inputTypes: [\"string\"], priority: 45, mode: \"series\" },\n categoryFromFile,\n);\n","/**\n * Identifier transforms — ported from goldenflow/transforms/identifiers.py\n * Side-effect module: registers 3 identifier transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mapStrings(\n values: readonly ColumnValue[],\n fn: (s: string) => string,\n): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return fn(v);\n });\n}\n\nfunction extractDigits(val: string): string {\n return val.replace(/\\D/g, \"\");\n}\n\n// ---------------------------------------------------------------------------\n// ssn_format (series, ssn|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction ssnFormat(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const digits = extractDigits(s);\n if (digits.length !== 9) return s; // preserve invalid\n return `${digits.slice(0, 3)}-${digits.slice(3, 5)}-${digits.slice(5)}`;\n });\n}\n\nregisterTransform(\n { name: \"ssn_format\", inputTypes: [\"ssn\", \"string\"], priority: 50, mode: \"series\" },\n ssnFormat,\n);\n\n// ---------------------------------------------------------------------------\n// ssn_mask (series, ssn|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction ssnMask(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const digits = extractDigits(s);\n if (digits.length !== 9) return s; // preserve invalid\n return `***-**-${digits.slice(5)}`;\n });\n}\n\nregisterTransform(\n { name: \"ssn_mask\", inputTypes: [\"ssn\", \"string\"], priority: 50, mode: \"series\" },\n ssnMask,\n);\n\n// ---------------------------------------------------------------------------\n// ein_format (series, ein|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction einFormat(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n const digits = extractDigits(s);\n if (digits.length !== 9) return s; // preserve invalid\n return `${digits.slice(0, 2)}-${digits.slice(2)}`;\n });\n}\n\nregisterTransform(\n { name: \"ein_format\", inputTypes: [\"ein\", \"string\"], priority: 50, mode: \"series\" },\n einFormat,\n);\n","/**\n * URL transforms — ported from goldenflow/transforms/url.py\n * Side-effect module: registers 2 URL transforms on import.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mapStrings(\n values: readonly ColumnValue[],\n fn: (s: string) => string | null,\n): ColumnValue[] {\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n return fn(v);\n });\n}\n\nconst _SCHEME_RE = /^https?:\\/\\//i;\n\n// ---------------------------------------------------------------------------\n// url_normalize (series, url|string, 50)\n// ---------------------------------------------------------------------------\n\nfunction urlNormalize(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let val = s.trim();\n if (!val) return null;\n\n // Add scheme if missing\n if (!_SCHEME_RE.test(val)) {\n val = \"https://\" + val;\n }\n\n // Split scheme from rest\n const schemeEnd = val.indexOf(\"://\") + 3;\n const scheme = val.slice(0, schemeEnd).toLowerCase();\n const rest = val.slice(schemeEnd);\n\n // Lowercase the domain (everything before first /)\n const slashIdx = rest.indexOf(\"/\");\n let domain: string;\n let path: string;\n if (slashIdx === -1) {\n domain = rest.toLowerCase();\n path = \"\";\n } else {\n domain = rest.slice(0, slashIdx).toLowerCase();\n path = rest.slice(slashIdx);\n }\n\n // Strip trailing slash\n let result = scheme + domain + path;\n if (result.endsWith(\"/\") && result.length > schemeEnd + domain.length + 1) {\n result = result.replace(/\\/+$/, \"\");\n } else if (result.endsWith(\"/\") && path === \"/\") {\n result = result.slice(0, -1);\n }\n\n return result;\n });\n}\n\nregisterTransform(\n { name: \"url_normalize\", inputTypes: [\"url\", \"string\"], priority: 50, mode: \"series\" },\n urlNormalize,\n);\n\n// ---------------------------------------------------------------------------\n// url_extract_domain (series, url|string, 40)\n// ---------------------------------------------------------------------------\n\nfunction urlExtractDomain(values: readonly ColumnValue[]): ColumnValue[] {\n return mapStrings(values, (s) => {\n let val = s.trim();\n if (!val) return null;\n\n // Strip scheme\n if (val.includes(\"://\")) {\n val = val.split(\"://\", 2)[1]!;\n }\n\n // Take everything before the first /\n const domain = val.split(\"/\", 1)[0]!;\n return domain ? domain.toLowerCase() : null;\n });\n}\n\nregisterTransform(\n { name: \"url_extract_domain\", inputTypes: [\"url\", \"string\"], priority: 40, mode: \"series\" },\n urlExtractDomain,\n);\n","/**\n * Auto-correct transform — ported from goldenflow/transforms/auto_correct.py\n * Side-effect module: registers the category_auto_correct transform on import.\n *\n * Uses Levenshtein-based fuzzy matching to correct low-frequency categorical\n * values to their most likely canonical form.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Levenshtein distance + fuzzy ratio\n// ---------------------------------------------------------------------------\n\nfunction levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n\n if (m === 0) return n;\n if (n === 0) return m;\n\n // Use single-row DP for space efficiency\n const prev = new Array<number>(n + 1);\n for (let j = 0; j <= n; j++) prev[j] = j;\n\n for (let i = 1; i <= m; i++) {\n let prevDiag = prev[0]!;\n prev[0] = i;\n for (let j = 1; j <= n; j++) {\n const temp = prev[j]!;\n if (a[i - 1] === b[j - 1]) {\n prev[j] = prevDiag;\n } else {\n prev[j] = 1 + Math.min(prevDiag, prev[j]!, prev[j - 1]!);\n }\n prevDiag = temp;\n }\n }\n\n return prev[n]!;\n}\n\n/**\n * Fuzzy similarity ratio between two strings (0-100).\n * 100 means identical, 0 means completely different.\n */\nfunction fuzzyRatio(a: string, b: string): number {\n if (a.length === 0 && b.length === 0) return 100;\n const maxLen = Math.max(a.length, b.length);\n const dist = levenshtein(a, b);\n return 100 * (1 - dist / maxLen);\n}\n\n// ---------------------------------------------------------------------------\n// category_auto_correct (series, string, 35, auto_apply)\n// ---------------------------------------------------------------------------\n\nfunction categoryAutoCorrect(\n values: readonly ColumnValue[],\n frequencyThreshold: unknown = 0.05,\n matchThreshold: unknown = 85,\n): ColumnValue[] {\n const freqThresh =\n typeof frequencyThreshold === \"number\"\n ? frequencyThreshold\n : Number(frequencyThreshold) || 0.05;\n const matchThresh =\n typeof matchThreshold === \"number\"\n ? matchThreshold\n : Number(matchThreshold) || 85;\n\n // 1. Count case-insensitive frequencies\n const freqMap = new Map<string, number>(); // lowercase -> count\n const casingMap = new Map<string, Map<string, number>>(); // lowercase -> (original -> count)\n let totalNonNull = 0;\n\n for (const v of values) {\n if (v === null || typeof v !== \"string\") continue;\n const lower = v.toLowerCase();\n totalNonNull++;\n freqMap.set(lower, (freqMap.get(lower) ?? 0) + 1);\n\n let casings = casingMap.get(lower);\n if (!casings) {\n casings = new Map<string, number>();\n casingMap.set(lower, casings);\n }\n casings.set(v, (casings.get(v) ?? 0) + 1);\n }\n\n if (totalNonNull === 0) return values.slice();\n\n // 2. Determine canonical candidates: values above frequency threshold\n // Use the most common casing for each canonical\n const canonicals = new Map<string, string>(); // lowercase -> best casing\n\n for (const [lower, count] of freqMap) {\n if (count / totalNonNull >= freqThresh) {\n // Pick the most common casing\n const casings = casingMap.get(lower)!;\n let bestCasing = lower;\n let bestCount = 0;\n for (const [original, c] of casings) {\n if (c > bestCount) {\n bestCount = c;\n bestCasing = original;\n }\n }\n canonicals.set(lower, bestCasing);\n }\n }\n\n if (canonicals.size === 0) return values.slice();\n\n // 3. Build correction map for low-frequency values\n const corrections = new Map<string, string>(); // lowercase -> canonical\n\n for (const [lower] of freqMap) {\n if (canonicals.has(lower)) continue; // Already canonical\n\n let bestCanonical: string | null = null;\n let bestScore = 0;\n\n for (const [canonLower, canonOriginal] of canonicals) {\n const score = fuzzyRatio(lower, canonLower);\n if (score >= matchThresh && score > bestScore) {\n bestScore = score;\n bestCanonical = canonOriginal;\n }\n }\n\n if (bestCanonical !== null) {\n corrections.set(lower, bestCanonical);\n }\n }\n\n // 4. Apply corrections\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const lower = v.toLowerCase();\n const correction = corrections.get(lower);\n if (correction !== undefined) return correction;\n // If it's a canonical, normalize to best casing\n const canonical = canonicals.get(lower);\n if (canonical !== undefined) return canonical;\n return v;\n });\n}\n\nregisterTransform(\n { name: \"category_auto_correct\", inputTypes: [\"string\"], autoApply: true, priority: 35, mode: \"series\" },\n categoryAutoCorrect,\n);\n","/**\n * Transform barrel — imports all transform modules for side-effect registration.\n * Re-exports registry functions as the public API.\n */\n\n// Side-effect imports: each module calls registerTransform() at import time.\n// Order matters: auto_correct depends on categorical being registered first.\nimport \"./text.js\";\nimport \"./phone.js\";\nimport \"./names.js\";\nimport \"./address.js\";\nimport \"./dates.js\";\nimport \"./email.js\";\nimport \"./numeric.js\";\nimport \"./categorical.js\";\nimport \"./identifiers.js\";\nimport \"./url.js\";\nimport \"./auto-correct.js\";\n\n// Re-export registry API\nexport {\n registerTransform,\n getTransform,\n listTransforms,\n parseTransformName,\n registry,\n} from \"./registry.js\";\n","/**\n * TransformEngine — the main orchestrator.\n * Dispatches transforms by mode (expr/series/dataframe) on Row[] data.\n */\n\nimport type {\n ColumnValue,\n GoldenFlowConfig,\n Row,\n TransformInfo,\n TransformResult,\n} from \"../types.js\";\nimport { makeConfig, makeTransformRecord, MutableManifest } from \"../types.js\";\nimport { toColumnValue } from \"../data.js\";\nimport { getTransform, parseTransformName } from \"../transforms/index.js\";\nimport { profileDataframe } from \"./profiler-bridge.js\";\nimport { selectTransforms } from \"./selector.js\";\n\nexport class TransformEngine {\n readonly config: GoldenFlowConfig;\n\n constructor(config?: Partial<GoldenFlowConfig>) {\n this.config = makeConfig(config);\n }\n\n transformDf(\n rows: readonly Row[],\n source = \"<dataframe>\",\n ): TransformResult {\n const manifest = new MutableManifest(source);\n let currentRows = [...rows] as Row[];\n\n if (this.config.transforms.length > 0) {\n currentRows = this._applyConfigTransforms(currentRows, manifest);\n } else {\n currentRows = this._applyAutoTransforms(currentRows, manifest, source);\n }\n\n // Apply splits\n for (const split of this.config.splits) {\n if (currentRows.length === 0 || !(split.source in currentRows[0]!)) continue;\n const info = getTransform(split.method);\n if (info && info.mode === \"dataframe\") {\n currentRows = info.func(currentRows, split.source);\n }\n }\n\n // Apply renames\n for (const [oldName, newName] of Object.entries(this.config.renames)) {\n if (currentRows.length === 0 || !(oldName in currentRows[0]!)) continue;\n currentRows = currentRows.map((row) => {\n const newRow: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(row)) {\n newRow[k === oldName ? newName : k] = v;\n }\n return newRow;\n });\n }\n\n // Apply drops\n const dropCols = new Set(this.config.drop);\n if (dropCols.size > 0 && currentRows.length > 0) {\n const existingDrops = [...dropCols].filter((c) => c in currentRows[0]!);\n if (existingDrops.length > 0) {\n const dropSet = new Set(existingDrops);\n currentRows = currentRows.map((row) => {\n const newRow: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(row)) {\n if (!dropSet.has(k)) newRow[k] = v;\n }\n return newRow;\n });\n }\n }\n\n // Apply filters\n for (const filt of this.config.filters) {\n if (currentRows.length === 0 || !(filt.column in currentRows[0]!)) continue;\n currentRows = this._applyFilter(currentRows, filt.column, filt.condition);\n }\n\n // Apply dedup\n if (this.config.dedup) {\n const dedupCols = this.config.dedup.columns.filter(\n (c) => currentRows.length > 0 && c in currentRows[0]!,\n );\n if (dedupCols.length > 0) {\n const before = currentRows.length;\n const seen = new Set<string>();\n const deduped: Row[] = [];\n const iterRows =\n this.config.dedup.keep === \"last\" ? [...currentRows].reverse() : currentRows;\n for (const row of iterRows) {\n const key = dedupCols.map((c) => String(row[c] ?? \"\")).join(\"\\0\");\n if (!seen.has(key)) {\n seen.add(key);\n deduped.push(row);\n }\n }\n if (this.config.dedup.keep === \"last\") deduped.reverse();\n currentRows = deduped;\n const after = currentRows.length;\n if (before !== after) {\n manifest.addRecord(\n makeTransformRecord({\n column: dedupCols.join(\",\"),\n transform: \"dedup\",\n affectedRows: before - after,\n totalRows: before,\n }),\n );\n }\n }\n }\n\n const columns =\n currentRows.length > 0 ? Object.keys(currentRows[0]!) : [];\n\n return { rows: currentRows, columns, manifest };\n }\n\n private _applyConfigTransforms(\n rows: Row[],\n manifest: MutableManifest,\n ): Row[] {\n for (const spec of this.config.transforms) {\n if (rows.length === 0 || !(spec.column in rows[0]!)) continue;\n for (const opRaw of spec.ops) {\n const [name, params] = parseTransformName(opRaw);\n const info = getTransform(name);\n if (!info) {\n manifest.addError(\n spec.column,\n name,\n -1,\n `Transform '${name}' not found in registry`,\n );\n continue;\n }\n rows = this._applySingleTransform(rows, spec.column, info, params, manifest);\n }\n }\n return rows;\n }\n\n private _applyAutoTransforms(\n rows: Row[],\n manifest: MutableManifest,\n source: string,\n ): Row[] {\n const filePath = source !== \"<dataframe>\" ? source : \"\";\n const profile = profileDataframe(rows, filePath);\n\n for (const colProfile of profile.columns) {\n const selected = selectTransforms(colProfile);\n for (const info of selected) {\n rows = this._applySingleTransform(\n rows,\n colProfile.name,\n info,\n [],\n manifest,\n );\n }\n }\n return rows;\n }\n\n private _applySingleTransform(\n rows: Row[],\n column: string,\n info: TransformInfo,\n params: string[],\n manifest: MutableManifest,\n ): Row[] {\n const totalRows = rows.length;\n const beforeSample = rows\n .slice(0, 3)\n .map((r) => String(r[column] ?? \"\"));\n\n try {\n let newRows: Row[];\n\n if (info.mode === \"dataframe\") {\n newRows = info.func(rows, column, ...castParams(params));\n } else {\n // expr and series both operate on column values array\n // Pass raw values to transforms — don't pre-convert null strings,\n // transforms like null_standardize need to see the original \"N/A\" etc.\n const values = rows.map((r) => {\n const v = r[column];\n if (v === null || v === undefined) return null;\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") return v;\n return String(v);\n }) as ColumnValue[];\n const typedParams = castParams(params);\n const result = typedParams.length > 0\n ? info.func(values, ...typedParams)\n : info.func(values);\n\n let newValues: ColumnValue[];\n if (Array.isArray(result) && result.length === 2 && Array.isArray(result[1])) {\n // Tuple return: [values, flaggedRows] (e.g. initial_expand)\n newValues = result[0] as ColumnValue[];\n const flagged = result[1] as number[];\n for (const rowIdx of flagged) {\n manifest.addError(column, info.name, rowIdx, \"Flagged for review\");\n }\n } else {\n newValues = result as ColumnValue[];\n }\n\n newRows = rows.map((row, i) => {\n const oldVal = row[column] ?? null;\n if (newValues[i] === oldVal) return row;\n return { ...row, [column]: newValues[i] };\n });\n }\n\n const afterSample = newRows\n .slice(0, 3)\n .map((r) => String(r[column] ?? \"\"));\n\n // Count affected rows\n let changed = 0;\n for (let i = 0; i < Math.min(rows.length, newRows.length); i++) {\n if (String(rows[i]![column] ?? \"\") !== String(newRows[i]![column] ?? \"\")) {\n changed++;\n }\n }\n\n manifest.addRecord(\n makeTransformRecord({\n column,\n transform: info.name,\n affectedRows: changed,\n totalRows,\n sampleBefore: beforeSample,\n sampleAfter: afterSample,\n }),\n );\n\n return newRows;\n } catch (e) {\n manifest.addError(\n column,\n info.name,\n -1,\n e instanceof Error ? e.message : String(e),\n );\n return rows; // preserve original on failure\n }\n }\n\n private _applyFilter(rows: Row[], column: string, condition: string): Row[] {\n if (condition === \"not_null\") {\n return rows.filter((r) => r[column] !== null && r[column] !== undefined);\n }\n if (condition.startsWith(\"after:\")) {\n const dateStr = condition.slice(6);\n return rows.filter((r) => String(r[column] ?? \"\") > dateStr);\n }\n if (condition.startsWith(\"before:\")) {\n const dateStr = condition.slice(7);\n return rows.filter((r) => String(r[column] ?? \"\") < dateStr);\n }\n return rows;\n }\n}\n\nfunction castParams(params: string[]): unknown[] {\n return params.map((p) => {\n const asInt = parseInt(p, 10);\n if (!Number.isNaN(asInt) && String(asInt) === p) return asInt;\n const asFloat = parseFloat(p);\n if (!Number.isNaN(asFloat)) return asFloat;\n return p;\n });\n}\n","/**\n * Profiler bridge — infer column types from data using regex heuristics.\n * Edge-safe (no Node dependencies).\n */\n\nimport type { ColumnValue, ColumnProfile, DatasetProfile, Row } from \"../types.js\";\nimport { makeColumnProfile } from \"../types.js\";\nimport { TabularData } from \"../data.js\";\n\nconst EMAIL_RE = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/;\nconst PHONE_RE = /^[+(]?\\d[\\d()\\-.\\s]{6,18}\\d$/;\nconst DATE_RE =\n /^(\\d{4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{2,4}|[A-Za-z]{3,9}\\s+\\d{1,2},?\\s+\\d{4})$/;\nconst NAME_RE = /^[A-Z][a-z]+(\\s+[A-Z][a-z]+)+$/;\nconst ZIP_RE = /^\\d{5}(-\\d{4})?$/;\n\nconst NAME_PATTERNS: Record<string, readonly string[]> = {\n zip: [\"zip\", \"postal\", \"zipcode\", \"zip_code\", \"postal_code\"],\n phone: [\"phone\", \"tel\", \"mobile\", \"cell\", \"fax\"],\n email: [\"email\", \"e_mail\", \"mail\"],\n date: [\"date\", \"created\", \"updated\", \"timestamp\", \"dob\", \"birth\"],\n state: [\"state\", \"province\", \"region\"],\n name: [\"first_name\", \"last_name\", \"fname\", \"lname\", \"full_name\", \"fullname\"],\n};\n\nfunction overrideTypeByColumnName(columnName: string, currentType: string): string {\n if (currentType !== \"string\" && currentType !== \"numeric\") return currentType;\n const colLower = columnName.toLowerCase().replace(/-/g, \"_\");\n for (const [semanticType, patterns] of Object.entries(NAME_PATTERNS)) {\n for (const pattern of patterns) {\n if (colLower.includes(pattern)) return semanticType;\n }\n }\n return currentType;\n}\n\nfunction inferType(values: readonly ColumnValue[], columnName: string): string {\n // Check JS runtime types first\n const nonNull = values.filter((v): v is Exclude<ColumnValue, null> => v !== null);\n if (nonNull.length === 0) return \"string\";\n\n let hasNumber = false;\n let hasBoolean = false;\n\n for (const v of nonNull) {\n if (typeof v === \"number\") hasNumber = true;\n else if (typeof v === \"boolean\") hasBoolean = true;\n }\n\n if (hasNumber && !hasBoolean) return overrideTypeByColumnName(columnName, \"numeric\");\n if (hasBoolean && !hasNumber) return \"boolean\";\n\n // Sample string values for pattern matching\n const stringVals: string[] = [];\n for (const v of nonNull) {\n if (typeof v === \"string\") {\n const trimmed = v.trim();\n if (trimmed) stringVals.push(trimmed);\n }\n }\n if (stringVals.length === 0) return \"string\";\n\n const sample = stringVals.slice(0, 100);\n\n const checks: [string, RegExp, number][] = [\n [\"email\", EMAIL_RE, 0.7],\n [\"zip\", ZIP_RE, 0.7],\n [\"date\", DATE_RE, 0.5],\n [\"phone\", PHONE_RE, 0.6],\n [\"name\", NAME_RE, 0.5],\n ];\n\n for (const [typeName, pattern, threshold] of checks) {\n let matches = 0;\n for (const v of sample) {\n if (pattern.test(v)) matches++;\n }\n if (matches / sample.length >= threshold) {\n return overrideTypeByColumnName(columnName, typeName);\n }\n }\n\n return overrideTypeByColumnName(columnName, \"string\");\n}\n\nfunction profileColumn(data: TabularData, columnName: string): ColumnProfile {\n // Use rawColumn to avoid converting \"N/A\" etc. to null during profiling\n const values = data.rawColumn(columnName);\n const rowCount = values.length;\n let nullCount = 0;\n const nonNullValues: ColumnValue[] = [];\n const uniqueSet = new Set<ColumnValue>();\n for (const v of values) {\n if (v === null) { nullCount++; continue; }\n nonNullValues.push(v);\n uniqueSet.add(v);\n }\n const uniqueCount = uniqueSet.size;\n const sampleValues = nonNullValues\n .slice(0, 5)\n .map((v) => String(v));\n\n const inferredType = inferType(values, columnName);\n\n return makeColumnProfile({\n name: columnName,\n inferredType,\n rowCount,\n nullCount,\n nullPct: rowCount > 0 ? nullCount / rowCount : 0,\n uniqueCount,\n uniquePct: rowCount > 0 ? uniqueCount / rowCount : 0,\n sampleValues,\n });\n}\n\nexport function profileDataframe(\n rows: readonly Row[],\n filePath = \"\",\n): DatasetProfile {\n const data = new TabularData(rows);\n const columns = data.columns.map((col) => profileColumn(data, col));\n\n return {\n filePath,\n rowCount: data.rowCount,\n columnCount: data.columns.length,\n columns,\n };\n}\n","/**\n * Selector — pick auto-applicable transforms for a column based on its profile.\n */\n\nimport type { ColumnProfile, TransformInfo } from \"../types.js\";\nimport { listTransforms } from \"../transforms/index.js\";\n\n/** GoldenCheck finding check → transform name mapping. */\nexport const FINDING_TRANSFORM_MAP: Readonly<Record<string, readonly string[]>> = {\n type_inference: [\"strip\", \"to_integer\"],\n nullability: [\"null_standardize\"],\n uniqueness: [\"strip\", \"collapse_whitespace\", \"email_normalize\"],\n format_detection: [\"phone_e164\", \"email_normalize\", \"date_iso8601\", \"zip_normalize\"],\n range_distribution: [\"clamp\"],\n cardinality: [\"category_auto_correct\", \"category_standardize\"],\n pattern_consistency: [\"phone_e164\", \"date_iso8601\", \"zip_normalize\", \"ssn_format\"],\n encoding_detection: [\"normalize_unicode\", \"normalize_quotes\", \"fix_mojibake\"],\n sequence_detection: [\"pad_left\"],\n drift_detection: [],\n temporal_order: [\"date_iso8601\", \"date_validate\"],\n null_correlation: [],\n cross_column_validation: [\"clamp\"],\n cross_column: [\"date_validate\", \"age_from_dob\"],\n};\n\nconst STRING_LIKE_TYPES = new Set([\n \"string\", \"email\", \"phone\", \"name\", \"address\", \"date\",\n]);\n\nexport function selectTransforms(\n profile: ColumnProfile,\n _confidenceThreshold = 0.8,\n): TransformInfo[] {\n const all = listTransforms();\n let selected: TransformInfo[] = [];\n\n for (const t of all) {\n if (!t.autoApply) continue;\n if (t.inputTypes.includes(profile.inferredType)) {\n selected.push(t);\n } else if (\n t.inputTypes.includes(\"string\") &&\n STRING_LIKE_TYPES.has(profile.inferredType)\n ) {\n selected.push(t);\n }\n }\n\n // Filter out category_auto_correct for high-cardinality columns\n if (profile.uniquePct > 0.1) {\n selected = selected.filter((t) => t.name !== \"category_auto_correct\");\n }\n\n selected.sort((a, b) => b.priority - a.priority);\n return selected;\n}\n\nexport function selectFromFindings(\n findings: readonly Record<string, unknown>[],\n): Record<string, string[]> {\n const columnTransforms: Record<string, string[]> = {};\n\n for (const finding of findings) {\n const check = String(finding[\"check\"] ?? \"\");\n const column = String(finding[\"column\"] ?? \"\");\n if (!column) continue;\n const transformNames = FINDING_TRANSFORM_MAP[check] ?? [];\n if (transformNames.length > 0) {\n if (!columnTransforms[column]) columnTransforms[column] = [];\n columnTransforms[column]!.push(...transformNames);\n }\n }\n\n // Deduplicate\n for (const col of Object.keys(columnTransforms)) {\n columnTransforms[col] = [...new Set(columnTransforms[col])];\n }\n return columnTransforms;\n}\n","/**\n * Differ — compare two row arrays and report differences.\n */\n\nimport type { DiffResult, Row } from \"../types.js\";\n\nexport function diffDataframes(\n before: readonly Row[],\n after: readonly Row[],\n): DiffResult {\n const beforeCols = new Set(before.length > 0 ? Object.keys(before[0]!) : []);\n const afterCols = new Set(after.length > 0 ? Object.keys(after[0]!) : []);\n\n const addedColumns = [...afterCols].filter((c) => !beforeCols.has(c)).sort();\n const removedColumns = [...beforeCols].filter((c) => !afterCols.has(c)).sort();\n const commonCols = [...beforeCols].filter((c) => afterCols.has(c)).sort();\n\n const changedColumns: string[] = [];\n const columnDetails: Record<string, { changedRows: number }> = {};\n let totalChanges = 0;\n\n for (const col of commonCols) {\n if (before.length !== after.length) {\n changedColumns.push(col);\n totalChanges += Math.abs(before.length - after.length);\n continue;\n }\n\n let changes = 0;\n for (let i = 0; i < before.length; i++) {\n const bVal = String(before[i]![col] ?? \"\");\n const aVal = String(after[i]![col] ?? \"\");\n if (bVal !== aVal) changes++;\n }\n\n if (changes > 0) {\n changedColumns.push(col);\n totalChanges += changes;\n columnDetails[col] = { changedRows: changes };\n }\n }\n\n return {\n totalChanges,\n changedColumns,\n addedColumns,\n removedColumns,\n rowCountBefore: before.length,\n rowCountAfter: after.length,\n columnDetails,\n };\n}\n","/**\n * StreamProcessor — incremental transform processing.\n */\n\nimport type { GoldenFlowConfig, Row, TransformResult } from \"../types.js\";\nimport { TransformEngine } from \"./transformer.js\";\n\nexport class StreamProcessor {\n private readonly engine: TransformEngine;\n private _batchCount = 0;\n\n constructor(config?: Partial<GoldenFlowConfig>) {\n this.engine = new TransformEngine(config);\n }\n\n /** Transform a single record. */\n transformOne(record: Record<string, unknown>): TransformResult {\n return this.engine.transformDf([record]);\n }\n\n /** Transform a batch of rows. */\n transformBatch(rows: readonly Row[]): TransformResult {\n this._batchCount++;\n return this.engine.transformDf(rows);\n }\n\n /** Process rows in chunks, yielding TransformResult per chunk. */\n *streamRows(\n rows: readonly Row[],\n chunkSize = 10_000,\n ): Generator<TransformResult> {\n for (let start = 0; start < rows.length; start += chunkSize) {\n const batch = rows.slice(start, start + chunkSize);\n this._batchCount++;\n yield this.engine.transformDf(batch);\n }\n }\n\n get batchesProcessed(): number {\n return this._batchCount;\n }\n}\n","/**\n * Config schema — re-exports types and provides runtime validation.\n */\n\nimport type { GoldenFlowConfig } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\n\nexport { makeConfig } from \"../types.js\";\nexport type {\n GoldenFlowConfig,\n TransformSpec,\n SplitSpec,\n FilterSpec,\n DedupSpec,\n MappingSpec,\n} from \"../types.js\";\n\n/** Basic runtime validation (not as strict as Pydantic, but catches common errors). */\nexport function validateConfig(raw: Record<string, unknown>): GoldenFlowConfig {\n const transforms = Array.isArray(raw[\"transforms\"])\n ? raw[\"transforms\"].map((t: Record<string, unknown>) => ({\n column: String(t[\"column\"] ?? \"\"),\n ops: Array.isArray(t[\"ops\"]) ? t[\"ops\"].map(String) : [],\n }))\n : [];\n\n const splits = Array.isArray(raw[\"splits\"])\n ? raw[\"splits\"].map((s: Record<string, unknown>) => ({\n source: String(s[\"source\"] ?? \"\"),\n target: Array.isArray(s[\"target\"]) ? s[\"target\"].map(String) : [],\n method: String(s[\"method\"] ?? \"\"),\n }))\n : [];\n\n const renames: Record<string, string> =\n raw[\"renames\"] && typeof raw[\"renames\"] === \"object\"\n ? Object.fromEntries(\n Object.entries(raw[\"renames\"] as Record<string, unknown>).map(\n ([k, v]) => [k, String(v)],\n ),\n )\n : {};\n\n const drop = Array.isArray(raw[\"drop\"]) ? raw[\"drop\"].map(String) : [];\n\n const filters = Array.isArray(raw[\"filters\"])\n ? raw[\"filters\"].map((f: Record<string, unknown>) => ({\n column: String(f[\"column\"] ?? \"\"),\n condition: String(f[\"condition\"] ?? \"\"),\n }))\n : [];\n\n const dedupRaw = raw[\"dedup\"] as Record<string, unknown> | null | undefined;\n const dedup =\n dedupRaw && typeof dedupRaw === \"object\"\n ? {\n columns: Array.isArray(dedupRaw[\"columns\"])\n ? dedupRaw[\"columns\"].map(String)\n : [],\n keep: (dedupRaw[\"keep\"] === \"last\" ? \"last\" : \"first\") as \"first\" | \"last\",\n }\n : null;\n\n const mappings = Array.isArray(raw[\"mappings\"])\n ? raw[\"mappings\"].map((m: Record<string, unknown>) => ({\n source: String(m[\"source\"] ?? \"\"),\n target: m[\"target\"] as string | readonly string[],\n transform: (m[\"transform\"] as string | readonly string[] | null) ?? null,\n }))\n : [];\n\n return makeConfig({\n source: raw[\"source\"] != null ? String(raw[\"source\"]) : null,\n output: raw[\"output\"] != null ? String(raw[\"output\"]) : null,\n transforms,\n splits,\n renames,\n drop,\n filters,\n dedup,\n mappings,\n });\n}\n","/**\n * Config loader — YAML load/save/merge.\n * YAML is an optional peer dependency.\n */\n\nimport type { GoldenFlowConfig } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { validateConfig } from \"./schema.js\";\n\nlet yamlModule: { parse: (s: string) => unknown; stringify: (o: unknown) => string } | null =\n null;\n\nfunction getYaml(): typeof yamlModule {\n if (yamlModule) return yamlModule;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n yamlModule = require(\"yaml\") as typeof yamlModule;\n } catch {\n // Will be handled by callers\n }\n return yamlModule;\n}\n\nexport function loadConfigFromString(content: string): GoldenFlowConfig {\n const yaml = getYaml();\n if (!yaml) {\n throw new Error(\"yaml package is required for config loading. Install with: npm install yaml\");\n }\n const data = yaml.parse(content);\n if (data === null || data === undefined) return makeConfig();\n if (typeof data !== \"object\" || Array.isArray(data)) {\n throw new Error(`Config file is not a valid YAML object (got ${Array.isArray(data) ? \"array\" : typeof data})`);\n }\n return validateConfig(data as Record<string, unknown>);\n}\n\nexport function saveConfigToString(config: GoldenFlowConfig): string {\n const yaml = getYaml();\n if (!yaml) {\n throw new Error(\"yaml package is required for config saving. Install with: npm install yaml\");\n }\n // Only include non-default values\n const data: Record<string, unknown> = {};\n if (config.source) data[\"source\"] = config.source;\n if (config.output) data[\"output\"] = config.output;\n if (config.transforms.length > 0) data[\"transforms\"] = config.transforms;\n if (config.splits.length > 0) data[\"splits\"] = config.splits;\n if (Object.keys(config.renames).length > 0) data[\"renames\"] = config.renames;\n if (config.drop.length > 0) data[\"drop\"] = config.drop;\n if (config.filters.length > 0) data[\"filters\"] = config.filters;\n if (config.dedup) data[\"dedup\"] = config.dedup;\n if (config.mappings.length > 0) data[\"mappings\"] = config.mappings;\n return yaml.stringify(data);\n}\n\nexport function mergeConfigs(\n fileConfig: GoldenFlowConfig,\n cliOverrides: Partial<GoldenFlowConfig>,\n): GoldenFlowConfig {\n return makeConfig({ ...fileConfig, ...cliOverrides });\n}\n","/**\n * Config learner — generate a config from data profiles.\n */\n\nimport type { GoldenFlowConfig, Row, TransformSpec } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { profileDataframe } from \"../engine/profiler-bridge.js\";\nimport { selectTransforms } from \"../engine/selector.js\";\n\nexport function learnConfig(rows: readonly Row[], source = \"\"): GoldenFlowConfig {\n const profile = profileDataframe(rows, source);\n const transforms: TransformSpec[] = [];\n\n for (const colProfile of profile.columns) {\n const selected = selectTransforms(colProfile);\n if (selected.length > 0) {\n transforms.push({\n column: colProfile.name,\n ops: selected.map((t) => t.name),\n });\n }\n }\n\n return makeConfig({\n source: source || null,\n transforms,\n });\n}\n","/**\n * Name similarity — fuzzy column name matching with alias support.\n */\n\nconst ALIASES: Readonly<Record<string, readonly string[]>> = {\n first_name: [\"fname\", \"first\", \"given_name\", \"first_nm\"],\n last_name: [\"lname\", \"last\", \"surname\", \"family_name\", \"last_nm\"],\n email: [\"email_address\", \"e_mail\", \"email_addr\", \"mail\"],\n phone: [\"phone_number\", \"ph\", \"telephone\", \"tel\", \"mobile\", \"cell\"],\n address: [\"addr\", \"street_address\", \"addr_line_1\", \"address_line_1\"],\n city: [\"town\", \"municipality\"],\n state: [\"st\", \"province\", \"region\"],\n zip: [\"zipcode\", \"zip_code\", \"postal_code\", \"postal\"],\n name: [\"full_name\", \"fullname\", \"customer_name\"],\n created_at: [\"signup_date\", \"signup_dt\", \"create_date\", \"date_created\"],\n};\n\nconst _ALIAS_LOOKUP = new Map<string, string>();\nfor (const [canonical, aliases] of Object.entries(ALIASES)) {\n for (const alias of aliases) {\n _ALIAS_LOOKUP.set(alias.toLowerCase(), canonical.toLowerCase());\n }\n _ALIAS_LOOKUP.set(canonical.toLowerCase(), canonical.toLowerCase());\n}\n\n/** Simple Jaro-Winkler-like similarity using Levenshtein ratio. */\nfunction fuzzyWRatio(a: string, b: string): number {\n if (a === b) return 100;\n if (a.length === 0 || b.length === 0) return 0;\n\n const maxLen = Math.max(a.length, b.length);\n const prev = new Array<number>(b.length + 1);\n const curr = new Array<number>(b.length + 1);\n\n for (let j = 0; j <= b.length; j++) prev[j] = j;\n for (let i = 1; i <= a.length; i++) {\n curr[0] = i;\n for (let j = 1; j <= b.length; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n curr[j] = Math.min(prev[j]! + 1, curr[j - 1]! + 1, prev[j - 1]! + cost);\n }\n for (let j = 0; j <= b.length; j++) prev[j] = curr[j]!;\n }\n\n const distance = prev[b.length]!;\n return 100 * (1 - distance / maxLen);\n}\n\nexport function nameSimilarity(source: string, target: string): number {\n const sLower = source.toLowerCase().trim();\n const tLower = target.toLowerCase().trim();\n\n if (sLower === tLower) return 1.0;\n\n const sCanonical = _ALIAS_LOOKUP.get(sLower);\n const tCanonical = _ALIAS_LOOKUP.get(tLower);\n if (sCanonical && tCanonical && sCanonical === tCanonical) return 0.95;\n\n return fuzzyWRatio(sLower, tLower) / 100.0;\n}\n","/**\n * Profile similarity — score how similar two column profiles are.\n */\n\nimport type { ColumnProfile } from \"../types.js\";\n\nexport function profileSimilarity(source: ColumnProfile, target: ColumnProfile): number {\n let score = 0;\n let weights = 0;\n\n // Type match\n if (source.inferredType === target.inferredType) score += 0.4;\n weights += 0.4;\n\n // Null percentage similarity\n const nullDiff = Math.abs(source.nullPct - target.nullPct);\n score += 0.2 * Math.max(0, 1 - nullDiff);\n weights += 0.2;\n\n // Uniqueness similarity\n const uniqueDiff = Math.abs(source.uniquePct - target.uniquePct);\n score += 0.2 * Math.max(0, 1 - uniqueDiff);\n weights += 0.2;\n\n // Cardinality ratio\n if (source.uniqueCount > 0 && target.uniqueCount > 0) {\n const ratio =\n Math.min(source.uniqueCount, target.uniqueCount) /\n Math.max(source.uniqueCount, target.uniqueCount);\n score += 0.2 * ratio;\n }\n weights += 0.2;\n\n return weights > 0 ? score / weights : 0;\n}\n","/**\n * SchemaMapper — auto-map source columns to target columns.\n */\n\nimport type { ColumnMapping, GoldenFlowConfig, Row } from \"../types.js\";\nimport { makeConfig } from \"../types.js\";\nimport { profileDataframe } from \"../engine/profiler-bridge.js\";\nimport { nameSimilarity } from \"./name-similarity.js\";\nimport { profileSimilarity } from \"./profile-similarity.js\";\n\nexport class SchemaMapper {\n readonly autoThreshold: number;\n readonly suggestThreshold: number;\n\n constructor(autoThreshold = 0.9, suggestThreshold = 0.6) {\n this.autoThreshold = autoThreshold;\n this.suggestThreshold = suggestThreshold;\n }\n\n map(sourceRows: readonly Row[], targetRows: readonly Row[]): ColumnMapping[] {\n const sourceProfile = profileDataframe(sourceRows);\n const targetProfile = profileDataframe(targetRows);\n\n const sourceProfiles = new Map(sourceProfile.columns.map((c) => [c.name, c]));\n const targetProfiles = new Map(targetProfile.columns.map((c) => [c.name, c]));\n\n const sourceCols =\n sourceRows.length > 0 ? Object.keys(sourceRows[0]!) : [];\n const targetCols =\n targetRows.length > 0 ? Object.keys(targetRows[0]!) : [];\n\n const mappings: ColumnMapping[] = [];\n const usedTargets = new Set<string>();\n\n for (const sCol of sourceCols) {\n let bestMatch: ColumnMapping | null = null;\n let bestScore = 0;\n\n for (const tCol of targetCols) {\n if (usedTargets.has(tCol)) continue;\n\n const nScore = nameSimilarity(sCol, tCol);\n\n let pScore = 0;\n const sp = sourceProfiles.get(sCol);\n const tp = targetProfiles.get(tCol);\n if (sp && tp) {\n pScore = profileSimilarity(sp, tp);\n }\n\n const combined = 0.7 * nScore + 0.3 * pScore;\n\n if (combined > bestScore && combined >= this.suggestThreshold) {\n bestScore = combined;\n bestMatch = {\n source: sCol,\n target: tCol,\n confidence: Math.round(combined * 1000) / 1000,\n transform: null,\n };\n }\n }\n\n if (bestMatch) {\n mappings.push(bestMatch);\n usedTargets.add(bestMatch.target);\n }\n }\n\n return mappings;\n }\n\n toConfig(mappings: readonly ColumnMapping[]): GoldenFlowConfig {\n return makeConfig({\n mappings: mappings.map((m) => ({\n source: m.source,\n target: m.target,\n transform: m.transform,\n })),\n });\n }\n}\n","import type { DomainPack } from \"../types.js\";\n\nconst DOMAIN_LOADERS: Readonly<Record<string, () => Promise<{ PACK: DomainPack }>>> = {\n people_hr: () => import(\"./people-hr.js\"),\n healthcare: () => import(\"./healthcare.js\"),\n finance: () => import(\"./finance.js\"),\n ecommerce: () => import(\"./ecommerce.js\"),\n real_estate: () => import(\"./real-estate.js\"),\n};\n\nexport async function loadDomain(name: string): Promise<DomainPack | null> {\n const key = name.toLowerCase().replace(/-/g, \"_\").replace(/\\//g, \"_\");\n const loader = DOMAIN_LOADERS[key];\n if (!loader) return null;\n const mod = await loader();\n return mod.PACK;\n}\n\nexport function listDomains(): string[] {\n return Object.keys(DOMAIN_LOADERS);\n}\n","/**\n * JSON reporter — serialize manifest to JSON.\n */\n\nimport type { Manifest } from \"../types.js\";\nimport { MutableManifest } from \"../types.js\";\n\nexport function manifestToJson(manifest: Manifest): string {\n if (manifest instanceof MutableManifest) {\n return JSON.stringify(manifest.toDict(), null, 2);\n }\n return JSON.stringify(manifest, null, 2);\n}\n","import type { Manifest, DatasetProfile, DiffResult } from \"../types.js\";\n\nconst BOLD = \"\\x1b[1m\";\nconst DIM = \"\\x1b[2m\";\nconst RED = \"\\x1b[31m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst CYAN = \"\\x1b[36m\";\nconst MAGENTA = \"\\x1b[35m\";\nconst RESET = \"\\x1b[0m\";\n\nexport function printProfile(profile: DatasetProfile): void {\n console.log(`\\n${BOLD}Profile: ${profile.filePath || \"<dataframe>\"}${RESET}\\n`);\n console.log(` ${\"Column\".padEnd(20)} ${\"Type\".padEnd(12)} ${\"Nulls\".padEnd(15)} ${\"Unique\".padEnd(10)} Sample`);\n console.log(` ${\"─\".repeat(20)} ${\"─\".repeat(12)} ${\"─\".repeat(15)} ${\"─\".repeat(10)} ${\"─\".repeat(20)}`);\n\n for (const col of profile.columns) {\n const pct = (col.nullPct * 100).toFixed(0);\n console.log(\n ` ${CYAN}${col.name.padEnd(20)}${RESET} ${GREEN}${col.inferredType.padEnd(12)}${RESET} ${YELLOW}${`${col.nullCount} (${pct}%)`.padEnd(15)}${RESET} ${MAGENTA}${String(col.uniqueCount).padEnd(10)}${RESET} ${DIM}${col.sampleValues.slice(0, 3).join(\", \")}${RESET}`\n );\n }\n\n console.log(`\\n${BOLD}${profile.rowCount}${RESET} rows, ${BOLD}${profile.columnCount}${RESET} columns`);\n}\n\nexport function printManifest(manifest: Manifest): void {\n if (manifest.records.length === 0 && manifest.errors.length === 0) {\n console.log(`${DIM}No transforms applied.${RESET}`);\n return;\n }\n\n console.log(`\\n${BOLD}Transforms Applied${RESET}\\n`);\n console.log(` ${\"Column\".padEnd(20)} ${\"Transform\".padEnd(22)} ${\"Affected\".padEnd(12)} ${\"Before\".padEnd(20)} After`);\n console.log(` ${\"─\".repeat(20)} ${\"─\".repeat(22)} ${\"─\".repeat(12)} ${\"─\".repeat(20)} ${\"─\".repeat(20)}`);\n\n for (const r of manifest.records) {\n const before = r.sampleBefore.slice(0, 2).join(\", \");\n const after = r.sampleAfter.slice(0, 2).join(\", \");\n console.log(\n ` ${CYAN}${r.column.padEnd(20)}${RESET} ${GREEN}${r.transform.padEnd(22)}${RESET} ${YELLOW}${`${r.affectedRows}/${r.totalRows}`.padEnd(12)}${RESET} ${DIM}${before.padEnd(20)}${RESET} ${BOLD}${after}${RESET}`\n );\n }\n\n if (manifest.errors.length > 0) {\n console.log(`\\n${RED}${BOLD}${manifest.errors.length} errors:${RESET}`);\n for (const e of manifest.errors) {\n console.log(` ${RED}${e.column}${RESET} / ${e.transform}: ${e.error}`);\n }\n }\n}\n\nexport function printDiff(diff: DiffResult): void {\n console.log(`Rows: ${diff.rowCountBefore} → ${diff.rowCountAfter}`);\n console.log(`Total changes: ${BOLD}${diff.totalChanges}${RESET}`);\n if (diff.addedColumns.length) console.log(`Added columns: ${GREEN}${diff.addedColumns.join(\", \")}${RESET}`);\n if (diff.removedColumns.length) console.log(`Removed columns: ${RED}${diff.removedColumns.join(\", \")}${RESET}`);\n if (diff.changedColumns.length) console.log(`Changed columns: ${YELLOW}${diff.changedColumns.join(\", \")}${RESET}`);\n}\n","/**\n * LLM-assisted categorical correction -- edge-safe (raw fetch, no SDK imports).\n *\n * Registers `category_llm_correct` as a passthrough transform. The actual LLM\n * interaction happens via the async helper `applyLlmCorrections()`, which the\n * engine or CLI should call explicitly before/after the sync transform pipeline.\n */\n\nimport type { ColumnValue } from \"../types.js\";\nimport { registerTransform } from \"../transforms/registry.js\";\n\n// ---------------------------------------------------------------------------\n// Corrections cache -- keyed by column name\n// ---------------------------------------------------------------------------\n\nconst _correctionsCache = new Map<string, ReadonlyMap<string, string>>();\n\n/** Clear all cached corrections. */\nexport function clearLlmCache(): void {\n _correctionsCache.clear();\n}\n\n/** Inject pre-computed corrections (useful for testing or offline mode). */\nexport function setLlmCorrections(\n columnName: string,\n corrections: Record<string, string>,\n): void {\n _correctionsCache.set(columnName, new Map(Object.entries(corrections)));\n}\n\n// ---------------------------------------------------------------------------\n// Value frequency summary\n// ---------------------------------------------------------------------------\n\n/**\n * Build a frequency map of the top `max` non-null string values in `values`.\n * Counts are descending so the prompt focuses on the most common entries.\n */\nexport function getValueSummary(\n values: readonly ColumnValue[],\n max = 30,\n): Record<string, number> {\n const counts = new Map<string, number>();\n for (const v of values) {\n if (v === null || typeof v !== \"string\") continue;\n const trimmed = v.trim();\n if (!trimmed) continue;\n counts.set(trimmed, (counts.get(trimmed) ?? 0) + 1);\n }\n const sorted = [...counts.entries()].sort((a, b) => b[1] - a[1]).slice(0, max);\n return Object.fromEntries(sorted);\n}\n\n// ---------------------------------------------------------------------------\n// LLM interaction (raw fetch -- edge-safe)\n// ---------------------------------------------------------------------------\n\ninterface AnthropicResponse {\n content: Array<{ text: string }>;\n}\n\ninterface OpenAIResponse {\n choices: Array<{ message: { content: string } }>;\n}\n\nfunction buildPrompt(\n columnName: string,\n valueSummary: Record<string, number>,\n): string {\n return `You are a data quality expert. Analyze this column and identify values that appear to be misspellings, abbreviations, or variants of other values in the same column.\n\nColumn name: ${columnName}\nValue frequencies (value: count):\n${JSON.stringify(valueSummary, null, 2)}\n\nFor each incorrect value, provide the corrected canonical form. Only include values that need correction. Return JSON object mapping incorrect values to their corrections.\n\nExample response:\n{\"actve\": \"active\", \"ACTIVE\": \"active\", \"pendng\": \"pending\"}\n\nReturn ONLY the JSON object, no other text.`;\n}\n\n/** Read an env var if `process` exists (edge runtimes may not have it). */\nfunction envVar(key: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env[key];\n }\n return undefined;\n}\n\n/** Validate that parsed JSON is a flat string→string map. Drops non-string entries. */\nfunction validateCorrections(parsed: unknown): Record<string, string> {\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n const result: Record<string, string> = {};\n for (const [k, v] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof k === \"string\" && typeof v === \"string\") result[k] = v;\n }\n return result;\n}\n\n/**\n * Ask an LLM to identify misspellings/variants and return a corrections map.\n * Tries Anthropic first (if `ANTHROPIC_API_KEY` is set), then OpenAI.\n * Returns an empty object if no key is available or if the call fails.\n */\nasync function askLlmForCorrections(\n columnName: string,\n valueSummary: Record<string, number>,\n): Promise<Record<string, string>> {\n const prompt = buildPrompt(columnName, valueSummary);\n const anthropicKey = envVar(\"ANTHROPIC_API_KEY\");\n const openaiKey = envVar(\"OPENAI_API_KEY\");\n\n try {\n if (anthropicKey) {\n const resp = await fetch(\"https://api.anthropic.com/v1/messages\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": anthropicKey,\n \"anthropic-version\": \"2023-06-01\",\n },\n body: JSON.stringify({\n model: \"claude-sonnet-4-5-20250514\",\n max_tokens: 1024,\n messages: [{ role: \"user\", content: prompt }],\n }),\n });\n if (!resp.ok) {\n console.warn(`[goldenflow:llm] Anthropic API error: ${resp.status} ${resp.statusText}`);\n return {};\n }\n const data = (await resp.json()) as AnthropicResponse;\n const text = data.content?.[0]?.text ?? \"\";\n if (!text) {\n console.warn(\"[goldenflow:llm] Anthropic returned empty response\");\n return {};\n }\n return validateCorrections(JSON.parse(text));\n }\n\n if (openaiKey) {\n const resp = await fetch(\"https://api.openai.com/v1/chat/completions\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${openaiKey}`,\n },\n body: JSON.stringify({\n model: \"gpt-4o-mini\",\n messages: [{ role: \"user\", content: prompt }],\n response_format: { type: \"json_object\" },\n }),\n });\n if (!resp.ok) {\n console.warn(`[goldenflow:llm] OpenAI API error: ${resp.status} ${resp.statusText}`);\n return {};\n }\n const data = (await resp.json()) as OpenAIResponse;\n const text = data.choices?.[0]?.message?.content ?? \"\";\n if (!text) {\n console.warn(\"[goldenflow:llm] OpenAI returned empty response\");\n return {};\n }\n return validateCorrections(JSON.parse(text));\n }\n } catch (e) {\n console.warn(\n `[goldenflow:llm] LLM correction failed: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n return {};\n}\n\n// ---------------------------------------------------------------------------\n// Async helper -- call before the sync transform pipeline\n// ---------------------------------------------------------------------------\n\n/**\n * Fetch LLM-based corrections for a column's values and cache them.\n *\n * Usage:\n * ```ts\n * await prepareLlmCorrections(\"status\", rows.map(r => r.status));\n * // ... then run the sync transform pipeline which includes category_llm_correct\n * ```\n *\n * Returns the corrections map (also cached internally).\n */\nexport async function prepareLlmCorrections(\n columnName: string,\n values: readonly ColumnValue[],\n): Promise<Record<string, string>> {\n const summary = getValueSummary(values);\n if (Object.keys(summary).length === 0) return {};\n const corrections = await askLlmForCorrections(columnName, summary);\n if (Object.keys(corrections).length > 0) {\n _correctionsCache.set(columnName, new Map(Object.entries(corrections)));\n }\n return corrections;\n}\n\n/**\n * High-level async helper: fetch corrections then apply them to `values`.\n *\n * Returns corrected values array (same length as input). Skips the LLM call\n * if corrections are already cached for `columnName`.\n */\nexport async function applyLlmCorrections(\n columnName: string,\n values: readonly ColumnValue[],\n): Promise<ColumnValue[]> {\n if (!_correctionsCache.has(columnName)) {\n await prepareLlmCorrections(columnName, values);\n }\n const map = _correctionsCache.get(columnName);\n if (!map || map.size === 0) return [...values];\n\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const trimmed = v.trim();\n return map.get(trimmed) ?? v;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Sync transform (reads from cache -- passthrough if cache empty)\n// ---------------------------------------------------------------------------\n\n/**\n * Synchronous transform function. Applies cached LLM corrections if available,\n * otherwise passes values through unchanged.\n *\n * The cache is populated by calling `prepareLlmCorrections()` or\n * `applyLlmCorrections()` before running the transform pipeline.\n */\nfunction categoryLlmCorrect(\n values: readonly ColumnValue[],\n ...params: unknown[]\n): ColumnValue[] {\n // The first param (if provided) is the column name, injected by the engine.\n const columnName =\n typeof params[0] === \"string\" ? params[0] : \"__default__\";\n const map = _correctionsCache.get(columnName);\n if (!map || map.size === 0) return [...values];\n\n return values.map((v) => {\n if (v === null || typeof v !== \"string\") return v;\n const trimmed = v.trim();\n return map.get(trimmed) ?? v;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Registration\n// ---------------------------------------------------------------------------\n\nregisterTransform(\n {\n name: \"category_llm_correct\",\n inputTypes: [\"string\"],\n autoApply: false,\n priority: 34,\n mode: \"series\",\n },\n categoryLlmCorrect,\n);\n","/**\n * Notebook HTML rendering — generates HTML tables for TransformResult, Manifest, DatasetProfile.\n */\n\nimport type { DatasetProfile, Manifest, TransformResult } from \"./types.js\";\n\nexport function transformResultToHtml(result: TransformResult): string {\n const rows = result.rows.length;\n const cols = result.columns.length;\n const transforms = result.manifest.records.length;\n const errors = result.manifest.errors.length;\n\n let html = `<div style=\"font-family: monospace; padding: 10px; border: 1px solid #ddd; border-radius: 5px;\">\n <h3 style=\"margin: 0 0 10px 0;\">GoldenFlow TransformResult</h3>\n <table style=\"border-collapse: collapse; width: 100%;\">\n <tr><td style=\"padding: 4px 8px; font-weight: bold;\">Rows</td><td>${rows.toLocaleString()}</td></tr>\n <tr><td style=\"padding: 4px 8px; font-weight: bold;\">Columns</td><td>${cols}</td></tr>\n <tr><td style=\"padding: 4px 8px; font-weight: bold;\">Transforms Applied</td><td>${transforms}</td></tr>\n <tr><td style=\"padding: 4px 8px; font-weight: bold;\">Errors</td><td style=\"color: ${errors ? \"red\" : \"green\"};\">${errors}</td></tr>\n </table>`;\n\n if (result.manifest.records.length > 0) {\n html += `<h4 style=\"margin: 10px 0 5px 0;\">Transforms</h4>\n <table style=\"border-collapse: collapse; width: 100%; font-size: 0.9em;\">\n <tr style=\"background: #f5f5f5;\">\n <th style=\"padding: 4px 8px; text-align: left;\">Column</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Transform</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Affected</th>\n </tr>`;\n const shown = result.manifest.records.slice(0, 10);\n for (const r of shown) {\n html += `<tr>\n <td style=\"padding: 4px 8px;\">${r.column}</td>\n <td style=\"padding: 4px 8px;\">${r.transform}</td>\n <td style=\"padding: 4px 8px;\">${r.affectedRows}/${r.totalRows}</td>\n </tr>`;\n }\n if (result.manifest.records.length > 10) {\n html += `<tr><td colspan=\"3\" style=\"padding: 4px 8px; color: #888;\">... and ${result.manifest.records.length - 10} more</td></tr>`;\n }\n html += \"</table>\";\n }\n\n html += \"</div>\";\n return html;\n}\n\nexport function manifestToHtml(manifest: Manifest): string {\n let html = `<div style=\"font-family: monospace; padding: 10px; border: 1px solid #ddd; border-radius: 5px;\">\n <h3>GoldenFlow Manifest</h3>\n <p>Source: ${manifest.source} | Transforms: ${manifest.records.length} | Errors: ${manifest.errors.length}</p>\n <table style=\"border-collapse: collapse; width: 100%; font-size: 0.9em;\">\n <tr style=\"background: #f5f5f5;\">\n <th style=\"padding: 4px 8px; text-align: left;\">Column</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Transform</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Affected</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Before</th>\n <th style=\"padding: 4px 8px; text-align: left;\">After</th>\n </tr>`;\n for (const r of manifest.records) {\n const before = r.sampleBefore.slice(0, 2).join(\", \");\n const after = r.sampleAfter.slice(0, 2).join(\", \");\n html += `<tr>\n <td style=\"padding: 4px 8px;\">${r.column}</td>\n <td style=\"padding: 4px 8px;\">${r.transform}</td>\n <td style=\"padding: 4px 8px;\">${r.affectedRows}/${r.totalRows}</td>\n <td style=\"padding: 4px 8px; color: #c00;\">${before}</td>\n <td style=\"padding: 4px 8px; color: #0a0;\">${after}</td>\n </tr>`;\n }\n html += \"</table></div>\";\n return html;\n}\n\nexport function profileToHtml(profile: DatasetProfile): string {\n let html = `<div style=\"font-family: monospace; padding: 10px; border: 1px solid #ddd; border-radius: 5px;\">\n <h3>GoldenFlow Profile</h3>\n <p>${profile.rowCount.toLocaleString()} rows, ${profile.columnCount} columns</p>\n <table style=\"border-collapse: collapse; width: 100%; font-size: 0.9em;\">\n <tr style=\"background: #f5f5f5;\">\n <th style=\"padding: 4px 8px; text-align: left;\">Column</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Type</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Nulls</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Unique</th>\n <th style=\"padding: 4px 8px; text-align: left;\">Sample</th>\n </tr>`;\n for (const c of profile.columns) {\n const pct = (c.nullPct * 100).toFixed(0);\n html += `<tr>\n <td style=\"padding: 4px 8px;\">${c.name}</td>\n <td style=\"padding: 4px 8px;\">${c.inferredType}</td>\n <td style=\"padding: 4px 8px;\">${c.nullCount} (${pct}%)</td>\n <td style=\"padding: 4px 8px;\">${c.uniqueCount}</td>\n <td style=\"padding: 4px 8px; color: #888;\">${c.sampleValues.slice(0, 3).join(\", \")}</td>\n </tr>`;\n }\n html += \"</table></div>\";\n return html;\n}\n","/**\n * File connector — read/write CSV files as Row[].\n * Node-only (uses node:fs).\n */\n\nimport { readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { extname, dirname } from \"node:path\";\nimport type { Row } from \"../../core/types.js\";\n\n/** Coerce a raw string to string | number | boolean.\n * Preserves leading-zero strings (zip codes, IDs) as strings. */\nfunction coerceValue(raw: string): string | number | boolean {\n if (raw === \"true\" || raw === \"True\" || raw === \"TRUE\") return true;\n if (raw === \"false\" || raw === \"False\" || raw === \"FALSE\") return false;\n if (raw.length > 0 && raw === raw.trim()) {\n // Don't coerce strings with leading zeros (zip codes, SSNs, phone numbers)\n // except \"0\" itself and decimal numbers like \"0.5\"\n if (raw.length > 1 && raw[0] === \"0\" && raw[1] !== \".\") return raw;\n const n = Number(raw);\n if (Number.isFinite(n) && raw !== \"\") return n;\n }\n return raw;\n}\n\nfunction parseCsv(content: string): Row[] {\n const lines = content.split(/\\r?\\n/).filter((line) => line.trim());\n if (lines.length === 0) return [];\n\n const headers = parseCsvLine(lines[0]!);\n const rows: Row[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const values = parseCsvLine(lines[i]!);\n const row: Record<string, unknown> = {};\n for (let j = 0; j < headers.length; j++) {\n const raw = values[j] ?? \"\";\n row[headers[j]!] = raw === \"\" ? null : coerceValue(raw);\n }\n rows.push(row);\n }\n\n return rows;\n}\n\nfunction parseCsvLine(line: string): string[] {\n const result: string[] = [];\n let current = \"\";\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const ch = line[i]!;\n if (inQuotes) {\n if (ch === '\"') {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n current += '\"';\n i++;\n } else {\n inQuotes = false;\n }\n } else {\n current += ch;\n }\n } else {\n if (ch === '\"') {\n inQuotes = true;\n } else if (ch === \",\") {\n result.push(current);\n current = \"\";\n } else {\n current += ch;\n }\n }\n }\n result.push(current);\n return result;\n}\n\nfunction rowsToCsv(rows: readonly Row[]): string {\n if (rows.length === 0) return \"\";\n const headers = Object.keys(rows[0]!);\n const lines = [headers.join(\",\")];\n\n for (const row of rows) {\n const values = headers.map((h) => {\n const v = row[h];\n if (v === null || v === undefined) return \"\";\n const s = String(v);\n if (s.includes(\",\") || s.includes('\"') || s.includes(\"\\n\")) {\n return `\"${s.replace(/\"/g, '\"\"')}\"`;\n }\n return s;\n });\n lines.push(values.join(\",\"));\n }\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n\nexport function readFile(path: string): Row[] {\n const ext = extname(path).toLowerCase();\n if (ext === \".json\") {\n const content = readFileSync(path, \"utf-8\");\n return JSON.parse(content) as Row[];\n }\n if (ext !== \".csv\") {\n throw new Error(`Unsupported file format: ${ext}. Supported: .csv, .json`);\n }\n const content = readFileSync(path, \"utf-8\");\n return parseCsv(content);\n}\n\nexport function writeFile(rows: readonly Row[], path: string): void {\n const ext = extname(path).toLowerCase();\n const dir = dirname(path);\n mkdirSync(dir, { recursive: true });\n\n if (ext === \".json\") {\n writeFileSync(path, JSON.stringify(rows, null, 2));\n return;\n }\n if (ext !== \".csv\") {\n throw new Error(`Unsupported file format: ${ext}. Supported: .csv, .json`);\n }\n writeFileSync(path, rowsToCsv(rows));\n}\n","/**\n * History — track transform runs.\n * Node-only module (uses node:fs, node:path, node:os).\n */\n\nimport { mkdirSync, writeFileSync, readFileSync, existsSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { RunRecord } from \"../core/types.js\";\n\nfunction historyDir(): string {\n return join(homedir(), \".goldenflow\", \"history\");\n}\n\nexport function saveRun(record: RunRecord): string {\n const dir = historyDir();\n mkdirSync(dir, { recursive: true });\n const filePath = join(dir, `${record.runId}.json`);\n writeFileSync(filePath, JSON.stringify(record, null, 2));\n return filePath;\n}\n\nexport function listRuns(limit = 20): RunRecord[] {\n const dir = historyDir();\n if (!existsSync(dir)) return [];\n\n const files = readdirSync(dir)\n .filter((name) => name.endsWith(\".json\"))\n .map((name) => ({ name, mtime: statSync(join(dir, name)).mtimeMs }))\n .sort((a, b) => b.mtime - a.mtime)\n .slice(0, limit);\n\n const runs: RunRecord[] = [];\n for (const file of files) {\n try {\n const content = readFileSync(join(dir, file.name), \"utf-8\");\n runs.push(JSON.parse(content) as RunRecord);\n } catch (e) {\n console.warn(`[goldenflow:history] Skipping corrupt history file ${file.name}: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n return runs;\n}\n\nexport function getRun(runId: string): RunRecord | null {\n const filePath = join(historyDir(), `${runId}.json`);\n if (!existsSync(filePath)) return null;\n return JSON.parse(readFileSync(filePath, \"utf-8\")) as RunRecord;\n}\n\nexport function generateRunId(): string {\n const now = new Date();\n const ts = now.toISOString().replace(/[-:T]/g, \"\").slice(0, 15);\n const suffix = String(Date.now() % 10000).padStart(4, \"0\");\n return `${ts}_${suffix}`;\n}\n","/**\n * GoldenFlow MCP Server — 10 tools for data transformation via stdio transport.\n * Node-only module.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve, isAbsolute } from \"node:path\";\nimport { readFile } from \"../connectors/file.js\";\n\n/** Validate a file path to prevent path traversal. Resolves relative to cwd. */\nfunction sanitizePath(raw: string): string {\n const resolved = isAbsolute(raw) ? resolve(raw) : resolve(process.cwd(), raw);\n const cwd = resolve(process.cwd());\n if (!resolved.startsWith(cwd)) {\n throw new Error(`Path '${raw}' is outside the working directory`);\n }\n return resolved;\n}\nimport { TransformEngine } from \"../../core/engine/transformer.js\";\nimport { profileDataframe } from \"../../core/engine/profiler-bridge.js\";\nimport { diffDataframes } from \"../../core/engine/differ.js\";\nimport { learnConfig } from \"../../core/config/learner.js\";\nimport { loadConfigFromString } from \"../../core/config/loader.js\";\nimport { makeConfig } from \"../../core/types.js\";\nimport { listTransforms, getTransform } from \"../../core/transforms/index.js\";\nimport { SchemaMapper } from \"../../core/mapping/schema-mapper.js\";\nimport { selectFromFindings } from \"../../core/engine/selector.js\";\nimport { listDomains, loadDomain } from \"../../core/domains/index.js\";\n\n// ---------------------------------------------------------------------------\n// Tool definitions\n// ---------------------------------------------------------------------------\n\ninterface ToolDefinition {\n name: string;\n description: string;\n inputSchema: {\n type: \"object\";\n properties: Record<string, unknown>;\n required?: string[];\n };\n}\n\nexport const TOOL_DEFINITIONS: ToolDefinition[] = [\n {\n name: \"transform\",\n description: \"Transform a data file. Reads a CSV, applies transforms (auto or from config), and returns the manifest.\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the data file (CSV).\" },\n config: { type: \"string\", description: \"Optional path to a YAML config file.\" },\n },\n required: [\"path\"],\n },\n },\n {\n name: \"map\",\n description: \"Auto-map schemas between two data files. Returns column mappings with confidence scores.\",\n inputSchema: {\n type: \"object\",\n properties: {\n source: { type: \"string\", description: \"Path to the source data file.\" },\n target: { type: \"string\", description: \"Path to the target data file.\" },\n },\n required: [\"source\", \"target\"],\n },\n },\n {\n name: \"profile\",\n description: \"Profile a data file. Returns column types, stats, and quality indicators.\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the data file (CSV).\" },\n },\n required: [\"path\"],\n },\n },\n {\n name: \"learn\",\n description: \"Generate a YAML config from data patterns. Analyzes the file and returns a recommended config.\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the data file (CSV).\" },\n },\n required: [\"path\"],\n },\n },\n {\n name: \"diff\",\n description: \"Compare two data files and report differences (added/removed/changed columns and rows).\",\n inputSchema: {\n type: \"object\",\n properties: {\n path_before: { type: \"string\", description: \"Path to the before file.\" },\n path_after: { type: \"string\", description: \"Path to the after file.\" },\n },\n required: [\"path_before\", \"path_after\"],\n },\n },\n {\n name: \"validate\",\n description: \"Dry-run transform. Shows what transforms would be applied without writing output.\",\n inputSchema: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the data file (CSV).\" },\n config: { type: \"string\", description: \"Optional path to a YAML config file.\" },\n },\n required: [\"path\"],\n },\n },\n {\n name: \"list_transforms\",\n description: \"List all available transforms with their metadata (name, input types, mode, priority).\",\n inputSchema: {\n type: \"object\",\n properties: {},\n },\n },\n {\n name: \"explain_transform\",\n description: \"Describe a specific transform by name. Returns its metadata or an error if not found.\",\n inputSchema: {\n type: \"object\",\n properties: {\n transform_name: { type: \"string\", description: \"Name of the transform to describe.\" },\n },\n required: [\"transform_name\"],\n },\n },\n {\n name: \"list_domains\",\n description: \"List all available domain packs (e.g. people_hr, healthcare, finance).\",\n inputSchema: {\n type: \"object\",\n properties: {},\n },\n },\n {\n name: \"select_from_findings\",\n description: \"Map GoldenCheck findings to recommended GoldenFlow transforms.\",\n inputSchema: {\n type: \"object\",\n properties: {\n findings: {\n type: \"array\",\n items: { type: \"object\" },\n description: \"Array of GoldenCheck finding objects (each with 'check' and 'column' keys).\",\n },\n },\n required: [\"findings\"],\n },\n },\n];\n\n// ---------------------------------------------------------------------------\n// Tool handler\n// ---------------------------------------------------------------------------\n\nexport function handleTool(name: string, arguments_: Record<string, unknown>): string {\n try {\n return _handleToolInner(name, arguments_);\n } catch (e) {\n return JSON.stringify({ error: e instanceof Error ? e.message : String(e) });\n }\n}\n\nfunction _handleToolInner(name: string, arguments_: Record<string, unknown>): string {\n switch (name) {\n case \"transform\": {\n const path = sanitizePath(String(arguments_[\"path\"]));\n const rows = readFile(path);\n let engine: TransformEngine;\n\n if (arguments_[\"config\"]) {\n const configPath = sanitizePath(String(arguments_[\"config\"]));\n const configContent = readFileSync(configPath, \"utf-8\");\n const config = loadConfigFromString(configContent);\n engine = new TransformEngine(config);\n } else {\n engine = new TransformEngine();\n }\n\n const result = engine.transformDf(rows, path);\n return JSON.stringify({\n rows: result.rows.length,\n transforms_applied: result.manifest.records.length,\n manifest: result.manifest,\n });\n }\n\n case \"map\": {\n const sourceRows = readFile(sanitizePath(String(arguments_[\"source\"])));\n const targetRows = readFile(sanitizePath(String(arguments_[\"target\"])));\n const mapper = new SchemaMapper();\n const mappings = mapper.map(sourceRows, targetRows);\n return JSON.stringify({\n mappings: mappings.map((m) => ({\n source: m.source,\n target: m.target,\n confidence: m.confidence,\n })),\n });\n }\n\n case \"profile\": {\n const profPath = sanitizePath(String(arguments_[\"path\"]));\n const rows = readFile(profPath);\n const profile = profileDataframe(rows, profPath);\n return JSON.stringify({\n source: profile.filePath,\n row_count: profile.rowCount,\n columns: profile.columns.map((c) => ({\n name: c.name,\n type: c.inferredType,\n null_count: c.nullCount,\n unique_count: c.uniqueCount,\n sample_values: c.sampleValues,\n })),\n });\n }\n\n case \"learn\": {\n const learnPath = sanitizePath(String(arguments_[\"path\"]));\n const rows = readFile(learnPath);\n const config = learnConfig(rows, learnPath);\n return JSON.stringify(config);\n }\n\n case \"diff\": {\n const beforeRows = readFile(sanitizePath(String(arguments_[\"path_before\"])));\n const afterRows = readFile(sanitizePath(String(arguments_[\"path_after\"])));\n const result = diffDataframes(beforeRows, afterRows);\n return JSON.stringify(result);\n }\n\n case \"validate\": {\n const valPath = sanitizePath(String(arguments_[\"path\"]));\n const rows = readFile(valPath);\n let engine: TransformEngine;\n\n if (arguments_[\"config\"]) {\n const configPath = sanitizePath(String(arguments_[\"config\"]));\n const configContent = readFileSync(configPath, \"utf-8\");\n const config = loadConfigFromString(configContent);\n engine = new TransformEngine(config);\n } else {\n engine = new TransformEngine();\n }\n\n const result = engine.transformDf(rows, valPath);\n return JSON.stringify({\n mode: \"would_apply\",\n rows: result.rows.length,\n transforms_applied: result.manifest.records.length,\n manifest: result.manifest,\n });\n }\n\n case \"list_transforms\": {\n const transforms = listTransforms();\n return JSON.stringify(\n transforms.map((t) => ({\n name: t.name,\n input_types: t.inputTypes,\n auto_apply: t.autoApply,\n priority: t.priority,\n mode: t.mode,\n })),\n );\n }\n\n case \"explain_transform\": {\n const transformName = String(arguments_[\"transform_name\"]);\n const info = getTransform(transformName);\n if (!info) {\n return JSON.stringify({ error: `Transform '${transformName}' not found.` });\n }\n return JSON.stringify({\n name: info.name,\n input_types: info.inputTypes,\n auto_apply: info.autoApply,\n priority: info.priority,\n mode: info.mode,\n });\n }\n\n case \"list_domains\": {\n const domains = listDomains();\n return JSON.stringify({ domains });\n }\n\n case \"select_from_findings\": {\n const findings = arguments_[\"findings\"] as Record<string, unknown>[];\n const result = selectFromFindings(findings);\n return JSON.stringify(result);\n }\n\n default:\n return JSON.stringify({ error: `Unknown tool: ${name}` });\n }\n}\n","import { readdirSync, statSync } from \"node:fs\";\nimport { join, extname } from \"node:path\";\nimport { readFile, writeFile } from \"./connectors/file.js\";\nimport { TransformEngine } from \"../core/engine/transformer.js\";\nimport { loadConfigFromString } from \"../core/config/loader.js\";\nimport { makeConfig } from \"../core/types.js\";\nimport { readFileSync } from \"node:fs\";\n\nexport function watchDirectory(\n dirPath: string,\n options: { configPath?: string; outputDir?: string; interval?: number } = {},\n): void {\n const interval = options.interval ?? 2.0;\n const cfg = options.configPath\n ? loadConfigFromString(readFileSync(options.configPath, \"utf-8\"))\n : makeConfig();\n const engine = new TransformEngine(cfg);\n const outDir = options.outputDir ?? dirPath;\n const seen = new Map<string, number>(); // path -> mtime\n\n console.log(`Watching ${dirPath} (interval: ${interval}s)`);\n console.log(\"Press Ctrl+C to stop\\n\");\n\n const poll = () => {\n try {\n const files = readdirSync(dirPath).filter(f => extname(f).toLowerCase() === \".csv\");\n for (const file of files) {\n if (file.includes(\"_transformed\")) continue;\n const fullPath = join(dirPath, file);\n const mtime = statSync(fullPath).mtimeMs;\n if (!seen.has(fullPath) || seen.get(fullPath)! < mtime) {\n console.log(`Detected: ${file}`);\n try {\n const rows = readFile(fullPath);\n const result = engine.transformDf(rows, fullPath);\n const stem = file.replace(extname(file), \"\");\n writeFile(result.rows as Record<string, unknown>[], join(outDir, `${stem}_transformed.csv`));\n console.log(` Transformed: ${result.manifest.records.length} transforms applied`);\n } catch (e) {\n console.error(` Error: ${e instanceof Error ? e.message : String(e)}`);\n }\n seen.set(fullPath, mtime);\n }\n }\n } catch (e) {\n console.error(`Watch error: ${e instanceof Error ? e.message : String(e)}`);\n }\n };\n\n poll();\n const timer = setInterval(poll, interval * 1000);\n process.on(\"SIGINT\", () => { clearInterval(timer); console.log(\"\\nWatch stopped.\"); process.exit(0); });\n}\n","import { readFile, writeFile } from \"./connectors/file.js\";\nimport { TransformEngine } from \"../core/engine/transformer.js\";\nimport { loadConfigFromString } from \"../core/config/loader.js\";\nimport { makeConfig } from \"../core/types.js\";\nimport { readFileSync } from \"node:fs\";\nimport { basename, extname, dirname, join } from \"node:path\";\n\nfunction parseInterval(expr: string): number {\n const s = expr.trim().toLowerCase();\n const multipliers: Record<string, number> = { s: 1, m: 60, h: 3600, d: 86400 };\n const unit = s.slice(-1);\n const mult = multipliers[unit];\n if (!mult) throw new Error(`Invalid interval: ${expr}. Use format like '5m', '1h', '30s'`);\n const num = parseFloat(s.slice(0, -1));\n if (isNaN(num)) throw new Error(`Invalid interval: ${expr}`);\n return num * mult;\n}\n\nexport function runSchedule(\n filePath: string,\n options: { interval?: string; configPath?: string; outputDir?: string } = {},\n): void {\n const intervalStr = options.interval ?? \"1h\";\n const seconds = parseInterval(intervalStr);\n const cfg = options.configPath\n ? loadConfigFromString(readFileSync(options.configPath, \"utf-8\"))\n : makeConfig();\n const engine = new TransformEngine(cfg);\n const outDir = options.outputDir ?? dirname(filePath);\n\n console.log(`Scheduled: transform ${filePath} every ${intervalStr}`);\n console.log(\"Press Ctrl+C to stop\\n\");\n\n let runCount = 0;\n const run = () => {\n runCount++;\n const ts = new Date().toTimeString().slice(0, 8);\n console.log(`Run #${runCount} at ${ts}`);\n try {\n const rows = readFile(filePath);\n const result = engine.transformDf(rows, filePath);\n const ext = extname(filePath);\n const stem = basename(filePath, ext);\n writeFile(result.rows as Record<string, unknown>[], join(outDir, `${stem}_transformed${ext}`));\n console.log(` Done: ${result.manifest.records.length} transforms, ${result.manifest.errors.length} errors`);\n } catch (e) {\n console.error(` Error: ${e instanceof Error ? e.message : String(e)}`);\n }\n };\n\n run();\n const timer = setInterval(run, seconds * 1000);\n process.on(\"SIGINT\", () => { clearInterval(timer); console.log(`\\nStopped after ${runCount} runs.`); process.exit(0); });\n}\n","import { createInterface } from \"node:readline\";\nimport { readFile } from \"./connectors/file.js\";\nimport { profileDataframe } from \"../core/engine/profiler-bridge.js\";\nimport { selectTransforms } from \"../core/engine/selector.js\";\nimport { saveConfigToString } from \"../core/config/loader.js\";\nimport { makeConfig } from \"../core/types.js\";\nimport type { TransformSpec } from \"../core/types.js\";\nimport { writeFileSync } from \"node:fs\";\n\nfunction ask(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n return new Promise((resolve) => rl.question(question, resolve));\n}\n\nexport async function runWizard(dataPath?: string, outputPath = \"goldenflow.yaml\"): Promise<void> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n\n try {\n console.log(\"GoldenFlow Setup Wizard\\n\");\n\n const filePath = dataPath ?? await ask(rl, \"Path to your data file: \");\n console.log(`\\nProfiling ${filePath}...`);\n\n const rows = readFile(filePath);\n const profile = profileDataframe(rows, filePath);\n\n console.log(`\\n${profile.rowCount} rows, ${profile.columnCount} columns\\n`);\n\n const columnTransforms: Record<string, string[]> = {};\n for (const col of profile.columns) {\n const selected = selectTransforms(col);\n const names = selected.map(t => t.name);\n columnTransforms[col.name] = names;\n console.log(` ${col.name}: ${col.inferredType} | suggested: ${names.slice(0, 3).join(\", \") || \"none\"}`);\n }\n\n console.log(\"\\nConfigure transforms per column:\\n\");\n const transforms: TransformSpec[] = [];\n\n for (const [colName, suggested] of Object.entries(columnTransforms)) {\n if (suggested.length === 0) continue;\n const answer = await ask(rl, ` Apply [${suggested.join(\", \")}] to ${colName}? (Y/n) `);\n if (answer.toLowerCase() !== \"n\") {\n transforms.push({ column: colName, ops: suggested });\n }\n }\n\n const config = makeConfig({ source: filePath, transforms });\n const yaml = saveConfigToString(config);\n writeFileSync(outputPath, yaml);\n console.log(`\\nConfig saved to ${outputPath}`);\n console.log(`Run: goldenflow-js transform ${filePath} -c ${outputPath}`);\n } finally {\n rl.close();\n }\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { resolve, isAbsolute } from \"node:path\";\nimport { readFile } from \"../connectors/file.js\";\nimport { TransformEngine } from \"../../core/engine/transformer.js\";\nimport { listTransforms } from \"../../core/transforms/index.js\";\n\n/** Validate a file path to prevent path traversal. Resolves relative to cwd. */\nfunction sanitizePath(raw: string): string {\n const resolved = isAbsolute(raw) ? resolve(raw) : resolve(process.cwd(), raw);\n const cwd = resolve(process.cwd());\n if (!resolved.startsWith(cwd)) {\n throw new Error(`Path '${raw}' is outside the working directory`);\n }\n return resolved;\n}\n\nconst VERSION = \"0.1.0\";\n\nfunction jsonResponse(res: ServerResponse, status: number, data: unknown): void {\n res.writeHead(status, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(data));\n}\n\nasync function readBody(req: IncomingMessage): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) chunks.push(chunk as Buffer);\n return Buffer.concat(chunks).toString(\"utf-8\");\n}\n\nexport function createApp() {\n return createServer(async (req, res) => {\n const url = new URL(req.url ?? \"/\", `http://${req.headers.host}`);\n\n if (url.pathname === \"/health\" && req.method === \"GET\") {\n return jsonResponse(res, 200, { status: \"ok\", version: VERSION });\n }\n\n if (url.pathname === \"/transforms\" && req.method === \"GET\") {\n const transforms = listTransforms().map(t => ({\n name: t.name,\n input_types: [...t.inputTypes],\n auto_apply: t.autoApply,\n priority: t.priority,\n mode: t.mode,\n }));\n return jsonResponse(res, 200, transforms);\n }\n\n if (url.pathname === \"/transform\" && req.method === \"POST\") {\n try {\n const body = await readBody(req);\n let data: { rows?: unknown[]; path?: string };\n try { data = JSON.parse(body); } catch { return jsonResponse(res, 400, { error: \"Invalid JSON\" }); }\n\n let rows: Record<string, unknown>[];\n if (data.path) {\n rows = readFile(sanitizePath(data.path));\n } else if (Array.isArray(data.rows)) {\n rows = data.rows as Record<string, unknown>[];\n } else {\n return jsonResponse(res, 400, { error: \"Provide 'path' or 'rows'\" });\n }\n\n const engine = new TransformEngine();\n const result = engine.transformDf(rows);\n return jsonResponse(res, 200, {\n rows: result.rows,\n manifest: {\n records: result.manifest.records,\n errors: result.manifest.errors,\n },\n });\n } catch (e) {\n return jsonResponse(res, 500, { error: e instanceof Error ? e.message : String(e) });\n }\n }\n\n jsonResponse(res, 404, { error: \"Not found\" });\n });\n}\n\nexport function runServer(port = 8000, host = \"0.0.0.0\"): void {\n const app = createApp();\n app.listen(port, host, () => {\n console.log(`GoldenFlow API server running at http://${host}:${port}`);\n });\n}\n"]}