Skip to content

Upcoming Release Changes - #4080

Merged
ardatan merged 1 commit into
masterfrom
changeset-release/master
Aug 12, 2026
Merged

Upcoming Release Changes#4080
ardatan merged 1 commit into
masterfrom
changeset-release/master

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated.

Releases

fets@0.8.9

Patch Changes

  • #4078
    e3be332
    Thanks @ardatan! - Fix TS2615 circular reference errors for OpenAPI
    schemas that use anyOf / oneOf with recursive $refs

    Schemas that model recursive unions (for example a FilterGroup whose filters items are
    anyOf: [FilterGroup, SoloFilter]) previously failed type-checking with TypeScript error
    TS2615 ("Type of property X circularly references itself in mapped type") when used with
    NormalizeOAS, OASModel, OASOutput, or createClient.

    json-schema-to-ts expands anyOf/oneOf through MergeSubSchema, which produces anonymous
    mapped types that break TypeScript's cycle detection. feTS now detects these circular
    anyOf/oneOf graphs (via the $id markers injected by $ref resolution) and routes them
    through a named recursive DirectType alias that TypeScript can evaluate lazily—the same pattern
    as type Tree<T> = { value: T; children: Tree<T>[] }.

    // FilterGroup → filters → anyOf → FilterGroup no longer throws TS2615
    type Normalized = NormalizeOAS<typeof spec>
    type FilterGroup = OASModel<Normalized, 'FilterGroup'>
    const client = createClient<Normalized>({ endpoint: 'https://api.example.com' })
    const body = { filters: [{ field: 'targetIp' }] }
    await client['/test'].post({ json: body })
  • #4078
    e3be332
    Thanks @ardatan! - Fix globalParams so standard RequestInit
    fields (e.g. credentials, mode) are applied to every request

    createClient({ globalParams }) previously only merged feTS-specific fields (headers, query,
    params, json, formData, formUrlEncoded). Values like credentials: 'include' were
    silently ignored, even though they are part of ClientRequestParams / RequestInit.

    The client now spreads the remaining RequestInit options from globalParams into each request.
    Per-request options still win over global ones.

    const client = createClient<NormalizeOAS<typeof spec>>({
      endpoint: 'https://api.example.com',
      globalParams: {
        credentials: 'include',
        headers: { Authorization: 'Bearer …' }
      }
    })
  • #4078
    e3be332
    Thanks @ardatan! - Preserve number | bigint for format: int64
    fields on recursive / self-referential schemas

    When a schema recursively referenced itself (for example Node.child → Node), feTS disabled
    json-schema-to-ts deserialize mappings to avoid TS2615. That also dropped the int64 widening, so
    integer + format: int64 incorrectly inferred as number instead of number | bigint.

    Recursive schemas now go through DirectType, which maps format: int64 (and format: binary)
    the same way non-circular schemas do via deserialize.

    type Node = OASModel<NormalizeOAS<typeof treeOAS>, 'Node'>
    // node.number is number | bigint | undefined (was number | undefined)
    const n: Node = { number: 1n, child: { number: 2 } }
  • #4078
    e3be332
    Thanks @ardatan! - Coerce TypeBox query parameter values from
    strings before validation

    Query strings always arrive as strings (?limit=10{ limit: '10' }). TypeBox schemas such as
    Type.Number() / Type.Integer() / Type.Boolean() then failed validation with
    400 Bad Request, even for valid URL input.

    The TypeBox plugin now runs Value.Convert on request.query before validating, so handlers
    receive correctly typed values and numeric/boolean query params validate successfully.

    createRouter().route({
      path: '/items',
      method: 'GET',
      schemas: {
        request: {
          query: Type.Object({
            limit: Type.Number(),
            active: Type.Boolean()
          })
        }
      },
      handler(request) {
        // GET /items?limit=10&active=true
        // request.query.limit === 10 (number)
        // request.query.active === true (boolean)
        return Response.json(request.query)
      }
    })
  • #4081
    efa4e40
    Thanks @ardatan! - Make client auth params optional when an
    operation's security array includes an anonymous alternative ({})

    OpenAPI allows listing an empty security requirement beside authenticated schemes so callers may
    omit credentials. The client types previously still required auth params whenever any scheme was
    present. Empty {} entries are now detected and the corresponding auth params become optional.

  • #4083
    d7dc0ce
    Thanks @ardatan! - Pin the Swagger UI dark-theme CSS to an immutable
    jsDelivr GitHub commit

    The dark stylesheet is loaded from
    cdn.jsdelivr.net/gh/Itz-fork/Fastapi-Swagger-UI-Dark@868ea5da… with SRI, so upstream
    default-branch changes cannot invalidate the integrity hash or swap the file silently.

  • #4082
    0ba3386
    Thanks @ardatan! - Pin Swagger UI CDN assets and load them with
    Subresource Integrity (SRI)

    Swagger UI previously pulled unversioned unpkg.com/swagger-ui-dist scripts/styles without
    integrity checks. Assets are now pinned to swagger-ui-dist@5.11.0 and loaded via
    <link>/<script> tags with integrity + crossorigin, so a compromised CDN cannot silently
    swap the payload.

@fets/benchmark@0.0.49

Patch Changes

@e2e/shared-server@0.0.97

Patch Changes

example-auth@0.0.21

Patch Changes

example-fireblocks@0.0.47

Patch Changes

example-clickhouse@0.0.42

Patch Changes

example-navitia@0.0.42

Patch Changes

nextjs-example@0.1.66

Patch Changes

example-soccer-stats@0.0.34

Patch Changes

example-spotify@0.0.45

Patch Changes

todolist@0.0.74

Patch Changes

example-typebox@0.0.74

Patch Changes

@github-actions
github-actions Bot force-pushed the changeset-release/master branch 10 times, most recently from 695ede3 to b158b35 Compare August 11, 2026 15:38
@github-actions
github-actions Bot force-pushed the changeset-release/master branch from b158b35 to 1d3de22 Compare August 11, 2026 15:46
@ardatan
ardatan merged commit 5418d75 into master Aug 12, 2026
3 checks passed
@ardatan
ardatan deleted the changeset-release/master branch August 12, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant