Skip to content

kravetsone/typescript-runtime-type-benchmarks

Β 
Β 

Repository files navigation

πŸ“Š Benchmark Comparison of Packages with Runtime Validation and TypeScript Support


⚑⚠ Benchmark results have changed after switching to isolated node processes for each benchmarked package, see #864 ⚠⚑


Benchmark Results

Fastest Packages - click to view details

click here for result details

Packages Compared

Criteria

Validation

These packages are capable of validating the data for type correctness.

E.g. if string was expected, but a number was provided, the validator should fail.

Interface

It has a validator function or method that returns a valid type casted value or throws.

const data: any = {}

// `res` is now type casted to the right type
const res = isValid(data)

Or it has a type guard function that in a truthy block type casts the value.

const data: any = {}

function isMyDataValid(data: any) {
  // isValidGuard is the type guard function provided by the package
  if (isValidGuard(data)) {
    // data here is "guarded" and therefore inferred to be of the right type
    return data
  }

  throw new Error('Invalid!')
}

// `res` is now type casted to the right type
const res = isMyDataValid(data)

Local Development

Commands

Benchmarks

  • npm run start - run benchmarks for all modules using Node.js
  • npm run start:bun - run benchmarks for all modules using bun
  • npm run start run zod myzod valita - run benchmarks only for a few selected modules

Tests

  • npm run test - run build process and tests for all modules
  • npm run test:build - run build process for all modules

Docs

  • npm run docs:serve - result viewer
  • npm run docs:build - build docs
  • npm run docs:watch - watch docs for changes and rebuild

Linting

  • npm run lint - lint all files
  • npm run lint:fix - lint all files and fix errors

Misc

  • npm run download-packages-popularity - download popularity data from npmjs.com

Debugging

Node.js

  • Use nvm to switch to a specific Node.js version
  • nvm use x - switch to Node.js x.x
  • nvm use 18 - switch to Node.js 18.x
  • nvm use 20 - switch to Node.js 20.x

Bun

  • Use curl -fsSl https://bun.sh/install | bash -s "bun-v1.0.x" to switch to a specific bun version
  • curl -fsSl https://bun.sh/install | bash -s "bun-v1.1.43" - switch to bun 1.1.43

Deno

  • Use deno upgrade x.x.x to switch to a specific Deno version
  • deno upgrade stable - switch to Deno x.x.x

Adding new runtime version

Node.js runtime

  • update Node.js version matrix in .github/workflows/pr.yml and .github/workflows/release.yml
  • update NODE_VERSIONS in docs/dist/app.tsx and run npm run docs:build
  • optionally set NODE_VERSION_FOR_PREVIEW in benchmarks/helpers/main.ts

Bun runtime

  • update bun version matrix in .github/workflows/pr.yml and .github/workflows/release.yml
  • update BUN_VERSIONS in docs/dist/app.tsx and run npm run docs:build

Deno runtime

  • update Deno version matrix in .github/workflows/pr.yml and .github/workflows/release.yml
  • update DENO_VERSIONS in docs/dist/app.tsx and run npm run docs:build

Test cases

  • Safe Parsing

    • Checks the input object against a schema and returns it.
    • Raises an error if the input object does not conform to the schema (e.g., a type mismatch or missing attribute).
    • Removes any extra keys in the input object that are not defined in the schema.
  • Strict Parsing

    • Checks the input object against a schema and returns it.
    • Raises an error if the input object does not conform to the schema (e.g., a type mismatch or missing attribute).
    • Raises an error if the input object contains extra keys.
  • Loose Assertion

    • Checks the input object against a schema.
    • Raises an exception if the input object does not match the schema.
    • Allows extra keys without raising errors.
    • Returns true if data is valid.
  • Strict Assertion

    • Checks the input object against a schema.
    • Raises an exception if the input object does not match the schema.
    • Raises an error if the input object or any nested input objects contain extra keys.
    • Returns true if data is valid.

About

πŸ“Š Benchmark Comparison of Packages with Runtime Validation and TypeScript Support

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.6%
  • Shell 1.3%
  • JavaScript 0.1%