Skip to content

Commit 8a67db5

Browse files
Merge pull request #470 from appwrite/feat-service-level-params-more-langs
Service-level params for Deno,Node,Web
2 parents 62a1b53 + 4563b71 commit 8a67db5

File tree

7 files changed

+124
-49
lines changed

7 files changed

+124
-49
lines changed

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

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,27 @@ export type UploadProgress = {
4040
}
4141

4242
export class {{ service.name | caseUcfirst }} extends Service {
43+
{% if service.globalParams | length %}
44+
{% for parameter in service.globalParams %}
45+
protected {{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }};
46+
public set{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }}): void
47+
{
48+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
49+
}
50+
public get{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }}): {{ parameter.type | typeName }}
51+
{
52+
return this.{{ parameter.name | caseCamel | escapeKeyword }};
53+
}
54+
{% endfor %}
55+
constructor(client: Client, {% for parameter in service.globalParams %} {{ parameter.name | caseCamel | escapeKeyword }}:{{ parameter.type | typeName }}{% if not parameter.required %}|null = null{% endif %}{% if not loop.last %}, {% endif %}{% endfor %})
56+
{
57+
super(client);
58+
59+
{% for parameter in service.globalParams %}
60+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
61+
{% endfor %}
62+
}
63+
{% endif %}
4364
{% for method in service.methods %}
4465
{% set generics = _self.get_generics(spec.definitions[method.responseModel], spec, true, true) %}
4566
{% set generics_return = _self.get_generics_return(spec.definitions[method.responseModel], spec) %}
@@ -50,33 +71,33 @@ export class {{ service.name | caseUcfirst }} extends Service {
5071
{{ method.description|comment1 }}
5172
*
5273
{% endif %}
53-
{% for parameter in method.parameters.all %}
74+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
5475
* @param {{ '{' }}{{ parameter.type | typeName }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
5576
{% endfor %}
5677
* @throws {AppwriteException}
5778
* @returns {Promise}
5879
*/
59-
async {{ 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 %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): Promise<{% if method.type == 'webAuth' %}Response{% elseif method.type == 'location' %}Response{% 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 %}> {
60-
{% for parameter in method.parameters.all %}
80+
async {{ method.name | caseCamel }}{% if generics %}<{{generics}}>{% endif %}({% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %}?{% endif %}: {{ parameter.type | typeName }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): Promise<{% if method.type == 'webAuth' %}Response{% elseif method.type == 'location' %}Response{% 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 %}> {
81+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
6182
{% if parameter.required %}
6283
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} === 'undefined') {
6384
throw new {{spec.title | caseUcfirst}}Exception('Missing required parameter: "{{ parameter.name | caseCamel | escapeKeyword }}"');
6485
}
6586

6687
{% endif %}
6788
{% endfor %}
68-
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
89+
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name }}{{ '}' }}', {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
6990
let payload: Payload = {};
7091

7192
{% for parameter in method.parameters.query %}
72-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
73-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" ) %}.toString(){% endif %};
93+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
94+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" ) %}.toString(){% endif %};
7495
}
7596

7697
{% endfor %}
7798
{% for parameter in method.parameters.body %}
78-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
79-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" ) %}.toString(){% endif %};
99+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
100+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" ) %}.toString(){% endif %};
80101
}
81102
{% endfor %}
82103
{% if 'multipart/form-data' in method.consumes %}

templates/node/lib/services/service.js.twig

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ const { promisify } = require('util');
77
const fs = require('fs');
88

