JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1711
  • Score
    100M100P100Q0F
  • License MIT

Deep-clean any API response while preserving precisely inferred recursive types—no schemas, no boilerplate.

Package Exports

  • typepurify

Readme

✨ typepurify

Deep-clean any API response while preserving precisely inferred recursive types—no schemas, no boilerplate.


npm version npm downloads License: MIT Build Status

Overview

typepurify is a lightning-fast, zero-schema data cleaner designed to deeply strip null, undefined, and optionally empty strings/arrays/objects from your data maps while keeping your TypeScript types perfectly aligned.

Instead of writing complex Zod or Joi schemas just to clean a payload, typepurify automatically re-infers your types at compile-time and safely handles nested records and array structures.

⚡ Why typepurify? (vs. Zod / Lodash)

When developers receive messy data from an API, they usually reach for tools that have major drawbacks:

Feature typepurify Zod / Joi Lodash
Package Size < 1 kB ~550 kB 🐢 ~1.4 MB 🐌
TypeScript Inference Perfect (Automatic) Requires Manual Schemas Destroys Types (any)
Boilerplate Code Zero (1 Line) High (Hundreds of lines) Medium
Execution Speed Extreme (cleanInPlace) Slow (Schema parsing) Fast
Dependencies 0 0 0

typepurify solves data cleaning perfectly. It dynamically recalculates your TypeScript interfaces at compile-time, physically removing null and undefined from the output types without writing a single schema.


🧠 How it Works

Understanding how typepurify processes your data is simple. It uses a recursive engine to traverse your nested payloads and instantly strips out unwanted, empty, or undefined values based on your configuration.

typepurify Architecture Engine

Installation

npm install typepurify
# or
yarn add typepurify
# or
pnpm add typepurify

Usage

import { clean } from 'typepurify';

const messyPayload = {
  id: 101,
  profile: {
    title: null,
    geo: 'IN',
  },
  tags: ['React', null, 'TypeScript'],
  emptyString: '',
  emptyArray: [],
};

// Standard clean (removes null and undefined natively)
const cleanPayload = clean(messyPayload);
/* Result: 
{ 
  id: 101, 
  profile: { geo: "IN" }, 
  tags: ["React", "TypeScript"], 
  emptyString: "", 
  emptyArray: [] 
} 
*/
// Note: Types are automatically inferred! `title` is instantly removed from the `profile` type at compile time.

// Aggressive clean with Options
const ultraCleanPayload = clean(messyPayload, {
  stripEmptyStrings: true,
  stripEmptyArrays: true,
});
/* Result: 
{ 
  id: 101, 
  profile: { geo: "IN" }, 
  tags: ["React", "TypeScript"] 
} 
*/

API

clean<T>(obj: T, options?: CleanOptions): DeepRequired<T>

Recursively deep-cleans null/undefined values from objects and arrays, dynamically re-inferring compile-time types without generating heavy schemas.

cleanInPlace<T>(obj: T, options?: CleanOptions): DeepRequired<T>

Operates exactly like clean(), but mutates the original payload directly instead of allocating new objects in memory. This offers maximum performance and zero memory overhead for massive data payloads.

Options:

  • stripEmptyStrings (boolean): Removes empty strings "".
  • stripEmptyArrays (boolean): Removes arrays with zero length [].
  • stripEmptyObjects (boolean): Removes objects with no keys {}.
  • trimStrings (boolean): Trims whitespace from strings before processing.
  • stripWhen (function): Custom predicate function to strip any specific value (e.g., (val) => val === 'N/A').

Contributing

Contributions, issues, and feature requests are welcome! See our Contributing Guidelines for more details.

👨💻 About the Author

Vallarasu Kanthasamy
Full-Stack & Systems Engineer

I build lightweight, high-performance developer utilities and media automation engines. My engineering focus centers on zero-dependency architecture, defensive data structures, and advanced TypeScript type systems that normalize boundaries in enterprise applications.

🌐 Digital Ecosystem & Platforms

Developer Tools & Extensions

Open Source & Resources

Connect With Me


🛡️ License

MIT © Vallarasu Kanthasamy