Skip to content

Commit 80968a1

Browse files
committed
feat: object params in react native sdk
1 parent 0628cdb commit 80968a1

File tree

4 files changed

+67
-9
lines changed

4 files changed

+67
-9
lines changed

example.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function getSSLPage($url) {
4242
$platform = 'console';
4343
// $platform = 'server';
4444

45-
$version = '1.7.x';
45+
$version = '1.8.x';
4646
$spec = getSSLPage("https://raw.githubusercontent.com/appwrite/appwrite/{$version}/app/config/specs/swagger2-{$version}-{$platform}.json");
4747

4848
if(empty($spec)) {

templates/node/src/services/template.ts.twig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { {{ spec.title | caseUcfirst}}Exception, Client, type Payload, UploadProgress } from '../client';
22
import type { Models } from '../models';
3+
34
{% set added = [] %}
45
{% for method in service.methods %}
56
{% for parameter in method.parameters.all %}

templates/react-native/src/services/template.ts.twig

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ export class {{ service.name | caseUcfirst }} extends Service {
2828
{
2929
super(client);
3030
}
31-
{% for method in service.methods %}
31+
{%~ for method in service.methods %}
3232

3333
/**
34-
{% if method.description %}
35-
{{ method.description|comment2 }}
36-
{% endif %}
34+
{%~ if method.description %}
35+
* {{ method.description | replace({'\n': '\n * '}) | raw }}
36+
{%~ endif %}
3737
*
38-
{% for parameter in method.parameters.all %}
39-
* @param {{ '{' }}{{ parameter | getPropertyType(method) | raw }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
40-
{% endfor %}
38+
{%~ for parameter in method.parameters.all %}
39+
* @param {{ '{' }}{{ parameter | getPropertyType(method) | raw }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }} - {{ parameter.description | raw }}
40+
{%~ endfor %}
4141
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
4242
* @returns {% if method.type == 'webAuth' %}{void|string}{% elseif method.type == 'location' %}{ArrayBuffer}{% else %}{Promise}{% endif %}
4343

@@ -49,7 +49,63 @@ export class {{ service.name | caseUcfirst }} extends Service {
4949
{%~ endif %}
5050
{%~ endif %}
5151
*/
52-
{% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }} {
52+
{%~ if method.parameters.all|length > 0 %}
53+
{% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}(params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %} {% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %} }): {{ method | getReturn(spec) | raw }};
54+
/**
55+
* @deprecated Parameter-based methods will be removed in the upcoming version.
56+
* Please use the object based method instead for better developer experience.
57+
*
58+
* @example
59+
* // Old (deprecated)
60+
* {% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }};
61+
*
62+
* // New (object based)
63+
* {% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}(params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %} {% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %} }): {{ method | getReturn(spec) | raw }};
64+
*/
65+
{% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }};
66+
{% if method.type == 'upload'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}(
67+
{% if method.parameters.all|length > 0 %}paramsOrFirst{% if not method.parameters.all[0].required or method.parameters.all[0].nullable %}?{% endif %}: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {} {% endif %} } | {{ method.parameters.all[0] | getPropertyType(method) | raw }}{% if method.parameters.all|length > 1 %},
68+
...rest: [{% for parameter in method.parameters.all[1:] %}({{ parameter | getPropertyType(method) | raw }})?{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %},((progress: UploadProgress) => {})?{% endif %}]{% endif %}{% endif %}
69+
70+
): {{ method | getReturn(spec) | raw }} {
71+
{%~ if method.parameters.all|length > 0 %}
72+
let params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %} };
73+
{%~ if 'multipart/form-data' in method.consumes %}
74+
let onProgress: ((progress: UploadProgress) => {});
75+
{%~ endif %}
76+
77+
if (paramsOrFirst && typeof paramsOrFirst === 'object' && !Array.isArray(paramsOrFirst){% set firstParamType = method.parameters.all[0] | getPropertyType(method) | raw %}{% if not (firstParamType starts with 'string' or firstParamType starts with 'number' or firstParamType starts with 'boolean') %} && '{{ method.parameters.all[0].name | caseCamel | escapeKeyword }}' in paramsOrFirst{% endif %}) {
78+
params = paramsOrFirst as { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %} };
79+
{%~ if 'multipart/form-data' in method.consumes %}
80+
onProgress = paramsOrFirst.onProgress as ((progress: UploadProgress) => {});
81+
{%~ endif %}
82+
} else {
83+
params = {
84+
{%~ for parameter in method.parameters.all %}
85+
{{ parameter.name | caseCamel | escapeKeyword }}: {% if loop.index0 == 0 %}paramsOrFirst{% else %}rest[{{ loop.index0 - 1 }}]{% endif %} as {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %},
86+
{% endif %}
87+
{%~ endfor %}
88+
89+
};
90+
{%~ if 'multipart/form-data' in method.consumes %}
91+
onProgress = rest[{{ method.parameters.all|length - 1 }}] as ((progress: UploadProgress) => {});
92+
{%~ endif %}
93+
}
94+
95+
{%~ for parameter in method.parameters.all %}
96+
const {{ parameter.name | caseCamel | escapeKeyword }} = params.{{ parameter.name | caseCamel | escapeKeyword }};
97+
{%~ endfor %}
98+
99+
{%~ else %}
100+
{%~ if 'multipart/form-data' in method.consumes %}
101+
if (typeof paramsOrFirst === 'function') {
102+
onProgress = paramsOrFirst;
103+
}
104+
{%~ endif %}
105+
{%~ endif %}
106+
{%~ else %}
107+
{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }} {
108+
{%~ endif %}
53109
{% for parameter in method.parameters.all %}
54110
{% if parameter.required %}
55111
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} === 'undefined') {

templates/web/src/services/template.ts.twig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Service } from '../service';
22
import { {{ spec.title | caseUcfirst}}Exception, Client, type Payload, UploadProgress } from '../client';
33
import type { Models } from '../models';
4+
45
{% set added = [] %}
56
{% for method in service.methods %}
67
{% for parameter in method.parameters.all %}

0 commit comments

Comments
 (0)