99
class {{ service.name | caseUcfirst }} extends Service {
10+
{% if service.globalParams | length %}
11+
{% for parameter in service.globalParams %}
12+
{{ parameter.name | caseCamel | escapeKeyword }};
13+
/**
14+
* Set {{ parameter.name }}.
15+
*
16+
* @param {{ '{' }}{{ parameter.type | typeName }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
17+
*
18+
* @return void
19+
*/
20+
set{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }})
21+
{
22+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
23+
}
24+
/**
25+
* Get {{ parameter.name }}.
26+
*
27+
* @return {{ parameter.type | typeName }}
28+
*/
29+
get{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }})
30+
{
31+
return this.{{ parameter.name | caseCamel | escapeKeyword }};
32+
}
33+
{% endfor %}
34+
constructor(client, {% for parameter in service.globalParams %} {{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %} = null{% endif %}{% if not loop.last %}, {% endif %}{% endfor %})
35+
{
36+
super(client);
37+
38+
{% for parameter in service.globalParams %}
39+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
40+
{% endfor %}
41+
}
42+
{% endif %}
1043
{% for method in service.methods %}
1144

1245
/**
@@ -16,33 +49,33 @@ class {{ service.name | caseUcfirst }} extends Service {
1649
{{ method.description|comment1 }}
1750
*
1851
{% endif %}
19-
{% for parameter in method.parameters.all %}
52+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
2053
* @param {{ '{' }}{{ parameter.type | typeName }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
2154
{% endfor %}
2255
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
2356
* @returns {Promise}
2457
*/
25-
async {{ method.name | caseCamel }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = () => {}{% endif %}) {
26-
{% for parameter in method.parameters.all %}
58+
async {{ method.name | caseCamel }}({% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = () => {}{% endif %}) {
59+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
2760
{% if parameter.required %}
2861
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} === 'undefined') {
2962
throw new {{spec.title | caseUcfirst}}Exception('Missing required parameter: "{{ parameter.name | caseCamel | escapeKeyword }}"');
3063
}
3164

3265
{% endif %}
3366
{% endfor %}
34-
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
67+
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
3568
let payload = {};
3669
{% for parameter in method.parameters.query %}
3770

38-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
39-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" and parameter.type != "file" ) %}.toString(){% endif %};
71+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
72+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" and parameter.type != "file" ) %}.toString(){% endif %};
4073
}
4174
{% endfor %}
4275
{% for parameter in method.parameters.body %}
4376

44-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
45-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword}}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" and parameter.type != "file" ) %}.toString(){% endif %};
77+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
78+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword}}{% if method.consumes[0] == "multipart/form-data" and ( parameter.type != "string" and parameter.type != "array" and parameter.type != "file" ) %}.toString(){% endif %};
4679
}
4780
{% endfor %}
4881

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

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Service } from '../service';
2-
import { {{ spec.title | caseUcfirst}}Exception } from '../client';
2+
import { {{ spec.title | caseUcfirst}}Exception, Client } from '../client';
33
import type { Models } from '../models';
44
import type { UploadProgress } from '../client';
55

@@ -8,6 +8,27 @@ type Payload = {
88
}
99

1010
export class {{ service.name | caseUcfirst }} extends Service {
11+
{% if service.globalParams | length %}
12+
{% for parameter in service.globalParams %}
13+
protected {{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }};
14+
public set{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }}): void
15+
{
16+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
17+
}
18+
public get{{ parameter.name | caseUcfirst | escapeKeyword }}({{ parameter.name | caseCamel | escapeKeyword }}: {{ parameter.type | typeName }}): {{ parameter.type | typeName }}
19+
{
20+
return this.{{ parameter.name | caseCamel | escapeKeyword }};
21+
}
22+
{% endfor %}
23+
constructor(client: Client, {% for parameter in service.globalParams %} {{ parameter.name | caseCamel | escapeKeyword }}:{{ parameter.type | typeName }}{% if not parameter.required %}|null = null{% endif %}{% if not loop.last %}, {% endif %}{% endfor %})
24+
{
25+
super(client);
26+
27+
{% for parameter in service.globalParams %}
28+
this.{{ parameter.name | caseCamel | escapeKeyword }} = {{ parameter.name | caseCamel | escapeKeyword }};
29+
{% endfor %}
30+
}
31+
{% endif %}
1132
{% for method in service.methods %}
1233

1334
/**
@@ -17,34 +38,34 @@ export class {{ service.name | caseUcfirst }} extends Service {
1738
{{ method.description|comment3 }}
1839
{% endif %}
1940
*
20-
{% for parameter in method.parameters.all %}
41+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
2142
* @param {{ '{' }}{{ parameter.type | getPropertyType(method) | raw }}{{ '}' }} {{ parameter.name | caseCamel | escapeKeyword }}
2243
{% endfor %}
2344
* @throws {{ '{' }}{{ spec.title | caseUcfirst}}Exception}
2445
* @returns {% if method.type == 'webAuth' %}{void|string}{% elseif method.type == 'location' %}{URL}{% else %}{Promise}{% endif %}
2546

2647
*/
27-
{% if method.type != 'location' and method.type != 'webAuth'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %}?{% endif %}: {{ parameter.type | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }} {
28-
{% for parameter in method.parameters.all %}
48+
{% if method.type != 'location' and method.type != 'webAuth'%}async {% endif %}{{ method.name | caseCamel }}{{ method.responseModel | getGenerics(spec) | raw }}({% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}{{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %}?{% endif %}: {{ parameter.type | getPropertyType(method) | raw }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, onProgress = (progress: UploadProgress) => {}{% endif %}): {{ method | getReturn(spec) | raw }} {
49+
{% for parameter in method.parameters.all | filter((param) => not param.isGlobal) %}
2950
{% if parameter.required %}
3051
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} === 'undefined') {
3152
throw new {{spec.title | caseUcfirst}}Exception('Missing required parameter: "{{ parameter.name | caseCamel | escapeKeyword }}"');
3253
}
3354

3455
{% endif %}
3556
{% endfor %}
36-
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name | caseCamel | escapeKeyword }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
57+
let path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replace('{{ '{' }}{{ parameter.name | caseCamel | escapeKeyword }}{{ '}' }}', {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
3758
let payload: Payload = {};
3859

3960
{% for parameter in method.parameters.query %}
40-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
41-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }};
61+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
62+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }};
4263
}
4364

4465
{% endfor %}
4566
{% for parameter in method.parameters.body %}
46-
if (typeof {{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
47-
payload['{{ parameter.name }}'] = {{ parameter.name | caseCamel | escapeKeyword }};
67+
if (typeof {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }} !== 'undefined') {
68+
payload['{{ parameter.name }}'] = {% if parameter.isGlobal %}this.{% endif %}{{ parameter.name | caseCamel | escapeKeyword }};
4869
}
4970

5071
{% endfor %}

tests/languages/deno/tests.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ async function start() {
88
// Init SDK
99
let client = new appwrite.Client()
1010

11-
let foo = new appwrite.Foo(client)
11+
let foo = new appwrite.Foo(client, 'string')
1212
let bar = new appwrite.Bar(client)
1313
let general = new appwrite.General(client)
1414

@@ -18,23 +18,23 @@ async function start() {
1818

1919
// Foo
2020

21-
response = await foo.get('string', 123, ['string in array'])
21+
response = await foo.get(123, ['string in array'])
2222
// @ts-ignore
2323
console.log(response.result)
2424

25-
response = await foo.post('string', 123, ['string in array'])
25+
response = await foo.post(123, ['string in array'])
2626
// @ts-ignore
2727
console.log(response.result)
2828

29-
response = await foo.put('string', 123, ['string in array'])
29+
response = await foo.put(123, ['string in array'])
3030
// @ts-ignore
3131
console.log(response.result)
3232

33-
response = await foo.patch('string', 123, ['string in array'])
33+
response = await foo.patch(123, ['string in array'])
3434
// @ts-ignore
3535
console.log(response.result)
3636

37-
response = await foo.delete('string', 123, ['string in array'])
37+
response = await foo.delete(123, ['string in array'])
3838
// @ts-ignore
3939
console.log(response.result)
4040

tests/languages/node/test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ async function start() {
99
// Init SDK
1010
let client = new appwrite.Client();
1111

12-
let foo = new appwrite.Foo(client);
12+
let foo = new appwrite.Foo(client, 'string');
1313
let bar = new appwrite.Bar(client);
1414
let general = new appwrite.General(client);
1515

@@ -19,19 +19,19 @@ async function start() {
1919

2020
// Foo
2121

22-
response = await foo.get('string', 123, ['string in array']);
22+
response = await foo.get(123, ['string in array']);
2323
console.log(response.result);
2424

25-
response = await foo.post('string', 123, ['string in array']);
25+
response = await foo.post(123, ['string in array']);
2626
console.log(response.result);
2727

28-
response = await foo.put('string', 123, ['string in array']);
28+
response = await foo.put(123, ['string in array']);
2929
console.log(response.result);
3030

31-
response = await foo.patch('string', 123, ['string in array']);
31+
response = await foo.patch(123, ['string in array']);
3232
console.log(response.result);
3333

34-
response = await foo.delete('string', 123, ['string in array']);
34+
response = await foo.delete(123, ['string in array']);
3535
console.log(response.result);
3636

3737
// Bar

0 commit comments

Comments
 (0)