Skip to content

Commit 8004657

Browse files
authored
Merge pull request #674 from 2002Bishwajeet/feat-whitelist-enums
feat: Enum Whitelist
2 parents c4ef17e + 453ffdb commit 8004657

File tree

47 files changed

+314
-36
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+314
-36
lines changed

example.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ function getSSLPage($url) {
3737
}
3838

3939
// Leave the platform you want uncommented
40-
$platform = 'client';
41-
// $platform = 'console';
40+
// $platform = 'client';
41+
$platform = 'console';
4242
// $platform = 'server';
4343

4444
$spec = getSSLPage("https://raw.githubusercontent.com/appwrite/appwrite/master/app/config/specs/swagger2-latest-{$platform}.json");

src/SDK/Language/Android.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,11 @@ public function getFiles(): array
387387
'destination' => 'library/src/main/java/io/appwrite/models/{{ definition.name | caseUcfirst }}.kt',
388388
'template' => '/android/library/src/main/java/io/appwrite/models/Model.kt.twig',
389389
],
390+
[
391+
'scope' => 'enum',
392+
'destination' => 'library/src/main/java/io/appwrite/enums/{{ enum.name | caseUcfirst }}.kt',
393+
'template' => '/android/library/src/main/java/io/appwrite/enums/Enum.kt.twig',
394+
],
390395
];
391396
}
392397
}

src/SDK/Language/Apple.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ public function getFiles(): array
6060
'destination' => '/Sources/{{ spec.title | caseUcfirst}}/WebSockets/WebSocketClientError.swift',
6161
'template' => '/swift/Sources/WebSockets/WebSocketClientError.swift.twig',
6262
],
63+
[
64+
'scope' => 'enum',
65+
'destination' => '/Sources/{{ spec.title | caseUcfirst}}/Enums/{{ enum.name | caseUcfirst }}.swift',
66+
'template' => '/swift/Sources/Enums/Enum.swift.twig',
67+
],
6368
// Config for project example-swiftui
6469
[
6570
'scope' => 'default',

src/SDK/Language/Dart.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,11 @@ public function getFiles(): array
466466
'destination' => 'lib/src/input_file.dart',
467467
'template' => 'dart/lib/src/input_file.dart.twig',
468468
],
469+
[
470+
'scope' => 'enum',
471+
'destination' => 'lib/src/enums/{{ enum.name | caseSnake }}.dart',
472+
'template' => 'dart/lib/src/enums/enum.dart.twig',
473+
],
469474
];
470475
}
471476

src/SDK/Language/Deno.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ public function getFiles(): array
9393
'destination' => 'docs/examples/{{service.name | caseLower}}/{{method.name | caseDash}}.md',
9494
'template' => 'deno/docs/example.md.twig',
9595
],
96+
[
97+
'scope' => 'enum',
98+
'destination' => 'src/enums/{{ enum.name | caseDash }}.ts',
99+
'template' => 'deno/src/enums/enum.ts.twig',
100+
],
96101
];
97102
}
98103

@@ -102,6 +107,10 @@ public function getFiles(): array
102107
*/
103108
public function getTypeName(array $parameter): string
104109
{
110+
if (isset($parameter['enumName'])) {
111+
return $parameter['enumName'];
112+
}
113+
105114
switch ($parameter['type']) {
106115
case self::TYPE_INTEGER:
107116
return 'number';

src/SDK/Language/DotNet.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ public function getKeywords(): array
129129
'when',
130130
'where',
131131
'while',
132-
'yield'
132+
'yield',
133+
'path'
133134
];
134135
}
135136

@@ -150,6 +151,7 @@ public function getIdentifierOverrides(): array
150151
*/
151152
public function getTypeName(array $parameter): string
152153
{
154+
153155
switch ($parameter['type']) {
154156
case self::TYPE_INTEGER:
155157
return 'long';
@@ -394,6 +396,11 @@ public function getFiles(): array
394396
'scope' => 'definition',
395397
'destination' => '/src/{{ spec.title | caseUcfirst }}/Models/{{ definition.name | caseUcfirst | overrideIdentifier }}.cs',
396398
'template' => 'dotnet/src/Appwrite/Models/Model.cs.twig',
399+
],
400+
[
401+
'scope' => 'enum',
402+
'destination' => '/src/{{ spec.title | caseUcfirst }}/Enums/{{ enum.name | caseUcfirst | overrideIdentifier }}.cs',
403+
'template' => 'dotnet/src/Appwrite/Enums/Enums.cs.twig',
397404
]
398405
];
399406
}

src/SDK/Language/Flutter.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,11 @@ public function getFiles(): array
330330
'destination' => '.travis.yml',
331331
'template' => 'flutter/.travis.yml.twig',
332332
],
333+
[
334+
'scope' => 'enum',
335+
'destination' => 'lib/src/enums/{{ enum.name | caseSnake }}.dart',
336+
'template' => 'dart/lib/src/enums/enum.dart.twig',
337+
],
333338
];
334339
}
335340
}

