Skip to content

Commit 4dd8e9d

Browse files
authored
Merge pull request #1653 from appwrite/fix-cli-console-sdk-pin
fix: pin CLI template @appwrite.io/console to 15.3.0 and dedupe generated query flags
2 parents c0bde79 + 6a641e8 commit 4dd8e9d

8 files changed

Lines changed: 34 additions & 29 deletions

File tree

src/SDK/Language/CLI.php

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
class CLI extends Node
1010
{
11+
private const array QUERY_FLAG_PARAMS = [
12+
'filtering' => ['filter', 'where', 'sortAsc', 'sortDesc', 'cursorAfter', 'cursorBefore'],
13+
'pagination' => ['limit', 'offset'],
14+
'select' => ['select'],
15+
];
16+
1117
/**
1218
* List of functions to ignore for console preview.
1319
*/
@@ -230,32 +236,31 @@ private function getCliQueryConfig(array $method): array
230236
{
231237
$hasQueries = $this->hasArrayQueriesParameter($method);
232238
$methodName = $method['name'] ?? '';
239+
$parameterNames = array_map(
240+
fn (array $parameter): string => $parameter['name'] ?? '',
241+
$method['parameters']['all'] ?? []
242+
);
243+
$collides = fn (string $group): bool => array_intersect(self::QUERY_FLAG_PARAMS[$group], $parameterNames) !== [];
233244
$hasOnlyLimitOffsetQueries = $hasQueries && $this->hasOnlyLimitOffsetQueries($method);
234-
$hasSelectQueries = $hasQueries && in_array($methodName, ['listDocuments', 'getDocument', 'listRows', 'getRow'], true);
245+
$hasSelectQueries = $hasQueries && in_array($methodName, ['listDocuments', 'getDocument', 'listRows', 'getRow'], true) && !$collides('select');
235246
$hasSelectionOnlyQueries = $hasQueries && in_array($methodName, ['getDocument', 'getRow'], true);
236-
$hasFilteringQueries = $hasQueries && !$hasOnlyLimitOffsetQueries && !$hasSelectionOnlyQueries;
237-
$hasPaginationQueries = $hasQueries && !$hasSelectionOnlyQueries;
247+
$hasFilteringQueries = $hasQueries && !$hasOnlyLimitOffsetQueries && !$hasSelectionOnlyQueries && !$collides('filtering');
248+
$hasPaginationQueries = $hasQueries && !$hasSelectionOnlyQueries && !$collides('pagination');
238249

239250
$builderParams = [];
240251
if ($hasQueries) {
241252
$builderParams[] = 'queries';
242253

243254
if ($hasFilteringQueries) {
244-
$builderParams[] = 'filter';
245-
$builderParams[] = 'where';
246-
$builderParams[] = 'sortAsc';
247-
$builderParams[] = 'sortDesc';
248-
$builderParams[] = 'cursorAfter';
249-
$builderParams[] = 'cursorBefore';
255+
$builderParams = array_merge($builderParams, self::QUERY_FLAG_PARAMS['filtering']);
250256
}
251257

252258
if ($hasPaginationQueries) {
253-
$builderParams[] = 'limit';
254-
$builderParams[] = 'offset';
259+
$builderParams = array_merge($builderParams, self::QUERY_FLAG_PARAMS['pagination']);
255260
}
256261

257262
if ($hasSelectQueries) {
258-
$builderParams[] = 'select';
263+
$builderParams = array_merge($builderParams, self::QUERY_FLAG_PARAMS['select']);
259264
}
260265
}
261266

templates/cli/bun.lock.twig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"": {
66
"name": "{{ language.params.npmPackage|caseDash }}",
77
"dependencies": {
8-
"@appwrite.io/console": "^15.1.1",
8+
"@appwrite.io/console": "15.3.0",
99
"@napi-rs/keyring": "^1.3.0",
1010
"chalk": "4.1.2",
1111
"chokidar": "^3.6.0",
@@ -52,7 +52,7 @@
5252
"tmp": "^0.2.6",
5353
},
5454
"packages": {
55-
"@appwrite.io/console": ["@appwrite.io/console@15.2.0", "", { "dependencies": { "json-bigint": "1.0.0" } }, "sha512-tBDEipq5ZE4ubV5Pisj6LvVCgiRBUPAiaEAIYMKG3CiLFAL1Y0aEibx90w3WN+J1/Set+NrteSuBeIQoKcv7tQ=="],
55+
"@appwrite.io/console": ["@appwrite.io/console@15.3.0", "", { "dependencies": { "json-bigint": "1.0.0" } }, "sha512-YzWCyJGI8EZv+1Lk6uBJCI+BPALK9A8W362pffw7ljM116Jk/etw5K1gNXWIkKn5XrcAtaWk4AXsap2d/w00EA=="],
5656

5757
"@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
5858

@@ -624,7 +624,7 @@
624624

625625
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
626626

627-
"prettier": ["prettier@3.9.4", "", { "bin": "bin/prettier.cjs" }, "sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg=="],
627+
"prettier": ["prettier@3.9.5", "", { "bin": "bin/prettier.cjs" }, "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg=="],
628628

629629
"process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="],
630630

templates/cli/package-lock.json.twig

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

templates/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"windows-arm64": "esbuild cli.ts --bundle --loader:.hbs=text --platform=node --target=node18 --format=esm --external:fsevents --external:terminal-image --outfile=dist/bundle-win-arm64.mjs && pkg dist/bundle-win-arm64.mjs --fallback-to-source -t node18-win-arm64 -o build/appwrite-cli-win-arm64.exe"
4949
},
5050
"dependencies": {
51-
"@appwrite.io/console": "^15.1.1",
51+
"@appwrite.io/console": "15.3.0",
5252
"@napi-rs/keyring": "^1.3.0",
5353
"chalk": "4.1.2",
5454
"chokidar": "^3.6.0",

templates/cli/package.json.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"windows-arm64": "bun build cli.ts --compile --minify --target=bun-windows-arm64 --outfile build/appwrite-cli-win-arm64.exe"
5252
},
5353
"dependencies": {
54-
"@appwrite.io/console": "^15.1.1",
54+
"@appwrite.io/console": "15.3.0",
5555
"@napi-rs/keyring": "^1.3.0",
5656
"chalk": "4.1.2",
5757
"chokidar": "^3.6.0",

templates/dart/test/src/models/model_test.dart.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{% macro sub_schema(definitions, property) %}{% if property.sub_schema %}{% if property.type == 'array' %}List<{{property.sub_schema | caseUcfirst | overrideIdentifier}}>{% else %}{{property.sub_schema | caseUcfirst | overrideIdentifier }}(
22
{% if definitions[property.sub_schema] %}{% for property in definitions[property.sub_schema].properties | filter(p => p.required) %}
3-
{{ property.name | escapeKeyword }}: {% if property.type == 'array' %}[]{% elseif property.type == 'object' and (property.sub_schema == 'prefs' or property.sub_schema == 'preferences') %}Preferences(data: {}){% elseif property.type == 'object' and property.sub_schema %}{{_self.sub_schema(definitions, property)}}{% elseif property.type == 'string' %}'{{property['x-example'] | escapeDollarSign}}'{% elseif property.type == 'boolean' %}true{% else %}{{property['x-example']}}{% endif %},
3+
{{ property.name | escapeKeyword }}: {% if property.type == 'array' %}[]{% elseif property.type == 'object' and (property.sub_schema == 'prefs' or property.sub_schema == 'preferences') %}Preferences(data: {}){% elseif property.type == 'object' and property.sub_schema %}{{_self.sub_schema(definitions, property)}}{% elseif property.enum %}{{ property.enumName | caseUcfirst }}.{{ (property.enumKeys[0] ?? property.enum[0]) | caseEnumKey }}{% elseif property.type == 'string' %}'{{property['x-example'] | escapeDollarSign}}'{% elseif property.type == 'boolean' %}true{% else %}{{property['x-example']}}{% endif %},
44
{% endfor %}{% endif %}){% endif %}{% else %}{% if property.type == 'object' and property.additionalProperties %}Map<String, dynamic>{% else %}{{property | typeName}}{% endif %}{% endif %}{% endmacro %}
55
import 'package:{{ language.params.packageName }}/models.dart';
6-
{% if definition.properties | filter(p => p.enum) | length > 0 %}
6+
{% if (definition.properties | filter(p => p.enum) | length > 0) or (definition.properties | filter(p => p.required and p.sub_schema and spec.definitions[p.sub_schema] and (spec.definitions[p.sub_schema].properties | filter(sp => sp.required and sp.enum) | length > 0)) | length > 0) %}
77
import 'package:{{ language.params.packageName }}/enums.dart';
88
{% endif %}
99
{% if 'dart' in language.params.packageName %}

templates/python/base/requests/api.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
{% set isGenericResponse = method.responseModel | hasGenericType(spec) %}
3131
{% if isGenericResponse %}
3232

33-
return {{ method.responseModel | caseUcfirst }}.with_data(response, model_type)
33+
return {% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %}.with_data(response, model_type)
3434
{% else %}
3535

3636
return self._parse_response(response, model={% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %})

templates/python/package/services/service.py.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Union[{% for responseModel in validResponseModels %}{% if not loop.first %}, {%
100100
{% elseif validResponseModels|length == 1 %}
101101
{% if (validResponseModels[0] | caseUcfirst) == (service.name | caseUcfirst) %}{{ validResponseModels[0] | caseUcfirst }}Model{% else %}{{ validResponseModels[0] | caseUcfirst }}{% endif %}
102102
{% elseif method.responseModel and method.responseModel != 'any' %}
103-
{% if isGenericResponse %}{{ method.responseModel | caseUcfirst }}[T]{% elseif (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %}
103+
{% if isGenericResponse %}{% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %}[T]{% elseif (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %}
104104
{% else %}
105105
Dict[str, Any]
106106
{% endif %}
@@ -149,7 +149,7 @@ Dict[str, Any]
149149
API response as one of the typed response models
150150
{% elseif validResponseModels|length == 1 %}{{ validResponseModels[0] | caseUcfirst }}
151151
API response as a typed Pydantic model
152-
{% elseif method.responseModel and method.responseModel != 'any' %}{% if isGenericResponse %}{{ method.responseModel | caseUcfirst }}[T]
152+
{% elseif method.responseModel and method.responseModel != 'any' %}{% if isGenericResponse %}{% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %}[T]
153153
{% else %}{{ method | getResponseType(service.name) }}
154154
{% endif %} API response as a typed Pydantic model
155155
{% else %}Dict[str, Any]

0 commit comments

Comments
 (0)