PHPackages                             maximaster/jaft - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. maximaster/jaft

ActiveLibrary[API Development](/categories/api)

maximaster/jaft
===============

league/fractal universal JSON:API transformer.

v1.0.0(1y ago)03MITPHP

Since Sep 3Pushed 1y ago2 watchersCompare

[ Source](https://github.com/maximaster/jaft)[ Packagist](https://packagist.org/packages/maximaster/jaft)[ RSS](/packages/maximaster-jaft/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (7)Versions (2)Used By (0)

maximaster/jaft
===============

[](#maximasterjaft)

Universal JSON:API [league/fractal](https://packagist.org/packages/league/fractal) transformer for your objects.

```
composer require maximaster/jaft
```

Why?
----

[](#why)

According to [league/fractal](https://packagist.org/packages/league/fractal)manual page about [Transformers](https://fractal.thephpleague.com/transformers/)you should create a transformer per object type. That's a lot of routine work.

Or just configure universal `Maximaster\Jaft\Jaft` transformer and you are ready to go.

Example
-------

[](#example)

**services.yaml**

```
services:
    Maximaster\Jaft\Contract\Mapper:
        alias: 'api_mapper'

    api_mapper:
        class: Maximaster\Jaft\Mapper\DefaultMapper
        arguments:
            - '@api_output_manager'
            - '@api_transformer'
            - '@api_naming_provider'

    api_output_manager:
        class: League\Fractal\Manager
        arguments:
            - '@api_scope_factory'
        calls:
            -   setSerializer: [ '@api_serializer' ]

    api_serializer:
        class: Maximaster\Jaft\Serializer\JsonApiSerializer
        arguments:
            - ''
            - null

    api_scope_factory:
        class: League\Fractal\ScopeFactory

    api_transformer:
        class: Maximaster\Jaft\Jaft
        arguments:
            - '@api_schema_repository'
            - '@api_data_extractor'
            - '@api_naming_provider'
            - '@api_formatter'
            - null

    api_schema_repository:
        class: Maximaster\Jaft\SchemaRepository\PropertyInfoSchemaRepository
        arguments:
            - '@api_property_info_extractor'
            - '@api_naming_provider'
            - '@api_identity_locator'
            - '@api_type_converter'
            -
                - 'Project\Process\UserManagement\Domain\ValueObject\UserTimestamp'
                - 'Project\Process\DatabaseManagement\Domain\Entry\Field\NativeValueMap'
            -
                - 'Bitrix\Main\Type\DateTime'

    api_property_info_extractor:
        class: Symfony\Component\PropertyInfo\PropertyInfoExtractor
        arguments:
            - [ '@api_static_property_lister', '@api_packed_embeddable_property_lister', '@api_default_property_lister' ]
            - [ '@api_packed_embeddable_type_extractor', '@Maximaster\Jaft\PropertyTypeExtractor\ReplacedPropertyTypeExtractor', '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ]
            - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ]
            - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ]
            - [ '@api_property_phpdoc_extractor', '@api_property_reflection_extractor' ]

    api_static_property_lister:
        class: Maximaster\Jaft\PropertyListExtractor\StaticPropertyListExtractor
        arguments:
            - Project\Process\System\Domain\ValueObject\EntityRef: ['id']
              Project\Process\System\Domain\ValueObject\LabeledEntityRef: ['id', 'label']
              Project\Process\System\Domain\Contract\Ref: ['id']

    Maximaster\Jaft\PropertyTypeExtractor\ReplacedPropertyTypeExtractor:
        arguments:
            $realExtractor: '@api_property_phpdoc_extractor'
            $map: '%orm_entity_map%'

    api_packed_embeddable_property_lister:
        class: Maximaster\Jaft\PropertyListExtractor\PackedEmbeddablePropertyListExtractor

    api_default_property_lister:
        class: Maximaster\Jaft\PropertyListExtractor\AccessorPropertyListExtractor

    api_packed_embeddable_type_extractor:
        class: Maximaster\Jaft\PropertyTypeExtractor\PackedEmbeddablePropertyTypeExtractor

    api_property_phpdoc_extractor:
        class: Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor
        arguments:
            - null
            - null
            - [ '' ]

    api_property_reflection_extractor:
        class: Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor
        arguments:
            - [ ]
            - [ '' ]

    api_naming_provider:
        class: Project\Process\System\IO\OpenApi\OpenApiNamingProvider
        arguments:
            - '@api_fcqn_naming_provider'
            - !tagged_iterator project.open_api.overlay_naming_provider

    api_fcqn_naming_provider:
        class: Maximaster\Jaft\NamingProvider\FqcnNamingProvider
        arguments:
            - '%%3$s-%%s'
            - '@api_type_case_converter'

    api_identity_locator:
        class: Project\Process\System\IO\OpenApi\IdentityLocator\EntityIdentityLocator

    api_type_converter:
        class: Maximaster\Jaft\TypeConverter\PropertyInfoTypeConverter

    api_type_case_converter:
        class: Maximaster\Jaft\CaseConverter\JawiraCaseConverter
        arguments:
            - 'pascal'
            - 'kebab'

    api_data_extractor:
        class: Maximaster\Jaft\DataExtractor\PropertyAccessorDataExtractor
        arguments:
            - '@api_schema_repository'
            - '@api_property_accessor'

    api_property_accessor:
        class: Project\Process\System\IO\OpenApi\PropertyAccessor\CacheablePropertyAccessor
        arguments:
            $realAccessor: '@api_property_accessor_worker'

    api_property_accessor_worker:
        class: Project\Process\System\IO\OpenApi\PropertyAccessor\GetterPropertyAccessor
        arguments:
            $fallback: '@api_property_accessor_fallback'

    api_property_accessor_fallback:
        class: Symfony\Component\PropertyAccess\PropertyAccessor
        arguments:
            - !php/const Symfony\Component\PropertyAccess\PropertyAccessor::MAGIC_GET
            - false
            - null
            - true
            - '@api_property_reflection_extractor'

    api_formatter:
        class: Maximaster\Jaft\ObjectFormatter\AtoaObjectFormatter
        arguments:
            - '@api_formatter_converter'

    api_formatter_converter:
        class: Maximaster\Atoa\Converter
        arguments:
            - !tagged_iterator project.open_api.formatter

    api_property_name_converter:
        class: Maximaster\Jaft\CaseConverter\JawiraCaseConverter
        arguments:
            - 'auto'
            - 'camel'
```

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance33

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

668d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ab1bbc009e4fa562e3c976d1d1be7b5a61e2199b28e43828632eb8c72f827631?d=identicon)[mlavrinenko](/maintainers/mlavrinenko)

---

Top Contributors

[![mlavrinenko](https://avatars.githubusercontent.com/u/15840214?v=4)](https://github.com/mlavrinenko "mlavrinenko (1 commits)")

### Embed Badge

![Health badge](/badges/maximaster-jaft/health.svg)

```
[![Health](https://phpackages.com/badges/maximaster-jaft/health.svg)](https://phpackages.com/packages/maximaster-jaft)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k5.9M737](/packages/sylius-sylius)[phpdocumentor/phpdocumentor

Documentation Generator for PHP

4.4k3.1M907](/packages/phpdocumentor-phpdocumentor)[driftingly/rector-laravel

Rector upgrades rules for Laravel Framework

1.2k15.4M728](/packages/driftingly-rector-laravel)[veewee/xml

XML without worries

1837.0M39](/packages/veewee-xml)[yajra/laravel-datatables-fractal

Laravel DataTables Fractal Plugin.

977.5M29](/packages/yajra-laravel-datatables-fractal)[helpscout/api

Help Scout API v2 Client

1022.4M4](/packages/helpscout-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
