Skip to content

Commit 6c4c3e1

Browse files
committed
add typescript convertor
1 parent 71c4416 commit 6c4c3e1

File tree

10 files changed

+57
-5
lines changed

10 files changed

+57
-5
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"google/cloud-kms": "^2.1",
2929
"ext-mongodb": "*",
3030
"ext-fileinfo": "*",
31-
"ext-pdo": "*"
31+
"ext-pdo": "*",
32+
"spatie/typescript-transformer": "^2.4"
3233
}
3334
}

src/models/authUser.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
<?php
22
namespace gcgov\framework\models;
33

4+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
5+
46
/**
57
* Class authUser
68
* Singleton to store authenticated user globally
79
* @OA\Schema()
810
*/
11+
#[TypeScript]
912
class authUser {
1013

1114
/** @OA\Property() */

src/services/mongodb/models/_meta.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,21 @@
22
namespace gcgov\framework\services\mongodb\models;
33

44
use gcgov\framework\config;
5-
use gcgov\framework\services\mongodb\attributes\visibility;
6-
use gcgov\framework\services\mongodb\tools\log;
75
use gcgov\framework\services\mongodb\attributes\label;
6+
use gcgov\framework\services\mongodb\attributes\visibility;
87
use gcgov\framework\services\mongodb\models\_meta\db;
98
use gcgov\framework\services\mongodb\models\_meta\ui;
109
use gcgov\framework\services\mongodb\models\_meta\uiField;
10+
use gcgov\framework\services\mongodb\tools\log;
1111
use gcgov\framework\services\mongodb\tools\metaAttributeCache;
1212
use gcgov\framework\services\mongodb\tools\reflectionCache;
1313
use JetBrains\PhpStorm\ArrayShape;
1414
use OpenApi\Attributes as OA;
15+
use Spatie\TypeScriptTransformer\Attributes\RecordTypeScriptType;
16+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
1517

1618
#[OA\Schema]
19+
#[TypeScript('IMeta')]
1720
class _meta
1821
extends
1922
\andrewsauder\jsonDeserialize\jsonDeserialize
@@ -24,10 +27,12 @@ class _meta
2427
public ui $ui;
2528

2629
#[OA\Property]
30+
#[RecordTypeScriptType('string', \gcgov\framework\services\mongodb\models\_meta\uiField::class)]
2731
/** @var \gcgov\framework\services\mongodb\models\_meta\uiField[] $fields */
2832
public array $fields = [];
2933

3034
#[OA\Property]
35+
#[RecordTypeScriptType('string', 'string')]
3136
/** @var string[] $labels */
3237
public array $labels;
3338

src/services/mongodb/models/_meta/db.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace gcgov\framework\services\mongodb\models\_meta;
44

55
use OpenApi\Attributes as OA;
6+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
67

78
#[OA\Schema]
9+
#[TypeScript('IMetaDb')]
810
class db
911
extends
1012
\andrewsauder\jsonDeserialize\jsonDeserialize {

src/services/mongodb/models/_meta/ui.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace gcgov\framework\services\mongodb\models\_meta;
44

55
use OpenApi\Attributes as OA;
6+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
67

78
#[OA\Schema]
9+
#[TypeScript('IMetaUi')]
810
class ui {
911

1012
#[OA\Property]

src/services/mongodb/models/_meta/uiField.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
namespace gcgov\framework\services\mongodb\models\_meta;
44

55
use OpenApi\Attributes as OA;
6+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
67

78
#[OA\Schema]
9+
#[TypeScript('IMetaUiField')]
810
class uiField
911
extends
1012
\andrewsauder\jsonDeserialize\jsonDeserialize {

src/services/mongodb/models/audit.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
use gcgov\framework\services\mongodb\updateDeleteResult;
1010
use MongoDB\BSON\ObjectId;
1111
use OpenApi\Attributes as OA;
12+
use Spatie\TypeScriptTransformer\Attributes\LiteralTypeScriptType;
13+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
1214

1315
#[OA\Schema]
16+
#[TypeScript('IAudit')]
1417
final class audit
1518
extends
1619
\gcgov\framework\services\mongodb\model {
@@ -87,6 +90,7 @@ final class audit
8790

8891
#[label( 'Data' )]
8992
#[OA\Property]
93+
#[LiteralTypeScriptType('unknown')]
9094
public mixed $data = null;
9195

9296
#[label( 'Date Time Stamp' )]

src/services/mongodb/models/auth/user.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
use gcgov\framework\exceptions\modelException;
77
use gcgov\framework\services\mongodb\attributes\label;
88
use gcgov\framework\services\mongodb\typeMapType;
9+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
910

1011
/**
1112
* Class user
1213
* @OA\Schema()
1314
*/
15+
#[TypeScript('IUser')]
1416
class user
1517
extends \gcgov\framework\services\mongodb\model
1618
implements \gcgov\framework\interfaces\auth\user {

src/services/mongodb/models/jsonPatchEmbeddable.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
namespace gcgov\framework\services\mongodb\models;
33

44
use OpenApi\Attributes as OA;
5+
use Spatie\TypeScriptTransformer\Attributes\LiteralTypeScriptType;
6+
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
57

68
#[OA\Schema]
9+
#[TypeScript('IJsonPatchEmbeddable')]
710
class jsonPatchEmbeddable extends \gcgov\framework\services\mongodb\embeddable {
811

912
#[OA\Property]
@@ -13,7 +16,8 @@ class jsonPatchEmbeddable extends \gcgov\framework\services\mongodb\embeddable {
1316
public string $path = '';
1417

1518
#[OA\Property]
16-
public $value = null;
19+
#[LiteralTypeScriptType('unknown')]
20+
public mixed $value = null;
1721

1822

1923
public function __construct() {

src/services/mongodb/tools/helpers.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
namespace gcgov\framework\services\mongodb\tools;
33

44

5+
use gcgov\framework\config;
6+
use Spatie\TypeScriptTransformer\TypeScriptTransformer;
7+
use Spatie\TypeScriptTransformer\TypeScriptTransformerConfig;
8+
use Spatie\TypeScriptTransformer\Writers\ModuleWriter;
9+
510
class helpers {
611

712
/**
@@ -50,4 +55,26 @@ public static function jsonToObject( string|\stdClass $json, $modelExceptionMess
5055
return $json;
5156
}
5257

53-
}
58+
59+
public static function convertModelsToTypescript( string $typescriptFilePathName ): bool {
60+
try {
61+
$config = TypeScriptTransformerConfig::create()
62+
// path where your PHP classes are
63+
->autoDiscoverTypes( config::getRootDir() . '\vendor\gcgov\framework\src\\' )
64+
->autoDiscoverTypes( config::getAppDir() )
65+
// list of transformers
66+
->transformers( [ \Spatie\TypeScriptTransformer\Transformers\EnumTransformer::class, \Spatie\TypeScriptTransformer\Transformers\DtoTransformer::class ] )
67+
// file where TypeScript type definitions will be written
68+
->defaultTypeReplacements( [ \DateTimeImmutable::class => 'string', \MongoDB\BSON\ObjectId::class => 'string' ] )
69+
->writer( ModuleWriter::class )
70+
->outputFile( $typescriptFilePathName );
71+
72+
TypeScriptTransformer::create( $config )->transform();
73+
return true;
74+
}
75+
catch(\Exception $e) {
76+
throw new \gcgov\framework\exceptions\modelException( 'Failed to convert', 400 );
77+
}
78+
return false;
79+
}
80+
}

0 commit comments

Comments
 (0)