@furystack/rest-service 12.2.1 → 12.3.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/esm/api-manager.d.ts +1 -1
  3. package/esm/api-manager.d.ts.map +1 -1
  4. package/esm/api-manager.js +3 -2
  5. package/esm/api-manager.js.map +1 -1
  6. package/esm/authenticate.spec.js +1 -2
  7. package/esm/authenticate.spec.js.map +1 -1
  8. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +29 -0
  9. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -0
  10. package/esm/endpoint-generators/create-get-openapi-document-action.js +61 -0
  11. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -0
  12. package/esm/endpoint-generators/index.d.ts +2 -0
  13. package/esm/endpoint-generators/index.d.ts.map +1 -1
  14. package/esm/endpoint-generators/index.js +2 -0
  15. package/esm/endpoint-generators/index.js.map +1 -1
  16. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +23 -0
  17. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -0
  18. package/esm/endpoint-generators/with-schema-and-openapi-action.js +2 -0
  19. package/esm/endpoint-generators/with-schema-and-openapi-action.js.map +1 -0
  20. package/esm/openapi/auth-provider-to-security-scheme.d.ts +14 -0
  21. package/esm/openapi/auth-provider-to-security-scheme.d.ts.map +1 -0
  22. package/esm/openapi/auth-provider-to-security-scheme.js +35 -0
  23. package/esm/openapi/auth-provider-to-security-scheme.js.map +1 -0
  24. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts +2 -0
  25. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts.map +1 -0
  26. package/esm/openapi/auth-provider-to-security-scheme.spec.js +42 -0
  27. package/esm/openapi/auth-provider-to-security-scheme.spec.js.map +1 -0
  28. package/esm/openapi/generate-openapi-document.d.ts +21 -0
  29. package/esm/openapi/generate-openapi-document.d.ts.map +1 -0
  30. package/esm/openapi/generate-openapi-document.js +144 -0
  31. package/esm/openapi/generate-openapi-document.js.map +1 -0
  32. package/esm/openapi/generate-openapi-document.spec.d.ts +2 -0
  33. package/esm/openapi/generate-openapi-document.spec.d.ts.map +1 -0
  34. package/esm/openapi/generate-openapi-document.spec.js +643 -0
  35. package/esm/openapi/generate-openapi-document.spec.js.map +1 -0
  36. package/esm/openapi/openapi-round-trip.advanced-api.json +363 -0
  37. package/esm/openapi/openapi-round-trip.crud-api.json +115 -0
  38. package/esm/openapi/openapi-round-trip.example-api.json +71 -0
  39. package/esm/openapi/openapi-round-trip.spec.d.ts +2 -0
  40. package/esm/openapi/openapi-round-trip.spec.d.ts.map +1 -0
  41. package/esm/openapi/openapi-round-trip.spec.js +525 -0
  42. package/esm/openapi/openapi-round-trip.spec.js.map +1 -0
  43. package/esm/swagger/generate-swagger-json.spec.js +1 -1
  44. package/esm/swagger/generate-swagger-json.spec.js.map +1 -1
  45. package/esm/validate.integration.spec.js +153 -32
  46. package/esm/validate.integration.spec.js.map +1 -1
  47. package/package.json +7 -7
  48. package/src/api-manager.ts +7 -3
  49. package/src/authenticate.spec.ts +6 -2
  50. package/src/endpoint-generators/create-get-openapi-document-action.ts +96 -0
  51. package/src/endpoint-generators/index.ts +2 -0
  52. package/src/endpoint-generators/with-schema-and-openapi-action.ts +14 -0
  53. package/src/openapi/auth-provider-to-security-scheme.spec.ts +50 -0
  54. package/src/openapi/auth-provider-to-security-scheme.ts +41 -0
  55. package/src/openapi/generate-openapi-document.spec.ts +733 -0
  56. package/src/openapi/generate-openapi-document.ts +198 -0
  57. package/src/openapi/openapi-round-trip.advanced-api.json +363 -0
  58. package/src/openapi/openapi-round-trip.crud-api.json +115 -0
  59. package/src/openapi/openapi-round-trip.example-api.json +71 -0
  60. package/src/openapi/openapi-round-trip.spec.ts +621 -0
  61. package/src/swagger/generate-swagger-json.spec.ts +1 -1
  62. package/src/validate.integration.spec.ts +184 -33
  63. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts +0 -14
  64. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts.map +0 -1
  65. package/esm/endpoint-generators/create-get-swagger-json-action.js +0 -18
  66. package/esm/endpoint-generators/create-get-swagger-json-action.js.map +0 -1
  67. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts +0 -21
  68. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts.map +0 -1
  69. package/esm/endpoint-generators/with-schema-and-swagger-action.js +0 -2
  70. package/esm/endpoint-generators/with-schema-and-swagger-action.js.map +0 -1
  71. package/esm/swagger/generate-swagger-json.d.ts +0 -14
  72. package/esm/swagger/generate-swagger-json.d.ts.map +0 -1
  73. package/esm/swagger/generate-swagger-json.js +0 -108
  74. package/esm/swagger/generate-swagger-json.js.map +0 -1
  75. package/src/endpoint-generators/create-get-swagger-json-action.ts +0 -26
  76. package/src/endpoint-generators/with-schema-and-swagger-action.ts +0 -11
  77. package/src/swagger/generate-swagger-json.ts +0 -132
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.3.1] - 2026-03-10
4
+
5
+ ### ⬆️ Dependencies
6
+
7
+ - Updated `@furystack/core` dependency to the new major version
8
+
9
+ ## [12.3.0] - 2026-03-07
10
+
11
+ ### ⬆️ Dependencies
12
+
13
+ - Updated `@types/node` from `^25.3.1` to `^25.3.5`
14
+
15
+ ### 🗑️ Deprecated
16
+
17
+ - `generateSwaggerJsonFromApiSchema` - Use `generateOpenApiDocument` instead
18
+ - `CreateGetSwaggerJsonAction` - Use `CreateGetOpenApiDocumentAction` instead
19
+ - `WithSchemaAndSwaggerAction` - Use `WithSchemaAndOpenApiAction` instead
20
+
21
+ ### ✨ Features
22
+
23
+ ### OpenAPI Document Generation with Metadata
24
+
25
+ - Added `generateOpenApiDocument()` - Replaces `generateSwaggerJsonFromApiSchema` with enhanced output. Now extracts request body, query parameter, and header parameter schemas from `Validate()` wrappers. Accepts a `metadata` parameter to emit document-level metadata (servers, tags, contact, license, externalDocs, securitySchemes) and operation-level metadata (tags, deprecated, summary, description).
26
+
27
+ - Added `CreateGetOpenApiDocumentAction` - Replaces `CreateGetSwaggerJsonAction`, serves the generated OpenAPI document at `/openapi.json`
28
+
29
+ - Added `WithSchemaAndOpenApiAction<T>` - Replaces `WithSchemaAndSwaggerAction<T>`, extending a `RestApi` with `/schema` and `/openapi.json` endpoints
30
+
31
+ ### Metadata Round-Trip
32
+
33
+ Operation-level `tags`, `deprecated`, `summary`, and `description` from the `ApiEndpointDefinition` are now emitted into the generated OpenAPI document. When combined with `openApiToSchema()` from `@furystack/rest`, these fields survive the full round-trip.
34
+
35
+ ### ♻️ Refactoring
36
+
37
+ - Renamed `swagger/generate-swagger-json.ts` to `openapi/generate-openapi-document.ts` with backward-compatible re-exports
38
+ - Changed the auto-registered schema endpoint from `/swagger.json` to `/openapi.json` in `ApiManager`
39
+
40
+ ### 🧪 Tests
41
+
42
+ - Unit tests for `generateOpenApiDocument()` covering all HTTP methods (including HEAD, OPTIONS, TRACE, CONNECT), path/query/header parameter extraction, request body extraction, security, and operation metadata emission
43
+ - Round-trip integration tests importing OpenAPI JSON fixtures (basic example API, CRUD API, and advanced Pet Store API) and verifying structural fidelity through the `openApiToSchema() -> generateOpenApiDocument()` pipeline
44
+ - Type-level tests for `OpenApiToRestApi` with the advanced fixture covering `$ref` resolution, `allOf` composition, path parameters, request body extraction, and metadata
45
+ - Updated `validate.integration.spec.ts` to use the new `/openapi.json` endpoint
46
+
3
47
  ## [12.2.1] - 2026-03-06
