Skip to content

Commit

Permalink
Merge pull request #674 from 2002Bishwajeet/feat-whitelist-enums
Browse files Browse the repository at this point in the history
feat: Enum Whitelist
  • Loading branch information
abnegate authored Aug 15, 2023
2 parents c4ef17e + 453ffdb commit 8004657
Show file tree
Hide file tree
Showing 47 changed files with 314 additions and 36 deletions.
4 changes: 2 additions & 2 deletions example.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ function getSSLPage($url) {
}

// Leave the platform you want uncommented
$platform = 'client';
// $platform = 'console';
// $platform = 'client';
$platform = 'console';
// $platform = 'server';

$spec = getSSLPage("https://raw.githubusercontent.com/appwrite/appwrite/master/app/config/specs/swagger2-latest-{$platform}.json");
Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Android.php
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,11 @@ public function getFiles(): array
'destination' => 'library/src/main/java/io/appwrite/models/{{ definition.name | caseUcfirst }}.kt',
'template' => '/android/library/src/main/java/io/appwrite/models/Model.kt.twig',
],
[
'scope' => 'enum',
'destination' => 'library/src/main/java/io/appwrite/enums/{{ enum.name | caseUcfirst }}.kt',
'template' => '/android/library/src/main/java/io/appwrite/enums/Enum.kt.twig',
],
];
}
}
5 changes: 5 additions & 0 deletions src/SDK/Language/Apple.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ public function getFiles(): array
'destination' => '/Sources/{{ spec.title | caseUcfirst}}/WebSockets/WebSocketClientError.swift',
'template' => '/swift/Sources/WebSockets/WebSocketClientError.swift.twig',
],
[
'scope' => 'enum',
'destination' => '/Sources/{{ spec.title | caseUcfirst}}/Enums/{{ enum.name | caseUcfirst }}.swift',
'template' => '/swift/Sources/Enums/Enum.swift.twig',
],
// Config for project example-swiftui
[
'scope' => 'default',
Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Dart.php
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,11 @@ public function getFiles(): array
'destination' => 'lib/src/input_file.dart',
'template' => 'dart/lib/src/input_file.dart.twig',
],
[
'scope' => 'enum',
'destination' => 'lib/src/enums/{{ enum.name | caseSnake }}.dart',
'template' => 'dart/lib/src/enums/enum.dart.twig',
],
];
}

Expand Down
9 changes: 9 additions & 0 deletions src/SDK/Language/Deno.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ public function getFiles(): array
'destination' => 'docs/examples/{{service.name | caseLower}}/{{method.name | caseDash}}.md',
'template' => 'deno/docs/example.md.twig',
],
[
'scope' => 'enum',
'destination' => 'src/enums/{{ enum.name | caseDash }}.ts',
'template' => 'deno/src/enums/enum.ts.twig',
],
];
}

Expand All @@ -102,6 +107,10 @@ public function getFiles(): array
*/
public function getTypeName(array $parameter): string
{
if (isset($parameter['enumName'])) {
return $parameter['enumName'];
}

switch ($parameter['type']) {
case self::TYPE_INTEGER:
return 'number';
Expand Down
9 changes: 8 additions & 1 deletion src/SDK/Language/DotNet.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ public function getKeywords(): array
'when',
'where',
'while',
'yield'
'yield',
'path'
];
}

Expand All @@ -150,6 +151,7 @@ public function getIdentifierOverrides(): array
*/
public function getTypeName(array $parameter): string
{

switch ($parameter['type']) {
case self::TYPE_INTEGER:
return 'long';
Expand Down Expand Up @@ -394,6 +396,11 @@ public function getFiles(): array
'scope' => 'definition',
'destination' => '/src/{{ spec.title | caseUcfirst }}/Models/{{ definition.name | caseUcfirst | overrideIdentifier }}.cs',
'template' => 'dotnet/src/Appwrite/Models/Model.cs.twig',
],
[
'scope' => 'enum',
'destination' => '/src/{{ spec.title | caseUcfirst }}/Enums/{{ enum.name | caseUcfirst | overrideIdentifier }}.cs',
'template' => 'dotnet/src/Appwrite/Enums/Enums.cs.twig',
]
];
}
Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Flutter.php
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,11 @@ public function getFiles(): array
'destination' => '.travis.yml',
'template' => 'flutter/.travis.yml.twig',
],
[
'scope' => 'enum',
'destination' => 'lib/src/enums/{{ enum.name | caseSnake }}.dart',
'template' => 'dart/lib/src/enums/enum.dart.twig',
],
];
}
}
2 changes: 2 additions & 0 deletions src/SDK/Language/JS.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public function getKeywords(): array
'while',
'with',
'yield',
'path'
];
}

