Skip to content

Commit 9852d4a

Browse files
committed
Generate endpoint methods
1 parent d4601a7 commit 9852d4a

2 files changed

Lines changed: 51 additions & 3 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{{methodName}}(
2+
{{requestFormat}}{{#if isOptionalParamsOk}}?{{/if}}: {{requestTypeName}},
3+
{{#if hasOptions}}options: {{optionsTypeName}},{{/if}}
4+
): SeamHttpRequest<{{#if returnsVoid}}void, undefined{{else}}{{responseTypeName}}, '{{responseKey}}'{{/if}}>
5+
{
6+
return new SeamHttpRequest(this, {
7+
pathname: '{{path}}',
8+
method: {{method}},
9+
{{requestFormat}},
10+
responseKey: {{#if returnsVoid}}undefined{{else}}'{{responseKey}}'{{/if}},
11+
{{#if hasOptions}}options,{{/if}}
12+
})
13+
}

codegen/lib/connect.ts

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Blueprint, Endpoint, Namespace, Route } from '@seamapi/blueprint'
2+
import type { Method } from 'axios'
23
import { camelCase, kebabCase, pascalCase } from 'change-case'
34
import type Metalsmith from 'metalsmith'
45

@@ -88,12 +89,18 @@ interface RouteLayoutContext {
8889

8990
interface EndpointLayoutContext {
9091
path: string
92+
methodName: string
93+
method: Method
94+
hasOptions: boolean
95+
responseKey: string
9196
requestFormat: 'params' | 'body'
9297
requestTypeName: string
9398
responseTypeName: string
9499
requestFormatSuffix: string
95100
optionsTypeName: string
96101
returnsActionAttempt: boolean
102+
returnsVoid: boolean
103+
isOptionalParamsOk: boolean
97104
}
98105

99106
interface SubrouteLayoutContext {
@@ -152,15 +159,43 @@ const getEndpointLayoutContext = (
152159
: 'body'
153160

154161
const requestFormatSuffix = pascalCase(requestFormat)
162+
163+
const returnsActionAttempt =
164+
endpoint.response.responseType === 'resource' &&
165+
endpoint.response.resourceType === 'action_attempt'
166+
155167
return {
156168
path: endpoint.path,
169+
methodName: camelCase(endpoint.name),
170+
method: endpoint.request.preferredMethod,
171+
hasOptions: returnsActionAttempt,
157172
requestFormat,
158173
requestFormatSuffix,
159-
returnsActionAttempt:
160-
endpoint.response.responseType === 'resource' &&
161-
endpoint.response.resourceType === 'action_attempt',
174+
returnsActionAttempt,
162175
requestTypeName: `${prefix}${requestFormatSuffix}`,
163176
responseTypeName: `${prefix}Response`,
164177
optionsTypeName: `${prefix}Options`,
178+
// UPSTREAM: Needs support in blueprint, fallback to true for now.
179+
// https://github.com/seamapi/blueprint/issues/205
180+
isOptionalParamsOk: true,
181+
...getResponseContext(endpoint),
182+
}
183+
}
184+
185+
const getResponseContext = (
186+
endpoint: Endpoint,
187+
): Pick<
188+
EndpointLayoutContext,
189+
'returnsVoid' | 'responseKey' | 'resourceType'
190+
> => {
191+
if (endpoint.response.responseType === 'void')
192+
return {
193+
returnsVoid: true,
194+
responseKey: '',
195+
}
196+
const { responseKey } = endpoint.response
197+
return {
198+
returnsVoid: false,
199+
responseKey,
165200
}
166201
}

0 commit comments

Comments
 (0)