4
48
 
5
49
  ### ⬆️ Dependencies
@@ -45,7 +45,7 @@ export interface ImplementApiOptions<T extends RestApi> {
45
45
  deserializeQueryParams?: (param: string) => any;
46
46
  /**
47
47
  * Adds an additional 'GET /schema' endpoint that returns the schema definitions of the API.
48
- * Also adds a 'GET /swagger.json' endpoint that returns the API schema in OpenAPI 3.0 (Swagger) format.
48
+ * Also adds a 'GET /openapi.json' endpoint that returns the API schema in OpenAPI 3.1 format.
49
49
  */
50
50
  enableGetSchema?: boolean;
51
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api-manager.d.ts","sourceRoot":"","sources":["../src/api-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAQnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,qBAAqB,CAAA;AAE/D,OAAO,iCAAiC,CAAA;AAExC,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,OAAO,IAAI;KACpD,OAAO,IAAI,MAAM,CAAC,GAAG;SACnB,IAAI,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,EAAE,OAAO,CAAA;SAAE,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;KACnH;CACF,CAAA;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,OAAO;IACpD;;OAEG;IACH,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC7B;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAA;IAC/C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAClE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,mBAAmB,EAAE;CACtC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG;IACzC,WAAW,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpE,CAAA;AAED,qBACa,UAAU;IACrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,UAAU;IAgBL,MAAM,CAAC,CAAC,SAAS,OAAO,EAAE,EACrC,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,sBAAsB,EACtB,eAAe,EACf,IAAI,EACJ,WAAW,EACX,OAAO,GACR,EAAE,mBAAmB,CAAC,CAAC,CAAC;;;;IA0ClB,iBAAiB,CAAC,OAAO,EAAE;QAChC,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,gBAAgB,EAAE,MAAM,EAAE,CAAA;KAC3B,GAAG,OAAO;IASX,OAAO,CAAC,qBAAqB;YAiBf,aAAa;YAkDb,SAAS;IAwCvB,iBACyB,aAAa,CAAe;CACtD"}
1
+ {"version":3,"file":"api-manager.d.ts","sourceRoot":"","sources":["../src/api-manager.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ import { ErrorAction } from './actions/error-action.js';
16
16
  import { NotFoundAction } from './actions/not-found-action.js';
17
17
  import { addCorsHeaders } from './add-cors-header.js';
18
18
  import { CreateGetSchemaAction } from './endpoint-generators/create-get-schema-action.js';
19
- import { CreateGetSwaggerJsonAction } from './endpoint-generators/create-get-swagger-json-action.js';
19
+ import { CreateGetOpenApiDocumentAction, CreateDeprecatedSwaggerRedirect, } from './endpoint-generators/create-get-openapi-document-action.js';
20
20
  import { HttpUserContext } from './http-user-context.js';
21
21
  import { readPostBody } from './read-post-body.js';
22
22
  import { ServerManager } from './server-manager.js';
@@ -46,7 +46,8 @@ let ApiManager = class ApiManager {
46
46
  GET: {
47
47
  ...api.GET,
48
48
  '/schema': CreateGetSchemaAction(api, name, description, version),
49
- '/swagger.json': CreateGetSwaggerJsonAction(api, name, description, version),
49
+ '/openapi.json': CreateGetOpenApiDocumentAction(api, name, description, version),
50
+ '/swagger.json': CreateDeprecatedSwaggerRedirect(api, name, description, version),
50
51
  },
51
52
  }
52
53
  : api;
@@ -1 +1 @@
1
- {"version":3,"file":"api-manager.js","sourceRoot":"","sources":["../src/api-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-manager.js","sourceRoot":"","sources":["../src/api-manager.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,8 @@ describe('Authenticate', () => {
27
27
  it('Should return 401 with WWW-Authenticate: Basic header when basic-auth provider is registered', async () => {
28
28
  await usingAsync(new Injector(), async (i) => {
29
29
  const isAuthenticatedAction = vi.fn(async () => false);
30
+ i.setExplicitInstance({ isAuthenticated: isAuthenticatedAction, getCurrentUser: async () => Promise.reject(new Error(':(')) }, IdentityContext);
30
31
  i.setExplicitInstance({
31
- isAuthenticated: isAuthenticatedAction,
32
- getCurrentUser: async () => Promise.reject(new Error(':(')),
33
32
  authentication: {
34
33
  authenticationProviders: [{ name: 'basic-auth', authenticate: async () => null }],
35
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.spec.js","sourceRoot":"","sources":["../src/authenticate.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authenticate.spec.js","sourceRoot":"","sources":["../src/authenticate.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { OpenApiDocument, RestApi } from '@furystack/rest';
2
+ import type { RestApiImplementation } from '../api-manager.js';
3
+ import { type RequestAction } from '../request-action-implementation.js';
4
+ /**
5
+ * Generates a RequestAction that retrieves the OpenAPI document from a FuryStack API implementation.
6
+ * When authentication providers are configured (via `useHttpAuthentication` / `useJwtAuthentication`),
7
+ * the generated document will include matching OpenAPI security schemes automatically.
8
+ *
9
+ * @param api - The API implementation from which to extract the schema.
10
+ * @returns A RequestAction that handles the GET request for the OpenAPI document.
11
+ */
12
+ export declare const CreateGetOpenApiDocumentAction: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
13
+ result: OpenApiDocument;
14
+ }>;
15
+ /**
16
+ * Generates a backward-compatible `/swagger.json` endpoint that serves the same OpenAPI document
17
+ * as `CreateGetOpenApiDocumentAction` but includes `Deprecation` and `Link` headers
18
+ * directing clients to use `/openapi.json` instead.
19
+ *
20
+ * @deprecated Use CreateGetOpenApiDocumentAction and `/openapi.json` instead.
21
+ */
22
+ export declare const CreateDeprecatedSwaggerRedirect: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
23
+ result: OpenApiDocument;
24
+ }>;
25
+ /** @deprecated Use CreateGetOpenApiDocumentAction instead */
26
+ export declare const CreateGetSwaggerJsonAction: <T extends RestApiImplementation<RestApi>>(api: T, name?: string, description?: string, version?: string) => RequestAction<{
27
+ result: OpenApiDocument;
28
+ }>;
29
+ //# sourceMappingURL=create-get-openapi-document-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-get-openapi-document-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,eAAe,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAK9D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAsBpF;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EACrF,KAAK,CAAC,EACN,aAAsB,EACtB,oBAAqE,EACrE,gBAAiB,KAChB,aAAa,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAgB3C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EACtF,KAAK,CAAC,EACN,aAAsB,EACtB,oBAAqE,EACrE,gBAAiB,KAChB,aAAa,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAmB3C,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,0BAA0B,GAzDQ,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,OAChF,CAAC,4DAIL,aAAa,CAAC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAoD4B,CAAA"}
@@ -0,0 +1,61 @@
1
+ import { getSchemaFromApi } from '../get-schema-from-api.js';
2
+ import { HttpAuthenticationSettings } from '../http-authentication-settings.js';
3
+ import { mapProvidersToSecuritySchemes } from '../openapi/auth-provider-to-security-scheme.js';
4
+ import { generateOpenApiDocument } from '../openapi/generate-openapi-document.js';
5
+ import { JsonResult } from '../request-action-implementation.js';
6
+ const getSecuritySchemesFromInjector = (injector) => {
7
+ try {
8
+ const settings = injector.getInstance(HttpAuthenticationSettings);
9
+ if (settings.authenticationProviders.length > 0) {
10
+ return mapProvidersToSecuritySchemes(settings.authenticationProviders);
11
+ }
12
+ }
13
+ catch {
14
+ /* auth not configured */
15
+ }
16
+ return undefined;
17
+ };
18
+ const buildOpenApiDoc = (endpoints, name, description, version, metadata) => generateOpenApiDocument({ api: endpoints, title: name, description, version, metadata });
19
+ /**
20
+ * Generates a RequestAction that retrieves the OpenAPI document from a FuryStack API implementation.
21
+ * When authentication providers are configured (via `useHttpAuthentication` / `useJwtAuthentication`),
22
+ * the generated document will include matching OpenAPI security schemes automatically.
23
+ *
24
+ * @param api - The API implementation from which to extract the schema.
25
+ * @returns A RequestAction that handles the GET request for the OpenAPI document.
26
+ */
27
+ export const CreateGetOpenApiDocumentAction = (api, name = 'FuryStack API', description = 'API documentation generated from FuryStack API schema', version = '1.0.0') => {
28
+ const { endpoints } = getSchemaFromApi({ api, name, description, version });
29
+ let cachedDoc;
30
+ return async ({ injector }) => {
31
+ if (!cachedDoc) {
32
+ const securitySchemes = getSecuritySchemesFromInjector(injector);
33
+ cachedDoc = buildOpenApiDoc(endpoints, name, description, version, securitySchemes ? { securitySchemes } : undefined);
34
+ }
35
+ return JsonResult(cachedDoc, 200);
36
+ };
37
+ };
38
+ /**
39
+ * Generates a backward-compatible `/swagger.json` endpoint that serves the same OpenAPI document
40
+ * as `CreateGetOpenApiDocumentAction` but includes `Deprecation` and `Link` headers
41
+ * directing clients to use `/openapi.json` instead.
42
+ *
43
+ * @deprecated Use CreateGetOpenApiDocumentAction and `/openapi.json` instead.
44
+ */
45
+ export const CreateDeprecatedSwaggerRedirect = (api, name = 'FuryStack API', description = 'API documentation generated from FuryStack API schema', version = '1.0.0') => {
46
+ const { endpoints } = getSchemaFromApi({ api, name, description, version });
47
+ let cachedDoc;
48
+ return async ({ injector }) => {
49
+ if (!cachedDoc) {
50
+ const securitySchemes = getSecuritySchemesFromInjector(injector);
51
+ cachedDoc = buildOpenApiDoc(endpoints, name, description, version, securitySchemes ? { securitySchemes } : undefined);
52
+ }
53
+ return JsonResult(cachedDoc, 200, {
54
+ Deprecation: 'true',
55
+ Link: '</openapi.json>; rel="successor-version"',
56
+ });
57
+ };
58
+ };
59
+ /** @deprecated Use CreateGetOpenApiDocumentAction instead */
60
+ export const CreateGetSwaggerJsonAction = CreateGetOpenApiDocumentAction;
61
+ //# sourceMappingURL=create-get-openapi-document-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-get-openapi-document-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-openapi-document-action.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  export * from './create-delete-endpoint.js';
2
2
  export * from './create-get-collection-endpoint.js';
3
3
  export * from './create-get-entity-endpoint.js';
4
+ export * from './create-get-openapi-document-action.js';
4
5
  export * from './create-get-schema-action.js';
5
6
  export * from './create-patch-endpoint.js';
6
7
  export * from './create-post-endpoint.js';
8
+ export * from './with-schema-and-openapi-action.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,qCAAqC,CAAA"}
@@ -1,7 +1,9 @@
1
1
  export * from './create-delete-endpoint.js';
2
2
  export * from './create-get-collection-endpoint.js';
3
3
  export * from './create-get-entity-endpoint.js';
4
+ export * from './create-get-openapi-document-action.js';
4
5
  export * from './create-get-schema-action.js';
5
6
  export * from './create-patch-endpoint.js';
6
7
  export * from './create-post-endpoint.js';
8
+ export * from './with-schema-and-openapi-action.js';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,qCAAqC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { ApiEndpointSchema, OpenApiDocument, RestApi } from '@furystack/rest';
2
+ /**
3
+ * Extends a RestApi with endpoints for both schema.json and openapi.json
4
+ */
5
+ export type WithSchemaAndOpenApiAction<T extends RestApi> = T & {
6
+ GET: {
7
+ '/schema': {
8
+ result: ApiEndpointSchema<T>;
9
+ headers: {
10
+ accept: 'application/schema+json';
11
+ };
12
+ };
13
+ '/openapi.json': {
14
+ result: OpenApiDocument;
15
+ headers: {
16
+ accept: 'application/json';
17
+ };
18
+ };
19
+ };
20
+ };
21
+ /** @deprecated Use WithSchemaAndOpenApiAction instead */
22
+ export type WithSchemaAndSwaggerAction<T extends RestApi> = WithSchemaAndOpenApiAction<T>;
23
+ //# sourceMappingURL=with-schema-and-openapi-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-schema-and-openapi-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/with-schema-and-openapi-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAElF;;GAEG;AACH,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC9D,GAAG,EAAE;QACH,SAAS,EAAE;YAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,yBAAyB,CAAA;aAAE,CAAA;SAAE,CAAA;QAC3F,eAAe,EAAE;YAAE,MAAM,EAAE,eAAe,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,kBAAkB,CAAA;aAAE,CAAA;SAAE,CAAA;KACtF,CAAA;CACF,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=with-schema-and-openapi-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-schema-and-openapi-action.js","sourceRoot":"","sources":["../../src/endpoint-generators/with-schema-and-openapi-action.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { SecuritySchemeObject } from '@furystack/rest';
2
+ import type { AuthenticationProvider } from '../authentication-providers/authentication-provider.js';
3
+ /**
4
+ * Maps FuryStack authentication providers to their corresponding OpenAPI security scheme objects.
5
+ * Known provider names (`basic-auth`, `cookie-auth`, `jwt-bearer`) are mapped to standard OpenAPI
6
+ * security schemes. Unknown provider names are silently ignored.
7
+ *
8
+ * Falls back to a default `cookieAuth` scheme if no known providers are found.
9
+ *
10
+ * @param providers - The list of active authentication providers
11
+ * @returns A record of OpenAPI security scheme name to SecuritySchemeObject
12
+ */
13
+ export declare const mapProvidersToSecuritySchemes: (providers: AuthenticationProvider[]) => Record<string, SecuritySchemeObject>;
14
+ //# sourceMappingURL=auth-provider-to-security-scheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider-to-security-scheme.d.ts","sourceRoot":"","sources":["../../src/openapi/auth-provider-to-security-scheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAA;AAiBpG;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,GACxC,WAAW,sBAAsB,EAAE,KAClC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CASrC,CAAA"}
@@ -0,0 +1,35 @@
1
+ const PROVIDER_SCHEME_MAP = {
2
+ 'basic-auth': {
3
+ schemeName: 'basicAuth',
4
+ scheme: { type: 'http', scheme: 'basic' },
5
+ },
6
+ 'cookie-auth': {
7
+ schemeName: 'cookieAuth',
8
+ scheme: { type: 'apiKey', in: 'cookie', name: 'session' },
9
+ },
10
+ 'jwt-bearer': {
11
+ schemeName: 'bearerAuth',
12
+ scheme: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
13
+ },
14
+ };
15
+ /**
16
+ * Maps FuryStack authentication providers to their corresponding OpenAPI security scheme objects.
17
+ * Known provider names (`basic-auth`, `cookie-auth`, `jwt-bearer`) are mapped to standard OpenAPI
18
+ * security schemes. Unknown provider names are silently ignored.
19
+ *
20
+ * Falls back to a default `cookieAuth` scheme if no known providers are found.
21
+ *
22
+ * @param providers - The list of active authentication providers
23
+ * @returns A record of OpenAPI security scheme name to SecuritySchemeObject
24
+ */
25
+ export const mapProvidersToSecuritySchemes = (providers) => {
26
+ const schemes = {};
27
+ for (const provider of providers) {
28
+ const mapping = PROVIDER_SCHEME_MAP[provider.name];
29
+ if (mapping) {
30
+ schemes[mapping.schemeName] = mapping.scheme;
31
+ }
32
+ }
33
+ return Object.keys(schemes).length > 0 ? schemes : { cookieAuth: PROVIDER_SCHEME_MAP['cookie-auth'].scheme };
34
+ };
35
+ //# sourceMappingURL=auth-provider-to-security-scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider-to-security-scheme.js","sourceRoot":"","sources":["../../src/openapi/auth-provider-to-security-scheme.ts"],"names":[],"mappings":"AAIA,MAAM,mBAAmB,GAAyE;IAChG,YAAY,EAAE;QACZ,UAAU,EAAE,WAAW;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;KAC1C;IACD,aAAa,EAAE;QACb,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;KAC1D;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE;KAChE;CACF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAAmC,EACG,EAAE;IACxC,MAAM,OAAO,GAAyC,EAAE,CAAA;IACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAA;AAC9G,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth-provider-to-security-scheme.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider-to-security-scheme.spec.d.ts","sourceRoot":"","sources":["../../src/openapi/auth-provider-to-security-scheme.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { mapProvidersToSecuritySchemes } from './auth-provider-to-security-scheme.js';
3
+ const createProvider = (name) => ({
4
+ name,
5
+ authenticate: async () => null,
6
+ });
7
+ describe('mapProvidersToSecuritySchemes', () => {
8
+ it('Should map basic-auth to HTTP Basic scheme', () => {
9
+ const result = mapProvidersToSecuritySchemes([createProvider('basic-auth')]);
10
+ expect(result.basicAuth).toEqual({ type: 'http', scheme: 'basic' });
11
+ });
12
+ it('Should map cookie-auth to apiKey cookie scheme', () => {
13
+ const result = mapProvidersToSecuritySchemes([createProvider('cookie-auth')]);
14
+ expect(result.cookieAuth).toEqual({ type: 'apiKey', in: 'cookie', name: 'session' });
15
+ });
16
+ it('Should map jwt-bearer to HTTP Bearer scheme', () => {
17
+ const result = mapProvidersToSecuritySchemes([createProvider('jwt-bearer')]);
18
+ expect(result.bearerAuth).toEqual({ type: 'http', scheme: 'bearer', bearerFormat: 'JWT' });
19
+ });
20
+ it('Should map multiple providers', () => {
21
+ const result = mapProvidersToSecuritySchemes([
22
+ createProvider('basic-auth'),
23
+ createProvider('cookie-auth'),
24
+ createProvider('jwt-bearer'),
25
+ ]);
26
+ expect(Object.keys(result).sort()).toEqual(['basicAuth', 'bearerAuth', 'cookieAuth']);
27
+ });
28
+ it('Should ignore unknown provider names', () => {
29
+ const result = mapProvidersToSecuritySchemes([createProvider('jwt-bearer'), createProvider('custom-unknown-auth')]);
30
+ expect(result.bearerAuth).toBeDefined();
31
+ expect(Object.keys(result)).toEqual(['bearerAuth']);
32
+ });
33
+ it('Should fall back to cookieAuth when no known providers are found', () => {
34
+ const result = mapProvidersToSecuritySchemes([createProvider('unknown-provider')]);
35
+ expect(result).toEqual({ cookieAuth: { type: 'apiKey', in: 'cookie', name: 'session' } });
36
+ });
37
+ it('Should fall back to cookieAuth for empty provider list', () => {
38
+ const result = mapProvidersToSecuritySchemes([]);
39
+ expect(result).toEqual({ cookieAuth: { type: 'apiKey', in: 'cookie', name: 'session' } });
40
+ });
41
+ });
42
+ //# sourceMappingURL=auth-provider-to-security-scheme.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider-to-security-scheme.spec.js","sourceRoot":"","sources":["../../src/openapi/auth-provider-to-security-scheme.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ApiDocumentMetadata, ApiEndpointSchema, OpenApiDocument } from '@furystack/rest';
2
+ /**
3
+ * Converts a FuryStack API schema to an OpenAPI 3.1 compatible document.
4
+ * Preserves metadata from ApiEndpointDefinition and ApiDocumentMetadata when available.
5
+ */
6
+ export declare const generateOpenApiDocument: ({ api, title, description, version, metadata, }: {
7
+ api: ApiEndpointSchema["endpoints"];
8
+ title?: string;
9
+ description?: string;
10
+ version?: string;
11
+ metadata?: ApiDocumentMetadata;
12
+ }) => OpenApiDocument;
13
+ /** @deprecated Use generateOpenApiDocument instead */
14
+ export declare const generateSwaggerJsonFromApiSchema: ({ api, title, description, version, metadata, }: {
15
+ api: ApiEndpointSchema["endpoints"];
16
+ title?: string;
17
+ description?: string;
18
+ version?: string;
19
+ metadata?: ApiDocumentMetadata;
20
+ }) => OpenApiDocument;
21
+ //# sourceMappingURL=generate-openapi-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-openapi-document.d.ts","sourceRoot":"","sources":["../../src/openapi/generate-openapi-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EAEjB,eAAe,EAIhB,MAAM,iBAAiB,CAAA;AAoCxB;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,iDAMrC;IACD,GAAG,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAC/B,KAAG,eAqIH,CAAA;AAED,sDAAsD;AACtD,eAAO,MAAM,gCAAgC,oDA9I1C;IACD,GAAG,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAC/B,KAAG,eAwImE,CAAA"}
@@ -0,0 +1,144 @@
1
+ const PATH_ITEM_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'];
2
+ const isPathItemMethod = (method) => PATH_ITEM_METHODS.includes(method);
3
+ const getSubSchema = (schema, schemaName, property) => {
4
+ const typedSchema = schema;
5
+ if (!typedSchema?.definitions)
6
+ return undefined;
7
+ const definition = typedSchema.definitions[schemaName];
8
+ if (!definition?.properties?.[property])
9
+ return undefined;
10
+ return {
11
+ subSchema: definition.properties[property],
12
+ isRequired: definition.required?.includes(property) ?? false,
13
+ };
14
+ };
15
+ /**
16
+ * Converts a FuryStack API schema to an OpenAPI 3.1 compatible document.
17
+ * Preserves metadata from ApiEndpointDefinition and ApiDocumentMetadata when available.
18
+ */
19
+ export const generateOpenApiDocument = ({ api, title = 'FuryStack API', description = 'API documentation generated from FuryStack API schema', version = '1.0.0', metadata, }) => {
20
+ const doc = {
21
+ openapi: '3.1.0',
22
+ info: {
23
+ title,
24
+ version,
25
+ description,
26
+ ...(metadata?.summary ? { summary: metadata.summary } : {}),
27
+ ...(metadata?.termsOfService ? { termsOfService: metadata.termsOfService } : {}),
28
+ ...(metadata?.contact ? { contact: metadata.contact } : {}),
29
+ ...(metadata?.license ? { license: metadata.license } : {}),
30
+ },
31
+ jsonSchemaDialect: 'https://spec.openapis.org/oas/3.1/dialect/base',
32
+ servers: metadata?.servers ?? [{ url: '/' }],
33
+ tags: metadata?.tags ?? [],
34
+ ...(metadata?.externalDocs ? { externalDocs: metadata.externalDocs } : {}),
35
+ paths: {},
36
+ components: {
37
+ schemas: {},
38
+ securitySchemes: metadata?.securitySchemes ?? {
39
+ cookieAuth: {
40
+ type: 'apiKey',
41
+ in: 'cookie',
42
+ name: 'session',
43
+ },
44
+ },
45
+ },
46
+ };
47
+ const defaultSchemeNames = metadata?.securitySchemes ? Object.keys(metadata.securitySchemes) : ['cookieAuth'];
48
+ for (const [methodKey, paths] of Object.entries(api)) {
49
+ for (const [path, definition] of Object.entries(paths)) {
50
+ const normalizedPath = path.replace(/:([^/]+)/g, '{$1}');
51
+ if (!doc.paths[normalizedPath]) {
52
+ doc.paths[normalizedPath] = {};
53
+ }
54
+ const pathParams = Array.from(path.matchAll(/:([^/]+)/g), (m) => m[1]);
55
+ const parameters = pathParams.map((param) => ({
56
+ name: param,
57
+ in: 'path',
58
+ required: true,
59
+ description: `Path parameter: ${param}`,
60
+ schema: { type: 'string' },
61
+ }));
62
+ const queryInfo = getSubSchema(definition.schema, definition.schemaName, 'query');
63
+ if (queryInfo) {
64
+ const querySchema = queryInfo.subSchema;
65
+ if (querySchema?.properties) {
66
+ for (const [paramName, paramSchema] of Object.entries(querySchema.properties)) {
67
+ parameters.push({
68
+ name: paramName,
69
+ in: 'query',
70
+ required: querySchema.required?.includes(paramName) ?? false,
71
+ schema: paramSchema,
72
+ });
73
+ }
74
+ }
75
+ }
76
+ const headerInfo = getSubSchema(definition.schema, definition.schemaName, 'headers');
77
+ if (headerInfo) {
78
+ const headerSchema = headerInfo.subSchema;
79
+ if (headerSchema?.properties) {
80
+ for (const [headerName, headerParamSchema] of Object.entries(headerSchema.properties)) {
81
+ parameters.push({
82
+ name: headerName,
83
+ in: 'header',
84
+ required: headerSchema.required?.includes(headerName) ?? false,
85
+ schema: headerParamSchema,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ const operationSecurity = definition.securitySchemes
91
+ ? definition.securitySchemes.map((name) => ({ [name]: [] }))
92
+ : definition.isAuthenticated
93
+ ? defaultSchemeNames.map((name) => ({ [name]: [] }))
94
+ : [];
95
+ const method = methodKey.toLowerCase();
96
+ const operation = {
97
+ summary: definition.summary ?? `${methodKey} ${path}`,
98
+ description: definition.description ?? `Endpoint for ${path}`,
99
+ operationId: `${method}${path.replace(/\//g, '_').replace(/:/g, '').replace(/-/g, '_')}`,
100
+ security: operationSecurity,
101
+ parameters,
102
+ ...(definition.tags?.length ? { tags: definition.tags } : {}),
103
+ ...(definition.deprecated ? { deprecated: true } : {}),
104
+ responses: {
105
+ '200': {
106
+ description: 'Successful operation',
107
+ content: {
108
+ 'application/json': {
109
+ schema: definition.schemaName
110
+ ? { $ref: `#/components/schemas/${definition.schemaName}` }
111
+ : { type: 'object' },
112
+ },
113
+ },
114
+ },
115
+ '401': { description: 'Unauthorized' },
116
+ '500': { description: 'Internal server error' },
117
+ },
118
+ };
119
+ const bodyInfo = getSubSchema(definition.schema, definition.schemaName, 'body');
120
+ if (bodyInfo) {
121
+ const requestBody = {
122
+ required: bodyInfo.isRequired,
123
+ content: {
124
+ 'application/json': {
125
+ schema: bodyInfo.subSchema,
126
+ },
127
+ },
128
+ };
129
+ operation.requestBody = requestBody;
130
+ }
131
+ if (definition.schema && definition.schemaName) {
132
+ doc.components.schemas[definition.schemaName] = definition.schema;
133
+ }
134
+ const pathItem = doc.paths[normalizedPath];
135
+ if (isPathItemMethod(method)) {
136
+ pathItem[method] = operation;
137
+ }
138
+ }
139
+ }
140
+ return doc;
141
+ };
142
+ /** @deprecated Use generateOpenApiDocument instead */
143
+ export const generateSwaggerJsonFromApiSchema = generateOpenApiDocument;
144
+ //# sourceMappingURL=generate-openapi-document.js.map