Skip to content

Commit

Permalink
Upd readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii Savluk committed Sep 21, 2023
1 parent 38e8487 commit 2844c6d
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 74 deletions.
185 changes: 115 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,29 @@ composer require savks/negotiator

namespace App\Http\Mapping;

use App\Models\User;use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};use Savks\Negotiator\Support\Mapping\Mapper;
use App\Models\User;

class UserMapper extends Mapper
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Mapper,
Schema
};

use Savks\Negotiator\Support\Mapping\Mapper;

final class UserMapper extends Mapper
{
public function __construct(public readonly User $user)
{
}

public function map(): ObjectCast
public static function schema(): Cast
{
return new ObjectCast($this->user, fn (Factory $factory) => [
'id' => $factory->string('id'),
'firstName' => $factory->string('first_name'),
'lastName' => $factory->string('last_name')->nullable(),
]);
return Schema::object([
'id' => Schema::string('id'),
'firstName' => Schema::string('first_name'),
'lastName' => Schema::string('last_name')->nullable(),
], 'user');
}
}
```
Expand All @@ -56,11 +64,14 @@ class UserMapper extends Mapper
```php
<?php

use Savks\Negotiator\Support\Mapping\{ArrayValue\Item,Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

new ObjectCast($this->source, fn (Factory $factory) => [
'items' => $factory->array(
fn (Item $item) => $item->anyObject(),
Schema::object([
'items' => Schema::array(
Schema::anyObject(),
'items'
),
]);
Expand All @@ -70,10 +81,15 @@ new ObjectCast($this->source, fn (Factory $factory) => [
* `object` — об'єкт зі статичними полями. Приклад:

```php
use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};
<?php

new ObjectCast($this->source, fn (Factory $factory) => [
'field' => $factory->string('field'),
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

Schema::object([
'field' => Schema::string('field'),
]);
```

Expand All @@ -82,12 +98,14 @@ new ObjectCast($this->source, fn (Factory $factory) => [
```php
<?php

use Savks\Negotiator\Support\Mapping\{ArrayValue\Item,Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

new ObjectCast($this->source, fn (Factory $factory) => [
'items' => $factory->keyedArray(
'id',
fn (Item $item) => $item->anyObject(),
Schema::object([
'items' => Schema::keyedArray(
Schema::anyObject(),
'items'
),
]);
Expand All @@ -101,14 +119,23 @@ new ObjectCast($this->source, fn (Factory $factory) => [
```php
<?php

use App\Mapping\UserMapper;use App\Models\User;use Savks\Negotiator\Support\Mapping\{ArrayValue\Item,Casts\ObjectCast,Utils\Factory};
use App\Models\User;

new ObjectCast($this->source, fn (Factory $factory) => [
'user' => $factory->mapper(
fn (User $item): UserMapper => new UserMapper($user),
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

Schema::object([
'user' => Schema::mapper(
fn (User $user): UserMapper => new UserMapper($user),
'user'
),
]);

Schema::object([
'user' => Schema::mapper( UserMapper::class, 'user'),
]);
```

> Для правильно генерації типів, для TypeScript, у функції-резолвер мапера важливо вказувати сам мапер як тип що повертається, в іншому випадку значення набуватиму значення `any`.
Expand All @@ -118,26 +145,30 @@ new ObjectCast($this->source, fn (Factory $factory) => [
```php
<?php

use App\Models\User;use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};
use App\Models\User;

use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

new ObjectCast($this->source, fn (Factory $factory) => [
'field' => $factory
->union()
Schema::object([
'field' => Schema::union()
->variant(
fn (User $user) => $user->role === 'admin',
fn (Factory $factory) => $factory->object(fn (Factory $factory) => [
'field' => $factory->string('field'),
Schema::object([
'field' => Schema::string('field'),
])
)
->variant(
fn (User $user) => $user->role === 'guest',
fn (Factory $factory) => $factory->object(fn (Factory $factory) => [
'field' => $factory->string('field'),
Schema::object([
'field' => Schema::string('field'),
])
)
->default(
fn (Factory $factory) => $factory->object(fn (Factory $factory) => [
'field' => $factory->string('field'),
Schema::object([
'field' => Schema::string('field'),
])
),
]);
Expand All @@ -148,65 +179,79 @@ new ObjectCast($this->source, fn (Factory $factory) => [
```php
<?php

use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\Schema;

use Savks\Negotiator\Support\Mapping\Casts\{
ObjectUtils\Spread,
Cast
};

new ObjectCast($this->source, fn (Factory $factory) => [
'field' => $factory->string('field'),
Schema::object([
'field' => Schema::string('field'),

$factory->spread(
fn (Factory $factory) => [
'otherField' => $factory->string('other_field')
],
'accessor'
),
new Spread([
'otherField' => Schema::string('other_field')
], 'accessor'),
]);
```

* `intersection`використовується для вказання перетнутих типів, зазвичай використовується якщо необхідно розширити інший мареп. Приклад:
* `typedField`дозволяє вказувати поле з типізованим ключем. Приклад:

```php
<?php

use App\Models\User;use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\Schema;

new ObjectCast($this->source, fn (Factory $factory) => [
'field' => $factory->intersection(
$factory->mapper(
fn (User $user): UserMapper => new UserMapper($user),
'user'
),
$factory->object( fn (Factory $factory) => [
'otherField' => $factory->string('other_field')
], 'user' ),
),
use Savks\Negotiator\Support\Mapping\Casts\{
ObjectUtils\TypedField,
Cast
};

Schema::object([
'field' => Schema::string('field'),

new TypedField(SomeEnum::CASE, [
'otherField' => Schema::string('other_field')
]),
]);
```

* `intersection` — використовується для вказання перетнутих типів, зазвичай використовується якщо необхідно розширити інший мареп. Приклад:

```php
<?php

use Savks\Negotiator\Support\Mapping\{Casts\IntersectionCast,Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

new IntersectionCast(
new UserMapper($this->user),
new ObjectCast($this->user, fn (Factory $factory) => [
'otherField' => $factory->string('other_field')
]),
);
Schema::object([
'field' => Schema::intersection(
Schema::mapper(UserMapper::class, 'user'),

Schema::object([
'otherField' => Schema::string('other_field')
], 'user'),
),
]);
```

* `oneOfConst` — дозволяє вказати, що значення може набувати одного з типів-констант. Приклад:

```php
<?php

use App\Models\User;use Savks\Negotiator\Support\Mapping\{Casts\ObjectCast,Utils\Factory};
use Savks\Negotiator\Support\Mapping\{
Casts\Cast,
Schema
};

new ObjectCast($this->source, fn (Factory $factory) => [
'field' => $factory->oneOfConst([
$factory->constNumber(1),
$factory->constNumber(2),
$factory->constNumber(3),
Schema::object([
'field' => Schema::oneOfConst([
Schema::constNumber(1),
Schema::constNumber(2),
Schema::constNumber(3),
]),
]);
```
Expand All @@ -222,8 +267,8 @@ use App\Http\Mapping\UserMapper;
use Savks\Negotiator\Enums\RefTypes;
use Illuminate\Support\Str;

use Savks\Negotiator\Support\TypeGeneration\{
TypeScript\Generator,
use Savks\Negotiator\Support\TypeGeneration\TypeScript\{
Generator,
Target
};

Expand Down
3 changes: 1 addition & 2 deletions src/Support/TypeGeneration/TypeScript/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
};
use Savks\Negotiator\Support\TypeGeneration\{
TypeScript\TypeProcessor as TypeGenerator,
Faker,
Target
Faker
};

class Generator
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Savks\Negotiator\Support\TypeGeneration;
namespace Savks\Negotiator\Support\TypeGeneration\TypeScript;

use BackedEnum;
use Closure;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Savks\Negotiator\Support\TypeGeneration;
namespace Savks\Negotiator\Support\TypeGeneration\TypeScript;

use Closure;
use Savks\Negotiator\Support\Mapping\Mapper;
Expand Down

0 comments on commit 2844c6d

Please sign in to comment.