Skip to content
API/ApiPlatformResponseStrategy

ApiPlatformResponseStrategy

src/strategies/api-platform-response.strategy.ts4 public methodsclass

Response strategy for the API Platform (Symfony) driver

Parses API Platform’s default Hydra/JSON-LD collection envelope:

{
"@context": "/contexts/Book",
"@type": "hydra:Collection",
"hydra:totalItems": 48,
"hydra:member": [...],
"hydra:view": {
"@id": "/books?page=3&itemsPerPage=10",
"hydra:first": "/books?page=1",
"hydra:previous": "/books?page=2",
"hydra:next": "/books?page=4",
"hydra:last": "/books?page=5"
}
}

The Hydra keys contain colons but no dots, so the inherited dot-notation resolver traverses them cleanly (hydra:view.hydra:nextresponse['hydra:view']['hydra:next']). The body names no current-page or page-size field, so both are derived from the hydra:view URLs:

  • currentPage from the page param of the view’s @id (the path option slot points there); missing view → page 1.
  • perPage from the itemsPerPage param of the view’s @id (echoed whenever the request set it — this driver’s request strategy always does), falling back to the item count of a page that has a hydra:next successor.
  • lastPage from the page param of hydra:last, falling back to ceil(total ÷ perPage); a view-less response holding the whole collection resolves to 1.

URLs are typically relative (/books?page=4) — parsing retries against a placeholder base, and the links are surfaced as-is on the collection. JSON:API and HAL serialization formats are out of scope (use the JSON:API driver for the former).

new ApiPlatformResponseStrategy()
paginate(response: RawResponse, options: ResponseOptions): PaginatedCollection<T>

Parse a Hydra collection response into a PaginatedCollection

Parameter Type Description
response RawResponse The raw API response body
options ResponseOptions The response key name configuration (dot-notation paths supported)

Returns — A typed PaginatedCollection instance

resolve(response: RawResponse, path: string): unknown

Resolve a value from a response object using a dot-notation path

Supports both flat keys ('data') and nested paths ('meta.totalItems').

Parameter Type Description
response RawResponse The raw response object
path string The dot-notation path to resolve

Returns — The resolved value, or undefined if any segment is missing

resolveFrom(response: RawResponse, options: ResponseOptions, currentPage: number, perPage?: number): number | undefined

Resolve the “from” index value

If options.from resolves to a value in the response, use it. Otherwise compute (currentPage - 1) * perPage + 1 when both are known.

Parameter Type Description
response RawResponse The raw response object
options ResponseOptions The response key name configuration
currentPage number The current page number
perPage number The number of items per page

Returns — The “from” index, or undefined when neither path nor inputs suffice

resolveTo(response: RawResponse, options: ResponseOptions, currentPage: number, perPage?: number, total?: number): number | undefined

Resolve the “to” index value

If options.to resolves to a value in the response, use it. Otherwise compute Math.min(currentPage * perPage, total) when all three are known.

Parameter Type Description
response RawResponse The raw response object
options ResponseOptions The response key name configuration
currentPage number The current page number
perPage number The number of items per page
total number The total number of items

Returns — The “to” index, or undefined when neither path nor inputs suffice