src/SDK/Language/JS.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ public function getKeywords(): array
105105
'while',
106106
'with',
107107
'yield',
108+
'path'
108109
];
109110
}
110111

@@ -123,6 +124,7 @@ public function getIdentifierOverrides(): array
123124
*/
124125
public function getTypeName(array $parameter): string
125126
{
127+
126128
switch ($parameter['type']) {
127129
case self::TYPE_INTEGER:
128130
case self::TYPE_NUMBER:

src/SDK/Language/Kotlin.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ public function getKeywords(): array
8686
"vararg",
8787
"when",
8888
"where",
89-
"while"
89+
"while",
90+
"path"
9091
];
9192
}
9293

@@ -104,6 +105,7 @@ public function getIdentifierOverrides(): array
104105
*/
105106
public function getTypeName(array $parameter): string
106107
{
108+
107109
switch ($parameter['type']) {
108110
case self::TYPE_INTEGER:
109111
return 'Long';
@@ -418,6 +420,11 @@ public function getFiles(): array
418420
'destination' => '/src/main/kotlin/{{ sdk.namespace | caseSlash }}/models/{{ definition.name | caseUcfirst }}.kt',
419421
'template' => '/kotlin/src/main/kotlin/io/appwrite/models/Model.kt.twig',
420422
],
423+
[
424+
'scope' => 'enum',
425+
'destination' => '/src/main/kotlin/{{ sdk.namespace | caseSlash }}/enums/{{ enum.name | caseUcfirst }}.kt',
426+
'template' => '/kotlin/src/main/kotlin/io/appwrite/enums/Enum.kt.twig',
427+
],
421428
];
422429
}
423430

src/SDK/Language/Node.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ public function getFiles(): array
126126
'destination' => '.travis.yml',
127127
'template' => 'node/.travis.yml.twig',
128128
],
129+
[
130+
'scope' => 'enum',
131+
'destination' => 'lib/enums/{{ enum.name | caseDash }}.js',
132+
'template' => 'node/lib/enums/enum.js.twig',
133+
],
129134
];
130135
}
131136

src/SDK/Language/PHP.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ public function getKeywords(): array
117117
'use',
118118
'var',
119119
'while',
120-
'xor'
120+
'xor',
121+
'path'
121122
];
122123
}
123124

@@ -211,6 +212,11 @@ public function getFiles(): array
211212
'destination' => '/src/{{ spec.title | caseUcfirst}}/Services/{{service.name | caseUcfirst}}.php',
212213
'template' => 'php/src/Services/Service.php.twig',
213214
],
215+
[
216+
'scope' => 'enum',
217+
'destination' => '/src/{{ spec.title | caseUcfirst}}/Enums/{{ enum.name | caseUcfirst }}.php',
218+
'template' => 'php/src/Enums/Enum.php.twig',
219+
],
214220
];
215221
}
216222

@@ -221,6 +227,7 @@ public function getFiles(): array
221227
*/
222228
public function getTypeName(array $parameter): string
223229
{
230+
224231
switch ($parameter['type']) {
225232
case self::TYPE_STRING:
226233
$type = 'string';

src/SDK/Language/Python.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ public function getFiles(): array
184184
'destination' => '.travis.yml',
185185
'template' => 'python/.travis.yml.twig',
186186
],
187+
[
188+
'scope' => 'enum',
189+
'destination' => '{{ spec.title | caseSnake}}/enums/{{ enum.name | caseSnake }}.py',
190+
'template' => 'python/package/enums/enum.py.twig',
191+
],
187192
];
188193
}
189194

src/SDK/Language/Ruby.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public function getKeywords(): array
7474
'until',
7575
'when',
7676
'while',
77+
'path'
7778
];
7879
}
7980

src/SDK/Language/Swift.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ public function getFiles(): array
284284
'destination' => '/Sources/{{ spec.title | caseUcfirst}}Models/{{ definition.name | caseUcfirst }}.swift',
285285
'template' => '/swift/Sources/Models/Model.swift.twig',
286286
],
287+
[
288+
'scope' => 'enum',
289+
'destination' => '/Sources/{{ spec.title | caseUcfirst}}Enums/{{ enum.name | caseUcfirst }}.swift',
290+
'template' => '/swift/Sources/Enums/Enum.swift.twig',
291+
]
287292
];
288293
}
289294

@@ -293,6 +298,10 @@ public function getFiles(): array
293298
*/
294299
public function getTypeName(array $parameter): string
295300
{
301+
if (isset($parameter['enumName'])) {
302+
return $parameter['enumName'];
303+
}
304+
296305
switch ($parameter['type']) {
297306
case self::TYPE_INTEGER:
298307
return 'Int';

src/SDK/Language/Web.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ public function getFiles(): array
115115
'destination' => '.travis.yml',
116116
'template' => 'web/.travis.yml.twig',
117117
],
118+
[
119+
'scope' => 'enum',
120+
'destination' => 'src/enums/{{ enum.name | caseDash }}.ts',
121+
'template' => 'web/src/enums/enum.ts.twig',
122+
],
118123
];
119124
}
120125

