Skip to content

Commit 967c7b7

Browse files
committed
breaking: add URL only methods
1 parent f1f506d commit 967c7b7

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

src/SDK/Language/ReactNative.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ public function getReturn(array $method, array $spec): string
215215
if ($method['type'] === 'webAuth') {
216216
return 'void | URL';
217217
} elseif ($method['type'] === 'location') {
218-
return 'URL';
218+
return 'Promise<ArrayBuffer>';
219219
}
220220

221221
if (array_key_exists('responseModel', $method) && !empty($method['responseModel']) && $method['responseModel'] !== 'any') {

templates/react-native/src/client.ts.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ class Client {
378378
}
379379
}
380380

381-
async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}): Promise<any> {
381+
async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}, responseType = 'json'): Promise<any> {
382382
method = method.toUpperCase();
383383

384384
headers = Object.assign({}, this.headers, headers);
@@ -431,6 +431,8 @@ class Client {
431431

432432
if (response.headers.get('content-type')?.includes('application/json')) {
433433
data = await response.json();
434+
} else if (responseType === 'arrayBuffer') {
435+
data = await response.arrayBuffer();
434436
} else {
435437
data = {
436438
message: await response.text()

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

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class {{ service.name | caseUcfirst }} extends Service {
3939
* @param {{ '{' }}{{ parameter | getPropertyType(method) | raw }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
4040
{% endfor %}
4141
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
42-
* @returns {% if method.type == 'webAuth' %}{void|string}{% elseif method.type == 'location' %}{URL}{% else %}{Promise}{% endif %}
42+
* @returns {% if method.type == 'webAuth' %}{void|string}{% elseif method.type == 'location' %}{ArrayBuffer}{% else %}{Promise}{% endif %}
4343

4444
*/
4545
{% 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 }} {
@@ -83,8 +83,6 @@ export class {{ service.name | caseUcfirst }} extends Service {
8383
{% endif %}
8484
{% if method.type == 'webAuth' %}
8585
return uri;
86-
{% elseif method.type == 'location' %}
87-
return uri;
8886
{% else %}
8987
{% if 'multipart/form-data' in method.consumes %}
9088
{% for parameter in method.parameters.all %}
@@ -170,9 +168,55 @@ export class {{ service.name | caseUcfirst }} extends Service {
170168
{% for key, header in method.headers %}
171169
'{{ key }}': '{{ header }}',
172170
{% endfor %}
173-
}, payload);
171+
}, payload{% if method.type == 'location' %}, 'arrayBuffer'{% endif %});
172+
{% endif %}
174173
{% endif %}
174+
}
175+
{% endfor %}
176+
177+
{# Extra methods for just getting the URL of 'location' type methods #}
178+
{% for method in service.methods %}
179+
{% if method.type == 'location' %}
180+
181+
/**
182+
{% if method.description %}
183+
{{ method.description|comment2 }}
175184
{% endif %}
185+
*
186+
{% for parameter in method.parameters.all %}
187+
* @param {{ '{' }}{{ parameter | getPropertyType(method) | raw }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
188+
{% endfor %}
189+
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
190+
* @returns ArrayBuffer
191+
192+
*/
193+
{{ method.name | caseCamel }}URL({% 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 %}): Promise<ArrayBuffer> {
194+
const apiPath = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name | caseCamel | escapeKeyword }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
195+
const payload: Payload = {};
196+
197+
{% for parameter in method.parameters.query %}
198+
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
199+
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }};
200+
}
201+
202+
{% endfor %}
203+
{% for parameter in method.parameters.body %}
204+
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
205+
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }};
206+
}
207+
208+
{% endfor %}
209+
const uri = new URL(this.client.config.endpoint + apiPath);
210+
211+
return this.client.call('{{ method.method | caseLower }}', uri, {
212+
{% for parameter in method.parameters.header %}
213+
'{{ parameter.name | caseCamel | escapeKeyword }}': this.client.${{ parameter.name | caseCamel | escapeKeyword }},
214+
{% endfor %}
215+
{% for key, header in method.headers %}
216+
'{{ key }}': '{{ header }}',
217+
{% endfor %}
218+
}, payload);
176219
}
220+
{% endif %}
177221
{% endfor %}
178222
};

0 commit comments

Comments
 (0)