Expand All @@ -123,6 +124,7 @@ public function getIdentifierOverrides(): array
*/
public function getTypeName(array $parameter): string
{

switch ($parameter['type']) {
case self::TYPE_INTEGER:
case self::TYPE_NUMBER:
Expand Down
9 changes: 8 additions & 1 deletion src/SDK/Language/Kotlin.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ public function getKeywords(): array
"vararg",
"when",
"where",
"while"
"while",
"path"
];
}

Expand All @@ -104,6 +105,7 @@ public function getIdentifierOverrides(): array
*/
public function getTypeName(array $parameter): string
{

switch ($parameter['type']) {
case self::TYPE_INTEGER:
return 'Long';
Expand Down Expand Up @@ -418,6 +420,11 @@ public function getFiles(): array
'destination' => '/src/main/kotlin/{{ sdk.namespace | caseSlash }}/models/{{ definition.name | caseUcfirst }}.kt',
'template' => '/kotlin/src/main/kotlin/io/appwrite/models/Model.kt.twig',
],
[
'scope' => 'enum',
'destination' => '/src/main/kotlin/{{ sdk.namespace | caseSlash }}/enums/{{ enum.name | caseUcfirst }}.kt',
'template' => '/kotlin/src/main/kotlin/io/appwrite/enums/Enum.kt.twig',
],
];
}

Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Node.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ public function getFiles(): array
'destination' => '.travis.yml',
'template' => 'node/.travis.yml.twig',
],
[
'scope' => 'enum',
'destination' => 'lib/enums/{{ enum.name | caseDash }}.js',
'template' => 'node/lib/enums/enum.js.twig',
],
];
}

Expand Down
9 changes: 8 additions & 1 deletion src/SDK/Language/PHP.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ public function getKeywords(): array
'use',
'var',
'while',
'xor'
'xor',
'path'
];
}

Expand Down Expand Up @@ -211,6 +212,11 @@ public function getFiles(): array
'destination' => '/src/{{ spec.title | caseUcfirst}}/Services/{{service.name | caseUcfirst}}.php',
'template' => 'php/src/Services/Service.php.twig',
],
[
'scope' => 'enum',
'destination' => '/src/{{ spec.title | caseUcfirst}}/Enums/{{ enum.name | caseUcfirst }}.php',
'template' => 'php/src/Enums/Enum.php.twig',
],
];
}

Expand All @@ -221,6 +227,7 @@ public function getFiles(): array
*/
public function getTypeName(array $parameter): string
{

switch ($parameter['type']) {
case self::TYPE_STRING:
$type = 'string';
Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Python.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,11 @@ public function getFiles(): array
'destination' => '.travis.yml',
'template' => 'python/.travis.yml.twig',
],
[
'scope' => 'enum',
'destination' => '{{ spec.title | caseSnake}}/enums/{{ enum.name | caseSnake }}.py',
'template' => 'python/package/enums/enum.py.twig',
],
];
}

Expand Down
1 change: 1 addition & 0 deletions src/SDK/Language/Ruby.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public function getKeywords(): array
'until',
'when',
'while',
'path'
];
}

Expand Down
9 changes: 9 additions & 0 deletions src/SDK/Language/Swift.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,11 @@ public function getFiles(): array
'destination' => '/Sources/{{ spec.title | caseUcfirst}}Models/{{ definition.name | caseUcfirst }}.swift',
'template' => '/swift/Sources/Models/Model.swift.twig',
],
[
'scope' => 'enum',
'destination' => '/Sources/{{ spec.title | caseUcfirst}}Enums/{{ enum.name | caseUcfirst }}.swift',
'template' => '/swift/Sources/Enums/Enum.swift.twig',
]
];
}

Expand All @@ -293,6 +298,10 @@ public function getFiles(): array
*/
public function getTypeName(array $parameter): string
{
if (isset($parameter['enumName'])) {
return $parameter['enumName'];
}

switch ($parameter['type']) {
case self::TYPE_INTEGER:
return 'Int';
Expand Down
5 changes: 5 additions & 0 deletions src/SDK/Language/Web.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,11 @@ public function getFiles(): array
'destination' => '.travis.yml',
'template' => 'web/.travis.yml.twig',
],
[
'scope' => 'enum',
'destination' => 'src/enums/{{ enum.name | caseDash }}.ts',
'template' => 'web/src/enums/enum.ts.twig',
],
];
}

