zudoku 0.39.5 → 0.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/entry.client.js +2 -0
- package/dist/app/entry.client.js.map +1 -1
- package/dist/config/config.d.ts +3 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.js +1 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validators/BuildSchema.d.ts +60 -0
- package/dist/config/validators/BuildSchema.js +31 -0
- package/dist/config/validators/BuildSchema.js.map +1 -0
- package/dist/config/validators/common.d.ts +7 -51
- package/dist/config/validators/common.js +1 -7
- package/dist/config/validators/common.js.map +1 -1
- package/dist/config/validators/icon-types.d.ts +1 -1
- package/dist/config/validators/validate.d.ts +2 -18
- package/dist/index.d.ts +1 -1
- package/dist/lib/authentication/providers/clerk.js +2 -2
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/components/Footer.js +2 -2
- package/dist/lib/components/Footer.js.map +1 -1
- package/dist/lib/components/Layout.js +2 -1
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/Search.js +7 -1
- package/dist/lib/components/Search.js.map +1 -1
- package/dist/lib/components/navigation/Sidebar.js +3 -1
- package/dist/lib/components/navigation/Sidebar.js.map +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
- package/dist/lib/plugins/openapi/processors/removeExtensions.d.ts +8 -0
- package/dist/lib/plugins/openapi/{post-processors → processors}/removeExtensions.js +1 -1
- package/dist/lib/plugins/openapi/processors/removeExtensions.js.map +1 -0
- package/dist/lib/plugins/openapi/{post-processors → processors}/removeExtensions.test.js +26 -6
- package/dist/lib/plugins/openapi/processors/removeExtensions.test.js.map +1 -0
- package/dist/lib/plugins/openapi/{post-processors → processors}/removeParameters.d.ts +3 -1
- package/dist/lib/plugins/openapi/{post-processors → processors}/removeParameters.js +1 -1
- package/dist/lib/plugins/openapi/processors/removeParameters.js.map +1 -0
- package/dist/lib/plugins/openapi/{post-processors → processors}/removeParameters.test.js +53 -25
- package/dist/lib/plugins/openapi/processors/removeParameters.test.js.map +1 -0
- package/dist/lib/plugins/openapi/{post-processors → processors}/removePaths.d.ts +3 -1
- package/dist/lib/plugins/openapi/{post-processors → processors}/removePaths.js +1 -1
- package/dist/lib/plugins/openapi/processors/removePaths.js.map +1 -0
- package/dist/lib/plugins/openapi/processors/removePaths.test.js +144 -0
- package/dist/lib/plugins/openapi/processors/removePaths.test.js.map +1 -0
- package/dist/lib/plugins/openapi/processors/traverse.js.map +1 -0
- package/dist/lib/ui/Callout.js +1 -1
- package/dist/lib/ui/Callout.js.map +1 -1
- package/dist/lib/ui/Form.d.ts +1 -1
- package/dist/lib/util/MdxComponents.d.ts +1 -0
- package/dist/lib/util/MdxComponents.js +2 -0
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/lib/util/detectOS.d.ts +1 -0
- package/dist/lib/util/detectOS.js +11 -0
- package/dist/lib/util/detectOS.js.map +1 -0
- package/dist/vite/plugin-api.js +33 -18
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-sidebar.js +1 -1
- package/dist/vite/plugin-sidebar.js.map +1 -1
- package/dist/zuplo/enrich-with-zuplo.d.ts +3 -3
- package/dist/zuplo/enrich-with-zuplo.js +18 -17
- package/dist/zuplo/enrich-with-zuplo.js.map +1 -1
- package/dist/zuplo/with-zuplo-processors.d.ts +2 -2
- package/dist/zuplo/with-zuplo-processors.js +6 -6
- package/dist/zuplo/with-zuplo-processors.js.map +1 -1
- package/dist/zuplo/with-zuplo.d.ts +1 -1
- package/lib/{AuthenticationPlugin-foqdvvkf.js → AuthenticationPlugin-CJOFRBk3.js} +4 -4
- package/lib/{AuthenticationPlugin-foqdvvkf.js.map → AuthenticationPlugin-CJOFRBk3.js.map} +1 -1
- package/lib/{Button-Fp19CMUr.js → Button-BBNrKpQd.js} +2 -2
- package/lib/{Button-Fp19CMUr.js.map → Button-BBNrKpQd.js.map} +1 -1
- package/lib/{Callout-B2vsR09t.js → Callout-D3Ja4OPX.js} +14 -13
- package/lib/{Callout-B2vsR09t.js.map → Callout-D3Ja4OPX.js.map} +1 -1
- package/lib/{CategoryHeading-DpB47wvk.js → CategoryHeading-D06WK_Wo.js} +2 -2
- package/lib/{CategoryHeading-DpB47wvk.js.map → CategoryHeading-D06WK_Wo.js.map} +1 -1
- package/lib/{Dialog-sbgekbjb.js → Dialog-ByYz4ABw.js} +2 -2
- package/lib/{Dialog-sbgekbjb.js.map → Dialog-ByYz4ABw.js.map} +1 -1
- package/lib/{Drawer-kDAfOq_2.js → Drawer-CEwbkLDb.js} +2 -2
- package/lib/Drawer-CEwbkLDb.js.map +1 -0
- package/lib/{Markdown-aF5FdsNi.js → Markdown-C5h6bxbE.js} +4239 -4073
- package/lib/Markdown-C5h6bxbE.js.map +1 -0
- package/lib/{MdxPage-Vw_dc9Yz.js → MdxPage-B66ht0D_.js} +9 -9
- package/lib/{MdxPage-Vw_dc9Yz.js.map → MdxPage-B66ht0D_.js.map} +1 -1
- package/lib/{OasProvider-C5paEivQ.js → OasProvider-BKPF0Pbt.js} +6 -6
- package/lib/{OasProvider-C5paEivQ.js.map → OasProvider-BKPF0Pbt.js.map} +1 -1
- package/lib/{OperationList-Ds9Izgkn.js → OperationList-0bhBU7ME.js} +16 -16
- package/lib/{OperationList-Ds9Izgkn.js.map → OperationList-0bhBU7ME.js.map} +1 -1
- package/lib/{Pagination-SdlocK96.js → Pagination-Bt1czAiJ.js} +4 -4
- package/lib/{Pagination-SdlocK96.js.map → Pagination-Bt1czAiJ.js.map} +1 -1
- package/lib/{RouteGuard-CqZPoZYJ.js → RouteGuard-BZ_VsiXc.js} +6 -6
- package/lib/{RouteGuard-CqZPoZYJ.js.map → RouteGuard-BZ_VsiXc.js.map} +1 -1
- package/lib/{SchemaList-NZbDXAV5.js → SchemaList-CsTIT1pi.js} +10 -10
- package/lib/{SchemaList-NZbDXAV5.js.map → SchemaList-CsTIT1pi.js.map} +1 -1
- package/lib/{SchemaView-B3fOPR4V.js → SchemaView-DCSWtnYr.js} +5 -5
- package/lib/{SchemaView-B3fOPR4V.js.map → SchemaView-DCSWtnYr.js.map} +1 -1
- package/lib/{Select-DVFRKf1R.js → Select-Dg5R11Dx.js} +4 -4
- package/lib/{Select-DVFRKf1R.js.map → Select-Dg5R11Dx.js.map} +1 -1
- package/lib/{SlotletProvider-DXvc0aY6.js → SlotletProvider-VUmTNmLZ.js} +41 -39
- package/lib/SlotletProvider-VUmTNmLZ.js.map +1 -0
- package/lib/{Spinner-CE68iCm0.js → Spinner-mNLZ6awP.js} +2 -2
- package/lib/{Spinner-CE68iCm0.js.map → Spinner-mNLZ6awP.js.map} +1 -1
- package/lib/{SyntaxHighlight-BEoSoPEo.js → SyntaxHighlight-CxhyyMkF.js} +6 -6
- package/lib/{SyntaxHighlight-BEoSoPEo.js.map → SyntaxHighlight-CxhyyMkF.js.map} +1 -1
- package/lib/{Toc-YBsgI72s.js → Toc-BK39DQvI.js} +3 -3
- package/lib/{Toc-YBsgI72s.js.map → Toc-BK39DQvI.js.map} +1 -1
- package/lib/{_commonjsHelpers-BkfeUUK-.js → _commonjsHelpers-B4e78b8K.js} +2 -2
- package/lib/_commonjsHelpers-B4e78b8K.js.map +1 -0
- package/lib/{chunk-HA7DTUK3-C4gP41vD.js → chunk-KNED5TY2-BUPjb3LQ.js} +314 -313
- package/lib/chunk-KNED5TY2-BUPjb3LQ.js.map +1 -0
- package/lib/{context-DLCwaMXN.js → context-Lrf2Y9bR.js} +2 -2
- package/lib/{context-DLCwaMXN.js.map → context-Lrf2Y9bR.js.map} +1 -1
- package/lib/{createServer-mYvGvmc0.js → createServer-DLN7APz_.js} +5381 -5517
- package/lib/createServer-DLN7APz_.js.map +1 -0
- package/lib/{hook-CqpVYDqN.js → hook-pPrHCB6G.js} +460 -465
- package/lib/hook-pPrHCB6G.js.map +1 -0
- package/lib/{index-PGJOZ6R-.js → index-Ba_X7EnR.js} +16 -16
- package/lib/{index-PGJOZ6R-.js.map → index-Ba_X7EnR.js.map} +1 -1
- package/lib/index-CuBIgTKC.js +316 -0
- package/lib/index-CuBIgTKC.js.map +1 -0
- package/lib/{index-Dl3Yl0yb.js → index-DcHeSvkE.js} +51 -38
- package/lib/index-DcHeSvkE.js.map +1 -0
- package/lib/index-DwT-v3zK.js.map +1 -1
- package/lib/{index-D48iOQvJ.js → index-tpbiZmWp.js} +586 -543
- package/lib/index-tpbiZmWp.js.map +1 -0
- package/lib/index.esm-D2ZUREQN.js +1216 -0
- package/lib/index.esm-D2ZUREQN.js.map +1 -0
- package/lib/jsx-runtime-C5mzlN2N.js +285 -0
- package/lib/jsx-runtime-C5mzlN2N.js.map +1 -0
- package/lib/{mutation-8LjrN7uz.js → mutation-Csa9eQDM.js} +70 -67
- package/lib/mutation-Csa9eQDM.js.map +1 -0
- package/lib/{prism-csharp.min-bQAo2pmx.js → prism-csharp.min-C43x1RY2.js} +2 -2
- package/lib/{prism-csharp.min-bQAo2pmx.js.map → prism-csharp.min-C43x1RY2.js.map} +1 -1
- package/lib/{prism-java.min-BpvsOuIa.js → prism-java.min-CQzr40NQ.js} +2 -2
- package/lib/{prism-java.min-BpvsOuIa.js.map → prism-java.min-CQzr40NQ.js.map} +1 -1
- package/lib/{prism-ruby.min-Dx9KO9ds.js → prism-ruby.min-L9OdQ6tU.js} +2 -2
- package/lib/{prism-ruby.min-Dx9KO9ds.js.map → prism-ruby.min-L9OdQ6tU.js.map} +1 -1
- package/lib/{prism-typescript.min-CD7H2IYQ.js → prism-typescript.min-qTySPvCh.js} +2 -2
- package/lib/{prism-typescript.min-CD7H2IYQ.js.map → prism-typescript.min-qTySPvCh.js.map} +1 -1
- package/lib/{post-processors → processors}/removeExtensions.js +1 -1
- package/lib/processors/removeExtensions.js.map +1 -0
- package/lib/{post-processors → processors}/removeParameters.js +1 -1
- package/lib/processors/removeParameters.js.map +1 -0
- package/lib/{post-processors → processors}/removePaths.js +1 -1
- package/lib/processors/removePaths.js.map +1 -0
- package/lib/ui/Accordion.js +1 -1
- package/lib/ui/ActionButton.js +3 -3
- package/lib/ui/Alert.js +1 -1
- package/lib/ui/AlertDialog.js +1 -1
- package/lib/ui/Badge.js +1 -1
- package/lib/ui/Breadcrumb.js +1 -1
- package/lib/ui/Button.js +1 -1
- package/lib/ui/Callout.js +10 -9
- package/lib/ui/Callout.js.map +1 -1
- package/lib/ui/Card.js +1 -1
- package/lib/ui/Carousel.js +207 -207
- package/lib/ui/Carousel.js.map +1 -1
- package/lib/ui/Checkbox.js +1 -1
- package/lib/ui/Command.js +3 -3
- package/lib/ui/Dialog.js +1 -1
- package/lib/ui/Drawer.js +2 -2
- package/lib/ui/DropdownMenu.js +1 -1
- package/lib/ui/Form.js +2 -2
- package/lib/ui/HoverCard.js +1 -1
- package/lib/ui/Input.js +1 -1
- package/lib/ui/Label.js +1 -1
- package/lib/ui/Pagination.js +1 -1
- package/lib/ui/Popover.js +1 -1
- package/lib/ui/Progress.js +1 -1
- package/lib/ui/RadioGroup.js +1 -1
- package/lib/ui/ScrollArea.js +1 -1
- package/lib/ui/Select.js +1 -1
- package/lib/ui/Skeleton.js +1 -1
- package/lib/ui/Slider.js +1 -1
- package/lib/ui/Stepper.js +1 -1
- package/lib/ui/Switch.js +1 -1
- package/lib/ui/SyntaxHighlight.js +2 -2
- package/lib/ui/Tabs.js +1 -1
- package/lib/ui/Textarea.js +1 -1
- package/lib/ui/Toggle.js +1 -1
- package/lib/ui/ToggleGroup.js +1 -1
- package/lib/ui/Tooltip.js +1 -1
- package/lib/{useExposedProps-B9qXJedG.js → useExposedProps-Dq2yUQIG.js} +2 -2
- package/lib/{useExposedProps-B9qXJedG.js.map → useExposedProps-Dq2yUQIG.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-clerk.js +4 -4
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +5 -5
- package/lib/zudoku.components.js +7 -7
- package/lib/zudoku.hooks.js +1 -1
- package/lib/zudoku.icons.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +6 -6
- package/lib/zudoku.plugin-api-keys.js +6 -6
- package/lib/zudoku.plugin-custom-pages.js +3 -3
- package/lib/zudoku.plugin-markdown.js +2 -2
- package/lib/zudoku.plugin-openapi.js +4 -4
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-search-inkeep.js +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +7 -7
- package/package.json +61 -62
- package/src/app/entry.client.tsx +2 -0
- package/src/app/main.css +8 -2
- package/src/lib/authentication/providers/clerk.tsx +2 -2
- package/src/lib/components/Footer.tsx +6 -3
- package/src/lib/components/Layout.tsx +8 -1
- package/src/lib/components/Search.tsx +14 -3
- package/src/lib/components/navigation/Sidebar.tsx +8 -1
- package/src/lib/components/navigation/SidebarWrapper.tsx +1 -1
- package/src/lib/plugins/openapi/{post-processors → processors}/removeExtensions.test.ts +29 -9
- package/src/lib/plugins/openapi/{post-processors → processors}/removeExtensions.ts +5 -3
- package/src/lib/plugins/openapi/{post-processors → processors}/removeParameters.test.ts +67 -33
- package/src/lib/plugins/openapi/{post-processors → processors}/removeParameters.ts +5 -3
- package/src/lib/plugins/openapi/processors/removePaths.test.ts +167 -0
- package/src/lib/plugins/openapi/{post-processors → processors}/removePaths.ts +5 -3
- package/src/lib/ui/Callout.tsx +1 -0
- package/src/lib/util/MdxComponents.tsx +2 -0
- package/src/lib/util/detectOS.ts +9 -0
- package/dist/lib/plugins/openapi/post-processors/removeExtensions.d.ts +0 -7
- package/dist/lib/plugins/openapi/post-processors/removeExtensions.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/removeParameters.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/removePaths.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/removePaths.test.js +0 -104
- package/dist/lib/plugins/openapi/post-processors/removePaths.test.js.map +0 -1
- package/dist/lib/plugins/openapi/post-processors/traverse.js.map +0 -1
- package/lib/Drawer-kDAfOq_2.js.map +0 -1
- package/lib/Markdown-aF5FdsNi.js.map +0 -1
- package/lib/SlotletProvider-DXvc0aY6.js.map +0 -1
- package/lib/_commonjsHelpers-BkfeUUK-.js.map +0 -1
- package/lib/chunk-HA7DTUK3-C4gP41vD.js.map +0 -1
- package/lib/createServer-mYvGvmc0.js.map +0 -1
- package/lib/hook-CqpVYDqN.js.map +0 -1
- package/lib/index-D48iOQvJ.js.map +0 -1
- package/lib/index-Dl3Yl0yb.js.map +0 -1
- package/lib/index-gQD2h1wX.js +0 -447
- package/lib/index-gQD2h1wX.js.map +0 -1
- package/lib/index.esm--gIChbWs.js +0 -1207
- package/lib/index.esm--gIChbWs.js.map +0 -1
- package/lib/jsx-runtime-CYK1ROHF.js +0 -446
- package/lib/jsx-runtime-CYK1ROHF.js.map +0 -1
- package/lib/mutation-8LjrN7uz.js.map +0 -1
- package/lib/post-processors/removeExtensions.js.map +0 -1
- package/lib/post-processors/removeParameters.js.map +0 -1
- package/lib/post-processors/removePaths.js.map +0 -1
- package/src/lib/plugins/openapi/post-processors/removePaths.test.ts +0 -126
- /package/dist/lib/plugins/openapi/{post-processors → processors}/removeExtensions.test.d.ts +0 -0
- /package/dist/lib/plugins/openapi/{post-processors → processors}/removeParameters.test.d.ts +0 -0
- /package/dist/lib/plugins/openapi/{post-processors → processors}/removePaths.test.d.ts +0 -0
- /package/dist/lib/plugins/openapi/{post-processors → processors}/traverse.d.ts +0 -0
- /package/dist/lib/plugins/openapi/{post-processors → processors}/traverse.js +0 -0
- /package/lib/{post-processors → processors}/traverse.js +0 -0
- /package/lib/{post-processors → processors}/traverse.js.map +0 -0
- /package/src/lib/plugins/openapi/{post-processors → processors}/traverse.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zudoku",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"homepage": "https://zudoku.dev",
|
|
6
6
|
"repository": {
|
|
@@ -98,9 +98,9 @@
|
|
|
98
98
|
"import": "./lib/zudoku.components.js",
|
|
99
99
|
"types": "./dist/lib/components/index.d.ts"
|
|
100
100
|
},
|
|
101
|
-
"./
|
|
102
|
-
"import": "./lib/
|
|
103
|
-
"types": "./dist/lib/plugins/openapi/
|
|
101
|
+
"./processors/*": {
|
|
102
|
+
"import": "./lib/processors/*.js",
|
|
103
|
+
"types": "./dist/lib/plugins/openapi/processors/*.d.ts"
|
|
104
104
|
},
|
|
105
105
|
"./icons": {
|
|
106
106
|
"import": "./lib/zudoku.icons.js",
|
|
@@ -127,55 +127,55 @@
|
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
129
|
"dependencies": {
|
|
130
|
-
"@apidevtools/json-schema-ref-parser": "
|
|
131
|
-
"@envelop/core": "5.
|
|
130
|
+
"@apidevtools/json-schema-ref-parser": "12.0.1",
|
|
131
|
+
"@envelop/core": "5.2.3",
|
|
132
132
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
133
133
|
"@hookform/resolvers": "4.1.3",
|
|
134
134
|
"@lekoarts/rehype-meta-as-attributes": "3.0.2",
|
|
135
135
|
"@mdx-js/react": "3.1.0",
|
|
136
136
|
"@mdx-js/rollup": "3.1.0",
|
|
137
|
-
"@pothos/core": "4.
|
|
138
|
-
"@radix-ui/react-accordion": "1.2.
|
|
139
|
-
"@radix-ui/react-alert-dialog": "1.1.
|
|
140
|
-
"@radix-ui/react-aspect-ratio": "1.1.
|
|
141
|
-
"@radix-ui/react-checkbox": "1.1.
|
|
142
|
-
"@radix-ui/react-collapsible": "1.1.
|
|
143
|
-
"@radix-ui/react-dialog": "1.1.
|
|
144
|
-
"@radix-ui/react-dropdown-menu": "2.1.
|
|
145
|
-
"@radix-ui/react-hover-card": "1.1.
|
|
146
|
-
"@radix-ui/react-label": "2.1.
|
|
147
|
-
"@radix-ui/react-popover": "1.1.
|
|
148
|
-
"@radix-ui/react-progress": "1.1.
|
|
149
|
-
"@radix-ui/react-radio-group": "1.2.
|
|
150
|
-
"@radix-ui/react-scroll-area": "1.2.
|
|
151
|
-
"@radix-ui/react-select": "2.1.
|
|
152
|
-
"@radix-ui/react-slider": "1.2.
|
|
153
|
-
"@radix-ui/react-slot": "1.
|
|
154
|
-
"@radix-ui/react-switch": "1.1.
|
|
155
|
-
"@radix-ui/react-tabs": "1.1.
|
|
156
|
-
"@radix-ui/react-toggle": "1.1.
|
|
157
|
-
"@radix-ui/react-toggle-group": "1.1.
|
|
158
|
-
"@radix-ui/react-tooltip": "1.
|
|
159
|
-
"@radix-ui/react-visually-hidden": "1.1.
|
|
160
|
-
"@scalar/openapi-parser": "0.10.
|
|
161
|
-
"@sentry/node": "9.
|
|
137
|
+
"@pothos/core": "4.6.0",
|
|
138
|
+
"@radix-ui/react-accordion": "1.2.4",
|
|
139
|
+
"@radix-ui/react-alert-dialog": "1.1.7",
|
|
140
|
+
"@radix-ui/react-aspect-ratio": "1.1.3",
|
|
141
|
+
"@radix-ui/react-checkbox": "1.1.5",
|
|
142
|
+
"@radix-ui/react-collapsible": "1.1.4",
|
|
143
|
+
"@radix-ui/react-dialog": "1.1.7",
|
|
144
|
+
"@radix-ui/react-dropdown-menu": "2.1.7",
|
|
145
|
+
"@radix-ui/react-hover-card": "1.1.7",
|
|
146
|
+
"@radix-ui/react-label": "2.1.3",
|
|
147
|
+
"@radix-ui/react-popover": "1.1.7",
|
|
148
|
+
"@radix-ui/react-progress": "1.1.3",
|
|
149
|
+
"@radix-ui/react-radio-group": "1.2.4",
|
|
150
|
+
"@radix-ui/react-scroll-area": "1.2.4",
|
|
151
|
+
"@radix-ui/react-select": "2.1.7",
|
|
152
|
+
"@radix-ui/react-slider": "1.2.4",
|
|
153
|
+
"@radix-ui/react-slot": "1.2.0",
|
|
154
|
+
"@radix-ui/react-switch": "1.1.4",
|
|
155
|
+
"@radix-ui/react-tabs": "1.1.4",
|
|
156
|
+
"@radix-ui/react-toggle": "1.1.3",
|
|
157
|
+
"@radix-ui/react-toggle-group": "1.1.3",
|
|
158
|
+
"@radix-ui/react-tooltip": "1.2.0",
|
|
159
|
+
"@radix-ui/react-visually-hidden": "1.1.3",
|
|
160
|
+
"@scalar/openapi-parser": "0.10.14",
|
|
161
|
+
"@sentry/node": "9.12.0",
|
|
162
162
|
"@sindresorhus/slugify": "2.2.1",
|
|
163
|
-
"@stefanprobst/rehype-extract-toc": "
|
|
163
|
+
"@stefanprobst/rehype-extract-toc": "3.0.0",
|
|
164
164
|
"@tailwindcss/typography": "0.5.16",
|
|
165
165
|
"@tanem/react-nprogress": "5.0.55",
|
|
166
|
-
"@tanstack/react-query": "5.
|
|
167
|
-
"@types/react": "19.
|
|
168
|
-
"@types/react-dom": "19.
|
|
166
|
+
"@tanstack/react-query": "5.74.3",
|
|
167
|
+
"@types/react": "19.1.1",
|
|
168
|
+
"@types/react-dom": "19.1.2",
|
|
169
169
|
"@vitejs/plugin-react": "4.3.4",
|
|
170
170
|
"@zudoku/httpsnippet": "10.0.9",
|
|
171
171
|
"@zudoku/react-helmet-async": "2.0.5",
|
|
172
172
|
"autoprefixer": "10.4.21",
|
|
173
173
|
"class-variance-authority": "0.7.1",
|
|
174
174
|
"clsx": "2.1.1",
|
|
175
|
-
"cmdk": "1.
|
|
175
|
+
"cmdk": "1.1.1",
|
|
176
176
|
"devlop": "^1.1.0",
|
|
177
|
-
"dotenv": "16.
|
|
178
|
-
"embla-carousel-react": "8.
|
|
177
|
+
"dotenv": "16.5.0",
|
|
178
|
+
"embla-carousel-react": "8.6.0",
|
|
179
179
|
"esm-loader-css": "^1.0.3",
|
|
180
180
|
"estree-util-value-to-estree": "3.3.3",
|
|
181
181
|
"express": "4.21.2",
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
"glob": "11.0.1",
|
|
184
184
|
"graphql": "16.10.0",
|
|
185
185
|
"graphql-type-json": "0.3.2",
|
|
186
|
-
"graphql-yoga": "5.13.
|
|
186
|
+
"graphql-yoga": "5.13.3",
|
|
187
187
|
"gray-matter": "4.0.3",
|
|
188
188
|
"hast-util-to-jsx-runtime": "^2.3.6",
|
|
189
189
|
"hast-util-to-string": "3.0.1",
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
"http-terminator": "3.2.0",
|
|
192
192
|
"loglevel": "1.9.2",
|
|
193
193
|
"lru-cache": "11.0.2",
|
|
194
|
-
"lucide-react": "0.
|
|
194
|
+
"lucide-react": "0.488.0",
|
|
195
195
|
"minimatch": "10.0.1",
|
|
196
196
|
"nanoevents": "^9.1.0",
|
|
197
197
|
"next-themes": "0.4.4",
|
|
@@ -202,13 +202,13 @@
|
|
|
202
202
|
"picocolors": "1.1.1",
|
|
203
203
|
"piscina": "5.0.0-alpha.2",
|
|
204
204
|
"postcss": "8.5.3",
|
|
205
|
-
"posthog-node": "4.
|
|
205
|
+
"posthog-node": "4.11.3",
|
|
206
206
|
"prism-react-renderer": "2.4.1",
|
|
207
207
|
"prismjs": "1.30.0",
|
|
208
208
|
"react-error-boundary": "5.0.0",
|
|
209
|
-
"react-hook-form": "7.
|
|
210
|
-
"react-is": "19.
|
|
211
|
-
"react-router": "7.
|
|
209
|
+
"react-hook-form": "7.55.0",
|
|
210
|
+
"react-is": "19.1.0",
|
|
211
|
+
"react-router": "7.5.0",
|
|
212
212
|
"rehype-mdx-import-media": "1.2.0",
|
|
213
213
|
"rehype-raw": "7.0.0",
|
|
214
214
|
"rehype-slug": "6.0.0",
|
|
@@ -217,25 +217,24 @@
|
|
|
217
217
|
"remark-directive-rehype": "0.4.2",
|
|
218
218
|
"remark-frontmatter": "5.0.0",
|
|
219
219
|
"remark-gfm": "4.0.1",
|
|
220
|
-
"remark-mdx-frontmatter": "5.
|
|
220
|
+
"remark-mdx-frontmatter": "5.1.0",
|
|
221
221
|
"remark-parse": "^11.0.0",
|
|
222
|
-
"remark-rehype": "^11.1.
|
|
223
|
-
"rollup": "4.
|
|
222
|
+
"remark-rehype": "^11.1.2",
|
|
223
|
+
"rollup": "4.40.0",
|
|
224
224
|
"semver": "7.7.1",
|
|
225
225
|
"sitemap": "8.0.0",
|
|
226
226
|
"spin-delay": "2.0.1",
|
|
227
227
|
"strip-ansi": "7.1.0",
|
|
228
228
|
"tailwind-merge": "2.6.0",
|
|
229
229
|
"tailwindcss": "3.4.17",
|
|
230
|
-
"tsx": "^4.19.3",
|
|
231
230
|
"ulidx": "2.4.1",
|
|
232
231
|
"unified": "^11.0.5",
|
|
233
232
|
"unist-util-visit": "5.0.0",
|
|
234
233
|
"urql": "4.2.1",
|
|
235
234
|
"vaul": "1.1.2",
|
|
236
235
|
"vfile": "6.0.3",
|
|
237
|
-
"vite": "6.2.
|
|
238
|
-
"yaml": "2.7.
|
|
236
|
+
"vite": "6.2.6",
|
|
237
|
+
"yaml": "2.7.1",
|
|
239
238
|
"yargs": "17.7.2",
|
|
240
239
|
"zod": "3.24.2",
|
|
241
240
|
"zod-validation-error": "3.4.0",
|
|
@@ -244,9 +243,9 @@
|
|
|
244
243
|
"devDependencies": {
|
|
245
244
|
"@graphql-codegen/cli": "5.0.5",
|
|
246
245
|
"@graphql-codegen/client-preset": "4.8.0",
|
|
247
|
-
"@testing-library/react": "16.
|
|
246
|
+
"@testing-library/react": "16.3.0",
|
|
248
247
|
"@types/estree": "1.0.7",
|
|
249
|
-
"@types/express": "5.0.
|
|
248
|
+
"@types/express": "5.0.1",
|
|
250
249
|
"@types/har-format": "1.2.16",
|
|
251
250
|
"@types/hast": "^3.0.4",
|
|
252
251
|
"@types/json-schema": "7.0.15",
|
|
@@ -255,31 +254,31 @@
|
|
|
255
254
|
"@types/node": "22.13.5",
|
|
256
255
|
"@types/object-hash": "3.0.6",
|
|
257
256
|
"@types/react-is": "19.0.0",
|
|
258
|
-
"@types/semver": "7.
|
|
257
|
+
"@types/semver": "7.7.0",
|
|
259
258
|
"@types/unist": "^3.0.3",
|
|
260
259
|
"@types/yargs": "17.0.33",
|
|
261
|
-
"@vitest/coverage-v8": "3.
|
|
260
|
+
"@vitest/coverage-v8": "3.1.1",
|
|
262
261
|
"happy-dom": "17.4.4",
|
|
263
262
|
"mdast-util-mdx": "3.0.0",
|
|
264
|
-
"react": "19.
|
|
265
|
-
"react-dom": "19.
|
|
263
|
+
"react": "19.1.0",
|
|
264
|
+
"react-dom": "19.1.0",
|
|
266
265
|
"rollup-plugin-visualizer": "5.14.0",
|
|
267
|
-
"typescript": "5.
|
|
268
|
-
"vitest": "3.
|
|
266
|
+
"typescript": "5.8.3",
|
|
267
|
+
"vitest": "3.1.1"
|
|
269
268
|
},
|
|
270
269
|
"peerDependencies": {
|
|
271
270
|
"react": ">=19",
|
|
272
271
|
"react-dom": ">=19"
|
|
273
272
|
},
|
|
274
273
|
"optionalDependencies": {
|
|
275
|
-
"@clerk/clerk-js": "^5.
|
|
276
|
-
"@sentry/react": "^9.
|
|
277
|
-
"@supabase/supabase-js": "^2.49.
|
|
274
|
+
"@clerk/clerk-js": "^5.60.0",
|
|
275
|
+
"@sentry/react": "^9.12.0",
|
|
276
|
+
"@supabase/supabase-js": "^2.49.4"
|
|
278
277
|
},
|
|
279
278
|
"scripts": {
|
|
280
279
|
"build": "tsc --project tsconfig.app.json",
|
|
281
280
|
"build:vite": "vite build",
|
|
282
|
-
"generate:icon-types": "
|
|
281
|
+
"generate:icon-types": "node scripts/generate-icon-types.js",
|
|
283
282
|
"build:standalone:vite": "vite build --mode standalone --config vite.standalone.config.ts",
|
|
284
283
|
"build:standalone:html": "cp ./src/app/standalone.html ./standalone/standalone.html && cp ./src/app/demo.html ./standalone/demo.html && cp ./src/app/demo-cdn.html ./standalone/index.html && cp standalone/zudoku.css standalone/style.css",
|
|
285
284
|
"clean": "tsc --build --clean",
|
package/src/app/entry.client.tsx
CHANGED
|
@@ -43,6 +43,8 @@ async function hydrateLazyRoutes(routes: RouteObject[]) {
|
|
|
43
43
|
if (lazyMatches?.length) {
|
|
44
44
|
await Promise.all(
|
|
45
45
|
lazyMatches.map(async (m) => {
|
|
46
|
+
if (typeof m.route.lazy !== "function") return;
|
|
47
|
+
|
|
46
48
|
const routeModule = await m.route.lazy!();
|
|
47
49
|
Object.assign(m.route, { ...routeModule, lazy: undefined });
|
|
48
50
|
}),
|
package/src/app/main.css
CHANGED
|
@@ -127,6 +127,12 @@
|
|
|
127
127
|
@apply bg-primary/100 text-primary-foreground;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
.bg-primary::selection,
|
|
131
|
+
.bg-primary ::selection {
|
|
132
|
+
background: theme(colors.background);
|
|
133
|
+
color: theme(colors.foreground);
|
|
134
|
+
}
|
|
135
|
+
|
|
130
136
|
.dark {
|
|
131
137
|
color-scheme: dark;
|
|
132
138
|
}
|
|
@@ -327,8 +333,8 @@
|
|
|
327
333
|
|
|
328
334
|
/* Vertical line */
|
|
329
335
|
.stepper > ol > li::after {
|
|
330
|
-
@apply absolute content-[''] w-[2px] bg-border -translate-x-1/2;
|
|
331
|
-
|
|
336
|
+
@apply absolute content-[''] w-[2px] bg-border -translate-x-1/2 rtl:translate-x-1/2;
|
|
337
|
+
inset-inline-start: calc(var(--bullet-size) / 2);
|
|
332
338
|
top: calc(var(--bullet-size) + var(--line-spacing));
|
|
333
339
|
height: calc(100% - var(--bullet-size) - (2 * var(--line-spacing)));
|
|
334
340
|
}
|
|
@@ -126,7 +126,7 @@ const clerkAuth: AuthenticationProviderInitializer<
|
|
|
126
126
|
providerData: null,
|
|
127
127
|
});
|
|
128
128
|
},
|
|
129
|
-
signIn: async ({ redirectTo }: { redirectTo?: string }) => {
|
|
129
|
+
signIn: async ({ redirectTo }: { redirectTo?: string } = {}) => {
|
|
130
130
|
await ensureLoaded;
|
|
131
131
|
await clerkApi?.redirectToSignIn({
|
|
132
132
|
signInForceRedirectUrl:
|
|
@@ -135,7 +135,7 @@ const clerkAuth: AuthenticationProviderInitializer<
|
|
|
135
135
|
redirectTo ?? window.location.origin + redirectToAfterSignUp,
|
|
136
136
|
});
|
|
137
137
|
},
|
|
138
|
-
signUp: async ({ redirectTo }: { redirectTo?: string }) => {
|
|
138
|
+
signUp: async ({ redirectTo }: { redirectTo?: string } = {}) => {
|
|
139
139
|
await ensureLoaded;
|
|
140
140
|
await clerkApi?.redirectToSignUp({
|
|
141
141
|
signInForceRedirectUrl:
|
|
@@ -59,12 +59,12 @@ export const Footer = () => {
|
|
|
59
59
|
>
|
|
60
60
|
<span className="text-sm font-semibold">{column.title}</span>
|
|
61
61
|
<ul className="mt-4 space-y-2">
|
|
62
|
-
{column.links.map((link) => {
|
|
62
|
+
{column.links.map((link, i) => {
|
|
63
63
|
const className =
|
|
64
64
|
"flex flex-row gap-1 items-center text-sm text-muted-foreground hover:text-accent-foreground";
|
|
65
65
|
|
|
66
66
|
return (
|
|
67
|
-
<li key={link.href}>
|
|
67
|
+
<li key={link.href + i}>
|
|
68
68
|
{isExternalUrl(link.href) ? (
|
|
69
69
|
<a
|
|
70
70
|
href={link.href}
|
|
@@ -76,7 +76,10 @@ export const Footer = () => {
|
|
|
76
76
|
<ExternalLinkIcon size={12} />
|
|
77
77
|
</a>
|
|
78
78
|
) : (
|
|
79
|
-
<AnchorLink
|
|
79
|
+
<AnchorLink
|
|
80
|
+
to={link.href + i}
|
|
81
|
+
className={className}
|
|
82
|
+
>
|
|
80
83
|
<span>{link.label}</span>
|
|
81
84
|
</AnchorLink>
|
|
82
85
|
)}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Helmet } from "@zudoku/react-helmet-async";
|
|
2
2
|
import { Suspense, useEffect, type ReactNode } from "react";
|
|
3
3
|
import { Outlet, useLocation } from "react-router";
|
|
4
|
+
import { cn } from "../util/cn.js";
|
|
4
5
|
import { joinUrl } from "../util/joinUrl.js";
|
|
5
6
|
import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
|
|
6
7
|
import { useScrollToTop } from "../util/useScrollToTop.js";
|
|
@@ -54,7 +55,13 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
|
|
|
54
55
|
<Header />
|
|
55
56
|
<Slotlet name="layout-after-head" />
|
|
56
57
|
|
|
57
|
-
<div
|
|
58
|
+
<div
|
|
59
|
+
className={cn(
|
|
60
|
+
"grid max-w-screen-2xl w-full lg:mx-auto",
|
|
61
|
+
"has-[:only-child]:grid-rows-1 grid-rows-[0_min-content_1fr] lg:grid-rows-[min-content_1fr]",
|
|
62
|
+
"grid-cols-1 lg:grid-cols-[var(--side-nav-width)_1fr]",
|
|
63
|
+
)}
|
|
64
|
+
>
|
|
58
65
|
<Suspense fallback={<LoadingFallback />}>
|
|
59
66
|
<Main>{children ?? <Outlet />}</Main>
|
|
60
67
|
</Suspense>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SearchIcon } from "lucide-react";
|
|
2
2
|
import { Suspense, useCallback, useEffect, useState } from "react";
|
|
3
3
|
import { isSearchPlugin } from "../core/plugins.js";
|
|
4
|
+
import { detectOS } from "../util/detectOS.js";
|
|
5
|
+
import { ClientOnly } from "./ClientOnly.js";
|
|
4
6
|
import { useZudoku } from "./context/ZudokuContext.js";
|
|
5
7
|
|
|
6
8
|
export const Search = ({ className }: { className?: string }) => {
|
|
@@ -45,9 +47,9 @@ export const Search = ({ className }: { className?: string }) => {
|
|
|
45
47
|
<SearchIcon size={14} />
|
|
46
48
|
Search
|
|
47
49
|
</div>
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
</
|
|
50
|
+
<ClientOnly>
|
|
51
|
+
<KbdShortcut />
|
|
52
|
+
</ClientOnly>
|
|
51
53
|
</button>
|
|
52
54
|
<Suspense fallback={null}>
|
|
53
55
|
{searchPlugin.renderSearch({
|
|
@@ -58,3 +60,12 @@ export const Search = ({ className }: { className?: string }) => {
|
|
|
58
60
|
</div>
|
|
59
61
|
);
|
|
60
62
|
};
|
|
63
|
+
|
|
64
|
+
const KbdShortcut = () => {
|
|
65
|
+
const os = detectOS();
|
|
66
|
+
return (
|
|
67
|
+
<kbd className="absolute right-[0.3rem] top-[0.35rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex">
|
|
68
|
+
{os === "macOS" ? "⌘" : "Ctrl"}+K
|
|
69
|
+
</kbd>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
@@ -16,7 +16,14 @@ export const Sidebar = ({
|
|
|
16
16
|
<SidebarWrapper>
|
|
17
17
|
<Slotlet name="zudoku-before-navigation" />
|
|
18
18
|
{sidebar.map((item) => (
|
|
19
|
-
<SidebarItem
|
|
19
|
+
<SidebarItem
|
|
20
|
+
key={
|
|
21
|
+
("id" in item ? item.id : "") +
|
|
22
|
+
("href" in item ? item.href : "") +
|
|
23
|
+
item.label
|
|
24
|
+
}
|
|
25
|
+
item={item}
|
|
26
|
+
/>
|
|
20
27
|
))}
|
|
21
28
|
<Slotlet name="zudoku-after-navigation" />
|
|
22
29
|
</SidebarWrapper>
|
|
@@ -24,7 +24,7 @@ export const SidebarWrapper = ({
|
|
|
24
24
|
ref={navRef}
|
|
25
25
|
className={cn(
|
|
26
26
|
"hidden max-w-[calc(var(--side-nav-width)+var(--padding-nav-item))] lg:flex scrollbar flex-col overflow-y-auto shrink-0 text-sm pe-3 ps-4 lg:ps-8",
|
|
27
|
-
"-mx-[--padding-nav-item] pb-
|
|
27
|
+
"-mx-[--padding-nav-item] pb-[8vh] pt-[--padding-content-top] scroll-pt-2 gap-1",
|
|
28
28
|
// Revert the padding/margin on the first child
|
|
29
29
|
"-mt-2.5",
|
|
30
30
|
className,
|
|
@@ -64,11 +64,15 @@ const baseDoc = {
|
|
|
64
64
|
},
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
|
-
};
|
|
67
|
+
} as any;
|
|
68
68
|
|
|
69
69
|
describe("removeExtensions", () => {
|
|
70
70
|
it("removes all x- extensions by default", () => {
|
|
71
|
-
const processed = removeExtensions()(
|
|
71
|
+
const processed = removeExtensions()({
|
|
72
|
+
schema: baseDoc,
|
|
73
|
+
file: "/file.json",
|
|
74
|
+
dereference: async (id) => id,
|
|
75
|
+
});
|
|
72
76
|
|
|
73
77
|
const removedExtensions = [
|
|
74
78
|
"x-root-ext",
|
|
@@ -93,7 +97,7 @@ describe("removeExtensions", () => {
|
|
|
93
97
|
["paths", "/test", "get", "responses", "200", "description"],
|
|
94
98
|
"OK",
|
|
95
99
|
);
|
|
96
|
-
expect(processed.tags[0]
|
|
100
|
+
expect(processed.tags?.[0]?.name).toBe("example");
|
|
97
101
|
});
|
|
98
102
|
|
|
99
103
|
it("removes only specified x- extensions when names are provided", () => {
|
|
@@ -104,7 +108,11 @@ describe("removeExtensions", () => {
|
|
|
104
108
|
|
|
105
109
|
const processed = removeExtensions({
|
|
106
110
|
keys: ["x-path-ext", "x-param-ext"],
|
|
107
|
-
})(
|
|
111
|
+
})({
|
|
112
|
+
schema: docWithExtraExtensions,
|
|
113
|
+
file: "/file.json",
|
|
114
|
+
dereference: async (id) => id,
|
|
115
|
+
}) as any;
|
|
108
116
|
|
|
109
117
|
// Assert specified extensions are removed
|
|
110
118
|
expect(processed.paths["/test"]["x-path-ext"]).toBeUndefined();
|
|
@@ -131,9 +139,13 @@ describe("removeExtensions", () => {
|
|
|
131
139
|
},
|
|
132
140
|
},
|
|
133
141
|
},
|
|
134
|
-
};
|
|
142
|
+
} as any;
|
|
135
143
|
|
|
136
|
-
const processed = removeExtensions()(
|
|
144
|
+
const processed = removeExtensions()({
|
|
145
|
+
schema: deeplyNested,
|
|
146
|
+
file: "/file.json",
|
|
147
|
+
dereference: async (id) => id,
|
|
148
|
+
}) as any;
|
|
137
149
|
|
|
138
150
|
expect(processed.a.b.c["x-deep-ext"]).toBeUndefined();
|
|
139
151
|
expect(processed.a.b.c.d["x-another-ext"]).toBeUndefined();
|
|
@@ -144,9 +156,13 @@ describe("removeExtensions", () => {
|
|
|
144
156
|
const docWithoutExtensions = {
|
|
145
157
|
openapi: "3.1.0",
|
|
146
158
|
info: { title: "API without extensions" },
|
|
147
|
-
};
|
|
159
|
+
} as any;
|
|
148
160
|
|
|
149
|
-
const processed = removeExtensions()(
|
|
161
|
+
const processed = removeExtensions()({
|
|
162
|
+
schema: docWithoutExtensions,
|
|
163
|
+
file: "/file.json",
|
|
164
|
+
dereference: async (id) => id,
|
|
165
|
+
});
|
|
150
166
|
|
|
151
167
|
expect(processed).toEqual(docWithoutExtensions);
|
|
152
168
|
});
|
|
@@ -154,7 +170,11 @@ describe("removeExtensions", () => {
|
|
|
154
170
|
it("removes extensions based on shouldRemove callback", () => {
|
|
155
171
|
const processed = removeExtensions({
|
|
156
172
|
shouldRemove: (key) => key.startsWith("x-zuplo"),
|
|
157
|
-
})(
|
|
173
|
+
})({
|
|
174
|
+
schema: baseDoc,
|
|
175
|
+
file: "/file.json",
|
|
176
|
+
dereference: async (id) => id,
|
|
177
|
+
});
|
|
158
178
|
|
|
159
179
|
// Should remove x-zuplo extensions
|
|
160
180
|
const removedExtensions = [
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ProcessorArg } from "../../../../config/validators/BuildSchema.js";
|
|
2
|
+
import type { OpenAPIDocument } from "../../../oas/parser/index.js";
|
|
1
3
|
import { type RecordAny, traverse } from "./traverse.js";
|
|
2
4
|
|
|
3
5
|
interface RemoveExtensionsOptions {
|
|
@@ -8,8 +10,8 @@ interface RemoveExtensionsOptions {
|
|
|
8
10
|
// Remove all `x-` prefixed key/value pairs, or filter by names if provided
|
|
9
11
|
export const removeExtensions =
|
|
10
12
|
({ keys, shouldRemove }: RemoveExtensionsOptions = {}) =>
|
|
11
|
-
(
|
|
12
|
-
traverse(
|
|
13
|
+
({ schema }: ProcessorArg) =>
|
|
14
|
+
traverse(schema, (spec) => {
|
|
13
15
|
const result: RecordAny = {};
|
|
14
16
|
|
|
15
17
|
for (const [key, value] of Object.entries(spec)) {
|
|
@@ -24,4 +26,4 @@ export const removeExtensions =
|
|
|
24
26
|
result[key] = value;
|
|
25
27
|
}
|
|
26
28
|
return result;
|
|
27
|
-
});
|
|
29
|
+
}) as OpenAPIDocument;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type OpenAPIV3_1 } from "openapi-types";
|
|
2
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
+
import type { OpenAPIDocument } from "../../../oas/parser/index.js";
|
|
3
3
|
import { removeParameters } from "./removeParameters.js";
|
|
4
4
|
|
|
5
|
-
const baseDoc:
|
|
5
|
+
const baseDoc: OpenAPIDocument = {
|
|
6
6
|
openapi: "3.1.0",
|
|
7
7
|
info: {
|
|
8
8
|
title: "Test API",
|
|
@@ -67,45 +67,67 @@ describe("removeParameters", () => {
|
|
|
67
67
|
it("removes parameters by name", () => {
|
|
68
68
|
const processed = removeParameters({
|
|
69
69
|
names: ["pathParam", "opParam"],
|
|
70
|
-
})(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
})({
|
|
71
|
+
schema: baseDoc,
|
|
72
|
+
file: "/file.json",
|
|
73
|
+
dereference: async (id) => id,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
expect(processed.paths?.["/test"]?.parameters).toHaveLength(1);
|
|
77
|
+
expect(processed.paths?.["/test"]?.parameters?.[0]?.name).toBe(
|
|
78
|
+
"pathHeader",
|
|
79
|
+
);
|
|
80
|
+
expect(processed.paths?.["/test"]?.get?.parameters).toHaveLength(1);
|
|
81
|
+
expect(processed.paths?.["/test"]?.get?.parameters?.[0]?.name).toBe(
|
|
82
|
+
"opHeader",
|
|
83
|
+
);
|
|
76
84
|
});
|
|
77
85
|
|
|
78
86
|
it("removes parameters by location", () => {
|
|
79
87
|
const processed = removeParameters({
|
|
80
88
|
in: ["header"],
|
|
81
|
-
})(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
})({
|
|
90
|
+
schema: baseDoc,
|
|
91
|
+
file: "/file.json",
|
|
92
|
+
dereference: async (id) => id,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
expect(processed.paths?.["/test"]?.parameters).toHaveLength(1);
|
|
96
|
+
expect(processed.paths?.["/test"]?.parameters?.[0]?.in).toBe("path");
|
|
97
|
+
expect(processed.paths?.["/test"]?.get?.parameters).toHaveLength(1);
|
|
98
|
+
expect(processed.paths?.["/test"]?.get?.parameters?.[0]?.in).toBe("query");
|
|
87
99
|
});
|
|
88
100
|
|
|
89
101
|
it("removes parameters using shouldRemove callback", () => {
|
|
90
102
|
const processed = removeParameters({
|
|
91
103
|
shouldRemove: ({ parameter }) =>
|
|
92
104
|
parameter.in === "header" && parameter.name.includes("op"),
|
|
93
|
-
})(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
105
|
+
})({
|
|
106
|
+
schema: baseDoc,
|
|
107
|
+
file: "/file.json",
|
|
108
|
+
dereference: async (id) => id,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
expect(processed.paths?.["/test"]?.parameters).toHaveLength(2);
|
|
112
|
+
expect(processed.paths?.["/test"]?.get?.parameters).toHaveLength(1);
|
|
113
|
+
expect(processed.paths?.["/test"]?.get?.parameters?.[0]?.name).toBe(
|
|
114
|
+
"opParam",
|
|
115
|
+
);
|
|
98
116
|
});
|
|
99
117
|
|
|
100
118
|
it("combines multiple removal criteria", () => {
|
|
101
119
|
const processed = removeParameters({
|
|
102
120
|
in: ["query", "header"],
|
|
103
121
|
shouldRemove: ({ parameter }) => parameter.name === "pathHeader",
|
|
104
|
-
})(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
122
|
+
})({
|
|
123
|
+
schema: baseDoc,
|
|
124
|
+
file: "/file.json",
|
|
125
|
+
dereference: async (id) => id,
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
expect(processed.paths?.["/test"]?.parameters).toHaveLength(1);
|
|
129
|
+
expect(processed.paths?.["/test"]?.parameters?.[0]?.name).toBe("pathParam");
|
|
130
|
+
expect(processed.paths?.["/test"]?.get?.parameters).toHaveLength(0);
|
|
109
131
|
});
|
|
110
132
|
|
|
111
133
|
it("handles missing parameters arrays", () => {
|
|
@@ -118,11 +140,15 @@ describe("removeParameters", () => {
|
|
|
118
140
|
},
|
|
119
141
|
},
|
|
120
142
|
},
|
|
121
|
-
};
|
|
143
|
+
} as any;
|
|
122
144
|
|
|
123
145
|
const processed = removeParameters({
|
|
124
146
|
names: ["someParam"],
|
|
125
|
-
})(
|
|
147
|
+
})({
|
|
148
|
+
schema: docWithoutParams,
|
|
149
|
+
file: "/file.json",
|
|
150
|
+
dereference: async (id) => id,
|
|
151
|
+
});
|
|
126
152
|
|
|
127
153
|
expect(processed).toEqual(docWithoutParams);
|
|
128
154
|
});
|
|
@@ -130,19 +156,27 @@ describe("removeParameters", () => {
|
|
|
130
156
|
it("preserves non-parameter properties", () => {
|
|
131
157
|
const processed = removeParameters({
|
|
132
158
|
names: ["globalParam"],
|
|
133
|
-
})(
|
|
159
|
+
})({
|
|
160
|
+
schema: baseDoc,
|
|
161
|
+
file: "/file.json",
|
|
162
|
+
dereference: async (id) => id,
|
|
163
|
+
});
|
|
134
164
|
|
|
135
165
|
expect(processed.openapi).toBe("3.1.0");
|
|
136
|
-
expect(processed.paths["/test"]
|
|
166
|
+
expect(processed.paths?.["/test"]?.get).toBeDefined();
|
|
137
167
|
});
|
|
138
168
|
|
|
139
169
|
it("removes parameters from components", () => {
|
|
140
170
|
const processed = removeParameters({
|
|
141
171
|
in: ["header"],
|
|
142
|
-
})(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
172
|
+
})({
|
|
173
|
+
schema: baseDoc,
|
|
174
|
+
file: "/file.json",
|
|
175
|
+
dereference: async (id) => id,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
expect(Object.keys(processed.components?.parameters ?? {})).toHaveLength(1);
|
|
179
|
+
expect(processed.components?.parameters?.commonParam).toBeDefined();
|
|
180
|
+
expect(processed.components?.parameters?.headerParam).toBeUndefined();
|
|
147
181
|
});
|
|
148
182
|
});
|