src/SDK/SDK.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ public function generate(string $target): void
556556
'params' => $this->language->getParams(),
557557
],
558558
'sdk' => $this->getParams(),
559+
'enums' => $this->spec->getEnumNames(),
559560
];
560561

561562
foreach ($this->language->getFiles() as $file) {
@@ -634,6 +635,27 @@ public function generate(string $target): void
634635
}
635636
}
636637
break;
638+
case 'enum':
639+
foreach ($this->spec->getServices() as $key => $service) {
640+
$methods = $this->spec->getMethods($key);
641+
642+
foreach ($methods as $method) {
643+
$parameters = $method['parameters']['all'];
644+
645+
foreach ($parameters as $parameter) {
646+
// Check if the enum field is defined
647+
if (isset($parameter['enumValues'])) {
648+
$params['enum'] = [
649+
'name' => $parameter['enumName'] ?? $parameter['name'],
650+
'enum' => $parameter['enumValues'],
651+
'keys' => $parameter['enumKeys'],
652+
];
653+
$this->render($template, $destination, $block, $params, $minify);
654+
}
655+
}
656+
}
657+
}
658+
break;
637659
}
638660
}
639661
}

src/Spec/Spec.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,11 @@ public function setAttribute($key, $value, $type = self::SET_TYPE_ASSIGN)
164164

165165
return $this;
166166
}
167+
168+
/**
169+
* Get EnumNames
170+
*
171+
* @return array
172+
*/
173+
abstract public function getEnumNames();
167174
}

src/Spec/Swagger2.php

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,11 @@ public function getMethods($service)
221221
}
222222

223223
$param['default'] = (is_array($param['default'])) ? json_encode($param['default']) : $param['default'];
224+
if (isset($parameter['enum'])) {
225+
$param['enumValues'] = $parameter['enum'];
226+
$param['enumName'] = $parameter['x-enum-name'];
227+
$param['enumKeys'] = $parameter['x-enum-keys'];
228+
}
224229

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

242247
foreach ($bodyProperties as $key => $value) {
243-
$param['name'] = $key;
244-
$param['type'] = $value['type'] ?? null;
245-
$param['description'] = $value['description'] ?? '';
246-
$param['required'] = (in_array($key, $bodyRequired));
247-
$param['example'] = $value['x-example'] ?? null;
248-
$param['isUploadID'] = $value['x-upload-id'] ?? false;
249-
$param['nullable'] = $value['x-nullable'] ?? false;
250-
$param['array'] = [
248+
$temp = $param;
249+
$temp['name'] = $key;
250+
$temp['type'] = $value['type'] ?? null;
251+
$temp['description'] = $value['description'] ?? '';
252+
$temp['required'] = (in_array($key, $bodyRequired));
253+
$temp['example'] = $value['x-example'] ?? null;
254+
$temp['isUploadID'] = $value['x-upload-id'] ?? false;
255+
$temp['nullable'] = $value['x-nullable'] ?? false;
256+
$temp['array'] = [
251257
'type' => $value['items']['type'] ?? '',
252258
];
253259
if ($value['type'] === 'object' && is_array($value['default'])) {
254260
$value['default'] = (empty($value['default'])) ? new stdClass() : $value['default'];
255261
}
256262

257-
$param['default'] = (is_array($value['default']) || $value['default'] instanceof stdClass) ? json_encode($value['default']) : $value['default'];
263+
if (isset($value['enum'])) {
264+
$temp['enumValues'] = $value['enum'];
265+
$temp['enumName'] = $value['x-enum-name'];
266+
$temp['enumKeys'] = $value['x-enum-keys'];
267+
}
268+
269+
$temp['default'] = (is_array($value['default']) || $value['default'] instanceof stdClass) ? json_encode($value['default']) : $value['default'];
258270

259-
$output['parameters']['body'][] = $param;
260-
$output['parameters']['all'][] = $param;
271+
$output['parameters']['body'][] = $temp;
272+
$output['parameters']['all'][] = $temp;
261273
}
262274

263275
continue 2;
@@ -341,4 +353,25 @@ public function getDefinitions()
341353
}
342354
return $list;
343355
}
356+
357+
/**
358+
* @return array
359+
*/
360+
public function getEnumNames(): array
361+
{
362+
$list = [];
363+
364+
foreach ($this->getServices() as $key => $service) {
365+
foreach ($this->getMethods($key) as $method) {
366+
if (isset($method['parameters']) && is_array($method['parameters'])) {
367+
foreach ($method['parameters']['all'] as $parameter) {
368+
if (isset($parameter['enumValues'])) {
369+
$list[] = $parameter['enumName'] ?? $parameter['name'];
370+
}
371+
}
372+
}
373+
}
374+
}
375+
return \array_values(\array_unique($list));
376+
}
344377
}

0 commit comments

Comments
 (0)