Expand Down
22 changes: 22 additions & 0 deletions src/SDK/SDK.php
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ public function generate(string $target): void
'params' => $this->language->getParams(),
],
'sdk' => $this->getParams(),
'enums' => $this->spec->getEnumNames(),
];

foreach ($this->language->getFiles() as $file) {
Expand Down Expand Up @@ -634,6 +635,27 @@ public function generate(string $target): void
}
}
break;
case 'enum':
foreach ($this->spec->getServices() as $key => $service) {
$methods = $this->spec->getMethods($key);

foreach ($methods as $method) {
$parameters = $method['parameters']['all'];

foreach ($parameters as $parameter) {
// Check if the enum field is defined
if (isset($parameter['enumValues'])) {
$params['enum'] = [
'name' => $parameter['enumName'] ?? $parameter['name'],
'enum' => $parameter['enumValues'],
'keys' => $parameter['enumKeys'],
];
$this->render($template, $destination, $block, $params, $minify);
}
}
}
}
break;
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions src/Spec/Spec.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,11 @@ public function setAttribute($key, $value, $type = self::SET_TYPE_ASSIGN)

return $this;
}

/**
* Get EnumNames
*
* @return array
*/
abstract public function getEnumNames();
}
55 changes: 44 additions & 11 deletions src/Spec/Swagger2.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,11 @@ public function getMethods($service)
}

$param['default'] = (is_array($param['default'])) ? json_encode($param['default']) : $param['default'];
if (isset($parameter['enum'])) {
$param['enumValues'] = $parameter['enum'];
$param['enumName'] = $parameter['x-enum-name'];
$param['enumKeys'] = $parameter['x-enum-keys'];
}

switch ($parameter['in']) {
case 'header':
Expand All @@ -240,24 +245,31 @@ public function getMethods($service)
$bodyRequired = $parameter['schema']['required'] ?? [];

foreach ($bodyProperties as $key => $value) {
$param['name'] = $key;
$param['type'] = $value['type'] ?? null;
$param['description'] = $value['description'] ?? '';
$param['required'] = (in_array($key, $bodyRequired));
$param['example'] = $value['x-example'] ?? null;
$param['isUploadID'] = $value['x-upload-id'] ?? false;
$param['nullable'] = $value['x-nullable'] ?? false;
$param['array'] = [
$temp = $param;
$temp['name'] = $key;
$temp['type'] = $value['type'] ?? null;
$temp['description'] = $value['description'] ?? '';
$temp['required'] = (in_array($key, $bodyRequired));
$temp['example'] = $value['x-example'] ?? null;
$temp['isUploadID'] = $value['x-upload-id'] ?? false;
$temp['nullable'] = $value['x-nullable'] ?? false;
$temp['array'] = [
'type' => $value['items']['type'] ?? '',
];
if ($value['type'] === 'object' && is_array($value['default'])) {
$value['default'] = (empty($value['default'])) ? new stdClass() : $value['default'];
}

$param['default'] = (is_array($value['default']) || $value['default'] instanceof stdClass) ? json_encode($value['default']) : $value['default'];
if (isset($value['enum'])) {
$temp['enumValues'] = $value['enum'];
$temp['enumName'] = $value['x-enum-name'];
$temp['enumKeys'] = $value['x-enum-keys'];
}

$temp['default'] = (is_array($value['default']) || $value['default'] instanceof stdClass) ? json_encode($value['default']) : $value['default'];

$output['parameters']['body'][] = $param;
$output['parameters']['all'][] = $param;
$output['parameters']['body'][] = $temp;
$output['parameters']['all'][] = $temp;
}

continue 2;
Expand Down Expand Up @@ -341,4 +353,25 @@ public function getDefinitions()
}
return $list;
}

/**
* @return array
*/
public function getEnumNames(): array
{
$list = [];

foreach ($this->getServices() as $key => $service) {
foreach ($this->getMethods($key) as $method) {
if (isset($method['parameters']) && is_array($method['parameters'])) {
foreach ($method['parameters']['all'] as $parameter) {
if (isset($parameter['enumValues'])) {
$list[] = $parameter['enumName'] ?? $parameter['name'];
}
}
}
}
}
return \array_values(\array_unique($list));
}
}
Loading

0 comments on commit 8004657

Please sign in to comment.