Skip to content

0.17.0

Compare
Choose a tag to compare
@romm romm released this 08 Nov 12:30
· 217 commits to master since this release

Notable changes

The main feature introduced in this release is the split of the flexible mode in three distinct modes:

  1. The flexible casting

    Changes the behaviours explained below:

    $flexibleMapper = (new \CuyZ\Valinor\MapperBuilder())
        ->enableFlexibleCasting()
        ->mapper();
    
    // ---
    // Scalar types will accept non-strict values; for instance an
    // integer type will accept any valid numeric value like the
    // *string* "42".
    
    $flexibleMapper->map('int', '42');
    // => 42
    
    // ---
    // List type will accept non-incremental keys.
    
    $flexibleMapper->map('list<int>', ['foo' => 42, 'bar' => 1337]);
    // => [0 => 42, 1 => 1338]
    
    // ---
    // If a value is missing in a source for a node that accepts `null`,
    // the node will be filled with `null`.
    
    $flexibleMapper->map(
        'array{foo: string, bar: null|string}',
        ['foo' => 'foo'] // `bar` is missing
    );
    // => ['foo' => 'foo', 'bar' => null]
    
    // ---
    // Array and list types will convert `null` or missing values to an
    // empty array.
    
    $flexibleMapper->map(
        'array{foo: string, bar: array<string>}',
        ['foo' => 'foo'] // `bar` is missing
    );
    // => ['foo' => 'foo', 'bar' => []]
  2. The superfluous keys

    Superfluous keys in source arrays will be allowed, preventing errors when a value is not bound to any object property/parameter or shaped array element.

    (new \CuyZ\Valinor\MapperBuilder())
        ->allowSuperfluousKeys()
        ->mapper()
        ->map(
            'array{foo: string, bar: int}',
            [
                'foo' => 'foo',
                'bar' => 42,
                'baz' => 1337.404, // `baz` will be ignored
            ]
        );
  3. The permissive types

    Allows permissive types mixed and object to be used during mapping.

    (new \CuyZ\Valinor\MapperBuilder())
        ->allowPermissiveTypes()
        ->mapper()
        ->map(
            'array{foo: string, bar: mixed}',
            [
                'foo' => 'foo',
                'bar' => 42, // Could be any value
            ]
        );

Full list of changes

Features

  • Add support for strict-array type (d456eb)
  • Introduce new callback message formatter (93f898)
  • Introduce new helper class to list messages (513827)
  • Split mapper flexible mode in three distinct modes (549e5f)

Bug Fixes

  • Allow missing and null value for array node in flexible mode (034f1c)
  • Allow missing value for shaped array nullable node in flexible mode (08fb0e)
  • Handle scalar value casting in union types only in flexible mode (752ad9)

Other

  • Do not use uniqid() (b81847)
  • Transform missing source value to null in flexible mode (92a41a)