Skip to content
API/WordpressRequestStrategy

WordpressRequestStrategy

src/strategies/wordpress-request.strategy.ts6 public methodsclass

Request strategy for the WordPress REST API driver

Generates URIs in the WordPress REST API collection format:

  • Filters: field=value (collection parameters like status, author, categories); multi-value folds to a CSV (field=v1,v2, the list convention WordPress uses for ID params)
  • Sorts: orderby=field&order=asc|desc — WordPress core supports a single orderby, so only the first sort rule is emitted
  • Field selection (flat): _fields=id,title (CSV)
  • Relation embedding: _embed=author,wp:term (CSV)
  • Search: search=term
  • Pagination (page-based): page=N&per_page=M

The page / per_page / orderby / order / search and the underscore-prefixed global params (_fields, _embed) are fixed by the server and intentionally not configurable through QueryBuilderOptions; they live as private statics so they are visible in one place.

WordPress caps per_page at 100 server-side (a 400 rest_invalid_param response beyond that); the cap is endpoint policy rather than a syntax rule, so validateLimit keeps the default positive-integer check and the server stays authoritative. There is no generic comparison-operator syntax (only parameter-specific helpers like before/after for dates, which pass through addFilter), so addFilterOperator throws UnsupportedFilterOperatorError via the capability gate.

new WordpressRequestStrategy()
Property Type Description
capabilities StrategyCapabilities Filters, sorts, global search, flat field selection (select), embedding (includes) — no operator filters, no per-model fields, no embedded-column projection
assertResource(state: QueryBuilderState): void

Throw if the resource is not set on the state

Centralises the message that was previously copy-pasted across four of the five concrete strategies.

Parameter Type Description
state QueryBuilderState The current query builder state
baseUri(state: QueryBuilderState): string

Compute the base path (no query string)

Parameter Type Description
state QueryBuilderState The current query builder state

Returns — The base URI without the query separator (e.g. /users or https://api.example.com/users)

buildUri(state: QueryBuilderState, options: QueryBuilderOptions): string

Compose the full request URI from the given state

Template method: validates the resource, computes the base path, delegates the per-driver query-string segments to parts(...), and joins them with the conventional ?/& separators.

Parameter Type Description
state QueryBuilderState The current query builder state
options QueryBuilderOptions The query parameter key name configuration

Returns — The composed URI string

join(base: string, segments: string[]): string

Glue the base URI and the per-driver query-string segments

Returns the bare base when no segments were emitted (e.g. PostgREST in RANGE mode with no filters), otherwise joins with ? + &.

Parameter Type Description
base string The base URI from _baseUri
segments string[] The query-string fragments from parts(...)

Returns — The full URI

parts(state: QueryBuilderState, _options: QueryBuilderOptions): string[]

Emit WordPress-format query-string segments in canonical order: filters → orderby/order → _fields → _embed → search → page → per_page

Parameter Type Description
state QueryBuilderState The current query builder state
_options QueryBuilderOptions The query parameter key name configuration (unused; WordPress’ wire keys are fixed by the server)

Returns — Ordered query-string fragments

validateLimit(limit: number): void

Validate that a limit value is acceptable for this driver

Default policy: positive integer. Drivers that recognise a sentinel (NestJS treats -1 as “fetch all”) override this method.

Parameter Type Description
limit number The limit value to validate