Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
253 commits
Select commit Hold shift + click to select a range
b31e88f
fix: re-design swr plugin structure
Pewww Nov 12, 2025
aa0a60d
refactor: handling logic for SWR query key options
Pewww Nov 13, 2025
6311821
fix: sync test and snapshots
Pewww Nov 13, 2025
5c53c2c
fix: rebuild tests
Pewww Nov 13, 2025
46eccd4
fix: remove unusing parameters in swr plugin
Pewww Nov 16, 2025
00b5824
fix: merge conflict
Pewww Nov 16, 2025
0e4b801
refactor: clean up config
mrlubos Nov 16, 2025
28ba28d
fix(deps): update dependency vue3-select-component to v0.14.0
renovate[bot] Dec 5, 2025
6e9c9c2
ci: release
github-actions[bot] Dec 11, 2025
98823ac
chore: update lock file
mrlubos Dec 11, 2025
e552086
Merge pull request #3059 from hey-api/changeset-release/main
mrlubos Dec 11, 2025
cfbd29a
Merge branch 'main' of https://github.com/hey-api/openapi-ts into Pew…
mrlubos Dec 11, 2025
34bec67
refactor: clean up plugin node methods
mrlubos Dec 11, 2025
287f891
Merge pull request #3060 from hey-api/refactor/plugin-node
mrlubos Dec 11, 2025
c8b3e1c
Fix: Having paramsSerializer NOT defined should take the query params!
JanST123 Dec 12, 2025
dc590ab
revert version for pull request
JanST123 Dec 12, 2025
5a71a25
chore(deps): upgrade pnpm to 10.25.0
mrlubos Dec 13, 2025
1cbb826
Merge pull request #3063 from hey-api/chore/pnpm-bump-3
mrlubos Dec 13, 2025
99be240
chore: support thunks in doc methods
mrlubos Dec 13, 2025
e2f194d
Merge pull request #3065 from hey-api/chore/doc-thunk
mrlubos Dec 13, 2025
fb8bdf1
chore: add lazy dsl node
mrlubos Dec 13, 2025
8d5d901
Merge pull request #3067 from hey-api/chore/dsl-lazy
mrlubos Dec 13, 2025
ba5be94
chore: pass ast context
mrlubos Dec 13, 2025
4d790ac
Merge pull request #3068 from hey-api/chore/ast-context
mrlubos Dec 13, 2025
dbac0ef
refactor: move factories into a separate module
mrlubos Dec 14, 2025
0728758
Merge pull request #3070 from hey-api/refactor/dsl-factories
mrlubos Dec 14, 2025
7c96237
Merge branch 'main' into renovate/vue3-select-component-0.x
mrlubos Dec 14, 2025
0e5fe72
chore(deps): update dependency ky to v1.14.1
renovate[bot] Dec 14, 2025
4fff41d
chore(deps): update actions/create-github-app-token action to v2.2.1
renovate[bot] Dec 14, 2025
3812890
chore(deps): update dependency @changesets/parse to v0.4.2
renovate[bot] Dec 14, 2025
3793fb4
Merge pull request #2828 from hey-api/renovate/vue3-select-component-0.x
mrlubos Dec 14, 2025
3034e5e
Merge pull request #3071 from hey-api/renovate/ky-1.x
mrlubos Dec 14, 2025
a7f57f2
chore(deps): update dependency @types/bun to v1.3.4
renovate[bot] Dec 14, 2025
d7463f1
chore(deps): update dependency swr to v2.3.7
renovate[bot] Dec 14, 2025
59eafd1
chore(deps): update dependency @pinia/colada to v0.18.0
renovate[bot] Dec 14, 2025
4526f00
chore(deps): update dependency fastify to v5.6.2
renovate[bot] Dec 14, 2025
4ae8512
chore(deps): update dependency valibot to v1.2.0
renovate[bot] Dec 14, 2025
9e71818
Merge pull request #3074 from hey-api/renovate/actions-create-github-…
mrlubos Dec 14, 2025
6a7425e
Merge pull request #3082 from hey-api/renovate/changesets-parse-0.x
mrlubos Dec 14, 2025
ac188d4
Merge pull request #3081 from hey-api/renovate/valibot-1.x
mrlubos Dec 14, 2025
b4cf8d6
chore(deps): update angular monorepo
renovate[bot] Dec 14, 2025
ca707b3
chore(deps): update dependency @changesets/get-github-info to v0.7.0
renovate[bot] Dec 14, 2025
cc551d2
Merge pull request #3083 from hey-api/renovate/bun-1.x
mrlubos Dec 14, 2025
0e12809
Merge pull request #3072 from hey-api/renovate/swr-2.x
mrlubos Dec 14, 2025
033e4f9
Merge pull request #3076 from hey-api/renovate/pinia-colada-0.x
mrlubos Dec 14, 2025
a614b76
Merge pull request #3077 from hey-api/renovate/fastify-5.x
mrlubos Dec 14, 2025
5740a6f
chore(deps): update dependency globals to v16.5.0
renovate[bot] Dec 14, 2025
35ba4e2
chore(deps): update dependency ofetch to v1.5.1
renovate[bot] Dec 14, 2025
ffa8b1a
Merge pull request #3049 from hey-api/renovate/angular-monorepo
mrlubos Dec 14, 2025
8d45378
chore(deps): update dependency axios to v1.13.2
renovate[bot] Dec 14, 2025
fb03fc1
Merge pull request #3075 from hey-api/renovate/changesets-get-github-…
mrlubos Dec 14, 2025
fe8cc8a
Merge pull request #3084 from hey-api/renovate/globals-16.x
mrlubos Dec 14, 2025
66c8ac7
Merge pull request #3085 from hey-api/renovate/ofetch-1.x
mrlubos Dec 14, 2025
6c20b27
chore(deps): update dependency @nuxt/test-utils to v3.21.0
renovate[bot] Dec 14, 2025
0759982
Merge pull request #3089 from hey-api/renovate/axios-1.x
mrlubos Dec 14, 2025
0a20d65
chore(deps): update dependency tsdown to v0.17.2
renovate[bot] Dec 14, 2025
09d90c0
Merge pull request #3092 from hey-api/renovate/nuxt-test-utils-3.x
mrlubos Dec 14, 2025
2aa69f4
fix(deps): update dependency semver to v7.7.3
renovate[bot] Dec 14, 2025
8181ca6
chore(deps): update dependency eslint-plugin-vue to v9.33.0
renovate[bot] Dec 14, 2025
8c9e60c
Merge pull request #3086 from hey-api/renovate/tsdown-0.x
mrlubos Dec 14, 2025
9347989
chore(deps): update dependency yaml to v2.8.2
renovate[bot] Dec 14, 2025
e1da590
Merge pull request #3073 from hey-api/renovate/semver-7.x
mrlubos Dec 14, 2025
35cb1d5
Merge pull request #3094 from hey-api/renovate/eslint-plugin-vue-9.x
mrlubos Dec 14, 2025
8bc1756
Merge pull request #3088 from hey-api/renovate/yaml-2.x
mrlubos Dec 14, 2025
b0bd057
chore(deps): update dependency vue to v3.5.25
renovate[bot] Dec 14, 2025
0fe7260
chore(deps): update actions/checkout action to v6
renovate[bot] Dec 14, 2025
bdaf5b8
Merge pull request #3087 from hey-api/renovate/vue-monorepo
mrlubos Dec 14, 2025
1b1bcc7
chore(deps): update dependency rollup to v4.53.3
renovate[bot] Dec 14, 2025
67e5c6b
Merge pull request #3098 from hey-api/renovate/actions-checkout-6.x
mrlubos Dec 14, 2025
b43dd95
Merge pull request #3079 from hey-api/renovate/rollup-4.x
mrlubos Dec 14, 2025
71ce47d
chore(deps): update eslint monorepo to v9.39.1
renovate[bot] Dec 14, 2025
8e137fe
chore(deps): update vitest monorepo to v3.2.4
renovate[bot] Dec 14, 2025
a5f3617
Merge pull request #3096 from hey-api/renovate/vitest-monorepo
mrlubos Dec 14, 2025
a2c88a3
Merge pull request #3095 from hey-api/renovate/eslint-monorepo
mrlubos Dec 14, 2025
f481f5c
feat(sdk): lazily initialize sub-resources to improve performance
mrlubos Dec 14, 2025
72d3610
Merge pull request #3099 from hey-api/feat/sdk-instance-lazy
mrlubos Dec 14, 2025
0c58b49
refactor: clean up class name logic
mrlubos Dec 14, 2025
dfad1ca
Merge pull request #3101 from hey-api/refactor/sdk-class-name
mrlubos Dec 14, 2025
9116082
fix(output): sanitize reserved names with underscore suffix instead o…
mrlubos Dec 14, 2025
61890ef
Merge pull request #3102 from hey-api/refactor/sdk-operation-name
mrlubos Dec 14, 2025
45ab38c
Update package.json
mrlubos Dec 14, 2025
f46c47c
Merge pull request #3103 from hey-api/mrlubos-patch-1
mrlubos Dec 14, 2025
a03d2f2
refactor(sdk): clean up instance type so there's no need to cast
mrlubos Dec 14, 2025
d225908
Merge pull request #3104 from hey-api/refactor/sdk-class-instance
mrlubos Dec 14, 2025
d321c7d
chore(deps): update dependency @pinia/colada to v0.18.1
renovate[bot] Dec 15, 2025
205b8b6
chore(deps): update dependency tsdown to v0.17.3
renovate[bot] Dec 15, 2025
55aa953
Merge pull request #3106 from hey-api/renovate/pinia-colada-0.x
mrlubos Dec 15, 2025
c60ef94
Merge pull request #3107 from hey-api/renovate/tsdown-0.x
mrlubos Dec 15, 2025
33066b2
Add tests, proving that params are correctly passed to axios as
JanST123 Dec 15, 2025
55b0dae
update snapshots after fixing axios -> mapping
JanST123 Dec 15, 2025
e2cb47a
update examples after fixing axios -> mapping
JanST123 Dec 15, 2025
4dcc210
Modify axios client to utilize `query` option
mrlubos Dec 15, 2025
37c3eab
Merge pull request #3062 from JanST123GS/bugfix/axios_query
mrlubos Dec 15, 2025
9e8a41d
chore(docs): update contributors list
github-actions[bot] Dec 16, 2025
c060656
Initial plan
Copilot Dec 18, 2025
ed01f15
Add support for moduleResolution node16 to behave like nodenext
Copilot Dec 18, 2025
6d2b5c2
Initial plan
Copilot Dec 18, 2025
0f3daf6
docs: normalize changesets
mrlubos Dec 18, 2025
ceeb281
Add test snapshots for node16 moduleResolution
Copilot Dec 18, 2025
b057a8e
Merge pull request #3118 from hey-api/docs/changesets-subject
mrlubos Dec 18, 2025
26baa74
Add test case for nested allOf discriminator bug
Copilot Dec 18, 2025
af441ca
Fix discriminator resolution for nested allOf compositions
Copilot Dec 18, 2025
6c4c7c9
Add logic to skip discriminator values for intermediate schemas in mu…
Copilot Dec 18, 2025
5e09e03
Add snapshot tests for nested allOf discriminator fix
Copilot Dec 18, 2025
18d218a
Create thirty-shoes-judge.md
mrlubos Dec 18, 2025
f842dcd
Merge pull request #3115 from hey-api/copilot/fix-module-resolution-n…
mrlubos Dec 18, 2025
05df951
Fix discriminator union types for intermediate schemas
Copilot Dec 18, 2025
3d19d9f
Initial plan
Copilot Dec 18, 2025
f9920f7
feat: Add extension fields (x-*) support to IR types and parsers
Copilot Dec 18, 2025
0bb9a45
Simplify discriminator logic to use schema's own value only
Copilot Dec 18, 2025
6affae8
fix: Correct field ordering in spec types for linter
Copilot Dec 18, 2025
3240048
Changes before error encountered
Copilot Dec 18, 2025
33dfd0a
refactor: Reuse parseExtensions and remove JSDoc from extension fields
Copilot Dec 18, 2025
ec1224d
Create proud-berries-matter.md
mrlubos Dec 18, 2025
dcc268d
Fix TypeScript errors in discriminator implementation
Copilot Dec 18, 2025
e384c3e
refactor: Extract SpecificationExtensions type and apply to all spec …
Copilot Dec 18, 2025
b2f2323
fix: Add missing parseExtensions imports in 3.1.x parsers
Copilot Dec 18, 2025
e8343e7
Use non-null assertions in for loops and Array/ReadonlyArray syntax
Copilot Dec 18, 2025
8a2c019
fix: Resolve typecheck errors with extension field types
Copilot Dec 18, 2025
e6a4e48
Merge pull request #3117 from hey-api/copilot/fix-discriminator-in-allof
mrlubos Dec 18, 2025
0f85cc4
fix: Correct extension field type handling per review feedback
Copilot Dec 18, 2025
c50190b
chore: fix types
mrlubos Dec 18, 2025
facca40
Merge pull request #3119 from hey-api/copilot/add-extension-fields-su…
mrlubos Dec 18, 2025
28afd8b
ci: release
github-actions[bot] Dec 18, 2025
cb32156
Merge pull request #3100 from hey-api/changeset-release/main
mrlubos Dec 18, 2025
de213f7
Initial plan
Copilot Dec 19, 2025
fb8623c
Fix discriminator inheritance to use Omit for proper type narrowing
Copilot Dec 19, 2025
c46109a
fix: import styles for vue3-select-component
mrlubos Dec 19, 2025
85b9071
Merge pull request #3121 from hey-api/fix/vue3-select-component-styles
mrlubos Dec 19, 2025
714decf
Update test snapshots and regenerate examples for Omit discriminator …
Copilot Dec 19, 2025
27191ec
Fix baseUrl in test snapshots
Copilot Dec 19, 2025
6f8a43c
Enhance type narrowing in discriminated types
mrlubos Dec 19, 2025
f662e84
Merge pull request #3120 from hey-api/copilot/fix-wrong-discriminator…
mrlubos Dec 19, 2025
d4adb60
docs: clean up logos
mrlubos Dec 19, 2025
445c414
Merge pull request #3124 from hey-api/docs/github-logos
mrlubos Dec 19, 2025
0317daf
Revert "Fix: In axios client, proving NO paramsSerializer should use …
mrlubos Dec 19, 2025
34c9a92
Create khaki-experts-confess.md
mrlubos Dec 19, 2025
3e3a2dc
test: update snapshots
mrlubos Dec 19, 2025
5cbba03
Merge pull request #3125 from hey-api/revert-3062-bugfix/axios_query
mrlubos Dec 19, 2025
2e9c658
ci: release
github-actions[bot] Dec 19, 2025
0c09e6c
Merge pull request #3122 from hey-api/changeset-release/main
mrlubos Dec 19, 2025
6505659
fix: use serialized body in SSE client requests
bilby91 Dec 19, 2025
02f0305
fix(client-nuxt): preserve null in WithRefs type for nullable fields
Dec 22, 2025
b643ae6
chore(deps): update dependency swr to v2.3.8
renovate[bot] Dec 23, 2025
d559254
fix(deps): update dependency c12 to v3.3.3
renovate[bot] Dec 23, 2025
5a469f8
chore(deps): update dependency @pinia/colada to v0.19.1
renovate[bot] Dec 23, 2025
bc68797
chore(deps): update dependency rollup to v4.54.0
renovate[bot] Dec 23, 2025
7eb08e2
chore(deps): update dependency turbo to v2.7.0
renovate[bot] Dec 23, 2025
8669177
chore(deps): update pnpm to v10.26.1
renovate[bot] Dec 23, 2025
f040d59
chore(deps): update stefanzweifel/git-auto-commit-action action to v7…
renovate[bot] Dec 23, 2025
0ddbbbe
Merge pull request #3136 from hey-api/renovate/swr-2.x
mrlubos Dec 23, 2025
430b023
Merge pull request #3139 from hey-api/renovate/rollup-4.x
mrlubos Dec 23, 2025
b3fe4a7
Merge pull request #3141 from hey-api/renovate/turbo-monorepo
mrlubos Dec 23, 2025
be6266e
chore(deps): update dependency @types/bun to v1.3.5
renovate[bot] Dec 23, 2025
f10a72b
Merge pull request #3138 from hey-api/renovate/pinia-colada-0.x
mrlubos Dec 23, 2025
7ad3621
chore(deps): update dependency arktype to v2.1.29
renovate[bot] Dec 23, 2025
cc33ce7
Merge pull request #3134 from hey-api/renovate/bun-1.x
mrlubos Dec 23, 2025
48e9729
Merge pull request #3143 from hey-api/renovate/stefanzweifel-git-auto…
mrlubos Dec 23, 2025
3f4177e
Merge pull request #3137 from hey-api/renovate/c12-3.x
mrlubos Dec 23, 2025
c73834a
Merge pull request #3142 from hey-api/renovate/pnpm-10.x
mrlubos Dec 23, 2025
89f6a71
Merge pull request #3135 from hey-api/renovate/arktype-2.x
mrlubos Dec 23, 2025
4a32dcf
feat: support number resolvers
mrlubos Dec 23, 2025
cf9f56d
Merge pull request #3145 from hey-api/feat/plugin-resolvers-number
mrlubos Dec 23, 2025
63f3a16
docs: update copy
mrlubos Dec 25, 2025
6d2a873
Merge pull request #3148 from hey-api/docs/refresh
mrlubos Dec 25, 2025
aaece23
fix: add naive lower and upper bound checks
mrlubos Dec 23, 2025
cfab9a0
feat: add number base resolvers
mrlubos Dec 23, 2025
131085c
refactor: clean up valibot resolvers
mrlubos Dec 25, 2025
497f219
refactor: clean up symbolOnce interface
mrlubos Dec 26, 2025
edf99ed
refactor: clean up valibot resolver interface
mrlubos Dec 26, 2025
34381cc
refactor: clean up zod resolvers
mrlubos Dec 26, 2025
cd07d9c
feat: add number base resolvers
mrlubos Dec 26, 2025
ab80a4b
docs: add Resolvers API
mrlubos Dec 26, 2025
a6de8a7
Merge pull request #3147 from hey-api/feat/plugin-resolvers-number-2
mrlubos Dec 26, 2025
4ad688b
chore(deps): update dependency tsdown to v0.18.3
renovate[bot] Dec 27, 2025
59ef4d6
test: update client-nuxt snapshots
Dec 30, 2025
56092cb
docs: minor tweak to copy
mrlubos Dec 31, 2025
12484bf
Merge pull request #3160 from hey-api/docs/copy-minor
mrlubos Dec 31, 2025
d35dc33
Merge branch 'main' into renovate/tsdown-0.x
mrlubos Dec 31, 2025
3935034
Update changelog for client-nuxt plugin fix
mrlubos Dec 31, 2025
eb14e61
chore(deps): update pnpm to v10.26.2
renovate[bot] Dec 31, 2025
07d5b96
Merge pull request #3140 from hey-api/renovate/tsdown-0.x
mrlubos Dec 31, 2025
63f8633
Merge pull request #3161 from hey-api/renovate/pnpm-10.x
mrlubos Dec 31, 2025
929bab9
Merge pull request #3131 from rigtigeEmil/fix/client-nuxt-withrefs-nu…
mrlubos Dec 31, 2025
1cb499c
chore(docs): update contributors list
github-actions[bot] Jan 1, 2026
c474b73
chore(deps): update dependency ky to v1.14.2
renovate[bot] Jan 1, 2026
cff55b2
chore(deps): update dependency turbo to v2.7.2
renovate[bot] Jan 1, 2026
53dfa42
Merge pull request #3164 from hey-api/renovate/ky-1.x
mrlubos Jan 1, 2026
4495b84
Merge branch 'main' into renovate/turbo-monorepo
mrlubos Jan 1, 2026
4689b68
Merge pull request #3165 from hey-api/renovate/turbo-monorepo
mrlubos Jan 1, 2026
5613ac0
fix(@hey-api/sdk): dedup classes
mrlubos Dec 15, 2025
24db8ca
chore: port asClass functionality
mrlubos Dec 16, 2025
71025a3
chore: port function functionality
mrlubos Dec 16, 2025
b733097
chore: port operation classes function
mrlubos Dec 17, 2025
bed9a55
refactor: clean up ast context
mrlubos Dec 18, 2025
b2987ed
test: update snapshots
mrlubos Dec 20, 2025
601ef70
chore: update Angular plugin
mrlubos Dec 20, 2025
572d7e2
chore: expose file header
mrlubos Dec 27, 2025
13dc233
chore: add log utilities
mrlubos Dec 27, 2025
316a789
chore: clean up operations config
mrlubos Dec 28, 2025
206d5ac
chore: angular plugin structure
mrlubos Dec 28, 2025
817ed8f
chore: fallback to path in operation id
mrlubos Jan 1, 2026
0e6fc36
fix: allow overwriting symbol nodes
mrlubos Jan 1, 2026
382741f
chore: clean up angular
mrlubos Jan 1, 2026
815a3de
docs: update SDK plugin manual
mrlubos Jan 2, 2026
fc1514a
Merge pull request #3109 from hey-api/fix/sdk-class-conflict
mrlubos Jan 2, 2026
b4fa4af
chore(deps): update dependency vitepress-plugin-llms to v1.10.0
renovate[bot] Jan 2, 2026
c7b13b4
docs: fix formatting on sdk plugin page
mrlubos Jan 2, 2026
24d8b03
Merge pull request #3168 from hey-api/docs/sdk-copy-fix
mrlubos Jan 2, 2026
77bf81a
fix: simplify symbol merging logic
mrlubos Jan 2, 2026
4eb6d1f
Merge pull request #3169 from hey-api/fix/core-symbol-merge
mrlubos Jan 2, 2026
52ee1d7
chore: update to the latest OpenCode snapshot
mrlubos Jan 2, 2026
276bde1
Merge pull request #3170 from hey-api/chore/opencode-snapshot
mrlubos Jan 2, 2026
84bdb90
Merge pull request #3123 from crunchloop/fix/sse-body-serialization
mrlubos Jan 2, 2026
e63f0cf
chore: update changesets
mrlubos Jan 2, 2026
78527c1
Merge pull request #3171 from hey-api/docs/changesets-clients
mrlubos Jan 2, 2026
ee7fbc0
Merge pull request #3163 from hey-api/renovate/vitepress-plugin-llms-1.x
mrlubos Jan 2, 2026
b3eae96
ci: release
github-actions[bot] Jan 2, 2026
4205c4f
chore(deps): update dependency @opencode-ai/sdk to v1.0.216
renovate[bot] Jan 2, 2026
24a26d3
chore(deps): update dependency tsdown to v0.18.4
renovate[bot] Jan 2, 2026
1e0e785
chore: update lock file
mrlubos Jan 2, 2026
50c0421
Merge pull request #3146 from hey-api/changeset-release/main
mrlubos Jan 2, 2026
1297b89
Merge branch 'main' into renovate/tsdown-0.x
mrlubos Jan 2, 2026
461b525
Merge branch 'main' into renovate/opencode-ai-sdk-1.x
mrlubos Jan 2, 2026
a75e2fd
chore: fix snapshots
mrlubos Jan 2, 2026
704e9a5
Merge pull request #3174 from hey-api/chore/fix-snapshot
mrlubos Jan 2, 2026
1ff9a03
Merge branch 'main' into renovate/tsdown-0.x
mrlubos Jan 2, 2026
c3b8a93
Merge branch 'main' into renovate/opencode-ai-sdk-1.x
mrlubos Jan 2, 2026
deba9b1
Merge pull request #3173 from hey-api/renovate/tsdown-0.x
mrlubos Jan 2, 2026
0fce12c
Merge pull request #3172 from hey-api/renovate/opencode-ai-sdk-1.x
mrlubos Jan 2, 2026
711452e
chore(docs): update contributors list
github-actions[bot] Jan 3, 2026
b985053
feat: SDK examples
mrlubos Jan 3, 2026
469253a
Merge pull request #3175 from hey-api/feat/sdk-examples
mrlubos Jan 4, 2026
9848a1c
chore(deps): update dependency @opencode-ai/sdk to v1.0.221
renovate[bot] Jan 4, 2026
9e5243b
chore(deps): update pnpm to v10.27.0
renovate[bot] Jan 4, 2026
0242b1d
Merge pull request #3177 from hey-api/renovate/pnpm-10.x
mrlubos Jan 4, 2026
330a628
Merge pull request #3176 from hey-api/renovate/opencode-ai-sdk-1.x
mrlubos Jan 4, 2026
91c49a3
ci: release
github-actions[bot] Jan 4, 2026
4f44a41
chore: update lock file
mrlubos Jan 4, 2026
720c012
Merge pull request #3178 from hey-api/changeset-release/main
mrlubos Jan 4, 2026
e42ae69
feat: add openapi-ts swr plugin
Pewww Nov 10, 2025
83d7980
fix: lint
nemo-wrtn Nov 10, 2025
7b4349f
fix: update snapshot tests
Pewww Nov 10, 2025
c983846
fix: re-design swr plugin structure
Pewww Nov 12, 2025
a931690
refactor: handling logic for SWR query key options
Pewww Nov 13, 2025
c8bf19e
fix: sync test and snapshots
Pewww Nov 13, 2025
1721a26
fix: rebuild tests
Pewww Nov 13, 2025
7495fca
fix: remove unusing parameters in swr plugin
Pewww Nov 16, 2025
580de4f
refactor: clean up config
mrlubos Nov 16, 2025
17bf22f
Merge branch 'main' of https://github.com/Pewww/openapi-ts into Pewww…
mrlubos Jan 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix: re-design swr plugin structure
  • Loading branch information
