Skip to content

Commit 961352f

Browse files
committed
Fix overlaod resolution for full optional methods
1 parent 5e146bb commit 961352f

File tree

4 files changed

+10
-75
lines changed

4 files changed

+10
-75
lines changed

templates/deno/src/services/service.ts.twig

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export class {{ service.name | caseUcfirst }} extends Service {
7373
*
7474
{% endif %}
7575
{% for parameter in method.parameters.all%}
76-
* @param {{ '{' }}{{ parameter | typeName }}{{ '}' }} params.{{ parameter.name | caseCamel | escapeKeyword }}
76+
* @param {{ '{' }}{{ parameter | typeName }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
7777
{% endfor %}
7878
* @throws {AppwriteException}
7979
* @returns {Promise}
@@ -85,72 +85,7 @@ export class {{ service.name | caseUcfirst }} extends Service {
8585
{%~ endif %}
8686
{%~ endif %}
8787
*/
88-
{%~ if method.parameters.all|length > 0 %}
89-
{{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}(params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %} {% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %} }): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}>;
90-
/**
91-
{%~ if method.description %}
92-
* {{ method.description | replace({'\n': '\n * '}) | raw }}
93-
{%~ endif %}
94-
*
95-
{%~ for parameter in method.parameters.all %}
96-
* @param {{ '{' }}{{ parameter | typeName }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
97-
{%~ endfor %}
98-
* @throws {AppwriteException}
99-
* @returns {Promise}
100-
* @deprecated Flat parameter style methods will be removed in a future version.
101-
* Please use the object parameter style method instead for better developer experience.
102-
*
103-
* @example
104-
* // Old (deprecated)
105-
* {{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %}): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}>;
106-
*
107-
* // New (object based)
108-
* {{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}(params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %} {% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %} }): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}>;
109-
*/
110-
{{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {}{% endif %}): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}>;
111-
async {{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}(
112-
{% 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 | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress?: (progress: UploadProgress) => {} {% endif %} } | {{ method.parameters.all[0] | typeName }}{% if method.parameters.all|length > 1 %},
113-
...rest: [{% for parameter in method.parameters.all[1:] %}({{ parameter | typeName }})?{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %},((progress: UploadProgress) => {})?{% endif %}]{% endif %}{% endif %}
114-
115-
): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}> {
116-
{%~ if method.parameters.all|length > 0 %}
117-
let params: { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %} };
118-
{%~ if 'multipart/form-data' in method.consumes %}
119-
let onProgress: ((progress: UploadProgress) => {});
120-
{%~ endif %}
121-
122-
if (paramsOrFirst && typeof paramsOrFirst === 'object' && !Array.isArray(paramsOrFirst){% set firstParamType = method.parameters.all[0] | typeName %}{% 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 %}) {
123-
params = paramsOrFirst as { {% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %} };
124-
{%~ if 'multipart/form-data' in method.consumes %}
125-
onProgress = paramsOrFirst.onProgress as ((progress: UploadProgress) => {});
126-
{%~ endif %}
127-
} else {
128-
params = {
129-
{%~ for parameter in method.parameters.all %}
130-
{{ parameter.name | caseCamel | escapeKeyword }}: {% if loop.index0 == 0 %}paramsOrFirst{% else %}rest[{{ loop.index0 - 1 }}]{% endif %} as {{ parameter | typeName }}{% if not loop.last %},
131-
{% endif %}
132-
{%~ endfor %}
133-
134-
};
135-
{%~ if 'multipart/form-data' in method.consumes %}
136-
onProgress = rest[{{ method.parameters.all|length - 1 }}] as ((progress: UploadProgress) => {});
137-
{%~ endif %}
138-
}
139-
140-
{%~ for parameter in method.parameters.all %}
141-
const {{ parameter.name | caseCamel | escapeKeyword }} = params.{{ parameter.name | caseCamel | escapeKeyword }};
142-
{%~ endfor %}
143-
144-
{%~ else %}
145-
{%~ if 'multipart/form-data' in method.consumes %}
146-
if (typeof paramsOrFirst === 'function') {
147-
onProgress = paramsOrFirst;
148-
}
149-
{%~ endif %}
150-
{%~ endif %}
151-
{%~ else %}
15288
async {{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required or parameter.nullable %}?{% endif %}: {{ parameter | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): Promise<{% if method.type == 'webAuth' %}string{% elseif method.type == 'location' %}ArrayBuffer{% else %}{% if method.responseModel and method.responseModel != 'any' %}{% if not spec.definitions[method.responseModel].additionalProperties %}Models.{% endif %}{{method.responseModel | caseUcfirst}}{% if generics_return %}<{{generics_return}}>{% endif %}{% else %}Response{% endif %}{% endif %}> {
153-
{%~ endif %}
15489
{% for parameter in method.parameters.all %}
15590
{% if parameter.required %}
15691
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} === 'undefined') {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ export class {{ service.name | caseUcfirst }} {
7878
let onProgress: ((progress: UploadProgress) => {});
7979
{%~ endif %}
8080

81-
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 %}) {
82-
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 %} };
81+
if (!paramsOrFirst{% for parameter in method.parameters.all %}{% if parameter.required %} || false{% endif %}{% endfor %} || (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 %})) {
82+
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 %} };
8383
{%~ if 'multipart/form-data' in method.consumes %}
84-
onProgress = paramsOrFirst.onProgress as ((progress: UploadProgress) => {});
84+
onProgress = paramsOrFirst?.onProgress as ((progress: UploadProgress) => {});
8585
{%~ endif %}
8686
} else {
8787
params = {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ export class {{ service.name | caseUcfirst }} extends Service {
8383
let onProgress: ((progress: UploadProgress) => {});
8484
{%~ endif %}
8585

86-
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 %}) {
87-
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 %} };
86+
if (!paramsOrFirst{% for parameter in method.parameters.all %}{% if parameter.required %} || false{% endif %}{% endfor %} || (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 %})) {
87+
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 %} };
8888
{%~ if 'multipart/form-data' in method.consumes %}
89-
onProgress = paramsOrFirst.onProgress as ((progress: UploadProgress) => {});
89+
onProgress = paramsOrFirst?.onProgress as ((progress: UploadProgress) => {});
9090
{%~ endif %}
9191
} else {
9292
params = {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ export class {{ service.name | caseUcfirst }} {
7979
let onProgress: ((progress: UploadProgress) => {});
8080
{%~ endif %}
8181

82-
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 %}) {
83-
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 %} };
82+
if (!paramsOrFirst{% for parameter in method.parameters.all %}{% if parameter.required %} || false{% endif %}{% endfor %} || (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 %})) {
83+
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 %} };
8484
{%~ if 'multipart/form-data' in method.consumes %}
85-
onProgress = paramsOrFirst.onProgress as ((progress: UploadProgress) => {});
85+
onProgress = paramsOrFirst?.onProgress as ((progress: UploadProgress) => {});
8686
{%~ endif %}
8787
} else {
8888
params = {

0 commit comments

Comments
 (0)