Skip to content

Commit 43902a2

Browse files
author
Crhistian Ramirez
committed
🐛 type errors when defining filters
Pretty odd bug. If filters is defined and the list doesn't take a type parameter, then filter defines the return type. Fixed this by creating an overload - one with type parameters and one without
1 parent b494669 commit 43902a2

75 files changed

Lines changed: 10636 additions & 2258 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ module.exports = {
2828
"@typescript-eslint/member-delimiter-style": "off",
2929
"@typescript-eslint/type-annotation-spacing": "off",
3030

31+
// we need in order to define overloads
32+
'no-dupe-class-members': 'off',
33+
3134
// kind of noisy and low value
3235
"@typescript-eslint/explicit-function-return-type": "off",
3336
"@typescript-eslint/no-use-before-define": "off",

codegen/hooks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ function findTypeForOperationProps(prop: Param, operation: Operation) {
125125
// we're updating the behavior of filters so that we get better type inference
126126
// instead of accepting dot-referenced xp values such as { 'xp.color': 'red' }
127127
// we will now expect { xp: { color: 'red' } }
128+
prop['isFilter'] = true
128129
prop.description =
129130
'An object whose keys match the model, and the values are the values to filter by'
130131
return `Filters<Required<T${operation.returnType}>>`

codegen/templates/api/_RESOURCE_.ts.hbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ class {{resource.id}} {
3030
* @param requestOptions.accessToken Provide an alternative token to the one stored in the sdk instance (useful for impersonation).
3131
* @param requestOptions.cancelToken Provide an [axios cancelToken](https://github.com/axios/axios#cancellation) that can be used to cancel the request.
3232
*/
33-
public async {{name}}{{#if hasReturnType}}{{#if isList}}<T{{returnType}} extends {{returnType}}>{{else}}<T{{returnType}} extends {{returnType}}>{{/if}}{{/if}}({{#allParams}}{{#unless isQueryParam}}{{#if isBodyParam}}{{#if ../isPatch}}{{name}}: PartialDeep<{{typescriptType}}>, {{else}}{{name}}: {{typescriptType}},{{/if}}{{else}}{{name}}: {{typescriptType}}, {{/if}}{{/unless}}{{/allParams}} {{#if hasQueryParams}}listOptions: { {{#queryParams}}{{name}}?: {{typescriptType}}{{#unless @last}}, {{/unless}}{{/queryParams}} } = {}, {{/if}}requestOptions: RequestOptions = {} ): Promise<{{#if hasReturnType}}RequiredDeep<{{#if isList}}{{#if isFacetList}}ListPageWithFacets<T{{returnType}}>{{else}}ListPage<T{{returnType}}>{{/if}}{{else}}T{{returnType}}{{/if}}>{{else}}void{{/if}}> {
33+
public async {{name}}({{#allParams}}{{#unless isQueryParam}}{{#if isBodyParam}}{{#if ../isPatch}}{{name}}: PartialDeep<{{typescriptType}}>, {{else}}{{name}}: {{typescriptType}},{{/if}}{{else}}{{name}}: {{typescriptType}}, {{/if}}{{/unless}}{{/allParams}}{{#if hasQueryParams}}listOptions?: { {{#queryParams}}{{#unless isFilter}}{{name}}?: {{typescriptType}}{{/unless}}{{#if isFilter}}filters?: Filters<Required<{{../returnType}}>>{{/if}}{{#unless @last}}, {{/unless}}{{/queryParams}} }, {{/if}}requestOptions?: RequestOptions ): Promise<{{#if hasReturnType}}RequiredDeep<{{#if isList}}{{#if isFacetList}}ListPageWithFacets<{{returnType}}>{{else}}ListPage<{{returnType}}>{{/if}}{{else}}{{returnType}}{{/if}}>{{else}}void{{/if}}>;
34+
public async {{name}}{{#if hasReturnType}}{{#if isList}}<T{{returnType}} extends {{returnType}}>{{else}}<T{{returnType}} extends {{returnType}}>{{/if}}{{/if}}({{#allParams}}{{#unless isQueryParam}}{{#if isBodyParam}}{{#if ../isPatch}}{{name}}: PartialDeep<{{typescriptType}}>, {{else}}{{name}}: {{typescriptType}},{{/if}}{{else}}{{name}}: {{typescriptType}}, {{/if}}{{/unless}}{{/allParams}}{{#if hasQueryParams}}listOptions?: { {{#queryParams}}{{#unless isFilter}}{{name}}?: {{typescriptType}}{{/unless}}{{#if isFilter}}filters?: Filters<Required<T{{../returnType}}>>{{/if}}{{#unless @last}}, {{/unless}}{{/queryParams}} }, {{/if}}requestOptions?: RequestOptions ): Promise<{{#if hasReturnType}}RequiredDeep<{{#if isList}}{{#if isFacetList}}ListPageWithFacets<T{{returnType}}>{{else}}ListPage<T{{returnType}}>{{/if}}{{else}}T{{returnType}}{{/if}}>{{else}}void{{/if}}>;
35+
public async {{name}}{{#if hasReturnType}}{{#if isList}}<T{{returnType}} extends {{returnType}}>{{else}}<T{{returnType}} extends {{returnType}}>{{/if}}{{/if}}({{#allParams}}{{#unless isQueryParam}}{{#if isBodyParam}}{{#if ../isPatch}}{{name}}: PartialDeep<{{typescriptType}}>, {{else}}{{name}}: {{typescriptType}},{{/if}}{{else}}{{name}}: {{typescriptType}}, {{/if}}{{/unless}}{{/allParams}}{{#if hasQueryParams}}listOptions: { {{#queryParams}}{{#unless isFilter}}{{name}}?: {{typescriptType}}{{/unless}}{{#if isFilter}}filters?: Filters<Required<T{{../returnType}}>>{{/if}}{{#unless @last}}, {{/unless}}{{/queryParams}} } = {}, {{/if}}requestOptions: RequestOptions = {} ): Promise<{{#if hasReturnType}}RequiredDeep<{{#if isList}}{{#if isFacetList}}ListPageWithFacets<T{{returnType}}>{{else}}ListPage<T{{returnType}}>{{/if}}{{else}}T{{returnType}}{{/if}}>{{else}}void{{/if}}>{
3436
const impersonating = this.impersonating;
3537
this.impersonating = false;
3638
return await http.{{verb}}(`{{parameterizePath path}}`, { ...requestOptions, {{#if hasBodyParam}}data: {{bodyParam.name}}, {{/if}}impersonating, params: { {{#if hasQueryParams}}...listOptions, {{/if}} {{#if hasFilters}}filters: listOptions.filters, {{/if}} } } )

0 commit comments

Comments
 (0)