Skip to content

Releases: nvie/decoders

v2.5.0

18 Sep 19:52
Compare
Choose a tag to compare

New decoders:

Other:

  • Officially drop Node 16 support (it may still work)

v2.4.2

30 Jun 11:10
Compare
Choose a tag to compare
  • Fix a regression in taggedUnion (thanks for reporting, @programever)
  • Upgrade all dependencies

v2.4.0

21 Jan 19:43
Compare
Choose a tag to compare

New features

  • A new .pipe() method on Decoder allows you to pass the output of one decoder into another:
    string
      .transform((s) => s.split(',')) // transform first...
      .pipe(array(nonEmptyString)); //   ...then validate that result
    This was previously possible already with .then, but it wasn't as elegant to express.
  • The new .pipe() can also dynamically select another decoder, based on the input:
    string
      .transform((s) => s.split(',').map(Number)) // transform first...
      .pipe((tup) =>
        tup.length === 2
          ? point2d
          : tup.length === 3
            ? point3d
            : never('Invalid coordinate'),
      );
  • Decoder error messages will now quote identifiers using single quotes, which makes them more human-readable in JSON responses. Compare:
    "Value at key \"foo\": Must be \"bar\", \"qux\""  // ❌ Previously
    "Value at key 'foo': Must be 'bar', 'qux'"        // ✅ Now
    
  • Some runtime perf optimizations

New decoders

Removed decoders

  • Remove numericBoolean decoder, which was deprecated since 2.3.0.

v2.3.0

09 Jan 07:55
Compare
Choose a tag to compare

New features:

  • All enum types are now supported (docs)
  • Record decoder now supports both record(values) and record(keys, values) forms (docs)
  • Add datelike decoder (docs)
  • Add support for bigint (docs)
  • Add built-in support for common string validations
  • Better support for symbols in constant() and oneOf()

New decoders:

Renamed decoders:

Some decoders have been renamed because their names were based on Flowisms. Names have been updated to better reflect TypeScript terminology:

  • dict()record()
  • maybe()nullish()
  • set()setFromArray() (to make room for a better set() decoder in a future
    version)

Deprecated decoders:

The following decoders are deprecated because they were not commonly used, and a bit too specific to be in the standard library. They are also scheduled for removal in a future decoders version.

  • dict() (prefer record())
  • hardcoded() (prefer always())
  • maybe() (prefer nullish())
  • mixed (prefer unknown)
  • numericBoolean()

Other changes:

  • Fix: positiveNumber and positiveInteger no longer accept -0 as valid inputs
  • Fix: either return type would sometimes get inferred incorrectly if members partially overlapped (see #941)
  • Reorganized internal module structure
  • Simplified some of the more complicated internal types

v2.2.0

02 Jan 12:35
Compare
Choose a tag to compare

Breaking change: Dropped Flow support1.

Breaking change: Projects that are not yet using strict: true in their tsconfig.json files files are no longer supported. Previously, decoders went to great lenghts to support both configurations, but the internal typing magic was getting too complex to maintain without much benefit.

Breaking change: A small breaking change is introduced that removes the need for some packaging workarounds to support projects using old TypeScript/Node versions. It’s now simpler to use, and simpler to maintain:

-import { formatInline, formatShort } from 'decoders/format'; // ❌
+import { formatInline, formatShort } from 'decoders'; // ✅
-import { Result, ok, err } from 'decoders/result'; // ❌
+import { Result, ok, err } from 'decoders'; // ✅

Other, smaller changes, mostly internal:

  • Rewritten source code in TypeScript (previously Flow)
  • Rewritten test suite in Vitest (previously Jest)
  • Modern ESM and CJS dual exports (fully tree-shakable when using ESM)
  • Further reduced bundle size
  • Related, greatly simplified complex internal typing magic to make it work in projects with and without strict mode.
  1. I'm still open to bundling Flow types within this package, but only if that can be supported in a maintenance-free way, for example by using a script that will generate *.flow files from TypeScript source files. If someone can add support for that, I'm open to pull requests! 🙏 )

v2.1.0

04 Dec 14:39
Compare
Choose a tag to compare
  • Officially drop Node 12 and 14 support (they may still work)
  • Fix unintentional inclusion of lib.dom.d.ts in TypeScript

v2.0.5

21 Sep 08:35
Compare
Choose a tag to compare
  • The returned value for positiveInteger(-0) is now 0, not -0
  • The returned value for positiveNumber(-0) is now 0, not -0

Thanks, @gcampax!

v2.0.4

27 Jun 21:50
Compare
Choose a tag to compare

Fix a bug in the url decoder, which could incorrectly reject URLs with a / in the query path. Thanks, @gcampax!

v2.0.3

24 Feb 08:42
Compare
Choose a tag to compare
  • Fix bundling issue where TypeScript types would not get picked up correctly in old TypeScript versions. Thanks, @robinchow!

  • Fix TypeScript types for Result type to allow implicit-undefineds.

v2.0.2

16 Jan 11:56
Compare
Choose a tag to compare
  • Fix TypeScript types for formatShort and formatInline helper functions