Skip to content

Commit e3a20c9

Browse files
Merge pull request #307 from appwrite/feat-node-response-models
feat(node): response models
2 parents ba8f87c + b6626ff commit e3a20c9

File tree

1 file changed

+84
-2
lines changed

1 file changed

+84
-2
lines changed

templates/node/index.d.ts.twig

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,85 @@
1+
{% macro sub_schema(property, definition, spec) %}
2+
{% spaceless %}
3+
{% if property.sub_schema %}
4+
{% if _self.get_generics_sub(definition, spec) %}
5+
{{property.sub_schema | caseUcfirst}}<{{ _self.get_generics_sub(definition, spec) }}>{% if property.type == 'array' %}[]{% endif %}
6+
{% else %}
7+
{{property.sub_schema | caseUcfirst}}{% if property.type == 'array' %}[]{% endif %}
8+
{% endif %}
9+
{% else %}
10+
{{property.type | typeName}}
11+
{% endif %}
12+
{% endspaceless %}
13+
{% endmacro %}
14+
{% macro get_generics(definition, spec) %}
15+
{% spaceless %}
16+
{% for property in definition.properties %}
17+
{% if spec.definitions[property.sub_schema].additionalProperties %}
18+
{{property.sub_schema | caseUcfirst}} extends Models.{{property.sub_schema | caseUcfirst}}
19+
{% endif %}
20+
{% if spec.definitions[property.sub_schema] %}
21+
{{_self.get_generics(spec.definitions[property.sub_schema], spec)}}
22+
{% endif %}
23+
{% endfor %}
24+
{% endspaceless %}
25+
{% endmacro %}
26+
{% macro get_generics_sub(definition, spec, output = false) %}
27+
{% spaceless %}
28+
{% for property in definition.properties %}
29+
{% if spec.definitions[property.sub_schema].additionalProperties and output %}
30+
{{property.sub_schema | caseUcfirst}}
31+
{% endif %}
32+
{% if spec.definitions[property.sub_schema] %}
33+
{{_self.get_generics_sub(spec.definitions[property.sub_schema], spec, true)}}
34+
{% endif %}
35+
{% endfor %}
36+
{% endspaceless %}
37+
{% endmacro %}
38+
{% macro get_generics_method(definition, spec, output = false, first = false) %}
39+
{% spaceless %}
40+
{% if first and definition.additionalProperties %}
41+
{{definition.name | caseUcfirst}} extends Models.{{definition.name | caseUcfirst}}
42+
{% endif %}
43+
{% for property in definition.properties %}
44+
{% if spec.definitions[property.sub_schema].additionalProperties and output %}
45+
{{property.sub_schema | caseUcfirst}} extends Models.{{property.sub_schema | caseUcfirst}}
46+
{% endif %}
47+
{% if spec.definitions[property.sub_schema] %}
48+
{{_self.get_generics_method(spec.definitions[property.sub_schema], spec, true)}}
49+
{% endif %}
50+
{% endfor %}
51+
{% endspaceless %}
52+
{% endmacro %}
53+
{% macro get_generics_method_return(definition, spec) %}
54+
{% spaceless %}
55+
{% for property in definition.properties %}
56+
{% if spec.definitions[property.sub_schema].additionalProperties %}
57+
{{property.sub_schema | caseUcfirst}}
58+
{% endif %}
59+
{% if spec.definitions[property.sub_schema] %}
60+
{{_self.get_generics_method_return(spec.definitions[property.sub_schema], spec)}}
61+
{% endif %}
62+
{% endfor %}
63+
{% endspaceless %}
64+
{% endmacro %}
165
declare module "{{ language.params.npmPackage|caseDash }}" {
66+
export namespace Models {
67+
{% for definition in spec.definitions %}
68+
{% set generics = _self.get_generics(definition, spec) %}
69+
/**
70+
* {{ definition.description }}
71+
*/
72+
export type {{ definition.name | caseUcfirst }}{% if generics %}<{{generics}}>{% endif %} = {
73+
{% for property in definition.properties %}
74+
{% set sub_schema = _self.sub_schema(property, definition, spec)%}
75+
/**
76+
* {{ property.description }}
77+
*/
78+
{{ property.name | escapeKeyword }}{% if not property.required %}?{% endif %}: {{sub_schema}};
79+
{% endfor %}
80+
}
81+
{% endfor %}
82+
}
283
export class Client {
384
/**
485
* Set endpoint.
@@ -48,7 +129,8 @@ declare module "{{ language.params.npmPackage|caseDash }}" {
48129
{% for service in spec.services %}
49130
export class {{ service.name | caseUcfirst }} extends Service {
50131
{% for method in service.methods %}
51-
132+
{% set generics = _self.get_generics_method(spec.definitions[method.responseModel], spec, true, true) %}
133+
{% set generics_return = _self.get_generics_method_return(spec.definitions[method.responseModel], spec) %}
52134
/**
53135
* {{ method.title }}
54136
*
@@ -62,7 +144,7 @@ declare module "{{ language.params.npmPackage|caseDash }}" {
62144
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
63145
* @returns {Promise}
64146
*/
65-
{{ method.name | caseCamel }}{% if method.type != 'location' %}<T extends unknown>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel }}{% if not parameter.required %}?{% endif %}: {% if parameter.type == 'array' %}{{attribute(parameter, 'array').type}}[]{% else %}{{ parameter.type | typeName }}{% endif %}{% if not loop.last %}, {% endif %}{% endfor %}): Promise<{% if method.type == 'location' %}Buffer{% else %}T{% endif %}>;
147+
{{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %}?{% endif %}: {{ parameter.type | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}): Promise<{% if method.type == 'location' %}Buffer{% 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 %}>;
66148
{% endfor %}
67149
}
68150
{% endfor %}

0 commit comments

Comments
 (0)