conjure-typescript
conjure-typescript copied to clipboard
Generate new result type methods for Conjure services
This PR updates the code generation to generate a new method for each service endpoint where the method returns the "declared errors" on the endpoint as a result instead of throwing them.
For example, for the following endpoint definition:
services:
FlightSearchService:
name: Flight Search Service
package: com.palantir.flightsearch
base-path: /flights
endpoints:
list:
docs: Returns flights departing from the given airport.
http: GET /list/{airport}
args:
airport: Airport
errors:
- InvalidAirport
returns: SearchResult
Conjure will now generate the following code:
...
export interface IFlightSearchService {
/** Returns flights departing from the given airport. */
list(airport: Airport): Promise<SearchResult>;
/** Returns flights departing from the given airport. */
listOrError(airport: Airport): Promise<{ status: "success", response: SearchResult } | { status: "failure", error: IInvalidAirport }>; // NEW METHOD
}
export class FlightSearchService {
constructor(private bridge: IHttpApiBridge) {
}
/** Returns flights departing from the given airport. */
public list(airport: Airport): Promise<SearchResult> {
...
}
/** Returns flights departing from the given airport. */
public listOrError(airport: Airport): Promise<{ status: "success", response: SearchResult } | { status: "failure", error: IInvalidAirport }> {
return this.list(airport)
.then(response => ({ status: "success", response }) as { status: "success", response: SearchResult })
.catch((e: any) => {
if (e == null || e.body == null) {
throw e;
}
if (e.body.errorName === "Namespace:InvalidAirport") {
return { status: "failure", error: e.body } as { status: "failure", error: IInvalidAirport };
}
throw e;
});
}
}
list(airport: Airport): Promise<SearchResult>;
listOrError(airport: Airport): Promise<{ status: "success", response: SearchResult } | { status: "failure", error: IInvalidAirport }>; // NEW METHOD
Generate changelog in changelog/@unreleased
changelog/@unreleasedWhat do the change types mean?
feature: A new feature of the service.improvement: An incremental improvement in the functionality or operation of the service.fix: Remedies the incorrect behaviour of a component of the service in a backwards-compatible way.break: Has the potential to break consumers of this service's API, inclusive of both Palantir services and external consumers of the service's API (e.g. customer-written software or integrations).deprecation: Advertises the intention to remove service functionality without any change to the operation of the service itself.manualTask: Requires the possibility of manual intervention (running a script, eyeballing configuration, performing database surgery, ...) at the time of upgrade for it to succeed.migration: A fully automatic upgrade migration task with no engineer input required.
Note: only one type should be chosen.
How are new versions calculated?
- ❗The
breakandmanual taskchangelog types will result in a major release! - 🐛 The
fixchangelog type will result in a minor release in most cases, and a patch release version for patch branches. This behaviour is configurable in autorelease. - ✨ All others will result in a minor version release.
Type
- [x] Feature
- [ ] Improvement
- [ ] Fix
- [ ] Break
- [ ] Deprecation
- [ ] Manual task
- [ ] Migration
Description
Check the box to generate changelog(s)
- [x] Generate changelog entry
Released 5.11.0