Pewww committed Nov 13, 2025
commit b31e88f68cc6bcb333638940a7751bad7dc7ecf9
170 changes: 165 additions & 5 deletions examples/openapi-ts-swr/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,17 @@ import useSWRMutation from 'swr/mutation';

import { createClient } from './client/client';
import { PetSchema } from './client/schemas.gen';
import { getInventory } from './client/sdk.gen';
import {
addPetMutation,
findPetsByStatusKey,
findPetsByStatusOptions,
getInventoryKey,
getPetByIdOptions,
loginUserKey,
updatePetMutation,
} from './client/swr.gen';
// import { getPetByIdKey } from './client/swr.gen'; // For Pattern 2 example
import type { Pet } from './client/types.gen';

const localClient = createClient({
Expand Down Expand Up @@ -59,8 +65,12 @@ function App() {
const [pet, setPet] = useState<Pet>();
const [petId, setPetId] = useState<number>();
const [isRequiredNameError, setIsRequiredNameError] = useState(false);
const [showAdvancedExamples, setShowAdvancedExamples] = useState(false);

// Mutations
// ============================================================================
// Mutations - using the generated mutation options
// ============================================================================
// The mutation options provide the key and fetcher following SWR best practices
const { fetcher: addPetFetcher, key: addPetKey } = addPetMutation();
const addPet = useSWRMutation(addPetKey, addPetFetcher, {
onError: (error) => {
Expand All @@ -83,7 +93,11 @@ function App() {
},
});

// Query - only fetch if petId is set
// ============================================================================
// Pattern 1: Using Options (Recommended for most cases)
// ============================================================================
// The options provide both key and fetcher in the correct format
// Conditional fetching is controlled by passing null to useSWR
const petOptions = petId
? getPetByIdOptions({
client: localClient,
Expand All @@ -98,6 +112,75 @@ function App() {
petOptions?.fetcher ?? null,
);

// ============================================================================
// Pattern 2: Using Key function directly (for custom fetchers)
// ============================================================================
// Key functions always return a valid key array, never null
// This gives you full control over the fetcher while maintaining cache consistency
//
// Example (disabled to avoid duplicate requests):
// const petByIdKey = petId ? getPetByIdKey({ path: { petId } }) : null;
// const { data: customFetchedPet } = useSWR(petByIdKey, async (key) => {
// if (!key) return null;
// // Custom fetch logic here - you can add transforms, error handling, etc.
// console.log('Fetching with key:', key);
// const response = await fetch(`/api/pet/${key[1]}`);
// return response.json();
// });

// ============================================================================
// Pattern 3: Optional parameters with optional chaining
// ============================================================================
// When options are optional, keys use optional chaining (options?.query)
// This is safe and always returns a valid key
const inventoryKey = getInventoryKey(); // No params needed
const { data: inventory } = useSWR(
showAdvancedExamples ? inventoryKey : null,
async () => {
// Custom fetcher - you control the implementation
const { data } = await getInventory({
client: localClient,
throwOnError: true,
});
return data;
},
);

// ============================================================================
// Pattern 4: Required parameters
// ============================================================================
// When parameters are required, options must be provided
// The key function directly accesses options.query without optional chaining
const petsByStatusKey = findPetsByStatusKey({
query: { status: 'available' },
});

// Or use the full options for convenience
const { fetcher: petsByStatusFetcher, key: petsByStatusKey2 } =
findPetsByStatusOptions({
client: localClient,
query: { status: 'available' },
});

const { data: availablePets } = useSWR(
showAdvancedExamples ? petsByStatusKey2 : null,
showAdvancedExamples ? petsByStatusFetcher : null,
);

// ============================================================================
// Pattern 5: Demonstrating key equality for cache consistency
// ============================================================================
// Keys with the same parameters will have the same cache entry
// This is a core SWR v2 improvement - primitive values in key arrays
const loginKey1 = loginUserKey({
query: { password: 'pass', username: 'test' },
});
const loginKey2 = loginUserKey({
query: { password: 'pass', username: 'test' },
});
// loginKey1 and loginKey2 will be treated as the same cache key by SWR
// because they have the same primitive values: ['/user/login', { username: 'test', password: 'pass' }]

const onAddPet = async (formData: FormData) => {
// simple form field validation to demonstrate using schemas
if (PetSchema.required.includes('name') && !formData.get('name')) {
Expand Down Expand Up @@ -180,7 +263,10 @@ function App() {
<Heading>@hey-api/openapi-ts 🤝 SWR</Heading>
</Flex>
<Section size="1" />

{/* Main Demo Section */}
<Flex direction="column" gapY="2">
<Heading size="4">Basic Usage Demo</Heading>
<Box maxWidth="240px">
<Card>
<Flex gap="3" align="center">
Expand All @@ -205,6 +291,66 @@ function App() {
<DownloadIcon /> Get Random Pet
</Button>
</Flex>

<Section size="1" />

{/* Advanced Examples Toggle */}
<Flex direction="column" gapY="2">
<Button
variant={showAdvancedExamples ? 'solid' : 'outline'}
onClick={() => setShowAdvancedExamples(!showAdvancedExamples)}
>
{showAdvancedExamples ? 'Hide' : 'Show'} Advanced SWR v2 Examples
</Button>

{showAdvancedExamples && (
<Card>
<Flex direction="column" gapY="2">
<Heading size="3">SWR v2 Key Patterns</Heading>

<Box>
<Text size="2" weight="bold">
Inventory (Optional params):
</Text>
<Text size="1" color="gray">
Key: {JSON.stringify(inventoryKey)}
</Text>
<Text size="1">
Count:{' '}
{inventory ? Object.keys(inventory).length : 'Loading...'}
</Text>
</Box>

<Box>
<Text size="2" weight="bold">
Available Pets (Required params):
</Text>
<Text size="1" color="gray">
Key: {JSON.stringify(petsByStatusKey)}
</Text>
<Text size="1">
Found: {availablePets?.length ?? 'Loading...'} pets
</Text>
</Box>

<Box>
<Text size="2" weight="bold">
Key Equality Demo:
</Text>
<Text size="1" color="gray">
Key 1: {JSON.stringify(loginKey1)}
</Text>
<Text size="1" color="gray">
Key 2: {JSON.stringify(loginKey2)}
</Text>
<Text size="1" color="green">
✓ These keys are equal and share the same cache
</Text>
</Box>
</Flex>
</Card>
)}
</Flex>
<Section size="1" />
<Flex direction="column" gapY="2">
<Form.Root
Expand Down Expand Up @@ -266,13 +412,24 @@ function App() {
{/*
useSWRInfinite Example (for paginated endpoints):

If your OpenAPI spec has pagination configured, you can use useSWRInfinite:
If your OpenAPI spec has pagination configured, the SWR plugin generates
infinite options functions (e.g., findPetsByStatusInfinite).

These functions return an object with:
- getKey: Function that generates keys for each page
- fetcher: Function that fetches a single page

Example usage:

import useSWRInfinite from 'swr/infinite';
import { getPetsInfinite } from './client/swr.gen';
import { findPetsByStatusInfinite } from './client/swr.gen';

function InfinitePetList() {
const { getKey, fetcher } = getPetsInfinite();
// Get the infinite options with your query parameters
const { getKey, fetcher } = findPetsByStatusInfinite({
query: { status: 'available' }
});

const { data, size, setSize, isLoading } = useSWRInfinite(getKey, fetcher);

const pets = data ? data.flat() : [];
Expand All @@ -296,6 +453,9 @@ function App() {
</div>
);
}

Note: The infinite options are only generated for operations that have
pagination configured in the OpenAPI spec.
*/}
</Container>
</Box>
Expand Down
Loading