Skip to content

Commit 28bc3a2

Browse files
authored
Merge pull request appwrite#1117 from appwrite/fix-document-typing
fix: update document type handling and improve generics in TS
2 parents ef5e9d9 + 993b2f2 commit 28bc3a2

File tree

5 files changed

+27
-7
lines changed

5 files changed

+27
-7
lines changed

src/SDK/Language/Node.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ public function getTypeName(array $parameter, array $method = []): string
5757
return "Partial<Preferences>";
5858
case 'document':
5959
if ($method['method'] === 'post') {
60-
return "Omit<Document, keyof Models.Document>";
60+
return "Document extends Models.DefaultDocument ? Models.DataWithoutDocumentKeys : Omit<Document, keyof Models.Document>";
6161
}
6262
if ($method['method'] === 'patch') {
63-
return "Partial<Omit<Document, keyof Models.Document>>";
63+
return "Partial<Document extends Models.DefaultDocument ? Models.DataWithoutDocumentKeys : Omit<Document, keyof Models.Document>>";
6464
}
6565
}
6666
break;

src/SDK/Language/Web.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,10 @@ public function getTypeName(array $parameter, array $method = []): string
222222
return "Partial<Preferences>";
223223
case 'document':
224224
if ($method['method'] === 'post') {
225-
return "Omit<Document, keyof Models.Document>";
225+
return "Document extends Models.DefaultDocument ? Models.DataWithoutDocumentKeys : Omit<Document, keyof Models.Document>";
226226
}
227227
if ($method['method'] === 'patch') {
228-
return "Partial<Omit<Document, keyof Models.Document>>";
228+
return "Partial<Document extends Models.DefaultDocument ? Models.DataWithoutDocumentKeys : Omit<Document, keyof Models.Document>>";
229229
}
230230
}
231231
break;
@@ -261,7 +261,7 @@ public function getGenerics(string $model, array $spec, bool $skipFirst = false)
261261
}
262262

263263
$generics = array_unique($generics);
264-
$generics = array_map(fn ($type) => "{$type} extends Models.{$type}", $generics);
264+
$generics = array_map(fn ($type) => "{$type} extends Models.{$type} = Models.Default{$type}", $generics);
265265

266266
return '<' . implode(', ', $generics) . '>';
267267
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,5 +94,8 @@ export class {{ service.name | caseUcfirst }} {
9494
);
9595
{%~ endif %}
9696
}
97+
{%~ if not loop.last %}
98+
99+
{%~ endif %}
97100
{%~ endfor %}
98101
}

templates/web/src/models.ts.twig

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
* {{spec.title | caseUcfirst}} Models
33
*/
44
export namespace Models {
5+
6+
declare const __default: unique symbol;
57
{% for definition in spec.definitions %}
8+
69
/**
710
* {{ definition.description }}
811
*/
@@ -13,8 +16,19 @@ export namespace Models {
1316
*/
1417
{{ property.name }}{% if not property.required %}?{% endif %}: {{ property | getSubSchema(spec) | raw }};
1518
{% endfor %}
16-
{% if definition.additionalProperties %} [key: string]: any;
17-
{% endif %}
1819
}
20+
{% if definition.additionalProperties %}
21+
22+
export type Default{{ definition.name | caseUcfirst }}{{ definition.name | getGenerics(spec, true) | raw }} = {{ definition.name | caseUcfirst }}{{ definition.name | getGenerics(spec, true) | raw }} & {
23+
[key: string]: any;
24+
[__default]: true;
25+
};
26+
27+
export type DataWithout{{ definition.name | caseUcfirst }}Keys{{ definition.name | getGenerics(spec, true) | raw }} = {
28+
[K in string]: any;
29+
} & {
30+
[K in keyof {{ definition.name | caseUcfirst }}{{ definition.name | getGenerics(spec, true) | raw }}]?: never;
31+
};
32+
{% endif %}
1933
{% endfor %}
2034
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,8 @@ export class {{ service.name | caseUcfirst }} {
108108
);
109109
{%~ endif %}
110110
}
111+
{%~ if not loop.last %}
112+
113+
{%~ endif %}
111114
{%~ endfor %}
112115
}

0 commit comments

Comments
 (0)