diff --git a/example/__snapshots__/index.spec.ts.snap b/example/__snapshots__/index.spec.ts.snap index a852623536..9086483737 100644 --- a/example/__snapshots__/index.spec.ts.snap +++ b/example/__snapshots__/index.spec.ts.snap @@ -17,12 +17,14 @@ exports[`Example > Client > Should perform the request with a positive response { "features": [ { + "features": [], "title": "Above 180cm", }, ], "title": "Tall", }, { + "features": [], "title": "Young", }, { @@ -30,6 +32,7 @@ exports[`Example > Client > Should perform the request with a positive response { "features": [ { + "features": [], "title": "About Typescript", }, ], @@ -100,6 +103,45 @@ exports[`Example > Positive > Should accept raw data 1 1`] = ` } `; +exports[`Example > Positive > Should handle valid GET request 1`] = ` +{ + "data": { + "features": [ + { + "features": [ + { + "features": [], + "title": "Above 180cm", + }, + ], + "title": "Tall", + }, + { + "features": [], + "title": "Young", + }, + { + "features": [ + { + "features": [ + { + "features": [], + "title": "About Typescript", + }, + ], + "title": "Tells funny jokes", + }, + ], + "title": "Cute", + }, + ], + "id": 50, + "name": "John Doe", + }, + "status": "success", +} +`; + exports[`Example > Positive > Should send an image with a correct header 1`] = `"f39beeff92379dc935586d726211c2620be6f879"`; exports[`Example > Positive > Should serve static files 1`] = `"f39beeff92379dc935586d726211c2620be6f879"`; diff --git a/example/endpoints/retrieve-user.ts b/example/endpoints/retrieve-user.ts index cc162e684c..886409a811 100644 --- a/example/endpoints/retrieve-user.ts +++ b/example/endpoints/retrieve-user.ts @@ -8,7 +8,7 @@ import { methodProviderMiddleware } from "../middlewares"; const feature = z.object({ title: z.string(), get features() { - return z.array(feature).optional(); + return z.array(feature); }, }); @@ -39,14 +39,14 @@ export const retrieveUserEndpoint = defaultEndpointsFactory id, name, features: [ - { title: "Tall", features: [{ title: "Above 180cm" }] }, - { title: "Young" }, + { title: "Tall", features: [{ title: "Above 180cm", features: [] }] }, + { title: "Young", features: [] }, { title: "Cute", features: [ { title: "Tells funny jokes", - features: [{ title: "About Typescript" }], + features: [{ title: "About Typescript", features: [] }], }, ], }, diff --git a/example/example.client.ts b/example/example.client.ts index c2525d3e0c..f3d322decc 100644 --- a/example/example.client.ts +++ b/example/example.client.ts @@ -1,6 +1,6 @@ type Type1 = { title: string; - features?: Type1[] | undefined; + features: Type1[]; }; type SomeOf = T[keyof T]; diff --git a/example/example.documentation.yaml b/example/example.documentation.yaml index 58b31493f6..488c0c473f 100644 --- a/example/example.documentation.yaml +++ b/example/example.documentation.yaml @@ -842,6 +842,7 @@ components: $ref: "#/components/schemas/Schema1" required: - title + - features additionalProperties: false responses: {} parameters: {} diff --git a/example/index.spec.ts b/example/index.spec.ts index 746ce26bbd..e6b84c2952 100644 --- a/example/index.spec.ts +++ b/example/index.spec.ts @@ -106,29 +106,7 @@ describe("Example", async () => { ); expect(response.status).toBe(200); const json = await response.json(); - expect(json).toEqual({ - status: "success", - data: { - id: 50, - name: "John Doe", - features: [ - { - title: "Tall", - features: [{ title: "Above 180cm" }], - }, - { title: "Young" }, - { - title: "Cute", - features: [ - { - title: "Tells funny jokes", - features: [{ title: "About Typescript" }], - }, - ], - }, - ], - }, - }); + expect(json).toMatchSnapshot(); await vi.waitFor(() => assert([/v1\/user\/retrieve/, /50, method get/].every(matchOut)), ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5ab41f05a..fb4446eb17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ catalogs: version: 2.0.0 typescript: specifier: ^5.8.3 - version: 5.8.3 + version: 5.9.2 typescript-eslint: specifier: ^8.35.1 version: 8.38.0 @@ -74,7 +74,7 @@ importers: version: 10.1.8(eslint@9.32.0) eslint-plugin-allowed-dependencies: specifier: ^1.3.1 - version: 1.3.1(eslint@9.32.0)(typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3)) + version: 1.3.1(eslint@9.32.0)(typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2)) eslint-plugin-prettier: specifier: ^5.4.1 version: 5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2) @@ -86,13 +86,13 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.0 - version: 8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0) tsx: specifier: ^4.19.4 version: 4.20.3 typescript-eslint: specifier: catalog:dev - version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) vitest: specifier: ^3.2.3 version: 3.2.4(@types/node@24.1.0)(tsx@4.20.3)(yaml@2.8.0) @@ -161,7 +161,7 @@ importers: version: 5.0.1(express@5.1.0) typescript: specifier: catalog:dev - version: 5.8.3 + version: 5.9.2 undici: specifier: catalog:dev version: 6.21.3 @@ -243,7 +243,7 @@ importers: version: 2.3.0 typescript: specifier: catalog:dev - version: 5.8.3 + version: 5.9.2 undici: specifier: catalog:dev version: 6.21.3 @@ -264,7 +264,7 @@ importers: version: link:../express-zod-api typescript: specifier: catalog:dev - version: 5.8.3 + version: 5.9.2 zod: specifier: catalog:dev version: 4.0.14 @@ -273,7 +273,7 @@ importers: devDependencies: '@typescript-eslint/rule-tester': specifier: catalog:dev - version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) packages: @@ -2218,8 +2218,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -2805,20 +2805,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -2835,32 +2835,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/rule-tester@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) ajv: 6.12.6 eslint: 9.32.0 json-stable-stringify-without-jsonify: 1.0.1 @@ -2880,9 +2880,9 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 '@typescript-eslint/type-utils@8.0.0(eslint@9.0.0)(typescript@5.1.3)': dependencies: @@ -2896,15 +2896,15 @@ snapshots: - eslint - supports-color - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -2927,10 +2927,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 @@ -2938,8 +2938,8 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -2954,14 +2954,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3339,11 +3339,11 @@ snapshots: dependencies: eslint: 9.32.0 - eslint-plugin-allowed-dependencies@1.3.1(eslint@9.32.0)(typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3)): + eslint-plugin-allowed-dependencies@1.3.1(eslint@9.32.0)(typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2)): dependencies: eslint: 9.32.0 ramda: 0.31.3 - typescript-eslint: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + typescript-eslint: 8.38.0(eslint@9.32.0)(typescript@5.9.2) eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2): dependencies: @@ -4270,15 +4270,15 @@ snapshots: dependencies: typescript: 5.1.3 - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 ts-interface-checker@0.1.13: {} ts-toolbelt@9.6.0: {} - tsup@8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.5.0(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.8) cac: 6.7.14 @@ -4299,7 +4299,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color @@ -4343,14 +4343,14 @@ snapshots: - eslint - supports-color - typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -4358,7 +4358,7 @@ snapshots: typescript@5.6.1-rc: {} - typescript@5.8.3: {} + typescript@5.9.2: {} ufo@1.6.1: {}