conjure-typescript icon indicating copy to clipboard operation
conjure-typescript copied to clipboard

Generate new result type methods for Conjure services

Open samialfhaily opened this issue 11 months ago • 1 comments

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

samialfhaily avatar Dec 17 '24 17:12 samialfhaily

Generate changelog in changelog/@unreleased

What 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 break and manual task changelog types will result in a major release!
  • 🐛 The fix changelog 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 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

Check the box to generate changelog(s)

  • [x] Generate changelog entry

changelog-app[bot] avatar Dec 17 '24 17:12 changelog-app[bot]

Released 5.11.0

autorelease3[bot] avatar Apr 08 '25 10:04 autorelease3[bot]